hrachův mini::blog

Proč stojí release management Nette za hovno

Z bývalého early-adoptera jsem sockou, která běží na stejblu. A… nepomohl jsem si. Proč?

Protože David se obloukem vyhýbá sémantickému verzování, něco jako alfa, beta, RC se dodržuje naprosto random způsobem. Ani se nedivím firmám, které prostě běží na několik let starém Nette. Ta nejistota vs. náklady na přechod vs. nové featury - to udělá své.

Příklad 1.

Čtvrt roku připravoval David velmi náročnou migraci na rozdělení Nette. Mnoho tříd a částí muselo projít výrazným refactroginem, zvláště Latte. Ale nikdo to moc nestestoval, protože nebylo dne, kdyby nové repozitáže němely (pochopitelný) force-push. Jednoho dne se to ustálilo a David vydal betu1. (Ne alfu, ano, betu.)

Nikdo to moc nezkoušel, ikdyž to byla beta. Proč? Inu, protože v Nette nikdy beta nebyla beta. Jednoho odpoledne jedu domů vlakem, a čtu tvít, že prý když nikdo nedal feedback, tak prý to bude asi stable. Říkám si, dobrý vtip. Něž jsem přijel domů, bylo tagnuté RC-1.

To jsem se nasral, zrovna jsem udělal změny do Nette Database, a chtěl jsem, aby se vešly do Nette 2.2, a takto se do něj nevejdou. Po dvou minutách jsem se rozčílil víc, 5 dnů starý commit se objevil v RC-1. Naprosto neotestován komunitou (nebyl v ani v té betě bez feedbacku). Druhý commit tam byl taky, ale vzhledem k jeho primitovnosti mi to nevadilo. David na moje rozlobené námitky v privátním forů odpoveděl jednoznačně - ano, nebude tam ani jeden commit. (Hádáte správně, tag byl forpushnutý.)

Pointa ale unikla, RC1 se nevydává proto, že se nikdo neozval.

Příklad 2.

Tak ok. Moje změny do db se dostanou později. Nasadím si všude stejblíček, přemigruju své nextras komponenty se stovkama stažení měšíčně - a hle - ono stačí vydat Nette 2.2.2 (tj. novou verzi nad 2.2.1) a ono vám to rozbije … všechno. Pojďme si probrat proč.

V Nette 2.2 se objevil "nasty" bug. Aby taky ne, když tu verzi tolik lidí kvalitně testovalo. Jeho fix byl trochu složitejší, viz. Davidův commit.

Bohužel, moje latte makro využívá nějaké interní struktury pro důležitou funkcionalitu - redefinici bloků. Je to proto, že to potřebuju a neexistuje api, který by to umožnilo udělat.

Issue (způsobená BC breakem) byla nahlášena den před tagnutím stablu 2.2.2. Než jsem stačil vykomunikovat o co jde, dostalo se to i do stablu. Issue nahlásil i další člověk - Nextras komponenty jsou prostě používaný ;-)

V čem nastala chyba:

  • uplně první chyba ve vydání 2.2., že se do stablu dostala regrese,
  • další chyba nastala, že 2.2.2 nemělo release candidate, kdyby jo, stačili bychom udělat fix, aby oprava byla zpětně kompatibilní.

Každopádně pozor, autor Nette doporučuje: neserte se do vnitřností Nette.

Korektní řešení: nevím, změna je komplexní, ale přejmenování proměnné na staré jméno by v 2.2. mohlo stačit a nemuselo by to vadit. Největší průser je, že toto nelze moc detekovat při kompilaci, podmínku pro kompatibilitu budu muset napsat do runtimu.

Příklad 3.

Kolem vydání 2.2.2 se točila asi divná aura. David naprogramoval feature, která se samozřejme do 2.2.2 musela dostat.

  • Hned pod commitem první report, že je něco špatně. Ano, použil si to špatně, oprav si.
  • Další report máme v poznámkách k vydání.
  • Aby toho nebylo dost, dnes na fóru další dotaz.

