czwartek, 13 marca 2025

The passion to build has cooled...

 "The passion to build has cooled, and the joy of construction has been forgotten." - Colonel Shikishima, Akira

wtorek, 11 marca 2025

Woodpecker method w programowaniu

 Metoda dzięcioła, czyli Woodpecker method, wzięła się z szachów. Polega na wyznaczeniu sobie zbioru zadań i następnie przerabianiu go od początku do końca. Gdy przerobimy go raz, zaczynamy od nowa, starając się zrobić to nieco szybciej. Cykl powtarzamy aż zadania będziemy mogli robić niemal z głowy.

poniedziałek, 10 marca 2025

Vibe Coding

Vibe Coding is writing code without understanding it, using LLMs. “Programmer” writes in natural language and tries to make a working program, without knowing the programming language. Bugs that appear are pasted into the cottage and count on it to fix them.

In my opinion, this makes as much sense as pasting random scripts from SO and hoping something will work 10 years ago :) The frustration is the same.

First - understanding and solid fundamentals.

Translated with DeepL.com (free version)

czwartek, 6 lutego 2025

Mock Service Worker - prosty sposób na mockowanie danych

 Jakiś czas temu napisałem dla mojej poprzedniej firmy artykuł o tym, jak można skutecznie integrować się z backendem. Na blogu Angular Architects pojawił się też wpis, który potwierdził moją tezę, że dobrze jest się integrować z mockowym backendem. (Nie ma to jak cherry picking pod tezę :)

czwartek, 30 stycznia 2025

Lista LLM-ów - kalendarium

Obraz wygenerowany przez Qwen

 

 

 

 

 

 

 

 

 

 

Po raz pierwszy usłyszałem o LLM gdy pojawił się Chat GPT. Mój brat zaczął go entuzjastycznie używać na studiach i jakoś niechętnie zacząłem go używać. Pamiętam, że Chat GPT miał duże problemy z logowaniem użytkownika (wylogowywał go losowo po jakimś czasie) i z wydajnością. Często zdarzały się problemy z odpowiedziami - chat myślał myślał i wyrzucał błąd.

poniedziałek, 13 stycznia 2025

Proces Markowa (łańcuch Markowa)

Proces Markowa jest szczególnym przypadkiem procesu stochastycznego. Jego cechą charakterystyczną jest to, że prawdopodobieństwo kolejnego zdarzenia zależy jedynie od wyniku poprzedniego zdarzenia, a nie od całej historii procesu. Przeszłe stany nie mają wpływu na kolejne wyniki procesu. 

Łańcuchy Markowa wykorzystuje się w:

  • Modelowaniu różnorakich systemów, zmieniających stan w sposób losowy
  • Prognozowaniu
  • Niektórych algorytmach  

Przykładem procesu Markowa może być random walker. W tym algorytmie po każdym kroku losujemy kierunek przemieszczania się naszej krzywej, biorąc pod uwagę jedynie punkt, w którym obecnie się znajduje jej koniec.

Andriej Markow był rosyjskim matematykiem żyjącym w latach 1856 - 1922, badającym teorię prawdopodobieństwa.

Proces stochastyczny

Proces stochastyczny to taki proces, w którym opisujemy zbiór zmiennych losowych na bazie jakiegoś wymiaru (zbioru indeksów), jakim zwykle jest czas. Przykładem procesu stochastycznego może być na przykład zbiór wypisanych kolejnych wyników rzutu kostką czy kart wyciągniętych z talii. Obydwa te zdarzenia są losowe.

Rozkład jednostajny ciągły (Uniform Distribution)

Jest używany do generowania randomowych liczb, z których każda powinna mieć takie same prawdopodobieństwo wystąpienia. Standardowym przykładem jest rzut kostką przyjmujący wartości od 1 do 6, czy rzut monetą dający wynik orzeł albo reszka. 

W tym rozkładzie, nie można mieć wartości pośrednich. Rzut kością nie da nam wyniku 2.5.

sobota, 11 stycznia 2025

Process Poissona

 Process Poissona jest powiązany z rozkładem Poissona. Badając go zakładamy, że średni czas pomiędzy zdarzeniami jest znany, ale dokładny czas pomiędzy nimi różni się, nie jest taki sam. Zdarzenia nie zachodzą na raz, ale są od siebie niezależne. Sam proces przedstawia serię takich zdarzeń, a dokładniej, model występowania tych zdarzeń w czasie.

Wykorzystywany jest w wielu dziedzinach nauki i biznesu, w których bada się zdarzenia niezależne, występujące z podobną częstotliwością:

  • Przewidywanie liczby użytkowników na stronie WWW
  • Przewidywanie ilości zabookowanych pokojów w hotelu
  • Modelowanie sprzedaży produktu
     

Nie będzie pasował natomiast do zdarzeń zależnych, jak na przykład opóźnienia pociągów.

Rozkład wykładniczy (exponential distribution)

Ostatnio pisałem o Rozkładzie Poissona, czyli takim rozkładzie, w którym zdarzenia zachodzą ze stałą częstotliwością i są niezależne od siebie.

W rozkładzie wykładniczym modelujemy czas oczekiwania na kolejne zdarzenie, przykładowo, ile minut minie, między kolejnymi wizytami ptaka w naszym ogrodzie. 

Na podstawie ksiązki J. Starmera, na osi x - czas
Na chłopski rozum - jeśli jakieś zjawisko występuje co jakiś czas regularnie, to im krótszy czas oczekiwania, tym większe prawdopodobieństwo, że dane zdarzenie wystąpi. Przykładowo, jeśli zbadamy awarie oprogramowania, to najczęściej dzieją się one zaraz po wgraniu zmian, a następnie jest ich coraz mniej.


