tłumaczę jak lajko sortuje posty żeby stworzyć inaczej posegregowaną listę
^ to na górze tak napisałem, bo tzw. slug (sprawdźcie jak wejdziecie w posta to jak wygląda adres w przeglądarce) generuje się na podstawie początku wpisu. Wydaje mi się, że to może być istotne dla SEO, a mnie nie boli. Może zadziała jako darmowy clickbait.
jeśli nie wiesz o co chodzi, albo nie wiesz co to terminal, to tutaj post wprowadzający: https://www.hejto.pl/wpis/programowanie-javascript-tworczoscwlasna-gruparatowaniapoziomu-lajko-lt-moj-tag-?commentId=13977332-7772-4f89-a067-d76784aa5c18
Ale dzisiaj nie o tym - dzisiaj o tym jak to się dzieje, że mamy tablicę postów posortowaną chronologicznie a potem robimy z niej topkę.
Wszystko dzieje się w pliku process.js i do wszystkiego doszedłem googlując, bo na początku prawie nie wiedziałem co się dzieje (poza typowymi koncepcjami z programowania jak `if` albo `for`).
Pierwsza ważna uwaga - to nie jest tak, że napisanie tego kodu to jest to samo co napisanie 62 linijek tekstu. Kod który widzicie, to efekt prawdopodobnie ~8 godzin pracy w sumie na dwa pliki (średnio 4h na plik) i parę miesięcy rozważania różnych projektów i rozwiązań. Ale o pracy z ADHD też innym razem xD
No więc jak już napisałem jak trudno było napisać, to mam nadzieję że było warto i będzie łatwo zrozumieć.
Kawałek po kawałku;
- te linijki z `require` są po to żeby móc używać funkcji które ktoś inny napisał. W moim przypadku potrzebuję jeszcze poza "standardem języka";
- czytania i zapisywania plików (moduł `fs`)
- procesowania argumentów z wiersza poleceń (terminala) (moduł `yargs`).
- Ten drugi moduł to wynika z mojego doświadczenia - teraz mogę sobie wpisać który plik chcę przesortować (`--source=data-snapshots/{czas_w_ktorym_odpaliliscie_scrapejs}.json`) i według jakiego "algorytmu" sortowania ()
Oba znalazłem po prostu googlując 'how to <tutaj to co chciałem zrobić np. parse command line arguments in nodejs>'.
Potem to już było metodą prób i błędów - sprawdzam czy istnieje folder na wyniki, jak nie to tworzę. Sprawdzam komendę, sortuję z pomocą wybranego KOMPARATORA (zaraz o tym) i zapisuję do podfolderu stworzonego dla wybranego algorytmu (funkcja `savePosts`).
No dobra, to teraz o tym czym jest KOMPARATOR. Może słyszeliście kiedyś, że naukę programowania powinno się zacząć od algorytmów sortowania. To prawda. Ale nie dlatego, że są często używane, tylko dlatego że pokazują że jest dużo metod na wykonanie nawet prostej czynności, a w dodatku można je porównywać. A to porównywanie można łatwo obrazować.
Ale to nie studia tylko portal ze śmiesznymi papieżami xD
Na portalach z papieżami oraz w życiu nie pisze się funkcji sortujących, a co najwyżej KOMPARATORY - czyli funkcje które przyjmują dwa argumenty i zwracają informację który z nich jest mniejszy lub większy - czyli w jakiej kolejności względem siebie powinny się znajdować w wynikowej tablicy.
W przypadku JavaScriptu (co też znalazłem w necie xD
https://www.w3schools.com/js/js_array_sort.asp sekcja "Numeric Sort") powinniśmy zwrócić liczbę ujemną, zero albo liczbę dodatnią;
- ujemną jeśli obiekt który jest pierwszym argumentem (postA) powinien być w wynikowej tablicy PRZED drugim (postB)
- dodatnią jeśli obiekt który jest pierwszym argumentem (postA) powinien być w wynikowej tablicy ZA drugim (postB)
- zero, jeśli obiekty są równe
Jak mi nie wierzycie to możecie sprawdzić na kartce, ale jest nawet w przykładach na podanej stronie, że jak mamy dwie liczby A i B wynik operacji `A - B` da nam w wynikowej tablicy liczby posortowane rosnąco.
I teraz żeby to było użyteczne dla nas, to napisałem dwie funkcje. Najpierw zobaczmy prostszą - `compareByCommentLikes`. A właściwie `commentLikes`, bo to ta funkcja liczy "wartość posta". Otóż `commentLikes` przechodzi po wszystkich komentarzach i dodaje ich lajki do `likeSum` a gdy przetworzy już wszystkie komentarze, to zwaca `likeSum`.
Na tej podstawie napisałem kolejną funkcję - `compareByLikesTotal`. Co sprytniejsi mogli zauważyć, że rożni się ona jedynie dodaniem do sumy lajków z komentarzy lajków oryginalnego wpisu. Tak więc licząc wartość posta dla tego "filtra" dodam sobie lajki oryginalnego wpisu do wartości posta która jest liczona przez poprzednio opisaną "funkcję wartości" - `commentLikes`.
Z pozostałych sztuczek - jak się napisze `${cos} i reszta tekstu`, to zamiast `${cos}` zostanie wstawiona wartość zmiennej `cos`. Tak więc następujący kod;
let cos = "stary leży"
console.log(`${cos} najebany na wersalce`)
wypisze w konsoli `stary leży najebany na wersalce`. pdk (nie taguję bo ponoć tylko pięć pierwszych tagów działa) - zapraszam do postowania źródłowej piosenki w komentarzach
Co robi `split` to sobie możecie poeksperymentować sami, polecam wypisać (`console.log`) samo `source` i `source.split('/')` i zobaczyć co się dzieje.
O funkcji w której robię przy zapisywaniu `if (err)` porozmawiamy sobie w nieodległej przyszłości - omawiając plik `scrape.js`.
Następny wpis nie jutro, a pojutrze. Powód jest prozaiczny - wyjeżdżam na weekend i pisząc w czwartek piąty post zdałem sobie sprawę, że ważne jest by pisać regularnie (czemu? przekonacie się według nowego rozkładu jazdy już 21.09), a żeby pisać regularnie - to trzeba mieć dostatecznie dużo czasu na pisanie. A jeśli będzie mnie to stresowało, to chuj będzie nie seria, bo się wypalę, a Wam się znudzi.
Tak więc pojutrze porozmawiamy sobie o tym jak pisać w języku którego się nie zna - czyli jak urządzić sobie środowisko pracy i dlaczego jeśli jesteś biedny to masz o wiele mniejsze szanse podczas nauki oraz na rynku pracy.
#programowanie #javascript #tworczoscwlasna #gruparatowaniapoziomu #lajko <--- mój tag