čtvrtek 10. prosince 2015

Loadbalancing with Payara cluster and Apache2

I have tested the configuration on two operating systems - CentOS 7 and Kubuntu 15.10. These instructions are for CentOS, because there it is a bit more complicated.

All application server instances run on Payara 4.1.1.154 - two on CentOS 7 and one on Solaris5.10. Note that for correct cluster replication you need to have configured the multicast routing - or to have all instances on the same network ;)

1) You need to do this as root:
# aka apache2 and modules in debian linuxes
yum install httpd
2) You need time synchronization - one minute error is fatal. You can select another server for time sychronization - check also if it is accessible from the server.
yum install ntp ntpdate
chkconfig ntpd on
ntpdate pool.ntp.org
3) Edit the httpd.conf file and add two lines (use correct hostname, valid from the outside world):
vim /etc/httpd/conf/httpd.conf
ServerName myhost.mydomain.org
LoadModule rewrite_module modules/mod_rewrite.so

4) Edit httpd configuration file and put the loadbalancer settings in it. 
vim /etc/httpd/conf.d/00-default.conf
  • VirtualHost will run on port 80
  • you need some time to hold the session on one instance, where the user logs in - in this time the new session will be replicated to other payara instances in cluster. If the next request would be faster, the session would be invalidated. This is the reason why you need also the ROUTEID cookie - the stickysession changes it's value because a new session is created.
  • third internal host has status +H - that means "hot standby" - it will be routed only if other hosts would be inaccessible.
<VirtualHost *:80>
    ProxyRequests Off
    RewriteEngine Off
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/; Max-Age=60;" env=BALANCER_ROUTE_CHANGED
    ServerName myhost.mydomain.org
    LogLevel debug
    ProxyPass /balancer-manager !
    ProxyPass / balancer://myhost.mydomain.org/ stickysession=ROUTEID
    ProxyPassReverse /  http://myinternal1.mydomain:8300/
    ProxyPassReverse /  http://myinternal2.mydomain:8300/
    ProxyPassReverse /  http://myinternal3.mydomain:8300/
    ProxyPassReverseCookieDomain myinternal1.mydomain myhost.mydomain.org
    ProxyPassReverseCookieDomain myinternal2.mydomain myhost.mydomain.org
    ProxyPassReverseCookieDomain myinternal3.mydomain myhost.mydomain.org
    ProxyPassReverseCookiePath / /
    <Proxy balancer://cisas1.lab.i.cz>
        BalancerMember http://myinternal1.mydomain:8300 loadfactor=1 route=int1
        BalancerMember http://myinternal2.mydomain:8300 loadfactor=1 route=int2
        BalancerMember http://myinternal3.mydomain:8300 status=+H route=int3
        Order Deny,Allow
        Deny from none
        Allow from all
        ProxySet stickysession=ROUTEID
        ProxySet lbmethod=bytraffic
    </Proxy>
</VirtualHost>
5) Allow the httpd service to access the outside world via TCP - without that you will get only HTTP 503 and some message in error_log that the action was declined.
/usr/sbin/setsebool httpd_can_network_connect 1
6) Run the httpd service (and loadbalancing) and watch logs
systemctl restart httpd.service
journalctl -xn
tail -1000f /var/log/httpd/error_log

Payara, aneb zmrtvýchvstání aplikačního serveru Glassfish

SunOne7

Glassfish má za sebou dlouhatánskou cestu ... první, s čím jsem přišel do styku, byl SunOne7. Ten vznikl jako výsledek spolupráce s Netscape a Oracle stále ještě udržuje jakousi stařičkou dokumentaci.

Jeho výhodou byla jedna z prvních podpor EJB (což se ukázalo i nevýhodou, jelikož tato technologie, tj. EJB2 byla prakticky nepoužitelná) a administrační GUI, které naopak použitelné bylo. Z něj se daly konfigurovat a spouštět i vypínat instance aplikačního serveru, čili na tu dobu šlo o vskutku "enterprise" řešení, které v té době nemělo obdoby.
Výhod bylo víc, například integrace JMS a dalších J2EE technologií, aktuálních v roce 2003.
Největší výhodou byla ovšem výborná stabilita. Tenhle aplikáč nám snad nikdy nespadnul, pokud nebudu počítat memory leaky v našich vlastních aplikacích.

Mezi nevýhody patřilo využívání nativních knihoven a tudíž možnost spuštění pouze na OS Solaris, Windows a RedHat 7.2. Rozchodit monstrum jinde vyžadovalo náhodné vyměňování nativních knihoven, než se administrátor "trefil" do konstelace, která fungovala.
A jedna nevýhoda fatální - zapomeňte na zdrojáky nebo artefakty ve veřejných úložištích.
No, pryč od toho ... užili jsme si dost srandy :-)

Sun Java Application Server 8

V roce 2005 přišly specifikace JEE5, JDK5, EJB3, JPA a další, díky kterým se stal starý aplikáč v podstatě mrtvou technologií. Sun se do toho vrhnul po hlavě, část implementací integroval od jiných autorů, část napsal sám - práce odvedl mnoho a velmi rychle, byť s diskutabilní kvalitou.

Tou dobou se už začínala probouzet konkurence - z největších aktuálních jmenujme WebSphere, WebLogic, TomEE, WildFly/JBoss, Jetty, a další. Mírně zastarávající seznamy s malým srovnáním viz wiki nebo wiki.

Přiznávám, že s touto verzí jsem neměl moc zkušeností, jen si pamatuji, že to byl takový mezičlánek, ve kterém byla spousta nedodělků a chyb. V principu to fungovalo, ale ...

Sun Java Application Server 9 aneb Sun Glassfish Enterprise Server 2

SJAS8 byl v podstatě prototyp. SJAS9, později přejmenován na SGES2, znamenal dotažení technologií do konce. Velké problémy byly s JMS (OpenMQ), což byl server provozovaný v serveru, při chybné konfiguraci se prostě zasekl. Důvody jste museli hledat mimo Glassfish, přičemž trvalo dlouho, než jste přišli na to, v čem je přesně problém.
Komunikace mezi GF a MQ probíhala přes porty, a variant konfigurací bylo mnoho, snad ani autorům původně nedošlo, jakou variabilitu jim to dává. To je ale námět spíše na jiný blog - stručně - triviální varianta je "embedded", resp. "zapouzdřený" server, složitá a škálovatelná varianta je "remote" server ...

SJAS9 přišel v roce 2007, zkraje se ještě stávalo, že "zůstal viset" právě díky JMS, později ale byly i tyto chyby vyřešeny a poslední verze SGES2.1.1 byla velmi stabilní a bezproblémová (pokud jí nedestabilizovaly vaše chyby ve vašich aplikacích ;-) ).

Hlavní výhody proti dřívějším verzím:
  • podpora clusteringu - bylo možné provozovat n instancí na m strojích, mezi nimiž se replikovaly sessions uživatelů a bylo možné např. postupné nasazení nové verze, aniž by došlo k výpadku (to samozřejmě mělo svá pravidla, o tom zase jindy).
  • žádné nativní knihovny - kde běží JDK5/6, běží Glassfish (jen občas narazíte na problémy např. s Windows).
  • propracovaná dokumentace
  • kompletní podpora JEE5

Glassfish3

V roce 2010 Oracle koupil Sun a všechno se změnilo. Již předtím jaksi "v ilegalitě" vznikl tzv. Embedded Glassfish, na který jsem narazil prakticky náhodou - kupodivu ve veřejných úložištích, a začal ho používat k integračním testům. Ano, stačil mi JUnit, abych mohl testovat EJB3 s JMS, JPA a se vším všudy!
Embedded Glassfish je totiž přebalené vydání Glassfishe3 do jediného jar souboru. Chybí mu pár XML, která se dají snadno dotáhnout z jiných závislostí a jedete - tak málo stačilo k odstranění největší výtky vůči "enterprise aplikačním serverům"!

Glassfish3 náš tým nakonec přeskočil, ale pomohl nám díky zpětné kompatibilitě se SGES2 právě s testováním.
Embedded Glassfish byl nakonec opět pohlcen Glassfishem a stal se součástí jeho buildu a repository.

V roce 2011 Oracle oficiálně vydal Glassfish3 jako referenční implementaci JEE6. Vzápětí se ale probral JBoss a prakticky Glassfish3 převálcoval.

Byrokracie Oracle navíc silně rozladila některé vývojáře a byla poslední kapkou k jejich přestupu - kam jinam - často k JBoss.
Po vyjádření Oracle o ukončení komerční podpory Glassfishe a o vyčlenění "clusteringu" pouze do komerční verze to vypadalo, že Glassfish prostě skončí, zemře, je konec. Jenže se ukázalo, že tak snadné to mít Oracle nebude ...

Glassfish4 - smrt ... NEBUDE!

Oracle totiž narazil na pár háčků. Nápad s clusteringem vyprovokoval poměrně hlučnou odezvu vývojářů i mimo Oracle, takže od něj bylo ustoupeno. Nápad s ukončením komerční podpory sice Oracle dotáhl do konce, ale nikoho to zase tak moc netrápilo, protože i má osobní zkušenost s komeční podporou Sun/Oracle byla velmi špatná (a je doposud).
Licence Glassfishe ale umožňovala alespoň pasivní přístup ke zdrojákům, a bylo otázkou času, kdy dojde k tomu, kdy je někdo vyžene na GitHub (ano, byl jsem to já, ale ukázalo se, že nejsem první, viz níže :D).

Druhý háček spočíval v tom, že komunita JEE stále potřebuje referenční implementaci a nikdo si jí nemohl jen tak přivlastnit a zamezit přístupu k ní ostatním.

No a poslední háček - všechny implementace JEE7 používají komponenty svých konkurentů. Weld vyvíjí JBoss. EclipseLink vyvíjí Eclipse+Oracle. Catalinu vyvíjí Apache. Pokud by Oracle "zařízl" Glassfish, patrně by nevydal už víc jak jednu jedinou verzi WebLogic, vývoj by se zbrzdil.

