úterý 29. září 2009

Mocking predecessors in Java

Mocking is a practice which allow to test some class without testing its dependencies - the dependencies are mocked. Different mocking libraries are able to mock interface or class quite easy, but there is no library to mock the predecessor of tested class. It's reasonable, because the Java doesn't allow to do something what I'm going to show you by general way.

To show the principle, assume we have following classes (note the example is artificial - not real):

AbstractBuilder and TransactionBuilder

 1:public abstract class AbstractBuilder {
2: protected Transaction createSimpleFromToTransaction(String from, String to) {
3: // something complex here
4: }
5:}
6:
7:public class TransactionBuilder extends AbstractBuilder {
8: // ... constructor
9: public Transaction buildTransaction() {
10: // i.e. some from and to computing
11: return createSimpleFromToTransaction(from, to);
12: }
13:
14:}



There is common method createSimpleFromToTransaction() implemented in AbstractBuilder. The implementation is quite complex and has a lot of dependencies. Let's assume this method is already well tested using huge mocking in another test. Now we would like to test TransactionBuilder.buildTransaction(), we know this method should use createSimpleFromToTransaction(), so to test it properly by regular way, we need to do that huge mocking (used in predecessor test) again - but in fact it is redundant, because the createSimpleFromToTransaction() is already tested.

That's the case we can do something like "mocking the predecessor". Let's see the code:

 1:@Test
2:public void testBuild() {
3: final Transaction transaction = new Transaction();
4: TransactionBuilder underTest = new TransactionBuilder("ME", "THEM") {
5:
6: @Override
7: public Transaction createSimpleFromToTransaction(String from, String to) {
8: assertEquals("ME", from);
9: assertEquals("THEM", from);
10: return transaction;
11: }
12: };
13:
14: assertSame(transaction, underTest.buildTransaction());
15:}



As you can see, we are extending the tested class and overriding method of its predecessor. This allows us to avoid redundant testing of common method (already tested). In addition we can place some asserts into "mocked" method i.e. to check the parameters set.

pondělí 28. září 2009

Umyté ruce za milión

Rád bych doplnil je krátkou, ale dle mého názoru podstatnou myšlenku ke kauze "zákon za milion". Nejzajímavější (a nejsmutnější) na celé kauze totiž je, jak si strany nad svýmy špatnými straníky hned a rychle umyly ruce.

Zkusme se zamyslet a snad trochu vcítit do kůže pana Šustra neba pana Dolejše. Pokud by běžnou praxí ve straně bylo úplatky odmítat a hříšníky, jež na ně kývnou trestat, opravdu bychom riskovali vlivné postavení, teplé místečko a prestiž ve straně za pouhý milión? Obávám se že běžná praxe bude naopak zcela odlišná a smutnější - totiž že brát úplatky je zcela běžné a že do konce existují lidé, kteří tímto způsobem získavají prestiž a vliv ve své straně. Toto je samozřejmě spekulace. Ta se však nabízí také díky rychlosti a způsobu jakým si strany nad hříšníky rychle umyly ruce (ale pozor, teprve v okamžiku kdy se to provalilo).

Myslím, že se to mělo nechat zajít dál a potopit nejen pár jedinců, ale celé strany. Přinést důkaz, že to roste až nahoru. A kdyby nerostlo? Tak tím líp!!

sobota 26. září 2009

(Ne)splněná očekávání (aneb jak být ve všem skvělý)

Nedávno mě zaujal článek o tom jak dlouho trvá panu Bémovi než odpoví. Docela mi to připomnělo jednu starou známou poučku o očekáváních a jejich naplnění.

Nevytvářejte očekávání, která nesplníte. Raději slevte z očekávání a pak můžete příjemně překvapit, když očekávání předčíte.

Konkrétně v daném článku Londýn na rovinu řekl, že odpověď potrvá 20 dní - tím vytvořil nějaké očekávání. Redaktor asi nebyl nadšen, že bude čekat 20 dní. Co se ale nestalo - odpověď přišla mnohem dříve, tím byla očekávání překonána, redaktor příjemně překvapen a tudíž spokojen. Naproti tomu Praha opakovaně vytvářela nesplnitelná očekávání, že odpověď bude za týden. Redaktor byl opakovaně zklamáván a ve výsledku zřejmě i docela naštvaný.

