Přeskočit na hlavní obsah
  1. Tags/

Knihy

2012


SOA Patterns, kniha

·2 min
SOA je široké téma a kde kdo si do něj schová kde jakou webovou službičku. Určitě proto není na škodu se občas trochu ochytřit a zjistit, "jak se to správně dělá". Jednou z knižních alternativ, po které se dá sáhnout je počin mého oblíbeného vydavatelství Manning, které čersvě vydalo knihu SOA Patterns jejímž autorem je Arnon Rotem-Gal-Oz.

Hned na úvod je potřeba říct, že titul knihy je zavádějící. Daleko přesnější by byl název "Distributed Systems Patterns" s podtitulem "Taking SOA into Account". Nicméně kniha rozhnodně stojí za přečtení a je vhodným doplňkem k jiným "patternovým" knihám. Pokud byste chtěli opravdu SOA patterny, je pravděpodobně jediným dostupným titulem na trhu SOA Design Patterns od Thomase Erla.

Co v knize najdeme? Kniha sleduje klasické schéma návrhových vzorů, takže každý vzor je popsání pomocí sekcí: problém, řešení, technologické mapování a atributy kvality. Vzory (celkem jich je 26) jsou pak seskupeny do jednotlivých kapitol:
  • Foundation structural patterns
  • Patterns for performance, scalability and availability
  • Security and manageability patterns
  • Message exchange patterns
  • Service consumer patterns
  • Service integration patterns

Následují kapitoly s anti-patterny, case study a úplným závěrem je zajímavá kapitola, kde se SOA srovnává s jinými architekturními styly: REST, Cloud computing a Big data.

Jak už jsem psal, SOA je široké téma, takže kniha jej pokrývá pouze z části. Vzhledem k tomu, že titul vyšel u Manningu, tak nepřekvapí, že většina vzorů je "nízkoúrovňových" tzn., že je využijete, pokud bude servisní architekturu implementova from-the-scratch. Tomu odpovídají i příklady uváděné z autorovy praxe - systém pro námořní hlídkování, vyhledávač videí apod., čili dosti specifické systémy, které vyžadují dobrou performance a těžko by se na ně aplikovalo nějaké krabicové řešení.

Pokud ovšem sáhnete po nějaké hotovém/předpřipraveném řešení (a nemusí to být zrovna nějaké dělo od Oracle nebo IBM, ale klidně třeba Apache Camel nebo ServiceMix), tak už tam většina vzorů bude naimplementovaná "pod kapotou". Ovšem samozřejmě, že neškodí vědět, jak to tam sviští.

Technologické blogování

·3 min
Recenze knihy o technologickém (odborném) blogování. Aneb jak se z neznámého, katatonického bloggera stane celosvětová hvězda softwarového světa, vydělávající miliony dolarů. 😎

Management za zavřenými dveřmi

·4 min
Když mám problém, sáhnu po knize. Samozřejmě, chytrá kniha sama o sobě nestačí. Ale pro mne je to dobrý odrazový bod, jak se zorientovat v neznámých vodách. Plavat už člověk musí sám.

Když se řeší technologické věci, bývá to většinou jednoduché, často zábavné, někdy frustrující. Když se řeší problémy s lidmi, bývá to většinou složité, často frustrující a hlavně - nejednoznačné.

Problém podobný tomu aktuálnímu jsem řešil cca před rokem - přišel jsem jako team leader do týmu vývojářů. Tým nebyl zrovna vstřícně naladěn, někteří členové byli až nepřátelští. Protože jsem podobnou situaci zatím nikdy neřešil, koupil jsem si tematickou knihu (viz post (Ne)funkční tým) a zkusil jsem se s tím (z dnešního pohledu bych řekl, že neúspěšně) poprat.

Nevstoupíš dvakrát do téže řeky. Takže po roce: stejná role (teamleader), jiný tým (nesrovnatelně pozitivněji naladěn), podobný projekt (integrace na middlewaru) a úplně jiný problém. To si vám takhle týmlídruju, v týmu mám pět lidí, 50 % času věnuju řízení (takový ty JIRY, statusy a tak), 50 % věnuju vývoji. Radost pracovat. (Pozor, teď přijde zápletka.) Najednou: BUM, PRÁSK! Tým se ztrojnásobí! Nekecám, 16 lidí?!? Navíc, byť to téměř všichni byli seniorní javisti, z hlediska použité technologie a architektury (SOA), byli v podstatě juniorní a náběhová a učící křivka byla velmi dlouhá (2 měsíce).