A tak v roce 2013 Oracle vydal Glassfish4 jako referenční implementaci JEE7. Změn nebylo mnoho oproti GF3, spoustu práce odvedli externí programátoři, Oracle se zjevně snažil investovat minimum. Čím více chyb v GF, tím lépe pro WebLogic.

Přišel rok 2014 a náš zákazník nakonec souhlasil s "upgrade". Udělali jsme skok z JEE5+JDK6+GF2.1.1 rovnou na GF4+JDK8. Ukázalo se, že to není až tak snadné díky chybám, které ve zdrojácích zevlovaly už od Glassfishe3, čili často 5 i více let.

Payara

Začal jsem zkoumat licence a možnosti, jak se dostat do SVN. Po dnech a nocích, kdy se exporty po různu zasekávaly a padaly díky vadné integritě dat v SVN Oracle, se mi to nakonec podařilo. Nakonec jsem posílal patche přímo do JIRA ... a odezva ... na přijetí jsem čekal nějaké 3 měsíce.

To mě moc nebavilo a proběhla komunikace s šéfem Glassfishe Rezou Rahmannem - pravda, překvapilo mě už, že se se mnou baví, ale ještě víc mě překvapilo, že mě nasměroval na Steva Millige z C2B2 a Payaru.
Po další komunikaci byla moje oprava přijata během 3 dnů do Payary.

Po zastavení komerční podpory Glassfishe se totiž Steve rozhodl, že jí tudíž začne poskytovat sám. Udělal stejný krok jako já, převedl SVN na GitHub, domluvil se s Rezou, a postupně se k němu přidali další a další lidé z komunity, včetně mě.

Tým Payara a jeho přispěvatelé od té doby opravili spoustu chyb a jen tak mezi řečí pomalu posouvají Payaru dál ke specifikaci JEE8. Objevily se požadavky pro podporu Javy IBM, podporována je i Oracle JDK8 (původně 7), opravy se promítají zpětně do Glassfishe od Oracle a samozřejmě - existuje placená podpora, které bych vytkl jen to, že její ceny jsou typicky "enterprise", leč konkurenti nejsou levnější.

Krom toho žije dál i Embedded Payara a vznikly i další distribuce, většinou osekané o nepotřebnou funkcionalitu.

Nakonec vzniklo i toto zábavné reklamní video:

Placená podpora

Na druhou stranu, za Tomcat podporu taky neplatíte, že? Ale to, co umí Payara rozhodně neumí ;-)

Ve výsledku placená podpora slouží hlavně k čestné podpoře profesionálních týmů, které se o tyto projekty starají. Proto pokud pracujete na projektech pro velké firmy či stát, měli byste podporu platit.
Ve skutečnosti sice nezískáte větší podporu, než máte, leč přispíváte tím k tomu, aby aplikační server, který používáte, mohl být dál vyvíjen a udržován, tj. abyste po dvou letech nezjistili, že projekt prostě skončil a vy jedete na mrtvém koni. Což není tak málo, když si to tak vezmete, ne?

V tuto chvíli to vypadá tak, že C2B2 míří mezi velké firmy. Její vývojáři konzultují chyby ve Weld i EclipseLinku, komunita si vypomáhá, zatímco Oracle si stále něco plácá na svém písečku a o ostatní se moc nestará, ale možná je to jen můj pocit ...

Budoucnost

Kdyby někdo měl pocit, že na to má, tým Payary shání vývojáře. Já tam zatím nejdu, mám svůj boj jinde, který navíc slouží jako výborný obří reálný testovací příklad pro Payaru. A zatím můžu říct, že se všichni lepšíme.

Momentálně Websphere, WebLogic ani WildFly neumí všechno, co umí Payara. Možná umí něco navíc, možná něco umí lépe, ale ne dost na to, aby mělo cenu přecházet. Zvlášť když je Payara možná ještě převálcuje :-)

Řekl bych, že i Oracle na to nakonec nutně přijde a bude muset se k tomu postavit čelem. Těžko může komplikovat práci ostatním skrz licence, spíše bych hádal, že se C2B2 pokusí koupit a zklikvidovat, pokud tato konkurence začne být až moc silná.
Dokud ale bude Glassfish na GitHub, bude velmi těžké jeho "lepší klony" kontrolovat, uzmout zpět, takže tahle cesta Oracle asi nepomůže, ne na dlouho. Glassfish není jediný takový projekt, open source se dá sice všelijak poškodit, ale jen stěží kontrolovat, pokud má pod nohama tak silnou infrastrukturu, která má navíc pozitivní efekt i pro komerční obříky.

Časy se mění ... jedno riziko bych tu ale viděl - a tím je paradoxně TTIP (v odkazu TPP, což je podobná dohoda) a různé formy kontroly internetu. Představte si, že vám vláda zablokuje, omezí nebo zpoplatní přístup na GitHub ... že je to paranoidní nápad? Možná - ale třeba tlak například na omezování síly šifer už tu dávno je.
Mimochodem, na některé weby a videa se nedostanete už teď. BBC blokuje přístup na (některá?) videa mimo UK, Youtube "tají" videa před Němci, atd. - co nevidíme, o tom nevím, tohle jsou jen zkušenosti, na které jsme narazili náhodou s kamarády v zahraničí.
To je ale už úplně jiné téma ...

pátek 4. prosince 2015

Izace aneb o zvyšování hlasu místo argumentace

Děje se něco, co bych možná nazval "izací" lidí. "Izace", to jako bolševizace, katolizace, islamizace, tj. zfanatizování části obyvatelstva, které pak pohrdá, ponižuje, trestá, deptá a nakonec někdy i vraždí jiné části obyvatelstva, které považuje za něco méněcenného.

Ne, ne, žádná konspirace, nic shůry ani zezadu, je to od vás, lidí, přátelé.

Když s vámi někdo nesouhlasí, budete muset naslouchat a pak si dát práci a hledat argumenty. Nestačí říct "ty jsi zmanipulovanej" ani "ty jsi blbej" ... rusofil, rusofob, levičák, pravičák, debil, hňup, ...

Vážně si myslíte, že tímhle někoho přesvědčíte? A když už jsme u toho - vážně je nutné někoho přesvědčit, zlomit, předělat? Není už docela fajn, že přestože se neshodnete, vyměňujete si poznatky, informace, znalosti, něco se dozvídáte?

Ono totiž právě ty znalosti jsou důležité ve vzdělané společnosti, ne to, komu fandíte.

Bez diskuze a vzdělání žádná demokracie nemůže existovat.

úterý 15. září 2015

Vyhodit Maďarsko a ČR z Evropy? Prima nápad ...

Nemám rád aroganci. Že prý Maďarsko má být "vyhozeno z Evropy". A ČR taky.
Důvod: odmítání kvót na uprchlíky.

No tak to prrrr ...

Pominu slovíčkaření, třeba že Evropa je kontinent a těžko z něj nějakou zem vyhodíte.

Za prvé "soudruh" z Lucemburska nějak pominul, že imigranti stojí hlavně o Německo. Aby ne, když průměrná mzda je tam zhruba trojnásobná, ceny srovnatelné, daně progresivní, sociální systém celkem štědrý a hlavně funkční, a chování úředníků korektní a obvykle uctivé, a i občané jsou tak nějak vstřícnější.

A proč?

Protože velké část německého hospodářství stojí na práci odvedenou v "satelitech" - jako jsme my, Slovensko, Rumunsko, zkrátka bývalý východní blok. Jakákoliv produktivní činnost je řádově hůř placená než prodej výrobků. My makáme, neměčtí majitelé prodávají. Produktivita práce nijak nesouvisí s tím, jak moc se v práci flákáte, resp. ano, můžete jí tím výrazně snížit, ale pokud jste kdy byli na nějaké brigádě ve fabrice, víte, že je často problém odskočit si na záchod, natož proflákat půl dne.

Češi většinou žijí v daleko větším stresu, drží se práce, nemají rezervy, žijí od měsíce k měsíci. Jsou nervní, podráždění, závistiví, mají sklon podvádět a "přilepšovat si". Stačí to? Netačí. Všechno má své příčiny a důsledky. Češi skřípou zuby a vrčí, ale stejně si sobě navzájem i jiným pomůžou. Většina jich ale řeší starosti s živobytím, proto jsou tak protivní proti těm milým Němcům.

Musí to tak být? Nejde to změnit? 

Špatná zpráva - musí, nejde, resp. velmi těžko. První z obrovských hříchů Klause bylo jeho tvrzení o utahování opasků a dohánění Německa. Byla to lež, nejspíš vědomá.

Výhody

Výhoda toho, že Češi makají a Němci prodávají, je prostě v tom, že se uživíme. Máme velmi malou nezaměstnanost. A tu máme malou, protože jsme zatím konkurenceschopní. A konkurenceschopní jsme, protože výroba u nás stojí málo. Proto máme taky malé mzdy. Kdyby se zvedly, firmy jdou jinam, práce nebude, a proti obřím koncernům nějaká malá česká firmička prostě nemá šanci.

Nevýhody

Tlak na nízké mzdy je tak velký, že je pro dělnickou rodinu problém poplatit nájem, elektřinu, děti, dopravu do školy a do práce, natož když nebydlíte ve velkém městě. Taková rodina navíc nemá ani kupní sílu, takže nás do velké míry živí export ... kromě aut hlavně export polotovarů do Německa.

Uprchlíci

Pokud si někdo myslí, že uprchlíci jsou nějací nevzdělaní blbci, je na omylu. Hlavně ti syrští umí často tři jazyky a vzdělání v Sýrii bylo před válkou na slušné a stále se lepšící úrovni. Podobně i v řadě afrických zemí se vzdělání poslední dvě desítky let výrazně lepšilo. Ne už tak životní úroveň, jelikož pro "rozvinuté země" byly tyto "zaostalé země" hlavně zdrojem levných surovin. A jsme zase u toho - levné suroviny, to znamená nízké náklady na jejich získávání, tzn. levná pracovní síla, mizerná ekologie, využívání korupce.