Kolik jich ještě bude?

Btw, korektní řešení: vydat promptně 2.2.3 s revertem.


…bude asi ještě dlouho snem.

Jak mě naštvaly České dráhy

To takto jednou čekám v krpoli na Dádu a soudruzi z ČD hlásí, že vlak má víc jak 30 minut zpoždění. Znáte to, twitter dávno přečtenej, nette forum jakbysmet, co dělat. A tak jsem si všiml, že tam maj lehce víc popraskaný koleje, teda pražce. Ideální příležitost to těm … vrátit!

Adresát: Drážní inspekce, Brno

Dobry den,
v zavislosti na clancich v tisku jsem si uvedomil, ze jiz dlouho jsem svedkem
velmi spatneho stavu koleji v Brne kralove poli, primo v zeleznicni stanici.
Na koleji cislo 1 je vyznamne poskozeni koleji,
v ramci 10m useku:
- chybi sroub
- je 3× vyznamne pukly prazec, jehoz rozpadla cast je dokonce vychylena o nekolik cm
- dalsi pukle prazce, nicmene jejich konzistence jeste naoko drzi.
Fotografie  jsou ke shlednuti zde: https://plus.google.com/photos/111140777564857582948/albums/5937193243006796577
Dekuji za provereni,
s pozdravem
Prostě… když už jsem to nafotil, tak jsem to i odeslal. Do dvou dnů přišla odpověď:
Dobrý den,
děkujeme za informaci, v nejbližší době podnět prověříme a vyrozumíme Vás o výsledku.
Tož, slušný, říkám si!
V pátek mi po dvou týdnech došel email s tímto dopisem:
Vážený pane Škrášku,
dne 21. 10. 2013 jste poslal Drážní inspekci (dále jen DI) e-mail, ve kterém jste poukázal na špatný stav pražců v železniční stanici (dále jen žst.) Brno-Královo Pole a žádal jste DI o prověření této skutečnosti.
Na základě tohoto Vašeho podnětu vykonala DI dne 31. 10. 2013 v žst Brno-Královo Pole státní dozor ve věcech drah (dále jen SD) za účelem zjištění skutečného stavu.
V průběhu výše zmíněného SD zkontrolovala DI kromě jiného i stav pražců v 1. a 2. staniční koleji. Při SD byly zjištěny závady a provozovatel dráhy, Správa železniční dopravní cesty, statní organizace, byl vyzván k jejich odstranění do 31. 1. 2014.
Zároveň Vám sděluji, že o zjištění situace bude DI informovat i Drážní úřad.
Děkujeme Vám za podnět a zájem o bezpečnost při provozování drážní dopravy a zároveň Vás ujišťujeme, že DI se bude zabývat i případnými dalšími podněty.
S pozdravem
Bc. Josef Dvořák
Koukám, že státní správa občas funguje. Good job.

Webexpo 2013

S trochu delším odstupem bych rád rozepsal své myšlenky o Webexpu 2013. Raděj jednoduše (a spíše to, co bych rád, aby se vylepšilo):

  • en speakři moc dobří.
  • cz speakři spíše špatní, zřejmě nervozitou z en.
  • moderátoři MUSÍ umět anglicky… (víme své, že devhall).
  • cena - jako student na hranici.
  • trička - konečně zase úžasná.
  • jídlo - strašné. opravdu nepotřebuji připosrané čokoládové jednohubky, které jsou vyzdobeny do nejmenšího detailu. oběd… hm, prostě s prázdným břichem mě přednášky nezajímají.
  • pítí - kde je kofola nebo malinovka???
  • pití2 - kafe nepiju a při konferenci pivo taky ne.
  • pití3 - že první den nebyla už ani voda je fakt fail.
  • party v patek: ty ceny… pivo z plechovky za 55? Jako nejsem socka, ale co je moc, to je moc.
  • party v sobotu: během vystoupení na učet Kolesy jsem ještě netušil, že to patří k tomu lepšímu :(
  • party: někdo nepochopil, že spíš chceme pokecat, než tančit na blikající podlaze.
  • příští rok? ale jo… snad jo :)
  • EDIT: největší fail byl náramek na ruce

