Colbuild
Je to něco přes dva roky, co jsem zde poprvé uvedl aplikaci ColBuild určenou pro automatizovatelné vytváření sbírek na čtečce Sony Reader PRS-505. Od té doby uběhla spousta času, častým používáním jsem odhalil slabá místa programu a nakonec v souvislosti s nákupem čtečky Sony Reader PRS-T1 zjistil, že celou aplikaci je třeba zásadně předělat, pokud ji chci i nadále používat. A tak jsem tady.
Původní motivace pro ColBuild byla, abych měl nástroj, který dokáže „na jedno kliknutí“ zasáhnout do databáze knih ve čtečce a vytvořit v ní struktury, které zařadí zvolené knížky do sbírek (kde sbírka je v kontextu čteček Sony vlastně „playlist pro knihy“ – seznam knížek, které patří k sobě a mají vůči sobě vzájemně nějaké určité pořadí).
Toto samozřejmě zůstalo i v nové přepracované verzi zachováno, současně jsem ale potřeboval vyřešit problémy, která původní verze měla. Co je tedy nového:
-
Podpora pro různé typy čteček: Zatímco původní ColBuild byl pevně vázán na PRS-505, nová verze je napsána tak, aby mohla v principu podporovat libovolnou čtečku, dokonce i čtečku, která nepodporuje sbírky (blíže v dalších bodech). Momentálně je tedy podporováno PRS-505 a PRS-T1, s tím, že přidat podporu pro další čtečku je v zásadě dost jednoduchá záležitost, pokud ovšem ta čtečka má rozumně otevřený a srozumitelný formát databáze knih (např. PRS-505 používá XML soubor, PRS-T1 používá databázi SQLite).
-
Podpora pro různá paměťová zařízení. Už u původního ColBuildu se jasně ukázalo, že je třeba rozlišovat interní paměť od paměťových karet, protože čtečka ke každému médiu přistupuje poněkud jinak. U PRS-T1 se to výrazně zlepšilo, ale pořád jsou určité rozdíly v obsluze.
-
Podpora pro různé formáty knih. Původní ColBuild fungoval tak, že na každou knížku spustil jednu z utilit balíku Calibre, která mu pro knížku sdělila základní metadata. To funguje i nadále, nově lze ale pro libovolný formát e-knih vytvořit speciální parser, který ta metadata získá přímo v programu. Prvním takto podporovaným formátem je EPUB, který se díky tomu načítá mnohem rychleji (spuštění ebook-convert.exe dost dlouho trvá) a načítá víc metadat, mimo jiné i obrázek knihy.
-
Určitě jste si všimli, že když do čtečky nahrajete spoustu knížek, tak po odpojení kabelu čtečka delší či kratší dobu pracuje, když nové knížky zařazuje do databáze. Z toho vychází myšlenka: Když už ColBuild upravuje databázi, nemohl by ji rovnou upravit tak, aby ten počítací krok odpadl? Ano, mohl, a to je další z nových funkcí programu – i pokud nechcete používat sbírky, pouhé spuštění ColBuildu po naplnění paměti čtečky zajistí, že se počáteční výpočet nových knížek podstatně zrychlí, protože ColBuild všechno připraví a čtečka si jen ověří, že to je správně.
-
Použití INI souboru pro uložení playlistu se ukázalo jako značně svazující, mimo jiné v souvislosti s různými kódováními národních znaků (OEM, ANSI, několik variant Unicode), s ukládáním řídících informací výpočtu nebo s možností skládat několik různých souborů do sebe. Nový ColBuild používá pro uložení sbírky XML dokument a výše uvedené nedostatky řeší.
Pokud jde o kód programu, došlo k jistému zhoršení v tom smyslu, že pro ColBuild jsou nyní vyžadovány Delphi 2009 (původní ColBuild fungoval i v Delphi 5), pozitivem je naopak sjednocení knihoven a sestavovacích skriptů s ostatními mými programy.
Soubor definice sbírek
Pro definici sbírek se nyní používá XML soubor, který vypadá zhruba následovně:
<collections> <file_prefix>!_books/Czech/</file_prefix> <collection> <name>Bílá vydra (Kutík)</name> <name_sort>BILA VYDRA (KUTIK)</name_sort> <file_prefix>Kutik Josef/</file_prefix> <files> <file>bila_vydra</file> <file>navrat_bile_vydry</file> <file>bila_vydra_na_stope</file> <file>bila_vydra_v_zaloze</file> <file>bila_vydra_na_vlci_stezce</file> <file>bila_vydra_u_bobri_hraze</file> <file>bila_vydra_na_hranici_lesu</file> </files> </collection> <collection> <name>Hrabě Monte Cristo (Dumas)</name> <name_sort>HRABE MONTE CRISTO (DUMAS)</name_sort> <file_prefix>Dumas Alexandre/</file_prefix> <all_files>hrabe_monte_cristo_</all_files> </collection> <include>soudce_ti.xml</include> </collections>
-
Kořenový prvek seznamu sbírek je
collections
. Uvnitřcollections
se pak může vyskytovat libovolné množství prvkůfile_prefix
,collection
ainclude
v libovolném pořadí, které se zpracovávají postupně, jak jsou nacházeny. -
include
umožňuje „odskočit“ si do jiného souboru sbírky, zpracovat ho a pak se zase vrátit do souboru původního. Já to používám tak, že mám knížky v angličtině a v češtině; sám je čtu v obou jazycích, do čteček rodičů ale nahrávám pouze české knížky.include
mi umožní mít samostatné popisy sbírek pro české a anglické knížky, které posléze spojím v jednom souboruvšechno.xml
kódem:<collections> <include>czech.xml</include> <include>english.xml</include> </collections>
Pozn.: Cesta uvnitř
include
je relativní vůči souboru, ze kterého je volána. Tzn. pokud budu mít v souboruC:\knihy\vsechno.xml
uveden<include>ceske/seznam.xml</include
, bude se vkládat souborC:\knihy\ceske\seznam.xml
(bez ohledu na to, co je aktuální pracovní adresář). -
file_prefix
určuje cestu, ve které se knížky nachází, abych ji nemusel pořád dokola vypisovat. Na začátku je prefix prázdný, každé výskytfile_prefix
k němu připojí obsah elementu. Např. v XML dokumentu výše je file prefix na začátku prázdný, na druhém řádku se k němu přidá!_books/Czech/
a na šestém řádku ještěKutik Josef/
, takže knížky na řádcích 8-14 ve skutečnosti odkazují na!_books/Czech/Kutik Josef/bila_vydra
apod.Lze také začít úplně nový prefix, bez ohledu na to, co v něm bylo dříve, pomocí atributu
replace
:<file_prefix replace="1">jiny/prefix/</file_prefix>
. -
collection
popisuje jednu konkrétní sbírku. Vždy musí obsahovatname
, které určuje název sbírky, a jeden z elementůfiles
aall_files
, ke kterým se dostanu dále. Volitelné jename_sort
, podle kterého má čtečka sbírky řadit (pokud to umí – např. čtečky Sony PRS-T1 řazení umí, ale jen podle znaků anglické abecedy) afile_prefix
, který funguje stejně, jako bylo uvedeno výše. -
files
určuje seznam souborů (elementůfile
), které se nacházejí ve sbírce. Před ně se vždy dopíše aktuálnífile_prefix
, za ně se případně doplní přípona souboru knihy (protože knihu mohu mít v několika různých formátech, např.epub
atxt
, přičemž formát nemá vliv na pořadí ve sbírce. Proto je obecně lepší do definice sbírky příponu vůbec nepsat a nechat ColBuild, ať si s tím poradí. -
all_files
umožňuje zkrácené vytváření sbírek, které mají názvy souborů řazené abecedně, těch souborů je hodně a pořád přibývají, takže by vytváření plného seznamu pomocífiles
a spoustyfile
bylo zbytečně pracné. Funguje to tak, že ColBuild najde všechny soubory, jejichž názvy začínají obsahemall_files
, seřadí je podle abecedy a z tohoto seznamu vytvoří sbírku. V demonstračním souboru je to předvedeno na sérii Hrabě Monte Cristo, která má u mě na disku šest knížek s názvyhrabe_monte_cristo_1.epub
,hrabe_monte_cristo_2.epub
ažhrabe_monte_cristo_6.epub
. Abych je nemusel všechny vypisovat (což by mi u Monte Crista až tak nevadilo, ale u sbírky povídek Johna Wyndhama, kde mám už teď 40 souborů a ještě zdaleka nejsem na konci, už docela ano), použil jsem<all_files>hrabe_monte_cristo_</all_files>
, které to vyřídí za mě (a kdybych v adresářiDumas Alexandre
měl jenom Monte Crista, klidně bych mohl napsat i jenom<all_files></all_files>
– „udělej mi sbírku ze všech knížek, které jsou v adresáři“).
Používání programu
ColBuild se používá z příkazové řádky, jak je u mě zvykem. Pokud ho zavoláte bez parametrů nebo s parametrem -?
nebo -h
, zobrazí nápovědu. Další parametry jsou uvedeny právě tam; zde vypisuji přehled těch, které jsou platné pro verzi 0.10:
-
-d název
říká ColBuildu, že má vytvářet databázi pro zařízenínázev
. Ve verzi 0.10 jsou podporována zařízeníprs-505
(Sony Reader PRS-505),prs-t1
(Sony Reader PRS-T1) aprs-t1-h
(PRS-T1 s hackem pro zobrazování posledně čtečných knih na hlavní obrazovce; toto rozlišení je potřeba pouze v případě, že vytváříte úplně novou databázi [tzn. když smažete starý souborbooks.db
a necháte ColBuild, ať vytvoří nový úplně z ničeho], při editaci staré databáze se to chová stejně jako obyčejnéprs-t1
). -
-m typ
určuje typ paměťového zařízení, pro které se má sbírka vytvářet. U čteček Sony je to podstatné, protože databáze vytvořená pro špatný typ paměťového média buď nefunguje vůbec, nebo sice funguje, ale nemá ty přínosy, které by mít měla (zrychlené první načtení atd.). Možné typy v současné době jsouint
(interní paměť),sd
(SD [Secure Digital] karta),ms
(MS [Memory Stick Duo] karta). -
-r adresář
říká, ve kterém adresáři se mají hledat knihy. Standardně je zde aktuální pracovní adresář, což je vhodné v případě, že ColBuild spouštíte přímo z disku cílového paměťového média, v úvahu ale připadají i zápisy typu-r f:\
(pokud je interní paměť čtečky v počítači vidět jako diskF:
). -
-q
resp.-q-
zapne resp. vypne tichý režim, kdy je potlačena většina výpisů o průběhu v výpočtu. Může se hodit do dávkových souborů, jinak je asi k ničemu. Výchozí hodnota je-q-
(normální režim). -
-mu
,-mc
a-mn
určují, jak se má pracovat s metadaty knih. Výchozí hodnotou je-mu
, která pro každou podporovanou knihu vyhledá metadata a propíše je do databáze.-mc
dělá totéž, ale jen pro knihy, které ještě v databázi nejsou, takže může značně urychlit výpočet v případě, že do čtečky přidáváte další knihy, ale už existujícím metadata neměníte.-mn
vypíná práci s metadaty úplně, kromě knih, které ještě v databázi čtečky nebyly a přitom jsou součástí některé sbírky – u těchto knih se metadata nutně načíst musí, jinak by nefungovalo ani zařazování do sbírek. Výchozí hodnota je-mu
(vytvářet metadata u všech knih). -
-dc
a-dc-
říká, jestli se mají resp. nemají vytvářet „falešné“ náhledy knížek v případech, kdy ColBuild nedokáže najít obrázek obalu (momentálně umí ColBuild najít opravdový obal jen pro knihy ve formátuEPUB
, a to ještě ne pro všechny). Falešné náhledy jsou dobré proto, že jinak u PRS-T1 zkouší čtečka vytvořit náhledy sama a dost jí to trvá. Výchozí hodnota je-dc
(vytvářet falešné covery). -
-c
resp.-c-
říká, jestli se mají resp. nemají vytvářet sbírky.-c-
(nevytvářet sbírky) pro vás může být zajímavé, pokud se sbírkami nepracujete, ale chcete, aby ColBuild vyoplnil databázi a ušetřil tak práci čtečce. -
V případě použití
-c
je dále nutné uvést jméno souboru, který popisuje sbírku, viz kapitola Soubor definice sbírek výše.
Pro programátory
Zdrojový kód programu je uložen v adresáři source
. Pro kompilaci jsou vyžadovány Delphi 2009 nebo vyšší, připravena je dávka build.bat
, která sestavení programu ze zdrojových kódů provede.
Pro práci programu jsou použity knihovny dalších autorů:
- NativeXml, Nils Haeck
- PerlRegEx, Jan Goyvaerts
- SciZipFile, Patrik Španěl
- SQLite Wrapper, jméno autora neznám
- Synapse, Lukáš Gebauer
Download
-
ColBuild v0.10 (691 KB, 25.06.2012).
Zdrojáky (2536 KB).
Kompletně přepsáno, změny popsány v tomto článku.
Staré verze (0.09 a starší) určené jenom pro PRS-505 naleznete na stránce PRS-505: Sbírky.