wtorek, 24 wrze艣nia 2024

Turborepo - zarz膮dzanie monorepo

Ostatnio w jednym z projekt贸w u偶ywam https://turbo.build/. Turbo to narz臋dzie, kt贸re pozwala na 艂atwe zarz膮dzanie projektem typu monorepo w JS i TS. 

Cz臋stym problemem jest trudno艣膰 w odpalaniu kilku projektu na raz. Dzi臋ki Turbo, mo偶na zdefiniowa膰 projekty i odpala膰 je z jednego miejsca, za pomoc膮 wsp贸lnego polecenia Turbo run. Wykona ono na przyk艂ad wszystkie zadania build lub dev z package json. Dodatkowo, je艣li baza kodu si臋 nie zmieni艂a, wynik zostanie zwr贸cony z cache. Mo偶na to skonfigurowa膰 tak偶e po stronie serwera.

Turbo pozwala na 艂atwe wyodr臋bnianie sp贸jnych aplikacji i bibliotek. Przyk艂adowo, mo偶esz wydzieli膰 sobie aplikacj臋 webow膮 oraz api i wrzuci膰 je do folderu apps. Nast臋pnie, mo偶esz utworzy膰 folder packages, w kt贸rym b臋dziesz w p艂askiej strukturze przechowywa艂:

  • modele (interfaces)
  • konfiguracje eslinta
  • serwisy HTTP dla Angulara (je艣li masz tak膮 fantazj臋)
  • reu偶ywalne komponenty

Dzi臋ki temu, mo偶na 艂atwo potem doda膰 jeszcze inny rodzaj aplikacji, kt贸ry skorzysta ze wsp贸艂dzielonej bazy kodu. Jest to 艣wietnie rozwi膮zanie w pracy, gdy zwykle tworzymy wi臋cej ni偶 jedn膮 aplikacj臋. Spotka艂em si臋 z sytuacjami, kiedy dla kilku takich samych aplikacji musimy osobno instalowa膰 eslint czy Jest i nast臋pnie wielokrotnie dodawa膰 te same konfiguracje. Turbo znacznie upraszcza ten proces.

Ka偶da aplikacja jest osobn膮 paczk膮 z plikiem package.json, kt贸r膮 mo偶na zainstalowa膰 jak standardow膮, wersjonowan膮 paczk臋 npm w obr臋bie repozytorium.

Minusem Turbo jest do艣膰 trudna konfiguracja udost臋pniania plik贸w z jednej paczki do drugiej. W teorii jest to proste, w praktyce napotka艂em na wiele mo偶liwych ustawie艅 (z pliku TS, z package jsona albo ze skompilowanych plik贸w TS). 

Podsumowuj膮c, Turbo zapewnia sp贸jn膮 obs艂ug臋 monorepo i zach臋ca nas do dzielenia kodu na reu偶ywalne paczki.  Z mojej perspektywy jest prostsze ni偶 Nx, jednocze艣nie oferuj膮c nieco mniej mo偶liwo艣ci.


poniedzia艂ek, 16 wrze艣nia 2024

Visual Timer - Yunbaoit

 Pomodoro to najgorszy spos贸b na zarz膮dzanie czasem, ale do tej pory nie wynaleziono nic lepszego. Odk膮d pracuj臋 na swoim, przetestowa艂em mn贸stwo aplikacji tego typu. Ka偶da mia艂a jakie艣 wady. Sprawdza艂em te偶 fizyczne urz膮dzenia. Nakr臋cany pomidor kuchenny jest ma艂o dok艂adny i bardzo g艂o艣ny, nie ma opcji konfiguracji. Zegarki z odliczaniem stworzone s膮 raczej do innych cel贸w ni偶 odliczanie pomodoro, brakuje im mi臋dzy innymi czytelno艣ci w gorszym 艣wietle.

Ostatnio testowa艂em aplikacj臋 od Time Timer

https://www.timetimer.com/collections/applications/products/time-timer-ios-app

kt贸ra sprawdza si臋 bardzo fajnie. Podoba mi si臋 idea wizualnego przedstawienia up艂ywu czasu. Aplikacja nie 偶adnych bajer贸w, typu 艣ledzenie zrobionych pomidor贸w, co w zasadzie jest na plus. Dzia艂a te偶 w trybie pe艂noekranowym. 