Bohužel je třeba konstatovat, že v česku se s touhletou chybou setkáváme každý několikrát denně - dělá to vaše rodina, vaši známí, podřízení, spolupracovníci, politici, stát. Zřejmě tenhle základní princip úspěšného chování ještě nikdy nikdo neslyšel.

Zkuste se podle něj chovat a předávejte ho dál a možná jednou za mnoho let na tom budem jako v Londýně.

PS: není to vůbec jednoduché...

středa 8. července 2009

Kde že je ten Ujguristán?

Za posledních pár dní můžeme v médiích sledovat zprávy o nepokojích v Ujgurské autonomní oblasti. Trochu mi to připomíná jednu písničku od Slávka Janouška

... že prej někde v tom ani to neumím říct došlo ke krizi,
že prej tam válčej jak saně...

Asi nejsem jediný pro koho je existence nějaké Ujgurské oblasti kdesi na západě Číny celkem překvápko (nebo jsem nedával pozor v zeměpise na základce). Protože žádný z našich sdělovacích prostředků si nedal víc námahy než je nutné k přejímání zpráv od mezinárodních tiskových agentur, dal jsem si tu práci já a pokusil jsem se o "Ujguristánu" něco dozvědět.

Jedná se tedy o "region" na severozápadě Číny, na jihu sousedí s Tibetem (další utlačovanou oblastí) na severu s Mongolskem a Kazachstánem.


Zvětšit mapu

Region opravdu má být v uvozovkách - rozloha je cca 1,6mil km2 (pro srovnání ČR má rozlohu cca 79 000 km2). Původní obyvatelé jsou Ujguři, což jsou vlastně Turci - kulturou jazykem i náboženstvím jsou blízcí Tyrkům z Malé Asie, ale také Kazachům, Uzbekům, Turkmenům, Kyrgyzům či Sibiřanům. Většinu historie tento národ žil pod něčí nadvládou, ale byly i doby kdy ovládal většinu Střední Asie.

Za posledních 50 let Čína do této oblasti vyexportovala cca 7 miliónů čínských "osadníků" - tedy jeden Číňan na jednoho Ujgura (téměř). Jedná se tedy o podobnou strategii jako v Tibetu - ovládnout území i národ, tak že lidem vezmem práci a dáme ji Číňanům, komu se to nelíbí půjde sedět nebo do exilu. (Nepřípomíná vám to trochu něco). Před světem se Čína bude tvářit, že do těchto oblastí přináší prosperitu.

Přemýšlím kolik je ještě v Číně autonomních oblastí a co by se stalo kdyby se jednou domluvili a společně Číňany vykopali? To se ale nestane - ti lidé ani nehovoří podobnými jazyky, jsou od sebe vzdáleni tisíce kilometrů a Čína už je stihla připravit o většinu obranných prostředků. Západ s tím nic neudělá, tak jako nic neudělá s Tibetem. Jediné co těmto lidem zbývá je terorismus nebo tiché odevzdání...

No na to že jsem se původně chtěl jen zmínit kde že ten Ujguristán je, jsem se docela rozepsal. Taky jsem se toho dozvěděl. Mimochodem věděli jste, že mezi Turkické jazyky (Turečtina, Ujgurština, Kazachština...) se taky někdy řadí Korejština a Japonština?

Zdroje:

úterý 7. července 2009

Mám pamět se sekvenčním přístupem

Takhle se za volantem svého vozu prokousávám půlnoční mlhou na cestě ze Stálkova do Brna, kterou "znám jak svý boty". Většina mozku i zbytku člověka je plně zaměstnána vyhlížením dalšího patníku doufajíce že silničáři nespletli "levou a pravou barvu". Kousek výpočetní kapacity ještě zbývá také na jakýsi retrofilm z posledních dní - a zde mi utkví jeden postřeh: Mám pamět se sekvenční přístupem. Tedy jak kdyby se někde v hluboko v mozku převíjela zoufalá magnetická páska tam a zpět dokud nenajde začátek příslušné informace a potom už sype celkem spolehlivě proud informací na výstup. Mám pro tuto teorii hned dvě podpůrná pozorvání:
  • Zpívání a hraní na kytaru - většina lidí kolem mne se diví, že znám tolik písniček z paměti. Funguje to ale tak, že ukládám jen index začátků písní - první verš a akordové schéma či tóninu. Občas se tedy stane že vylovím něco co jsem skutečně skoro deset let nehrál a sám se divím, kde se to v tom mozku ještě bere. Ale nechtějte po mně, abych začal zprostředka! Mohlo by se stát že záznam vůbec nebude nalezen.
  • Řízení - to jsem si právě nejvíc uvědomil v té mlze (viditelnost po většinu cesty cca 10m). Nechápu jak, ale z pásky se odvíjela jedna zatáčka za druhou a tak i v případě kde patníky chyběly jsem tak nějak "věděl co mě čeká". Podobně se mi občas stane, že projedu Brnem "na autopilota" z jednoho konce na druhý, aniž bych si dokázal zpětně vybavit, co jsem po cestě potkal, kde byla červená apod.
Řeknu vám, že někdy mě to dost děsí - co, když se páska před zatáčkou přetrhne nebo zašmodrchá?

pondělí 22. června 2009

Může skaut pít?

Celkem dlouho už přemítám o tom zda vůbec tento článek psát a když tak jak ho vlastně pojmout. Nakonec jsem se rozhodl to zkusit - v nejhorším mě někdo bude kamenovat.

Pokusím se tu spojit zdánlivě nespojitelné a vymezit tak jasný postoj k problematice užívání alkoholu mezi skauty.

Mezinárodním heslem skautského hnutí je "Vytvářet lepší svět" - toto heslo je tzv. všeobsažné, tedy neříká nic o tom co to znamená lepší svět. Tedy ani nic o tom, zda by svět bez alkoholu byl lepší. Dovolím si tedy za účelem zjištění jaký by svět byl bez alkoholu menší odbočku:
  • Nebylo by víno, pivo, rum, vodka a další lihoviny, ale také by nebyly rozpouštědla, desinfekce, některá paliva a další.
  • Lidem by chyběla nějaká povolená a dostupná omamná látka, tak by si našli jinou (třeba by začali víc hulit).
  • Abstinenti by neexistovali (nebylo by od čeho abstinovat).
  • Stát by měl výrazně nižší příjem.
Z tohoto krátkého náčrtu začíná být zřejmé, že svět bez alkoholu by pravděpodobně moc lepší nebyl - byl by spíše jiný - některé možnosti by zmizely některé by se objevily. Možná je lepší klást si otázku: Byl by svět lepší bez opíjení? Jak by to asi tak vypadalo?
  • Nebylo by třeba zakazovat výrobu věcí zložených na ethanolu - jako jsou rozpouštědla, desinfekce apod.
  • Nebyli by závislí na alkoholu (bylo by jich méně)
  • Ubylo by nehod v opilosti a výtržností.
  • Stát by měl poněkud nižší příjem.
Dalo by se samozřejmě pokračovat. Je však nasnadě, že pití alkoholu není špatné, špatné je opíjení se.

Samozřejmě - zde každý abstinent namítne, že když se nebude pít vůbec tak se ani nebude opíjet - a má pravdu. Myslím ale, že historie už lidem ukázala co se stane, když se alkohol zakáže - prohibice vždy vedla k nárustu černého trhu, větší kriminalitě a menší veřejné kontrole "nad opíjením se". To jsou jasné signály - tudy ne.

Jako skauti chceme vytvářet lepší svět a abych citoval Fleka: máme k tomu ty nejlepší nástroje jaké lze mít - totiž lidi. Můžeme vést lidi k tomu aby vedli lidi k tomu aby vedli lidi k vytváření lepšího světa.

Chceme-li tedy vytvářet lepší svět bez "opíjení se", máme v zásadě dvě varianty: zakázat alkohol ve skautu nebo naučit skauty pít a neopíjet se. Co myslíte, že je lepší? Já si nemůžu pomoct, ale vždy budu volit druhou variantu.

Jsem realista - když zakážu skautům pít, budou pít jinde, nebo tajně a v důsledku přestanou být skauty, protože když porušili skautství s alkoholem, tak je brzy poruší i v jiných bodech. Ano jistě, zůstane malá skupinka abstinentů, možná někteří z nich budou abstinovat aby zůstali skauty, ale já jsem selhal ve vytváření lepšího světa, protože místo abych budoval lepší svět, buduji izolovaný ostrov lepších lidí.

Pokud budu pití skautům tolerovat, mám slušnou šanci, že je naučím pít a ne se opíjet. Zvýším pravděpodobnost že zůstanou skauty, že naučí neopíjet se další lidi a takto, že budu opravdu pracovat na vytváření lepšího světa.

Jaká je vaše volba?

neděle 21. června 2009

Google dělá vlny

Google si na nás chystá revoluci v elektronické komunikaci. Mrkněte na http://wave.google.com a posuďte sami. Video záznam je jakýsi "developer preview", je tedy otázkou, kdy to bude hotovo.
Vlna se zdá být malým zázrakem - vyřeší všechny vaše problémy s mailem, instant messagingem, vytvářením dokumentů, publikováním a sdílením blogů. A tím to nekonečí, každý může přidávat integraci dalších komunikačních kanálů - za chvíli tak jistě přijde facebook a další...
Aby toho nebylo málo google neplánuje dělat vlny jen jako svoji službu, hodlá specifikovat protokol, který si můžete implementovat - vlny na svém serveru pak bude moci mít doslova každý (více zde). Ambice je zřejmá - způsobit elektronickou revoluci. Jsem zvědav jak se ten odvážný kousek bude vyvíjet.
Na závěr hypotetická otázka - nestává se google pomalu naším velkým bratrem, zatímco my mu za to ještě tleskáme?

sobota 25. dubna 2009

Návštěva v archivu

Nedávno jsem měl možnost nahlédnout do pradávné historie našeho skautského střediska ("DVOJKA" Brno) prostřednictvím archivu u Rejpala. Odnesl jsem si spoustu dojmů tak vám ty nejzajímavěší pokusím zprostředkovat:

  • Archiv je mocný - překvapilo mě kolik kronik, filmů pásků a fotek takový archiv skrývá a to nutno říct, že chybí záznamy 1918-1924 a pak prakticky celý 90tý léta a 21. století. jedná se o ohromné množství informací z dnešního pohledu majících již skutečně pouze histrocikou hodnotu.
  • Problémy jsou stále stejné - před 20ti 30ti 50ti i 90ti léty řešili naši skautští předchůdci prakticky stejné problémy jako my dnes: nízká docházka, údržba materiálu, nízká motivace vedoucích, nedostatek rádců. Tohle se dá vyložit bu'd negativně ve smysl že se pořád plácáme ve stejném bahně. A nebo pozitivně - z perspektivy času jsou tyto potíže vlastně malicherné a přesto všechno středisko i skaustká myšlenka žije dál.
  • Generace a rodokmeny - několik zajímavostí: současná pamětnická generace nemá s prapůvodní dvojkou téměř nic společného neb v 50 tých krušných letech došlo k přetrhání vazeb. Naopak od let šedesátých pojí dvojku přímo rodové linie mnoha členů jejichž rodiče, prarodiče a možná i praprarodiče byli ve dvojce.
  • Umělecká a lidská hodnota - ze starých kronik na vás nutně dýchne duch nostalgie, kousek z dobrodružství která prožívali skauti před 90ti léty. Mnohé kroniky jsou také přímo uměleckými díly. Přitom pohledu mě ale bylo i smutno při pomyšlení, že po nás zbyde jen pár ušmudlaných polopoztrácených webových stránek.
  • Humor - ať už byly časy ve dvojce těžké i lehké to co dvojku nikdy nepřešlo byl humor a satira. Nechci strašit, ale mám dojem, že nás už trochu opouští.
No, dalo by se toho napsat ještě hodně... Každopádně vám nedokážu nahradit opravdový zážitek z návštěvy.

Archivům zdar.

čtvrtek 23. dubna 2009

Algoritmus konstrukce bábovky

Tak jsem se naučil péct bábovku. Tedy lépe řečeno naučil jsem se implementovat algoritmus (recept) na pečení bábovky do naší kuchyně svýma rukama. Zatím jsem upekl 4 kusy, což je statisticky zanedbatelné množství, přesto to na mne zanechalo následky o které se chci podělit.

  1. Osvědčený algoritmus - lze nalézt za použití Google po zadání "bábovka voní", nebo rychleji také tady. Již jsem vyzkoušel několik modifikací z různými výsledky, které byly zatím vždy jedlé. Problém algoritmu (který se na první pohled zdá korektní a úplný - tedy pro korektní vstup dává korektní výsledek a vždy zastaví) dle mého spočívá v nepřesné specifikaci vstupních podmínek a tak se při každé implementaci člověk setká s nějakým překvapením.
  2. První problém - vymazávání - možná se zdá že začínám od konce, bohužel tato kritická fáze se provádí úplně na začátku a přitom je nejdůležitější pro poslední fázi - tedy výklop hotové bábovky z formy. Moje úspěšnost je zatím 50% (ale předpokládám že se bude zvyšovat). První pokus byl použit olej a mouka - sice po hodinové práci, ale bábovka vyklopena vcelku. Druhý pokus taktéž olej a mouka - bábovka vyyklopena na tisíc kousků (pojato podezření že byla málo opečená - neměla správnou kůrku). Třetí pokus s olejem a kokosem - opět tragédie. Čtvrtý pokus máslo a strouhanka - bábovka po vytažení z trouby a otočení sama vypadla z formy.
  3. Problém teploty - naše již poněkud vysloužilá trouba nemá termostat - respektive má, ale jednou přestal fungovat úplně tak jsme ho spravili, ale od té doby umí jen jednu teplotu (a nevíme kterou) - takže kýžených 180°C je v naší kuchyni neimplementovatelných. Ale zjistil jsem že je lépe troubu moc nepředehřívat, protože když se bábovka peče moc prudce, moc rychle vyskočí a je pak popraskaná.
  4. Problém času - zdá se že není 40minut jako 40minut - někdy je bábovka po této době ještě trochu syrová a jindy už je docela opálená - toto si nedokážu vysvětlit jinak než že "jedna teplota termostatu" je po každé jiná teplota. Je tedy ještě možné že to souvisí s problémem velikosti hrnku.
  5. Problém velikosti hrnku - zde vznikají rozhodně největší nepřesnosti. Algoritmus totiž nespecifikuje velikost hrnku v poměru k objemu vajec, což má zřejmý dopad na konzistenci těsta, délku pečení (a pravděpodobně i na případné úspěšné vyklopení).
Krom těchto formulovatelných potíží se dá při konstrukci bábovky zažít spoustu pěkných věcí. Třeba člověk zjistí že kakao je tak jemné, že když se rozprskne po kuchyni, tak ho pak objevujete v různých částech bytu ještě týden (vlastně jsem ještě nepřišel na to jak ho použít a přitom nerozprsknout).

Přeji všem úspěšný výklop ;-)

pondělí 13. dubna 2009

Upgrade Kubuntu 8.4 Hardy na 8.10 Interpid

Po půl roce váhání jsem se rozhodla pro upgrade. Říkala jsem si, že už je to dost dlouhá doba na to, aby vychytali podstatné chyby a mimo to už mne příliš vytáčela neustále padající střižna videa v 8.4.
Upgrade šel celkem snadno, během normálního provozu si to postahovalo všecny potřebné balíčky, nainstalovalo, odstranilo staré a po restartu nastal čas zkoumání škod :-) Na první pohled žádné (tedy co jsem překonala šok z KDE 4) :-) Až se tomu nechtělo věřit a střižna Kdenlive začala pořádně fungovat a už nepadala. První zádrhel přišel při pokusu spustit VMware... Ani náznak fungování. Vzpomněla jsem si na Pírkovu informaci, že VMware už delší dobu nejede s novým jádrem (já to předtím obcházela pouštěním starého :-) Tak nezbylo než nainstalovat VirtualBox a pokusit se přemigrovat win mezi nima. Docela se to dařilo, XP běžely i s původními daty, ale naprosto nefungovalo spojení win s linuxem či okolním světem. Po chvíli hraní a pokusů (kdy se XP tvářili že síťová karta neexistuje) jsme prostě nainstalovali win do VirtualBoxu úplně načisto a bylo to. Prý se to dá vyřešit tak že se nainstalují doplňky a pak se to nějak přes ně udělá. No od té doby mi to funguje bez problému.
Horší to bylo, když jsem opustila domácí síť (s pevnou IP) a přesunula si noťas do práce (taktéž s pevnou IP)... KNetwork manager nepřepínal profily sítě. Podle různých návodů jsem zkoušela nastavit ručně IP nebo auto eth0 v /etc/network, /interfaces, nastavovat ručně bránu, DNS, dělat změny do /etc/resolv.conf, restarty sítě a všeho možného. Po takové hodince hraní v konzoli začala síť fungovat. Jenže tohle mne čekalo při každém přechodu mezi dvěma místy s pevnou IP, vždycky zabralo něco jiného a tak po 4 dnech už nezabíralo nic, nastavilo si to IP síťové karty a odmítalo jí změnit na cokoliv jiného. Ze začátku připojení k wifi přes KNetwork manager fungovalo dobře, ale tak nějak samovolně přestalo fungovat. Ve světlém okamžiku funkčnosti připojení jsem nainstalovala networ-manager-gnome a uvidíme...
Zbytek systému vypadá v pořádku, ale nemít vedle sebe informatika tak jsem v pytli a nepřečtu si ani email :-)

