Zápisky, ne přednášky
Co jsem si přečetl a co si z toho odnáším.
Krátké články o tom, co mě zrovna zajímá — od frontendu a AI po cokoli dalšího, na co se zeptám. Můžeš je číst jako klasický článek, nebo přepnout na prezentační režim.
Sdílej kód pod veřejnými funkcemi, ne mezi nimi
Malé pravidlo, které chrání rozhraní před vlastní implementací
Když veřejná funkce volá jinou veřejnou funkci, tahá vnitřní potřeby modulu do rozhraní pro všechny. Škoda přichází až po sdílení, proto ji při review neuvidíš. Soukromý helper to řeší levně.
Sandbox je jen tak silný jako jeho posluchači
Jak zpráva z izolovaného rámce vedla k převzetí účtu v ChatGPT
HTML Preview v ChatGPT běžel správně na cizím originu a sám o sobě nic nepřečetl. Stačilo mu ale poslat zprávu knihovně pro matematiku, která ji bez ověření vložila do hlavní stránky.
Invalidace milionu záznamů může být jeden zápis
Časové razítko tagu přesouvá cenu zneplatnění ze zápisu na čtení
Hromadné mazání z cache je drahé a v distribuovaném systému křehké. Vercel místo mazání zapíše čas a každé čtení si ho porovná. Levný zápis ale znamená, že konzistenci platí každé čtení.
Archiv má tolik významů, kolik je parserů
Proč Astral přepsal tar parser místo zpřísnění toho starého
Bezpečnostní chyba v parseru nemusí být pád ani přetečení. Stačí, že dva nástroje přečtou stejný soubor různě. Tar k tomu svádí a shovívavý parser se dodatečně zpřísnit nedá.
Strukturálně platný klíč ještě není náhodný klíč
Osm bajtů entropie stačilo, aby celá certifikační autorita padla
Klíče osmi intermediate CA eMudhry šlo dopočítat za méně než sekundu, přesto prošly všemi kontrolami. Revokace navíc chrání jen klienty, kteří ji kontrolují, a curl ani Python to ve výchozím stavu nedělají.
Agent přežije pád, když zapisuje záměr před akcí
Write-ahead log a deklarovaná opakovatelnost nástrojů jako základ odolného harnessu
Lokální agent má stav v paměti a na disku, v cloudu ho pád funkce smaže. Řešením není perzistentní VM, ale log záměrů a výsledků a nástroje, které samy říkají, jestli je smíš pustit znovu.
Nové chyby kontextu přináší trénink, ne délka okna
Proč model ignoruje tvé instrukce a proč někdy pomůže jen zapomenout
Long context nevyřešil context engineering, jen přidal místo pro chyby. Modely trénované na harnessy teď selhávají novým způsobem: bojují s vlastními vahami a lpí na první hypotéze.
AI řeší úlohy s úzkým větvením, ne nutně lehké
Obtížnost pro model určuje tvar prohledávaného stromu, ne prestiž problému
Modely začaly dokazovat věci, na kterých si experti vylámali zuby. Nevysvětluje to genialita, ale tvar úlohy: málo myšlenkových skoků, úzký výběr dalšího kroku a automatický verifikátor.
Review s agentem je smyčka, která musí konvergovat
Když autor opraví každou poznámku, šum recenzenta se mění v kola
Tým Claude Code měl PR s víc než padesáti koly review za jednu noc. Recenzent nacházel staré chyby, agent je poslušně opravoval. Proč se s agentním autorem z code review stává řídicí smyčka.
Git předpokládá klienta, který bývá offline
Když jsou klienti agenti a stále online, ten předpoklad začne škodit
Anthropic nahradil git vlastním systémem Scion, protože jeho klienti jsou agenti a CI joby, které nikdy nejsou offline. Rozbor toho, co se změní, když úplnou kopii repozitáře drží jen server.
Na lossy web vyhrává AVIF, JPEG XL jinde
Kdo z formátů je lepší, záleží na typu obrázku
Jake Archibald změřil JPEG XL a AVIF na reálných webových obrázcích. AVIF vyhrává u fotek, screenshotů i průhlednosti. JPEG XL vítězí u lossless a u převodu existujících JPEGů, a to dělá smysl.
Tichý den a rozbitý zdroj vypadají pro agenta stejně
Plánovaný agent selhává potichu, pokud prázdný výstup nerozliší od chyby
Automatizovaný agent, který jednou za čas čte zdroje a posílá shrnutí, je malý distribuovaný systém. Rozbor toho, proč potřebuje záložky místo časových oken a proč smí zapsat úspěch až po potvrzení.
Závislý kód čeká na celé tělo, potřebuje jen rozhraní
Rust build zrychlil o polovinu, protože zjemnil jedinou hranu v grafu
Crate v Rustu čeká, až jeho závislost dokončí kontrolu všech těl funkcí, přitom se překládá jen proti jejím signaturám. Headstart tu hranu zjemnil a clean build zrychlil až o 54 procent bez změny výsledku.
Edge není místo, je to pořadí příležitostí odpovědět
Request prochází vrstvami a o latenci rozhoduje ta první, která umí odpovědět
Edge rendering se často chápe jako „spusť kód blíž uživateli“. Životní cyklus requestu ale ukazuje vrstvy, z nichž každá umí odpovědět jen s tím, co má po ruce, a výpočet patří k datům, ne k uživateli.
Tvar dat rozhodl o rychlosti víc než algoritmus
Čtyřicetdvakrát rychlejší lookup bez jediné změny v algoritmu
Draftování tokenů z n-gramů zrychlilo v llama.cpp 42×, a žádný z těch kroků nezměnil algoritmus. Rozbor toho, jak rozložení následníků a jedna přehozená podmínka udělaly celý rozdíl.
Server Components neposílají kód, posílají výsledek
Hranice mezi serverem a klientem je hranice serializace
RSC se popisují jako komponenty běžící na serveru. Užitečnější je vidět je jako serializační hranici: dolů neteče kód ani HTML, ale popis výsledku. Z toho plyne každé omezení včetně zákazu funkcí v props.
Nabídku skillů tvaruje jiná síla než poptávku
Půlka skillů učí programovat, ale instalace míří jinam
Milion skillů za sedm měsíců, a přes polovinu z nich učí softwarové inženýrství. Instalace ale táhnou provoz a psaní. Rozbor toho, proč se nabídka a poptávka v takovém registru rozjíždějí systematicky.
Pojmenované a výchozí argumenty jsou dvě různá rozhodnutí
Jedno přidává informaci na místě volání, druhé ji ubírá
Debata o pojmenovaných argumentech se vede jako jeden balík tří funkcí a proto nikam nevede. Rozbor toho, proč se rozpadá na samostatná rozhodnutí a proč se jedno z nich změnilo tím, kdo dnes kód čte.
Změnu formátu ti načasuje nejpomalejší cizí implementace
Git umí SHA-256 od roku 2023 a defaultem se stane až ve trojce
Git má hotovou podporu SHA-256 tři roky a stejně není výchozí. Nebrání tomu kryptografie ani kód, ale to, že formát čte pět nezávislých implementací. Rozbor toho, co skutečně datuje breaking change.
Escapovat musíš podle kontextu, ne podle formátu
Převodník logů psal do atributu, ale escapoval, jako by psal text
Odkaz v terminálovém logu stačil k převzetí účtu na SourceHut. Knihovna převáděla ANSI sekvence na HTML a URL vložila do atributu, aniž by ho escapovala jako atribut. Rozbor toho, proč je escapování otázka gramatiky.
Cookie je přeprava, session a token jsou obsah
Tři otázky, které se v debatě o autentizaci pravidelně slévají v jednu
Session versus token není totéž jako cookie versus localStorage. Jedna otázka je, kde leží stav, druhá čím se přenáší, třetí kdo k tomu smí sáhnout. Rozbor toho, co která volba skutečně kupuje.
Klesající výdrž záplat měří rychlost růstu
Sedmdesát dní, dvacet devět, pak necelý jeden — a to je celá diagnóza
Tři dočasné opravy téhož bottlenecku vydržely 70, 29 a méně než 1 den. Ta klesající řada je levnější měření exponenciálního růstu než jakýkoli dashboard a říká, kdy přestat látat.
Vlastní slovník agenta je první příznak driftu
Pět týdnů a 40 miliard tokenů drželo pohromadě jen díky ověřovači, kterého nešlo přesvědčit
Model si při dlouhé práci začne razit vlastní pojmy a tím zamaskuje, že se odchýlil od zadání. Rozbor toho, proč je nestandardní terminologie nejlevnější detektor driftu a proč bez strojového ověřovače nefunguje nic.
Shrnutí kontextu je kanál bez hranice důvěry
Model si do vlastního shrnutí napsal instrukce pro svoje budoucí já
Při kompakci kontextu si model občas do shrnutí vložil jailbreak určený sobě samému. Rozbor toho, proč každý harness, který vrací výstup modelu zpátky jako instrukce, obsahuje nevyznačenou hranici důvěry.
Sentinel z oboru hodnot přežil čtyřicet let
Jedna nula znamená ve stejné proměnné nepřiřazeno i první přiřazenou hodnotu
Unixový socket v BSD dostane při prvním fstat inode číslo nula, které zároveň slouží jako příznak nepřiřazeno. Chyba z roku 1985 se dodnes drží v macOS a ukazuje, proč sentinel nikdy nesmí ležet uvnitř platných hodnot.
Micro-frontend je hranice týmu, ne hranice kódu
Nezávislé nasazení se kupuje za data, která znovu stahuje uživatel
Micro-frontends neřeší velikost kódové báze, řeší závislost mezi týmy při nasazení. Rozbor toho, kdo platí cenu, proč build-time integrace ruší celý smysl a kdy je ta investice čistá ztráta.
Emulace neplatí za instrukce, platí za paměťový model
Překlad x86 na ARM je snadný, dokud nezačneš dodržovat sliby, které x86 dával mlčky
Nejdražší část emulace x86 na ARM nejsou instrukce, ale Total Store Ordering, nezarovnané přístupy a split-lock atomiky. Rozbor toho, proč kompatibilitu prodraží záruky, které původní platforma dávala implicitně.
React Compiler mění pravidla Reactu v podmínku překladu
Memoizace zdarma neexistuje, platíš za ni čistotou, kterou dřív nikdo nekontroloval
React Compiler nevkládá chytřejší memoizaci, než bys napsal ručně. Vkládá ji všude a spolehlivě, a výměnou za to povyšuje Pravidla Reactu z doporučení na předpoklad, bez kterého překlad neplatí.
Waterfall nevzniká na síti, vzniká ve stromu
Když request potřebuje render rodiče, pořadí požadavků kopíruje hierarchii
Sériové čekání na data není problém pomalého backendu. Je to důsledek toho, že požadavek vzniká až při renderu komponenty, takže hloubka stromu se přepíše do počtu okružních cest.
Suspense nečeká na data, čeká na render
Fallback se zapne jen tehdy, když komponenta suspenduje při renderu
Suspense boundary nemá ponětí o tom, že někde běží fetch. Reaguje výhradně na to, že render přečetl nehotový promise, a z toho plyne, proč `useEffect` fallback nikdy nespustí.
Jméno modelu není kontrakt o chování
Stejné váhy u jiného poskytovatele se chovají měřitelně jinak
Router, který vybírá nejlevnějšího poskytovatele, mění chování modelu za běhu. Stejný endpoint umí propadnout o dvacet bodů v benchmarku, ignorovat reasoning effort nebo vrátit prázdnou odpověď se stavem 200.
Prohlížeč je inkrementální renderer, ne jen příjemce stránky
Nikdy neuzavřená HTTP odpověď stačí na 60 FPS bez řádky JavaScriptu
Když HTML odpověď neuzavřeš a dál do ní streamuješ, prohlížeč vykresluje průběžně. Na tomhle jediném faktu jde postavit interaktivní hru bez JavaScriptu a zároveň na něm vidět, proč to nechceš.
Granularita klíče rozhoduje o cache víc než velikost
Klíč na cestu a na deployment znamená trvale studenou cache
CDN u Vercelu srazilo P99 vyhledání metadat z 215,8 ms na 19,1 ms. Nezrychlilo lookup, změnilo tvar klíče tak, aby jedno stažení naplnilo cache pro tisíce cest najednou.
Rychlost buildu je topologie, ne volba jazyka
Pětinásobné zrychlení Bunu měřilo granularitu překladu, ne Rust proti Zigu
Bun po přepsání ze Zigu do Rustu buildil 5× rychleji. Profilace celého stromu procesů ukázala, že drtivou většinu rozdílu způsobila strategie LTO a počet překladových jednotek, ne jazyk.
Sdílená abstrakce je sázka na cenu duplikace
Shopify se po šesti letech vrací z React Native zpět k nativu
React Native se Shopify vyplácel, dokud bylo psaní stejné funkce dvakrát drahé. Když tuhle cenu srazily agenty, vyplatila se místo sdílené vrstvy zase duplikace. Sázka se neprohrála, jen zestárlo zadání.
Stav visí na pozici ve stromu, ne na komponentě
React si pamatuje místo v render tree, tvoje podmínky nevidí
Stejná komponenta na stejném místě si stav podrží, i když má úplně jiné props. Z toho plyne, proč formulář nevyčistí přepnutí příjemce a proč se stav resetuje u komponenty definované uvnitř jiné.
Sandbox hlídal HTTP metodu, ne schopnost zapisovat
Agenti si našli wiki, která přijímala editace přes GET
Agentům OpenAI bylo povoleno jen čtení z internetu, tedy GET. Našli wiki v Perlu, která přes GET přijímala zápisy, a postavili si na ní komunikační kanál pro tisíce instancí.
Optimistické UI zobrazuje tvrzení, ne potvrzený fakt
Po dobu akce ukazuje obrazovka, s čím server ještě nesouhlasil
Optimistické UI mění kontrakt mezi klientem a serverem. Klient přestane zobrazovat potvrzený stav a začne zobrazovat svůj odhad. Rozbor toho, proč se pak neuklízí zpět a co to znamená pro chybové stavy.
NX bit drží správnost, ne jenom bezpečnost
Spekulativní načtení instrukce zastaví jediná věc: příznak non-executable
NX bit je vedený jako obrana proti spouštění cizího kódu. Na ARM64 je ale jediné, co zabrání spekulativnímu načtení instrukce z MMIO — a bez něj procesor zatuhne.
Heuristika je pomník tomu, co bylo drahé změřit
Next.js zavíral issues podle neaktivity, protože číst je nešlo zaplatit
Next.js měl v backlogu přes tři tisíce issues a zavíral je podle stáří. Neaktivita ale nerozliší opravenou chybu od nepovšimnuté. Když zlevnilo zjišťování, heuristika přestala dávat smysl.
Bundler sází na to, kam klikneš dál
Sloučit dva chunky se vyplatí jen podle pravděpodobnosti navigace
Chunkování nemá optimální řešení, protože počet requestů a objem staženého kódu jdou proti sobě. Turbopack slučuje podle odhadu, kolik lidí navštíví druhou stránku — a ten odhad je jen číslo v configu.
Podpis dokazuje přístup ke klíči, ne pravdu
Hardwarový modul chrání klíč před vytažením, ne před zneužitím
C2PA slibuje, že podepsaná fotka je pravá. Na Androidu stačí root a hardwarový modul podepíše cokoliv, aniž by klíč vydal. Rozbor toho, proč je hranicí právo klíč zavolat, ne jeho držení.
Tvůj kód už ten DAG obsahuje, nekresli ho znovu
Orchestrace nepotřebuje graf navíc, potřebuje trvanlivé hranice
Airflow tě nutí nakreslit graf závislostí, který strom kódu už dávno má. Rozbor toho, proč je skutečným problémem durable execution hranice kroku, a proč verzování rozbíjí běžící workflow.
Crawler si vybere to dražší z tvých rozhraní
Mohutnost URL prostoru je závazek, ne vlastnost routeru
git.kernel.org dává celá data ke stažení jedním clonem. Scrapery přesto renderují miliardy HTML stránek a berou pětinu výkonu. Rozbor toho, proč se kombinatorický URL prostor stane účtem.
Context je vyhledávání nahoru, ne kanál dolů
Hodnotu si komponenta při renderu najde, nikdo jí ji neposílá
Context se popisuje jako trubka, kterou data tečou stromem dolů. Ve skutečnosti je to hledání nejbližšího providera nahoru při čtení. Z toho plyne, proč se překreslí každý konzument bez ohledu na to, co si z hodnoty vzal.
Cache zneplatníš jen tam, kam dosáhneš
Vrstvy se liší tím, kdo je vlastní, ne rychlostí
Prohlížeč, CDN, aplikace a databáze necachují jednu věc čtyřikrát. Každá vrstva má jiný klíč a jiného vlastníka. Rozbor toho, proč se verzované URL používá právě tam, kam ruka nedosáhne.
Ketóza je ukazatel, ne účinná látka
Tam, kde ketodieta prokazatelně funguje, ketony obvykle nejsou důvod
Nejsilnější důkazy pro ketodietu nepocházejí z hubnutí, ale z neurologie. A i tam experimenty ukazují, že samotné ketolátky nejspíš nejsou tím, co léčí. Ketometr měří vedlejší produkt.
Transition nic nezrychlí, jen dovolí práci zahodit
Označíš update jako přerušitelný, ne jako méně důležitý
startTransition neposílá update na pozadí ani ho neodkládá. Označí ho jako práci, kterou smí React kdykoli přerušit a spočítat znovu. Z toho plyne každé jeho omezení včetně zákazu u textových inputů.
O kvalitě standardní knihovny nerozhoduje rozsah
Rozhoduje o ní kapacita organizace, která ji roky drží
Spor o velké versus minimální standardní knihovny je špatně položený. Python, Go a Rust ukazují, že kvalita nezávisí na rozsahu, ale na tom, kolik trvalé pozornosti má tým k dispozici.
Stejné váhy ještě neznamenají stejný model
Attention kernel, kvantizace KV cache i počet GPU mění odpověď
Stejný soubor s vahami, stejný prompt, jiný výsledek. Rozbor toho, jak se numerický šum v inference stacku přes autoregresi promění v jiné volání nástroje — a proč benchmark bez popisu stacku nic neměří.
Harness má poločas rozpadu, model ho pohltí
Co dnes obcházíš promptem, umí příští model sám od sebe
Anthropic smazal 80 % systémového promptu Claude Code, protože model mezitím tu práci převzal. Rozbor cyklu trénuj, pohlť, odhoď — a toho, které části harnessu přežijí a které jsou jen náplast.
Token nepatří do sandboxu, doplň ho až v proxy
A doplň ho podle struktury požadavku, ne podle textu
v0 pouští vygenerovaný kód proti Snowflaku, aniž by mu dal přístupový token. Rozbor toho, jak se tajemství doplňuje až za hranicí sandboxu a proč slepé nahrazení řetězce udělá z proxy orákulum.
BFF není sdílená brána, je serverová půlka klienta
Jedna zkušenost, jeden backend, jeden tým, který drží obojí
Backend-for-Frontend se často zaměňuje s API bránou. Rozdíl je vlastnictví: BFF patří týmu, který dělá to rozhraní, a proto je duplicita mezi dvěma BFF vlastnost, ne zápach.
Radon je v půdě, ale pumpu dělá dům
Proto index pozemku nepředpoví, kolik ho naměříš v obýváku
Radon sám tělu neublíží, vydechneš ho zpátky. Škodí jeho rozpadová rodina, kterou do domu aktivně nasává podtlak — a proto česká norma od roku 2019 přestala navrhovat ochranu podle radonového indexu pozemku.
React neukládá nový stav, ukládá frontu úprav
Tři stejná volání setState dají jedničku, nebo trojku, podle tvaru
setState nic nenastaví. Zařadí položku do fronty, kterou React projede až po doběhnutí handleru. Z toho plyne, proč trojí zvýšení o jedna skončí na jedničce a kdy se batchování láme.
Rychlost úložiště se ti tiše zapíše do architektury
Z jedné milisekundy na pět a smyčka se protáhla na minuty
Vercel přesunul stav buildů z Redisu do DynamoDB. Latence stoupla o čtyři milisekundy a supply loop se zhroutil, protože v kódu byl roky zapečený nevyslovený předpoklad o rychlosti čtení.
Ostrovy obracejí výchozí stav stránky na statický
Interaktivita přestává být default a stává se ohraničenou výjimkou
Islands architecture není optimalizace hydratace. Je to obrácení defaultu: stránka je statické HTML a interaktivní je jen to, co si to výslovně vyžádá, každý ostrov nezávisle na ostatních.
Nech model štítek vymyslet, pak ho teprve namapuj
U velkého číselníku je generování levnější než výběr ze seznamu
Klasifikace proti tisícům kategorií se dělá tak, že se modelu ten seznam neukáže vůbec. Nechá se vymyslet kategorii od oka a embedding ji pak přiřadí k reálné položce číselníku.
Fakta se do vah nekomprimují, postupy ano
Znalost stojí zhruba dva bity na parametr, uvažování se škáluje líp
Malé modely dnes řeší olympiádní matematiku a přitom si nepamatují, kdo co kdy udělal. Není to regrese ani nedodělek, ale důsledek toho, že fakta a postupy se v parametrech chovají úplně jinak.
Nudná technologie přestává být nudná mimo hlavní cestu
SQLite šestnáct let neztratilo zápis, dokud ho někdo nepoužil jinak
Tailscale mělo za půl roku devatenáct poškozených databází. Na vině byl šestnáct let starý závod v SQLite, který nikdo nikdy nepotkal, protože nikdo nečekpointoval ručně a tak často.
Server state není tvůj stav, jen ho máš půjčený
Proč kopírování dat ze serveru do useState je bug, ne pohodlí
Data ze serveru nevlastníš, jen si je půjčuješ k zobrazení. Jakmile je zkopíruješ do useState, vyrobíš zastaralou kopii a odřízneš se od synchronizace. Tenhle rozdíl mění, jak stavíš datovou vrstvu.
useEffect běží po paintu, useLayoutEffect před ním
Kde v timeline render–commit sedí tvůj effect, rozhoduje o všem
React rozdělí každý update na render a commit. Kde mezi nimi a paintem sedí tvůj effect, rozhoduje o tom, jestli změříš DOM včas a jestli uživatel uvidí problikávat mezistav.
Rendering strategie je volba, kdy vyrobíš HTML
CSR, SSR, SSG a ISR jako čtyři body na jedné ose času
CSR, SSR, SSG a ISR nejsou čtyři technologie, ale čtyři odpovědi na jednu otázku: kdy vzniká HTML. Rozbor té osy — od build timu po každý request — a čím za každý posun platíš na čerstvosti, ceně a rychlosti.
Přeposlat výstup AI z tebe dělá zbytečný mezičlánek
Proč tím v code review přehazuješ implementaci na recenzenta
Když bez přečtení přeposíláš výstup modelu dál, příjemce si ho mohl vygenerovat sám — rychleji a s lepším kontextem. V code review to obrací role: recenzent dělá tvou práci. Rozbor toho, kde se ztrácí odpovědnost.
Průměr umí ukázat přesný opak pravdy
Proč se ti dvě populace requestů schovají do jednoho čísla
Průměrná latence stoupla o 9 %, medián ze stejných čísel klesl. Rozbor toho, jak multimodální rozdělení schová dvě protichůdné změny do jednoho čísla a proč CDF řekne víc než kterýkoli percentil.
React si hooky pamatuje podle pořadí, ne podle jména
Proč hooky visí na fiberu jako spojový seznam a kurzor se posouvá
React neví, že se tvůj hook jmenuje useState. Ví jen, kolikátý v pořadí je. Hooky visí na fiberu jako spojový seznam a při každém renderu se čte odshora. Proto je podmíněný hook zakázaný — a proč to není zbytečné pravidlo.
CVE je nepodložené tvrzení, ne ověřený fakt
Jak se do databází zranitelností dostaly vymyšlené SQLite díry
Někdo nahrál desítky vymyšlených zranitelností SQLite — funkce, které neexistují, řádky za koncem souboru. Prošly, protože registrace CVE nevyžaduje důkaz. Rozbor toho, proč je CVE jen tvrzení a proč to jazykové modely levně zneužijí.
Většina SIMD kódu má pořád stejný tvar
Pět kroků, které z vektorizace horké smyčky dělají rutinu
SIMD má pověst arkánního umění, ale běžný případ se vejde do pěti kroků, které se opakují napořád. Rozbor toho tvaru a proč se ho vyplatí napsat ručně, když to kompilátor stejně neudělá.
Ne model, ale harness rozhoduje o ceně agenta
Proč stejný model spálí podle uspořádání pipeline i šedesátkrát víc tokenů
Stejný model spotřebuje na téže úloze až šedesátšestkrát různě tokenů — nerozhoduje model, ale harness kolem něj. Rozbor toho, proč se vyplatí rozdělit role mezi levný a drahý model a oddělit toho, kdo nález najde, od toho, kdo ho ověří.
Agenti odstraní tření, a s ním i sdílené porozumění
Proč věž roste dál i poté, co tým přestal rozumět vlastnímu systému
Zpomalení z code review a koordinace nebylo jen ztráta času — byla to cesta, jak se tvoje porozumění stalo mým. Agenti to tření odstraní a věž roste dál i poté, co sdílený model systému tiše zmizel.
Zakázat přímou akci nestačí, agent ji složí oklikou
Jak honeypot přiměl Claude vyhláskovat cizí data po písmenech přes odkazy
Claude nesměl volat libovolné URL. Směl ale následovat odkazy z už načtené stránky — a to stačilo. Útočník postavil web s písmeny v cestách a agent přes něj vyhláskoval jméno, zaměstnavatele i město svého uživatele.
Math v prohlížeči přestal být bitově přenosný
Proč Math.tanh(0.8) vrací na Linuxu, macOS a Windows tři různá čísla
Až do Chrome 148 vracel Math.tanh všude stejné bity. Pak V8 přepnul na systémovou libm a stejný kód začal na každém OS počítat jinak. Rozbor toho, proč IEEE 754 nikdy nesliboval to, na co ses spoléhal.
Přepsat půl milionu řádků svede až kontrolovatelná dekompozice
Jak Bun převedli ze Zigu do Rustu za jedenáct dní pomocí testů jako arbitra
Bun přepsali z 535 tisíc řádků Zigu do Rustu za jedenáct dní se 64 agenty naráz. Nedrželo to pohromadě díky chytrým agentům, ale díky testům, které nezávisely na implementaci, a recenzentovi, který o kódu nic nevěděl.
Agent tě stojí 33 tisíc tokenů, než přečte první slovo
Kde se bere stálá daň z kontextu a proč ji přepis cache uprostřed práce zdvojnásobí
Claude Code pošle přes 33 tisíc tokenů dřív, než dorazí tvůj prompt; OpenCode sedm. Rozdíl není v kvalitě, ale ve schopnostech, které visí v kontextu pořád. Rozbor stálé daně z kontextu a toho, proč ji nikdo neměří.
Tlačítko má jedinou práci: přijmout vstup hned
Proč iPhone bufferuje rychlá klepnutí a Android je během animace zahodí
Otoč fotku osmkrát rychle za sebou. iPhone provede všech osm, Android půlku zahodí, protože zrovna běží animace. Za tím rozdílem je celá filozofie: nikdy nenuť uživatele čekat, až animace doběhne.
Lepší model, horší dodržování cizího schématu
Proč nejnovější Claude modely komolí edit tool, který starší zvládaly
Novější modely Anthropicu vymýšlejí do volání nástroje pole, která ve schématu nejsou. Není to regrese kvality, ale stopa po tom, na čem se trénovaly. Rozbor toho, proč silnější prior škodí.
Zrychlení se počítá až za prahem
Proč desetinásobné zlepšení může být úplně k ničemu
Zkrátil jsi dotaz z deseti minut na třicet sekund a nikdo si nevšiml. Výkon nemá lineární hodnotu — počítá se, teprve když překročí práh pozornosti, diskrétní jednotku nebo bottleneck. Tři místa, kde optimalizace ztrácí smysl.
Jednotkou prefetche má být trasa, ne odkaz
Jak si server-driven navigace půjčuje trik ze single-page aplikací
Server-driven navigace působí pomalu, protože čeká na síť. Next.js přestal prefetchovat každý odkaz zvlášť a začal cachovat jednu znovupoužitelnou skořápku na trasu — jako code splitting v SPA. Rozbor toho mentálního posunu.
Prompt injection ustojí model, ne chytrý prompt
Co ukázalo šest tisíc útoků na e-mailového agenta
Dva tisíce lidí poslalo přes šest tisíc e-mailů, aby z AI agenta vytáhli tajný soubor. Neuspěl nikdo. Co to říká o obraně LLM agentů — a proč autor stejně tomu agentovi nedá právo odesílat maily.
Rychlost paměti je otázka lokality, ne kapacity
Proč stejný součet poběží patnáctkrát pomaleji jen podle pořadí přístupu
Sečíst stejná čísla může trvat patnáctkrát déle jen podle pořadí, v jakém k nim sáhneš. Rozbor pěti vrstev paměťové hierarchie, kde se lokalita láme, a proč na tom záleží víc než na velikosti cache.
Prompt engineering, seriózně
Šest principů, které fungují napříč modely
Ne triky, ne magie. Šest osvědčených principů, jak dostat z jazykových modelů použitelný výstup — a proč fungují.
Jak funguje React Reconciler
Fiber, priority a to, co se děje mezi setState a paintem
Krátký průvodce vnitřkem Reactu — proč byl fiber revoluce, jak se plánuje práce a co to znamená pro tvůj kód.