Java podcast #20 - AJAX, DWR, Comet, Eclipse RAP

Mojí podcastovou prvotinu, jejímž tématem byl AJAX, DWR, Comet a Eclipse RAP jsem natáčel společně s Roumenem, Dagim, Filemonem a Michalem Nikodímem.

Mým úkolem bylo představit frameworky jQuery a DWR.

Více informací o podcastu najdete v oficiálním článku CZ Podcast 20 – AJAX, DWR, Comet, Eclipse RAP – podcast.

Přímý odkaz pro stažení podcastu – CZPodcast-Volume-20 (mp3).

Celý článek Přidat komentář 21. January 2008

Zajímavé linky 13 - vyšla Zend Framework in Action, Silverlight v PHP, Apache Wicket 1.3, o kešování

Celý článek 1 komentář 12. January 2008

Moje plocha - na víkend pro odlehčení

Tento článek berte spíše jako malý víkendový vtip. Všichni známí i méně známí bloggeři ukazují na internetu svoje „plochy“, a tak tak dnes pro pobavení udělám i já.

A proč říkám pro pobavení? Ono nudnější plocha než ta moje vlastně asi ani není. Žádné ikonky, žádné úžasné pozada…prostě nic.

Za zmínku stojí jenom ta podlouhlá věc uprostřed – Launchy. Nemám ikonky rád. A Launchy slouží jako takové okno do počítače. Stačí stisknou klávesovou zkratku (defaultně ALT + mezera) a napsat několik úvodních písmen programu, který hledáte…v sekundě je nalezen a enterem ho spustíte.

V praxi to celé trvá maximálně tři sekundy. Launchy je silně chytlavá věc. Jednou ho uvidíte u někoho v akci a hned ho musíte mít taky. Viď Edo :)

Jako OS používám Windows XP s motivem Aquanox.

Celý článek 8 komentářů 5. January 2008

Konference PHP frameworky zima 2008 - další akce pod hlavičkou české PHP Group

Formující se česká PHP Group po své prvotině PHP seminář podzim 2007 chystá další akci.

Její název je Konference PHP frameworky zima 2008. Na výše uvedeném odkaze najdete detailní informace o akci včetně pokynů k registraci.

Videozáznamy ze všech přednášek, které se konaly v rámci PHP semináře podzim 2007 lze najít na stránkách AVC pod názvem PHP Seminář.

Nevím jestli webem proběhla informace o skvělé vánoční besídce, která se konala 15. 12. v pizzerii Fresco Vento na Palackého náměstí od 19h.

Přítomen byl například Štěpán Bechynský – známý evangelista Microsoftu. Celý večer bylo napětí udržováno mimo jiné i informací, že „možná přijde i Jakub Nešetřil“ :)

Celý článek 4 komentářů 2. January 2008

Jak se připravit na SCWCD

K Vánocům jsem si dal malý dárek – certifikaci Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4 (SCWCD).

Vzhledem k tomu, že s webovou javou dělám skoro tři roky řekl jsem si, že by bylo dobré si své znalosti ověřit. Poslední tři týdny jsem se po večerech (a víkendech) připravoval na zkoušku a v tomto článku bych chtěl stručně popsat zdroje, ze kterých jsem čerpal (ať to nevypadá jakou prostoduché plácání se po zádech).

Co se obtížnosti zkoušky týce, mám stejný názor jako Josef Petrák – zkouška pro mě byla lehčí než základní Sun Certified Programmer for the Java 2 Platform, i když znalostí k ní musíte mít více.

Co jsem používal při přípravě na zkoušku

Používal jsem jak knihy, tak webové zdroje.

Knihy

Webové zdroje

Závěr (s přáním)

Slovo závěr má pro mě v tuhle chvíli několik rozměrů – kromě toho zřejmého (závěr článku) je to i závěr roku a s tím související přechod do nové práce. Doufám, že tam budu moci mimo jiné využít i znalosti z dnešní zkoušky.

Se závěrem souvisí i nový začátek. Všem developerům chci popřát vše nej do Nového roku jak v rovině osobní tak profesní.

Celý článek 8 komentářů 20. December 2007

Selenium - mocná zbraň na akceptační testy