Šestnáct lidí je opravdu hodně. Maximum, co mám teoreticky a empiricky ověřeno, je deset a člověku to zabere 100 % času. Na nějaké kódování může zcela zapomenout. Šestnáct lidí, to už není teamleading, to už je čistý management. Ehm. Já, excelentní vývojář ;-) a management? Jak říkám: když mám problém, sáhnu po knize.

Vybral jsem si titul Behind Closed Door, jejíž podtitul slibuje odhalit Secrets of Great Management. Nevím, jestli se dodržováním principů uvedených v knize, stane člověk skvělým manažerem. Ale to ani nebyl můj cíl. Chtěl jsem si jen ověřit, že některé věci dělám správně, že v dobré víře nedělám chyby a taky si trochu rozšířit repertoár.

Ostřílení matadoři by asi nad radami v knize mávli rukou, že to není nic nového, je to samozřejmost atd. Ano, ony to opravdu jsou jednoduché věci. Ale to asi nejtěžší na tom je, být konzistentní a perzistentní :-)

Kniha používá osvědčený formát - fiktivní příběh fiktivního manažera (který přijde nově do společnosti, vyřeší všechny problémy a všichni jsou šťastný a firma vydělá balík), prokládaný konkrétními tipy a postupy jak danou věc dělat/řešit. V průběhu příběhu jsou postupně probírána témata jako: delegování, prioritizace, zpětná vazba, koučování, one-on-one pohovory, prosazování vlivu apod.

Pro mne byly z knihy nejpřínosnější dvě témata. Jednak jsem se utvrdil v tom, že je důležité dělat one-on-one pohovory a držet je pravidelně. Už nějaký čas je dělám ve všech týmech a myslím, že to je jedna z věcí, která velmi podstatně zvedne důvěru v týmu. A důvěra to je základ, na kterém je dobrý tým postaven.

Druhým podstatným tématem pro mne byla zpětná vazba a přesněji korektivní zpětná vazba. Možná to znáte - lidi v týmu pracují většinou dobře, ale jeden/dva z nich podávají slabší výkon. Je to delikátní situace, vždycky je tu nějaký důvod, proč tomu tak je. Pokud má člověk zájem (a je mu to důstojně podáno), často se dají překážky, které brání kvalitní práci odstranit. V knize je popsáno, na co si dát pozor, aby se komunikace nepřeklopila do iracionální roviny. A taky, kdy to už nemá smysl řešit.

Komu bych knihu doporučil? Určitě začínajícím teamleaderům. Byť není zaměřena na technické vedení lidí a projektů se dotýká jen zlehka, je to dobrý začátek, protože jako teamleader budete komunikovat primárně se svým týmem a sekundárně s projektem a jinými týmy. Doporučil bych ji i pokud máte, tak jako já, nějakou tu teamleaderovskou zkušenost za sebou. Vždycky je totiž něco nového, co se dá naučit a stávající zlepšit. Třetím doporučením je pak edice, v které  knížka vyšla - vydavatelství The Pragmatic Programmers je zárokou kvalitní softwarová literatury a mne nezklamala ani tentokrát.

No a jak se vyvinul můj v úvodu zmíněný problém? Tým se mezitím stabilizoval a taky se smrsknul na rozumnou úroveň deseti lidí. Držím pravidelné one-on-one pohovory jednou za měsíc. V jednom případě jsem si vyzkoušel korektivní zpětnou vazbu s následným dohledem, což nakonec, bohužel, vyústilo v odchod daného člověka z týmu. Taky jsem, s těžkým srdcem, musel delegovat několik Proof of Concept, na který jsem se moc těšil. Tak snad to aspoň pomohlo někomu jinému. Je toho samozřejmě daleko víc, co dělám (a co je potřeba dělat), aby jsme měli dobrý tým. Uvedl jsem pouze věci, které přímo souvisí a jsou tématy představené knihy.

Certifikace Java EE 6 Web Services Developer

Tak nějak jsem si poslední dobou zvykl, dělat do roka dvě certifikace (asi mi chybí školní dril :-) Takže co to bylo tentokrát? Honosný název, který se nyní skví v mém CV zní: Oracle Certified Expert, Java Platform, Enterprise Edition 6 Web Services Developer, zkráceně (ve stylu někdejších Sunovských certifikací) OCWSD.

