neděle 3. července 2016

Javisté a databáze - základní chyby

Na školení jsem všem implicitně vynadal, že nikdo pořádně neumí používat ani JDBC, ale chtějí (dobře) používat JPA nebo JTA. A co teprve, aby rozuměli trochu tomu, co jejich zacházení způsobí na databázovém serveru ...
Pak se diví, že jim to celé padá na hubu - typicky začnou optimalizovat SQL, ale marně. Jen málokoho napadne, že databázi dávají kapky - pro každý váš požadavek databáze alokuje nějaké zdroje v operační paměti, přidělí vlákno, příkaz zabere nějaké místo na file systému, a databáze čeká až na signál od vás, že už jste hotoví.
Tož si překontrolujte, jestli si databázi nepřetěžujete ...
  • zavíráním statementů
    • kolikrát za sebou generujete stejný prepared statement?
    • nezavíráním statementů
    • jak dlouho má db držet statement?
    • kolik stejných prepared statementů držíte najednou?
    • poslední pomoc: omezit počet použití konexe z poolu, pak jí AS nuceně zavře a otevře novou (Payara)
  • nezavíráním result setů
    • jak dlouho má db držet nalezená data, kurzor?
    • kolik dat to je?
    • fetch size
  • zbytečně dlouhými transakcemi se spoustou změn
    • víte, co se děje v databázi?
    • víte, že i zdroje databáze jsou omezené?
  • nemazáním dočasných tabulek, vytvořených v poolovaných konexích
    • je to v podstatě leak, zapomenutá data pak můžou být náhodně nalezena jiným dotazem, čili hypoteticky to může být i bezpečnostní díra.
  • nadměrným využíváním indexů nebo naopak jejich absencí
    • každé vložení dat způsobí změnu v indexech
    • databáze jsou různě chytré/hloupé při optimalizacích
    • indexy pomáhají při čtení
    • indexy škodí při zápisu
    • někdy se hodí replikace db tak, aby db pro vyhledávání byla důsledněji indexovaná než ta pro zápis
  • chybným nastavením JDBC poolu
    • default lock timeout
    • velikosti bufferů
    • různé optimalizace
    • rozdělení datových zdrojů podle použití (exporty vs. CRUD)
  • chybným nastavením:
    • stmt.setQueryTimeout
    • stmt.setMaxRows
    • stmt.setFetchSize
    • conn.setTransactionIsolation
    • conn.setResultSetConcurrency
    • conn.setHoldability
JPA samozřejmě k relační db přistupují přes jdbc, ale pozor!
  • JDBC transakce není nutně pod JPA transakcí a už vůbec nejsou svázané 1:1
  • JPA transakce není JTA transakce
  • můžou. Je to záležitost nastavení "persistence unit" a také nastavení hintů (viz Query.setHint)
  • EntityManager.unwrap(Connection.class) znamená spuštění JDBC transakce a svázání 1:1 JDBC konexe a JPA manažera se vším, co to obnáší.
JTA se pak řídí hlavně anotacemi, ale pozor pozor!!!
  • pokud si nedáte pozor, můžete si připravit neskutečné magické transakční peklo
  • „requires“ je dobrý default
  • „requires new“ se někdy hodí, ale … uvědomte si, co to znamená!
  • některé posloupnosti těchto hodnot dokážou naprosto šílené věci – s kolika JPA kontexty a JDBC konexemi nakonec opravdu pracujete?
Jste programátoři, vědci, ne pistolníci z televizního divokého západu. Na riskování není čas, musíte přesně vědět, co děláte ;-)

sobota 26. března 2016

Proč je důležité mluvit s blbci

Lůza je hrozně hanlivé označení lidí. Blbci není o moc lepší. Řeklo by se nadávka, jenže ono je to tak ... 
Učitelé musí mít hroznou trpělivost. Já se pustím jednou za čas do konverzace s blby a po hodině házení hrachu na zeď je mi z nich špatně. Jenže - za prvé - když to nikdo dělat nebude, blbci mají ohromnou schopnost se v blbství utvrzovat a stupňovat ho. Postupně tak vznikne ohromné stádo pološílených blbů, schopných silou prosazovat stejně pološílené nápady. Bolševismus, nacismus, supremacismy obecně ... 
 Za druhé - je dobré vědět, že zdaleka ne každý má rozhled a že spousta lidí opravdu má problémy s logickým myšlením (resp. ano, nikdo nemá kompletní rozhled a perfektní logiku, ale u některých lidí jde opravdu o katastrofální úroveň). Fungují často na obrázky, které si spojí s jediným slovem v textu, spojeným s nějakou emocí. To je všechno, veškerá politika a schopnost volit stojí jen na tomhle.