Tímto článkem odmáznu jeden ze svých restů. O „Seleniu“ chci napsat už několik měsíců. Začnu možná trochu netradičně – uvedením toho v čem nám Selenium může pomoci.

Představte si že jste při vývoji nového webu postupovali zcela správně:

  • máte dokonalou analýzu webu
  • napíšete si unit testy
  • napíšete si integrační testy
  • vyvíjíte iterativním způsobem

Všechny vyjmenované body vám jistě pomůžou k tomu, aby výsledný web fungoval zcela bez chyb. Pro unit a integrační testy dokonce nebyl potřeba ani prohlížeč. Říkám dokonce, ale v tom tkví právě ten problém. I při dodržení výše uvedených bodů se může stát, že webová aplikace chyby obsahuje. Webovou aplikaci je syrově řečeno nutné proklikat a ujistit se, že vše chodí tak jak má.

Tímto proklikáním se ověří následující aspekty:

  • funkce javascriptu
  • funkce AJAXu
  • správnost vygenerovaného HTML kódu
  • funkce business logiky na serveru

První dva body navíc mohou záviset na použitém prohlížeči.

Takové proklikání je nutné dělat jak při vývoji tak po dokončení webu (při jeho úpravách, migracích na jiný hosting apod.). Selenium je nástrojem, které nás této nudné práce může ušetřit. Pomocí něj je možné nahrát sekvenci příkazů do souboru a ten pak v Seleniu opět spustit. Selenium v zásadě dokáže simulovat všechny běžné aktivity uživatele v prohlížeči – např. psaní znaků, kliknutí (i vícenásobné) myší atd.

Produkty z rodiny Selenium

Selenium není jeden nýbrž celá rodina produktů. V této části si je představíme.

Selenium Core

Selenium Core je testovací nástroj běžící přímo v browseru. Slouží pro spouštění vašich testů. Ty je potřeba nejdříve vytvořit pomocí Selenium IDE. Selenium Core je naimplementováno pomocí sady HTML stránek a javascriptových souborů. Selenium Core pak nahrajete přímo na testovaný server (zabírá asi 820 KB). Ještě zbývá na server nahrát samotné testy. Více viz příklad.

Selenium IDE

Selenium IDE je naimplementováno jako rozšíření Firefoxu (zabírá asi 316 KB). Je to nástroj, pomocí kterého nahráváte, editujete a také spouštíte testy. Takto nahrané testy jsou uloženy ve formátu XHTML jako soubory na disk.

Selenium IDE

Selenium RC

Selenium RC (Selenium Remote Control) je nástroj umožňující psát selenium testy přímo v programu (Java, .NET, Perl, Python, PHP, Ruby) a ty pak spouštět pomocí Selenium serveru což je aplikace, která běží v operačním systému a spouští testy ve vybraném prohlížeči pomocí Selenium Core.

Více informací:

Floyd

Floyd je javovská knihovna. Přímo pomocí java API je možno kromě psaní testů i jejich spouštění (např. Jetty server) a mít přístup k requestu, responsu…session. Vytvořené testy je pak možné spustit v rámci unit testů. Přiznám se, že s Floydem nemám praktické zkušenosti. Ani při letmém pohledu do Googlu jsem mnoho informací nezjistil. Zde je odkaz na tutorial (je ukázáno i propojení se Spring Frameworkem) – How to Unit Test the User Interface of Web Applications (PDF, 696 KB).

Příklad – otestování vChatu

Připravil jsem krátkou ukázku testu, který slouží pro otestování přihlašování a vkládání nových vzkazů do vChatu. HTML kód, který vidíte níže je samotný test, který jsem nahrál pomocí Selenium IDE a poté uložil na disk.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>vavru-ajax-test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">vavru-ajax-test</td></tr>
</thead><tbody>
<tr>
        <td>open</td>
        <td>/</td>
        <td></td>
</tr>
<tr>
        <td>clickAndWait</td>
        <td>link=Download</td>
        <td></td>
</tr>
<tr>
        <td>clickAndWait</td>
        <td>link=vChat</td>
        <td></td>
</tr>
<tr>
        <td>click</td>
        <td>//a/strong</td>
        <td></td>
</tr>
<tr>
        <td>waitForPopUp</td>
        <td>ajaxChat</td>
        <td>30000</td>
</tr>
<tr>
        <td>selectWindow</td>
        <td>ajaxChat</td>
        <td></td>
