Hejto.pl

#frontend

5
109

Cześć Wam


Dzisiaj ciekawostka o ReactJs numer #3


> Wirtualny DOM (Virtual DOM) w ReactJS przynosi wiele korzyści, lecz ma również wady! Jakie?


Więcej na ten temat: https://programystics.com/reactjs/wirutualny-dom-nie-taki-bez-wad/


ps te ciekawostki nie omawiają tematów dogłębnie, mają jedynie zachęcić osoby do przyglądnięcia się reactjs tak, wiem, doskonały temat na zachętę dot. WAD


pss jeśli chcesz podzielić się doświadczeniami na w/w to śmiało, zapraszam będzie mi bardzo miło!


#react #reactjs #programowanie #javascript #typescript #frontend

Zaloguj się aby komentować

Tomasz Nikodem Hajto, ps. „Gianni” [...] – Ja kupuję tylko firmy Gianni Versace – powiedział i w ten sposób został na długie lata „Giannim”


Lubię przekazywać nazwami funkcji / podprojektów jakieś skojarzenie w formie easter-egga. Mam nadzieję, że śmieszne. #lajko <---- tag z #hejto dad jokes


No więc dzisiaj - frontend z użyciem Vue (nazwany właśnie `gianni` - sprawdź repo, daj gwiazdkę https://github.com/wombatDaiquiri/lajko ). Znowu pojęcie o tym jak działa framework mam mgliste. Ale działa. Jak chcielibyście mnie poprawić, to zapraszam do komentarzy


Jak po sznurku, z tutoriala https://vuejs.org/guide/quick-start.html#creating-a-vue-application


> npm create vue@latest


tutaj poklikałem co mi się wydawało sensowne na czuja xD


> Project name: … gianni

> Add TypeScript? … No

> Add JSX Support? … No

> Add Vue Router for Single Page Application development? … No

> Add Pinia for state management? … No

> Add Vitest for Unit Testing? … No

> Add an End-to-End Testing Solution? › No

> Add ESLint for code quality? Yes

> Add Prettier for code formatting? Yes


no więc mamy folder z przykładową apką vue.


> cd gianni

> npm run dev


wchodzimy z przeglądarki na http://localhost:5173/ - no coś tam się wyświetla.


ponieważ jestem totalnym beztalenciem graficznym, to po prostu odtworzę wygląd z hejto.


Efekt końcowy na screenie poniżej;


No więc jak teraz sobie użyć apki? (tutaj jak otworzyć terminal: ) Otóż musicie;


1. odpalić `nodejs scrape.js` żeby pobrać dane z hejto

2. skopiować nazwę pliku utworzonego w data-snapshots ( będzie wyglądała mniej-więcej tak: 2023-09-21T2331.109Z.json )

2.1. (już w tym momencie możecie sobie przejść do kroku X ale wtedy dostaniecie normalne hejto tylko brzydsze)

3. odpalić skrypt do przesortowania postów (możecie odpalić oba)

3.1. `nodejs process.js --cmd=likes_total --source=data-snapshots/2023-09-21T2331.109Z.json`

3.2. `nodejs process.js --cmd=comment_likes_sum --source=data-snapshots/2023-09-21T2331.109Z.json`

4. wskazać w pliku ./gianni/src/App.vue skąd pobrać posty ( `import posts from '../../data-processed/cls/2023-09-21T2331.109Z.json';` )

5. wejść do folderu gianni: `cd gianni`

6. odpalić serwer z frontendem xD kiedyś se o tym też pogadamy ( `npm run dev` )

7. wchodzicie na http://localhost:5173/ i widzicie brzydkie hejto, ale z postami być może w innej kolejności niż na hejto

8. zauważcie, że tylko raz kopiowaliśmy nazwę i wszędzie ją podmieniliśmy - to oczywiście super kandydat na automatyzację/flagę. Ale napisanie aplikacji w taki sposób to albo zdrowy rozsądek albo doświadczenie. Nie chcę na Was wywierać presji więc pozwolę sobie być nieskromny.


wszystkie te kroki można zautomatyzować - ale automatyzowanie czas. a moja doba ma jedynie 24 godziny, tak samo jak Wasze. Więc mam jeszcze dużo tematów na posty.


#programowanie #javascript #frontend #webdev


inb4 czemu nie czysty js: bo wymaga więcej tłumaczenia a tutaj można robić "cargo cult" i używać magicznych formułek do tworzenia interfejsów


permalink do repo: https://github.com/wombatDaiquiri/lajko/tree/v0.0.3

7cde359b-b5d1-4331-af81-b6f1062b08f3

Zaloguj się aby komentować

#lajko , html, parsowanie, pierwszy niedoszły cross w historii hejto xD


w tym odcinku opowiem czym odpowiada serwer na tak zwane "zapytanie HTTP" i jak z tego zrobić "czyste dane" w postaci wpisów i komentarzy.


jeśli irytują Was przekleństwa albo nieformalny styl pisania, a chcielibyście mieć taki efekt jak w moim repozytorium, to moglibyście np. zapłacić @letsscrape żeby zrobili to za Was. chciałem również polecić stronkę i tutoriale tego użytkownika, ale stronka nie istnieje a tutoriale zwracają błąd xD


Moje przeczucie i doświadczenie podpowiada sformułowanie następującego twierdzenia;


prawdopodobieństwo odniesienia sukcesu w robieniu czegokolwiek rośnie wykładniczo względem czasu zajmowania się zagadnieniem.


źródło: instytut badań z d⁎⁎y vel moja intuicja ( ͡° ͜ʖ ͡°) "wykładniczość" jest figurą retoryczną a purystom znowu c⁎⁎j w d⁎⁎ę.


długi grafomański wstęp za nami, krótka treść przed nami.


Hejto w odpowiedzi na zapytanie HTTP odpowiada plikiem zapisanym w tak zwanym "HTML". Definicja jest taka, że "HTML" to język ZNACZNIKI które cośtam cośtam, ale c⁎⁎j Was to obchodzi. Zastąpimy to przykładami i chłopskim rozumem, bo obchodzi nas bardzo mały wycinek zagadnienia.


No więc w HTML istnieją wspomniane ZNACZNIKI. I te znaczniki mogą "zawierać" w sobie inne znaczniki. Jak foldery na Twoim komputerze.


Póki co zajmijmy się tekstem który widzimy - znajduje się on niejako "wewnątrz" znacznika który nie zawiera w sobie innych znaczników. Jeśli będziemy w stanie wskazać z którego znacznika chcemy wyciągnąć tekst - możemy zrobić takie rzeczy jak wyciągnięcie autora wpisu albo treści wpisu, a także jego lajków.


Więc brakuje nam jednej zasadniczej umiejętności - wskazywania znaczników. Na całe szczęście ktoś już wcześniej miał ten problem i stworzył "selektory" - tu macie pełną listę na stronce ZS7 w Wałbrzychu. Pozdrawiam Wałbrzych ( ͡° ͜ʖ ͡°) http://zs7.walbrzych.pl/HTML-CSS-JS/css_selektory.html a wyjaśnienie po angielsku na stronie W3Schools https://www.w3schools.com/cssref/css_selectors.php wraz z demem na żywo - https://www.w3schools.com/cssref/trysel.php


Jeśli chcieliście to wszystko zapamiętać, to w mojej ocenie jesteście pie⁎⁎⁎⁎⁎ięci xD


Jak sobie zobaczycie plik `scrape.js` to ja w nim używam tylko kilku tricków i one Wam wystarczą prawie wszędzie;

- wybranie znacznika (np. $('article') albo $('div'))

- użycie metody `each`, która wywołuje funkcję podaną jako argument kolejno na każdym elemencie który został wybrany (takim elementem będą na przykład kolejne znaczniki `article` w przypadku selektora `$('article')`).

- użycie metody `children` która wybiera wszystkie dzieci wybranego elementu

- sprawdzenie z którym elementem mam do czynienia za pomocą instrukcji `if` i pominięcie tych, które mnie nie interesują oraz pobranie zawartości z tych, które mnie interesują

- użycie metody `text` która zwraca tekst znajdujący się wewnątrz wybranego elementu

- użycie selektora `.` która wybiera wszystkie znaczniki mające daną klasę. Czasem w połączeniu z selektorem znacznika, np. `.find('div.parsed.text-sm')` - znalezienie znaczników `div` które mają co najmniej dwie klasy które wybrałem - `parsed` i `text-sm`

- użycie selektora ` ` która wybiera wszystkie które jest wewnątrz - na przykład `.find('div.w-full img')` wskaże wszystkie znaczniki `img` które są wewnątrz znaczników `div` które mają klasę `w-full`.


W tym momencie uważny czytelnik powinien ciągle mieć conajmniej dwa pytania (a przynajmniej te wydają mi się istotne i na nie odpowiem - jeśli masz inne, zapraszam do komentarzy);

- skąd mam wiedzieć jaki selektor wybrać?

- czym do ciężkiej k⁎⁎wy jest klasa?


Łatwe znalezienie selektora wymaga posiadania przeglądarki (w moim przypadku Google Chrome po angielsku - może jakaś dobra dusza napisze co kliknąć w Polskiej wersji - natomiast w każdej przeglądarce istnieje taka funkcja i działa podobnie). Klikamy prawym przyciskiem myszy na element który nas interesuje (np. treść wpisu - obrazek 1) a następnie wybieramy ostatnią opcję (u mnie "Inspect", po Polsku chyba "Zbadaj"?) i szukamy jakiegoś "charakterystycznego wzorca" w nowym okienku które nam się otworzy (obrazek 2 - klasy `.text-sm` i `parsed` - sprawdziłem i wyszło, że faktycznie trafiają tylkow treść wpisu). Zauważanie tych wzorców będzie Ci szło lepiej z czasem. W pliku scrape.js używam około 20 selektorów. Napiszesz takich parserów dziesięć i ciężko Ci będzie takich wzorców nie zauważać.


Na koniec używamy jakiejś biblioteki żeby wykonać akcję "pobierz zawartość selektora". W moim przypadku jest to `cheerio` bo wyskoczyła jako pierwsza jak wpisałem `javascript html parsing` xD (nie wiem czy nie powinienem o tym napisać na początku ale to jest właściwie istotny detal a nie "mięso" artykułu).


comment.content = $(el).find('div.parsed.text-sm').text();


A wspomniana "klasa" to po prostu tak zwany "artybut" o nazwie "class" - widać to dobrze na obrazku 2. Istotnym jest na zakończenie dodać, że artybuty również możemy pobierać - w ten sposób na przykład zapisuję linki do avatarów pobierając atrybut `src` znacznika `img`;


comment.avatar = $(el).find('img').first().attr('src');


Chciałbym niebawem pobawić się w sortowanie i wyświetlanie wpisów wymyślając różne algorytmy i sprawdzając czy któryś feed szczególnie mi się podoba. Jednak aby to zrobić potrzebuję sposobu na wyświetlenie wpisów w jakiejś formie graficznej, którą będzie mi wygodnie konsumować. Zajmiemy się więc tworzeniem "prawdziwego frontendu" i poznawaniem jakiejś "biblioteki do widoków".


Nadgorliwym proponuję poczytanie na przykład o vue.js ( https://vuejs.org/ ).


Ambitnym, kompetentnym i pie⁎⁎⁎⁎⁎⁎ętym proponuję poczytanie o innej technologii której nie znają albo która najbardziej do nich przemawia - do wyboru;

- react.js ( https://reactjs.org/ ) - z tego będzie korzystało kolejne pokolenie profesorów na uczelniach jeśli kiedyś wyewoluują poza ręczne pisanie HTMLa xD

- angular.js ( https://angular.io/ ) - ja nie korzystałem bo nie mam tego hasła w moim 'buzzword bingo' technologii o których się rozmawia przy piwie

- tailwind.css ( https://tailwindcss.com/ ) - reklamuje się sloganem “Best practices” don’t actually work. Więc brzmi conajmniej na rzecz wartą uwagi.

- bootstrap ( https://getbootstrap.com/ ) - nie wiem czy dalej się używa bootstrap, ale widziałem kiedyś gościa co używał i szybko robił widoczki, więc pewnie spoko.

- jquery ( https://jquery.com/ ) - kiedyś pisałem całkiem skomplikowaną stronkę używając jquery. Okazało się że wnioski do których doszedłem w bólu zostały już wysnute przez mądrzejszych ludzi i opakowane w `vue` i `react`. Mam nadzieję że pracownicy naukowi są już na tym etapie, ale szczerze mówiąc to nadzieja taka jak na zwycięstwo Polskich piłkarzy ( ͡° ͜ʖ ͡°)


#programowanie #javascript #frontend #webdev #tworczoscwlasna

96876fec-f25c-4bfa-969b-fa1fb6f465f8
6b5ce30b-c748-4066-b32f-d98654990a45

@koszotorobur 


A do robienia stron SvelteKit.


Cały czas się zastanawiam - co by mi dało korzystanie z innego frameworka/silnika czy co to jest? Na potrzeby lajko wystarczyłoby jQuery ale to myślę że jest za stare.

@wombatDaiquiri - spróbować nie zaszkodzi raczej?

Ja myślałem, że to jakaś kupa jest jak pojawiło się po raz pierwszy w Stack Overflow survey - ale po sprawdzeniu dla mnie okazało się strzałem w dziesiątkę

Zaloguj się aby komentować

Zaloguj się aby komentować

Marzy mi się [browser.storage.sync](Marzy mi się browser.storage.sync , ale dla webu.

Że można przechowywać i synchronizować dane ze strony internetowej, poprzez konto przeglądarki internetowej, które synchronizuje ustawienia i dodatki przeglądarki internetowej.

Można by to też przesunąć do poziomu synchronizacji poprzez konto systemu operacyjnego.


To ma się synchronizować przez usługę synchronizacji od Mozilli na Firefox i od Google na Chrome.

Bez zakładania konta przez usera, a od strony dewelopera, bez zarządzania tym storage, po prostu zapisujesz do asynchronicznego storage, i nie myślisz o tym więcej, backendu nie musisz mieć.


Dla WebExtensions działa. Z założenia byłby to niewielki storage.

#webextensions #webdev #frontend #backend #programowanie

64c27461-958c-4c69-8d8d-31d003fe2046

@fewtoast tzn. user tracking będzie się robiło przez storage.sync po stronie admina każdej stronki? Super obejście ustawy o pytania o ciastka - robimy synchronizowane ciastka ale inaczej je nazwiemy xD


groźne. A to pierwsze zastosowanie które mi przyszło do głowy xD

@wombatDaiquiri Masz na myśli, że miałoby być zapisywane poza własną stroną?

Nie, tak by nie miało być, czemu by tak miało być.


To by miało zastąpić mini bazy danych, tylko out of the box, wygodniej, szybciej.

@fewtoast na swojej stronie. Zapisuję jako ustawienie "to był gość o ID 2136". Jeśli na innym urządzeniu znajdę to ID, to wiem że przegląda mnie ta sama osoba, mimo tego że np. nie jest zalogowana, a nawet jest na innym urządzeniu. Jako administrator strony np. Hejto.

Zaloguj się aby komentować

Mirki dawno nie bylem na żadnej rozmowie, jak wygląda rekrutacja na mida react deva? Miał ktoś może ostatnio? Podzieliłby się wrażeniami/pytaniami?


#programowanie #frontend

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Zaloguj się aby komentować

Nie działa, bo #programista15k kosztuje 30k.


Kto i z czego ma za niego zapłacić?


E-biznes w Polsce ma przejebane, przychody polskie, koszty wynagrodzeń zachodnie.

@Yossarian Ale działało, o to mi chodzi. Nie mam pretensji do chłopaków od Hejto bo wiadomo że robią go po godzinach.


Tak samo jak działało [linkowanie]( https://www.wp.pl )


# H1

## H2

### H3


Bold **bold text** Italic *italicized text*


Blockquote

> blockquote


Ordered List


1. First item

2. Second item

3. Third item


Zupełnie to wyłączyli, nie wiem po co.

@Opornik ten biedamarkdown co był i formatował jedynie cytaty i ew. nowe linie przynajmniej wykorzystywany był przez sporą część użytkowników


wcisnęli na siłę wysiwyga i wyjebane


żeby chociaż dali opcjonalną obsługę markdown, ale jest lipiec i od jakichś 4 miesięcy ilość poprawek usprawniających korzystanie z serwisu wynosi słownie ZERO ( ͡° ͟ʖ ͡°)

Zaloguj się aby komentować

Potrzebuję materiały na temat testów jednostkowych do #angular

Polecacie jakieś konkretne materiały i/lub podręczniki?


#programowanie #frontend #programista15k #webdev

@rayros ja nie ogarniam ludzi, dokumentacja ma najczęściej wszystko czego potrzeba i jest dobrze opisana a i tak ludzie chodzą i szukają materiałów

@Anon karma i jasmine - jest nawet w dokumentacji angulara https://angular.io/guide/testing tam jest chyba wszystko by móc zacząć, a jak potrzeba jakiejś głębszej wiedzy, to można zajrzeć na https://jasmine.github.io/

Może jeszcze przydać się cypress - to jest do E2E testów, ale może też się przyda.

Zaloguj się aby komentować

Teraz chciałbym abyś się leciutko skupił.

Powiedz mi, czy rozumiesz taką koncepcję.


Ja nadal jestem za koncepcją: jedno okno, wiele kart przeglądarki internetowej.

Jako opcjonalne API do wykorzystania.

Że w ramach jednej domeny(?), zamiast tworzyć kolejnych okien w kolejnych kartach (na zasadzie jedno okno, jedna karta), otwierać tylko "wydmuszkę", pusty element GUI w przeglądarce, którego kliknięcie wywołuje callback w jednym jedynym oknie.

To by działało jak History API, tylko dla kart, że przełączanie między kartami tylko uruchamia callback, zamiast przeładowywać okna do viewport.

Analogia do History API: Z History API, nie ładuje się poprzedniego okna po kliknięciu wstecz, tylko odpala callback który przeładowuje samą treść, w tym samym oknie.


Z koncepcją Jedno Okno, Wiele Kart Przeglądarki Internetowej:

* Można tworzyć efekty przejścia, animacje, podczas przełączania się między kartami tej samej domeny - nawet View Transitions API tego nie potrafi sam z siebie.

* Masz mniej okien otwartych na raz, bo podmienia się tylko kontent w jednym jedynym oknie, a nie całe okno. Zajmuje mniej miejsca.

* Nie potrzeba specjalnej komunikacji między oknami (tej samej domeny), bo komunikacja i synchronizacja jest bezpośrednia i doskonała.

* Idealne pod Single Page Aplication - przełączanie kartami przeglądarki przełącza tylko stan aplikacji, zamiast przełączać między wieloma kopiami aplikacji

* Nowa karta szybciej się otworzy i załaduje, bo doładowuje się tylko niewielki kawałek treści, a nie cała strona.


#webdev #frontend #programowanie #przegladarki #firefox #chrome #edge #opera #safari #w3c #api

337e731d-1df8-4760-8d30-8386ecf7c18e

Zaloguj się aby komentować

Zaloguj się aby komentować

AI, zamieniający obrazek na schemat blokowy?


AI, który przetwarza taki obrazek na SVG a lepiej na coś bardziej semantycznego jak mermaid - jest taki?


Np. input taki z obrazka i output kod SVG lub kod mermaid.


I też do zwykłych wzorów jak ten, na jakiś LaTeX - http://autonom.edu.pl/publikacje/mazur_marian/cybernetyka_i_charakter/wzory/wzor5.4.png


#programowanie #frontend #backend #webdev #javascript #devtools


#sztucznainteligencja #ai #artificialintelligence #machinelearning #uczeniemaszynowe #si #chatgpt

14ea6c5f-6866-4df8-85de-7cb7cdaeb711

Zaloguj się aby komentować

Zaloguj się aby komentować

Powinno się pomyśleć nad rodzajem cookies/storage, które z założenia mogą być synchronizowane między urządzeniami, za pomocą Firefox Sync, konta Google do synchronizacji Chrome.


Bo wiadomo, że nie wszystkie dane z cookies/storage itd. warto synchronizować, ale niektóre by można, np. podstawowe preferencje, zalogowanie.


Tak jak w WebExtensions jest browser.storage.sync:


https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync


Zaleta, że robisz appke webową, i możesz olać kwestię synchronizacji pewnych danych, i masz to z automatu.


Taki odpowiednik tych usług z Google Play.


Tylko bardziej zdecentralizowane, bo oparte o przeglądarkę.


Może w ramach Project Fugu?


#firefox #chrome #w3c #webdev #frontend #javascript #programowanie

Zaloguj się aby komentować

Czego najlepiej użyć do prostej stronki w TypeScript, która ma niemal pusty index.html. Więc vue.js, react itd odpadają.


Kiedyś miałem w npm zrobiony skrypt typu build, który odpalał tsc i jakieś minify. Ale to było pewnie 3 lata temu albo i więcej, więc pewnie można fajniej.


#typescript #frontend #programowanie

Zaloguj się aby komentować

Zaloguj się aby komentować

@Anon przede wszystkim praca to praca, musisz być "zadowolony" ze swojego kodu - jak na swój poziom. No i sugeruje poświęcić dużo czasu (przynajmniej na początku) na szlifowanie umiejętności, same do głowy nie wejdą.

Zaloguj się aby komentować

Zaloguj się aby komentować