Nestačí tím ale pohrdat a zesměšňovat to, ono je to spíš na škodu. Takových lidí bude vždycky dost, jenže pokud chcete něco změnit na čím dál absurdnější politice, budete muset začít odspoda.
Vzdělání je lékem na blbost. 
A tak se obloukem opět dostávám k České televizi. Ta totiž svou funkci vůbec neplní. Krom několika málo pořadů se vzdělávání obyvatelstva nijak nevěnuje, spíš se snaží urvat procenta sledovanosti v konkurenci komerčního tupého vysílání - komerčním tupým vysíláním.
Jenže když svou funkci plnit začne, stejně se na ní blbci dívat nebudou.
Depresivní, že?
A tak nezbývá, než aby bylo vzdělání všude, kde se na něj dá vůbec narazit. Snad i proto se začaly prosazovat všelijaké Techmánie, na ulici přístupné knihovny, dokonce piana, ...
Zázrak to neudělá, ale znamená to, že to někdo s touhle společností ještě nevzdal a i jen tenhle vliv může způsobit, že blbci nikdy vládnout nebudou. Někdy totiž opravdu stačí málo.

neděle 13. března 2016

How to upgrade BIOS on Lenovo Ideapad if you have Linux OS?

Why?

I have some problems with suspending of the system. CPU frequency is lowered from 3 GHz to 1.3 GHz and next time to 600 MHz after each wakeup. Maybe it is a problem of the operating system, but on another machine (Dell) with the same system it's alright.
EDIT: updating BIOS did not help.

What?

  • Notebook Lenovo Ideapad Y510P
  • Kubuntu Linux 15.10 64bit
  • any USB stick (or SDHC card, etc.)

What does not work?

The root of the problem is that the new BIOS version is distributed only in EXE file. It is some installer with another installer inside and it is an 32bit Windows application.
So you need some 32 bit Windows and minimal supported Windows is Windows 7. I thought okay, it is ugly, but I will download some Trial from Microsoft, I will burn the ISO to the USB or DVD and use it's console to start the EXE.
It wasn't so simple ...
  • burned ISO does not boot - I have tried Win7 32b, Win10 32b and 64b.
  • following any instructions with dd failed - USB does not boot
  • Startup Disk Creator failed - does not work at all, I have selected ISO file but it was not shown in GUI.
  • UNetbootin failed - successfuly created bootable disk, but it could not boot.

Results

  • downloaded about 12 GB data from the internet.
  • registered on Microsoft's web ("sorry, Microsoft, but I don't want your system, I only need to run this 5 MB exe file - only once!")
  • maybe 20 times deleted and recreated the file system on three USB discs.
  • maybe 100 reboots of two notebooks used for this.
  • maybe 12 hours of work that made me crazy :D
  • and ... SUCCESS! :D

Howto

  1. Download BIOS
  2. Download any 32 bit Microsoft Windows (or some Live CD?)
  3. Start gparted
    1. Select the USB that you will use
    2. Delete all partitions or create new Partition table
    3. Create new NTFS partition (any other would not boot!) and give it some pretty name.
    4. Apply changes
    5. Set attributes to the partition (boot)
    6. Exit gparted.
  4. Start UNetbootin from the command line to prevent bug - if you would start from the menu, you could not select the NTFS partitions:
    1. sudo unetbootin installtype=USB targetdrive=/dev/sd[c][n]
    2. Select the downloaded ISO, click OK and wait ...
  5. Mount the USB disk
  6. Copy the downloaded BIOS exe to the root directory
  7. Unmount and reboot
  8. Hit F12 and start the Windows system installer
    1. I can't remember exactly but you need to get to the windows command line.
    2. Type c: and hit enter, now you are in the root directory of the USB partition.
    3. Type dir, then type the name of the exe file and hit the ENTER.
    4. Follow instructions of the BIOS installer. 
  9. Happyend? ... Maybe ... it took me two days ;-)

Sources

The best source that helped me is this answer on AskUbuntu: http://askubuntu.com/a/252910/160422


Fail 17 - 64 bit version of Windows

Success - bios updater started on Win installer 10 32bit

BIOS update in progress

Finally done.



středa 23. prosince 2015

Pravda ve víně?