LaTex, bibliografie a ISO690

Pokud potřebujete vysázet rejstřík použité bibliografie, v českých zemích byste měli použít normu ISO 690.

Pro LaTex existuje pěkný český styl dostupný zde: http://repo.or.cz/w/csplainnat.git. Stáhnete ho kliknutím na melé “zip” u posledního commitu.

Ve výchozím chováním jsou reference tvořeny názvem knížky, respektive jeho částí. Standardně ale chceme přeci použít čísla. Toho se dá dosáhnout zavedením natbib s patřičným parametrem.

\usepackage[square, numbers]{natbib}

Pokud chete klikací reference, použijte standardně package hyperref.

Chceš vyvíjet Firefox? Odkazy jak začít.

Náhodou jsem včera narazil na zmínku o “mentored bugs”, dříve nazývané “good-first-bug”. Hned jsem si termín vyhledal a zajásal, to je přesně to, co by mohlo rozhoupat moje zapojení do projektu(ů) Mozilly.

Mentored bugs jsou issue v bugzille, které jsou jednodušší a někdo vám s nimi pomůže. Povětšinou mají už i textově vyplněné to, co je třeba udělat. Ne vše je uplně triviální, ale myslím, že ono “hození do ledové vody” by mě nakonec mohlo naučit plavat.

Zde jsou důležité odkazy:

Dle návodu jsem stáhl zdrojáky a přes pymake zkompiloval. První kompilace trvala dlouho, další už jen chviličku.

První bug, do kterého jsem se zasnažil udělat patch je tento: https://bugzilla.mozilla.org/show_bug.cgi?id=785903. Tak uvidíme, jak to celé dopadne :)

Deploy s gitem, hook a dojmy

Již to nebylo udržitelné. Člověk si udělal nějakou feature do administrace (=upravil vzhled, poladil nějaký šablony) a už musel to nahravávat na dva servery, procházet všechny ty adresáře a podle “barevné tečky” (symbol tortoise gitu) přehrávat soubory na ostrej. Opruz. Při upravě frontendího kódu ani nemluvě, když daná úprava byla ve více třídách a metodách, tzn. pár lidem to muselo spadnout… :(

Tak jsem si nechal na servery nainstalovat git. Výborný tutoriál je zde: http://blog.urbasek.cz/instalace-git-serveru-na-ubuntu/. Pak ale začali problémy při vytváření githooku. Projekt běží v nette a historických důvodu má trošku divnou strukturu adresářů, takže něco jako git reset —hard do ostrých dat určitě dělat nešlo. Skvělou myšlenku mi vnukl hook, který používají signály.cz (pro které programuju) - udělat si bokem deploy adreáře, do něj provádět hookem git reset a posléze provést rsync potřebných souborů. To je již velmi použitelná strategie. V rsyncu si vyberu to, co chcu syncovat, co nechcu … a jedem. Bylo ještě třeba nastavit parametr “-c”, který aktivuje porovnání dle checksum, klasické porovnávání dle timestampu a velikosti není kvůli git resetu možné.

Nu, nicméně vyskytly se další problémy a to práva. Jako nejoptimálnější cestu (a díky za to, že vůbec je možná) jsme zvolili stav, kdy uživatel git (viz. tutorial) ma stejné UID jako uživatel, přes kterého jsem se normálně dříve přihlašoval do konzole (a přes SFTP nahrával soubory). Pouze zařazení do stejné skupiny nebylo dostatečné a zlobilo. Post-receive hook by mohl vypadat nějak takto:

#!/bin/sh

read oldrev newrew refname

if [ $refname = "refs/heads/production" ]; then
        echo "Welcome to git deploy!"
else
        echo "Deploy canceled!"
        exit 1
fi

branch="production"
source="/home/www/example.com-deploy"
target="/home/www/example.com"

unset GIT_DIR

cd $source
git fetch
git reset --hard origin/$branch

rsync \
  --include="/chci_include/.htaccess" \
  --exclude="/__*" \
  --exclude="/.git" \
  -r -p -c --size-only --delete-after  \
  $source/ $target/ 2>/dev/null

echo "Deploy finished!"

exec git-update-server-info

A malý tip na závěr:

alias gui='git gui&'

Příkaz gui je jen zpříjemněním spuštění dialogu pro commitování. :) Tento řádek vytvořte (i na Windows ;) v souboru ~/.bashrc
Enjoy, snad to někomu pomůže!

