2007/11/10

 

JGear LiveSource - Namodelujte si své Java EE aplikace!


Na portálu java.cz jsem publikoval recenzi na JGear LiveSource, Eclipse plugin, který je pokraÄ?ovatelem populárního TogetherJ a je základním kamenem nového JBuilderu 2007:

JGear LiveSource je nový modelovací nástroj firmy CodeGear. LiveSource umožňuje modelování a vizuální návrh Java /Java EE aplikací pomocí modelovacího jazyka UML. Tento produkt je distribuován jako plugin pro vývojové prostředí Eclipse. V tomto příspěvku bych chtěl popsat svoje dojmy a zkušenosti z tohoto produktu.

Celou recenzi naleznete zde:

JGear LiveSource – Namodelujte si své Java EE aplikace!
(java.cz)

Zde se můžete podívat na screenshoty.

Štítky: , , , , , ,


2007/10/14

 

Web Services Standards Poster


Pokud vás zajímají webové služby (web services), SOA a podobná témata, rozhodnÄ› doporuÄ?uji pÄ›kný poster s pÅ™ehledem existujících Web Service standardů (stav 2007):

WS-Standards Poster 2007-02.pdf

který vytvořila a dala k dispozici německá firma innoQ.

Pro zajímavost. Před pár měsíci jsem procházel nové WS standardy a projekty a pro přehledné vyjádření vzájemných souvislostí jsem použil kontextové mapy vytvořené pomocí CMapTools (více zde).

Contextual map Web Services - Metro and Tango
Příklad: kontextová mapa pro projekty Metro a Tango

Štítky: , ,


2007/07/02

 

Eclipse - nefunkÄ?ní "hot code replace"


Alternativní nadpis tohoto příspÄ›vku by mohl znít "Jak použít Eclipse (java) compiler" mimo IDE. Tímto jsem asi dost napovÄ›dÄ›l, o Ä?em budou následující řádky pojednávat.

Remote Debugging

Vzdálené debugování (remote debugging) je užiteÄ?ný nástroj pro ladÄ›ní "vzdálených" aplikací - "vzdálených" v tom smyslu, že se pomocí svého debuggeru pÅ™ipojujete do jiné běžící Java Virtual Machine nejspíše s úmyslem ladÄ›ní dané aplikace ;) Nebudu nosit dříví do lesa: Více si o tomto tématu pÅ™eÄ?tete například v Ä?lánku Debugging v praxi - opravdu samozÅ™ejmost?! od otce Fura Ä?i Eclipse a drobné maliÄ?kosti - vzdálené debugování od Dagiho.

Hot Swap

S remote debuggingem souvisí další funkcionalita, která z mé vlastní zkuÅ¡enosti dokáže uÅ¡etÅ™it obrovské množství Ä?asu. Tato funkcionalita se jmenuje hot swap. Hot swap umožňuje "vpaÅ¡ovat" do běžící aplikace novou verzi pÅ™eloženého kódu a nahradit jí tak kód původní.

Pro lepší pÅ™edstavu, proÄ? považuji hot swap za maximálnÄ› efektivní pomůcku, uvedu jeden příklad z mé praxe. Pracoval jsem na Ariba projektu, kde restart modulu Ariba aplikace (to jest jedné instance Weblogicu) na které jsem pracoval, trval na laptopu pÅ™ibližnÄ› 9-10 minut (díky tomu, že se inicializovaly různé adaptéry, Tibco repositories, kontrolovala se XML metadata,...).

SouÄ?ástí typického úkolu na tomto projektu byl vývoj nÄ›jakého vysoce sofistikovaného ;) java kódu, který používá pokud možno public API aplikace a na konci dosáhne kýženého výsledku, za aplausu business consultantů :) V uvedené konfiguraci, kdy jedním restartem ztratíte tolik Ä?asu, si musíte dávat sakra dobrý pozor na jakékoliv triviální chyby (na netriviální chyby si Ä?asto pozor dát ani nemůžete, například z toho důvodu, že API není zrovna dobÅ™e zdokumentované a až stacktrace pÅ™i testování vás upozorní na možný problém) ;)

Zde se pomalu dostávám k jádru vÄ›ci. Hot swap vám v tÄ›chto případech velice dobÅ™e poslouží: triviální problém - zapomnÄ›li jste test na null? Chcete pÅ™idat debugovací řádku...? S hrůzou zjistíte že nerovnost v podmínce je pÅ™esnÄ› obrácenÄ›? Bez remote debuggingu (aneb tak jak jsem to vidÄ›l kupodivu u velkého množství kolegů konzultantů) musíte shodit server, opravit, pÅ™ekompilovat, zrestartovat a dvacet minut je pryÄ?. NáslednovnÄ› zjistíte, že o pár řádků dále je problém podobný a tak pořád dokola.

