Categories
Hints

Slovenské denníky a Kindle / čítačky elektronických kníh

Čítačky elektronických kníh sa sa rozmáhajú aj na Slovensku. Nie každý však vie, že nie sú určené len na čítanie kníh. Veľmi pohodlne sa v nich dá čítať napr.denná tlač a to aj napriek tomu, že nemajú aktívny prístup na internet (pod aktívnym prístupom rozumej možnosť prehliadať web stránky a podobne).

Prednedávnom som sa stal šťastným majiteľom Kindle 4. generácie a začal zisťovať ako do čítačky “natlačiť” čo najviac obsahu (aj s ochranou, resp. formátmi nekompatibilnými s Kindle). Odpoveďou bolo Calibre.

Calibre je software na správu elektronických kníh v rôznych formátoch. Dajú sa medzi sebou konvertovať, takže zariadeniam sa medze nekladú. V prípade Kindle umožňuje nahrávanie dvomi cestami:

  • cez kábel pripojeného zariadenia
  • zaslaním na kindle.com mail z ktorého sa kniha stiahne do čítačky cez Wi-Fi, prípadne 3G

Po nainštalovaní sa sprievodca opýta na zariadenie, s ktorým bude Calibre pracovať. Treba zvoliť to svoje a na základe toho sa upraví ponuka akcií. Základom je nahrávanie rôznych formátov kníh a ich následné zaslanie do čitačky. Tu treba spomenúť niekoľko veci:

  1. PDF dokumenty sú “fixed size”, tzn. majú jasne určenú veľkosť strany, čo vedie k situáciám, že čítanú stranu treba približovať, aby bola čitateľná. Iste uznáte, že to kazí zážitok z čítania. PDF teda treba konvertovať do “reflow” formátu, ktorý “prestránkuje” obsah podľa veľkosti displeja a fontu tak, aby nebolo treba približovať. Takým formátom je napr. MOBI, AZW3, EPUB alebo aj HTML, resp. HTMLZ (zazipované html aj s obrázkami v jednom súbore)
  2. Nie všetky formáty vie každá čítačka otvoriť. Tu oceníte to, že Calibre vie, ktoré sú vhodné pre dané zariadenie a ponúkne pri synchronizácii konverziu na ten správny
  3. Niektoré knihy sú chránené (u nás najčastejšie Adobe pdf drm, Adobe epub drm a pod.), čo znamená, že ich neprečítate inde ako na autorizovanom zariadení. Na toto existuje takisto ľahká pomoc v podobe zásuvných modulov do Calibre, ktoré dokážu pri vkladaní knihy do Calibre knižnice takúto ochranu odstránit (návod je tu a potrebné pluginy sú napr. tu, resp.odkaz nájdete na zmieňovanom blogu)
  4. Calibre podporuje sťahovanie web stránok vo formáte elektronickej knihy. Predkonfigurovaných je viacero denníkov a časopisov (zo slovenských napr. SME, Pravda, Týždeň, SLOVO a zive.sk). Stačí sa prihlásiť na ich odber a vo zvolené dni a v danú hodinu Calibre stiahne ich najnovší obsah do čítačky (Calibre musí samozrejme byť spustené)

No a práve o 4. bode je tento príspevok. Obrázkový postup ako na to:

1. Spustiť Calibre

calibre1

2. V menu hore sa nachádza tlačítko na stiahnutie “noviniek”, treba kliknúť na šípku rozbaľovacej ponuky

 

calibre2

 

3. Otvorí sa okno s predkonfigurovanými denníkmi. Zvoľte požadované a nezabudnite ich aktivovať/naplánovať zakvačnutím kvačky

calibre3

 

4. Následn už treba iba kliknúť na “Save” pre uloženie nastavenia a prípadne na “Download all scheduled” pre okamžité stiahnutie všetkých naplánovaných sťahovaní

5. Do knižnice pribudne nová kniha a tá bude zároveň automaticky zaslaná na zariadenie

calibre4

 

 

Hotovo.

 

PS: Určite ste si všimli, že ja mám v ponuke aj Hospodárske noviny (HNonline). Je to konfigurácia, ktorú som narýchlo spravil. Keď bude finálne odladená, tak pribudne na tomto blogu, alebo rovno v inštalácii Calibre. Aktuálna verzia je tu, zobrazenie online debát ale ešte nie je dokonalé.

Categories
Hints

JAXB xjc expected element of type …

If you have trouble loading Xml using classes generated by xjc tool (included in JAXB distribution), be carefull and do not define XSD main element like this:

<!-- MAIN element -->
<xs:element name="main" type="Main">
<xs:complexType name="Main">
...

The problem here is that the main element and main element type names are identical (except the first letter that is uppercased). Xjc creates a class for for both root Xml element and all complex types defined in Xsd. In this case a java class that derives from class for xsd complexType would be empty. If you still insist on having java class for xml root element then declare it as a extension without any additions.

Solutions (2):

  • declare xml root element as complexType extension (complexContent/complextType/extension) of the xsd complexType
  • do not define type for root element and define the structure directly in xs:element
Categories
Hints

Java String.isEmpty interrupts method call or thread

Does your call of String.isEmpty in your code cause strange behaviour such as:

– sudden interruption of method call (as if return was called)

– thread interruption

?

The problem is quite simple – you had build your code using JDK 1.6 with language compatibility set to previous version (1.4, 1.5) hoping the compiler would use the correct classes. This is, however, not true.

When you use the version switch the current JDK classes signatures are used. That means isEmpty is present as method of String class in 1.6. It is not present in previous releases.

Solution: Remove call of isEmpty and use the JDK you need without language compatibility to build against required version.

Categories
Hints

JWChat and Google Talk setup

Recently, I needed to access gtalk from behind a firewall that blocked access to sites like gmail, google talk, facebook etc.

So, I decided to prepare a workaround – jabber web client with its own http bind. Roughly said, it’s tunneling via http (port 80) to allowed host. The stupid firewall sees only http connection to unknown server (my own server somewhere else). The request is forwarded to whatever jabber you want – google talk in my case.

The web client is JWCHat (see the demo here), the http binding is done using JabberHTTPBind. I am not going to explain the installation steps here, you can find plenty of blog posts about that.

 

To connect to google talk you have to do it like this:

1. Fill in basic setup:

Backend: Open Relay
Server: gmail.com (or your domain if you have your own domain)

2. Click “Show more options” and fill the following:

Connect Port: 5222
Connect Host: talk.google.com

 

The reason is quite simple – the jabber domain is gmail.com. The jabber id is constructed as

username@server/resource

Usually, the jabber server and real server to connect to is the same (e.g. jabber.org), in case of google talk it’s not the same (which makes sense since you can have as many domains as you want).