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

Proč používat Linux

pondělí 31. ledna 2011

První potkání s Grails

Tak jsem se po dlouhém odkládání konečně dostal k tomu vyzkoušet si Grails. Na tento framework jsem četl poměrně hodně chvalozpěvů, jak moc je to jednoduché v něm něco udělat, a tak jsem si říkal, že by to snad ani nemuselo být nijak složité.
Stáhl jsem si Grailsy a protože vím, že IntelliJ IDEA má pro Grailsy podporu, zkusil jsem bez jakékoli přípravy to zkusit rozjet.
To, že IDEA je naprosto fantastická, jsem věděl už dávno. Ale to, co jsem právě prožil, to je prostě fantazie.
  1. V prvé řadě vytvoříte Grailsový projekt. Tady není co zkazit, jenom odklikáte from scratch, název a cestu (tak jak jste zvyklí), jenom místo Java projektu zvolíte Grails.
  2. Otevře se Vám místo klasického stromečku Project stromeček GrailsView, které obsahuje logicky uspořádané objekty. V tuto chvíli jsem naprosto nevěděl, co dělat, i sáhl jsem po Gůglu a vygůglil tutoriál Getting Started with Grails od Scotta Davise a Jasona Rudolpha. Je zdarma ke stažení na infoq.com, ale vyžaduje registraci. Tam jsem se dočetl o tom, co je doménová třída, controller a view (skončil jsem na straně 27 u "Hello World")
  3. Přes pravé tlačítko na Domain classes jsem si vytvořil první doménovou třídu Race a nakopíroval do ní seznam atributů z tutoriálu.
  4. Klikl jsem na RaceController - Generate controller, čímž se vygeneroval zajímavě vypadající CRUD Controller.
  5. Klikl jsem na Race Views - Generate views, čímž se vygenerovaly čtyři soubory GSP.
  6. Ze srandy jsem klikl na Run. Otevřel se prohlížeč a v něm uvítací stránka Grailsů a v ní odkaz na RaceController.
  7. Klikl jsem na něj a BINGO! Otevřela se mi velice hezky vypadající jednoduchá, ale plnohodnotná webová aplikace - evidence mých objektů Race!  
V tuto chvíli mi spadla čelist..

Všechno je to pěkně popsáno i s ukázkami zde 
Příště popíšu další zkušenosti s touto na první pohled geniální dvojicí - Grails a IDEA.

pátek 23. července 2010

Tož totok je spomínka na moje mládí...

Dneskaj sem si přečet báječný článeček. Čtěte také: http://vetvicka.blog.idnes.cz/c/147886/Zje-mrtvy-Lehni-nebo-nehraju-2.html


A je pravda pravdúcí! A né že nae! Akorát u nás pod sídliskem byl sad kerý nebýl nikeho, tož sme tam ožírali střešně o sto šest! A ty jabka! Zimáky ontária už v srpnu - to sa po nich huba tak krásno krútila! A koprovka? Ta by u nás musela mňet gulomet, aby vydržala do druhého dňa. Ale gdyž babička navařili kotel kyselice... ta byla najlepčí teprv až sa v ní rozležely klobáse!

úterý 20. července 2010

Zastaralé Lotus Notes and A gdk Window is being destroyed out of DestroyWindow

Taky se vám po čase přestal zobrazovat obsah tabů v Lotus Notes?
No mně se to stalo. Spustím si Notesy z příkazové řádky a najdu tam:

A gdk Window is being destroyed out of DestroyWindow                                                                                                            

/opt/ibm/lotus/notes/libemulator.so [0xb569c315]                                                                                                                
/opt/ibm/lotus/notes/libemulator.so [0xb5665bb1]                                                                                                                
/usr/lib/libgobject-2.0.so.0 [0xb47edb41]                                                                                                                      
/usr/lib/libglib-2.0.so.0(g_datalist_id_set_data_full+0x386) [0xb4e08d86]                                                                                      
/usr/lib/libgobject-2.0.so.0 [0xb47ee1f9]                                                                                                                      
/usr/lib/libgobject-2.0.so.0(g_object_unref+0xd8) [0xb47ee378]                                                                                                  
/usr/lib/libgdk-x11-2.0.so.0(gdk_window_destroy+0x3a) [0xb48fc0fa]                                                                                              
/opt/ibm/lotus/notes/libemulator.so [0xb567d20b]                                                                                                                
/opt/ibm/lotus/notes/libemulator.so [0xb567d0a0]                                                                                                                
/opt/ibm/lotus/notes/libemulator.so(DestroyWindow+0x183) [0xb567d3e7]                                                                                          
/opt/ibm/lotus/notes/notes(Quit+0x20e) [0x83ff77a]                                                                                                              
/opt/ibm/lotus/notes/notes(EndSession+0x47f) [0x8400845]                                                                                                        
/opt/ibm/lotus/notes/notes(MainWndProc+0x14a2) [0x834f406]                                                                                                      
/opt/ibm/lotus/notes/libemulator.so(CallWindowProcW+0xc0) [0xb566b472]                                                                                          
/opt/ibm/lotus/notes/libemulator.so [0xb5680b83]                                                                                                                
/opt/ibm/lotus/notes/libemulator.so(DispatchMessageW+0x13) [0xb5680bc9]                                                                                        
/opt/ibm/lotus/notes/notes(NEMMainLoop+0x3f5) [0x8365977]                                                                                                      
/opt/ibm/lotus/notes/notes(WinMain+0x5e1) [0x832507e]                                                                                                          
/opt/ibm/lotus/notes/notes(main+0x1b6) [0x83284ac]                                                                                                              
/lib/libc.so.6(__libc_start_main+0xfe) [0xb4ee4ace]   

No a tak jsem zjišťoval, čím by to asi mohlo být a našel jsem toto . Problém je v nekompatibilitě nového GTK s tím, které chtějí Notesy. Ať už je to chybou GTK či Notesů (spíš bych podezíral vývojáře GTKčka), obejít se to dá lehce. Stáhněte si z http://www.freetechie.com/upload/lotus_notes/ starší verze knihoven pro GTK, nahrajte je k ostatním knihovnám Notesů (typicky /opt/ibm/lotus/notes) a máte to!

Nebudou sice Notesy vypadat tak krásně jako dřív, ale aspoň něco...

čtvrtek 17. června 2010

Znovuzrození Obnoveného řádu

Wesnothu Zdar!

Tak už je to tady. Po dalších dlouhých měsících a letech jsem zase něco malého udělal pro komunitu nás Wesnoťáků. Jedno z nejzajímavějších tažení, Obnovený řád (v originále A New Order) od Arkadiusze Danielckiho, které napsal pro Wesnoth verzi 0.9.3 a které bylo naposledy funkční pod Wesnothem 1.2, je spravováno a je hratelné v nejčerstvějším vydání (nyní 1.8.2) této naprosto báječné a jedinečné strategie. Ano, milí přátelé, zajisté jste pochopili, spravuji je já a mám na svědomí jeho vzkříšení.

Hrajte, jak je vám libo. Nechte se vtáhnout do děje, zabíjejte, kecejte, vyslýchejte, mučte, zkrátka kochejte se.


Aktuálně je vydána verze 1.1.98 . Verze, která by měla beze zbytku fungovat a být v plné míře naportována na jedna-osmičkový stroj, bude 1.2 . Do té doby sháním všechny možné i nemožné beta testovače.

Užijte si to ve zdraví.

úterý 15. června 2010

Jak vyřešit ORA-01591: zámek uplatněný spornou distribuovanou transakcí

Tak jsem si jednou hrál s Hibernate a automatickým vytvářením tabulek nad skoro produkční databází Oracle 10 a dostal jsem se do jedné poněkud choulostivé situace. Při deployi earu jsem dostával
ORA-01591: zámek uplatněný spornou distribuovanou transakcí
Chvíli jsem si myslel, že to má na svědomí špatně navržený deployment Hibernate. Po čase jsem začal Gůglit ve vodách mimo Javu a dostal jsem se k jednoduchému řešeni:

Jedná se o problém, kdy transakce selhala v okamžiku, kdy se dostala do stavu prepared. Jediné řešení je ji odstranit. A řešení jsou dvě: buď se k ní připojit a rollbacknout, nebo ji smahnout přímo v databázi.

Druhé řešení je poměrně elegantní. Oracle definuje SQL příkaz ROLLBACK FORCE a jemu odpovídající PL/SQL funkci dbms_transaction.rollback_force(xid). V tabulce "SYS"."PENDING_TRANS$" je uložen záznam o všech čekajících transakcích. Ve sloupci LOCAL_TRAN_ID je XID.

Stačí se tedy přihlásit jako uživatel SYSTEM s funkcí SYSDBA (například v sqlplus), spustit
exec dbms_transaction.rollback_force(moje_xid)
a je vymalováno.

pondělí 31. května 2010

Hibernate error - identifier altered from 1 to 1

Nějakou dobu jsem laboroval s toto poněkud podivnou hláškou - jak může změna z 1 na 1 vygenerovat chybu? A kde se vůbec ta změna bere, když jedinou operaci, kterou dělám, je session.save()?

Nakonec jsem chybu našel. Při laborování s formátem dat v databázi a ručním copy&paste psaní hbm.xml jsem zavlekl typovou nekonzistenci do dat. V databázi (PostgreSQL) jsem měl u ID Integer (což onu chybu ale nevyvolá), v hbm.xml java.lang.Integer, ale ve třídě java.lang.Long. No a protože long nelze bez přetypování uložit do intu, ona alterace byla na světě.

Řešení tohoto problému je tedy prosté. Zkontrolujte si, že vám PŘESNĚ sedí jednotlivé typy v Javě a v hbm.xml

Kéž to někomu pomůže.

pondělí 3. května 2010

Jak ignorovat skryté adresáře v doplňování v bashi

bash completion, neboli inteligentní doplňování v bashi, je strašně mocná zbraň. Poměrně hodně mi ale vadilo, že mi bash při průchodu zdrojáků uložených v Subversion permanentně nabízel v možnostech pro příkaz cd i adresář .svn . Tak jsem Gůglil, až jsem zjistil, jak se s tím vypořádat.
Nabízení skrytých adresářů je vlastnost knihovny readline, která je v bashi použita. A tu lze vypnout jednoduše pomocí nastavení readline. Do ~/.inputrc přidáte
set et match-hidden-files off
a je to. Eqivalentem pro právě běžící bash je použití interního příkazu bind:
bind 'set match-hidden-files off'
Třeba to někomu pomůže.