</tr>
<tr>
        <td>type</td>
        <td>nick</td>
        <td>prezdivka</td>
</tr>
<tr>
        <td>clickAndWait</td>
        <td>//input[@value='Vstoupit do chatu']</td>
        <td></td>
</tr>
<tr>
        <td>waitForTextPresent</td>
        <td>Přihlášen: prezdivka</td>
        <td></td>
</tr>
<tr>
        <td>assertTextPresent</td>
        <td>prezdivka vstoupil do chatu</td>
        <td></td>
</tr>
<tr>
        <td>type</td>
        <td>message</td>
        <td>ahoj svete</td>
</tr>
<tr>
        <td>assertTextPresent</td>
        <td>prezdivka: ahoj svete</td>
        <td></td>
</tr>
<tr>
        <td>keyPress</td>
        <td>message</td>
        <td>\13</td>
</tr>
</tbody></table>
</body>
</html>

Test lze spustit pomocí Selenium Core na adrese: http://vavru.cz/se­lenium-core/TestRunner­.html?test=tes­ts%2FVChatSui­te.html&resul­tsUrl=..%2Fpos­tResults (balast v URL pouze kvůli automatickému načtení testovací suity). Testováno v prohlížecích IE 7, Firefox, Opera.

K čemu ještě může být Selenium dobré

Ve Venturii spravujeme pro jednoho zákazníka web a součástí tohoto servisu je i vytváření e-mailových schránek. Samotná firma si v administrativním rozhraní nastaví požadavky na vytvoření nových e-mailových schránek a my je pak vytvoříme. Těch e-mailů bývá někdy i stovka týdně a jejich vytváření je hodně časově náročné. Vytvoření jedné schránky zabere minimálně dvě minuty. Nejlepším řešením by samozřejmě bylo celé vytváření automatizovat zcela – po zadání požadavku vytvořit schránku automaticky. Tohle řešení se ukázalo jako časově (a finančně) náročné.

Nakonec jsme na tento úkol použili Selenium. Vytvoření nového e-mailu totiž spočívá v přihlášení se přes webové rozhraní do administrace e-mailů a v něm nové e-mailové schránky vytvořit. I nahrál jsem si tuto činnost do seleniového testu. Podle něj jsem pak napsal v PHP spript, který mi vyexportuje vytvoření všech e-mailů do seleniového testu. Jak prosté. Vytvoření 100 nových e-mailů teď zabere doslova pár desítek sekund:

  • spustí se PHP skript, který generuje seleniový test
  • výstup skriptu se uloží jako soubor na disk
  • test se spustí (pomocí Selenium Core nebo Selenium IDE)

Závěr

Selenium má dvě obrovské výhody: nezávisí na serverside technologii a lze pomocí něj otestovat aplikaci v libovolném browseru. Selenium používáme při vytváření a provozu všech nových webů. Nic totiž nepomůže vašemu klidnému spánku tolik jako fakt, že webová aplikace při releasnutí a všech následných úpravách stále prochází testy a je zcela funkční. Jsou tu totiž věci, které jako vývojář ovlinit vždy nemůžete – například nastavení serveru, na kterém webovou aplikaci hostujete.

Odkazy

Celý článek 3 komentářů 16. December 2007

Rozměry objektů ve Flashi

V dnešním článku bych chtěl upozornit na pár špeků, které se týkají práce s objekty ve Flashi – přesněji s nastavováním jejich rozměrů.

Když jsme se rozhodli v Gopasu přejít při vytváření e-learningu z platformy Macromedia Director na Adobe Flash tak trochu jsme tušili, že to nebude uplně jednoduchá cesta. Museli jsme řešit spousty špeků, které často nemají řešení, ke kterému se dá dospět nějakou rozumnou úvahou. Kromě práce s textfieldy je lahůdkou práce s objekty.

V našich e-learningových lekcích často používáme shapy – přesněji řečeno objekty vytvoření pomocí Rectangle tool. Pomocí JSFL si vytvoříme knihovní prvek s danými vlastnostmi (barva výplně, barva a šířka okraje) a ten pak umísťujeme do stage – měníme pouze umístění a rozměry instance.

