17.04. 2007
On the air! … CZpodcast#8
A máme tady CZpodcast Vol. 8, který má být navázáním na skvělou Filemonovu prezentaci metodik vývoje a SCRUMu. Ale nebyli jsme tak striktní a vznikl z toho volný potlach nad zásadami extrémního programování a SCRUMu. A co tam dělám já? No já jsem ten malý černovlasý uchichtávající se hároš–developer vzadu … ne, sranda. Snad jsem přispěl také něčím hodnotným. A pro zájemce odkaz na zmiňovanou sémantickou aplikaci mé domovské katedry.
05.04. 2007
Večer CZJUG, ráno SCWCD
Už měsíc stránka leží ladem. Ale neflákám se, to ne! Asi před 3 týdny jsem byl na 6 dní služebně do Německa a také něco procestoval. Reportáž z cest možná připravím, ale nic neslibuju. Hlavní náplní celého měsíce bylo studium na zkoušku, kterou jsem spáchal dnes. Teď již s klidným srdcem se dívám na vysvědčení z Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4 a kochám se na strohé » Pass « v rámečku uprostřed stránky.
Pokud by to někoho zajímalo, na zkoušce se probírají servlety, JSP, JSTL, programování vlastních tagů, zabezpečení, enterprise návrhové vzory. Asi nejlepší studijni materiál je kniha Head First Servlets & JSP, která obsahuje i vzorové kontrolní testy. No a také specifikace!
Večer před zkouškou jsem se šel rozptýlit. Filemon dorazil z Evropy (nebo kde se teď pracovně nachází) a v klidu vystřihl na CZJUGu dvouhodinou prezentaci o metodikách vývoje a nejen jeho preferovaném SCRUMu. Pozornější jistě poznali na slidech, že Filovo srdce v rytmu rapu bije! – na slidech jsem objevil min. jednu citaci Headdyho a něco i z Ali G In Da House. A asi nejvtipnější poznámka? „… no já SCRUM použil i na stěhování, ale některé lidi jsem tím naštval …“
02.03. 2007
Cvičil jsem programování aplikací sémantického Webu
Dnes, tj. 2.3. 2007, jsem byl v rámci svého působení na Katedře informačního a znalostního inženýrství VŠE Praha k výuce předmětu 4IZ440 Reprezentace a zpracování znalostí na WWW. Na dnešním cvičení jsem přednesl hrubý úvod do programování aplikací nad RDF daty, použití API a jejich různé způsoby přístupu k datém – v praktických ukázkách s využitím knihovny Jena se cvičila práce s „triple–based modelem“ a dotazování pomocí jazyka SPARQL. Ke stažení nabízím prezentaci, ukázková data (jde o data pro připravovanou katedrální komunitní stránku) a také zdrojové kódy příkladů. Pro jejich spuštění jsou nutné knihovny JUnit 3.8.1 a Jena 2.5.2.
Ke stažení: prezentace, ukázková data, zdrojové kódy příkladů.
Jen bych rád ještě poznamenal, že SPARQL jsem se naučil až včera při psaní ukázek a prezentace. Pro studium byla výborná SPARQL reference guide a pro ladění dotazů on–line editor.
20.02. 2007
Nepřetržitá integrace vs. aktualita úložiště zdrojových kódů
Metodiky vývoje se snaží maximálně zjednodušit procesy v rámci vývojového týmu a maximálně zefektivnit práci. V rámci své praxe jsem narazil na dvě obecně platné pravidla:
- „Zdrojové kódy v souborovém úložišti musí být vždy aktuální – kdyby byl člen týmu nedostupný, nečekaně odříznutý od zbytku týmu, nebo nešťastnou náhodou přišel o život, tým musí být schopný pokračovat v jeho práci.“
- „Zdrojové kódy v souborovém úložišti musí být vždy zkompilovatelné.“
Jistě chápete, co se stane, pokud nebude dodržováno první pravidlo. Pominu-li morbidní kontext této poučky, může vzniknout například situace, kdy člen týmu dokončí prioritní úkol, ale neodešle hotové soubory na úložiště. Pokud následně není v dosahu – třeba z důvodu dovolené – tým musí problém řešit i za cenu toho, že vynaloží další penzum pracnosti na znovu–vytvoření již hotového. V horším případě všechny musí vyčkat s dokončením všech návazných úkolů, až se pracovník vrátí.
Nyní si uvědomme, co říká pravidlo první a co pravidlo druhé!
Co se stane, pokud pracovník těsně před koncem směny nemá hotovou funkční verzi. Má nebo nemá soubory nahrát do úložiště? Měl by, protože jinak nebude tým v případě potřeby schopný za něj práci dokončit.
Ale je tu jiný problém. Uvažujme tým, kde jeden vývojář pracuje na modelu aplikace a další vývojáři na uživatelském rozhraní (UI). Pokud vývojář pracující na modelu aplikace provede refaktoring, který není dokončený, jak na toto zareagují pracovníci uvázaní na UI aplikace? Jak se vůbec dozví, že model není aktuálně kompilovatelný a proto by jej neměli na své vývojové stanici aktualizovat, protože jinak nebudou moci pracovat – zkompilovat projekt!
Už jsem zažil mnoho dohod typu „chybí mi třída Aaa, Abb, Ac, můžeš je nahrát? Chvilku …“ nebo ještě horší „kluci, neaktualizujte model, neprochází junit-testy a nejde ani zkompilovat!“ Horší jsou ale stavy, kdy aktualizujete zdrojové kódy a netušíte, že vše jde zkompilovat, ale změnila se třeba struktura databáze, implementace a aplikace pak nejde po sestavení spustit …
V těchto případech by mnohé vyřešilo zavedení nepřetržité integrace (continuos integration) v rámci metodiky vývoje. Ta umožňuje v pravidelných intervalech nebo na požádání spustit kompletní sestavení aplikace a následně nad ní spustí zvolenou sadu jednotkových testů (nejen JUnit, ale třeba i HTTPUnit, atp.) Tím je vždy aktuálně k dispozici informace, zda-li je poslední verze projektu funkční (a to po všech stránkách). Jak s takovou informací naloží vývojáři jednotlivých vrstev, to už je zcela v jejich kompetenci.
15.02. 2007
Fotografie: „CityFrog“ 451 025-1 ČD
V posledních dnech není příliš šancí vyfotit něco kvalitního. Jednak není sníh, takže zimní romantické krajinky nepřipadají v úvahu vůbec a i to slunce svítí jen občas, takže je to spíš k zlosti. Naštěstí kolem Hostivaře je pár míst k fotografování, které jsou relativně rychle dostupné. Stačí jen mít štestí a být na správném místě ve správnou chvíli – v úterý jsem chytil po 16 hodině snad jediné místo a čas, kdy zasvítilo pořádně slunce a jel tím místem vlak. Sice je to jen obyčejný, i když můj oblíbený CityFrog, ale ta podvečerní nálada se povedla. » ČD 451 025-1, Os 9138 (Benešov u Prahy — Praha hl.n.)
14.02. 2007
Sesame2, první doteky s API
Již jsem překousl všechny choutky i nechoutky Sesame 2 a minulý týden se pustil do programování komponenty, která z RDF konfiguračního souboru přečte popis nastavení (definovaný dle dříve implementované ontologie) a následně příslušné nastavení Repository vytvoří – zde se uplatnila hlavně Java reflexe. A jelikož Sesame 2 nemá identické API s Jenou, opět jsem se spoustu času bloudil v tutorialu a javadocu. Přináším pár maličkostí, které jsem řešil a vyřešil.
Logování — existuje univerzální komponenta ThreadLog, která zapisuje veškeré hlášení do společného logu Sesame.
// presmerovani do spravneho souboru
ThreadLog.setDefaultLog("./log.txt", 5);
// zapis zpravy do logu
ThreadLog.log("An error message");
Model / úložiště v paměti — neexisuje nic jako MemModel. Veškeré úložiště se vytváří shodně.
Repository repository = new RepositoryImpl(new MemoryStore());
Connection connection = repository.getConnection();
Objekt Connection se používá k přístupu do úložiště.
Načtení dat ze souboru — pomocí objektu Repository načteme a uložíme data.
connection.add(file, null, RDFFormat.RDFXML);
Dotazování na tvrzení a procházení výsledku — dotazujeme se přímo připojení na repository, za parametry předmět, predikát či objekt můžeme zadat objektu reprezentující kontrétní zdroj / literál nebo null, pokud tento parametr má být libovolný. Poslední parametr includeInferred určuje, jestli se ve výsledku mají objevit i tvrzení odovozená ze schématu / ontologie.
boolean includeInferred = false;
CloseableIterator<? extends Statement> statements =
connection.getStatements(subject, predicate, object, includeInferred);
while (statements.hasNext() {
Statement statement = statements.next();
Subject subject = statement.getSubject();
// ...
}
06.02. 2007
NOVÝ K-Space Newsletter Issue 2
Byl nasázen během konce prosince / začátku ledna a ve svém obsahu přináší informace o tom, co je nového v K–Space, poznámky k zajímavým akcím a hlavně, co za nové toolíky partneři v projektu zapojení vyvinuli. Doporučuji přečíst.
25.01. 2007
Otazníky nad ontologií FOAF (pokračování)
Když se vznášely otazníky nad ontologií FOAF, měl jsem z toho radost. Má oblíbená aplikace postavená na technologiích sémantického Webu by se mohla opět probudit k životu a její vývoj pokračovat. Kupodivu na článek inicializující obnovenou aktivitu nepřilákal mnoho komentátorů. To však nevadilo tomu, abych se zkontaktoval s autorem a zeptal se, co dál. Nabídl mi možnost překladu termínů specifikace ontologie – šlo jen o základy, jádro – to jsem již dávno dodělal, ale až dnes se to objevilo v nově ustavené SVN repository. Soubor foaf-cs.rdf není kompletní ani, co se pokrytí termínů specifikace, ani nemá komentáře u termínů, jen popisky, ale je to dobrý začátek. K tomu autor přibalil přístupový účet do repository a řešíme, co dál. Snad se to celé nějak rozhýbá. Pro zájemce je nově ustaven mailing–list foaf–dev.
17.01. 2007
Kolik teroristů se vleze do soupravy metra C?
Podle výrobce jen jeden do vozu …
05.01. 2007
Choutky a nechoutky vývoje Sesame2
Vždy jsem myslel, že nejvíce záludností skýtá vývoj aplikací s Glassfish, EJB 3.0, JSF 1.2, NetBeans a nějakou tou databází. Ani si nepamatuju, kolikrát jsem tento kolotoč načítání zdrojových kódů, instalaci serveru, nastavení projektu v IDE, nastavení databáze, deploye a řešení problému dělal … :-) naposledy včera … ale to se vhodným manuálem dá podchytit. V rámci práce na projektu K–Space vyvstala nutnost si stáhnout projekt RDF repository Sesame2 a v té chvíli jsem poznal, co to je špatně navržená struktura projektu.
Zdrojové kódy jsou umístěny v SVN, to je v pořádku. Bohužel původně jednolité API se autoři během verzí alpha 3 a 4 rozhodli udělat „modulární“. Rozsekali jej tedy do mnoha podprojektů, které jsou v tomto repository naházeny v různých složkách — bohužel nejsou na stejné úrovni. Také klasická zásada, že obsah repository by měl jít vždy zkompilovat, zde neplatí — nenajdete zde žádné externí knihovny a zvláště utility z domény info.aduna se špatně hledají. Důvodem je fakt, že projekt je sestavován pomocí nástroje Maven 2, který by měl mít na starosti a) stažení knihoven b) nastavení projektů v IDE c) kompilaci. V praxi jsem přišel na to, že B mi nijak neulehčil a já musel vše naklikávat ručně a C jinak, než přes Maven vůbec nejde, něco tomu prostě chybí.
A to zde máme také maličkost takovou, že vývojáři Sesame asi zapomněli, co jsou správné zásady refaktoringu. Verze, kterou jsem z repository stáhnul, měla v části tříd odkazy na utility před jejich přetažením do samostatných util info.aduna a některé metody, které se volaly, v cílových objektech neexistovaly. Výsledný stav projektu po načtení do Eclipse si prohlédněte ve screenshotu na boku tohoto článku.
K dobrému tak přispívá jen fakt, že ze stránky projektu lze stáhnou oficiální build alpha 4, který funguje, obsahuje všechny externí knihovny a proto není potřeba si vlastní verzi ze zdrojových kódů sestavovat. Takže dokud nebudeme v K–Space přímo contribuovat Sesame2, můžeme se spolehnout na binárky.
A k čemu je to dobré?
Jedná se RDF knihovnu podporující veškeré operace, které se s těmito daty dělají. Výhodou je hlavně integrace úložiště. Dnes již asi slabší alternativou je Jena.