Webexpo 2010

Zkusím to nějak stručně a věcně. Mnozí se mnou nebudou souhlasit, ale to je asi  tak všechno, co můžou :)
Nejdříve perly, aneb to, co se mi opravdu líbilo:

  • Fabian Potencier - Symfony 2: skvělý řečník i framework, s jeho názorem v panelové diskuzi se naprosto ztotožňuji; Ten člověk ví a umí;
  • Derick Rethans - Debugging with Xdebug: jo, Nette framework je lepší, respektive není třeba pak právě “tolik” xdebugu :) každopádně, zajímavé zkušenosti, “něco” jsem se dozvěděl
  • Richard Fridrich - Čo ma naučili epické zlyhania na Centrum.cz: vtipné, poučné, zajímavé
  • Ryan Singer - Designing from start to finish: bohužel sem kvůli cestě do Brna musel odejít dříve, ale co sem viděl, to se mi moc líbilo, těším se na záznam
  • Diskuze - Budoucnost webových frameworků: s mnohým jsme nesouhlasil, ale aspoň se hádal každý s každým :D
  • Jakub Krč - Typografie v elektronických médiích
  • super tričko, zápisník, tužka
  • občerstvení před sály


Co ušlo, ale kdyby byly přenášející menší uspávači hadů, více akce a míň řečí, určitě bych ocenil:

  • Petr Douša, Lukáš Marvan - Testování použitelnosti – LIVE!: mnoho řečí pro nic
  • Lukáš Zaplatílek - Kašlete na uživatele
  • David Grudl - Nette Framework 1.0: příští VELKÁ věc: programátor v Nette se nic nového nedozvěděl, v porovnání se Symfony 2 se “pěkné a věcné” představení frameworku nekonalo; na druhou stranu vystoupení bylo velmi vtipné :)

A zbytek? Na plno věcí musím kouknout ze záznamu a další spoustu raděj ani nebudu komentovat. Webexpo mě zklamalo. Jako nový návštěvník jsem čekal víc. Premiérový raut nevypadal vůbec jako raut, natož premiérový, jen to byla trapný žranice, jako když se stojí fronta na párky na nádru. Když už jsem se po 20 minutých čekání dostal dovnitř, bylo vše téměř vyžraný, a všichni se sápali po nově přinesených mísách.

Něco podobného Warm-up party. Přecpaná, vrcholem všeho bylo, že došlo i placené pivo, a podali mi lahváče. :D LOL. Jídlo v menze bylo první den velmi chutné, ale druhý den fakt průser (studený brambory a k tomu podezřelé “něco”). Ale aspoň se na to moc nečekalo. Zato lituju těch chudáků, co čekali první den na registraci.

Další FAIL organizace byla kontrola, zda mám zakoupený raut. Nevím, jestli si organizátoři všimli, že existuje dnes F3 i v Excelu a nemusí si ty tabulky tisknout. Ono je pak totiž trapné, když své jméno vidíte z větší dálky vzhůru nohama dřív, než slečna, která ho hledá.

Tedy závěrem, vzhledem k tomu, že nikoho s přítomných téměř neznám, nikdo z kamarádů mě moc nepředstavoval, a já neměl tu “drzost” se přicpat do cizích hloučků, byla pro mě osobní přítomnost téměř zbytečná. LIVE stream by mi asi stačil. Ale asi se uvidíme i příští rok. ;)