WinStrom 10: pod pokličkou

WinStrom 10

Jak již jsem psal v předchozím článku, vydali jsme první velkou verzi nové generace ekonomického systému WinStrom 10.

Protože toto je technologický blog, nebudu se rozepisovat o jeho účetních vlastnostech, ale jen o těch technických.

Zkráceně se jedná o Java aplikaci napsanou ve swingu, používající Hibernate a PostgreSQL. S Hibernate jsme měli drobné problémy, které jsme vyřešili a o kterých se také zmiňuji v nahrávceJOpenSpace.

Nativní vzhled

Pokud chcete vzhled a chování, které je na dané platformě obvyklé, můžete narazit na problémy. Potřebovali jsme takové věci, jako je otevření prohlížeče uživatele z aplikace a proto jsme použili nové Desktop API z Java6. Také jsme potřebovali přirozený vzhled pro danou platformu. Použili jsme Swing, a tak jsme zapnuli platformově závislý vzhled. Následně jsme museli opravit několik chyb, protože se na různých systémech změnilo pořadí volání metod u vlastních komponent. Museli jsme upravit vzhled našich komponent (např. povinných a chybných položek) a upravit formuláře, aby na každém systému vypadali dobře a vše se vždy vešlo (to byl asi největší oříšek).

Protože jsme chtěli také lepší integraci do Mac OS X, museli jsme provést několik úprav (1, 2 a 3).

Narazili jsme také na problém s tiskem z Javy pod Linuxem. Museli jsme přidat hack, abychom byli schopni v Linuxu vůbec tisknout.

Zvyklostí ve Windows je, že formulář má tlačítka Uložit a Zavřít (v tomto pořadí). Na Mac OS X a Linuxu je ovšem Zavřít a Uložit (tj. v pořadí opačném). Abychom nemátli uživatele, museli jsme se přizpůsobit – dle systému tlačítka prohazujeme.

Protože jsme udělali výše uvedená rozhodnutí o vzhledu a integraci, začali jsme vyžadovat Java verze 6. Což je problém v Mac OS X, kde je Java 1.6 jen pro verzi 10.5 na 64-bitové Intelovské platformou. Čímž jsme se dostali do úzkých – buď hezký vzhled s dobrou integraci a nebo širší podporu systémů. Zvlášť u uživatelů Mac OS X jsme se snad ani nemohli rozhodnout jinak – vzhled vyhrává. Teď jen doufejme, že komunita starších systémů není příliš rozsáhlá.

Na nativním vzhledu bude jistě ještě mnoho práce. Pokud narazíte na část, která ještě nevypadá na vašem systému „dokonale“, rádi se o tom dozvíme.

Instalační balíčky

Častým způsobem distribuce Java aplikací je šíření aplikací jako JAR instalátory. Nicméně náš produkt je určen pro širokou masu lidí, kteří neumí s počítačem příliš pracovat. Museli jsem zařídit, aby vše bylo pro daný systém obvyklé. Navíc uživatel ani nemusí mít nainstalovanou Javu („Java je přeci to na ty hry v mobilu“). Další skupina lidí má důvod spíše psychologický – instalátor prostě vyžaduje. K těmto patřím i já, protože si svůj Linux nenechám zaneřádit kdejakou bezbalíčkovitou aplikací.

Bylo tedy jasné, že budeme muset vytvářet instalátory. Vytvořili jsme tedy EXE pro Windows, DMG pro Mac OS X a DEB pro Linux. Do konce roku snad přidáme i podporu pro RPM.

Naprostou samozřejmostí v Linuxu je i automatická aktualizace. Připravili jsme tedy deb repository a aplikace si po instalaci zaregistruje aktualizační zdroj.

Proč PostgreSQL

Původní plán byl, že základní verze zdarma bude používat databázi Apache Derby. Tato databáze by byla součástí aplikace a nezabírala by paměť, když účetnictví neběží.

Potřebovali jsme však také podporu „skutečné“ SQL databáze. Jak kvůli síťové podpoře, tak i kvůli velkým zákazníkům (řádově desítky až stovky současně připojených uživatelů). Dříve jsme používali Sybase, ale kvůli licenčním poplatkům jsme přešli na PostgreSQL. Navíc jsme s ním měli velké a dobré zkušenosti z jiných projektů. Původně jsme plánovali používat PostgreSQL jen u větších instalací a prováděli bychom ji ručně.

Nicméně jsme tvrdě narazili na kompatibilitu SQL v Apache Derby a PostgreSQL a také podporu vlastností v této odlehčené databázi (neumí např. limit a offset). Stáli jsme tedy před další volbou   buď absolvovat problémy při správě instalátoru s PostgreSQL na různé systémy nebo řešit nekompatibilitu a omezenost SQL databází.

Proto jsme se rozhodli podporovat jen PostgreSQL. Navíc jeho paměťové nároky nejsou u malých instalací velké a dokáže nastartovat během pár vteřin.

Pro snížení paměťové náročnosti a rychlosti startu počítače, je možné připravit jednoduchou službu, která PostgreSQL dle potřeby spustí a pak zase ukončí. Na druhou stranu se tím zase zpomalí start WinStromu.