czwartek, 9 stycznia 2025

Rozkład Poissona, prawo małych liczb

Rozkład Poissona nie ma nic wspólnego z trucizną, został opracowany przez Simeona Denisa Poissona, francuskiego matematyka żyjącego od 1781 do 1840 roku we Francji.

Opisuje on (rozkład), że dane zdarzenie wystąpi określoną ilość razy, biorąc pod uwagę średnią ilość danych zdarzeń w czasie lub przestrzeni. Przykładowo - możemy obliczyć, ile razy ptaki usiądą na naszym płocie w ciągu godziny, ilu klientów odwiedzi sklep od 12 do 15 czy ile requestów obsłuży backend naszej strony.

Zdarzenia brane pod uwagę w rozkładzie Poissona powinny być niezależne od siebie, czyli nie ma znaczenia, jaki czas upłyną od ostatniego zdarzenia. To nie łapanie ryb, gdzie pluskanie po wyciągnięciu dużej sztuki, odstraszy pozostałe ryby 𓆝 𓆟 𓆞 na kilka minut.

Rozkład dwumianowy, binomial distribution (Rozkład Bernouliego)

Rozkład dwumianowy dotyczy prawdopodobieństwa dyskretnego, czyli takiego, w którym zmienna przyjmuje skończone lub określone wartości. Przykładem może być rzut monetą lub kostką do gry. W rozkładzie dwumianowym mamy takie parametry, jak:

  • Liczba prób n
  • Prawdopodobieństwo sukcesu w każdej z prób p
  • Liczba sukcesów - k

wtorek, 7 stycznia 2025

Książki na temat ML które polecam

The StatQuest Illustrated Guide to ML - Josh Starmer

Książka Josha Starmera ze świetnego kanału StatQuest. Mocno w stylu książek HeadFirst. Dobrze tłumaczy podstawowe zagadnienia, także te związane ze statystyką. 0 kodu.


Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow - Aurelien Geron

Nieco bardziej poważna książka na temat ML

Deep Learning with Python - Francois Chollet

Książka autora biblioteki Keras

The Elements of Statistical Learning
Data Mining, Inference, and Prediction

Książka omawiająca temat od podstaw, dostępna za darmo - https://hastie.su.domains/ElemStatLearn/

środa, 1 stycznia 2025

W jaki sposób filmy z YT mieszają Ci w głowie

Jakiś czas temu zauważyłem poważny problem, związany z oglądaniem filmów na YT. Otóż odnoszę wrażenie, że większość twórców tworzy filmy nie z własnego przekonania, ale po to, by nabijać sobie wejścia (0 zaskoczenia). Wprowadza to dezinformację i prowadzi wśród widzów do niewłaściwych wniosków i szkodliwych zachowań.

Przykładowe tematy

  • Odstawianie kawy
  • Minimalizm
  • Ciągła migracja z ekosystemu Apple na inne i w drugą stronę
  • Mindfulness
  • Wstawanie o 5 rano 
  • Deep work / Eat that Frog / GTD
  • Kolejny mądry trend z USA

wtorek, 31 grudnia 2024

Programistyczne podsumowanie roku 2024

Podsumowanie roku 2024

Nauka języków obcych

W 2024 kontynuowałem naukę na Duolingo, wbijając kolejny rok bez przerw w języku niemieckim po angielsku. Przerobiłem cały angielski zaawansowany w BeeSpeaker i aktualne szukam aplikacji do nauki mówienia po angielsku.

Programowanie

W marcu otrzymałem dość nieprzyjemną informację o tym, że projekt w którym uczestniczę, rezygnuje ze wszystkich osób z mojej aktualnej kontraktorni. Poskutkowało to koniecznością szukania pracy, co zajęło mi około 2 miesiące. Po raz pierwszy zauważyłem wtedy, że znalezienie pracy staje się dość trudne - rekrutacje stały się wymagające. Powtórzyłem wtedy Javę, Angulara, JS i TS. Na szczęście udało się znaleźć mi dość interesujący projekt, w którym jestem do tej pory.

środa, 18 grudnia 2024

About pressure

Presja tworzy diamenty i rozsadza rury

Za dużo presji zmienia diamenty w pył 💎


Pressure creates diamonds and bursts pipes 

Too much pressure turns diamonds into dust 💎

środa, 11 grudnia 2024

Thoughts December

Programming with LLM without knowing what your code is doing, is like playing piano with illuminated keys. You will achieve desired result, but don't gain knowledge, and your path will be longer.

Programowanie z użyciem LLM bez wiedzy co twój kod robi, jest jak granie na pianinie z podświetlanymi klawiszami. Osiągniesz swój rezultat, ale nic się nie nauczysz i wydłużysz tylko drogi.

piątek, 6 grudnia 2024

Thoughts October

Learning is about moving from I have no idea what x is, to saying that through experience with X, I can solve any problem in it/using it

Nauka polega na przejściu od Nie mam pojęcia czym jest x, do stwierdzenia że dzięki doświadczeniu z X, potrafię rozwiązać w nim / używając jego każdy problem


wtorek, 19 listopada 2024

Thoughts November

Writing every day one letter of book, doesn't give you whole book after a year. Complexity grows with the scale, without training you might not be able to handle.

Pisząc codziennie jedną stronę książki, nie będziesz miał całej książki po roku. Złożoność rośnie wraz ze skalą, a bez odpowiedniego treningu możesz nie mieć możliwości ogarnięcia całości.

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.