Ti lidé mají dvě možnosti - bojovat se systémem, nebo utéct do jiného. A tak se část lidí přidává k Islámskému státu s vidinou odstranění korupce a zavedení přísné spravedlnosti (asi jako to slibovali bolševici a náckové), a část utíká pryč z dosahu tohohle šílenství.

A kam utíkají? Přece do Německa, protože tam věci fungují správně. Proč ne do ČR? Odpověď je výše, kompletní, to všechno jsou argumenty. Utíkali byste sem, kdyby hned vedle byl fungující systém?

Kvóty a propaganda

Česká politika se ironicky rozdělila na dva tábory. Jeden křičí "vítáme uprchlíky" a druhý "uprchlíky nechceme". Oba tábory mají spoustu platných argumentů, ale oba naprosto ignorují všechno, co jejich nadšení či rozhořčení nenahrává.

Vrcholem pak je propaganda "západní", která dělá z "východního bloku" bandu nesnášenlivých xenofobů a blbců. Krom toho, že tu opravdu těch xenofobů je docela dost, pomíjí ale i to, že část toho strachu je opodstatněná - nikoliv ovšem strachem z jinakosti, ale z toho, že ekonomická situace chudých tu bude ještě horší.

Absurditou jsou potom kvóty, které uprchlíky berou jako statistickou položku, která nemá nárok cokoliv chtít. Je jedno, jestli uprchlík chce důstojný a dočasný azyl, nebo jestli se chce usadit v jiné zemi. Je dokonce jedno, že se místní lidé právem bojí, že o jejich mizerné pracovní místo začne bojovat mnohem levnější a nenáročnější konkurent. Pro politiky jsou lidé jen čísla, papíry, lejstra.

Migrace jako taková

Aby toho nebylo málo, dotknu se ještě jedné věci. Žili jsme v poměrně klidném stabilním období, ale migrace byla vždycky součástí lidského chování, nejen lidského. I hmyz, ptáci, vše je v pohybu. My jsme si kdysi vykolíkovali nějaká území, tisíce let se handrkujeme o kolíky, zatímco lidé, člověci, celou tu dobu ... migrují. Emigrují, to jako ven, a imigrují, to jako dovnitř. A pak tu máme exil (vyhnanství) a jiné specifické druhy migrace.
Zkrátka, pokud si myslíte, že jako národ máte nárok na nějaké pevně vykolíkované území, jste na omylu. Ono vůbec "národ" je věc tak trochu umělá, přiznejme si to. To je trochu náročné téma, lidé neradi opouští tu myšlenku "pospolitosti" stáda svého druhu, ale ...

Naše kultura už prakticky neexistuje, neudržovali jste jí, zapomněli jste na ní u televize. To je něco, co si taky nejsme ochotní přiznat. Křesťanské základy? Ale no tak, najednou jste si na ně vzpomněli? A co to je? Jakýsi vágní pojem, do kterého se snažíte nacpat teoreticky dobré věci, které většina z vás stejně porušuje. Lžete a lžete.

Migrace tu zkrátka je. A je tu taky konec fungování světa, jak ho známe. Lidé z nejchudších zemí světa si uvědomili, že jsou kraje, kde se dá žít, pracovat, uživit rodinu. Jsou skromnější i oprsklejší, umí lhát i krást stejně jako my, jen k tomu budou mít možná o něco větší sklony, neb jak se říkávalo, "bída z lidí lotry činí".

Fyzikálně řečeno, příroda tíhne k rovnováze. O nerovnováze mezi "rozvinutým" a "třetím" světem jsme slýchávali léta z médií, nezajímalo vás to moc, že ne? Taky co by na tom jedinec změnil, že?

Terorismus

Terorismus je válkou chudých proti drtivé převaze mocných. To není obhajoba, chraň bůh, ale spíš konstatování. Děsivé konstatování. S imigranty i bez nich riziko terorismu poroste tak, jak se bude stupňovat tlak na "vyrovnání světů". Líbit se nám to nebude, ale to bude tak všechno, co zmůžeme. Budeme muset lépe platit za africké suroviny, budeme muset ustoupit z představy, že my jsme ti chytří a rozvinutí a "oni" budou držet hubu a makat.
Nadvláda "rozvinutého" světa zkrátka končí. Pomáhá tomu i Čína, kterou stále tak trochu opovrhujeme, zatímco ona si pomalu skupuje naše krachující firmy. Pomáhá tomu tak, že v zemích, které "rozvinutí" prostě korumpovali, buduje infrastrukturu.

Eskalace nenávisti vůči Evropě a Severní Americe je otázka poměrně krátké doby, týdnů, měsíců. Jak moc tomu sami pomůžeme je na nás. Stavění plotů ale problém nevyřeší, jen malinečko zbrzdí ...

Řešení

Není. Evoluce zkrátka nemá řešení. Nezná ani žebříčky, hitparády, je jí to jedno. To ale neznamená, že na ní nemáme vliv. Osobně bych byl pro to, aby se lidem ze zemí, kde je válka, pomáhalo, a zároveň vznikl enormní tlak přes OSN na zastavení konfliktů a umožnění návratu. Dál je na OSN, aby našla dostatečně silnou páku, jak si vynutít mír. Bohužel, velmoci zatím skrz OSN jen hrají šachy proti sobě navzájem.

Co se týče imigrantů, držel bych se stávajících zákonů, tj. trvalá imigrace je možná, pokud tak rozhodně úřednictvo. Podrobnosti viz paragrafy a vyhlášky, nejsnáz asi přes stránku OAMP.

Též bych podotkl, že cizinci, kteří se přistěhovali ze země mimo EU, to u nás rozhodně nemají jednoduché. Čeká je obrovská byrokracie, šikana ze strany firem (nižší platy), placení za ošetření v nemocnici, dražší pojištění, neustálé kontroly dokladů, a nakonec kyselé ksichty xenofobních Čechů, v horším případě nadávky či napadení.

Moje soukromé řešení je jedno jediné - snažit se chápat, co se děje, chovat se jako kulturní lidská bytost, pomáhat lidem, které považuji za sobě rovné, a nepomáhat lidem, které považuji za zlé, těm velmi zlým páchání zla výslovně kazit.

Na tom hodnocení lidí se nemusíme shodnout, ale s tím nemám problém.

pátek 28. srpna 2015

Český fanatismus

Svět je plnej bláznů. Třeba já. Stoupnu si mezi komunistku a někoho, kdo nenávidí komunisty. Jeden tvrdí, že disidenti se měli jako v bavlnce, druhý jak tu všichni strašně trpěli a komunisti by měli viset.

A tak první sdělím, že se by se jí možná líbilo vyhrožování znásilněním při výslechu, následně uvěznění "jen" na půl roku, aniž by cokoliv trestuhodného provedla. A druhému, že zatímco u nás se dávaly běžně několikaměsíční tresty, v Jižní Americe zmizely desetitisíce lidí, spousta jich byla mučená, zavražděná. Odpůrci režimu se běžně stříleli. A teď si podejte ruce a jděte do háje, demagogové plní žluči.

A jindy zase katolík a ateista. Podle mého soudu je dnes ateismus nejzoufalejší víra vůbec, jsou to nejagresivnější a nejarogantnější lidé. Katolíka uráží, nadává mu do blbečků, ovcí, naivků, přitom sám je věřícím, tj. věří, že žádná vyšší moc, žádný bůh, bohové, ani strašidla, nic, nejsou. Jak to může vědět? Neví. Neví daleko víc věcí, často nerozumí fyzice, matematice, nikdy neslyšel o tom, jak málo hmoty vesmíru dokážeme nějak identifikovat, jak málo známe její původ.
Když se pak ateistovi řekne, že náš největší popularizátor astronomie Jiří Grygar je věřící, shodí to ze stolu s tím, že je to tím pádem magor.
Většina věřících, nejen katolíků, ale i židů nebo muslimů, které jsem poznal, se o víře prostě nebaví. Je to jejich víra, a nikomu do ní nic není, nikdo nemá právo jim jí zpochybňovat; od toho je to totiž víra. Všímám si ale odlišností mezi těmi, kteří věří ve "vyšší moc", a těmi, kteří věří tomu, že žádná není. Ti první bývají klidnější, vstřícnější, láskyplnější, a taky přejícnější. Něco jim jejich vlastní víra, ať už oprávněná nebo neoprávněná, dává. Ve výsledku pak ale o to, jestli ta vyšší moc je nebo není, vůbec nejde.

Co se mě týče, dlouhodobě říkám, že vyznávám čistě vědecký přístup, což znamená, že nevím. Ano, já nevím. Nemám dost informací, abych cokoliv z toho potvrzoval nebo vyvracel, ale měl bych být připraven, že taková možnost tu je. Ale v něco přeci jen věřím - zkrátka od srdce si myslím, že má smysl být dobrým člověkem. Nepotřebuji k tomu církev ani perfektní znalost fyziky, mentory ani kazatele, je to prostě moje víra a nikdo mi jí nezpochybní.
Nevím spoustu jiných věcí a tak se o ně zajímám. Nikdy nebudu vědět všechno, ale něco uvnitř mě žene pořád dál, a tak se dívám na historii náboženství, režimů, velmocí, sleduji ptactvo za oknem, přemýšlím nad historií stromů na zahradě i v sadech a alejích, nad tím, kam a odkud teče voda, rozebírám a skládám auta, a ano, moje profese, programování ...