Certifikace občas budí (zbytečné) vášně, takže základní otázka asi je: je to vůbec k něčemu? Pro mne je tím největším benefitem, že jsem se něco nového (do hloubky) naučil. A musím říct, že OSWSD je tomto směru opravdu hodnotná. Byť web servisy mastím cca poslední tři roky, ať už v Javě (JAX-WS, Spring WS nebo Axis), nebo v rámci SOA (WebSphere Message Broker, Oracle SOA Suite), tak během přípravy na certifikaci jsem dozvěděl spoustu nových věcí (třeba SOAP Message Handlers) a "dopochopil" lecos již známého.

Témata, která zkouška obsahovala jsou následující:
  • Create an SOAP web service in a servlet container
  • Create a RESTful web service in a servlet container
  • Create a SOAP based web service implemented by an EJB component
  • Create a RESTful web service implemented by an EJB component
  • Configure JavaEE security for a SOAP web service
  • Create a web service client for a SOAP based web service
  • Create a web service client for a RESTful web service
  • Create a SOAP based web service using Java SE platform
  • Create handlers for SOAP web services
  • Create low-level SOAP web services
  • Use MTOM and MIME in a SOAP web service
  • Use WS-Addressing with a SOAP web service
  • Configure Message Level security for a SOAP web service
  • Apply best practices to design and implement web services

Protože na zkoušku není žádný oficiální certifikační guide, prošel jsem trošku širší okruh materiálů. V praxi jsem zatím neměl nikdy možnost dostat se k RESTovým technologiím, takže jsem s předstihem začal s knížkou Billa Burkeho RESTful Java with JAX-RS, kterou vřele doporučuji - pokud chcete začít s RESTem v Javě (tj. libovolnou implementací JAX-RS), je to ta správná volba. Autor sice popisuje (a je tvůrcem) RESTEasy, ale je objektivní i vůči dalším implementacím.

Další knihou jsem si chtěl oživit druhou Javovskou web servisovou větev - JAX-WS. Tady je knižní situace docela slabá. V podstatě jediná aktuální kniha, která je věnována JAX-WS je Java 7 JAX-WS Web Services. Vzhledem k názvu a rozsahu (64 str.) jsem nečekal nic světoborného, ale zklamání bylo obrovské. Pokud nejste úplně nejzelenější začátečník a nevyhovují vám knížky, tvořené ze 2/3 screenshoty (NetBeansů), není to kniha pro vás. Škoda peněz, škoda času.

Jakou určitý druh přípravy můžu zmínit (celkem nudný) letošní Oracle Java Developer Day, kde jsem se šel podívat na jednu přednášku o JAX-WS a na dvě o JAX-RS. Samozřejmě, že to byly naprosté základy, ale člověk si aspoň udržuje povědomí o tématu.

Pak už začalo jít do tuhého, protože jsem potřeboval něco, co by mě připravilo na certifikaci. Nechal jsem tedy firmu zakoupit zkušební testy. Tentokrát jsem zvolil ještě nevyzkoušené řešení - kit od EPractize Labs. Jejich OCEJWSD Training Lab není úplně špatný. Sice je uživatelsky dost nepohodlný a rozložení témat mi přijde dost nevyvážené, ale myslím, že ho můžu označit jako přínosný. V dnešní době bych spíš volil kit od uCertify, s jejichž přípravnými testy mám dobrou zkušenost, který ale v té době ještě nebyl k dispozici.

Posledním materiálem, který jsem na přípravu použil je OCWSD Study Guide od Mikalaie Zaikina, který pokrývá témata zkoušky velmi pěkně. Linkovaná webová verze je zdarma, za $15 je možné si přikoupit sadu 160 otázek s odpověďmi, plus jednotlivé guidy v PDF podobě. Těch patnáct dolarů jsem investoval a můžu říct, že to stálo za to (aneb jak jsme se učili v angličtině it bang for the buck).

Pokud mám certifikaci OCWSD nějak celkově zhodnotit, musím říct, že je to určitě jedna z těch nejpřínosnějších, co dnes Oracle v oblasti Javy nabízí. Všechna témata byla víceméně ryze praktická, žádná nudná (korporátní) teorie, či dokonce ideologie. Zároveň je to taky jedna z těch, kde je těch Oraclovských technologií jen určité minimum - hodně se tam probírají věci z W3C, jako je SOAP, WSDL, XSD, WS-Addressing, nebo věci, které jsou dílem různých jiných organizací, jsou je WS-I (WS-Interoperability (Basic Profile)), nebo WS-Security.

ActiveMQ, messaging podle Apache

·3 min
Poslední dobou jsem se zabýval integračním projektem, který používal komerční technologii od IBM - WebSphere Messaage Broker, který jako infrastrukturu využívá WebSphere MQ. Abych měl, jako solution architekt, k tomuto řešení nějakou alternativu, rozhodl jsem se nastudovat open source messagingovou platformu ActiveMQ od Apache Software Foundation (ASF).

ActiveMQ je messagingový server postavený nad specifikací Java Message Service (JMS), a který ve spojení i frameworkem Apache Camel implementuje Enterprise Integration Patterns (EIP). Obecné vlastnosti ActiveMQ se dají shrnout do následujících bodů:
  • implementace JMS 1.1,
  • integrace se Springem,
  • integrace s (Java) aplikačními servery,
  • vlastní protokol OpenWire pro high perfomance klienty v Javě, C, C++ a C#,
  • embedded broker,
  • broker clustering,
  • REST API,
  • AJAX API,
  • ad.
Výborným zdrojem informací je kniha AcitveMQ in Action přímo od autorů a přispěvatelů ActiveMQ. Vypíchnul bych z ní pár momentů, které mne zaujaly.

Komunikační protokoly
Klienti se můžou k brokeru připojit pomocí různých protokolů, které jsou vystaveny pomocí tzv. transportních konektorů. Mmj. jsou k dispozici obligátní:
  • TCP
  • SSL
  • HTTP(S)
  • UDP
Pokud klient i broker běží v jednom JVM, může klient použít VM protokol, který spustí embedded broker. Komunikace pak neprobíhá po síti, jako u ostatních typů konektorů, ale klient volá přímo metody na objektu (instanci) brokeru.

Pro konfiguraci konektoru se používá následující URI:
  • scheme://host:port?queryKey=queryValue
Konfigurace několika konektorů pak může vypadat třeba takto:
<transportConnectors>
<transportConnector
name="openwire"
uri="tcp://localhost:61616?trace=true"/>
<transportConnector
name="ssl"
uri="ssl://localhost:61617"/>
<transportConnector
name="vm"
uri="vm://localhost"/>
</transportConnectors>
Message Storage
JMS specifikace definuje dva způsoby doručení zpráv (DeliveryMode) - perzistentní a neperzistentní. Pokud jsou zpráva, nebo producent nastavený jako perzistentní, musí JMS provider zajistit bezpečné uložení zpráv (aby např. přežily výpadek serveru). ActiveMQ nabízí pro uskladnění zpráv čtyři strategie:

  • KahaDB message store. Rychlá a škálovatelná file-based perzistence s transakčním žurnálem a rychlým zotavením.
  • AMQ message store. Předchůdce KahaDB, obdobné vlastnosti.
  • JDBC message store. Perzistence zpráv do relační databáze.
  • Memory message store. Všechny pezistentní zprávy jsou drženy v paměti, tj. nejsou perzistovány ve smyslu JMS specifikace.
KahaDB se skládá ze tří komponent:
  • Cache drží zprávy pro aktivní konzumenty.
  • Data logy slouží jako transakční žurnál. Obsahují uložené zprávy a transakční příkazy.
  • BTree indexy referencují zprávy v data logu.

Schéma KahaDB  (zdroj ActiveMQ in Action)

REST API
ActiveMQ poskytuje jednoduché API pro publikaci a konzumaci zpráv RESTovým způsobem. Vzhledem k tomu, že JMS poskytuje pouze dvě operace - send a receive - je mapování na HTTP velmi přímočaré. Pro publikování zpráv je to (HTTP) POST, pro jejich konzumaci (HTTP) GET nebo DELETE.

Mapování na URI pak vypadá takto:
  • http://host:port/queue
  • http://host:port/topic/subtopic

High Availability
Pokud budeme chtít zajistit vysokou dostupnost našeho messagingového řešení, budeme potřebovat několik brokerů běžících na různých strojích. Něco jako:


High Availability v režii ActiveMQ je zajištěna dvěma typy Master/Slave konfigurací:
  • Shared nothing
  • Shared storage