Ti rozumnÄ›jší (případnÄ› ti pracující v módu fixed fee a ne time&material :D ) využijí hot swap: kód v IDE jednoduÅ¡e opravíte, upravíte, pÅ™eložíte, a pokud jste debuggerem pÅ™ipojeni do JVM v které běží aplikace, hot swap nahraje novou verzi byte-kódu do JVM a nahradí jí kód původní. V tÄ›chto jednoduchých případech vám hot swap nezanedbatelnÄ› Å¡etří Ä?as. (SamozÅ™ejmÄ› zde existuje mnoho omezení, která když porušíte, debugger zobrazí varování, že daná zmÄ›na není podporována (zmÄ›ny v hierarchii tříd ale i například pÅ™idání public metody atd.) a restartu se stejnÄ› nevyhnete).

Hot Swap v Eclipse

Zatímco v Intellij Idee hot swap fungoval bez problémů a intuitivnÄ›, po pÅ™echodu na Eclipse mi hot code replace (jak se tato feature v eclipsu nazývá) v mnoha případech nefungoval. Po rekompilaci třídy se mi místo oÄ?ekávaného nahrání nového byte-kódu na server zobrazovalo Ä?asto následující varování:

Hot code replace failed


Trochu jsem pátral co je příÄ?inou a dopátral jsem se. Na obranu debuggingu v Eclipsu můžu uvést, že je v tom (Ä?ásteÄ?nÄ› nevinnÄ›).

Scheme change not implemented

Zásadní problém je ten, že Eclipse pro kompilaci nepoužívá sunovský javac, nýbrž svůj kompilátor (souÄ?ást JDT Core component). Vyprodukovaný byte kód se liší (nezkoumal jsem do detailů jak...) od byte kódu class pÅ™eložených javac kompilátorem. Tyto rozdíly jsou pro debugger ale podstatné tak, že neumožní zámÄ›nu byte kódu za bÄ›hu. Podobný problém viz napÅ™. na news.eclipse.tools.jdt: Scheme change not implemented.

(Nutno podotknout, že důvod proÄ? se mi na serveru objevuje kód kompilovaný jiným kompilátorem (javac než z IDE (eclipse compiler), je fakt, že instalace a deployment této aplikaci je pomÄ›rnÄ› komplikovaný proces a je pro nÄ›j pÅ™epdÅ™ipravena sada nástrojů (Ant skriptů), které je nutné ve správném poÅ™adí použít v závislosti na provádÄ›né zmÄ›nÄ›).

Řešení

ŘeÅ¡ení problému spoÄ?ívá v použití stejného kompilátoru v obou případech.

První možnost je donutit Eclipse kompilovat pomocí javac. To jde podle mě jednoduše pouze pomocí nového ANT builderu a custom Ant scriptu. Což není zrovna elegantní.

Druhá varianta je donutit existující produkt, který obsahuje vlastní "Ant" build systém, kompilovat pomocí Eclipse kompilátoru.

To jde celkem jednoduše:
  1. stáhnout ecj.jar (JDT Core Batch Compiler)z eclipse.org

  2. donutit Ant použít tento compiler: tzn. nastavit hodnotu Ant property build.compiler na org.eclipse.jdt.core.JDTCompilerAdapter
  3. a nakonec samozřejmě přidat ecj.jar do classpath (tip pro lenochy: nahrát tento jar do adresáře ant/lib)

Tímto donutíme Ant kompilovat pomocí Eclipse kompilátoru a hot swap neboli hot code replace funguje tak jak má.

Malá poznámka na konec. RozhodnÄ› bych nedoporuÄ?oval mÄ›nit použitý compiler na produkÄ?ním server, o Ä?em tu pojednávám, je prostÅ™edí vývojáře!

Více kompilování v Eclipse o možnostech použití vnÄ› Eclipse IDE se lze doÄ?íst v online nápovÄ›dÄ›: JDT Plug-in Developer Guide > Compiling Java code.

Štítky: ,


2007/05/18

 

TunnelliJ a Idea plugin API


Nedávno jsem navÅ¡tívil zajímavou pÅ™ednášku pořádanou Ä?eskou Java User Group s názvem Jak psát API, které pÅ™ežije nástrahy Ä?asu prezentovanou architektem Netbeans Jardou Tulachem. V rámci pÅ™ednášky probÄ›hla diskuse o (ne)kompatibilitÄ› IDE pluginů s postupem Ä?asu (jakožto souÄ?asný uživatel Eclipsu vím moc dobÅ™e, o Ä?em je Å™eÄ?).

Napadlo mÄ› tedy, že se mrknu jaká je situace v Idee, zda jeÅ¡tÄ› pořád funguje plugin Tunnellij (TCP tunnel integrovaný do IDE), který jsem napsal pÅ™ed pár lety pro verzi Idea 3.5 (jakožto pomůcku pro sniffování SOAP zpráv). Mrknul jsem na stránky Jetbrains a zjistil jsem, že udÄ›lali v této oblasti velký kus práce. Nové a pÄ›knÄ› udÄ›lané stránky plugin repository, relativnÄ› velké množství pluginů (vzhledem k tomu že Idea je komerÄ?ní IDE).

Takže jsem vzal poslední build Idea verze 7 a zkusil jsem, zda můj Tunnellij (popis) plugin bude i nadále fungovat. Funguje bez problému, takže plugin API v Idee se zda být celkem stabilní, minimálně pro featury které jsem použil. Lehce se změnil a rozšířil plugin XML descriptor, takže jsem doplnil chybějící údaje (vsuvka - na zmiňované přednášce se mi líbilo, že Jarda zdůraznil, že návrh API není jenom o Java kódu a public interfacech, ale týká se mnohem více věcí, od proměnných prostředí OS přes různé deskriptory, konfigurace atd...) a znova rebuildoval celou package a nahrál do plugin centra. Paradoxem je, že tento build Idea pluginu jsem již dělal z Eclipsu ;-)