Předevčírem jsem v našem interním buglistu našel od vývojářů tuto poznámku – Shapy jsou umístěny o několik pixelů mimo, jsou menší. Po ověření jejich tvrzení jsem začal hledat chybu ve svém kódu…ale bez výsledku. Vyzkoušel jsem několik způsobů pro vytváření instancí shapů ve stagi, ale výsledek byl stále stejný – špatné rozměry. Shapy se zobrazovaly menší – a to i o několik desítek pixelů. Google taky nepomohl, ale pak jsem po několika hodinách laborování našel řešení – shapy je nutné udělat hodně velké. Šířka i výška knihovního prvku musí být větší než šířka i výška instance na stagi. Pak jsou rozměry v pořádku. Flash umí správně rozměry pouze zmenšovat.

Na obrázku vidíte instance tří různých knihovních prvků, kterým je pomocí ActionScript nastavena stejná velikost – výška 90 pixelů, šířka 800 pixelů. Skutečnost je ovšem jiná – správné rozměry má pouze třetí objekt. Zdrojový soubor – freaky-flash-shape.fla (FLA, 25 KB).

Závěr

Samostatná kapitola je práce s JSFL – tam se Flash vykazuje odlišné chování ve Windows XP a ve Vistách. Zajímavým oříškem je též detekce zmáčknutých kláves – lze přidat posluchače pro detekci stračených kláves. Problém nastane při kombinaci Windows Vista + Internet Explorer 7 – kombinace kláves CTRL+A(C, V, X, Z…) do Flashe neprojde – resp. nedojde k události onKeyDown. Naštěstí i tohle jde různými workaroundy řešit – ale o tom někdy příště.

Flash je úžasná hračka, ale dokáže taky pěkně potrápit – nebýt nápadu se zvětšením rozměrům knihovních prvků lámu si s tím hlavu ještě teď.

Celý článek 3 komentářů 28. November 2007

Zajímavé linky 12 - Spring 2.5, SWF 2.0, Czech PHP User Group, OXM, Selenium grid

Celý článek Přidat komentář 20. November 2007

Moving to Avedya

V dnešním (pro mě veledůležitém) článku si paradoxně vystačím s pár větami.

Po kusu života stráveném v Gopasu a Venturii odcházím do firmy Avedya. V obou firmách pracuji víc než šest let – a to kus života určitě je.

V posledních letech jsem měl možnost seznámit se se spoustou technologií, platforem, programovacích jazyků. Na samém začátku bylo PHP, HTML a CSS. Následovalo Lingo, C#, ActionScript, JavaScript, AJAX a Java.

Nemůžu říct, že by se mi jednotlivé jazyky nějak pletly…ale rozhodl jsem se, že přišel čas si zvolit prioritu. A mojí prioritou je Java.

Poslední dobou jsem navštívil asi 10 firem zabývajících se tvorbou webových aplikací v Javě a Avedya na mě udělala nejlepší dojem.

Den D bude 1. ledna 2008.

Celý článek 6 komentářů 13. November 2007

Co se počítá?

Lukáš Křečan v článku Znalosti a zkušenosti píše několik věcí, na které mám trochu jiný názor. V následujících řádcích budete mít možnost se ho dozvědět.

Znalosti jsou laciná věc?

Znalost nejsou laciná věc. Důkazem jsou například kurzy v počítačové škole Gopas, kdy některé týdenní stojí i více než 50 000 Kč. Myslím, že by firmy svoje zaměstnance na tato školení neposílaly, kdyby se jim to nevyplatilo.

Když chodíte do školy též to není zadarmo – někdo vám musí platit školné (vlastně to se asi dnes ve většině případů neplatí), kolej, městskou hromadnou dopravu, stravování.

Když si doma čtete knížku už vůbec to není zadarmo. Pro mě osobně je čas strávený s knížkou nesmírně cenný…jednoduše protože ho mám na tuto činnost strašně málo. Chodím pro práce, do posilovny, sem tam zaběhat, trávím čas se svojí ženou, prací na baráku…knihu si otevřu v noci když Kačenka jde spát (kolem 22.00 hod) – ale to u ní zase hned usnu, jsa unaven celodenní činností.