U shared nothing konfigurece má master i slave vlastní message store. Slave se po startu připojí k masteru a veškeré stavy masteru (zprávy, akcknowledgements, transakce atd.) jsou replikovány na slave. Když master spadne, jsou všichni klienti přesměrováni (pomocí fail over protokolu) na slave, který se stává novým masterem. Konfigurace fail over protokolu vypadá takto:
  • failover://(tcp://master:61616,tcp://slave:61616)
Omezením tohoto řešení je, že master může mít definovaný pouze jeden slave (a slave nemůže mít definovaný další vlastní slave).

Shared nothing master/slave (zdroj ActiveMQ in Action)
Shared storage konfigurace umožňuje, aby bylo definováno více slave brokerů, které spolu s masterem, sdílejí společný storage mechanismus - tím může být sdílený filesystem, nebo relační databáze. Master má pak storage zamknutý. Když master spadne, jeden ze slave brokerů se stane novým masterem a zamkne si storage pro sebe.

Shared storage master/slave (zdroj ActiveMQ in Action)
Závěrem
Pokud to mám říct jednou větou - ActiveMQ se mi architektonicky/technologicky líbí a pokud bych na nějakém projektu potřeboval řešit messaging v Javě, určitě by to byl žhavý kandidát. Taky mi to nedá, abych nesrovnal ActiveMQWebSphere MQ. Co se týče funkčností, jsou obě řešení srovnatelná. Veliký rozdíl ovšem bude v pracnosti a nákladech - ActiveMQ půjde implementovat nesrovnatelně levněji a rychleji. No a samozřejmě cena, zde je rozdíl astronomický - ActiveMQ je zdarma, WebSphere MQ bude stát řádově miliony korun jenom na licencích.

Další cesta, jak rozvíjet znalosti o ActiveMQ je celkem jednoznačná - Apache Camel, což je implementace EIP od ASF, která řeší věci jako vytváření zpráv, jejich směrování, transformaci, orchestraci ad.

Flex certifikace

·3 min
Dnes jsem úspěšně absolvoval certifikaci Flex 4.5 ACE Exam (Adobe Certified Expert). Protože se živím hlavně jako Java vývojář a solution architect, bylo to pro  mne odskočení do celkem neznámých  vod. Nicméně šel jsem do toho hlavně ze dvou důvodů - jednak z pohledu architekta, bylo pro mne zajímavé poznat novou RIA platformu a druhak, Flex je občas požadován našimi zákazníky jako frontendová technologie (což souvisí i s prvním důvodem, protože dělám i nabídky) a doposud jsme na Flex nabírali externí programátory, takže mít Flexové znalosti se hodí i jako interní kompetence.

Certifikace samotná splnila mé očekávání. Vypíchnul bych hlavně věc související s vnitřní motivací - témata a rozsah certifikace mne přinutily podívat se na Flex platformu/architekturu opravdu do hloubky, takže myslím, že Flex znám na celkem slušné úrovni. Hlavní přínosy bych shrnul do třech bodů:

  • Architektura Flexu se mi velmi líbí. Je to pěkně čistě napsaná Event-Driven Architecture (mám z ní lepší pocit než třeba ze Swingu v Javě). Layout komponent se primárně řeší v MXML, pro nevizuální nebo složitější komponenty slouží ActionScript.
  • ActionScript (implementace ECMAScriptu) je pěkný jazyk, takový lepší JavaScript. Příjemně se v něm píše.
  • Flash Builder je slušné IDE postavené na Eclipse. Oproti Java pluginům/prostředí má ještě co dohánět (hlavně refactoring a content assist), ale na projektu bych ho rád použil. Škoda, že je komerční (Standard edice za $249).

No a teď k samotné certifikaci. Struktura zkoušky je následující:

  • Creating a User Interface (UI)
  • Flex system architecture and design
  • Programming Flex application with ActionScript
  • Interacting with data sources and servers
  • Using Flex in Adobe Integrated Runtime (AIR)

Oproti jiným certifikacím jsem použil docela dost materiálů. Mezi ty které bych určitě doporučil patří výborná kniha Adobe Flex 4.5 Fundamentals. Kniha je skvěle napsaná a poskytuje základní kontext a úvod do Flexu. Chybí v ní pokročilejší témata, jako třeba remoting nebo AIR.

Dalším výborným zdrojem je samotná dokumentace k Flexu, zejména Using Flex a ActionScript Reference. Je toho hodně, takže napomůže drobná selekce pomocí Attest, přípravném test kitu pro Flex 4 certifikaci, napsaném v AIR.

Dále bych doporučil stáhnout si (2měsíční) zkušební verzi Flash Builderu a prostě v něm programovat - kniha Adobe Flex 4.5 Fundamentals má výborný příklad - postupné budování web shopu. Kromě toho jsem si naprogramoval spoustu snipetů, maličkých aplikací třeba jenom na jednotlivé komponenty, např. toto na vícenásobný binding:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">

<s:layout>
<s:HorizontalLayout/>
</s:layout>

<fx:Binding source="first.text"
destination="destination.text"/>
<fx:Binding source="second.text"
destination="destination.text"/>

<s:VGroup>
<s:TextInput id="first"/>
<s:TextInput id="second"/>
<s:Label id="destination"/>
</s:VGroup>

<fx:Binding source="source.text"
destination="primero.text"/>
<fx:Binding source="source.text"
destination="segundo.text"/>

<s:VGroup>
<s:TextInput id="source"/>
<s:Label id="primero"/>
<s:Label id="segundo"/>
</s:VGroup>

</s:Application>
Co bych doporučil méně (ale považuji také za přínosné) je jednak kniha Flex 4 in Action. Není to špatná knížka, oproti té výše uvedené je dosti ukecaná. Na druhou stranu obsahuje některé pokročilejší témata, např. letmá zmínka o BlazeDS.

Vyloženě špatný také není preparation kit od uCertify, který ale nepokrývá všechna témata zkoušky (nejspíš to připravovali na nějaké betě :-/ Určitě ho ale lze použít jako doplňující materiál.

Na závěr jsem si nechal lahůdku - aneb před čím bych důrazně varoval. Rozhodně se vyhnout produktům firmy Pass4sure!!! Otřesná kvalita, chyby, hrozný!!! V 60 otázkách jsem napočítal 12 zcela jasně chybných "správných" odpovědí a u pár dalších si myslím, že je měli taky špatně. Otřesný.

Kromě výše zmíněných materiálů, které jsem si nechal koupit od firmy, jsem v průběhu učení se "objevil" OneNote, do kterého jsem si začal "psát" poznámky ke zkoušce. Protože jsem si je ale začal psát až v průběhu, jsou nekompletní, nicméně třeba to někomu pomůže:

Příprava na Flex certifikaci (PDF)

Rok s Kindlem

·2 min
Koupil jsem si Kindle a musím říct, že za ten rok jsem četl, jak urvaný ze řetězu... 17 odborných knih! 🤦‍♂️

ePub v cloudu

·1 min
Jsem spokojeným majitelem čtečky Kindle. Jedna z věcí, co se mi líbí je, že všechny knihy koupené na Amazonu se automaticky přidají do (amazoního) cloudu. Odtud jsou potom k dispozici např. přes výbornou čtečku v prohlížeči Kindle Cloud Reader. Co se mi naopak nelíbí je, že Kindle (zatím) oficiálně nepodporuje formát ePub (a ani neumožňuje v cloudu umístit knihy koupené jinde, než na Amazonu).

Protože pár knih v ePubu mám a musel bych používat nějakou softwarovou čtečku, uvítal jsem, že je k dispozici také cloudová alternativa. Známé nakladatelství technologických knih O'Reilly (to jsou ty bílé knížky se zvířátkama) rozjelo Bookworm - cloudovou platformu pro online čtení ePub knih.Vyzkoušel jsem, používám a jsem více méně spokojen. Není to sice tak komfortní jako Kindle Cloud Reader a formátování textu není úplně excelentní, ale právě vzhledem ke "cloudovosti" jsem ochotný tyhle nedostatky překousnout.

Bookworm umožňuje upload (a download) vlastních  ePub knih. U rozečtené knihy si pamatuje poslední otevřenou kapitolu. Uživatelské rozhraní trochu připomíná Adobe Reader - vlevo menu s kapitolama, vpravo obsah (kapitoly). Co zatím nefunguje, je vyhledávání v knížkách, ale to by snad mělo být brzo zprovozněno - v helpu už je to popsáno. Co chybí úplně je psaní poznámek a zvýrazňování textu - vlastnost, kterou poměrně hodně využívám u technických knih (a hádejte - Kindle to má).