čtvrtek 26. března 2009

HSSF cellIterator is too clever

I caught myself with this too clever cellIterator in HSSF POI. Normally you expect that cellIterator will iterate over all the cells in row. But unfortunately it is trying to be really smart and it doesn't iterate over cells which are null.
I.e. if you have row like



first
third


The cellIterator gives you first and third cell but not the second cell which is null

Then the following two snippets gives you different behaviour :-(.


50:    StringBuffer buffer = new StringBuffer();
51: for (Iterator<HSSFCell> cit = row.cellIterator(); cit.hasNext();) {
52: String val = extractCellValue(cit.next());
53: val = val.replaceAll("\\n", " ");
54: buffer.append(val);
55: buffer.append(separator);
56: }



50:        StringBuffer buffer = new StringBuffer();
51: for (short i = 0; i < alignColumns - 1; i++) {
52: HSSFCell cell = row.getCell(i);
53: if (cell != null) {
54: String val = extractCellValue(cell);
55: val = val.replaceAll("\\n", " ");
56: buffer.append(val);
57: }
58: buffer.append(separator);
59: }



Summary: use the second one if you're data structure matters on cell order (including those nulls)

pátek 30. ledna 2009

Groovy XML past / Groovy XML trap

Vcelku oblíbený jazyk Groovy připravil svým uživatelům pěknou pastičku na kterou zdá se ještě moc lidí nepřišlo :-(. Tímto článkem se snažím předejít tomu aby se chytili další programátoři. Jelikož jsem k problému našel jen jednu další zmínku, zkusím tento článek psát dvojjazyčně.
Quite popular language Groovy has prepared nice trap to its users. This trap is not yet well known :-(. I would like to prevent more programmers to be trapped - that's why I'm posting this. Because I've found only one other remark about the problem, I will try my best to describe it multilingual.

Ona zákeřná past se skrývá v použití třídy XmlNodePrinter, která sice vypisuje XML pěkně, zato však porušuje pravidla XML specifikace. Totiž v XML jsou tzv. bílá místa v textových uzlech podstatná, ale XmlNodePrinter vám do každého textového uzlu přidá navíc spoustu mezer a dva nové řádky.
The greasy trap hides in use of XmlNodePrinter, which is printing pretty XML, but violates XML specification. The whitespaces are considered significant and meaningfull in text nodes. Unfortunately XmlNodePrinter adds two new lines and lot of spaces into each text node.

To cite Extensible Markup Language (XML) 1.0 (Fifth Edition):
"In editing XML documents, it is often convenient to use "white space"
(spaces, tabs, and blank lines) to set apart the markup for greater
readability. Such white space is typically not intended for inclusion in the delivered version of the document. On the other hand, "significant" white space that should be preserved in the delivered version is common, for example in poetry and source code."

S tímto nástrojem tedy nelze vytvořit např. takovéto XML:
<myname>Jiří Mikulášek</myname>
, při vypsání XmlNodePrinterem z toho máte
<myname>
Jiří Mikulášek
</myname>

Nemám pocit že bych se jmenoval "nový řádek""tabelátor"Jiří Mikulášek"nový řádek". Nejhorší na tom je, že jakmile začnete pracovat s XML pomocí XmlParseru jste v pasti, protože nemáte jinou možnost jak serializovat svoje XML korektně. Jedinou možností je celý kód přepsat například pomocí DOM.

So with such a tool is not possible to create XML like this:
<myname>Jiří Mikulášek</myname>
, because after printing with XmlNodePrinter it appears to be:
<myname>
Jiří Mikulášek
</myname>
I don't think that my name is "new line""tab"Jiří Mikulášek"new line". The worst thing on it is that once you have started to use XmlParser you are trapped, because there is no other possibility to serialize your XML correctly. The only possibility is to rewrite the whole code e. g. with DOM.

Další místo, kde se problém rozebírá je tato diskuze. Někdo z vývojářů Groovy tam slíbil, že se to snad časem vyřeší - tak doufejme.
Next place mentioning the problem is this discussion. Somebody from Groovy (I think) promised, that it will be solved in time - so we can hope.