Skip to content

Z bloga

Notatki o inżynierii oprogramowania, AI i tworzeniu produktów.

7 min czytania

Budowanie niezawodnych narzędzi dla LLM

Function calling, agenci i MCP wszystkie opierają się na tym samym: narzędziach, które LLM może wywołać. Ale narzędzie zbudowane dla niedeterministycznego, omylnego wołającego potrzebuje innego projektu niż zbudowane dla kodu. Deep-dive o tym, co czyni narzędzie niezawodnym dla LLM — nazewnictwo, zakres, walidacja, komunikaty błędów, z których może się odzyskać, i bezpieczeństwo, które nie może żyć w modelu.

7 min czytania

AI-native Rails stack w 2026

Poskładaj to razem — Solid Stack bez Redisa, Kamal, pgvector i wypracowane w praktyce zasady budowania z LLM — a wyłania się spójny obraz: Rails to znakomite środowisko dla aplikacji AI-native, właśnie dlatego, że pozwala małemu zespołowi budować i uruchamiać zarówno aplikację, jak i jej funkcje AI. Synteza tego, w którym miejscu ten stos się dziś znajduje.

6 min czytania

Projektowanie przepływów z człowiekiem w pętli

Najbardziej niezawodne systemy AI działające produkcyjnie nie są w pełni autonomiczne — utrzymują człowieka przy decyzjach, które mają znaczenie. Ale „człowieka w pętli” łatwo zaprojektować źle: bezmyślne zatwierdzenia, zmęczenie alertami, obwinianie ludzi za błędy modelu. Dogłębna analiza tego, jak podzielić pracę między człowieka a AI, żeby każde robiło to, w czym jest naprawdę dobre.

6 min czytania

pgvector na produkcji: wnioski z praktyki

Nieraz stawałem po stronie pgvectora jako sensownego wyboru domyślnego do wyszukiwania wektorowego. Po jakimś czasie utrzymywania go na produkcji zebrałem to, o czym wprowadzające poradniki milczą: wybór indeksu i jego kompromisy, dostrajanie relacji recall–szybkość, utrzymywanie embeddingów w zgodzie ze źródłem i pułapki operacyjne, które ujawniają się dopiero przy skali.

5 min czytania

Fine-tuning kontra RAG kontra prompting: wybór w 2025

Są trzy sposoby, by skłonić LLM, by robił to, czego twoja aplikacja potrzebuje — prompting, pobieranie i fine-tuning — a zespoły rutynowo sięgają po niewłaściwy. Rozwiązują różne problemy, a koszty różnią się ogromnie. Wpis trendowy o tym, do czego każdy faktycznie służy, i kolejność decyzji, która ratuje cię przed przeinżynierowaniem.

7 min czytania

Wyszukiwanie wektorowe na dużą skalę: pgvector kontra dedykowane bazy wektorowe

Gdy wyszukiwanie semantyczne przerośnie testowy zbiór danych, pojawia się pytanie: zostać przy pgvector w Postgresie, czy przejść na dedykowaną bazę wektorową, taką jak Pinecone, Qdrant czy Weaviate? Szczegółowo o tym, co naprawdę zmienia się w dużej skali, z czego rezygnujesz, opuszczając Postgres, i jak podjąć decyzję bez przeinżynierowania.

6 min czytania

Self-hosting otwartych LLM: Llama i przyjaciele

Modele o otwartych wagach, takie jak Llama 2 i Mistral, sprawiają, że sprawnego LLM można dziś uruchomić na własnej infrastrukturze zamiast korzystać z czyjegoś API. Spojrzenie na to, po co w ogóle to robić — prywatność, koszt, kontrola — jaki jest realny koszt operacyjny i uczciwe pytanie, czy w ogóle warto.

6 min czytania

Function calling: pozwól modelowi używać twoich narzędzi

Function calling pozwala LLM-owi poprosić twój kod o uruchomienie funkcji i skorzystanie z wyniku — model, który umiał tylko mówić, zaczyna wyszukiwać dane i działać. Szczegółowo o tym, jak to naprawdę działa, dlaczego to po prostu ustrukturyzowany output z pętlą dookoła i dlaczego to ty w pełni kontrolujesz, co się faktycznie uruchamia.

5 min czytania

Zasady SOLID w systemie tradingowym

SOLID może brzmieć jak zbiór pustych akronimów, dopóki system nie urośnie na tyle, żeby ukarać cię za ich ignorowanie. Opowieść z praktyki o zastosowaniu tych pięciu zasad w systemie tradingowym — gdzie każda z nich naprawdę się sprawdziła, a dogmatyczne trzymanie się ich tylko by zaszkodziło.

5 min czytania

Refaktoryzacja ku heksagonalnym Railsom

Rails to świetny mechanizm dostarczania i kiepskie miejsce na logikę biznesową. Deep-dive o architekturze heksagonalnej w Railsach — porty i adaptery, izolacja domeny od frameworka i jak daleko to ciągnąć, zanim stanie się przeinżynierowaniem.

5 min czytania

Architektura SASS: od spaghetti do design systemu

SASS daje ci moc; architektura jest tym, co powstrzymuje cię przed jej nadużywaniem. Deep-dive o strukturyzowaniu arkuszy stylów tak, by się skalowały — tokeny projektowe, wzorzec 7-1, BEM, zarządzanie specyficznością i myślenie komponentami zamiast stronami.

4 min czytania

Deploye Capistrano bez łez

Capistrano automatyzuje wdrożenie po SSH z atomowymi releasami i rollbackiem na jedną komendę. Praktyczny przewodnik po modelu releases/current, plikach współdzielonych, łańcuchu zadań Rails, konfiguracji multistage i pułapkach wartych poznania.

5 min czytania

Zadania w tle z Sidekiq i Redis

Sidekiq przetwarza zadania w tle wątkami i Redisem, i jest szybki — ale szybkość przychodzi z regułami. Deep-dive o tym, jak działa, dlaczego twoje zadania muszą być małe i idempotentne i jak przeżyć ponawiania oraz współbieżność.

4 min czytania

Ruby 2.2: inkrementalny GC i GC symboli

Ruby 2.2.0 przybywa w Boże Narodzenie z dwoma usprawnieniami garbage collectora ważnymi dla realnych aplikacji — inkrementalnym GC skracającym pauzy i GC symboli, który wreszcie zamyka długotrwały wyciek pamięci i wektor ataku DoS.

4 min czytania

Blog programisty z Jekyllem i GitHub Pages

Dlaczego strona statyczna to właściwe narzędzie na blog programisty i jak zbudować go z Jekyllem oraz hostować za darmo na GitHub Pages — front matter, layouty Liquid, posty w Markdownie i pisanie w tym samym workflow, którego już używasz do kodu.

5 min czytania

Dowodzenie flotą EC2 z konsoli

Klikanie po konsoli AWS nie skaluje się poza garstkę serwerów. Jak sterujemy flotą EC2 z Ruby — deklarując instancje jako dane, uzgadniając stan pożądany z faktycznym i tagując się ku zdrowiu psychicznemu.

7 min czytania

Własny, szyfrowany pęk kluczy do haseł w Ruby

Weekendowy projekt: maleńki sejf na hasła z linii poleceń oparty na Ruby i OpenSSL. Rzetelny przegląd wyprowadzania kluczy, IV, szyfrowania z uwierzytelnieniem, porównania w czasie stałym — i każdego sposobu, w jaki da się kryptografię po cichu i z pewnością siebie zepsuć.