Nie jestem jednak fanem ci膮g艂ego u偶ywania telefonu przy pracy, a jeszcze bardziej, wydawania 35 funt贸w na budzik z czerwonym ringiem ze strony 

https://www.timetimer.com/products/time-timer-mod-30-minute aby mie膰 to samo w formie fizycznej.

Zerkn膮艂em na alliexpress gdzie znalaz艂em podobny timer marki Yunbaoit w wielokrotnie ni偶szej cenie, tzn oko艂o 25 pln. Obecnie troch臋 podro偶a艂. Nie brakuje mu opcji. 

  • Mo偶na nim odlicza膰 czas do godziny
  • Posiada czas pikania 3 i 30 sekund
  • Ma 3 ustawienia g艂o艣no艣ci, mute, ciszej i g艂o艣niej
  • Czujnik baterii 
  • Pod艣wietlenie do pracy w nocy
Gdy zegarek jest wyciszony, na koniec czasu mruga pod艣wietleniem. Ca艂o艣膰 przypomina troch臋 solidniejszy budzik z kiosku, opakowany dodatkowo w gumow膮 obudow臋. Testy trwaj膮, pierwsze wra偶enie - jak za tak nisk膮 cen臋, bardzo pozytywne.

sobota, 7 wrze艣nia 2024

Time Timer

 I'm testing Time Timer https://www.timetimer.com/ app for Android, looks very promising. Simple way of visually tracking time.

czwartek, 15 sierpnia 2024

VSCode - podejrzyj wszystkie zmiany

Source control w VSCode dzia艂a艂o dla mnie "wystarczaj膮co dobrze", by m贸c pracowa膰 na nim przez ca艂y czas. Brakowa艂o mi jednak jednej opcji - przegl膮dania wszystkich commit贸w w jednym widoku. Je艣li chcieli艣my podejrze膰 nasze zmiany, musieli艣my przeklika膰 si臋 przez wszystkie pliki.

Ostatnio zauwa偶y艂em jednak 艣wietn膮 opcj臋 "View Changes"


Po jej wybraniu widzimy wszystkie zmiany w formie przewijanej, co przy艣piesza prac臋. 

niedziela, 30 czerwca 2024

Praca w ciszy

 Standardowy stan w pracy to:

  • W艂膮czony Spotify
  • Przegl膮danie Facebooka
  • Zerkanie na nowo艣ci na yt
  • Oczywi艣cie w mi臋dzyczasie dzwoni kurier / mama / dodaj dowolne
Czasem wydaje mi si臋, 偶e wi臋cej czasu sp臋dzamy mi臋dzy prze艂膮czaniem si臋 mi臋dzy tymi wszystkimi ciekawostkami, ni偶 na pracy. Metoda pomodoro ma nam pom贸c skupi膰 si臋 przynajmniej na te 25 minut, ale w rzeczywisto艣ci staje si臋 dodatkowym 藕r贸d艂em rozprosze艅. Pono膰 aby wr贸ci膰 do pe艂nego skupienia po przerwanej pracy, potrzeba a偶 20 minut.

wtorek, 4 czerwca 2024

Rekrutacja 2024, czyli jak szuka艂em pracy

Na koniec marca 2024 m贸j team dosta艂 informacj臋, 偶e rezygnuj膮 z kontraktor贸w z Polski. Pierwsza reakcja to oczywi艣cie ... l臋k o los projektu, poniewa偶 zosta艂 on powierzony w r臋ce nieznanych os贸b.  Druga - ustawiam na Linkedinie status Ready to work i szukam nowej pracy. Okaza艂o si臋 to trudniejsze ni偶 my艣la艂em, ale wykonalne.

Wys艂a艂em oko艂o 200 cv, przeprowadzi艂em mn贸stwo rozm贸w HR i kilka rozm贸w rekrutacyjnych. Poszukiwania trwa艂y do czerwca, kiedy to uda艂o mi si臋 znale藕膰 ofert臋 prawie tak samo dobr膮, jak poprzednie stanowisko.