Čím víc toho vím, tím víc se obávám fanatismu, lidí, vysedávajících před televizí, kde dostanou svou porci zpráv, nebo u Facebooku, kde vstoupí do sobě ideologicky blízkých skupin, kde se utvrzují a zatvrzují ve své původní domněnce, která přerostla v názor. Nikdy se nedozví, že polovina informací, které si tam přečetli, je falešná, smyšlená, a třetina vytržená z kontextu. To by totiž museli zároveň do skupiny zaměřených přesně obráceně - ale když to zkusí, po první větě je odtamtud často vyženou, zesměšní, nadají jim do blbů a ovcí.

Dobře, ale jak z toho ven? Televizní vysílání nezrušíme, Facebook nevypneme, konec konců sám na něm jsem. A začínám u sebe - ubrat plyn, nehádat se, diskutovat, stavět proti sobě argumenty, ne lidi. Není třeba každému "zlomit", předělat jeho názor na svůj, "vyhrát" diskuzi. V kvalitní diskuzi vyhrávají oba, navzájem se něco od sebe dozví a možná trochu upraví svůj názor. Na tom stojí funkční demokracie - a ta naše zrovna dvakrát funkční není. Nezměníte to ale žádnou revolucí, ale jedině evolucí, vývojem.
Myslím si, že náš národ v tomhle má historii dobrou, a je to důvod, proč tu komunisté nebyli dotlačení až k takovým jatkám jako v jiných zemích. Režim tu nebyl tak tvrdý a ani z druhé strany se tu nepěstoval terorismus (snad s výjimkou Mašínů), protože tu aspoň nějaká diskuze vždycky byla. A je to zásluha všech občanů téhle země, komunistů i nekomunistů.

A ještě trocha lingvistiky - zamyslete se, co mají společného slova fanda, fanoušek, fanklub, fanatismus, fanatik.

Přeji všem pěkný den, bez ohledu na to, jak moc se mnou nesouhlasíte! ;-)

neděle 22. února 2015

Refaktoring, část III.: HashMapové peklo

Proč?

Protože HashMap je objekt, do kterého lze vložit leccos. A to doslova leccos, a vždycky pak musíte předpokládat, že tam různá leccos jsou. Vy ale máte objektový jazyk (nebudeme slovíčkařit), a tak pro objekty obvykle nacházíte jména, definujete jejich chování a vlastnosti. A to je to místo, kde to skřípe - mapa je něco, co objekty dostává s nějakým klíčem a pod tím klíčem je zase vrací. A je v tom fakt dobrá - jenže vám neumožní nic víc.
Je je to jako kdybyste v kuchyni měli obrovský pytel a do nej házeli nákup - pytel brambor, konzervy, kořenky, láhev piva a láhev mléka ... a když něco chcete, otevřete pytel a hledáte. Možná těch pytlů máte více a všechny vypadají stejně.
Mapy jsou zkrátka vhodné na vkládání neomezeného počtu věcí ideálně stejného typu pod klíčem stejného typu a pak k jejich vyhledávání podle tohoto klíče.

Naopak nejsou vhodné na vkládání omezeného množství dat, které navíc dokážeme snadno pojmenovat, odlišovat, známe chování, možnosti, můžeme (a chceme!) ho dokonce zdokumentovat, ať už méně nebo více.

Jak takové peklo vzniká?

Jak jinak, vzniká z lenosti programátora - kterému přijde hloupé a pracné zakládat spousty nových tříd, které mají jen atributy a k nim příslušející gettery a settery. Ten pak udělá v nejhorším případě toto:
Map data = new HashMap();

Samozřejmě pak nevíte, co v datech máte, a musíte pořád dokolečka hledat klíče a všechny možné varianty typů hodnot, které se mohou vyskytnout.

Nicméně i když onen programátor mapu otypuje, čili vytvoří
Map<String, String> data = new HashMap<>();
nemáte vůbec vyhráno. Pořád totiž nevíte, pod jakým klíčem je třeba příjmení osoby ... a jestli tam vůbec je. Ani konvence vás nezachrání, pořád to může být surname, lastname, lastName ...
Napsat pak takový kód lze samozřejmě celkem rychle, pokud nevyvíjíte něco složitého, ten den to udržíte v hlavě. Dokonce na to lze napsat testy, nicméně nic z toho vás nevysvobodí, až se v kódu po půl roce provozu objeví chyba a vy nebo někdo jiný jí bude muset opravit. Nebo ještě druhá varianta, dostane za úkol ho rozšířit o další funkcionalitu ... najednou se projekt prodraží a nikdo nedokáže říct ani řádově přesný odhad, kdy to bude hotové.

Pokud pak používáte JSP, výsledek programátor nejspíš strčil do pageContext, což je vlastně taky hash mapa, resp. celá hierarchie map, které kontejner průběžně zahazuje nebo maže dle kontextu.

Pokud takový kód psal externista, je nejspíš už bezpečně daleko ... a je to vaše starost.

Jak z toho ven?

Tohle určitě nechcete slyšet, ale máte smůlu - čeká vás dřina!
Pokud používáte JSP, jakkoliv tuto technologii spousta lidí nemá ráda, vám tentokrát pomůže. Ona se totiž dívá na typ objektu, se kterým zrovna pracuje - pokud je to Map, zavolá get("xxx"), jinak zavolá getXxx(), takže jí můžete pod rukama prohodit instance v kontextu, a ona se přizpůsobí.
I tak to ale bude dřina, nicméně tady je její druhá hranice - pokud tedy programátor nevymýšlel jiné šílenosti, ty by jinak bylo vhodnější vyřešit předem ...

Pak už nezbývá než otrocky si na papír vypsat všechny klíče, které se v mapě vyskytují, mapu nahradit vhodně pojmenovaným objektem, a připravit pro klíče stejnojmenné settery a gettery; pozor, přejmenovávání doporučuji nechat na později!
Pokud si nejste jisti typem atributu, pro začátek doporučuji třeba String - kompilátor vám už v editoru vyznačí, kde to nesedí. Naopak Object nedoporučuji, protože se o případné chybě nedozvíte.

No a to je vše. Je? Není. Ještě musíte vychytat některé důsledky. Co když někdo volal isEmpty(), size(), používal výstup z put()?

Mně mapy ale nevadí

Někteří lidé pořád nechápou, co je na tomhle použití map špatně. Tak ještě ... nemůžete plně využít dědičnost, overloading, generiky, přidávat objektům metody, atd. Zkrátka to, co vám jazyk umožňuje, využíváte jen z malé části, neefektivně. Dokonce to hloupoučké maličké leč poctivé POJO zabírá i méně místa v paměti ...
Ale hlavně - čitelnost kódu, to, že vždycky víte, s čím pracujete, kolik to má metod a jakých, co to dělá, k čemu to je, to je to, kde mapa vždycky prohraje, říkajíc
"No, vy mi něco dáte, řeknete mi, jak to poznám, a až to budete chtít, tak já vám to zase vrátím. Jo a taky vím, kolik už toho držím. Co? To není moje starost ... že mám reprezentovat osobu a vracím vám SPZ? Tomu já nerozumím, co mi je do toho?! Když mi dáte konexi do databáze, budu jí držet taky, no a?! Umím to, všechno udržím!"

Řekl bych, že v ten moment tomu nerozumí i někdo jiný ... a ten bude autora kódu proklínat - že na to nevěříte? Jóó, kdo ví ... ;)

sobota 9. srpna 2014

Neil Young - War of Man (Válka lidí)

Malí tvorové utíkají od toho chladu
zpátky k hnízdům dávných časů
Zpět do bezpečí matčiných paží
tepla časů, kde nic nebolí

V uších zvoní z té kruté vřavy
Unavený válečník zamíří trochu vzhůru
Černý sokol nebo vlaštovka letí
Horký záblesk z hlavně zazní

Prohrají,
vítězí tu smrt 

Prohrají,
vítězí tu smrt 

Stříbrné hřívy ve větru vlají
Přes celou planetu si utíkají
Nikdo neví kam si vlastně běží
Ale v párech vždy další přichází

V deltě řeky kde zní dusot kopyt
Taťka běží po zmrzlé zemi
Necítí jed, který se k němu blíží,
Nevidí plyn ani hlučící stroj,
zvítězí tu smrt.

Prohrají,
vítězí tu smrt 

Prohrají,
vítězí tu smrt

Okna dokořán a malá dívka si sní
Obloha je hřiště a ona koníky pase
přes celé nebe až daleko za obzor
Na křídlech kouzel dětských fantazií

Děti utíkají od toho chladu
zpátky k hnízdům dávných časů
Zpět do bezpečí matčiných paží
tepla časů, kde nic nebolí

Prohrají,
vítězí tu smrt 

Prohrají,
vítězí tu smrt

Po spoustě času jsem se pokusil něco trochu volně přeložit. Možná to není úplně ono, ale ten refrén mě děsí a svírá úplně stejně jako v originále. Chtěl bych, aby si lidi uvědomili, o čem se to vlastně baví, dřív, než přispějí svým hlasem k nějaké katastrofě.


čtvrtek 17. července 2014

Milan Princ - Tabula rasa?

O hudbě toho nažvaním hodně, ale opravdovou recenzi jsem snad ještě nepsal, nebo aspoň dlouho ne. Byl jsem o ní ale požádán, tak se pokusím to nějak uchopit. Dejme tomu tak, jak tuhle hudbu prožívám sám - každé pořádné album je pro mě taková cesta, výlet, nějaký zážitek. Tak vám tu popíšu svou cestu ...
Asi  se nebudu tolik zaobírat aranžemi, hudbou, texty, rýpáním do nedostatků a vyzdvihováním silných stránek. Je to nějak technokraticky věcné a mrtvé, což se k tomuto dílu nějak nehodí; navíc, určitě to už zvládli jiní na výbornou. Taky podotýkám, že některé citace nejsou citacemi přesnými, ale na to přijdete sami.

