Almara project, http://almara.sourceforge.net/ c 2004 Almara team
Projektová dokumentace projektu Almara
1
Obsah 1 Úvod
3
2 Historie 2.1 Listopad 2003 – zahájení projektu 2.2 Prosinec 2003 . . . . . . . . . . . . 2.3 Leden 2004 . . . . . . . . . . . . . 2.4 Únor 2004 . . . . . . . . . . . . . . 2.5 Jaro 2004 . . . . . . . . . . . . . . 2.6 Léto 2004 . . . . . . . . . . . . . . 2.7 Konec srpna 2004 . . . . . . . . . . 2.8 Podzim 2004 . . . . . . . . . . . . 2.9 Zima 2004 . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
3 Rozdělení práce
3 3 4 4 4 5 5 5 5 6 6
4 Důležitá rozhodnutí 4.1 Jaké verze knihoven používat? . . . . . . . . . . . . 4.2 Rozdělení GUI a ChT . . . . . . . . . . . . . . . . 4.3 Proč použít procesy místo threadů? . . . . . . . . 4.4 Je ImageMagick dobrá volba? . . . . . . . . . . . . 4.5 Jak řešit bezztrátovost rotace a ořezání u JPEGů?
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
6 6 7 7 7 7
5 Kritická zhodnocení a problémy
7
6 Porovnání s podobnými programy
8
7 Možnosti dalšího vývoje
9
2
1
Úvod • Název projektu: Almara • Téma projektu: Foto Album • Doba vývoje: podzim 2003 – zima 2004 • Vedoucí: Pavel Machek
[email protected] • Členové týmu: Eduard Bejček (Eda), Jiří Benc (JBe), Jiří Boháč (JBo), Petr Ošťádal (Bruce) • Platforma: UNIX, MS Windows (pod Cygwinem) • Stránky projektu: http://almara.sf.net • Support pro oponenta a projektovou komisi:
[email protected]
2 2.1
Historie Listopad 2003 – zahájení projektu
Zájem o tento projekt projevili 4 studenti. Nikoho dalšího se bohužel sehnat nepodařilo, a to i přes nemalou snahu všech zúčastněných. Práce tedy byla zahájena a po více než roce dovedena k obhajobě pouze ve čtyřčlenném týmu. Prvním krokem bylo dohodnutí pravidelných schůzek. Eda se nabídl jako zapisovatel a tvořil pravidelně podrobné a přehledné zápisy s úkoly a termíny, které posílal na zřízenou privátní e-mailovou konferenci. Pro ukládání prodiskutovaných návrhů a informací potřebných pro práci na projektu byl zřízen soukromý wiki web, uzpůsobený tak, že při úpravách stránek informoval e-mailem tým o provedených změnách. Jako programovací jazyk projektu byl zvolen jazyk C, jak bylo navrženo v zadání projektu, a jako jazyk pomocných skriptů (sloužící pro dávkové zpracování) byl vybrán silný skriptovací jazyk Python. Po prozkoumání dostupných možností bylo rozhodnuto použít revision systém GNU Arch (resp. jeho implementace tla) namísto CVS. S tím souvisí i hostování archivu na serveru SourceForge, který sice GNU Arch přímo nepodporuje, avšak flexibilita systému Arch umožňuje i zde (na rozdíl např. od serveru Savannah) archív vytvořit. Pomocí démona cron bylo zavedeno monitorování archívu a rozesílání e-mailů při commitech. Další dohodnuté omezení bylo používání výhradně open source knihoven a standardů POSIX a ISO C, což by mělo usnadnit portování na jiné platformy (zejména na platformu Windows, což je součást zadání projektu). Společně byly prodiskutovány a stanoveny cíle projektu, tak, aby projekt byl použitelný i pro uživatele, a jeho vývoj neskončil obhajobou. Názory byly samozřejmě různé, takže bylo často nutno volit kompromisy a hledat taková řešení, která vyhoví uživatelům; ostatní vlastnosti projektu mohou být dopsány až po obhajobě, důraz by tedy měl být kladen i na to, aby se pro tyto případné změny nezavřely dveře. V této době došlo již k prvnímu rozdělení úkolů:
3
• Eda: formát alba, skripty pro operace s alby; • JBe: rozchození archu, rozřezávačka na Motion JPEGy; • JBo: zkušební prohlížítko; • Bruce: zjistit vhodné grafické knihovny (možnosti, licence, atd.) a bezztrátové operace s JPEGy, katalogizace, webová stránka; • Pavel: odborné vedení, testování, focení koní.
2.2
Prosinec 2003
Eda připravil první skripty pro práci s alby, JBe připravil první verzi rozřezávačky a JBo má v Gladu zkušební prohlížítko, Bruce sepsal na wiki formát alba a prošel grafické knihovny na Internetu.
2.3
Leden 2004
JBe vyřešil problém s přístupovými právy Archu na SourceForge (obcházeno skriptem nastavujícím práva po commitu). Úkoly: • Eda: parsování souboru alba a dialogové okno s progressbarem; • JBe: rozřezávačka včetně slepovačky mjpegů; • JBo: funkční GUI včetně prohlížeče thumbnailů; • Bruce: knihovna s operacemi nad obrázky. První commity do Archu (rozřezávačka zatím bez slepovačky, skripty, GUI, libimg s využitím FreeImage knihovny).
2.4
Únor 2004
Za nesplnění termínu byla stanovena povinnost přinést čokoládu. Byl dohodnut coding style, který Eda záhy uložil do docs/CODING-STYLE. Také bylo domluveno, že dokumentování kódu bude prováděno v systému Doxygen ve stylu JavaDoc (odkazy na potřebné dokumenty a tutorialy byly opět zaneseny do wiki) a Bruce vytvořil příklady s dokumentací v docs/templates/template.[h | c]. Návrh “Červotoče” (dnes již ChT), který obhospodařuje spouštění operací na pozadí, první návrhy protokolu pro komunikaci GUI s ChT. Eda napsal parser protokolu mezi GUI a ChT, JBe vytvořil slepovačku QuickTimů, JBo pracuje na synchronním ChT (shellový skript pro testování GUI), Bruce napsal podporu externích programů v libimg a program na testování knihovny libimg.
4
2.5
Jaro 2004
Eda připravil první verzi asynchronního ChT (operace pouze simuluje), JBe připravil release rozřezávačky (mjpeg2jpegs) a slepovačky (jpegs2mjpeg) a začal řešit tisk, JBo začal implementovat asynchronní GUI (umí rotaci, crop, zoom), Bruce připravil podporu autoconfu, automaku a převzal odpovědnost za distribuci zdrojového kódu, nahrazení knihovny FreeImage knihovnou ImageMagicku (ve snaze předejít problémům s portováním), podpora gettextu.
2.6
Léto 2004
Bylo jasné, že letní termín obhajob již není možné stihnout. Další vývoj byl tedy naplánován tak, abychom stihli podzimní termín. • Eda: ChT a spolupráce s GUI (podpora více procesů); • JBe: implementoval almaraprint, vylepšení io parseru, podpora konfiguračních souborů, přepsal pythonovské skripty na vytváření alb, vytvořil vývojářské skripty pro jednodušší testování GUI; • JBo: implementoval global undo, vylepšoval crop, nové módy zoomování a další; • Bruce: rozchodil configure, aby se dal použít v adresáři =build, jak to vyžaduje práce s Archem (fixy pro intltool nástroje), gamma dialog a wizard v GUI, exif widget pro editaci a zobrazení metadat a exifů, podpora UI Manageru v GUI, začal pomáhat JBo s GUI, implementoval dockovací systém.
2.7
Konec srpna 2004
Termín podzimní obhajoby se blížil (nebyl přesně znám). Eda přes všechnu snahu nestihl do svého odjezdu na týdení dovolenou dokončit ChT a navíc jsme narazili na problém implementace renderování thumbnailů; je třeba přepsat část kódu a implementovat plánovač a priority podprocesů ChT, ujímá se toho JBe, jelikož není Eda na telefonu a rozhodujeme se na něj nečekat, každá minuta je drahá. Petrovi se nelíbil již nepřehledný kód GUI a tak jej s povolením JBo celý přeorganizoval a začal se oficiálně rovnou měrou podílet na GUI. Jakmile se Eda vrátil, byla mu zadána práce na Hallmaře (dnešní Almara, která spravuje všechna alba). JBe zprovoznil bugtracker na SourceForge. Tento byl používán spíše pro vkládání chyb, které nebyly kritické a byly určeny pro pozdější opravení. Pro důležité chyby se ukázal jako operativnější prostředek e-mailová konference, jejíž nezanedbatelnou výhodou byla možnost komunikovat v rodném jazyce.
2.8
Podzim 2004
Dokončování projektu pro prosincovou obhajobu. Jak byly postupně implementovány požadavky zadání, zjišťovali jsme, že jejich plnění vytváří další a další úkoly, které nestíháme dokončovat ve stanovených termínech, a to i přesto, že všichni věnují projektu stále více a více času. 5
22. listopadu byla uvolněna na SourceForge první verze pro veřejnost. Také byl založen interní dokument Hezké věci, kde jsme začali psát funkce, které jsou spíše rozšířením zadání projektu, a bylo by hezké je po obhajobě implementovat. Pavel si prohlíží své nafocené koně v Almaře a dokument Hezké věci nám prodlužuje o mnoho položek.
2.9
Zima 2004
S minimem spánku jsme dokončovali projekt, pořádali několikadenní projektové společné sezení ve školní laboratoři nebo programovali doma a domlouvali se přes IRC. Pomalu jsme byli zahlcováni spoustou požadavků na nové vlastnosti, které jsme museli začít razantně přesouvat do Hezkých věcí. 22. prosince vypouštíme na SourceForge projekt pro veřejnost a odevzdáváme jej.
3
Rozdělení práce
Autoři jednotlivých částí kódu jsou uvedení v doxygen dokumentaci u každého souboru. Obecně lze práci podle jednotlivých částí rozdělit takto: • almara (Hallmara): Eda • almara album (GUI, Almara): JBo, Bruce • almara cht (ChT): začal Eda, přepsal a dokončil JBe • almara print, mjpeg-jpegs a API pro jpegtran: JBe • konfigurace, RPM pro SUSE, lokalizace, ikony: zejména Bruce • libimg (Image knihovna): Bruce • skripty (pro práci s alby): Eda, JBe • Cygwin: Bruce • dokumentace: – Doxygen: Eda, JBe, JBo, Bruce – programátorská: Eda (koordinátor), JBe, Bruce – uživatelská: JBo – projektová: Bruce, Eda
4 4.1
Důležitá rozhodnutí Jaké verze knihoven používat?
Jelikož každý z nás používal jinou distribuci systému GNU/Linux, a totéž bylo pochopitelně předpokládáno u uživatelů, bylo nutné učinit rozhodnutí, jaké verze knihoven a vývojářských nástrojů používat. Část problémů byla vyřešena podmíněnou kompilací podle verzí knihoven, jinak jsme preferovali verze, které 6
byly během zahájení projektu ve stavu těsně před vydáním, nebo nejnovější stabilní – předpokládali jsme, že při dopsání projektu bude mít většina uživatelů již k dispozici novou distribuci s nejnovějšími stabilními knihovnami. Ukázalo se, že ve většině případů to bylo správné řešení. V některých případech bylo sice zapotřebí komunikovat s vývojáři dané knihovny, ale tomu se pravděpodobně u větších projektů vyhnout nelze. U autoconfu a automaku jsme používali vždy nejnovější verze a předcházeli jsme potížím tím, ze jsme distribuovali již předpřipravené configure a Makefile.in soubory.
4.2
Rozdělení GUI a ChT
Abychom mohli jednoduše dávkově zpracovávat alba, rozhodli jsme se rozdělit Almaru na dvě části – GUI a ChT – které budou komunikovat přes standardní vstupy a výstupy. Důležitou vlastností, která z tohoto návrhu vyplývala, byla možnost využít místo GUI skript. Některé ukázkové skripty (web export) jsou přiloženy.
4.3
Proč použít procesy místo threadů?
O tomto problému byly vedeny dlouhé diskuze, rozhodla jednoduší tvorba kódu a jednodušší ladění.
4.4
Je ImageMagick dobrá volba?
Těžko říci, ale není žádný problém zaměnit tuto knihovnu za jinou. Knihovna je stále vyvíjena a podporuje mnoho formátů a operací nad obrázky a je portovaná i pro Windows. Určité chyby se v ní najdou, ale vývojáři je řeší vcelku rychle. Implicitně je IM přeložená s 16 bity na barevnou složku, což přináší lepší kvalitu na výstupu, ale na úkor operační paměti. Na druhou stranu se dá pomocí proměnných prostředí tato paměťová náročnost změnit (samozřejmě na úkor snížení rychlosti).
4.5
Jak řešit bezztrátovost rotace a ořezání u JPEGů?
Bohužel zatím není žádná GPL knihovna, která by bezztrátové operace uměla řešit. Zpočátku jsme používali externí progamy jpegtran a exiftran. Tento přístup bohužel přinášel spoustu problémů – ChT operace neprovádí, ale pouze zaznamenává, a proto potřebuje mít možnost spočítat rozměry obrázku bez skutečného provedení operace. To však u bezztrátových JPEG operací při použití externích programů není možné. Tento problém nabývá na palčivosti při podpoře pracovní velikosti obrázků. Proto bylo nutné z kódu programu jpegtran vytvořit vlastní knihovnu libjpegtran. Použita byla nejnovější verze, umožňující provádět i bezztrátové ořezávání.
5
Kritická zhodnocení a problémy
Největším problémem Almary v současné podobě je pomalost. Její příčinou jsou dle naší analýzy dva faktory: oddělení GUI a ChT a použitá knihovna ImageMagick.
7
Oddělení ChT od GUI sice přineslo pozitiva v jednodušším vývoji a možnosti snadného tvoření skriptů, které mohou využít takřka celý potenciál Almary, ale má také svá negativa. Předávání obrázků mezi ChT a GUI sice představuje určité zdržení, samo o sobě však není tak velké. Jeho největší nevýhodou je, že se obrázek musí předat celý najednou, a až poté zobrazit – nelze jej tedy vykreslovat postupně. Knihovna ImageMagick se ukázala jako velmi pomalá. Zejména operace scale je velmi časově a paměťově náročná; s využitím lepšího algoritmu (který by produkoval obrázky v horší kvalitě) by bylo možné celou Almaru znatelně zrychlit. Další problémy vyplývají již ze samotného návrhu Almary. Je to zejména počáteční neintuitivnost práce s Almarou. Uživatelé nejsou z jiných programů zvyklí na práci s alby, a proto jim dělají problémy i některé základní úkony (typickou otázkou člověka, který poprvé sedne k Almaře, je: jak mám do alba přidat fotky?). Filozofie neprovádění operací, ale jejich pouhé zaznamenávání, je opět pro část uživatelů matoucí – jakmile si však na ni zvyknou, problémy v této oblasti se vytrácejí. V budoucnosti bude třeba zvýšit uživatelskou přívětivost – ať již jde o lepší provedení uživatele celým procesem vytvoření alba přes jeho úpravy až po export, nebo o některé operace, které nenavyklému uživateli “ulehčí život”, například zmiňované přidávání obrázků do alba. Rovněž informovanost uživatele o tom, jak Almara nakládá s JPEGy, není úplně dobrá. Uživatel se pravděpodobně bude divit, proč se mu při ořezávání někdy posunuje levý horní roh o něco výše (tehdy, když se aplikuje bezztrátové ořezání), a někdy ne (když bezztrátové ořezání aplikovat nelze), proč se při exportu u některých obrázků neprojeví nastavení výstupní kvality JPEGu (tehdy, když všechny operace na obrázku byly provedeny bezztrátově), atd. Poněkud matoucí mohou být také okamžiky, kdy uživatel spustí na některý obrázek externí editor. Z návrhu Almary vyplývá, že jednotlivé operace se na daný obrázek zaznamenávají postupně – znamená to, že dokud není ukončen externí editor, další operace prováděné na téže fotce zdánlivě nic nedělají. To může uživatele zmást např. v případě Gimpu – další operace na fotce se projeví až v okamžiku, kdy je ukončen celý Gimp, nikoliv jen zavřeno okno s editovaným obrázkem. Zejména při zavírání alba, kdy se čeká na dokončení prováděných operací, se pravděpodobně bude uživatel divit, proč “je tam to divné okno s nápisem Please wait”, a jen málokoho napadne ukončit Gimp, kde “už jsem tu fotku přece zavřel”. Je také možné, že v externích editorech, které umí znovuvyužít běžící proces, nebude externí editace fungovat správně. Almara se totiž bude domnívat, že externí program (který pouze předal své již běžící instanci informace o tom, že má otevřít nový obrázek) již skončil a povolí další operace s fotkou.
6
Porovnání s podobnými programy
Srovnání s jinými programy nelze provést snadno. Neznáme totiž žádný jiný program, který by pracoval obdobným způsobem jako Almara. Existuje sice mnoho programů na prohlížení fotografií, ale naprostá většina z nich zůstavá u pouhého prohlížení a neumí provádět ani základní úpravy obrázků. Tyto programy (GQview, KuickShow, GImageView, atd.) tedy nemá smysl uvažovat. Některé programy umí kromě prohlížení rovněž základní úpravy, ale většinou
8
se provádějí poněkud těžkopádně (gThumb, xnView, display z balíku ImageMagick, atd.) a žádný z nich neumí operace pouze zaznamenávat a provádět později. Rovněž žádný z nich neumožňuje provádět operace na skupinách fotek. Složitější programy (např. Gimp) jsou již většinou spíše editory konkrétních obrázků a nikoliv programy pro práci se skupinami fotek, jsou tedy určeny ke zcela jinému účelu než Almara. Almara je optimalizována na co nejrychlejší ovládání (tj. minimum stisků kláves, nejpoužívanější operace prováděné pouhým stisknutím tlačítka myši), což není žádný z konkurenčních programů. Některé jiné programy založené na knihovně Gtk lze sice nakonfigurovat na obdobně rychlé ovládání z klávesnice jako Almara, ale rychlé ovládání myší je v nich i tak nedosažitelné. Podpora tisku není samozřejmostí (např. GImageView tisk vůbec nepodporuje), a pokud je přítomna, umožňuje buď žádné (KuickShow), nebo jen velmi omezené nastavení (GQView, gThumb, atd.). Motion JPEGy dělají většině programů velké problémy. Programy pro práci s obrázky většinou vůbec neumí s Motion JPEGy pracovat, a specializované programy pro práci s videem zase překomprimovávají jednotlivé snímky, čímž už tak špatnou kvalitu videosekvencí pořízených digitálním fotoaparátem ještě dále zhoršují. Podpora Motion JPEGů v Almaře je sice pouze základní, ale i tak jde o jeden z nejkvalitnějších nástrojů pro práci s Motion JPEGy (už proto, že digitální kamery obsahují chyby ve firmware a ukládají videosekvence často v rozporu se standardy, s čímž si Almara dokáže poradit). Na druhou stranu, všechny tyto programy jsou rychlejší než Almara. Můžeme tedy říct, že pro rychlou jednoduchou úpravu několika málo fotografií, kdy nepotřebujeme zachovat originál, je vhodnější některý ze zmiňovaných jiných programů.
7
Možnosti dalšího vývoje
Díky seznamu Hezkých věcí máme představu o tom, co by bylo dobré dále implementovat. Společně s požadavky posbíranými od betatesterů a uživatelů jej přeložíme do angličtiny a přidáme ke zdrojovému kódu, aby se opensource komunita mohla zapojit do vývoje. Naplánovaná je implementace dalších operací na obrázcích (level, blur, . . .), fullscreen mód, hierarchické kategorie (pro komplexnější kategorizaci a vyhledávání), cachování exif informací a možnost podle nich třídit obrázky v albu, lokální undo nad jednotlivými obrázky, optimalizace zalogovaných operací nad obrázky (vice rotací složit v jednu a podobně). Bruce využije tento program pro diplomovou práci, ve které implementuje automatické klasifikace a automatické korektury chyb na fotografiích.
9