Moje spostrze偶enia

  1. Bez kilku lat do艣wiadczenia w konkretnych technologiach trudno jest przej艣膰 nawet pierwszy etap rekrutacji. Na starcie odpadniemy przegrywaj膮c z bardziej dopasowanymi osobami.
  2. Topowe stanowiska wymagaj膮 od kandydata znacznie wi臋cej, ni偶 tylko kodowanie w jednym frameworku. Warto na przyk艂ad mie膰 do艣wiadczenie trenerskie lub leaderskie, albo pracowa膰 jako full-stack.
  3. Firmy coraz cz臋艣ciej zwracaj膮 uwag臋 na wykszta艂cenie
  4. Bez dobrej znajomo艣ci angielskiego bardzo szybko uderzymy w sufit zarobk贸w i to jest czynnik, kt贸ry ogranicza nas najbardziej.
  5. Konieczne jest zbieranie wszystkich pyta艅 rekrutacyjnych i wykuwanie ich na blach臋. Najlepiej jest uczy膰 si臋 z b艂臋d贸w pope艂nianych przez inne osoby i aktywnie szuka膰 pyta艅 rekrutacyjnych w sieci. B臋dzie to okazja do poznania tych temat贸w, na kt贸re nigdy nie mieli艣my czasu. Praca programisty w du偶ej mierze przypomina prac臋 naukowca, polega na wertowaniu materia艂贸w i szukaniu czego艣, co by膰 mo偶e kiedy艣 si臋 nam przyda.
  6. Cz臋stym wymaganiem jest praca przynajmniej jeden raz w tygodniu z biura. Moim zdaniem, jest to bardzo na minus.


wtorek, 28 maja 2024

101 pyta艅 rekrutacyjnych na frontend

Podrzucam list臋 realnych pyta艅 z rekrutacji frontendowych 2024. Je艣li chcesz 偶ebym Ci臋 z tego przepyta艂, odezwij si臋 na kamilnaja馃檲gmail.com

Pytania JS

  1. Czym r贸偶ni si臋 var, let i const
  2. Czym jest proxy api (nikt o to nigdy nie pyta艂, ale ja bym zapyta艂 :) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy JS
  3. Jak zrobi膰 list臋 unikalnych warto艣ci (u偶yj set)
  4. Opisz asynchroniczno艣膰
  5. Jak dzia艂a Event Loop?

niedziela, 12 maja 2024

Angular - jak dzia艂a change detection?

G艂贸wnym elementem change detection strategy w Angularze jest Zone.js. Jest to biblioteka, kt贸ra patchuje metody asynchroniczne (requesty HTTP, timery) i zdarzenia, kt贸re s膮 wywo艂ywane przez u偶ytkownika. Tworzy przez to kontekst wykonania. 

NgZone to serwis, kt贸ry pozwala na optymalizacj臋 obs艂ugi Zone. Stanowi on abstrakcj臋 nad Zone.js Dzi臋ki niemu, mo偶na na przyk艂ad wykluczy膰 fragment kodu, kt贸ry wykonuje asynchroniczne zdarzenia, z change detection. S艂u偶y temu metoda runOutsideAngular().

Angular - Dependency Injection

DI (dependency injection) w Angularze pozwala na dostarczanie zale偶no艣ci. Po艣rednikiem mi臋dzy elementami i zale偶no艣ciami, kt贸re mo偶na wstrzykiwa膰, jest Injector. Gdy zale偶no艣膰 jest potrzebna, Injector sprawdza, czy istnieje jej instancja i je艣li nie, tworzy j膮 i dodaje do rejestru. W wi臋kszo艣ci przypadk贸w, mo偶esz u偶ywa膰 uproszczonego DI, jednak warto wiedzie膰, jak dzia艂a to pod spodem.

sobota, 11 maja 2024

Angular LifeCycle Hooks

ngOnChanges()

Wywo艂uje si臋 gdy Angular ustawia lub resetuje w艂a艣ciwo艣ci wej艣ciowe powi膮zane z danymi. Metoda otrzymuje obiekt SimpleChanges. 
Uwaga - odpala si臋 jako pierwszy, ale tylko gdy komponent posiada @Input().

czwartek, 2 maja 2024

Mity i problemy z popkultur膮

W tym po艣cie chcia艂bym przedstawi膰 Ci najcz臋stsze problemy z popkultur膮 / szkodliwe przekonania / mity, kt贸re w niej zauwa偶am.

  1. Mit b艂yskawicznej nauki do poziomu mistrzowskiego
    Podstawa filmu Rocky, bohater 艣redniak pod wp艂ywem motywacji osi膮ga niesamowite rezultaty. Firma (na przyk艂ad restauracja), kt贸ra robi艂a co艣 zawsze 藕le, zaczyna nagle robi膰 wszystko dobrze, bo do lokalu wszed艂 kto艣 znany. Osoba zmienia si臋 pod wp艂ywem uczucia i nigdy nie wraca do poprzednich negatywnych schemat贸w zachowa艅. My艣lenie typu - gdy tylko zaczniemy robi膰 x, wszystko si臋 zmieni. 

poniedzia艂ek, 15 kwietnia 2024

JS NaN math operation that not returns NaN

I always thought that in JS every math operation that uses NaN returns NaN. 

However, there is a couple a funny exceptions

NaN ** 0 > returns 1, the same as

Math.pow(NaN, 0)

Wonders never cease

艣roda, 6 marca 2024

Umys艂 otwarty na nauk臋

Mo偶na wyr贸偶ni膰 2 wzorce zachowa艅 ludzkich w odpowiedzi na nowe rzeczy.

Jedna osoba b臋dzie je ignorowa艂a, wykpiwa艂a, ucieka艂a od nich. Przyk艂adowo, ludzie kt贸rzy 偶yj膮 za granic膮 przez wi臋kszo艣膰 偶ycia i nigdy nie naucz膮 si臋 j臋zyka. Albo programi艣ci kt贸rzy ci膮gle narzekaj膮 na j臋zyk programowania, kt贸ry ledwo znaj膮. Lub studenci kt贸rym "偶aden przedmiot si臋 nie przyda".

Druga osoba natomiast b臋dzie chcia艂a pozna膰 wszystko dooko艂a. Nauczy si臋 tylu j臋zyk贸w, ile b臋dzie w stanie, po艣wi臋ci sw贸j czas na nauk臋 rzeczy, kt贸re by膰 mo偶e nigdy si臋 nie przydadz膮. 

Moja porada - je艣li widzisz, 偶e po raz kt贸ry艣 straci艂e艣, bo czego艣 nie wiedzia艂e艣, zacznij si臋 tego uczy膰. Gdy s艂yszysz, 偶e technologia X jest coraz popularniejsza, zajrzyj do niej. Nie b膮d藕 ignorantem.

sobota, 3 lutego 2024

Inspiruj膮ce historie v2

Kolejne inspiruj膮ce historie, kt贸re mia艂em nazbierane od d艂ugiego czasu, ale publikuj臋 je dopiero teraz :)

By艂a sobie ska艂a i byli sobie ludzie. Ska艂a mia艂a oko艂o 4 metry, spokojnie le偶a艂a sobie w Finlandii i wej艣cie na ni膮 wydawa艂o si臋 niemo偶liwe. Nazwano j膮 Burden of Dreams. W 2016 roku, po 4 latach przygotowa艅, wszed艂 na ni膮 Nalle Hukkataival, nast臋pne wej艣cia mia艂y miejsce dopiero w 2023 roku. Fascynuj膮ce jest to, jak ogromny wysi艂ek w艂o偶ono w tak nie tyle bezsensowny wyczyn*, co wyczyn, na kt贸ry sk艂ada艂o si臋 zaledwie kilka ruch贸w.

czwartek, 18 stycznia 2024

Bifurkacja wiedzy, najwi臋kszy problem w programowaniu

Bifurkacja[1] – w szerszym znaczeniu: rozwidlenie si臋 (rozdzielenie) na dwa lub wi臋cej ramion rzeki, pasma g贸rskiego, pr膮du morskiego, struktury geologicznej itp.

Uczysz si臋 samodzielnie programowania. Przyk艂adowo -  rozszerzenie do przegl膮darki mo偶esz napisa膰 albo pisz膮c po prostu JS, albo u偶ywaj膮c biblioteki. Biblioteka mo偶e u偶ywa膰 React lub Angular. W ka偶dej z tych technologii mo偶esz doda膰 lub nie obs艂ug臋 store. Efektem prac jest dzia艂aj膮ca aplikacja. Problemem jest to 偶e nale偶y znale藕膰 jedno z wielu rozga艂臋zie艅 na 艂atwe stworzenie programu.

Ostatnio chcia艂em nauczy膰 si臋 montowania film贸w. Problemy s膮 tutaj podobne do programowania, poniewa偶 masz do wyboru kilkana艣cie r贸偶nych p艂atnych i darmowych program贸w do montowania, ka偶dy z nich obs艂uguje si臋 nieco inaczej. Efektem u偶ywania takiego programu jest zmontowany film.

艣roda, 17 stycznia 2024