Milan Princ je takřka dvorní textař Romana Dragouna (a nejen jeho), a po naposlouchání tohohle alba o něm mám i nějakou představu jako o člověku. Těžko se mi to ale formuluje, ale zkrátka asi rozumím, kam pocitově míří, cítím tu náladu. Na albu se podílela spousta výborných muzikantů, např. Filip Benešovský, Michal Pavlíček, Martin Vokroj, ...

Album to je trochu těžší, trochu smutné, na druhou stranu mu ale nechybí ani sebeironie, což se projeví definitivně závěrem alba:
"Mně se to líbilo!"
"Mně ne!!!"
Vlastně bych řekl, že je to celé album takové vícevrstvé, ne že by se nějak střídaly nálady, nářez střídala balada, jak tomu bývá - tady je to všechno tak nějak najednou. Hned v Prologu je takový patetický projev, který ale klidně může být myšlen úplně vážně, ostatně hned další písnička tomu nasvědčuje. Navíc mě to připomíná takové moje pozorování - zvykli jsme si vysmívat patosu a cítíme se trapně, když se chválí tým, společnost lidí, když se o komkoliv mluví pozitivně.
Písnička Prosím je na začátek alba docela těžký kalibr, a je to možná i nejlepší písnička na celé desce. Pokud jsem se u Prologu tomu patosu pousmál, tady mi úsměv ztuhl.
Písničky jsou prokládány takovými pseudonáhodnými výroky na témata, která jsem určitě někde zachytil, ale nevěnoval jsem jim moc pozornost, ač vím, že někteří lidé ano. Duchovno zkřížené s povrchností lidí. Ty výroky jsou obvykle dost kontroverzní, ale opět - po chvíli přemýšlení člověk dojde k tomu, že jsou to možná hlouposti, ale že vypovídají o něčem, co ty lidi snad i nějak tíží.

Následuje písnička Romane, která se okamžitě zaryje do paměti, a opět je tu ta vrstevnatost; písnička by možná normálně zapadla mezi jiné, kdyby neměla to parádní pozadí "knock out!", "Romane!", člověk z ní má pocit, jako kdyby se ráno probouzel ze snu a do toho mu už nějak promlouvalo svědomí, působí to vtipně ("Romane!") i hodně depresivně zároveň.
"Romane, všichni jdou za svými žvanci, Romane, dej jim tu víru co máš"
Anděl mi vůbec nezní "andělsky", vůbec nevím, co si o něm mám myslet, krom toho, že zní tak nějak opilecky ... ale následný výrok mě utvrzuje v tom, že to byl asi požadovaný efekt. Zmatení. Asi jako když jdu kolem hospody a "vypadne" na mě ze schodů nějaký ožrala. Nemyslím si o něm nic, jdu dál.

Druhý práh na tuhle představu pasuje. Jdu dál. Přemýšlím, vzpomínám, ten pocit je tmavý, ale lepší, než když sedím někde doma na židli. Vlastně je mi po tom všem docela dobře.
"Chci plout dál než znám."
Zvony, kde já tu kytaru jen slyšel? No, to je jedno, zní pěkně. Textu úplně nerozumím, ale trochu se obávám, že mi to dojde vzápětí.
Písnička Ruce je věnována "lidem s podivnými názory na multikulturní společnost".
"Óm mani padmé húm"
Bílá (věnováno věrné družce smrti a mým nočním můrám). Nevím, co psát. Ta písnička je nepříjemná, ale nemyslím to v negativním smyslu, spíš tím, co znamená. Následuje opět opilecké filozofování, jakoby se člověk musel propít k životu.


První den mi připomíná pár písniček jiných autorů, ne snad textem ani hudbou, spíš náladou, tím sarkasmem Nového roku, jenž byl "velkou dražbou vydražen". Co dodat? "Myšlenky černé topím v bílé kávě"

Ostrá skla jsou ostrá - nějak mi tam hudebně nesedí druhá půlka, přijde mi, že to chtělo něco trochu jiného. První půlka je ale dobrá ... a opět vážná.

"Konec první strany CD" ... ne, to jako vážně!

Vločky jsou svíravé a působí na mě po tom všem jako pohled odjinud.
"V Pokoji 3x3 smutnýho bytu" bych asi nečekal, že uvidím rozkvetlou louku. Možná se mi to zdá. Možná "se roztočil kolotoč citů" a všechno je jinak.
"Vesmíre zastav se - spatřil jsem světlo
obzor se rozostřil, všechno kvetlo
i černé myšlenky v záchvatech smíchu
křičely do uší hřmícímu tichu"
Po dlouhém trmácení sladká přesladká písnička Pomeranč. Chvilka pohody,
"A dny jsou jako plástve medu"
než přijde písnička Na salámu, která je naprosto strašně nazpívaná a asi nikdy si z ní nezapamatuju nic jiného. Text je zajímavý, ale hudba je ... no dobře, nejhorší písničku na albu bychom taky měli.

Konce jsou opět depresivní, snad i ironické, ale jako kdyby se po mě chtělo, abych na to nějak reagoval, ale nevím jak ...
"Po kapsách hleám číslo k tobě domů
Tvé jméno je Víra, u sta hromů!
a příjmení Slepá - jako ulice
ulice U Lva, ulice U Lvice"
Po ní ale následuje něco komického, nevím proč, ale přijde mi, že se následující "mezipoznámka" vztahuje k věnování u písničky Na salámu - "všem lumpům, tunelářům, důstojníkům StB, vyjmenovaným soudruhům, a slabochům včetně mě".
"Jen ať mají lidé respekt. Tady není žádnej holubník, tady je věštírna!"
Noc a den. To je možná písnička, která předznamenává nějakou změnu, pokus o změnu. Je pro mě cizí, ale přece promlouvá. Na tom sólu asi chtělo ještě trošku zapracovat, přijde mi, že mu chybí nějaký cíl, vrchol, jen tam tak je ...

Jakkoliv jsou kytary v Letadlech a trumpetách oproti Pavlíčkovým sólům triviální, fungují daleko lépe. Tahle písnička mě zase začala bavit, má náboj, probuzení, vyplutí z temného dna nádoby k hladině, letadlem nebo ponorkou s fanfárou. Text je šílený, ale přece vážný a dává mi smysl mezi řádky. Ale aby to nebylo až tak euforické, přichází opět "filozof z neolitu" (u mě opilec), řka:
"Heroin, takový návaly radosti a příjmenosti jsem nikdy nezažil."
Podzim je ještě šílenější a pro mě opět parádní zážitek. Na Youtube je k tomu i video a nevím proč, lepší klip snad ani není možné udělat:

Tohle je pro mě nejsilnější část desky. Maják. Naděje.
maják tam zářil nocí
maják tam zářil dnem
maják tam zářil v bouřích
maják tam zářil všem

Po Slovu božím, tj. nefalšovaném kázání, následuje písnička Nevěřím, věnovaná dokonce Davidu Gilmourovi. Sice nevím úplně proč, ale písnička je to dobrá, ve všech směrech ... krom sóla na saxofon, kterému zase nějak chybí ta správná pointa. O kousíček.
"nevěřím těm zrůdám, pane
tělo, duše, srdce jsou tak potrhané
ukonči už prosím, poslední mou cestu
dej mi moji hvězdu znovu za nevěstu"
Jenže přemýšlet o tom není čas ... Vesmír nečeká, život nečeká ... mimochodem, opět velmi povedený nápad na klip :-)

A zbývá už jen Epilog (Uprostřed).

Ale já odbočím k nějakému svému vlastnímu závěru. Rozhodně nelituji toho, že jsem si to album koupil, ještě k tomu přímo od Milana Prince. Už jsem ho slyšel určitě víc jak desetkrát, ale pořád mám pocit, že si na něj teprve zvykám, učím se mu rozumět, vracím se k němu.
Docela by mě zajímalo, jak by znělo naživo, byť asi všechny muzikanty na jedno jeviště těžko nahnat, ale mám takový pocit, že těch pár nedotažených věcí by si při živém hraní časem sedlo do možná trochu jiné, lepší, podoby.
Ty písničky mám vesměs rád, jediná, kterou přeskakuji, je Na salámu - říkám si, jestli v tom není nějaká poťouchlost, když písničku, věnovanou všem hajzlíkům a hajzlům nejspíš nikdo nebude chtít ani poslouchat :-)

Až se Milan Princ vyskytne někde poblíž, musím tam vyrazit.

neděle 18. května 2014

Jak poznat demagoga?

Lidé uvěří všemu

"Co je psáno, to je dáno!", říká se. Dnes je psáno skoro všechno. Všichni všechno komentují a čím více šokující informace, tím rychleji se šíří, stává se později součástí podkladů pro další informace a dedukce a indukce ... a lidé pak rádi uvěří sebevětšímu nesmyslu, který by normálně vyvrátili "selskou logikou".

Kdo je demagog?

Demagog je v principu lhář, člověk, který z části úmyslně, z části z nedbalosti, tvrdí něco, co nedokáže ničím podložit, a tak ke svému tvrzení "přihazuje" další zdánlivá fakta, která by ho alespoň na první pohled mohla podporovat.

Musí být placený!

Poslední dobou hit demagogů. Když někdo tvrdí něco, s čím demagog nesouhlasí, začne tvrdit, že je někým placený. To samozřejmě podloží libovolným článkem, ve kterém se o placených diskutérech píše. A samozřejmě - vyhne se argumentaci jakkoliv se vztahující k tomu, co ten někdo napsal.

Je to debil!

Není to nic jiného než urážka, respektive povýšení jakéhokoliv demagogova názoru na jednoznačný fakt, zatímco oponent je hlupák a jeho názor nemá žádnou váhu. Ve skutečnosti to bývá velmi často naopak.

Každý rozumný člověk přece ví!

To je obdoba předcházejícího, jen působí malinko vlídněji. Podobně jako předchozí nepřipouští žádnou jinou možnost a oponent je předem klasifikován jako trouba.