Relativně snadno jdou nabýt znalosti na takové úrovní aby člověk byl schopen udělat zkoušku na vysoké škole. Sám si na ty (tři roky vzdálené) časy pamatuju – nebyl problém dělat tři zkoušky týdně. Na takovou Fyziku I na Strojní fakultě ČVUT se dalo naučit za den a půl (když člověk chodil na přednášky). O na obávanou dynamiku se nechalo naučit za týden.

Je ale velký rozdíl naučit se něco na zkoušku (to je relativně laciné) a naučit se něco tak, aby se tím mohl člověk živit – denně to používat. Když se vrátím k té dynamice musel bych jí studovat několik let než bych o sobě mohl prohlašovat že jsem na ni skutečný odborník.

Zkušenosti jsou to co se počítá?

Je to trošku jako s tou slepicí a vejcem. Buď můžu nejdřív něco nastudovat a až potom si to vyzkoušet v praxi a nebo nemusím studovat nic a novou věc mi přímo ukáže můj kolega. Když takového kolegu mám je to uplně ten nejlepší případ. Když je skutečně dobrej může nás za několik dní naučit stejné množství nových věcí jako jsme se naučili sami za několik posledních let. Otevřít vám oči.

A co je cennější? Doma si přečíst knížku nebo jiné materiály a pak si v praxi sám vše vydřít a naučit se…nebo se to samé se zlomkem úsilí a stráveného času dozvědět od někoho zkušenějšího.

Myslím, že správná odpověď na to co je cennější neexistuje. Cenné je jak mít dobrého kolegu a být schopen rychle vstřebávat jeho rady, tak mít trpělivost se samostudiem a vlastními pokusy. Špičkový programátor musí umět oboje.

Z mojí praxe

I pročítal jsem si před rokem některé články o AJAXu, hrál jsem si s knihovnou jQuery. To trvalo asi týden. Za několik měsíců potom přišel požadavek na vytvoření pár AJAXových featur pro jeden web. I když jsem neměl žádné praktické zkušenosti nebyl problém featury naprogramovat. Důležité bylo mít základ – vědět jak AJAX funguje, jaké frameworky existují, v čem je který dobrý. K tomu člověk nepotřebuje žádné praktické zkušenosti. Úplně postačí praktické zkušenosti někoho jiného.

Strašně se mi líbí jedno příšloví – Moudrý člověk se učí z chyb druhý a hloupý ze svých. Já jsem si ho upravil: Moudrý člověk se učí z chyb druhých, průměrný člověk ze svých a hloupý člověk se nepoučí ani z vlastních chyb.

Chci tím říct, že samostudium, vlastní implementační pokusy, předání zkušeností od kolegů (párové programování, rozprava nad pivkem) – to vše jsem cesty, kterými lze nabýt zkušenosti, nebo schopnosti, znalosti chcete-li. Tyto cesty jsou do velké míry vzájemně nahraditelné.

Když už jsme u těch zkušeností – tady je trochu větší pravděpodobnost že se dostaneme na zcestí – že se něco naučíme dělat blbě a pak to děláme blbě celý život. Je to jako když člověk chodí do posilovny a má špatnou techniku při takovém základním cviku jakým je dřep s velkou činkou. Trvá měsíce než se člověk naučí provádět cvik správně.

Kdežto když čteme nějakou knihu je, podle mého, o trochu menší šance že její obsah pochodíme nebo budeme interpretovat chybně. To jejímu obsahu spíš nebudeme rozumět vůbec.

Závěr

Když už byla řeč o těch rozečtených knihách – já teď louskám Mastering Enterprise JavaBeans 3.0. Vlastně po mně doteď jejich znalost nikdo nevyžadoval…ale až přijde ten čas budu připraven :) A budu si zatraceně vážit každé přečtené stránky.

K otázce z nadpisu – Co se počítá? – bych dodal asi tolik – Počítá se když má člověk (pozor – teď přijde otřepaná fráze) chuť učit se nové věci. Právě jsme do firmy přijali nového programátora a je mi uplně jedno jestli má víc těch laciných znalostí nebo těch cenných zkušeností. Vtip je v tom, že bude pracovat s novým frameworkem a jediná důležitá věc (v krátkodobém horizontu) je to jestli mu to jednoduše půjde nebo nikoliv. A jde mu to…

Celý článek 4 komentářů 10. November 2007

Novější články Starší články


Kategorie

Odkazy

Zdroje

Locations of visitors to this page