Jojo, tak už to chodí ... "jo to byl ten, jak von se jmenoval ... už nevim ... byl divnej ... koupil si barák po K., ale zůstal v něm sám. Všechno mu trvalo, ale byl celkem šikovnej, spoustu toho udělal sám. No jo, ale k čemu mu to bylo dobrý ... "
No k čemu ... prostě tak, zajímalo ho, jak se co dělá a funguje a jestli to zvládne. A nechtělo se mu dohadovat s lidmi, neměl rád hádky a kibicování, v práci musel kibicovat dost ostatní. Byl si vědom, že tu dřinu nikdo nikdy nedocení, ale to mu vůbec nevadilo. Vlastně ho vždycky překvapovalo, když pro někoho "byl dobrej". Byl zvyklý být outsiderem, ale jen tak naoko, vždycky věřil, že sice je outsider, ale umí překvapit. Nedá se mu totiž upřít to, že když se do něčeho pustil, prostě to dotáhl do konce, i když to bylo sebetěžší. 
K čemu mu to? Intuice. Třeba se plete? Možná. Jsem už takový. Jsem pesimista, který se ale nevzdává a věci se snaží zlepšovat, i kdyby to bylo sebebeznadějnější. K čemu mi to? K prdu, spousta dřiny a starostí a posměchu, ale život je fajn pokaždé, když se mi podaří udělat "z prdu kuličku" nebo nějaký "malý zázrak".

No ale stejně. Bývaly časy, kdy se mi lidi posmívali. Jen tak, svým způsobem je to taková dětská šikana. Svět byl normální a dával smysl jen u babičky - mezi kočkami, králíky, slepicemi, knížkami a štípáním dříví, což jsem měl zkraje zakázáno, ale (opět logicky) když se ukázalo, že nejsem sám sobě nadmíru nebezpečný, bylo to tolerováno. Bavilo mě posouvat hranici a učit se další a další věci.
A pak byly časy na sš, kdy se po přijímačkách jeden učitel podivil, že jsem dopadl celkem dobře, ale co prý tam lezu, když stejně odpadnu. Nebyl daleko od pravdy ... jenže ono všechno má svůj "kontext" ... se kterým jsem se teprve musel naučit "vycházet". To se nakonec povedlo, prospěch se zlepšil o víc jak stupeň, zatímco jedničkáři odpadli. Outsider začal bodovat.
A pak byly časy na vš, kdy jsem se učil, že "boj vypadá jinak, štěstí neexistuje a naopak každá škvíra bude vyplněna smůlou". Učil jsem se nenechávat škvíry a ze smůly si nic nedělat. Dělat věci správně. Rozhodovat. Nebýt nervozní, nebát se. Dá se říct, že se to povedlo, byť jsem naposledy selhal ještě u státnic, leč prošel jsem.
A pak byly časy, kdy školní etapa skončila úspěchem, a já byl samostatný, normální. A postupem času se nějak upevnila ta chuť se učit a rozšiřovat svůj rozhled. A taky zjištění, že všechno se stihnout přečíst nedá. A spousta dalších zjištěních, třeba že experti toho často neví vůbec o moc víc, než neexperti. A taky že má smysl se ptát a má smysl hledat lidi, kteří se ptají a taky odpovídají. 
Dneska si říkám, že diskuze bez nenávisti je důležitější než cokoliv jiného jak pro demokracii, tak pro svobodu lidí. Člověk si vybírá, co bude číst, na co se bude dívat, co bude poslouchat. Ale jen zřídka si vybere, co mu jiní řeknou.
Cenzuře nevadí, že říkáte, co se jí nelíbí. Cenzuře vadí, když se tím lidé začínají zaobírat, dokazují, argumentují, přemýšlí, přehodnocují.

A zvláštní kategorie jsou vztahy. Vsadím se, že pokud tohle vůbec někdo čte, řekl si, že je to špatný text, že tenhle skok v něm je velký. Jenže ... ono to všechno souvisí. Nemáme jedno uvažování pro to a druhé pro ono. Máme jen jediný způsob uvažování ...
Časem jsem změnil přístup v mnoha věcech. Kdysi jsem žárlil. Jak já jsem žárlil! Oba jsme žárlili. Pro úsměvy jiným, pro pohledy jiným, pro pohledy jiných, no, pravda, taky pro zálety se žárlilo, ale tak jako tak to vlastně nemělo moc smysl. A taky jsem ještě nedávno věřil, že když dostanu facku, mám právo jí vrátit. Což o to, pořád si myslím, že to právo i mám, ale ... ničemu to nepomůže. Vlastně ve chvíli, kdy se dva začnou bít, je na čase odejít pryč. A mít z té neoplacené facky aspoň trochu "vítězoslavný" pocit, že jsem neklesl tak hluboko, když už jsem na dně.
S čím to souvisí? Pár nápadů bych měl, ale počkám si na vaše. Zkrátka, se vším.

No, a včil co?

To be continued ... v roce 2016 ... a zatím si dopiju to víno ;-)

č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ě.