Nejlepší je ...

Srovnávání hrušek s bramborami. Lidé milují jasné volby mezi dobrem a zlem, černou a bílou, žebříčky, fandění. Demagog vám předhodí na první pohled jasný výběr, jenže ...
Jednou jsem narazil na takové pěkné video, míněné jako vtip, ale je na něm pěkně vidět ta logika - titulky ani nepotřebujete, jde o srovnání Maserati a VAZ 2107. Co je lepší?

A teď zpomalte - na co to auto chcete?!


Je to ...

Nikdo není dokonalý a je téměř vyloučeno, že s někým budete vždy souhlasit. Pokud ale s někým souhlasíte, demagog, nemaje argumentů, se argumentaci vyhne a zaútočí na osobu. S čímkoliv, co kdy řekla, kdy udělala nějakou chybu atd.

Jak nebýt demagogem?

Typů "argumentačních faulů" je mnohem víc, určitě na ně přijdete sami. Pěkný seriál je na Ars Technica.

  • používejte rozum, hledejte souvislosti, příčiny, důsledky, možnosti
  • vyhněte se kategorickým soudům o lidech
  • osoba argumentujícího může pomoci se zorientováním se, ale nemůže nahradit argumenty
  • urážky do diskuze nepatří, respektujte oponenta
  • pokud argumenty dojdou, je lepší pokrčit rameny a nechat to na jindy
  • někdy nemáte pravdu, přiznejte si to
  • někdy mají pravdu oba, liší se jen úhel pohledu
  • filtrujte demagogie a informace, udržujte si v hlavě pořádek

Information is not knowledge. 
Knowledge is not wisdom. 
Wisdom is not truth. 
Truth is not beauty. 
Beauty is not love. 
Love is not music. 
Music is the best… 
(Frank Zappa - Joe's Garage)

sobota 17. května 2014

Refaktoring, část II.: Technický dluh

Aneb kapitola (nejen) pro manažery, ekonomy, zkrátka byrokracii, která rozhoduje o investicích, financování, směrování projektů - a taky o tom, kdy se projekt uzavře jako "hotový".
Původně jsem chtěl jít rovnou na zdrojáky, ale událo se něco, co mě přimělo vložit ještě jednu kapitolu. Zjistil jsem totiž, že u nás se o technickém dluhu až zase tak moc nemluví. Nicméně programátorší "guru" o této metafoře mluví už docela dlouho:

Co je to?

Manažeři i zákazníci milují vodopádový model: objednávka, zadání, analýza, zhotovení, akceptace, zaplacení. Nic složitého to přece není, vypadá to triviálně a jednoznačně. Ti zkušenější už ví, že každá ta fáze skýtá mnohá nebezpečí a pasti. Obecně nejednoznačnost a nedotažení každé té fáze - příčinou je obvykle neznalost přesných požadavků a neznalost způsobu výroby na druhé straně.

Zjednodušeně řečeno, technický dluh vzniká vždy, když kdokoliv na projektu odloží něco, o čem dobře ví, že je třeba udělat, ale odloží to - ať už se to týká analýzy, testů, dokumentace, vyčištění kódu.

Jak moc to vadí?

To je různé - asi jako inflace, státní dluh, vaše dluhy; proto se tomu říká technický dluh. Jsou to nedodělky, ale ne jen ty, které vidíte při předvádění aplikace. Ty skryté jsou daleko nebezpečnější. Proč? Nedodělky, které vidí uživatel, viděli všichni během vývoje projektu, a došlo k nějakému konsenzu, že jde o kompromis, se kterým uživatel dokáže žít.
Nedodělky, které ale vidí jen programátoři (pokud je vůbec někdo vidí), mají vlastnost právě té inflace - je to exponenciální funkce. S každou další iterací se umocňuje vliv dluhu, veškerá jeho negativa. Dlouho to nemusí vadit, ale když nad technickým dluhem ztratí vývojový tým kontrolu, už není cesty zpět a vývoj projektu skončí s potupnou ztrátou a obviňováním všech, kteří se na něm podíleli, navzájem.


Exponenciální funkce

Je jasné, že udržet projekt bez dluhů je prakticky nemožné. Vždycky se dá všechno udělat lépe. Na druhou stranu, když dluhy nesplácíte, špatně skončíte. Z vlastní praxe bych to rozdělil na takové tři kategorie (v horším případě fáze) ...

Dluh pod kontrolou

Dobrý stav, který znamená, že projekt má budoucnost a přestože obsahuje pár chyb (někdy i hodně), má smysl v něm pokračovat. Příznaky jsou následující:
  • vývojáři dávají celkem rozumné odhady pracnosti
  • nikdo není nervózní, panují dobré vztahy
  • vývojáři se těší na další úkol
  • většinou se stíhají termíny

Zadlužení

To už je horší stav, ale není nezvladatelný. Nesmí se podcenit - i za cenu oddálení termínu předání další verze je nutné dluh udržet nebo ideálně snížit. S každým dalším nárůstem se situace zhoršuje. Příznaky tohoto stavu jsou takové:
  • vývojáři pracují přesčas, často neplaceně a dobrovolně
  • zpravidla se nestíhají termíny, předání verze se oddaluje i opakovaně
  • často se mění analýza během vývoje
  • množí se požadavky na "až"
  • horší se přesnost odhadů pracnosti - obvykle se podstřelují v toužebné snaze všech stihnout termín
  • tendence přidávat lidi do zpožděného projektu
Management nechápe, proč se dříve termíny stíhaly a teď ne, má tendenci přitlačit, motivovat, ale prakticky dosahuje jen jediného - zvýšení tlaku a stresu, což často končí odchodem zaměstnanců, zpravidla těch nejlepších v první řadě, těch nejhorších potom v řadě druhé. Zůstávají jen bojovníci - pokud se dokážou vzepřít veškeré nepřízni, má projekt ještě naději.

Exekuce se blíží

V tuto chvíli se podívejte opět na ten graf exponenciální funkce. V určitém bodě se dostanete přes hranici, kdy vývoj dalších verzí projektu stojí ohromné zdroje a úsilí a jste ve stavu, kdy je extrémně těžké s tím něco začít dělat.
  • vývojáři často mění své odhady, klidně o dva řády - z hodiny je týden, z týdne 20 minut.
  • jakýkoli termín vyvolává šílený smích vývojářů
  • panuje nervozita a dochází k hádkám a práskání dveřmi
  • manažeři zakazují jakoukoliv údržbu, dovolené, a snaží se do projektu dostat nové lidi - a to jakékoliv
  • neprovádí se analýza, nebo jen povrchně
  • nehledí se na žádná kvalitativní měřítka
Je téměř vyloučeno, abyste se dostali z této fáze zpět. Pokud chcete v budoucích projektech uspět, uvědomte si, co jste zanedbali dříve, podcenili. Není to o tom, že jste měli požadovat vyšší cenu nebo sehnat více lidí.  Vždy potřebujete čas a vždy potřebujete nějakou stabilní kvalitu. Na tom, co děláte dnes, budete stavět zítra.

Udržování dluhu pod kontrolou

Všechno je vlastně docela snadné a pro řadu souvisejících problémů dokonce existují nástroje.

Odhadování pracnosti

To je problematika, na které často stojí váš úspěch - odhadnout, kolik času budete potřebovat na zhotovení něčeho, o čem ještě nemáte "ani páru", je trochu neřešitelný úkol. Existuje na něj řada strategií a doporučení, ale vždy ke kvalifikovanému odhadu potřebujete přehled. Odhad navíc nemůže být definitivní - je to jen odhad, že ...

P: "Devět žen neporodí ani jedno dítě za jeden měsíc. Chápeš?"
M: "Jojo, tohle ví každej, to znám ... Ale Ty jsi chlap!"
P: "Máš pocit, že devět chlapů nějaké dítě porodí?" 

Jak se projevuje technický dluh na odhadu? Představte si, že máte nějakou knihovnu, kterou lehce zanedbáváte - používáte jí ale v aplikaci bez problémů. Přijde ale nový úkol pro aplikaci, při kterém ale zjistíte, že v knihovně je chyba. Také zjistíte, že chybu jste v jiných aplikacích, které na ní už narazily, obešli. Jenže tuto obezličku v nové aplikaci uplatnit nemůžete, protože je v rozporu se zadáním - a navíc jste tehdy nepsali ani testy, takže ani nevíte, co všechno se opravou naopak rozbije.
A tak vám nezbude, než chybu opravit, čímž ale možná rozbijete již hotové aplikace s obezličkou. Tudíž pak budete muset i dopsat testy a opravit i tyto aplikace.

A teď se krátce zamyslete - jaký asi byl původní odhad? Kolikrát ho během opravy změníte? A jaká byla výsledná pracnost? Tím to ale nekončí - opravené aplikace bude možná třeba také distribuovat, takže nám vzniká další pracnost.
Ufff, tohle bolelo. A ještě bude, protože všem musíte vysvětlovat, co se vlastně stalo a proč - a čas běží dál a náklady rostou.

Psaní automatických testů

Automatický test je vlastně další kód, který programátor napíše nejlépe předtím, než začne programovat nějakou funkcionalitu aplikace. Test není součástí aplikace, ale verzuje se spolu se zdrojáky, a moderní programovací jazyky velmi pečlivě zohledňují testovatelnost.
Není žádná výmluva pro nepsaní testů, nikdy. Už dobrých 20 let se považuje za prokázané, že automatické testy vedou k
  • rychlému nalezení chyb nového kódu
  • ujasnění designu a zpětné vazbě analýze dříve, než je aplikace hotová
  • rychlému nalezení chyb, které způsobily opravy na jiném místě
  • konzistentnímu refactoringu (nic se nerozbije)
  • dokumentaci funkcionality (test minimalisticky ukazuje, jak se funkcionalita používá)
Naopak prosby nebo dokonce zákazy manažerů, aby se psaní testů odložilo, protože není čas, končí tak, že
  • dostanou funkcionalitu ještě později
  • druhý den se opravuje oprava dne předchozího, den za dnem
  • nikdo neví, co to vlastně dělá a k čemu to je (brzy ani autor)
  • jakákoliv změna v kódu znamená nutnost manuálního přetestování skoro celé aplikace, protože nikdo neví, co všechno změna ovlivnila

Refactoring

Refactoring se přímo zaměřuje na snižování technického dluhu. Obvykle je dobré začít psaním testů, dopisováním //FIXME a //TODO, případně komentářů, kam si zapíšete své objevy proč a co se v tom daném místě děje, co je na tom špatně, jak by to mělo být správně. Tyto komentáře neslouží k tomu, aby v kódu zůstaly, ale abyste se při své analýze neztratili.
Musíte postupovat opatrně, protože se pohybujete na "minovém poli" (proto kód chcete přece refaktorovat), a krok vedle může znamenat, že své úpravy zahodíte (dokud je ještě čas).

Refactoring předně slouží k tomu, aby byl kód čitelný, měl jasné odpovědnosti a funkcionalitu, choval se předvídatelně a funkcionalita byla vždy k nalezení tam, kde jí člověk hledá. Potom se na kódu teprve dá stavět něco dalšího, kde nebudete muset vymýšlet žádné obezličky.

Refactoring nikdy nekončí - ke každému kódu se po čase musíte iterativně vracet, protože jak se rozvíjí aplikace, je občas třeba změnit trochu i uspořádání kódu, sloučit věci, které se původně zdály rozdílné, ale nejsou, rozdělit věci, které původně dělaly téměř totéž, ale už dávno to není pravda, atd.
Ač se to některým lidem zdá pořád neuvěřitelné, nečitelnost kódu, velké množství duplicit a slabé pokrytí testy mají extrémní vliv na jakýkoliv budoucí rozvoj, daleko větší než sebekomplikovanější zadání.

... a odkládání

Pokud se údržba zanedbává, problémy na sebe nenechají dlouho čekat:
  • náklady na rozvoj aplikace jsou čím dál vyšší, neúměrně požadavkům zákazníka
  • opravené chyby uživatel opět hlásí jako neopravené (našel je i jinde)
  • aplikace se chová nekonzistentně (a uživatel jí nenávidí)
  • aplikace potřebuje více paměti a je pomalá
  • vývojáři trvá velmi dlouho, než zjistí, co má vlastně dělat, těžko se orientuje
  • n testů téže věci a podobná věc není otestovaná vůbec
  • nepřehledná dokumentace, nepřehledné testy, nepřehledná aplikace
  • vývojáři nenávidí aplikaci a po čase odchází jinam (nepodceňovat!)
Často se ale zapomíná také na to, že jsme jen lidé a zapomínáme. O týden odložená údržba už znamená, že se v ošklivém kódu přestává orientovat i jeho autor, a nejen rozvoj aplikace, ale i její údržba stojí více, je namáhavější a také při ní pravděpodobně vznikne více chyb.Je to podobné jako s úvěry - u některých můžete odložit několik splátek, ale pak je bude mnohem těžší dohnat. Možná to už nezvládnete ...

Nástroje

Co se týče sledování odhadu technického dluhu u nás používáme SonarQube; V této aplikaci je i řada dalších metrik kvality software a dá se říct, že je to jediná aplikace, kterou znám, která umí zobrazovat i historii různých hodnocení projektů a dá se i zhruba použít k porovnávání kvality. Podotýkám, zhruba, protože žádný software nemůže posoudit to, jak vaše aplikace plní požadavky uživatele a zákazníka.

No a pokud jde o nástroje pro vývojáře a tvorbu automatických testů, refactoring a vývoj obecně, ti už "ty svoje" nástroje určitě dobře znají ;-)

