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.
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.
Evale przed startem mówią ci, że agent działa na twoim zbiorze testowym. Produkcja mówi ci, czy działa na rzeczywistości — a tylko ciągłe monitorowanie zamyka tę lukę. Deep-dive o obserwowaniu agentów na wolności: co logować, co mierzyć, jak łapać cichą degradację i jak awarie produkcyjne wracają do twoich evali.
Gdy pojedyncze agenty działają, kusi, by spiąć kilka razem — badacza, pisarza, krytyka — i pozwolić im współpracować. Czasem to potężne; często to złożoność, której nie potrzebowałeś. Deep-dive o wzorcach orkiestracji dla systemów wieloagentowych, kiedy zarabiają na swoje utrzymanie i o trybach awarii, które mnożą się, gdy agenty się mnożą.
Gdy agent AI robi implementację, specyfikacja staje się artefaktem o najwyższej dźwigni w projekcie — jasna specyfikacja produkuje dobry kod, mglista produkuje pewny siebie bałagan. Deep-dive o tym, dlaczego rozwój sterowany specyfikacją odżył w erze agentów, jak wygląda dobra specyfikacja dla agenta i jak faktycznie zmienia się przepływ pracy.
Historia JIT Ruby po cichu stała się jedną z najciekawszych rzeczy w języku. Z Ruby 3.5 YJIT jest dojrzały i rozsądnym domyślnym — a nowy JIT oparty na metodach, ZJIT, wyłania się obok niego. Spojrzenie na koniec roku na to, gdzie stoi praca wydajnościowa Ruby i dlaczego posiadanie dwóch podejść JIT to zdrowy znak.
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.
Gdy Rails 8 wyszło, byłem entuzjastyczny wobec stosu „Solid” bez-Redisa i tezy frameworka jednej osoby. Teraz uruchamiałem go na produkcji przez sześć miesięcy. Oto uczciwa retrospektywa: gdzie dostarczył, gdzie były szorstkie krawędzie i czy uproszczenie wytrzymało pod prawdziwym obciążeniem.
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.
Małe modele stały się dość dobre, a urządzenia dość potężne, że uruchamianie AI na własnym sprzęcie użytkownika — telefonie, laptopie, przeglądarce — jest teraz realną opcją. Wpis trendowy o tym, co kupuje AI local-first, co kosztuje i o hybrydowej rzeczywistości, gdzie uczciwą odpowiedzią jest „trochę obu”.
Postawienie agenta na produkcji jest trudniejsze niż pojedyncze wywołanie LLM, bo agent to pętla z pomnożoną powierzchnią awarii — i musisz zarazem ograniczyć go w czasie wykonania i mierzyć go w czasie. Deep-dive o dwóch dyscyplinach, które czynią agentów produkcyjnych godnymi zaufania: barierach ograniczających, co agent może zrobić, i evalach testujących całą trajektorię, nie pojedyncze wyjście.
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.
Związanie aplikacji z pojedynczym dostawcą LLM to ryzyko: zmiana ceny, awaria albo lepszy model gdzie indziej zostawia cię utkniętym. Traktowanie dostawców jako wymiennych za warstwą routingu kupuje odporność i elastyczność — ale ma realne koszty. Deep-dive o routingu wielodostawcowym, gdzie się opłaca i gdzie jest przedwczesny.
Wywołania LLM są opomiarowane per token, więc w aplikacji intensywnie używającej LLM koszt to wymiar inżynierski, który projektujesz — nie rachunek, który odkrywasz. Deep-dive o wzorcach, które trzymają go pod kontrolą: warstwowanie modeli, cache, dyscyplina tokenów, budżety i pomiar, który musi przyjść przed którymkolwiek z nich.
Prototyp był magią. Potem wysłaliśmy go do prawdziwych użytkowników i wszystko, co demo ukryło, stało się wymagalne naraz — koszt, opóźnienie, nadużycie, padające API i unikalny problem wspierania funkcji, której wyjścia nie możesz w pełni przewidzieć. Opowieść z frontu o przepaści między demem LLM a produktem LLM.
Rok temu AI w edytorze oznaczało głównie autouzupełnianie. Teraz mamy narzędzia, które edytują przez wiele plików, uruchamiają komendy i przepracowują zadanie, gdy patrzysz. Po roku używania ich w prawdziwej pracy oto uczciwy przegląd: w czym są naprawdę dobre, gdzie zawodzą i jak zmieniają zawód.
Ruby 3.4 robi ostrożny krok ku zmianie tworzonej od dekady: uczynieniu literałów łańcuchowych zamrożonymi domyślnie. Mechanizm przejścia — „schłodzone” łańcuchy, które ostrzegają zamiast łamać — to mała lekcja mistrzowska ewolucji języka bez łamania świata. Spojrzenie na to, dlaczego zamrożone łańcuchy i jak Ruby dochodzi tam łagodnie.
Rails 8 nadchodzi z po cichu radykalną ideą: być może już nie potrzebujesz Redisa. Solid Queue i Solid Cache przenoszą zadania w tle i cache do bazy, zwijając standardowy produkcyjny stack Railsów. Spojrzenie na to, co robią biblioteki Solid, dlaczego „po prostu użyj Postgresa” wciąż wygrywa i kiedy stara odpowiedź jeszcze się broni.
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.
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.
Nagłówkiem Ruby 3.3 jest szybszy, dojrzalszy YJIT — ale cichszą, bardziej brzemienną zmianą jest Prism, nowy parser tolerujący błędy, który staje się standardem. Spojrzenie na to, co jest w tegorocznym świątecznym wydaniu, co dostajesz za darmo i dlaczego nowy parser ma większe znaczenie, niż brzmi.
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.
Nie możesz asertować dokładnej równości na wyjściu, które za każdym razem jest inne — więc jak w ogóle testować funkcję LLM? Deep-dive o evalach: budowaniu reprezentatywnego zbioru testowego, ocenianiu właściwości zamiast łańcuchów, łapaniu regresji i traktowaniu ewaluacji jako siatki bezpieczeństwa, która pozwala zmieniać prompty z pewnością.
Wywołanie LLM trwa sekundy, a użytkownik gapiący się na spinner czuje każdą z nich. Strumieniowanie tokenów w miarę ich generowania zamienia martwe oczekiwanie w żywy tekst — a Turbo Streams to dokładnie ten prymityw Railsów, który wypycha ten tekst na stronę. Deep-dive o podłączeniu wolnego wyjścia modelu do responsywnego UI.
Wyszukiwanie słów kluczowych dopasowuje słowa; wyszukiwanie semantyczne dopasowuje znaczenie. Deep-dive o embeddingach i podobieństwie wektorowym oraz o tym, jak pgvector pozwala robić wyszukiwanie semantyczne w Postgresie, który już uruchamiasz — bez osobnej bazy wektorowej.
Większość ustalonych aplikacji Rails niesie lata jQuery, a wielkowybuchowe przepisanie to pułapka. Deep-dive o przyrostowej migracji jQuery do Stimulus — strategia współistnienia, wzorce, które się tłumaczą, i jak to zrobić bez zatrzymywania pracy nad funkcjami.
Ruby 3.1 przybywa w Boże Narodzenie z YJIT — nowym JIT od Shopify, który wreszcie przyspiesza realne obciążenia Rails, nie tylko benchmarki — plus nowoczesny debugger, lepsze komunikaty błędów i wygodną składnię. Praktyczny przegląd.
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.
Kubernetes to branżowy standard uruchamiania kontenerów — i duże zobowiązanie operacyjne. Uczciwe spojrzenie na to, co daje, co kosztuje i czy mały zespół budujący aplikację Rails faktycznie go potrzebuje (zwykle: jeszcze nie).
Możesz uzyskać większość odczucia aplikacji jednostronicowej bez budowania jej. Deep-dive o Turbolinks 5 plus Stimulus — szybka nawigacja i dynamiczna interaktywność nad renderowanym po stronie serwera HTML — i dlaczego to podejście „HTML over the wire” jest po cichu właściwym domyślnym wyborem dla wielu aplikacji.
Pipeline CI jest użyteczny tylko, jeśli mu ufasz — a flakujący jest gorszy niż żaden, bo uczy zespół ignorować czerwone. Przewodnik po budowie pipeline'ów, które są szybkie, deterministyczne i godne zaufania, aż do deployu.
React przekształcił front wokół komponentów i jednokierunkowego przepływu danych; Redux dodał przewidywalne zarządzanie stanem. Deep-dive o obu dla programisty Rails — komponenty, propsy i stan, pętla Redux — i kiedy Redux to przesada.
Programiści Ruby kochają typowanie dynamiczne — więc dlaczego TypeScript jest wart uwagi? Deep-dive o stopniowym typowaniu statycznym dla JavaScriptu, co łapie, gdzie pomaga najbardziej i jak rubista powinien myśleć o typach na froncie.
Ruby 2.6.0 ukazuje się w Boże Narodzenie z pierwszym krokiem ku kompilatorowi JIT — dużą sprawą dla przyszłości Ruby — plus nieskończone zakresy, then jako alias dla yield_self i Bundler w bibliotece standardowej. Praktyczny przegląd.
GraphQL pozwala klientowi poprosić dokładnie o dane, których potrzebuje, rozwiązując over- i under-fetching REST. Deep-dive o graphql-ruby — typy, zapytania, mutacje, resolvery — pułapka N+1, którą tworzy, i uczciwe spojrzenie na GraphQL vs REST.
Każda publiczna aplikacja jest tłuczona — credential-stuffing na loginie, scrapery na katalogu, brute force na API. Deep-dive o Rack::Attack: throttling, blokowanie i śledzenie w stylu fail2ban, zastosowane na właściwej warstwie, by trzymać nadużycia z dala od aplikacji.
Większość wolnych zapytań jest o jeden brakujący indeks od szybkości. Deep-dive o poprawnym indeksowaniu Postgresa — co indeksować, kolejność kolumn w indeksie złożonym, indeksy częściowe i pokrywające, czytanie EXPLAIN i znajdowanie indeksów, których nie masz (oraz usuwanie tych, których nie używasz).
Docker dojrzał z ciekawostki w domyślny sposób na spójne środowisko. Przewodnik po dockeryzacji aplikacji Rails pod development i CI — docker-compose dla całego stosu, dyscyplina cache'u warstw i gdzie Docker pomaga, a gdzie dodaje tarcie.
Rails 5.2 wreszcie umieszcza wgrywanie plików we frameworku z ActiveStorage. Przegląd tego, jak działa — bloby, załączniki, backendy usług, warianty i bezpośrednie uploady — oraz uczciwe porównanie z CarrierWave i Paperclip.
Partiale plus helpery plus zmienne instancji czynią widoki Rails trudnymi do reużycia i niemożliwymi do testowania. Deep-dive o komponentach widoku w Rails z Cells — enkapsulowane, testowalne jednostki UI i dlaczego idea komponentów przychodzi na serwer.
RODO staje się egzekwowalne w maju 2018 i to nie tylko prawny ptaszek do odhaczenia — ląduje wprost na ludziach budujących systemy. Praktyczny przewodnik dla inżynierów: inwentaryzacja danych, zgoda, dostęp i usunięcie oraz prywatność od projektu.
Nie naprawisz tego, czego nie widzisz. Przewodnik po monitorowaniu aplikacji Rails na produkcji — garść metryk, które naprawdę mają znaczenie, śledzenie błędów, ustrukturyzowane logi i alarmowanie na objawy, które czują użytkownicy, a nie szum.
Otrzymanie wyników wyszukiwania jest łatwe; otrzymanie właściwych produktów we właściwej kolejności to prawdziwa praca. Deep-dive o strojeniu trafności dla sklepu — boostowanie sygnałami biznesowymi, synonimy, obsługa literówek, zero wyników i mierzenie, czy twoje zmiany naprawdę pomagają.
Historia z okopów: zbudowaliśmy szybko na MongoDB, uderzyliśmy w granice modelu dokumentowego, uruchomiliśmy Mongo i Postgresa obok siebie w jednej aplikacji Rails i migrowaliśmy kolekcja po kolekcji do Postgresa bez przestoju. Co to kosztowało, jak to zrobiliśmy i co zrobilibyśmy inaczej.
Checkout to miejsce, gdzie sklep zyskuje lub traci sprzedaż, a większość koszyków jest tam porzucana. Deep-dive o inżynierii i UX wysoko konwertującego checkoutu — mniej kroków, checkout gościa, uczciwa walidacja i tarcie, które po cichu kosztuje cię zamówienia.
Logika widoku nie ma w Rails dobrego miejsca — przecieka do modeli i zaśmieca szablony. Deep-dive o dekoratorach i presenterach: różnica, kiedy używać którego, czyste PORO vs Draper i jak trzymać prezentację z dala od domeny.
Rails 5.1 zawiera pokój z nowoczesnym JavaScriptem i zaostrza zarządzanie sekretami. Przegląd wydania — Webpacker i yarn, szyfrowane sekrety, testy systemowe, form_with i porzucenie jQuery jako domyślnego.
Przyjmowanie pieniędzy to część e-commerce, której nie możesz sobie pozwolić zepsuć. Deep-dive o poprawnej integracji bramki płatności — tokenizacja, klucze idempotencji, webhooki jako źródło prawdy i modelowanie płatności jako maszyny stanów.
Jeśli twoja wiedza o JavaScripcie zatrzymała się na jQuery, nowoczesny JavaScript (ES6) wyda się zaskakująco bliski Ruby. Przegląd funkcji, które mają znaczenie — let/const, funkcje strzałkowe, destrukturyzacja, klasy, moduły i promise'y — oczami rubisty.
Asset pipeline Rails zbudowano dla prostszego świata JavaScriptu. Gdy fronty wyrosły w prawdziwe aplikacje z npm i modułami, Webpack przejął pałeczkę. Deep-dive o tym, dlaczego nastąpiła zmiana, co Webpack robi inaczej i jak połączyć oba.
Ruby 2.4.0 przybywa w Boże Narodzenie z dawno spóźnionym porządkiem — Fixnum i Bignum scalone w jeden Integer — plus szybszy Hash, Enumerable#sum, Regexp#match? i binding.irb. Praktyczny przegląd.
Na ruchliwym sklepie nieostrożna migracja kładzie witrynę, blokując tabelę. Przewodnik po bezpiecznych zmianach schematu — blokady, które gryzą, bezpieczne dodawanie kolumn i indeksów oraz wzorzec expand-contract dla zmian nazw i NOT NULL.
Gdy sklep potrzebuje wyszukiwania, odruchem jest Elasticsearch — ale wyszukiwanie pełnotekstowe Postgresa dorosło. Pojedynek dla przypadku e-commerce: szeregowanie, fasety, tolerancja literówek i koszt operacyjny, który to rozstrzyga.
Strona katalogu szybka dla dziesięciu użytkowników może paść przy dziesięciu tysiącach. Deep-dive o warstwach cache'owania, które trzymają ją szybką — cache fragmentów, cache HTTP/CDN, cache niskopoziomowy — i o trudnej części: unieważnianiu i stampede.
Sprzedaż w wielu krajach oznacza tłumaczenie nie tylko interfejsu, ale danych, URL-i, formatów i SEO. Deep-dive o i18n w Rails przy skali — pliki lokalizacji, tłumaczona treść, routing lokalny i pułapki.
Katalog produktów to głównie obrazy, a naiwna obsługa obrazów go zatopi. Deep-dive o budowie skalującego się potoku obrazów — trzymanie oryginałów, generowanie wariantów w tle, offload na CDN i nietopienie serwerów webowych.
Sprzedaż w więcej niż jednej walucie brzmi jak problem wyświetlania, a okazuje się problemem modelowania danych. Deep-dive o poprawnym reprezentowaniu pieniędzy, przechowywaniu cen w wielu walutach, kursach wymiany, zaokrąglaniu i błędach kosztujących prawdziwe pieniądze.
Rails 5 wnosi ActionCable — WebSockety zintegrowane z frameworkiem. Deep-dive o kanałach, subskrypcjach i broadcastowaniu, jak działa pub/sub oparty na Redisie i o realiach skalowania trzymania tysięcy otwartych połączeń.
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.
Ruby 2.3.0 ląduje w Boże Narodzenie z dwiema zmianami, które będziesz pisać codziennie — pragmą frozen-string-literal i operatorem bezpiecznej nawigacji &. — plus dig, did_you_mean i więcej. Praktyczny przegląd.
Długo żyjące gałęzie funkcji powodują bolesne merge'e i wielkowybuchowe release'y. Feature flagi pozwalają mergować do trunka nieustannie i oddzielić deploy od release'u. Przewodnik po workflow, rodzajach flag i zarządzaniu długiem flag.
Zapytanie N+1 to najczęstszy błąd wydajnościowy w aplikacjach Rails i ukrywa się idealnie w developmencie. Deep-dive o tym, co je powoduje, różnicy między preload/eager_load/includes, counter cache i jak łapać je automatycznie.
Każde żądanie Rails przechodzi przez stos middleware Rack, zanim w ogóle dotrze do twojego kontrolera. Deep-dive o tym, czym jest Rack, jak działa stos middleware i jak napisać własne do logowania, autoryzacji i więcej.
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.
SQL LIKE to nie wyszukiwanie. Deep-dive o dodaniu prawdziwego wyszukiwania pełnotekstowego do aplikacji Rails z Elasticsearch — analizatory, mapowania, trafność, trzymanie indeksu w synchronizacji — i uczciwe spojrzenie na to, kiedy zamiast tego wystarczy Postgres.
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.
Chude kontrolery wepchnęły całą logikę w grube modele, a teraz są nie do opanowania. Obiekty usługowe to najpopularniejsza poprawka — oto jak używać ich dobrze, kiedy pomagają i jak zamieniają się w gorszy bałagan, gdy przesadzisz.
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ść.
Postgres 9.4 wnosi JSONB — indeksowalny, odpytywalny JSON wewnątrz kolumny relacyjnej. Deep-dive o tym, kiedy po niego sięgać, jak go odpytywać i indeksować, integracji z Rails 4.2 i o pułapce traktowania bazy SQL jak magazynu dokumentów.
Historia z okopów o postawieniu infrastruktury stojącej za projektem kryptowalutowym — demony monet, portfele i obsługa kluczy — odtwarzalnie, skryptami shell i Ansible. Lekcje bezpieczeństwa, których uczy tylko system obsługujący pieniądze.
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.
Release candidate Rails 4.2 jest już dostępny. Spojrzenie na trzy najważniejsze zmiany — ujednolicone API zadań w tle, po cichu duży zysk wydajności w ActiveRecord i klucze obce wreszcie lądujące w migracjach.
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.
AngularJS sprawia, że DOM reaguje na twoje dane automatycznie. Praktyczne wprowadzenie do dwukierunkowego wiązania, dyrektyw, kontrolerów i wstrzykiwania zależności — plus uczciwe spojrzenie na cykl digest i miejsca, gdzie magia kosztuje.
Historia z okopów o pakowaniu bitcoind w kontener: początkowe pobieranie bloków, które uczy pokory, dlaczego blockchain musi żyć w wolumenie, zamykanie interfejsu RPC i czego pełny węzeł uczy o długo działających usługach ze stanem.
Ansible konfiguruje serwery po zwykłym SSH, bez agenta do instalacji. Praktyczny przewodnik po provisioningu serwera aplikacji Ruby idempotentnymi playbookami i reużywalnymi rolami — i dlaczego bezagentowość nas przekonała.
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.
Rails 4.1 to po cichu znakomite wydanie punktowe. Przegląd funkcji, które wdrożyliśmy od razu — config/secrets.yml, podglądy ActionMailera, enumy ActiveRecord, preloader Spring i warianty żądań — wraz z drobnym drukiem każdej.
Docker zbliża się do 1.0 i zmieni sposób, w jaki wysyłamy aplikacje Ruby. Praktyczny przewodnik po obrazach, kontenerach i Dockerfile'ach — budowa odtwarzalnego środowiska deweloperskiego i dlaczego „działa na mojej maszynie” wreszcie odchodzi.
Cucumber jest albo mostem do twoich ekspertów domeny, albo kosztowną warstwą pośrednią — a to, który, zależy w całości od tego, jak go piszesz. Oto gdzie się opłaca, gdzie nie i jakie reguły stosujemy.
Użytkownicy robią literówki, a dopasowanie dokładne po cichu ich zawodzi. Praktyczny deep-dive w rozmyte dopasowanie oparte na trigramach w Ruby — jak działa, jak je przyspieszyć i kiedy zamiast tego wepchnąć je do Postgresa.
Dwa narzędzia, po które sięgamy w każdym projekcie Rails. Jak HAML czyni szablony czytelnymi, a SASS utrzymuje arkusze stylów w ryzach — ze wzorcami, które działają, i pułapkami (nadmierne zagnieżdżanie, @extend), które nie.
Ruby 2.1.0 ukazało się w Boże Narodzenie, jak nakazuje tradycja. Nagłówek to generacyjny garbage collector, ale to zmiany w języku — wymagane argumenty nazwane, refinements, Exception#cause — odmienią sposób, w jaki piszemy kod.
Twój zestaw testów działa na jednym rdzeniu, a pozostałe trzy stoją bezczynnie. Rzetelny przewodnik po rozdzielaniu RSpec na procesy z parallel_tests — osobne bazy, grupy balansowane czasem, błędy izolacji, które ujawnia, i skalowanie na węzły CI.
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ć.
Wdrażamy MongoDB z Mongoid na realnych projektach. Oto czym modelowanie dokumentów naprawdę różni się od ActiveRecord — embedded vs referenced, brak joinów, indeksy, zapisy atomowe, granice spójności i gdzie schemaless po cichu boli.
Rails 4.0 właśnie się ukazał. Oto rzetelne, prosto z okopów spojrzenie na to, co wdrażamy na realnych projektach — strong parameters, kompromis Turbolinks, caching „matrioszki”, pierwszoklasowy Postgres i pułapki aktualizacji.
Wzorzec projektowy w Ruby pozwalający rozszerzać obiekty o nowe zachowania w czasie wykonania, przy użyciu modułów i klas singletonowych — na przykładzie postaci z gry RPG.