Posty

Czytając kod Reacta - luźne notatki 0923 (1 )

Lane. Czym jest lane? Uliczka. Alejka. Pas ruchu. Ale co to robi w React? I co to ma wspólnego z włóknem (fiber?) Patrzę na kod https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react-reconciler/src/ReactFiberLane.js i myślę . Są tam rozmaite zmienne. Zera i jedynki. To muszą być maski bitowe! Te alejki mają różne rodzaje. Ale i priorytety. Widnieje też na horyzoncie funkcja getNextLanes. Czym ona jest? export function getNextLanes(root: FiberRoot, wipLanes: Lanes): Lanes { Jak widzimy pobiera ona korzeń włókna oraz alejki w trakcie robienia. I zwraca alejki następne w kolejności. Wchodząc w nią, czujemy błogość nicnierobienia. Słówko idle się pojawia w zmiennych. Sprawdzamy, czy jesteśmy w środku renderowania, jeśli tak, to zmiana alejki może spowodować utracenie postępów. Więc róbmy tak tylko, jeśli nowe alejki mają priorytet wyższy. Dalej komentarz o splątanych alejkach. Przechodzimy dalej. Wokół panuje półmrok. Zbliż...

Dlaczego nie da się nadgonić frontendu

Obraz
Światek JavaScriptu, frontendu to jedno wielkie FOMO. Nie uważasz przez chwilę, to się okazuje, że już są kolejne frameworki do nauczenia, biblioteki do obczajenia, wzorce do zrozumienia. Zeszłoroczne dobre praktyki okazują się już przestarzałe i teraz już należy robić inaczej. Można mieć na to wyjebane i robić swoje. I jest to podejście spokojnego programisty, który gdzieś tam klepie po firmach i ma fokus na dostarczanie tasków na produkcję, a nie na naukę frameworków dla frameworków. I to jest dobre podejście. Do czasu zmiany pracy. Bo wtedy się okazuje, że musisz się praktycznie od nowa uczyć masy rzeczy, frontend już jest inny, nie chcą cię już na rozmowach, bo nie znasz jakiejś tam nowej opcji w libce, która weszła akurat wtedy, jak byłeś zajęty pracą. Więc co robić? Można się uczyć na bieżąco nowości. Skąd jednak wiedzieć, czego się uczyć? Cóż, najświeższa wiedza jest na Twitterze (no dobra, czasem świeższa wiedza jest na Githubie, Discordach itp. no ale na Twitterze ta...

Znowu robię własny edytor 😆

Znowu robię własny edytor. Ale tym razem edytor kodu. W sumie jeszcze takiego nie robiłem. Tzn. chciałem kiedyś zrobić własne IDE, ale wykorzystując gotowy widżet edytora (używałem wtedy CodeMirror). Jednak teraz idę dalej i chcę zrobić cały edytor kodu, tak żeby mieć nad wszystkim kontrolę. Na razie myślę, że to tak zrobię (to może się zmienić jeszcze): do trzymania tekstu w edytorze planuję użyć struktury danych zwanej "piece table", może dodatkowo każda linijka będzie miała osobną tablicę kawałków. Zobaczę. Zacznę to pisać w JS używając HTML/CSS do wyświetlania kodu. Nie będzie to docelowa technologia - planuję później stopniowo to przepisywać na Rust i wgpu. Docelowo będzie to apka desktopowa, natywna (żeby edytor szybko działał, bez jakichś Electronów), ale z możliwością odpalania jej również w przeglądarce (bo lepsza promocja - więcej osób wejdzie na stronę i potestuje sobie online, niż będzie ściągać cały edytor i instalować u siebie). Do renderi...

rdzawe łańcuchy(1): z węża do wielbłąda

Hej! Będzie to seria wpisów (a w zasadzie już jest to seria wpisów, bo już to zacząłem pisać). W każdym razie będę tu omawiał różne ciekawostki jeśli chodzi o stringi w Ruście. Np. dzisiaj omówimy sobie, w jaki sposób można napisać funkcję, która konwertuje takiego stringa "foo_bar_baz" na takiego: "fooBarBaz" Czyli zamieniamy z notacji snake case na camel case. Taka zabawa. A więc zaczynamy. napiszemy sobie funkcję main oraz sygnaturę naszej funkcji: fn main() { println!("{}", to_camel_case("foo_bar_baz_qwerty")); } fn to_camel_case(s: &str) -> String { } Jak widać jest to funkcja, która pobiera wycinek stringa ( string slice ) i zwraca stringa o typie String (chodzi o to, że potrzebujemy stworzyć nowego stringa i go zaalokować na starcie, dlatego zwracamy String, a nie &str). Dalej, stworzymy również wspomnianego już Stringa i go zwrócimy (na razie jest pusty). Możemy to zrobić poprzez `return out;`. Ale powiedzmy,...

Nest.js - wyciekająca magia

Robię sobie HelloWorldzik w Nest.js, żeby zobaczyć, o co cały szum. Bo podobno to jakiś nowoczesny framework w Node.js, który obudowuje Express/Fastify i na tym kładzie swoją architekturę. I wiecie co? Rzeźnia to jest . Ale o tym za chwilę. Na razie wspomnę o tym, że jest to napakowane wzorcami jak Angular (zresztą było to inspirowane Angularem). Ale żeby tylko. Wzorce projektowe wcale nie są trudne. Mam nawet wrażenie, że Nest.js mający opinię chyba trudnego frameworka, wydaje mi się tutaj dość łatwy pod kątem architektury (wcześniej czytałem dokumentację i w miarę przejrzyste to było). No dobra, to gdzie ta rzeźnia? W niepotrzebnej magii i opieranie wszystkiego o jakieś magiczne dekoratory i magiczny sposób, w jaki są wstrzykiwane rzeczy do klas. Przy czym starałem się zrozumieć i wykorzystać moc wstrzykiwania. Więc widząc sposób, w jaki deklaruje się route'y nawet się ucieszyłem, wygląda łatwo, mamy dekorator @Get i tam można dać ścieżkę, np. hello/:name, żeby kontrol...

Jak sobie radzić z impostor syndrome?

Wiecie, to takie coś, że ciągle wam się wydaje, że nie jesteście prawdziwymi programistami, a tylko udajecie. I później się boicie, że to się wyda. Idzie za tym zaniżone poczucie swojej wartości i kompetencji. Takie coś może mieć negatywne konsekwencje: W pracy boisz się czegoś spytać, bo wydaje ci się, że już powinieneś to wiedzieć, więc ci głupio Niektórzy robią bezpłatne nadgodziny, żeby się nie wydało, że nie wyrabiają z taskami (co uważam za głupotę) Na rozmowach o pracę zaniżasz swoje osiągnięcia, w rezultacie wychodzisz słabiej, niż mógłbyś Godzisz się na niskie stawki, bo czujesz, że nie zasługujesz na więcej. Boisz się aplikować wyżej (z juniora na mida, z mida na seniora itp.), bo przecież nie czujesz się jeszcze godny, boisz się, że się ośmieszysz itp. itp. Moje tipy? Spójrz na innych Skonfrontuj się z rzeczywistością Dostrzegaj i spisuj swoje osiągnięcia Poczuj się mniejszością Spójrz na innych. Myślisz, że inni są tacy dobrzy? Hmm... niektórzy pewn...

Node.js mnie zaskoczył

Niby znam Node.js, ale ciągle się czegoś nowego dowiaduję. I tak niedawno dowiedziałem się, że: Node.js ma wątki. A nie miał przecież. Zawsze się mówiło, że jest jednowątkowy. Jakoś w tamtym roku jednak na jednej z rozmów rekrutacyjnych padło pytanie "czy Node.js jest jednowątkowy?". Powiedziałem, co wiedziałem, że "nie" . Patrząc na reakcję osób rekruterskich* już widziałem, że coś chlapnąłem. Dopytywali się "na pewno? Czyli nie ma wątków?" . I nie wiem, czy cieszyli się w duchu, że sam się wkopałem, czy może chcieli mi dać wskazówkę, żebym się wycofał z tej opinii? (niczym na egzaminie ustnym profesor pyta się studenta próbując go naprowadzić na właściwy kierunek). Ale później "wracając do domu" (w sensie zamykając kartę z rekrutacją w przeglądarce, bo na tym polega teraz "wracanie do domu z rekrutacji"), poczytałem sobie o tym i okazało się, że już od jakiegoś czasu Node.js owszem ma wątki. Patrzcie sami, to dowód: https...