neděle 13. dubna 2014

Refaktoring, část I.: Proč já?!

Úvod

Četl jsem už spoustu článků i blogů o tom, co programátor má nebo nemá dělat, a jak užitečný a dokonce nutný je refaktoring. Nikde se ale moc nepíše o strategiích refaktoringu a dost lidí se ho pořád i tak trochu bojí. Tož jsem se rozhodl, že o tom něco napíšu sám, neb s tím mám dlouholeté zkušenosti.

V roce 2007 jsem přišel do firmy ICZ, jako "junior", který o Javě "už někde slyšel". Ne jako nějaký odborník, zkraje jsem byl zkrátka tolerován. Ne na dlouho ... po dvou měsících na jednom projektu ze mě udělali vedoucího projektu jiného, o dost většího, který dodnes (2014) přežil leccos, neustále narůstá a komplikuje se, ale paradoxně se i zlepšuje jeho stabilita i udržovatelnost - přitom na něm dělá pořád míň a míň lidí. Jak to?
Postupně začnu popisovat své zkušenosti - řekněme takovou formou "občasníku". Nebudu vám vtloukat do hlavy agilní metodiky, scrum, extrémní metodiky, zkrátka, nebudu vám říkat, co máte dělat. On totiž každý projekt potřebuje "svoje". To samozřejmě není nic proti těm metodikám, je dobré je znát, a vybírat si vhodné "zbraně k boji".
Jen pro zajímavost: "můj" projekt má po 11 letech vývoje zhruba 500 000 řádek kódu (kódu v Javě! čili ne javadoc, ne prázdné řádky a dokonce ani webové stránky - JSP).

Jsem nový v týmu

Tak to začalo. Návyky z minulé práce se tu nevedly. Nové návyky byly pro mě zvláštní, nové, chvílemi jsme se vzájemně odsuzovali, ale ve výsledku jsme stále táhli za jeden provaz.

Fáze 1: První zákaz

Když jsem uviděl víc jak 1000 řádkovou třídu, servlet, dokonce s jedinou metodou, chvíli jsem na to zoufale zíral, a pak začal refaktorovat. Když jsem se zmínil šéfovi, bylo mi řečeno, že nemám "spravovat co není rozbité" a "zákazník tohle neplatí".
Obvyklá rada zní - z takové firmy rychle utíkejte!
Mám takový "zlozvyk", vlastně dva:
1) Neutíkám z boje, nerad se vzdávám, radši zkusím, co se s tím dá udělat.
2) Nenechám si zakázat něco, o čem vím, že to dokážu dotáhnout do konce.

Fáze 2: Tolerance

Ukázalo se, že porušení zákazu nemá negativní důsledky. Pořád mi to nikdo nevěřil, někteří programátoři mě považovali za magora, kamikaze, a někteří to vzali jako výzvu. Výsledkem bylo mlčení na obou stranách, termíny se stíhaly, všechno víceméně fungovalo jako předtím, ok.
V tuhle chvíli se musím zastat možná i vašich projekťáků: postavte se do jejich role, pochopte, o co jim jde:
1) Více změn, větší pravděpodobnost chyb.
2) Změny v předaném hotovém kódu mohou způsobit změnu chování a ta se těžko vysvětluje zákazníkovi - ten NECHTĚL, abyste cokoliv z toho měnili.
3) Pokud se nestihne termín, vaší firmě hrozí penále a pokud navíc měníte něco, co nikdo nechtěl měnit, bude to bez slitování. Zákazníka refaktoring nezajímá, berte to na vědomí.

Musíte získat důvěru šéfa, ne hysterčit. Musíte být dost pečliví a dobří na to, aby se za vás mohl s čistým svědomím postavit.

Situace, kdy v týmu panuje nevraživost, když se se svými šéfy nechcete bavit o tom, co děláte, a vzájemně si lžete, je opravdu chvíle vhodná ke zvážení odchodu jinam. Ale pokud se to ani nepokusíte změnit, pravděpodobně jinde dopadnete stejně.
Většina programátorů jsou vysokoškoláci, odborníci, experti, dokonce se dá říct vědci. Pokud něco víte, musíte umět taky najít argumenty, důkazy, a mít trpělivost je ukázat a vysvětlit každému, komu bude třeba. Já vím, nejspíš jste ve vsyvětlování stejně špatní jako já - učte se to, jinou radu nemám ;)

Změna týmu (vítej v pekle!)

Fáze 3: Nedůvěřivá polopodpora

Po pár měsících mě přesunuli do jiného týmu na jiný projekt, kterému nikdo z programátorů nechtěl velet.
"Unit testy? Co to je? To si nikdo neobjednal!" - první reakce na otázku automatických testů. Refaktoring mi byl opět zakázán a opakovaně jsme si s projekťákem vysvětlovali, proč ano a proč ne - nicméně nikdy jsem s tím nepřestal. Testy jsme ale nepsali ještě dlouho.
Můj první úkol byla "opravička" (podle zadání droboučká) v aplikaci, která měla asi 5000 řádek ve 4 třídách (jedna měla přes 3000 řádek). To snad ani nebyla Java, to bylo peklo. Dostal jsem na to 12 člověkodní. Po dopoledni, stráveném "pícháním klackem" do zdrojáků, jsem pochopil, že netuším, co to dělá a jak.
Za nějakých 5 člověkodní jsem z těch 4 tříd udělal 42, aniž by se aplikace chovala jinak. Jen víc psala do logů. Později popíšu detailně, jak na to ;)
Za další den jsem našel hledanou chybu. A cestou našel asi 4 další, které stoprocentně uživatel musel vidět také!
Při ručním testování se zjistilo, že analytici našli další chyby, a že jsou i v provozní staré verzi. Po konzultaci se zákazníkem došlo i na opravy těchto chyb, načež po 7 člověkodnech jsem byl hotov (později vysvětlím, jak se to pozná ;)).

Fáze 4: Poplácání po zádech ... a ... a jéje