A co mÄ› nakonec příjemnÄ› pÅ™ekvapilo je poÄ?et downloadů - pÅ™es 5700 downloadů je pÄ›kné Ä?íslo ;-)

Štítky: ,


2006/11/21

 

JBuilder 2007 aneb veletoc Borlandu


Vrátím se jeÅ¡tÄ› k nedávné podcast debatÄ› na téma java vývojových prostÅ™edí. Zmiňovali jsme zde JBuilder - javovské IDE od firmy Borland - a pokus o jeho"zmrtvýchvstání" v podobÄ› nové verze postavené na platformÄ› Eclipse. Zdá se, že nový JBuilder se již klube na svÄ›t. Jako již tradiÄ?nÄ› u Borlandu jsou o nÄ›co dříve pÅ™ipravene webové stránky a tiskové zprávy pÅ™ed samotným produktem. AÄ?koliv na titulní stránce je JBuilder 2007 masivnÄ› inzerován, sami si ho zatím vyzkouÅ¡et nemůžete (v sekci Downloads ho totiž zatím nenajdete).

ProÄ? bychom si ho ale mÄ›li chtít vyzkouÅ¡et? Sám nevím. JBuilder nebyl Å¡patné IDE, ale v Ä?asech kolem verzí 6, 7, 8 (ano Borland chrlil major verze každý půlrok) podle mÄ› zaspal dobu. Co nám může nabídnout za nemalé peníze dnes? Nejdříve se podívejme, co jsou to ty nemalé peníze. LicenÄ?ní model zůstáva zachován, verze Enterprise, Professional a nejchudší Developer stojí 1.999 resp. 799 resp. 399 dolarů (cena za nové licence, ceny za upgrade jsou o nÄ›co nižší). Poplatky za podporu nejsou v této sumÄ› zahrnuty a nemalé peníze se platí se zvlášť. ÄŒtyÅ™ista babek za Developer verzi, urÄ?enou pro individuální a open-source uživatele mi pÅ™ijde jako silná káva a nerozumím nikomu, kdo by do toho tyto peníze investoval. Podíváteli se na seznam funkcí, je tato verze silnÄ› okleÅ¡tÄ›ná (Ä?i vykleÅ¡tÄ›ná ;-)) a argument, že můžete IDE rozšířit o pluginy produkované eclipse komunitou zde jaksi nemá smysl.

Dalším důvodem proÄ? podlÄ› mÄ› NEinvestovat do JBuilderu je evidentní nejistota co se týÄ?e směřování tohoto produktu a potažmo celé firmy. Investovali byste (sta)tisíce dolarů do software firmy, která v únoru tohoto roku oznamovala, že se zbaví své divize zabývající se vývojovými nástroji (JBuilder, Delphi, C++Builder, C#Builder,...) protože to, co je podle nich "hot", je trh application life management (ALM) softwaru. Tento týden (o devÄ›t mÄ›síců pozdÄ›ji) naopak Borland oznámil, že nejlepší bude divizi nástrojů si ponechat, ale vyÄ?lenit jí jako samostatnou odnož se jménem CodeGear. PÄ›kný veletoÄ? ;-) Tyto zvraty jsou pro Borland celkem typické, vzpomeňme nÄ›kolikaletou neúspěšnou pÅ™emÄ›nu v Inprise a pozdÄ›jší návrat k původnímu firemnímu jménu Borland.

Nyní se podívejme na technickou stránku věci. Co nového JBuilder 2007 přinese. Čerpám pouze z dostupné dokumentace, což je především web a pdfka: Data Sheet a Feature Matrix.

Již úvodní věta je celkem odvážná :)

The latest JBuilder is the first application server independent enterprise class IDE built on open source Eclipse.

PokraÄ?ujme dále:

It provides all the economic benefits of an open source platform, with the reliability of a trusted, turnkey solution provider.

S výše zmiňovanou cenovou politikou mi přijde poukazovat na ekonomické benefity open source platformy také celkem zcestné ;-)

Krásné fráze.

Z inzerovaných featur:

Jak už jsem Å™ekl jsem k osudu JBuilderu dost skeptický. Ani ne kvůli Eclipse a Netbeans, které jsou zdarma. Ani ne kvůli IntellJ Idee, která je o dost levnÄ›jší a v nÄ›kterých vÄ›cech stále nepÅ™ekonaná, ale podle mÄ› míří na trochu jiný segment trhu. SkuteÄ?ná konkurence pro JBuilder jsou produkty jako IBM RAD nebo Oracle JDeveloper. Jenže ti to mají snazší. IBM i Oracle mají sílu s dalšími produkty a službami protlaÄ?it svá IDE k zákazníkovi. Borland tuto sílu už dávno nemá!

Štítky: , ,


2006/02/03

 

quick oracle tip - how to move tablespaces


here it is a quick tip "how to move oracle tablespace datafile from one file to another". i've spent a while searching for this, so maybe someone will find this useful too. i needed to free up some space on my laptop disk drive by moving huge oracle data files (*.ora) to an external disk. (also thanks to dlabik for consultation).

ALTER TABLESPACE DATA02 OFFLINE;

ALTER TABLESPACE DATA02
RENAME DATAFILE 'D:\oracle\oradata\mboruvka\DATA021.ORA' TO 'G:\oracle\oradata\mboruvka\DATA021.ORA';

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
ALTER TABLESPACE DATA02 ONLINE;

note: with this procedure it is not necessary to shutdown db.

Štítky: ,


2005/11/27

 

Sněžka!


Víkend jsem strávil v Krkonoších. V sobotu jsem pÅ™ekonal lenost a vyrazil (pěšky) smÄ›r Sněžka. Cesta z Velké Úpy pÅ™es Růžohorka, Růžovou horu na Sněžku vyjde Ä?asovÄ› na necelé tÅ™i hodiny "svižné" chůze (snÄ›hu je už celkem dost a pěšiny nebyly zrovna moc prochozené). Protože jsem vyrazil až po obÄ›dÄ›, návrat byl až za tmy. Jinak doporuÄ?uju obÄ?erstvení na boudÄ› Růžohorka.
Výstup na Sněžku v zimě má svoje kouzlo - viz následující fotky:

SnezkaPohled do udoli
SněžkaSnezka

Štítky: , ,


2005/10/06

 

Ajax - lehký úvod


Pojem Ajax jsem na webu zahlédnul v minulosti již mnohokrát, ale nikdy mÄ› nadpis nezaujal tak, abych se zaÄ?etl do hloubky o Ä?em Ajax vlastnÄ› je. Možná to souvisí s tím, že stejnÄ› se jmenuje i sousedovic pes, jehož zrovna nemám v lásce :-) PÅ™ed nedávnem jsem sedÄ›l s kolegou u piva a diskutovali jsme o vÅ¡em možném, mimo jiné mÄ› upozornil na Ajax a související technologie. Rozhodl jsem se, že si o Ajaxu nÄ›co pÅ™eÄ?tu. Zde je shrnutí toho, co vlastnÄ› Ajax je, k Ä?emu se dá využít a jak na to.