Nie艣wiadome poznanie rozwi膮zania, czyli dlaczego ogl膮danie tutoriali bez praktyki mo偶e nie dawa膰 efekt贸w

 Ostatnio od czasu do czasu lubi臋 sobie odpali膰 kr贸tk膮 rund臋 gry Doom. Dla niewtajemniczonych - jest to jedna z pierwszych strzelanek, kt贸ra polega na przemierzaniu skomplikowanych map i strzelaniu do demon贸w. Gra sk艂ada si臋 z wielu map nast臋puj膮cych jedna po drugiej. Og贸lnie graczem nie jestem, gra jest skomplikowana i budzi niepok贸j.

Zamiast b艂膮dzi膰 po jej zakamarkach, czasem w艂膮cz臋 sobie tutorial opisuj膮cy jak najsprawniej przej艣膰 dan膮 map臋. Nie robi臋 tego bezpo艣rednio przed gr膮, raczej dla odpr臋偶enia gdy mam woln膮 chwil臋.

czwartek, 11 stycznia 2024

馃3 rodzaje nauki馃摎

Pierwszym rodzajem nauki jest uczenie si臋 nowych rzeczy. Przyswajamy wtedy now膮 wiedz臋 tak d艂ugo, a偶 zacznie si臋 nam wydawa膰, 偶e rozumiemy jaki艣 temat. W przypadku programowania mo偶emy przesta膰 si臋 uczy膰 na przyk艂ad wtedy, gdy widzimy, 偶e wykorzystujemy sprawnie pozyskan膮 wiedz臋 w praktyce.

Drugim rodzajem nauki jest powtarzanie materia艂u. Z czasem nasza pami臋膰 si臋 zaciera, wykorzystujemy jedynie te wiadomo艣ci, kt贸re si臋 sprawdzi艂y, a o innych, zapominamy. W programowaniu mo偶e prowadzi膰 to na przyk艂ad do niewykorzystywania niekt贸rych wydajnych, ale bardziej skomplikowanych konstrukcji. Gdy uczymy si臋 gry w szachy, zapami臋tujemy te zagrania, kt贸re wykorzystujemy cz臋艣ciej. Prawo Zipfa m贸wi, 偶e dane najcz臋艣ciej wyst臋puj膮ce s膮 mniej wa偶ne (mniej szczeg贸艂owe) i odwrotnie. 

Dobrze jest zatem regularnie od艣wie偶a膰 sobie wiedz臋. 

pi膮tek, 29 grudnia 2023

馃悽Programistyczne podsumowanie roku 2023馃悋

Rok 2023 to dla mnie kolejny rok bardzo intensywnego rozwoju.

Postawi艂em na rozw贸j j臋zykowy - wbi艂em 400 dni bez przerwy z Duolingo (j臋zyk ukrai艅ski po angielsku), kontynuowa艂em nauk臋 z Anki oraz z aplikacj膮 BeeSpeeaker, kt贸ra sprawdza si臋 chyba najlepiej. 

Sporo energii wsadzi艂em w nauk臋 tworzenia rozszerze艅 do przegl膮darek. Ostatecznie wybra艂em framework Plasmo, wykorzystuj膮cy React i zrobi艂em w nim ma艂y projekt.

sobota, 16 grudnia 2023

馃獡Dlaczego w wielu firmach 藕le si臋 pracuje


Ostatnie kilka lat pracuje mi si臋 bardzo dobrze. Jak doradza艂 by艂y prezydent, zmieni艂em prac臋 (przesta艂em pracowa膰 w zawodzie), kredytu nie bra艂em. Z perspektywy czasu jednak zastanawiam si臋, co wp艂ywa艂o na to, 偶e jako m艂odemu pracownikowi pracowa艂o mi si臋 tak 藕le. Po za艂o偶eniu firmy w 2013 roku poczu艂em znaczn膮 popraw臋 jako艣ci tego, jak mi si臋 pracuje - po prostu zrezygnowa艂em z etatu. W tym artykule przedstawi臋 kilka powod贸w, dla kt贸rych praca w wielu firmach staje si臋 dla pracownika zaplanowan膮 (przez pracodawc臋) udr臋k膮. Jest to troch臋 tak jak ze szko艂膮. Szko艂a ma uczy膰 pos艂usze艅stwa i zabija膰 samodzielno艣膰, a wi臋kszo艣膰 etat贸w jest jej kontynuacj膮.