Ano, to byla malá výhra. A protože jste "fakt dobří":
1) Příště máte času polovičku, ne-li mnohem méně
2) Dostanete na starost ostatní programátory
3) Nekonečné konflikty se všemi, jen vedoucí sousedního týmu se vám směje
4) Přibývá stresu, ubývá chuť k práci
5) Není čas na změny

Tohle je začátek konce, kdy nakonec buď odejdete, nebo dospějete a postavíte se definitivně na vlastní nohy. Opět jsme u argumentace - té se nikdy nezbavíte!

Odhad pracnosti

S oblibou přirovnávám práci programátora k luštění křížovek - hodí se to jak pro vysvětlování věcí projekťákům, tak laikům.
Baví vás to? Tak si představte, že 8 hodin denně, 5 dní v týdnu, luštíte křížovky. Máte pocit, že vás to bude bavit? Ne, programátor vážně není "dělník, co jen pracuje hlavou"!
Takže, zkuste to takhle - šéfovi přineste libovolnou těžší křížovku, a za 5 minut se ho zeptejte, kdy jí už bude mít hotovou. A pak jemně konstatujte, že když on po vás chce odhad, je to podobné.
Pokud je navíc kód ve stavu, kdy se v něm nelze vyznat, je odhad prakticky nemožný. Nenaděláte nic, neexistuje řešení, jak dát byť řádově přesný odhad. Ano, měsíc je vhodná jednotka na jakoukoliv změnu v takovém kódu!

Programátoři

To znáte z amerických filmů, typicky vojenských, sportovních. Ne, nejsou to blbci, naopak! Někteří jsou chytří až moc - což je nejhorší varianta, pokud si je nezískáte na svou stranu. Oni se ve svém kódu přece vyznají a funguje! Nic je nedonutí změnit přístup, formátování, přestat psát Javu ve Vimu, používat na všechno statické metody s názvem a() a 20 parametry nebo hashmapou (vede se věčný boj, co z toho je horší).
Krom věčného vysvětlování a kontrolování cizí práce musíte stíhat i své vlastní programování. Ne, nemůžete přestat programovat - jednak by tým přišel o (aspoň jakýstakýs) vzor, jednak je to váš způsob získat si nějakou autoritu, ale hlavně se pořád ještě učíte nové věci - nemůžete radit a dohlížet na jiné, když sami nevíte, jak na to.
Ano, je to přesně jako v těch amerických filmech: hledejte silné stránky, buďte tolerantní, ale zároveň někdy musíte prostě někoho seřvat, nedá se nic dělat. Pravda je, že až tady mě naučili se "nasrat", do té doby jsem byl flegmatikem.

Konflikty

Z předchozího odstavce už je jasné, že buď najdete alespoň nějaké spojence, nebo odejdete. Nebo zatnete zuby a budete makat, dokud všechno nepřijde samo.
Jako vedoucí jsem byl tehdy řekl bych dost špatný. Jako programátor jsem dělal velké pokroky, ale nově nabyté zkušenosti a informace jsem neměl dost zažité na to, abych je někomu dokázal předávat.
Zpětně vím, že mám vážně moc dobré šéfy. I když se někdy hádáme, odsekávám, jednou jsem projekťáka dokonce nazval diletantem, načež on se neurazil, počkal, až "vyšumím", já se omluvil, a argumentoval a argumentoval, než jsme se nějak dobrali k tomu, že "doufá, že vím, co dělám".
Zkrátka, pokud víte, že jste něco přehnali, nebo dokonce byli na někoho nespravedliví, řešte to co nejdřív a velkoryse.

Stres

S tím mám problém dodnes. Je toho moc. Rady už znám taky, ale neumím se jimi důsledně řídit: vstávejte rituálně, pravidelně a stejně pravidelně choďte z práce. V práci nezapínejte Facebook ani jiné podobné blbiny, žerou neuvěřitelné množství času a oberou vás buď o výsledky, nebo o zbytek dne, kdy ty výsledky budete dohánět. Dodržujte pitný režim a jezte střídmě. Po práci se fyzicky hýbejte.
Tož jsem si to teď hezky sepsal, třeba se konečně polepším :-)
Chuť k práci mám, tu mi dává pohled zpátky na to, co všechno se už změnilo k lepšímu.

Změny

Z pohledu projekťáka, natož zákazníka, není na výslovně zákazníkem neobjednané změny čas nikdy.
Takže pracujete tak trochu v ilegalitě. Opět, jste experti, musíte vědět, co můžete změnit a co nemůžete změnit v dané iteraci. Prakticky jde o to, aby to neoddálilo termín - a pokud, aby to bylo obhajitelné. Což se lehko říká, ale těžko dělá.
Řekněme, že do toho budete dávat zhruba 30% času týmu. Pro projekťáka je to strašně moc a bude to chtít snížit. Nebo aspoň pro tuhle iteraci. Ne, neexistuje. Proč? Protože pokud to neuděláte TEĎ, termín bude možná (!) splněn, ale:
1) Větší riziko (řekněme rovnou, jistota) chyb, které tým bude řešit zdarma v rámci záruky
2) Oddálení údržby neznamená, že příště jí strávíte 60% další iterace, ale zůstane tam těch 30% a mezitím vám přibude produkce z minulé iterace.
3) Nezapomínejme na lidskou paměť - o dvě iterace dál už se učíte chápat svůj vlastní kód, čili stojí to další čas navíc.

Pokud změny uděláte, má to "nenápadné" bonusy:
1) Odhad pracnosti je řádově přesnější (z měsíců jdeme na dny)
2) Opravy jsou záležitostí hodin, dokonce minut
3) Od nějaké úrovně stavu kódu lze levně psát unit testy
4) Rozvoj aplikace má tah na branku, víte, co děláte a co ještě budete dělat, neobjevují se záhadné chyby.

Dnes

Fáze 5: Mám nejlepší tým v historii projektu

Ne, pořád jsme nevyhráli. Ale vedeme si dobře. Ta věta z podnadpisu mě napadla chvíli poté, co jsem se na jednoho "mého" programátora ukrutně naštval, seřval ho a za chvíli mi došlo, že neprávem. A že jsem poslední dobou dost nepříjemný. A že to není poprvé. Obratem jsem se mu omluvil a na další poradu přinesl láhev vína a nešetřil jsem.
Stresu je hodně, ale to není žádná omluva, takhle by se ten tým rychle rozložil. Vyhrazuji si právo být člověkem a občas se zachovat jako idiot, načež to ale neznamená, že bych tím nenáviděným idiotem hodlal zůstat.

Zpětně jsme udělali ohromný kus práce s tou půlmilionřádkovou saní. Ano, pořád půlmilionřádkovou, počet řádek narůstá velmi pomalu, protože pořád je tu těch 30% investice (někdy méně, někdy více). Mezitím se aplikace naučila komunikovat s asi 6 dalšími systémy, přešla z Javy 1.4 na JDK6 a má našlápnuto na JDK8, bylo napsáno asi 3000 testů od knihoven až po aplikace a testy GUI, přešlo se z Antu na Maven2 a později Maven3, kvalitu nám už několik let "známkuje" Sonar, máme automatický build systém a zasílání změn, atd.

V jednu dobu bylo na projektu neuvěřitelných 13 lidí. Dnes je nás 5 a děláme toho snad ještě více.
Náš projekťák má občas pořád tendenci někde "ušetřit", ale nechá si to vysvětlit a nepochybně svou práci dělá dobře.

Dostávám nabídky na dvojnásobek současné mzdy, ale není to jen tak - neodcházím z několika rovnocenných důvodů:
1) Mám rád evoluce, ne revoluce. Chci si užít pocit, kdy už budu vědět, že všechno klape. Myslím, že nejsem tak daleko od tohoto stavu.
2) Jiná práce, jiný tým, jiné podmínky, dost možná bych musel znovu někoho přesvědčovat, že používá technologie, ke kterým už se dnes nikdo nezná, že psát testy není ztráta času, že požadovat nějakou úroveň zdrojáků není perfekcionalismus, ale pud sebezáchovy.
3) Mám rád živé projekty, ne režim "přijít - napsat - spustit - odejít".
4) Mám tým, ve kterém se dokážeme domluvit, vyhovět si, a případně i zabojovat, aby projekt dopadl dobře (zákazník spokojený, projekťák spokojený, firma dostane zaplaceno a my možná odměny :-) ).

Samozřejmě to neznamená, že tu ta možnost odejít není. Ale momentálně jí nevyhledávám a nabídky odmítám.

Závěr úvodu (no hurá)

O refaktoringu se tu vlastně dneska mluvilo málo, zato dlouho. Asi jsem nenapsal ani nic, co by člověk nevěděl, ale šlo mi o to nabídnout pohled na tu "evoluci" od začátku do konce (budiž prozatímním neustále utíkajícím koncem označen dnešní den).
Pokud přijdete na projekt o této velikosti, nečekejte, že s ním pohnete jen tak. Je to práce na dlouho a vy se pořád musíte vejít do rozpočtů a těžce si vydobývat důvěru jiných. Ta vzniká tak, že uspějete krůček po krůčku v zakázkách, že vaše dílo funguje, když jiná mají problémy.
Je to hodně o hledání rovnováhy a schopnosti dotahovat věci do konce tak, abyste se k nim nemuseli vracet nečekaně a často a ... neradi.

Ano, zákazník srovnává hrušky s jablky, a vy to děláte taky, jen si to neuvědomujete. Dnešní naší společnosti chybí respekt, empatie, schopnost podívat se na něco očima někoho jiného - ale o tom jindy a jinde. Učte se to. Většina firem nabírá programátory a analytiky v jednom, takže - analyzujte ;)

Další díly asi budou kratší a jelikož to píšu bez přípravy a konceptu, uvidíme, co ze mě "vypadne".  Každopádně bych se chtěl zaměřit na nějaké strategie refaktoringu a zhodnocení toho, která kdy může být úspěšná.

Poslední dnešní věta:
Neexistuje nerefaktorovatelný kód!