Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux

čtvrtek 26. června 2008

Jak jsem fotil bouři

Dneska v noci byla nádherná bouřka. Mlátilo to do kopců ostošest. Když jsem tu nádheru popisoval svojí chrnící manželce, otevřela jedno ospalé oko a pronesla: "Tak si to vyfoť a nech mě spát." Báječný nápad!

Na vánoce jsem si nechal nadělit digitální zrcadlovku Nikon D40. Chvíli trvalo, než jsem ji při světle blesků našel. To v9te, byla skoro půlnoc a střešní okna zas tak moc svěla nedávají. Vyklonil jsem se z okna a zmáčkl spoušť. Otevřel se blesk a Nikonka začala pobleskávat a doostřovat a doostřovat... Vypněte si blesk a automat, volové! (parafráze na u nás doma již klasickou větu vojáka "Nabijte si, volove" z divadelního představení S Pydlou v zádech, v kteréžto roli na prnech divadla Semafor exceloval Pepa Dvořák). Takže znovu. Otevřít střešní okno, zmáčknout spoušť... a nic. V hledáčku navíc nebylo nic vidět. Prohlížím si foťák ze všech stran, když se najednou ozvala závěrka a na displayi foťáku se objevil chaos. Aha! Takže při nulovém osvětlení si Nikonka nastavila závěrku na 5vteřin nebo kolik. Chvíli jsem zkoušel udržet foťák v ruce, ale nešlo to. Tak jsem jako provizorní stativ použil okenní rám. Fotky sice pořád "nic moc", ale tato se myslím povedla:

No řekněte, není to jak záře nad Mordorem?


Posted by Picasa

středa 25. června 2008

Xenofobie obrácená naruby

Přednedávnem jsem psal něco málo o Xenofobii a Imigrantech v Evropské Unii. Tento článek měl k legraci daleko. Tak teď to trošku dorovnám.

Dnes jsem na Radiožurnálu slyšel velice zajímavou zprávu: V Paříži skupina černochů a arabů zbila židovského mladíka qůli jeho náboženskému přesvědčení a tak Izraelský premiér vyzval francouzské židy k emigraci do Izraele! No řeknu Vám, za břicho jsem se popadal. Ještě štěstí, že jsem zrovna po jedné delší rovince ve Zlíně, takže můj výbuch smíchu přežil náš Scenic bez úhony.

úterý 24. června 2008

Jak jsem si zastávkoval

Tak jsem se dnes připojil ke generální stávce proti reformám. Můj šéf mne zrovna vezl autem z jednání z Brna do Uherského Hradiště. Když jsme o půl druhé přijeli, zašel jsem si na oběd. Do práce jsem se vrátil až po druhé hodině :-)

Ale teď vážně. To, že Českou Republiku čeká bolestné období změn, je jasné. To, že nemůžete rozdat víc, než co máte, je také jasné. A že na dluh věčně rozdávat nelze, je také jasné. Má to ale jeden podstatný háček. Změny nelze dělat a) nesmyslně a b) "na silu".

Pár příkladů:
a) proč se platí 30Kč Cikrtného za každou položku na receptu? Každý si pak nechá předepsat rovnou tři balení, co kdyby, a máme větší spotřebu léků než dřív. Úplně by stačilo 10Kč za každé balení. Ušetřilo by se víc.
b) chtít po miminu krmenému mateřským mlékem 60Kč za pobyt v nemocnici, který se měl přece promítnout do zlepšené stravy...
c) udělat ze zdravotnických zařízení akciovky znamená, že takové zařízení zde bude jakožto podnikatelský subjekt s primárním cílem generovat zisk. Viz můj předchozí příspěvek o zdravotnictví.
d) řízená léčba je pitomost a už to v USA prokázali. Tak proč se to tak líbí Julínkovi?
e) minimálně 40% profesí nelze v 65 letech vykonávat. Kde budou ti brzodůchodci dělat? Jenom nám lidem z IT je to jedno, životnost programátora je prý pět let, takže nás rozdíl mezi 60 a 65 lety vůbec trápit nemusí.
f) že životní úroveň při reformách klesne, je přece jasné. Jen nechápu, že nikdo nemá sílu to říct otevřeně.
g) také nechápu, proč se celá reforma točí pouze kolem totální privatizace a zdražení všeho možného (popřípadě zavedení plateb navíc či snížení dotací). Těch světlých výjimek jako proplácení části nadstandardu do výše úhrad za standardní péči je po čertech málo. Snížení plateb pro nás (LOL), vysokopříjmovou skupinu, mne sice hřeje, ale ten rozdíl je v mém případě tak malý, že nestojí ani za řeč. Jó gdybych kasíroval melouny...

Bohužel nevidím světlo na konci tunelu. Mha předemnou, mha za mnou.

PS: Ono dost o reformě vypovídá i jedno prohlášení pana ministra Nečase. Na serveru Novinky.cz jsem našel:
Podle ministra práce a sociálních věcí Petra Nečase (ODS) není možné možné, že by stávkovalo skutečně 900 tisíc lidí. Odhadl počet stávkujících na na polovinu uváděného počtu, tedy asi na 300 tisíc, uvedl pro ČT.

Tomu se říká matematika, co?

pátek 20. června 2008

Proč je Ant generátorem špaget

Dagi napsal zajímavý článek o jeho zkušenostech z programováni v Antovi. Ano, XML nebylo nikdy určeno k programování a je jedno, že se hojně používá. A to není jenom Ant, dokonce je i XSH. I ono krásné deklarativní XSLT je zprocedurovatelné a pak se v tom prase vyznej :-(

Co se ale týká mravence, tak tam je historie naprosto jasná. Na Apachi hledali nástroj obdobné síly jako GNU Make, úspěšně používaný v jejich primárním projektu - k buildování web serveru Apache. Hlavním kriteriem takového nástroje ale byla implementace v Javě. A takový nebyl, tak se rozhodli si jej udělat sami. I řekli si, že nástroj nebude umět nic šíleného a tak že k formátu mohou přistupovat jako k deklarativní konfiguraci a proto zvolili XML formát. Jenomže síla Make není jenom v jeho deklarativnosti, ale hlavně v síle unixového shellu. A proto se začal Ant a jeho build.xml rozlézat do příšerných obludností. Přibyly podmínky, cykly a další šílené konstrukty, atributové deklarace jsou nahrazovány flexibilnějšími XML strukturami,... A tak se z prosté jednoduché konfigurace stal další Turingův stroj a jako takový začal být používán. A protože je ve velkých projektech neustálá potřeba rozvíjet možnosti buildovacího systému, build.xml bobtná a bobtná... už jsem viděl i megabytový.

středa 18. června 2008

Metodika návrhu SOA aneb kdy začít s WSDL a kdy s kódem

Přečetl jsem si Vytvářet nejdříve WSDL nebo Java rozhraní od Petra Jůzy a rozhodl jsem se, že také připojím pár svých zkušeností.

Na otázku, zda začít nejdřív s WSDL nebo nejdřív implementovat a potom generovat WSDL neexistuje jednoznačná odpověď. A navíc je třeba podle Cimrmana vzít v potaz i roli kohouta, ale nepředbíhejme :-)

Bavme se tedy v prvé řadě o WebServise, u které tato otázka má smysl, tedy o RPC.

Nedá se říct, že by varianty měly své pro a proti. Prostě jsou každá na něco jiného.

Hodláte-li napsat WebServisu na zelené louce, máte na začátku dva výchozí předpoklady: a)bude to WebServisa někomu zveřejněná a která b)bude něco dělat. Pravděpodobně začnete s nějakou analýzou problému. Z analýzy vypadne struktura dat, která by měla kolovat tam a zase zpátky. Struktura se lépe popíše XML schematem než pomocí tříd. Nad ukázkovým XMLčkem se pak lépe přemýšlí jiným lidem, je to názornější. Proto je tedy v takovém případě nejlepší začít s XML schematem, přidat operace a máte WSDL. Z něj pak generovat kód.

Máte-li už napsaný kus kódu a chcete lokální volání roztrhnout SOAPem, není jednodušší cesty než označit nějakou fasádu jako WebServisu a nechat k ní vygenerovat WSDL. Nejčastější a nejhezčí je ale vypublikovat ji pomocí Endpoint.publish().

Já ale tvrdím, že tato otázka je ve své podstatě nesmyslná. Kde je jádro pudla, nebo lépe řečeno kohouta? V pohledu na věc.

Ať už jde o Integrační, B2B, Intranetový Infrastrukturní či Separační scénář, vždy je na počátku všeho zadání. Jak už nás učili na základní škole, zadání problému se klasicky popisuje trojicí množina vstupních hodnot, množina výstupních hodnot a přechodová funkce, popřípadě jejich množina. A to se dá říct jak o nově vznikající aplikaci či WebServise, také o fasádě nad legacy systémem. Ač se to nezdá, totéž platí i při roztrhávání, protože se může ukázat, že bude daleko čistější vygenerovat novou fasádu. V případě složitějšího problému komunikace mezi více participanty pak také víte (nebo aspoň tušíte), co si ti dva tam budou posílat. Každý z participantů má přece svoji roli a k roli patří zase vstupní i výstupní data a popis, co má dělat.

Proto je nejjednodušším postupem rozdělit si vstupy a výstupy na samostatné celky (= zprávy), ty ozobákovat, pojmenovat si jednotlivé funkce (=operace) a spárovat zprávy k operacím. Výsledkem je pak kostra WSDL. Pro lenochy je pak možné vygenerovat kód z oné kostry, vypublikovat WebServisu čistě jako třídu bez WSDL a do kostry doplnit zbývající části WSDL, které za nás vygeneroval publisher.

Tento přístup má hned několik kladů:
* tvůrce se musí nejdříve zamyslet nad strukturou dat, což nebývá tak úplně zvykem
* to zabrání nutnosti neustále měnit rozhraní (a tím i WSDL) při změně datového modelu
* tvůrce uvažuje v intencích dokumentů a operací nad nimi, což mu umožní přehoupnout se přes onen RPC XORBA zlozvyk
* WSDL je čitelné a "hezké" a interoperabilní (pokud je navrženo jako document-wrapped (.NET nic jiného neumí))
* celý návrh systému je pak mnohem lépe udržovatelný, modularizovatelný, rozšiřitelný, znovupoužitelný, lépe odladitelný

na závěr se s vámi podělím o jednu velice podstatnou metodickou pomůcku. Z jednoho neúspěšného projektu Systinetu jsem si odnesl následující systém návrhu SOA aplikací:
1)Vyjmenuj si všechny role participantů, kteří se na aplikaci (procesu) podílejí.
2)Namaluj si síťový graf procesu podle jednotlivých rolí.
3)Rozděl proces na ucelené podprocesy.
4)Vytvoř XML dle struktury procesů, a to tak, že root elementem bude název procesu a v něm na stejné úrovni jako elementy názvy podprocesů. Při vzájemném zanoření podprocesů zanoř element podřízeného podprocesu do elementu nadřazeného.
5)Ke každému participantovi se pokus navrhnout kostru struktury dat (XML, stačí root element a jednu úroveň elementů v něm), které mohou od nich ostatní požadovat.
6)Tato XMLčka sluč do jednoho dokumentu, a to tak, že je podle pořadí v síťovém grafu poskládáš pod sebe do elementu procesu či podprocesu, ve kterém se role vyskytuje.
7)Ke každé roli označ data, která potřebuje pro svoji práci.
8)Z těchto dat poskládej ke každé roli zprávu, kterou bude participant akceptovat na svém vstupu.
9)Data, která participant produkuje, označ jako odchozí zprávu.
10)Dopodrobna rozpracuj XML schema jednotlivých zpráv

Každá role pak odpovídá jedné operaci WebServisy. Pokud hraje jeden participant více rolí, má jeho WSDL více operací. Každý proces i podproces má ještě dvě fáze, které je také nutno zmínit: iniciační (musí vyletět první zpráva) a ukončovací (poslední zpráva musí někam doputovat).

A co se týká implementace celého systému, máme minimálně principiálně čtyři možnosti.

První a nejlepší možností by bylo použít principy z onoho neúspěšného (když vymyslíte něco, co předběhne dobu o deset let, a stane se to díky tomu nezproduktovatelné, naštve to) produktu. V dubnu 2010 mi vyprší klauzule o mlčenlivosti, tak si počkejte na podrobnosti :-) Nemohu Vás bohužel ani odkázat na nějaký veřejný zdroj, protože bylo všechno staženo včetně blogspotů :-(

Další možností je pouštět data do messagingového systému, kde budou zprávy z jedné instance procesu korelovány. Ale to jsme u TIBCO Randezvous a to Vám fakt nemohu doporučit ;-) .

Třetí možností je dát do každé zprávy tranzitivní obal všech zpráv požadovaných mými následovníky. Tento Message Decorator pattern se používá v ESB, má jak své výhody, tak nevýhody. Některé věci v něm nejde bez Cimrmanova úkroku stranou dělat vůbec.

Čtvrtá možnost je ta nejčastější. Každý proces či subproces je implementován jednou fasádní WebServisou. Pro jednoduché věci je BPEL, složitější logiku je lépe kódovat. Iniciační fázi odpovídá příjem zprávy a finalizační pak odeslání výstupní zprávy. Pro jednoduchost je možno implementovat několik rolí v procesu přímo ve fasádě, ale je dobré si tam minimálně nechat čisté rozhraní pro případné oddělení.

PS: Kdyby to pomohlo alespoň jednomu z vás, nepsal jsem to zbytečně. A vyjmenovat výhody takovéto metodologie návrhu nechám na Vás jako domácí cvičení do komentářů

úterý 17. června 2008

Tak hurá na Technorati

Našel jsem celkem pěkný webík pro registraci Blogů - Technorati. No a protože chtěji při registraci, abych tu uvedl Technorati Profile, nezbývá, než tak učinit :-)

Bude MVC model nahrazen architekturou RIA + SOA?

Uvidíme :-)
Každopádně jsem si dnes přečetl článek od Nolana Wrighta a řekl si - zase další BFW (Buzz Flame War :-) ). Ale přeci jenom mi to nedalo a trošku jsem se nad tím zamyslel. Nemá samozřejmě smysl papouškovat názory od CEO firmy produkující Appcelerate, platformu pro "tvorbu RIA+SOA aplikací" už jenom proto, že s ním nemohu úplně souhlasit.

V čem se vlastně tak liší tyto dvě architektury?
ModelViewController je architektura, která dělí celou aplikaci na tři (ale spíš čtyři) vrstvy:
* View neboli prezentační vrstvu
* Model neboli reprezentaci dat (a tou čtvrtou pod Modelem je pak databáze)
* Controller nebo business logika

Co se týká vývoje Webových Aplikací, o které jde především, se prezentační logika sestává s generování HTML kódu (ve světě Javy JSP) (no dobře, máme ještě nějaké JavaScripty, ale ty slouží čistě jako podpůrný prostředek pro zobrazení, nic víc), Model je Objektová vrstva nad relační databází (ve světě Javy třeba EntityBeans či Hibernate POJOs) a Controller je pak něco mezi (typicky Session Beany + různé controller frameworky, jako třeba Struts, Tapestry či HyperQbs :-) )

Stav je držen primárně na straně Modelu, protože na klientovi toho moc držet nemůžete a Controller by měl být bezestavový.

RIA+SOA je oproti tomu dvouúrovňová architektura. Na straně klienta máme aplikační logiku napsanou v JavaScriptu, na straně serveru pak Webové Služby. Stav se primárně drží na straně klienta a WebServisy slouží pouze primárně jako Donory a Akceptory dat (a tady se s Nolanam vcelku lišíme, protože on přenáší business logiku na stranu WebServis, což potírá samu podstatu RIA - RIA není jenom o pěkném Ajaxovaném xichtu, ale také o tom, že klient obstarává velkou část aplikační logiky).

Stav je tady držen na dvou místech. Primárně je držen na straně klienta a teprve až výsledky aplikace se promítnou na server přes rozhraní Webových služeb, které pak slouží jako poskytovatelé oněch výsledků dalším aplikacím.

Taková RIA+SOA architektura pak přímo vybízí k použití Loosely-Coupled Coarse-Grained WebServis a či dokonce RESTu.

pondělí 16. června 2008

Všichni smutní, já sa řehúzňám

Tak sem sa včera díval na tu fotbalovú tragédiu. Jak nám dali teho druhého banána, tož sem to vypnul. Išel sem spat. Za chvílu mi to nedalo. Zapínám Primu a tam reklama. Přepnu na ČéTé dva plesknu tam teletext a čumím jak puk: Prohráli sme 3:2! Tož sem za začal řehúzňat. A směju sa ešče včíl. A ešče dlúho budu. Co s tým také iného, gdyž tam máme takú bandu šumařú a komediantú? Ale najvjecéj sa musí smít moja robka. Bo sem jí včéra svatosvatě slúbil, že na sport v téj bedně nebudu už nikdá zízat.

čtvrtek 12. června 2008

Kultura alá Kratochvíl

Včera jsem na Z1 sledoval Interview B.T. s Petrem Kratochvílem, majitelem divadla Ta Fantastika. To, že Bára Tachecí si s ním notovala, mi přišlo sice nepatřičné, ale qůli tomu bych neblogoval.

Celou dobu mi přišlo, že pan Kratochvíl mluví celkem rozumně, že mnohé jeho argumenty jsou korektní a naprosto v pořádku. Ale na konci tomu dal takovou ťafku, až to bolelo.

* Nejdříve řekl, že 98 divadel je na Prahu moc, že by jich polovinu zavřel. No, zajímavá úvaha na majitele jednoho z nich, které je životně závislé na plném stavu svých představení. Žeby chtěl zavřít ta Fantastiku? :-D
* Prohlásil, že dotovat kulturu je bolševický přežitek, že je potřeba zrušit dotace a že se celý systém kultury v socialistické Evropě rozpadá.
* A na konec dodal, že bychom se měli soustředit na tem systém kultury, který funguje. A to je ten ve Spojených Státech! No, já nevím, jak kdo, ale já osobně si nemyslím, že USA je ten správný příklad. Kulturu vymývačů mozků bych tady vážně nechtěl. Ano, funguje v Americe i "klasická" kultura, ale je třeba si uvědomit, že zajít si do divadla, neřku-li na operu, to je tak pro snoby. Američané svoji nekulturnost schovávají za jejich patriotismus, takže jediná díla masově uznávaná pochází z novodobé historie.

pátek 6. června 2008

Harry Potter a relikvie smrti

Tak jsem právě dočetl poslední díl Potrovic Haríka. A úplně na rovinu, jsme hodně zklamán.
Kromě poslední části boje, tedy tu od okamžiku, kdy Neville ufiknul Naginimu kebuli po rozhovor s Brumbálovým portrétem v pracovně (a snad ještě Snapův příběh) se tak kniha téměř nedala číst. Pár příkladů:
Neustálé schovávání Harryho, Hermiony a Rona je ubíjející.
Dva po sobě jdoucí útoky na Harryho stejnou hůlkou mají NAPROSTO odlišný průběh.
Zapojení Kentaurů s luky a skřítků s nožíky mi připomnělo bitvu pěti armád. I ti Orli nakonec přiletěli.
Bradavice neodolaly nájezdu Smrtijedů (Voldemort se schoval a čekal na Harryho).
PAVOUCI na popud Smrtijedů UNESLI HAGRIDA, když Tom Raddle použil na Aragoga "Arania Exhuma!!
Harry používal Imperio! a Cruciatus! jako o život!

Uznávám ale, že vyřešení souboje s Voldemortem či přerod Krátury (obzvlášť jeho "Můj Pán mi přikázal, abych se vrátil") byly moc pěkné myšlenky. A návrat Percyho byl naprosto jedinečný zážitek. Smál jsem se pak celý večer...

Když to ale jako celek srovnám s verzí od Melindaleo ... Tam Melindaleo alespoň pěkně vymyslela, proč Harry jakožto viteál nezemřel. Bitva o Bradavice, schovávání Malfoyů, bitva na svatbě, připojení Jinny k Harrymu, Ronovi a Hermioně (tři mušketýři taky byli přece čtyři!), Umbridgová jako ministryně kouzel, rozprava Harryho s Brumbálem a ostatními mrtvými (zbožňuju tu pasáž, jak mrtvý Sirius odbíhá za Harrym od děvčat u baru), Snape se ukázal jako čiročirý Smrtijed, lepší dědictví po Brumbálovi, ...
Její verze má jenom dvě slabiny - jednak to psala příliš romantická duše zahleděná do Jinny (a proto to "muckání" Harryho s Jinny na pláži) a potom to slepé poslouchání Bystrozorů nařízení Umbridgové, že se mají snažit se Smrtijedy domluvit...

úterý 3. června 2008

Ať žije frameworkování - 2. díl

Dneska jsem si přečetl zajímavý článeček na Sys-Conu, který dokazuje, proč je funkcionální programování lepší než stávající trendy OOP v Javě.

Tím by ani nebyl onen článek tak zajímavý, obzvláště proto, že není logicky korektní a v důkazu excelentnosti JVM jazyka Scala používá mimo jiné metodu, u které sám píše, že je "more difficult to understand":
class CharReader (r: Reader) extends Reader {
override def repeatForEach (f: String => Unit) = {
r.repeatForEach ((s: String) =>
s.toList.foreach ((c: Char) =>
f (c.toString)));
}
}


Mnohem podstatnější je ale následující ukázka kódu:
public static void main(String[] args) {

BeanFactory factory =
new XmlBeanFactory(new FileSystemResource(“applicationContext.xml”));
Reader arrayReader = (Reader) factory.getBean (“arrayReader”);
Reader charReader = (Reader) factory.getBean (“charReader”);

String s = arrayReader.read();
while (s != null) {
System.out.println (s);
System.out.println (charReader.read());
s = arrayReader.read();
}
}

Nikdo nemůže říct, co tento kód udělá, protože veškerá jeho logika je dána ve Springové konfiguraci. Readery mohou být propojeny či mohou být nezávislé, nikdo neví, co vlastně čtou atd. atp. . Sice se to lehce píše, ale odladit to... a případně po někom převzít či se k tomu po roce vrátit...

Proto frameworky raději nepoužívám a pokud ano, pak s velikým odporem. Leda by to byty ty základní, utilitózní, jako je třeba log4J či SaX/DOM. A pokud už nějaký použiju, musí být naprosto jednoduchý a přímočarý, bez jakýchkoli automagismů, jako třeba FreeMarker či servlet container.

Báječná RZ na silnici druhé třídy

Včera jsem jel potřeboval dostat z Uherského Hradiště do Kroměříže. Jdu na mapy.cz a našel jsem si trasu. Všechno po "žluté" silnici první a druhé třídy, takže by to mělo být v pohodě. To jsem ale netušil co mne čeká na silnici 428 mezi Modrou a Zdounkama. Chvíli jsem přemýšlel, jestli fakt jedu dobře, protože jak jsem projel Modrou, dostal jsem se na silnici tak úzkou, že potkat se tam s autem znamenalo téměř zastavit a oba na krajnici. Na těch 16 kilometrech jsem potkal 4. Když jsem po dvou kilometrech odhadl, že fakt jedu správně, rozhodl jsem se, že si to užiju. Takže za čtyří a pedál na podlahu. Jet v tom úseku víc než 90 (a kór když jsem tam jel poprvé) se v klasickém autě rovná sebevraždě, ale i tak můj Scénic letěl. Doslova. Na výmolech si auto vesele poskakovalo a na třech horizontech se mi kola malinko odlepila od země. Dlouhé rovinky přerušené několika horizonty, ostré na sebe navazující vracečky, do véršku a z véršku. Nádherná krajina, přejezd hřebene téměř pořád lesem. Skoro se divím, proč takovou cestu ještě nezahrnuli jako RZ do Barum Rallye.

Kdo rád jezdí rychle, vřele doporučuji. Ale dejte si pozor, abyste mohli v případě potřeby na fleku zastavit. Protijedoucí auta v rychlosti neminete, protože vás strhne krajnice.

PS: Až tama pojedete a směrem na Zdounky, tak až uvidíte modrou branku v plotě, dupněte na brzdy. Žádná značka upozorňující na strašně nepříjemnou levou točku těsně za horizontem. Jenom díky tomu, že jsem tušil, co tam bude (z branky byl vidět jenom vršek a kdybych seděl v nižším autě než je Scénic, asi bych ji neviděl vůbec), jsem to vybral.