Fakta:

  • Ajax je zkratka: Asynchronous JavaScript and XML
  • Ajax je tu pro vytváření (dokonalejších) interaktivních webových aplikací
  • Ajax umožňuje posílat serveru požadavky aniž by bylo nutné znova naÄ?íst stránku
  • Ajax není technologie sama o sobÄ›, AJAX je koncept
  • Ajax je kombinací: HTML (XHTML), CSS, DOM, JavaScript, XML a XmlHttpRequest
  • Ajax musí podporovat browser
  • Ajax browsery podporují (IE 4.0+, Firefox 1.0+, Netscape 7.1+, Opera 7.6+, Safari 1.2+, Konqueror)
  • Ajax využívá pro komunikaci se serverem XML dokumenty
  • Ajax nevyžaduje instalaci žádného dalšího pluginu, podobnÄ› jako tÅ™eba Flash, staÄ?í jeden z uvedených browserů


    Rozdíl mezi tradiÄ?ní webovou aplikací a webovou aplikací podle Ajaxu je na následujícím diagramu:



    Levá strana diagramu popisuje klasickou webovou aplikaci tak jak ji všichni známe: browser posílá HTTP requesty na server, server vrací HTML+CSS, které je zobrazeno v browseru.

    Pravá strana diagramu ukazuje model s použitím Ajaxu. Na první pohled pÅ™ibyla do Ä?ásti web browseru další vrstva - Ajax engine. Požadavky z uživatelského rozhraní jsou pÅ™evedeny na volání metod JavaScriptu v Ajax enginu, který komunikuje se serverem. Server odpovídá ve formátu XML dokumentu, který Ajax engine transformuje na browserem zobrazitelné HTML a CSS.

    Zásadní rozdíl je v tom, že v klasické webové aplikaci je nutné pro pÅ™echod mezi dvÄ›ma stavy aplikace naÄ?íst celou stránku. To je jak vÅ¡ichni známe zdlouhavé a otravné. Ajax umožňuje zmÄ›nu pouze Ä?ásti stránky. Wikipedia na toto téma uvádí jako příklad webovou aplikaci umožňující přídávat k obrazkům popisky (viz. napÅ™ Flicker).

    TradiÄ?ní pojetí: obrázek a formulář pro pÅ™idání popisku. Odeslání formuláře (submit) způsobí pÅ™echod aplikace do nového stavu, který pÅ™edstavuje nová stránka zobrazující ten samý obrázek s pÅ™idaným popiskem.

    V pojetí Ajaxu: obrázek a formulář pro pÅ™idání popisku. Odeslání formuláře nezpůsobí nový HTTP call, ale pouze volání JavaScript metody na Ajax enginu. Ten aniž by zatím jakkoliv mÄ›nil zobrazenou stránku, odeÅ¡le data na server a poÄ?ká na odpovÄ›Ä? v XML. Pomocí webových technologií DHTHML a CSS zobrazí popisek u obrázku na aktuálnÄ› zobrazené stránce, aniž by se znova naÄ?ítala. Odezva aplikace je mnohem kratší, uživatel nemusí Ä?ekat na znovunaÄ?tení stránky, což v případÄ› obrázku nemusí být zanedbatelná doba (ano, asi je v cachi browseru, ale i tak...:-).

    Protože šedá je teorie a zelený je strom praxe, nyní se mrkneme na příklad, kde si Ajax můžete vyzkoušet v praxi: Typickým příkladem použití konceptu Ajax je Google Suggest. O této vychytávce, která je jako beta stále pod Google labs, jsem psal asi před půl rokem (viz Google napovídá). Bohužel jsem v té době nepátral, jak je to udělané. Vody web designu a developmentu nejsou tak stojaté jak se zdá a já jsem tak trošku zaspal dobu :-)

    Jak to teda funguje: Google stránka vypadá stejnÄ› jak ji důvÄ›rnÄ› znáte. ZaÄ?nete na klávesnici vyÅ¥ukávat heslo které hledáte a browser vám napovídá. Ale nenapovídá vám pomocí historie dotazů uložené ve vaÅ¡em browseru (to co jste hledali nÄ›kdy v minulosti). Napovídá Google a to tak, že po jednotlivých písmenkách na pozadí zavolá službu na Google serveru, která mu vrátí sadu nejÄ?astÄ›ji hledaných hesel podle písmen, které jste zadali. Podstatné je, že to funguje - a funguje to rychle. A vysledný dojem pro uživatele: stránka se ani nehne, tzn. nenaÄ?ítá se znovu celá, pouze se obnovují dropdowny s nabízenými hesly.

    Příklad jak použití Ajaxu vývojáři Googlu neuvádím nahodou. Google se Ajaxu chopil zodpovÄ›dnÄ› a je výkladní skříní Ajax aplikací. PosuÄ?te sami:

  • Gmail - nevím jak vám, ale lepšího web mail clienta jsem nevidÄ›l
  • Google Maps - neuvěřitelnÄ› svižné mapy - protože pÅ™i posunu po mapÄ› se natahují jen fragmenty map a neloadujete celé stránky, okolní fragmenty jsou tipuju nacachované
  • Google Groups
  • ...a urÄ?itÄ› to není vÅ¡echno...


    PokraÄ?ování příštÄ›: Zrovna zkouším AjaxTags, což je knihovna JSP tagů, která umožňuje použít jednoduché Ajaxové triky v JavaServerPages.

    Štítky:


  • 2005/05/10

     

    IT: JBuilder open sourcem


    Dneska jsem si pÅ™eÄ?etl, že se Borland ze zoufalosti rozhodl open-sourcovat JBuilder. Borland je ve ztrátÄ›, redukoval stavy. Spoléhá se na komunitu, která by mÄ›la pomoci udržovat API a pÅ™idávat nové funkce. Tím by se mÄ›ly snížit náklady na R&D. Příjmy by mÄ›ly plynout z poskytování podpory podnikovým zákazníkům (ne z prodeje produktu samotného).

    Co je v pozadí? Samozřejmě je to vítězné tažení Eclipsu.

    I když CEO Borlandu se tváří stále optimisticky - viz Ä?lánek ŽijeÅ¡ jenom tÅ™ikrát - bude to podle mÄ› mít Borland hodnÄ› těžké a osobnÄ› nedávám JBuilderu moc Å¡ancí.

    Zároveň je mi JBuilderu troÅ¡ku líto, protože to bylo moje první IDE. Díky práci na pluginu WASP Developer jsem si důkladnÄ› proÅ¡el každou verzi JBuilderu od verze 4 (s Porsche Boxster ve splash screenu ;-), 5, 6, 7, 9, X). VSUVKA: Jako malé ocenÄ›ní tohoto (dnes už dále nevyvíjejícího se) pluginu je pro mÄ› fakt, že samotný html/php/xml/... guru Jirka Kosek použil náš tehdehší plugin ve své diplomce na téma webové služby! ;-) Ale to jsem odboÄ?il.

    Otázka která mě napadá: můžete v dnešní době existovat firma soustředící se primárně na vývojové prostředí (IDE)?

    ...eclipse pod rouÅ¡kou open source, za zády sponzorovaný vÅ¡emocnou IBM zabíjí vÅ¡echny ;-) není to dumping? kdo jeÅ¡tÄ› zbývá? je ted Å™ada na intellij? Co na to jan tleskaÄ??...

    Štítky: ,


    2005/03/03

     

    IT: Excel v Jave? POI!


    Donedávna jsem považoval za jediný smysluplný formát dat XMLko. V souÄ?asnosti zjišťuji, že se ve svÄ›tÄ› jeÅ¡tÄ› nepodaÅ™ilo vymítit formáty typu *.xls (Excel Worksheet) Ä?i *.csv (Comma Separated Variables) - stále jsou tu ;-)

    V rámci projektu na kterém teÄ? pracuju jsem potÅ™eboval dostat z 10 megového Excel sheetu tisíce hodnot a transformovat je do výstupních CSV souborů. Podle výstupního souboru se liÅ¡ila kombinace sloupců a jejich transformace. SamozÅ™ejmÄ› že by to Å¡lo vyÅ™eÅ¡it a smést ze stolu rychlým sledem copy&pastů v Excelu a maximálnÄ› použitím nÄ›jakého makra.

    Dostávám se k jádru věci. Rozhodl jsem se pro řešení v javě. Zasvěcení asi vědí, že se k práci s Microsoft Office soubory používá open-source knihovna Jakarta POI.

    Takže moje poznatky: pro práci s Excelovskými tabulkami vás zajímá jen jedna Ä?ást POI - POI-HSSF. NaÄ?íst Excelovský dokument a vybrat z nÄ›j hodnoty které potÅ™ebujete je po rychlém nahlédnutí do Quick guidu záležitost pár minut. Co mÄ› potěšilo je, že to opravdu funguje.

    Jenom jsem musel pro naÄ?tení 10 MB XLS souboru jsem musel zvÄ›tÅ¡it heap VM (-Xmx196M zabralo).

    Další malou záludností je iterátor pÅ™es buňky v řádku (hssfRow.cellIterator()). Nevracel buňky tak jak byste Ä?ekali, ale v jakémsi fyzickém poÅ™adí a na v logickém. Zatím jsem nestudoval o co jde. StaÄ?í použít hssfRow.getCell(int).

    A nakonec abyste měli představu jak vypadá API sem dávám malý příklad:


    FileInputStream fis = new FileInputStream(xlsFile)
    POIFSFileSystem fs = new POIFSFileSystem(fis);
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    HSSFRow row = sheet.getRow(rowNumber);
    HSSFCell codeCell = row.getCell(COLUMN_CODE);


    ProstÄ› jednoduché a funkÄ?ní.


    Dále jsem potÅ™eboval jeden velký CSV soubor naÄ?íst a jiný zapsat.
    S tímto formátem POI nepracuje. Takže jsem pro zápis použil normální PrintWriter a pro Ä?tení knihovnu z ostermiller.org. K ní jedna malá poznámka - CSVParser vrací jen String[][], takže nebude zrovna moc vhodný pro veliké dokumenty.

    Štítky: ,


    2005/03/02

     

    IT: titulek okna v *.bat


    Dneska bych se s vámi chtÄ›l podÄ›lit o jednu maliÄ?kost, která mÄ› dnes potěšila ;) Je to vážnÄ› úplná maliÄ?kost. Týká se psaní dávkových souborů (*.bat, *.cmd) ve windowsech. Stavá se vám taky, že máte najednou otevÅ™ených Å¡est oken s příkazovou řádkou a zuÅ™ivÄ› mezi nimi pÅ™epínáte pÅ™es Alt+Tab a hledáte to jediné správné? Tak teÄ? už to bude jednodušší. Dodnes jsem netuÅ¡il že existuje příkaz title [string]. Je to asi tím, že jsem se tyhle příkazy uÄ?il na MS-DOSu 5.0. A to tam jeÅ¡tÄ› nebyl. Nebo ano? :-)

    Pro ty z Vás, co mají potíže vyznat se v oknech i po zmÄ›nÄ› titulků, existuje jeÅ¡tÄ› jedno Å™eÅ¡eni: použít color [XX], kde XX jsou hexa-Ä?íslice reprezentující barvy.

    Opakování je matka moudrosti.

    Štítky: ,


    2005/02/28

     

    IT: Apache vs. Skype


    V pátek jsem potreboval nÄ›co ukazovat na notebooku. Zákon schválnosti pravidelnÄ› zafunguje. Nebyl v síti. PÅ™inesete ho na místo, pustíte a ten nejjednodušší Ä?lánek systému zniÄ?ehonic pÅ™estane fungovat. Nemohl jsem pustit WWW server Apache 2:


    C:\Program Files\Apache Group\Apache2\bin>Apache.exe
    (OS 10048)Only one usage of each socket address (protocol/network address/port)
    is normally permitted. : make_sock: could not bind to address 0.0.0.0:80
    no listening sockets available, shutting down
    Unable to open logs


    No a bohužel nemáte moc Ä?asu na Å™eÅ¡ení tohoto problému. NaÅ¡tÄ›stí se to povedlo. Takže jak postupovat? První co mÄ› napadlo bylo že si port 80 obsadil Microsoft IIS. Jenže ten neběžel. Takže jsem si pustil utilitu TCPView z kolekce www.sysinternals.com Výborný pomocník. Z nÄ›j jsem už jednoduÅ¡e zjistil, že si port 80 obsadil Skype. Zajímavé. DÄ›je se to jenom v případÄ›, že notebook nemám v síti. Usuzuju z toho, že Skype zkouší pro vytvoÅ™ení spojení použít svoje standardní porty, ale když se mu to nepovede (notebook není v síti), obsadí si port 80 a i když se nikam nepÅ™ipojí a je ve stavu offline - zůstane viset na portu 80.

    Štítky: ,


     

    IT: Oracle a jeho služby ve windows


    Pokud používáte Oracle lokálně na svém PC tak jste si jistě všimli, že vám po jeho instalaci přibylo několik nových windows service. Jelikož je Oracle docela žrout paměti, vyplatí se u některých (všech) změnit způsob jejich spouštění (Startup Type) z Automatic na Manual.

    Oracle Tip Manage Oracle9i services under Windows vám na pár řádcích udÄ›lá jasno k Ä?emu která služba je a jestli se vám vyplatí jí spouÅ¡tÄ›t automaticky, ruÄ?nÄ› nebo nikdy.

    Na konci Ä?lánku jsou dva jednoduché skripty pro startování a stopování služeb Oraclu. UÅ¡etří vám zdlouhavé klikání v managementu Service.

    Štítky: ,


    2005/01/21

     

    IT: Maly kviz pro znalce batch filu - reseni


    Prinasim reseni kvizu, ktery jsem tu pred par dny publikoval.

    Pozdrzet vykovavani *.bat skriptu napr. na nekolik vterin neni zrovna jednoducha zalezitost. Na princip reseni prisel po nekolika iteracich prisel jako prvni Fil.

    Princip reseni je nasledujici. Protoze zadne pause [time] bohuzel neexistuje a ani choice /t:time uz ve Windows XP/2k nemuzete pouzit, musite si pomoci sami trosku vetsim hackem :-)

    Rob van der Woude poskytuje skript obsahujici reseni - v cyklu volate prikaz ping s nastavenym timeoutem proti neexistujici IP adrese:

    ping -n 1 -w [timeout] [neexistujici.ip.adresa]

    Chce to duvtip! :-)

    Štítky: ,


    2005/01/19

     

    IT: Maly kviz pro znalce batch filu


    Mam pro vas maly kviz. Jak napsat ve Windows batch filu (*.bat) smycku, ktera v kazde iteraci ceka rekneme 5 vterin. Jde mi o to cekani, nejde mi o tu smycku ;-)

    Štítky: ,


    2005/01/02

     

    IT: Refactoring


    Pres vanoce jsem cast volneho casu venoval cteni a prave docitam dobrou knizku Refactoring: Improving the Design of Existing Code od Martina Fowlera (Fowler je mimo jine autorem UML Distilled, super knizky o UML, ktera se mi dostala do ruky pred par lety).

    Knizka pojednava o refactoringu, neboli upravach existujiciho kodu za ucelem zvyseni jeho kvality aniz by tim vsak utrpelo jeho vnejsi chovani. Je pekne strukturovana: tzn. zacina tim proc je refactoring uzitecny, jak ho praktikovat, co je k nemu potreba. Dulezite jsou ale dve casti knihy - seznam tzv. bad smells a seznam jednotlivych refactoringu, ktere tyto zapachy odstranuji. Vsechno je doplnene srozumitelnyma prikladama v Jave.

    Jak jsem si tak procital jednotlive bad smelly, vybavovaly se mi casto i classy, na kterych bych jednotlive zapachy :-) dobre ilustroval :-)

    Pokud zrovna nemate tuto knizku po ruce, doporucuju se podivat do helpu ke svym IDE. Idea, Eclipse i JBuilder refactoring uz dnes podporuji a velmi ho zjednodusily - vetsinou na pouhou klavesovou zkratku (kdyz vite co oznacit ;-)). Pro Ideu existuje pekny tutorial ktery ukazuje refactoring pomoci tohoto IDE.

    Koho zajima refactoring vic, muze se mrknout na web ktery shromazduje veskere materialy na dane tema: www.refactoring.com. A kdo chce, muze se subscribnout na RSS feed ktery informuje o novinkach na webu.

    Tabulka SmellsToRefactorings ukazuje seznam nejcastejsich bad smellu a zaroven prinasi rady jak se jich pomoci refactoringu zbavit.

    No a nakonec abecedni seznam refactoringu s jejich popisy.

    Štítky: ,


    2004/12/23

     

    IT: WseWsdl2.exe troubles


    I would like to point out few problems which I've experienced during my experiments with WseWsdl2.exe tool. I am using WseWsdl2.exe from Microsoft Web Services Enhancements 2.0 SP2. The WseWsdl2.exe is WSDL to SoapClient Tool. It should replace current .NET Wsdl.exe tool. What I find quite disappointing are the error messages produced by this tool. WSDLs we use in our project are compilable without any problems with Wsdl.exe but WseWsdl2.exe complains. What is worse, that the error messages are very unclear. Documentation didn't help us, neither the Google search. We had to take our WSDLs and remove element after element to find out what's wrong with them. Here are the findings, maybe it will help someone having similar troubles. This is the reason for this post.


    First problems occur when the WSDL definition contains more than one message part in the (SOAP) message. But the error message says this:



    An error occurred processing this WSDL. More information:
    System.Exception: Invalid WSDL file from SoapService
    at ClientGen.ClientGen.GetBindingType(...)
    at ClientGen.ClientGen.WriteCSOperationBinding(...)
    at ClientGen.ClientGen.WriteOperationBinding(...)
    at ClientGen.ClientGen.WriteClass(...)
    at ClientGen.ClientGen.GenerateCode(...)
    at ClientGen.ClientGen.GenerateCode(...)
    at ClientGen.Class1.Main(String[] arguments)

    I know that WSDLs describing messages with more than one message part (referring element) in SOAP body should not be used. It is stated in the WS-I Basic Profile 1.1. We can change the WSDL to wrapped-literal, no problem. But the tool should not produce this general error!


    The second problem I would like to point occurs when the WSDL contains unsupported extension element. We are using custom extesion elements within the soap:binding. The extension element present in our WSDL is not marked with wsdl:required="true". So it should be silently ignored if the consumer does not understand him or cannot process him (as stated in the WS-I Basic Profile 1.1, which also clarifies and tights up the rules from the WSDL specification). WseWsdl2.exe does not ignore them - but fails:



    An error occurred processing this WSDL. More information:
    System.InvalidCastException: Specified cast is not valid.
    at ClientGen.ClientGen.WriteCSOperationBinding(...)
    at ClientGen.ClientGen.WriteOperationBinding(...)
    at ClientGen.ClientGen.WriteClass(...)
    at ClientGen.ClientGen.GenerateCode(...)
    at ClientGen.ClientGen.GenerateCode(...)
    at ClientGen.Class1.Main(String[] arguments)

    Again, the error message is very, very unclear! For me it seems that the level of WSDL specifications support is much lower than it was in previous version. Without any warning in the documentation. Or Am I missing something?


    Štítky: ,


    2004/12/11

     

    Google napovida


    Nechtel bych na svem blogu sklouznout k tomu, abych tady svymi prispevky automaticky vynasel do nebe velky a neskodny Google pokazde, kdyz prijde s necim novym. Osobne si myslim, ze se v budoucnu muzeme dockat situace, kdy budou mit lidi na Google spadeno podobne jako dneska na Microsoft. Nicmene, prejdeme k veci :-)

    Google Suggest prinasi dalsi vylepseni ve vyhledavani na internetu. Vlastne to neni nic jineho nez autocomplete - automaticke doplnovani. V okamziku kdy zadavate do formulare vyhledavaci stranky Googlu svuj dotaz, on vam napovida. Muze vam to usetrit psani, ale taky vidite, jaka souslovi lide nejcasteji hledaji.

    Fuknce autocomplete je vetsine uzivatelum PC dobre znama. Setkate se s ni napriklad kdyz zadavate adresu do browseru nebo treba kdyz pisete adresu prijemce v emailu. Vlastne logicky - pouziti i ve vyhledavani v internetu - udelal az Google. Vsadim se, ze se do roka se s touto featurou setkame taky v nejednom z ceskych vyhledavacu.

    Co me na tom zarazi jsou dve veci: zpusob jakym byl tento napad prenesen do praxe a taky - ze to vazne pekne funguje.

    Jak autor myslenky pise, cela vec ho napadla behem obeda. V Googlu maji udajne pravo venovat az 20% sveho pracovniho casu vlastnim projektum. To je jiste velmi lakave (zde bych jen podotknul, ze se nelze domnivat, ze by vam Google platil za vase soukrome projekty, ale jde o projekty ktere jsou ve vysledku ve vlastnictvi company). Takze za par mesicu svuj napad dovedl do konce.

    To ze to funguje skutecne pekne si zkuste sami. Zadejte si jedno slovo a za chvilku se dozvite, v jakych souslovich se nejcasteji vyhledava. Kdyz vezmeme v uvahu kolik miliard stranek Google indexuje a za jakou chvilicku vam nabidne relevantni slova, tak je to vazne k neuvereni. Je jasne, ze napriklad domnivat se, ze po napsani slova Milan se dockam sveho prijmeni, je zatim zcestne :-) I kdyz nekteri znami jiz na Googlu maji slusny page rank, takze u nich to funguje.

    Takze, vyzkousejte si sami!

    Štítky: ,