Zpětná vazba

Protože instalátor a aplikace poběží na mnoha velmi odlišných systémech, potřebovali jsme systém, který nám umožní sbírat informace o chybách u zákazníků. Když nastane chyba, potřebujeme se dozvědět, který systém uživatel používá, zda má volné místo na disku, callstack chyby a mnoho dalších technických detailů. Tuto technologii nabízí např. Microsoft nebo i Ubuntu. My jsme ale potřebovali jednotný systém pro všechny naše podporované platformy.

Proto jsme vytvořili nástroj zvaný Fixopia, který uživateli zobrazí omluvný text, umožní zadat popis problému a následně odešle zprávu k nám. Odeslání je samozřejmě volitelné. Tento systém jsme již dříve vyvinuli pro webové aplikace a jen jsme jej adaptovali do GUI prostředí.

V tomto článku jsme popsali některé problémy, na které člověk může člověk narazit při psaní desktopové aplikace v Javě.

19 komentářů u „WinStrom 10: pod pokličkou“

  1. Neuvažovali ste o firebirdu? ten má embedded databázi… Nebo rovnou o objektové db?
    např. db4o nebo neodatis?

  2. a jar balicek teda nebude? instalator rovno instaluje aj db alebo je schopny vyuzit moju aktualnu instalaciu postgresu?

  3. laco: u Linuxu chceme vždy použít PostgreSQL co už je v systému. Jinak bychom ještě museli rozlišovat různé platformy. Na debianu/ubuntu si vytváříme vlastní instanci pomocí pg_createcluster. Připravujeme RPM balíček a tam budeme nejspíš vytvářet databáze v existující instanci. Nicméně cílem je, aby uživatel nainstaloval balíček a všechno již běželo.

    JAR instalátor zatím nebude. Možná tgz/zip varianta, ale ještě to není jisté.

  4. petr: a na widlach? zip varianta by bodla, na widlach som zastancom pristupu „portable“ aplikacii -rozbalit, pripadne par „rucnych“ krokov. vysledkom je pripadna lahka migracia a (takmer) ziadne problemy pri preinstalacii alebo nutnosti pracovat na inej masine. mozme prejst na email komunikaciu?

  5. zdravim, zaujimala by ma strucna statistika vyvoja kolko Vam to trvalo kolkym ?
    ak to nie je tajne … dik

  6. Petr Smid: vypadá to jako Gnome aplikace puštěná v KDE. Bohužel kvůli licenci knihovny QT (GPL) ji nemohl Sun použít.

    kares: cca 10 člověkoroků. V posledním čtvrtletí na vývoji pracovalo 9 lidí. Reálný vývoj trval skoro tři roky.

  7. Kdyz uz jste se rozhodli vytvaret multiplatformni ucetnictvi, nenapadlo vas zamyslet se nad nejakym mene platformove zavislem jmene, nez je WINstrom ?

  8. xxxx: napadlo. WinStrom je účetnictví, které existuje už 18 let. WinStrom 10 je pouze jeho přepis do moderních technologií a lepší datové struktury.

    Proto jsme se rozhodli zachovat název značky.

  9. Dobrý den, zkouším WinStrom 10.2 na Linuxu a chtěl jsem změnit Lokk And Feel na jiný než Gnome. Nakopíroval jsem laf knihovnu do /usr/share/winstrom/lib and do spouštěče winstrom v /usr/bin jsem přidal -Dswing.defaultlaf=…, ale laf se nezměnil. Lze to udělat jinou cestou nebo to se v programu napevno nastavuje systemový vzhled?

  10. Karel Nagy: Ok, přesvědčil jste mně. Řešením bude udělat přidat toto do /etc/default/winstrom

    # Extra WinStrom args
    WINSTROM_ARGS=–no-laf

    # Extra arguments for Java (like -client).
    WINSTROM_JAVA_ARGS=“${WINSTROM_JAVA_ARGS} -Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel “

    To první pro případ, že chci vypnout implicitní LAF a to druhé pokud jej chcete nastavit na konkrétní hodnotu.

    Toto bude přidané až od beta 3 (zítra nebo pozítří).

  11. Děkuji – vyzkouším. Rozhodně jsem to nemyslel zle – jenom nemám rád nativní vzhed Javy pod Gnome, protože s ním mám problémy, tak si do Java aplikací dávám Java vzhled.

  12. Já jsem to ani zle nebral 🙂 Nicméně na tom screenshotu, co jste poslal, bylo několik problémů, které musíme vyřešit. Bylo by tedy lepší u některých zákazníků, kterým to bude vadit nasadit jiný LaF.

  13. vo windows instalacii je postgresql databaza v adresari „pgsql“ -tato databaza je „instalovana“ vratane zapisov do registrov a registracie dll kniznic alebo sa sprava ako „portable“, t.j. je to prosta kopia z instalacneho balika? dik za info.

  14. Dobrý den.
    Zajímalo by mě, zda jste někdy uvažovali o použití MySQL místo PostgreSQL? Pokud ano, můžete nastínit důvody, které vás vedli k použití zvolené databáze?

    Děkuji.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *