MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
DIPLOMOVÁ PRÁCE
Java aplikace pro posílání SMS
Kamil Páral Brno, 2009
Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
Děkuji vedoucímu diplomové práce RNDr. Radku Ošlejšekovi, Ph.D. za výborné odborné vedení, kterého se mi při psaní této práce dostávalo.
Shrnutí Práce ve své teoretické části uvede čtenáře do problematiky zasílání krátkých textových zpráv (SMS) do GSM sítí pomocí internetových webových bran. Rovněž představí a porovná nejznámější funkční řešení pracující v této oblasti. V praktické části poté předvede vlastní řešení v podobě funkční multiplatformní aplikace spolu s návrhem v podobě strukturních UML diagramů a popisem technologií použitých k implementaci.
Klíčová slova GSM, SMS, telefonní operátoři, webové SMS brány, Internet, Java
Obsah 1 Úvod.................................................................................................................................................. 7 2 Posílání SMS prostřednictvím Internetu....................................................................................... 8 2.1 Základní pojmy............................................................................................................................... 8 2.1.1 GSM........................................................................................................................................ 8 2.1.2 SMS......................................................................................................................................... 8 2.1.3 SMS brána............................................................................................................................... 9 2.2 České prostředí................................................................................................................................ 9 3 Existující aplikace pro posílání SMS............................................................................................ 11 3.1 Kubík SMS DreamCom................................................................................................................ 11 3.2 DreamCom SE.............................................................................................................................. 12 3.3 Krteček.......................................................................................................................................... 12 3.4 CoolSMScz................................................................................................................................... 13 3.5 EurotelSMS................................................................................................................................... 14 3.6 SMSSend....................................................................................................................................... 15 4 Aplikace „Esmska“........................................................................................................................ 16 4.1 Specifikace aplikace..................................................................................................................... 17 4.2 Popis technologií........................................................................................................................... 19 4.2.1 Java........................................................................................................................................ 19 4.2.2 Swing.................................................................................................................................... 19 4.2.3 Substance Java look & feel.................................................................................................. 19 4.2.4 Beans Binding....................................................................................................................... 20 4.2.5 Gettext................................................................................................................................... 20 4.2.6 Apache Commons HttpClient.............................................................................................. 20 4.2.7 Mozilla Rhino....................................................................................................................... 20 4.3 Návrh aplikace.............................................................................................................................. 21 4.3.1 Analýza požadavků............................................................................................................... 21 4.3.2 Model doménové oblasti...................................................................................................... 24 4.3.3 Diagram balíků..................................................................................................................... 24 4.3.4 Diagramy tříd........................................................................................................................ 25 4.3.5 Diagram externích balíků..................................................................................................... 29 4.3.6 Sekvenční diagram poslání SMS......................................................................................... 30 4.4 Popis způsobu vývoje................................................................................................................... 31 4.4.1 Svobodný software............................................................................................................... 31 4.4.2 Spolupráce komunity............................................................................................................ 32 4.5 Implementace aplikace................................................................................................................. 33 5
4.5.1 Emulace webového prohlížeče............................................................................................. 33 4.5.2 Zásuvný skriptovací systém operátorů................................................................................. 34 4.5.3 Internacionalizace................................................................................................................. 35 4.5.4 Výsledky implementace....................................................................................................... 36 4.6 Dokumentace aplikace.................................................................................................................. 38 4.6.1 Zásuvný systém operátorů.................................................................................................... 38 4.7 Úspěchy projektu.......................................................................................................................... 40 4.7.1 Schopnosti aplikace.............................................................................................................. 40 4.7.2 Ohlas uživatelů..................................................................................................................... 42 4.7.3 Přínos od komunity............................................................................................................... 45 5 Závěr............................................................................................................................................... 47 A OperatorHowto............................................................................................................................. 49
6
1 Úvod Možnosti lidské komunikace se rychle rozvíjejí s postupnou digitalizací zařízení. Některé z technologií poslední doby, jako jsou mobilní telefony nebo Internet, se rychle staly fenoménem a mnoho lidí si již život bez nich dokáže jen stěží představit. Zejména u mladších lidí v našich krajinách hraje velkou roli posílání krátkých textových zpráv, takzvaných SMS, pomocí mobilního telefonu. Je podstatně levnější alternativou ke klasickému volání, přesto však umožňuje rychle doručit daný vzkaz a zůstat tak s vybraným člověkem v kontaktu. Tato diplomová práce se bude zabývat návrhem a implementací aplikace, která se pokusí propojit světy krátkých textových zpráv a Internetu. Použití této aplikace je samozřejmě vázáno na použití počítače, takže není tak flexibilní, jako v případě mobilního telefonu, avšak přináší i mnoho výhod. Zejména je to posílání zpráv zdarma, neboť mnoho mobilních operátorů provozuje zdarma použitelné webové brány pro posílání SMS, snazší psaní zpráv pomocí klávesnice počítače místo tlačítek telefonu a správa seznamu kontaktů, kterého byste nemohli při používání více webových bran operátorů jinak docílit.
7
2 Posílání SMS prostřednictvím Internetu Tato kapitola se věnuje vysvětlení některých základních pojmů ze světa mobilní komunikace a přiblížením aktuálního stavu, který panuje v českém prostředí ohledně možností zasílat krátké textové zprávy za použití Internetu.
2.1 Základní pojmy 2.1.1 GSM GSM je zkratkou pro Global System for Mobile communications a je nejrozšířenějším světovým standardem pro mobilní komunikaci. Na počátku roku 2007 ho odhadem používalo přes 80% světového mobilního trhu [GSM-MDS]. Jeho velké rozšíření umožňuje uživatelům používat svůj telefon v mnoha zemích světa. GSM se označuje za druhou generaci mobilního telefonního systému (2G). Tento standard je přesně ten, který v současné době většina lidí používá pro uskutečňování hovorů přes mobilní telefon. Více informací o historii, principech a technických aspektech GMS sítí se lze dočíst například v publikaci [Hillebrand 02].
2.1.2 SMS SMS je zkratkou pro Short Message Service a označuje službu zasílání krátkých textových zpráv. Tento komunikační protokol byl poprvé zaveden jako součást GSM a získal značnou oblibu. Jeho technická realizace [SMS] definuje způsoby zasílání zpráv až o 160 znacích za použití mobilních přístrojů GSM. Podpora pro textové zprávy se poté dostala i do alternativních mobilních standardů. Znaky SMS zprávy mohou být v 7bitovém, 8bitovém nebo 16bitovém kódování. Délka příslušné zprávy potom vychází na 160, 140 nebo 70 znaků. Podpora pro nejstarší 7bitové kódování je povinná pro všechny GSM přístroje. Jak uvádí [Hillebrand 02] v kapitole 16.2.11, tato základní sada podporuje většinu evropských znaků, nicméně neobsahuje některé východoevropské a severoevropské znaky, kam spadá i mnoho našich českých znaků. 8bitové rozšíření obsahuje několik dodatečných znaků a používá se zejména pro datové přenosy. Nejnovější 16bitové kódování je nutné k zapsání neevropských jazyků, jako je arabština, čínština, japonština nebo ruština (a samozřejmě plně podporuje již i češtinu). Zde je použito kódování UCS-2 (předchůdce UTF-16). Podrobnější technická specifikace kódování a znakových sad použitých v GSM sítích lze najít v [GSM-LANG]. Novější mobilní telefony často umožňují nastavit, jaká podpora pro jazyky (tzn. které kódování) se má pro textové zprávy použít. Dalším rozšířením SMS jsou vícenásobné SMS, často nazývané „dlouhé SMS“. Jedná se v podstatě o jednoduché zřetězení několika klasických zpráv. Do jednotlivých zpráv se přidávají meta-informace, 8
které slouží k jejich provázání. Toto rozšíření bylo dle kapitoly 16.2.9 v [Hillebrand 02] navrženo tak, aby se text správně zobrazoval i na přístrojích nepodporujících tento standard. Kvůli potřebě dodatečných meta-informací se délky zpráv v jednotlivých kódováních snižují na 153, 134 nebo 67 znaků.
2.1.3 SMS brána Poskytovatelé SMS bran zajišťují přenos zpráv mezi uživateli mobilních telefonů a třetími stranami. Tyto služby mohou zahrnovat přenos zpráv s vysokou důležitostí, zasílání firemních a podnikových zpráv nebo zasílání zpráv ze zábavního průmyslu, jako je například televizní hlasování. Speciální brány umožňují zasílání SMS na pozemní telefonní linky pomocí převodu textu na řeč, zasílání e-mailů pomocí SMS nebo opačně, využití SMS spolu s vnitropodnikovými aplikacemi a podobně. Tyto firemní brány jsou samozřejmě placené a v závislosti na daném operátorovi bývají přístupné pomocí obvyklých rozhraní, jako je HTTP, SMTP či webové služby. Komunikace může probíhat zabezpečeně či nezabezpečeně pomocí Internetu nebo například pomocí VPN tunelu. V této práci se náš zájem bude soustředit na ty brány mobilních operátorů, které umožňují zasílat SMS veřejně a bezplatně (z hlediska použití brány, nikoliv ceny zprávy) prostřednictvím Internetu. Mezi ně nejčastěji spadají e-mailová a zejména webová rozhraní, která umožňují uživatelům posílat zprávy pomocí klasických webových stránek. Zprávy však mohou být doplňovány reklamními sděleními, přístupné pouze registrovaným zákazníkům, případně placené. Některé z těchto bran umožňují nastavit i dodatečné volby zasílání zpráv, jako je jméno a číslo odesilatele či zobrazení zprávy pouze na displej telefonu bez možnosti jejího uložení.
2.2 České prostředí V současné době existují v České republice tři větší mobilní sítě – T-mobile, O2 a Vodafone. V roce 2007 zde také spustil svoji síť nový operátor U:fon, který zde spustil první čistě 3G1 mobilní síť. T-mobile je síť vlastněná německou korporací Deutsche Telekom. Provozuje veřejnou SMS bránu2, kde lze zdarma zasílat zprávy do sítě T-mobile o délce až 160 znaků. Mobilní zákazníci se mohou na portále zaregistrovat a získat rozšířené možnosti odesílání zpráv. O2 je síť vlastněná společností Telefónica. Zastřešuje službu 1188 provozující veřejnou SMS bránu3, kde lze zdarma zasílat zprávy do sítě O2 o délce až 60 znaků. Zbytek zprávy může být doplněn reklamou.
1 nová generace standardů určených pro mobilní sítě 2 http://sms.t-zones.cz 3 http://sms.1188.cz
9
Vodafone je síť vlastněná stejnojmennou společností Vodafone. Provozuje veřejnou SMS bránu4, kde lze zdarma zasílat zprávy do sítě Vodafone o délce až 760 znaků (rozdělené do 5 SMS). Mobilní zákazníci se mohou na portále přihlásit5 a získat rozšířené možnosti odesílání zpráv. Kromě vlastních mobilních operátorů mohou webové brány provozovat také další firmy, které buď mají vlastní smlouvy s danými operátory, nebo fungují jako prostředníci a využívají jejich veřejných bran.
4 http://www.vodafonesms.cz 5 https://samoobsluha.vodafone.cz
10
3 Existující aplikace pro posílání SMS Tato kapitola představí nejznámější existující aplikace, které lze v českém prostředí použít pro posílání SMS přes Internet. U každé aplikace je uveden její krátký popis a zejména shrnutí výhod a nevýhod, které aplikace uživateli přináší.
3.1 Kubík SMS DreamCom Kubík SMS DreamCom6 je jedním z nejznámějších programů pro odesílání SMS na českém Internetu. Má široké možnosti, např. množství podporovaných volných i placených SMS bran, hromadné odesílání zpráv, časované odesílání zpráv, profily uživatelů, komunikace s připojeným mobilním telefonem a další. Program taktéž podporuje tvorbu uživatelských bran pomocí vlastního skriptovacího jazyku. Z hlediska schopností je nutno hodnotit program velmi dobře. Uvedený program je placený; neplacená verze obsahuje reklamní pruh, na který je nutno občas kliknout. Zobrazované reklamy ve formátu Flash výrazně zatěžují procesor počítače, i když program není v popředí. Jedinou podporovanou platformou je operační systém Microsoft Windows.
Obrázek 3.1: Hlavní okno aplikace Kubík SMS DreamCom
6 http://www.dreamcom.cz/index_kubik.php
11
3.2 DreamCom SE DreamCom SE7 je odlehčená verze aplikace Kubík SMS DreamCom. Vlastní možnosti aplikace jsou téměř srovnatelné, pouze je mnohem jednodušší uživatelské rozhraní zaměřené především na nezkušené uživatele. Program nabízí několik motivů vzhledu, uživatelské rozhraní však vždy zůstává stejné. Stejně jako u Kubík SMS DreamCom je program je opět placený; v neplacené verzi zobrazuje reklamní pruh. Reklamy jsou statické obrázky, které nemají podstatný dopad na výkon počítače. Program je opět dostupný pouze pro platformu Microsoft Windows.
Obrázek 3.2: Hlavní okno aplikace DreamCom SE
3.3 Krteček Krteček8 je nekomerční projekt vyvíjený jediným nadšencem. Program obsahuje slušné množství funkcí včetně podpory nejznámějších bran, uživatelských profilů, automatického rozpoznávání bezpečnostního kódu, uživatelských podpisů nebo třeba hlídače pro webovou službu XChat. Uživatelské rozhraní je trochu překomplikované a nezkušeným uživatelům může působit problémy se v něm zorientovat. Zajímavou a netypickou vlastností je možnost přiřazovat jednotlivým kontaktům fotky.
7 http://www.dreamcom.cz/index_dcse.php 8 http://alahomora.ic.cz
12
Výhodou programu je plná funkcionalita zdarma. Uživatelé mají taktéž možnost dávat podněty na možné vylepšení programu v diskuzi na webových stránkách programu. Autor diskuzi opravdu sleduje a odpovídá. Nevýhodou je dostupnost jen pro systémy Microsoft Windows. Program je pouze freeware, zdrojové kódy programu dostupné nejsou.
Obrázek 3.3: Hlavní okno aplikace Krteček
3.4 CoolSMScz CoolSMScz9 je graficky atraktivní program obsahující podporu pro základní SMS brány a uživatelsky vcelku intuitivní ovládání. Program nabízí možnost používat cestovní profil, v němž jsou všechny údaje ukládány na serveru, a tak k nim poté máte přístup odkudkoliv. Uživatelské rozhraní je hodně odlehčené a používá hodně prázdného prostoru, takže program působí přehledně a jednoduše. Program je dostupný pouze pro systémy Microsoft Windows. Velkou nevýhodou aktuální verze je nemožnost spravovat kontakty lokálně, ale pouze přes webové rozhraní. Bez vytvoření účtu a přihlášení tedy nelze vytvořit nový kontakt. Program je v základní verzi zdarma, ovšem s omezeným počtem kontaktů v seznamu. Připlacením lze tento limit zvýšit.
9 http://www.coolsms.cz
13
Obrázek 3.4: Psaní zpráv v programu CoolSMScz
3.5 EurotelSMS EurotelSMS10 je příjemně vypadající program vyvíjený jediným nadšencem. Navzdory svému názvu podporuje velké množství webových SMS bran. Obvyklými obsaženými funkcemi jsou například uživatelské profily, podpisy, historie odeslaných zpráv. Obsahuje i některé dodatečné funkce, jako je komprese/dekomprese zprávy, šablony zpráv, automatické rozeznávání bezpečnostních kódů či mini-klient pro ICQ. Výběr příjemců zprávy pomocí rozvinovacího seznamu či externího okna není úplně pohodlný. Výborným nápadem je pět tlačítek, ke kterým lze přiřadit nejpoužívanější adresáty. Program často vypisuje hlášky, které běžnému uživateli budou stěží srozumitelné (např. „Konec druhého vlákna“ po odeslání zprávy). Program je zcela zdarma, nevýhodou zůstává závislost na operačních systémech Microsoft Windows. Na webových stránkách autora je k dispozici webové fórum, kde může uživatel řešit dotazy a problémy nebo navrhnout vylepšení programu. Autor fórum sleduje a na dotazy odpovídá. Webové stránky jsou na nekvalitním hostingu, takže často nefungují. Program je pouze freeware, zdrojové kódy nejsou dostupné.
10 http://eurotelsms.wz.cz
14
Obrázek 3.5: Hlavní okno aplikace EurotelSMS
3.6 SMSSend SMSSend je aplikace pracující v textovém rozhraní operačních systémů unixového typu. Aplikace obsahuje propracovaný systém skriptů, který umožňuje přidat vlastní bránu pro zvoleného operátora pouhým vytvořením textového souboru v předdefinovaném formátu. Aplikace hned po instalaci obsahuje přes 130 webových bran z celého světa, včetně bran českých. Neboť se parametry programu zadávají přes příkazovou řádku, program umožňuje nadefinovat si v příslušných souborech jakási makra, která mohou zastupovat funkci seznamu kontaktů a není tedy nutné vždy vypisovat všechny údaje. Pro program existují grafické nadstavby, jako je GSMSSend11, KSMSSend12 nebo KySMS13. Neboť se komunikace s aplikací odehrává v textovém režimu, je její použití cíleno na poměrně zkušené uživatele. Aplikace je sice funkční, ale její vývoj se zřejmě zastavil, neboť už neexistuje ani původní domovská stránka aplikace14. Dalším problémem jsou skripty na české operátory, které sice jsou zahrnuty, avšak jsou velmi dlouho neaktualizované, a tudíž nefunkční. Další ranou pro projekt bylo jeho odstranění z repositářů operačního systému Debian v červnu 2008 kvůli licenčním problémům15. Navzdory všem těmto nevýhodám zůstává propracovaný systém skriptování webových bran zajímavou inspirací pro projekt vytvořený v praktické části této diplomové práce. 11 12 13 14 15
http://freshmeat.net/projects/gsmssend Program nemá domovskou stránku. http://freshmeat.net/projects/kysms http://zekiller.skytech.org/smssend_menu_en.html http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=399685
15
4 Aplikace „Esmska“ Aplikace Esmska byla vytvořena, aby se pokusila zlepšit stávající, v mnohém nevyhovující situaci v posílání SMS přes Internet v českém (a nejen českém) prostředí. Cílem bylo odstranit neduhy aplikací zmíněných v minulé kapitole a vytvořit tak opravdu univerzální a fungující aplikaci pro každého. Ačkoliv se to nemusí každému zdát zřejmé, zejména současná mladá generace považuje okamžitou komunikaci stylem SMS zpráv (a dalších služeb) za naprosto samozřejmou a stěží si dokáže existenci bez ní představit. Mnoho studentů a studentek je schopno posílat až několik desítek SMS zpráv denně naprosto běžně. Potenciální uživatelská základna pro program, který bude jednoduchý, intuitivní, nezávislý na platformě či operačním systému a samozřejmě zcela zdarma, je tedy značná.
Obrázek 4.1: Hlavní okno aplikace Esmska (anglická lokalizace)
K aplikaci samotné náleží i množství podpůrných webových stránek, z nichž ty nejdůležitější jsou vyjmenovány zde: ● http://esmska.googlecode.com – domovská stránka programu ● http://code.google.com/p/esmska/w/list – dokumentace k programu ● http://code.google.com/p/esmska/issues/list – systém pro sledování chyb v programu ● http://esmska.googlecode.com/svn – systém pro správu zdrojových kódů programu ● https://answers.launchpad.net/esmska – podpůrné diskuzní fórum programu ● https://translations.launchpad.net/esmska – webový nástroj pro lokalizaci programu 16
4.1 Specifikace aplikace Program umožní uživateli odesílat zprávy SMS do mobilních sítí s využitím připojení k Internetu. K dosažení funkčnosti bude program využívat veřejně dostupné webové brány jednotlivých operátorů, včetně bran vyžadujících autentizaci uživatele. Program bude simulovat funkci webového prohlížeče a k práci využije parsování webových stránek a standardní HTTP komunikace. Program bude napsán v programovacím jazyce Java multiplatformním způsobem, bude fungovat pod různými operačními systémy. Podpora pro jednotlivé mobilní operátory bude realizována rozšiřitelným zásuvným systémem. Tento systém umožní přidávat a odstraňovat podporu zvolených operátorů manipulací se soubory (skripty) operátorů v definovaném adresáři, to vše bez potřeby rekompilace programu. Skript operátora bude soubor napsaný v jednoduchém skriptovacím jazyce a splňující předdefinované požadavky. Smyslem zásuvného systému operátorů je snadná možnost podílení se ze strany uživatelské komunity na podpoře zatím nepodporovaných mobilních sítí. Program bude přehledný, jednoduše ovladatelný a přístupný pro běžné uživatele. Ovládání bude možné i za použití výhradně klávesnice pro potřeby nevidomých uživatelů. Plná internacionalizace programu zajistí možnost lokalizace a následné využití programu nezávisle na jazyce, zemi či kultuře uživatele. Tyto požadavky zpřístupní program nejširšímu spektru uživatelů. Program bude obsahovat seznam kontaktů, ve kterém si uživatel bude moci předdefinovat příjemce pro zprávy SMS. Seznam kontaktů bude možno spravovat (přidávat, upravovat a odstraňovat kontakty). U každého kontaktu půjde nadefinovat jméno, telefonní číslo a výchozí webovou bránu. V seznamu kontaktů bude možno vyhledávat. Program poskytne uživateli možnost vytvořit text zprávy a určit jejího příjemce, buď nově definovaného, nebo již existujícího v seznamu kontaktů. Jako příjemce bude možné zvolit více kontaktů naráz (hromadné odesílání zpráv). Editor zpráv bude podporovat běžné textové operace (vracení změn, práce se systémovou schránkou) a bude zobrazovat počet napsaných znaků. Vytvořené zprávy nebudou okamžitě odesílány, ale budou nejprve zařazeny do fronty zpráv. Odesílání zpráv z fronty bude možno pozastavit/znovu spustit, pořadí zpráv ve frontě bude možno měnit, jednotlivé zprávy ve frontě půjdou odstranit či vyvolat k úpravě. Pokud operátor dané brány vyžaduje jistý čekací interval mezi odesláním dvou zpráv, tento interval zde bude zobrazen. Uživatel bude informován o průběhu a výsledku odesílání zprávy SMS. Pokud operátor vyžaduje k odeslání zprávy opsání kontrolního kódu (CAPTCHA), bude uživatel vyzván ke splnění této akce. K dispozici bude historie odeslaných zpráv umožňující detailní pohled na úspěšně odeslané zprávy z minulosti. Jednotlivé zprávy v historii zpráv půjde individuálně odstraňovat, případně přenést jejich údaje do editoru zpráv pro vytvoření podobné zprávy. Historii bude možno prohledávat. 17
Program bude obsahovat seznam předvoleb, kterými bude možno upravit jeho chování. Sem spadá například změna vzhledu programu nebo nastavení předvoleb operátorů – zejména autentizačních údajů pro operátory, kteří to vyžadují. Program bude schopen detekovat a upozornit, pokud vyjde nová verze programu. Program bude podporovat možnost exportu seznamu kontaktů do lidsky čitelného formátu použitelného pro převod kontaktů do jiné aplikace. Taktéž umožní kontakty z tohoto formátu importovat. Program bude obsahovat možnost importu kontaktů z konkurenčního programu DreamCom, což je v českém prostředí pravděpodobně nejoblíbenější program daného druhu. Program bude vydán jako svobodný software pod vhodnou svobodnou licencí (tyto pojmy vysvětluje kapitola 4.4.1).
18
4.2 Popis technologií Jak před počátkem, tak v průběhu vývoje bylo nutné udělat zásadní rozhodnutí ohledně použitých technologií, neboť podstatně ovlivňují možnosti a náročnost vývoje programu. Tato kapitola uvádí seznam a popis nejdůležitějších využitých technologií.
4.2.1 Java Java je velice rozšířený objektově orientovaný programovací jazyk a softwarová platforma. Nabízí stabilní základ pro vývoj projektu a mnoho existujících knihoven od třetích stran. Důležitou vlastností, kvůli které byla Java zvolena, je její nezávislost na použitém operačním systému. Java Virtual Machine spouštějící Java programy je dostupná pro většinu nejpoužívanějších operačních systémů a platforem současnosti16. Přenositelné programy lze psát samozřejmě i v jiných jazycích, ale Java je na tomto principu postavena. Přitom program ve svém konceptu neobsahuje žádnou funkci, která by byla příliš závislá na použitém operačním systému. Tento fakt, spolu s mou předchozí zkušeností s programováním v tomto jazyce [Bloch 2001], způsobil, že jsem vybral Javu jako velice vhodné běhové prostředí. Více o programování z jazyce Java se lze dočíst v [SUN JT].
4.2.2 Swing Swing je grafická knihovna vyvinutá firmou Sun Microsystems. Je součástí standardní knihovny Java a poskytuje API pro tvorbu nejběžnějších grafických prvků v uživatelském rozhraní. Nepoužívá žádné vazby na nativní grafické prvky operačního systému, vše se vykresluje pouze za použití čisté Javy. Swing je velice rozšiřitelný a umožňuje použití zásuvného „look and feel“ – změnu vzhledu a chování daných prvků [SUN JT]. Swing byl zvolen kvůli nezávislosti na operačním systému, dostupnosti hned ve výchozí instalaci Javy a mým zkušenostem s vývojem za pomoci této knihovny.
4.2.3 Substance Java look & feel Substance17 je zásuvný „look and feel“ použitelný spolu s grafickou knihovnou Swing. Pro odlišení a zvýšení atraktivity projektu byl vybrán tento zásuvný modul jako výchozí vzhled programu pro některé platformy. Obsahuje velké množství přednastavených motivů vzhledu, včetně možnosti upravit si veškerá barevná schémata, tvary tlačítek či vzory výplně dle vlastních preferencí. Použití této knihovny v projektu není náročné, i přesto to velice zlepšuje uživatelský zážitek a dojem z používání programu.
16 http://www.java.com/en/download/manual.jsp 17 https://substance.dev.java.net
19
4.2.4 Beans Binding Beans Binding18 je mladá a moderní knihovna umožňující snadnou synchronizaci dvou atributů v objektech JavaBeans [SUN JT]. Knihovna omezuje psaní událostí a posluchačů vytvářených mnohdy jen za účelem udržení stejné hodnoty ve více atributech. Místo toho vyžaduje pouze jednoduchou definici požadované funkcionality, o zbytek se již stará sama. Díky tomu umožňuje rychlejší a jednodušší vývoj programu. Podpora pro tuto knihovnu byla přidána do IDE NetBeans 6, kde se dá tato knihovna využívat dokonce použitím grafického návrháře.
4.2.5 Gettext Gettext19 je zároveň softwarová knihovna i sada nástrojů určených pro internacionalizaci a následnou lokalizaci programu. Je velmi známá zejména ve světě svobodného softwaru a je to převládající způsob internacionalizace programů v linuxových distribucích. Použití nástrojů Gettext bylo vybráno z důvodu poskytování širších možností překladatelům, než u standardních properties souborů z Javy [GTXT]. Taktéž bylo souborů ve formátu Gettext potřeba k využití portálu Launchpad, který umožňuje snadno do překladů zapojit i uživatele s minimem technických znalostí. Na knihovně Gettext staví kolekce nástrojů Translate Toolkit20, kterých je při vývoji taktéž využito.
4.2.6 Apache Commons HttpClient Apache Commons HttpClient21 je komplexní knihovna pro práci s protokolem HTTP. Neboť jednou ze základních podstat programu vyvíjeného v rámci této práce je komunikace pomocí protokolu HTTP, byl výběr knihovny pro pomoc s tímto úkolem logickou volbou. Zmíněná knihovna zvládá nejen základní funkcionalitu očekávanou od klienta HTTP, ale umí i pracovat s cookies, nastavovat pokročilé parametry HTTP nebo obcházet nejčastější chyby tvůrců webových stránek a emulovat tak chování webového prohlížeče.
4.2.7 Mozilla Rhino Mozilla Rhino22 je implementace JavaScriptu napsaná čistě v Javě. Neboť jedním z požadavků na aplikaci bylo využívání skriptů k definici bran operátorů, bylo nutné zvolit vhodný skriptovací jazyk a jeho implementaci. Javascript se ukázal dobrou volbou a Mozilla Rhino umožňuje jak volat JavaScriptové metody přímo z kódu Javy, tak i obráceně metody Javy přímo z JavaScriptu. Mozilla Rhino je součástí Sun Java 6, pro ostatní implementace Javy je ji možné přibalit k programu jako knihovnu. 18 19 20 21 22
https://beansbinding.dev.java.net http://www.gnu.org/software/gettext/gettext.html http://translate.sourceforge.net/wiki/toolkit/index http://hc.apache.org/httpclient-3.x http://www.mozilla.org/rhino
20
4.3 Návrh aplikace Tato kapitola popisuje návrh architektury programu pomocí jazyka UML [KaMu 07]. Zobrazuje nejdůležitější prvky systému, a to zejména pomocí popisu případů užití, diagramů tříd a diagramů balíků. Poskytnut je i sekvenční diagram jednoho z nejvýznamnějších procesů v programu, kterým je odesílání SMS přes bránu operátora.
4.3.1 Analýza požadavků Diagram případů užití vytvořený z analýzy požadavků zobrazuje obrázek 4.2. Diagram přehledným grafickým způsobem zachycuje potřeby a požadavky uživatelů a vzájemné vztahy mezi nimi. Taktéž dává představu o rozsahu systému a jeho hranicích. Každý případ užití je následně v textu specifikován pomocí toků událostí.
Obrázek 4.2: Případy užití
Účastníci Uživatel: Uživatel programu. Operátor: Operátor mobilní sítě, představovaný webovou stránkou, coby SMS branou operátora. Po spuštění: Pravidelný okamžik nastávající těsně po spuštění programu. Případy užití Správa seznamu kontaktů Normální tok: 1. P.u. začíná, když uživatel zvolí požadovanou operaci s kontakty: „přidání kontaktu“, „úprava kontaktu“, „odstranění kontaktu“. 2. POKUD je akcí „přidání kontaktu“: 2.1. Uživatel zadá údaje nového kontaktu. 21
2.2. Program vytvoří nový kontakt. 3. POKUD je akcí „úprava kontaktu“: 3.1. Uživatel upraví kontaktní údaje. 3.2. Program uloží změněný kontakt. 4. POKUD je akcí „odstranění kontaktu“: 4.1. Program odstraní zvolený kontakt. Alternativní tok: 1. Uživatel může před potvrzením akce kdykoli akci zrušit. Import/export kontaktů Normální tok: 1. P.u. začíná, když uživatel zvolí akci „import kontaktů“ nebo „export kontaktů“. 2. POKUD uživatel zvolil „import kontaktů“: 2.1. Uživatel zvolí zdrojový soubor s kontakty pro import. 2.2. Program analyzuje soubor a vypíše seznam kontaktů dostupných pro import. 2.3. Program po potvrzení importuje nalezené kontakty do seznamu kontaktů. 3. POKUD uživatel zvolil „export kontaktů“: 3.1. Uživatel zvolí cílový soubor pro exportované kontakty. 3.2. Program exportuje kontakty do zvoleného souboru. Alternativní tok: 1. Pokud není akce plně dokončena, uživatel má možnost kdykoli zrušit prováděnou akci. Odeslání zprávy Normální tok: 1. P.u. začíná pokynem fronty zpráv k odeslání zprávy. 2. Program identifikuje operátora zprávy a odešle zprávu přes jeho bránu. 3. POKUD operátor vyžaduje opsání kontrolního kódu: 3.1. Program zobrazí uživateli kontrolní kód. 3.2. Opsaný text poskytne program bráně operátora. 4. Program uvědomí uživatele o výsledku operace. Alternativní tok 1: 1. Pokud podpora pro požadovaného operátora není v programu dostupná, program nahlásí problém uživateli a případ užití končí. Alternativní tok 2: 1. Pokud dojde k chybě při odesílání zprávy, program nahlásí problém uživateli a případ užití končí. Ovládání fronty zpráv Normální tok:
22
1. P.u. začíná, když uživatel vybere jednu z následujících akcí: „pozastavení fronty“, „opětovné spuštění fronty“, „posun zprávy ve frontě“, „úprava zprávy ve frontě“ nebo „odstranění zprávy z fronty“. 2. POKUD je akcí „pozastavení fronty“: 2.1. Program pozastaví odesílání zpráv ve frontě. Akce nemá vliv na zprávy, které se již aktuálně posílají. 3. POKUD je akcí „opětovné spuštění fronty“: 3.1. Program obnoví odesílání zpráv ve frontě. 4. POKUD je akcí „posun zprávy ve frontě“: 4.1. Pokud ve frontě existuje zpráva před/za aktuálně vybranou, program posune aktuálně vybranou zprávu ve frontě ve zvoleném směru. 5. POKUD je akcí „úprava zprávy ve frontě“: 5.1. Program přesune aktuálně vybranou zprávu do editačního pole a odstraní ji z fronty. 6. POKUD je akcí „odstranění zprávy z fronty“: 6.1. Program odstraní vybranou zprávu z fronty. Editace zprávy Normální tok: 1. P.u. začíná, když uživatel začne editovat novou zprávu. 2. Uživatel vyplní příjemce zprávy a text zprávy a stiskne tlačítko pro odeslání. 3. Program zařadí nově vytvořenou zprávu do fronty zpráv a vyčistí editační pole. Výstupní podmínky: 1. Nová zpráva je zařazena do fronty zpráv. Alternativní tok: 1. Pokud jsou údaje ve zprávě nekorektně vyplněny, program zobrazí uživateli varování a nedovolí zprávu odeslat. Výstupní podmínky: 1. Špatně vyplněná zpráva není umístěna do fronty zpráv. Kontrola aktualizací programu Normální tok: 1. P.u. začíná ve stanovený časový okamžik. 2. Program zkontroluje pomocí Internetu, zda existují aktualizace programu. 3. POKUD existuje aktualizace programu: 3.1. Program zobrazí upozornění na aktualizaci programu. Alternativní tok 1: 1. Při výskytu problémů se získáním informací o aktualizacích se akce ukončí. Alternativní tok 2: 1. Při vypnutí kontroly aktualizací v nastavení programu se akce neprovede.
23
Zobrazení historie Normální tok: 1. P.u. začíná, když uživatel zvolí akci „zobraz historii odeslaných zpráv“. 2. Program uživateli zobrazí seznam v minulosti odeslaných zpráv. Nastavení programu Normální tok: 1. P.u. začíná, když uživatel zvolí akci „zobraz nastavení programu“. 2. Program uživateli zobrazí dialog obsahující možnosti konfigurace programu. 3. Uživatel změní (či nezmění) nastavení programu a dialog zavře. Výstupní podmínky: 1. Systém uloží a aplikuje změněná nastavení.
4.3.1 Model doménové oblasti Model doménové oblasti je koncepční model sloužící k vymezení základních pojmů, tříd a relací mezi nimi. Tento model neodpovídá implementaci, pouze čtenáře uvádí do problematiky systému. Zobrazuje jej obrázek 4.3.
Obrázek 4.3: Model doménové oblasti
4.3.2 Diagram balíků Následující obrázek 4.4 znázorňuje balíky tříd obsažené v programu Esmska a závislosti mezi nimi. Návrh programu se snaží o dodržení známého třívrstvého modelu architektury, kdy jsou třídy rozděleny do datové, aplikační a prezentační vrstvy a závislosti plynou zásadně shora dolů (z vyšší do nižší vrstvy).
24
Obrázek 4.4: Diagram balíků
4.3.3 Diagramy tříd Následující obrázky znázorňují třídní diagramy nejdůležitějších balíků. Každý diagram tříd vykresluje podstatné třídy a vztahy mezi nimi. Při návrhu bylo využito některých návrhových vzorů [GoF 95], které jsou v UML zobrazeny pomocí stereotypů. Například návrhový vzor singleton nám podává návod, jak zajistit, že daná třída má v každém okamžiku pouze jedinou dostupnou instanci. Obrázek 4.5 představuje diagram tříd v balíku data. Tento balík obsahuje základní datové třídy programu a je zcela nezbytný pro funkci balíků ostatních. Mnoho tříd využívá návrhový vzor singleton, neboť podstatně zjednodušuje práci s danými třídami. Například jelikož nám v programu stačí mít jediný seznam kontaktů (Contacts) či konfiguraci (Config), není nutné na tyto třídy nikde držet a předávat odkazy. Kdekoliv k nim lze přistoupit přes statické přístupové metody. Rozhraní Operator umožňuje přistupovat k informacím definovaným uvnitř JavaScriptového souboru, který byl vytvořen za účelem podpory vybrané brány. Formát tohoto skriptu je podrobněji popsán v kapitole 4.6.1.
25
Obrázek 4.5: Diagram tříd balíku data
Obrázek 4.6 představuje diagram tříd v balíku transfer. Tento balík se stará o samotné odesílání zpráv přes Internet. Třída SMSSender předává instrukce třídě OperatorInterpreter, která následně vyvolává metodu odeslání v javascriptovém souboru příslušné brány. Tento skript může nazpět volat metody definované ve třídě OperatorExecutor.
26
Obrázek 4.6: Diagram tříd balíku transfer
Obrázek 4.7 představuje diagram tříd v balíku persistence. Tento balík slouží k ukládání informací z datových tříd na disk a jejich zpětné načtení. Hlavní třída PersistenceManager je vstupním bodem pro všechny záležitosti týkající se operací s daty a nabízí množství metod, kterými lze data ovládat. Třída ContinuousSaveManager se stará o automatické ukládání vybraných dat, kdykoliv se změní (například seznam kontaktů).
Obrázek 4.7: Diagram tříd balíku persistence
27
Obrázek 4.8 představuje diagram tříd v balíku gui. Třída MainFrame představuje hlavní okno programu, které se skládá z několika jednotlivých panelů. Z hlavního okna je možné vyvolat množství dalších oken a dialogů – tyto akce sdružuje třída Actions. Zvláštní třídou NotificationIcon lze ovládat zobrazení ikony v oznamovací oblasti systému.
Obrázek 4.8: Diagram tříd balíku gui
Obrázek 4.9 představuje diagram tříd v balíku update. Tento balík se stará o kontrolu a zpracování aktualizací programu a bran operátorů. Třída UpdateChecker kontroluje aktualizace a oznamuje výsledek pomocí třídy OperatorUpdateInfo, pokud jsou aktualizace bran k dispozici. Třídu VersionFile lze využít k vytvoření XML souboru obsahujícího informace o aktuálním stavu nainstalovaných bran. Tento soubor je poté umístěn na server a ostatní uživatelé jej využívají k získání informací o dostupných aktualizacích.
28
Obrázek 4.9: Diagram tříd balíku update
4.3.4 Diagram externích balíků Diagram externích balíků zobrazuje knihovny třetích stran, které program ke svému běhu využívá. Mezi nejdůležitější knihovny z hlediska zaměření programu patří Apache HttpClient v balíku org.apache.commons.httpclient a Mozilla Rhino v balíku org.mozilla.javascript.
Obrázek 4.10: Diagram externích balíků
29
4.3.5 Sekvenční diagram poslání SMS Obrázky 4.11, 4.12 a 4.13 představují sekvenční diagram posílání SMS zprávy v programu Esmska. Diagram zobrazuje časovou posloupnost interakce objektů a předávané zprávy. Skládá se ze tří částí. V první části umisťuje uživatel zprávu do fronty zpráv. Fronta zpráv může blíže neurčený časový okamžik čekat, např. dokud nevyprší časový limit, který daný operátor vynucuje mezi odesláním dvou následujících zpráv. Poté dochází k asynchronnímu předání zprávy třídě SMSSender, jak zobrazuje druhá část diagramu. Třída SMSSender opět může nějakou dobu vyčkávat, např. pokud se aktuálně již nějaká zpráva odesílá. V poslední třetí části diagramu dochází k samotnému odeslání zprávy a následné notifikaci uživatele o výsledku akce.
Obrázky 4.11 a 4.12: Sekvenční diagram poslání SMS (část 1 a 2)
Obrázek 4.13: Sekvenční diagram poslání SMS (část 3)
30
4.4 Popis způsobu vývoje Na počátku projektu bylo třeba udělat několik rozhodnutí ohledně způsobu jeho vývoje. Neboť se pohybuji téměř výhradně ve světě svobodného softwaru, tato filozofie mě v mnohém ovlivnila i při tvorbě tohoto projektu. Otevřený vývoj softwaru má minimálně pro nekomerční projekty zjevné výhody oproti vývoji uzavřenému [Raymond 98], proto byl zvolen i u aplikace Esmska. K vedení projektu byly využity servery Google Code23, které nabízejí projektům s otevřeným zdrojovým kódem zdarma webové stránky, systém pro sledování chyb a Subversion repositář. Taktéž byl využit portál Launchpad24, který svobodným projektům nabízí snadný způsob lokalizace aplikace pomocí zapojení komunity a uživatelskou podporu formou diskuzního fóra.
4.4.1 Svobodný software Svobodný software25, často označovaný jako FLOSS (Free/Libre/Open Source Software), je software, u něhož je uživateli dána volnost jej studovat, měnit a vylepšovat díky dostupnosti jeho zdrojového kódu. Jedním z největších FLOSS projektů je jádro operačního systému Linux. V současné době se tento model stává velice rozšířeným a začínají na něj přistupovat i některé komerční společnosti. Důležitým aspektem svobodného softwaru je naprostá volnost uživatele, respektive naprostá volnost „v rámci svobodného softwaru“. Existuje mnoho licencí uznaných Open Source Initiative26 a Free Software Foundation27, organizacemi starajícími se o schvalování licencí softwaru s otevřeným zdrojovým kódem a svobodného softwaru. Mezi nejznámější licence patří licence BSD a licence GNU GPL. Nejdůležitější rozdíl tkví ve skutečnosti, že licence BSD umožňuje uživateli dělat se softwarem opravdu cokoliv, zatímco GNU GPL umožňuje uživateli software modifikovat a redistribuovat pouze za předpokladu, že i výsledný software je opět licencován pod GNU GPL (tzv. virální licence). Program byl od počátku vyvíjen jako svobodný software, kdy kdokoliv mohl volně přistupovat ke zdrojovým souborům programu a modifikovat je či je využít ve svém projektu. Původně byl program licencován pod GNU GPL verze 2, po vydání novější třetí verze licence byl převeden pod GNU AGPL verze 3. Tento přístup jsem zvolil z důvodu, že účelem daného programu není vydělávat peníze, ale být lidem užitečný. Toho lze nejlépe dosáhnout, když se celý program dostane do rukou komunity, takže i po zastavení vývoje původním autorem programu může kdokoliv jiný celý projekt převzít a pokračovat dále. Taktéž to zaručuje, že pokud by někdo program vylepšil a upravenou verzi zveřejnil, pozměněné zdrojové kódy se opět dostanou do rukou lidí. Nedílným bonusem používání svobodného softwaru je v neposlední řadě možnost využívat široké škály tvorby dostupné pod svobodnými licencemi, což mi umožnilo v programu použít např. mnoho kvalitních softwarových knihoven nebo profesionálně vyhlížejících ikon. 23 24 25 26 27
http://code.google.com/hosting https://launchpad.net http://www.gnu.org/philosophy/free-sw.html http://www.opensource.org http://www.fsf.org
31
4.4.2 Spolupráce komunity V duchu vývoje svobodného softwaru jsem umožnil komukoliv s dostatečným zájmem podílet se na tvorbě daného programu. Z hlediska zdrojových kódu jsem však přijímal jen menší záplaty a návrhy, neboť program je zároveň mojí diplomovou prací. Po odevzdání práce hodlám otevřít systém správy verzí28 všem zájemcům s dostatečnými technickými schopnostmi a zájmem. Větší množství vývojářů přispěje k lepší propracovanosti softwaru, neboť kombinace a sdílení zkušeností a schopností vede ke kvalitnějšímu a více funkčnímu zdrojovému kódu. Důležitou součástí otevřeného projektu je veřejná databáze chyb a nápadů, kam mohou uživatelé hlásit problémy či zasílat návrhy na zlepšení funkcí programu. Výhoda je zjevná, uživatelé mají šanci nalézt mnoho chyb, které by sám vývojář nepostřehl. Taktéž nápady, které zde lze podat, mohou být často velmi užitečné. U velkých a známých projektů může tento veřejný systém připomínek samozřejmě generovat velké množství aktivity. I přesto jej většina svobodných projektů využívá, tudíž ho vidí jako užitečný. Taktéž jsem jej do podpory projektu zařadil. Silnou stránkou, kde se může komunita zapojit, je lokalizace programu. Je bez pochyb, že takto vytvářené překlady nebudou mít stejně vysokou kvalitu, jako by zajistil profesionální překladatelský tým. Na druhou stranu, u projektů, které si nemohou dovolit takový tým zaplatit, se komunitní překlady velmi hodí. Jelikož se může podílet kdokoli, tak bývají případné chyby v překladu rychle opraveny. Dalším důsledkem je, že program bývá rychle dostupný v široké škále jazyků, a to nejen v těch světových, což u komerčního softwaru platí jen pro ty největší projekty. Samozřejmou součástí projektu jsou jeho domovské stránky, které popisují funkce programu, zobrazují snímky programu a umožňují jeho stažení. Tyto stránky měly možnost komentářů, takže i zde mohla komunita vyjádřit svůj názor.
28 Konkrétní internetové odkazy na stránky popisované v této kapitole jsou uvedeny na počátku kapitoly 4.
32
4.5 Implementace aplikace Při implementaci aplikace je často nutné udělat důležitá rozhodnutí o tom, jaká technologie bude použita, zda je patřičná funkcionalita vytvořena správně, či by měla být přepracována, zda je daný způsob realizace ideálním, nebo existuje postup lepší. Tyto důležité implementační momenty a rozhodnutí zachycuje tato kapitola. Zároveň poskytuje zdůvodnění výběru některých použitých technologií popsaných v kapitole 4.2, včetně význačných problémů, na které jsem v průběhu implementace narazil. Ke konci představuje některé metriky týkající se průběhu implementace.
4.5.1 Emulace webového prohlížeče Jedním ze základních pilířů programu je vystupování vůči branám operátorů jako webový prohlížeč a zároveň ušetření uživatele opravdu tento webový prohlížeč používat a zdlouhavě vyplňovat všechny formuláře na daném webu. Z toho vyplývá, že program musí umět chování webového prohlížeče co nejlépe emulovat. Nejedná se o pouhé parsování stránek a posílání HTTP požadavků, ale i o správu cookies, hesel, nastavování HTTP hlavičky Referer a podobné záležitosti, jejichž podpora je často na straně serverů vyžadována. Bohužel je známým faktem, že řada webových stránek je vytvořena značně nestandardně, ať již z chyby programátorů nebo za účelem obejití známých problémů v jednotlivých webových prohlížečích. Tento fakt značně komplikuje vývoj takového webového emulátoru a je třeba jej respektovat. Ačkoliv vývoj vlastního webového emulátoru přicházel v úvahu, nejprve jsem se poohlédl po již existujícím hotovém řešení a opravdu jej nalezl v podobě knihovny Apache Commons HttpClient. Tato knihovna má samozřejmě mnohem vyšší kvalitu, než bych byl schopen v krátkém časovém intervalu zajistit vlastními silami. Snaží se i obcházet nejčastější chyby vyskytující se ve webových stránkách, stejně jako to dělají webové prohlížeče. Bohužel i tak se vyskytuje spousta situací, které daná knihovna již obsloužit nezvládne. Samozřejmě je nutné počítat s tím, že hlavní rozsah této knihovny je práce s HTTP, takže neobsahuje některé vlastnosti vyloženě specifické pro prohlížeč – parser HTML, parser CSS, interpret JavaScriptu či zásuvné moduly typu Flash. Pěkné srovnání je uvedeno v dokumentaci knihovny29. Ačkoliv je knihovna HttpClient bezpochyby kvalitní, bylo třeba ručně doimplementovat a ošetřit množství záležitostí. Asi nejproblematičtější bylo ošetřování přesměrování webových stránek. To je možné udělat dvěma způsoby – pomocí HTTP (návratový kód 3xx, hlavička Location) nebo pomocí HTML značky <meta>. U HTTP přesměrování je dle sekce 14.30 v [RFC 2616] nové umístění definováno pouze absolutní adresou. Obrovské množství stránek však posílá relativní adresy, navzdory specifikaci. Prohlížeče tuto chybu umějí obejít, což vytváří bludný kruh (nově vznikající aplikace bývají opět chybné). HttpClient knihovna se s relativními adresami vyrovnat nedokázala, tudíž to bylo nutné udělat ručně. Bohužel je nutné ošetřit množství různých druhů relativních adres (result.php, ./result.php, ../result.php) včetně adresy hybridní (/result.php). Vzhledem k tomu, že nikde není definováno, jak přesně tyto adresy fungují, je obtížné tuto funkčnost implementovat tak, aby dokonale 29 http://wiki.apache.org/jakarta-httpclient/ForAbsoluteBeginners
33
fungovala, zejména u té poslední zmíněné. Pokud se navíc najednou zkombinují přesměrování pomocí HTTP a pomocí HTML, nemusí být možné vždy z knihovny HttpClient získat aktuální adresu webové stránky a provést příslušné přesměrování. Takové špatně vytvořené stránky poté čelí problému, že nemusí být možné ideálně je podporovat.
4.5.2 Zásuvný skriptovací systém operátorů Dle specifikace má být rozšiřitelný systém bran operátorů vytvořen za použití jednoduchého skriptovacího jazyku. Účel požadavku je zřejmý, takový systém lze snadno spravovat i doplňovat dalšími podporovanými branami. Java 6 k tomuto účelu poskytuje Scripting API30, které umožňuje komunikovat se skriptovacími jazyky. Standardně je přibalena implementace JavaScriptu Mozilla Rhino, podpora je ovšem dostupná i pro velké množství dalších jazyků31. Původně bylo plánováno vytvořit systém operátorů v Pythonu, neboť je to velmi jednoduchý a oblíbený jazyk, široce rozšířený ve světě svobodného softwaru. Nicméně po bližším prozkoumání se ukázal i běžný JavaScript jako plně postačující jazyk. Jeho výhodou je standardní dostupnost v platformě Java 6, tudíž není potřeba přibalovat dodatečné knihovny (ačkoliv tyto knihovny stejně musí být přidány, pokud uživatel používá implementaci Javy od Apple či OpenJDK). JavaScript je taktéž velmi jednoduchý jazyk a mezi vývojáři snad ještě známější než Python. Není problém do něj v rámci několika hodin proniknout. V samotném skriptu se na důležitější operace volají operace z Javy a samotný skriptovací jazyk je využit hlavně na operace s řetězci (zejména vyhledávání v textu pomocí regulárních výrazů). Tuto práci JavaScript lehce zastane a síly Pythonu není třeba. Za zmínku ještě stojí další významný rys JavaScriptu, a to je jeho relativní bezpečnost. V JavaScriptu například neexistují funkce pro manipulaci se souborovým systémem. V našem konkrétním případě je to výhoda, neboť se nemůže stát, že by skript provedl něco nechtěného, na rozdíl od ostatních jazyků. Všechny skripty přidané do oficiálního vydání programu jsou samozřejmě vždy ručně shlédnuty, přesto je tato bezpečnostní pojistka příjemným bonusem. JavaScript byl tedy vybrán jako skriptovací jazyk pro systém operátorů. Příjemnou vlastností skriptovacího systému je zachování dynamického vykonávání skriptu. Obsah skriptu odesílající danou zprávu tedy není nikde zapamatován, ale vždy se vykonává řádek po řádku z daného souboru. To umožňuje velmi dobré ladění skriptů, kdy je možné upravovat soubor a okamžitě vidět změny v chování programu – není nutné program po každé úpravě skriptu restartovat. Popis formátu souborů, ve kterém musejí být skripty operátorů vytvořeny, je podrobněji zdokumentován v kapitole 4.6.1.
30 http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html 31 https://scripting.dev.java.net
34
4.5.3 Internacionalizace Pojmem internacionalizace se myslí uzpůsobení softwaru tak, aby odpovídal různým jazykovým a národnostním zvyklostem. Na tento proces následně navazuje proces lokalizace, což je přeložení textů softwaru do daného jazyka. Standardní prostředí Javy a Swingu obsahuje velice slušnou podporu pro internacionalizaci. Existují speciální třídy pro vypisování čísel, času či měny dle národních zvyklostí. Swing dokáže správně vytvořenou aplikaci zobrazit jak pro (nám obvyklé) jazyky psané zleva doprava, tak i pro jazyky psané obráceně. Po využití těchto možností tedy převážná většina práce spočívala v přípravě programu do takové podoby, aby byl lokalizovatelný. K účelu umožnění lokalizace lze lehce využít standardních prostředků Javy, jako jsou třídy MessageFormat, ResourceBundle a soubory .properties [SUN JT]. Nicméně tyto prostředky jsem neshledal jako dostačující v otevřeném modelu vývoje aplikace, který jsem provozoval. Svobodné aplikace jsou obvykle překládány pomocí systému Gettext [GTXT], který vždy tvoří šablona zpráv a katalog zpráv pro příslušný jazyk. Překladatelé tento katalog získají ze zdrojových souborů aplikace, přeloží vůči aktuální šabloně a pošlou zpět vývojáři. Důležité je, že zde není žádné centrální místo sloužící k organizaci a synchronizaci práce, ani nejsou vyžadovány konkrétní nástroje. Toto tak zcela neplatí u lokalizačních prostředků Javy. Důležitým faktorem nástrojů Javy je, že properties soubory neumožňují některý překlad označit za zastaralý (oproti Gettext systému, který u takových překladů používá příznak fuzzy). Při aktualizaci primárního řetězce (většinou anglického) to pak vede ke dvěma možnostem: v ostatních jazycích zastaralý překlad ponechat nebo jej z nich odstranit. První případ vyžaduje existenci centrálního systému, který bude tyto překlady evidovat a překladatele na ně upozorňovat (jinak by mohl zastaralý překlad zůstat nepovšimnut, ačkoliv již je neplatný), v druhém případě klade obrovské nároky na překladatele (z celého odstavce se mohlo změnit jediné slovo, přesto je celý překlad vymazán). Ani jeden případ není pro překlad svobodných aplikací vhodný, ačkoliv může dobře fungovat ve firemních prostředích s placeným překladatelským týmem. Další nevýhody properties souborů zahrnují nemožnost globálně nadefinovat plurální formy daného jazyka nebo jistá technická omezení daná formátem souboru (nelze mít překlad končící bílými znaky, ty tam nejsou zahrnuty). K výše uvedeným důvodům taktéž přispěl zájem o použití portálu Launchpad, který umožňuje široké veřejnosti pomocí webového rozhraní velmi snadno překládat svobodné programy a který taktéž vyžaduje import souborů ve formátu Gettext. Technologie Gettext byla tedy zvolena jako primární lokalizační nástroj a je používána pro překlad celého programu. Interně se stále využívají properties soubory, neboť zejména prostředí NetBeans neposkytuje integraci s nativním formátem Gettextu a celý vývoj by to jen zkomplikovalo, nicméně dané properties soubory jsou tam i nazpět konvertovány nástrojem Translate Toolkit právě do Gettext formátu a veškeré lokalizační záležitosti probíhají až v něm. Tento přístup zajišťuje většinu popisovaných výhod se zachováním snadnosti vývoje. 35
Obrázek 4.14: Ukázka lokalizace programu do slovenštiny (okno historie odeslaných zpráv)
4.5.4 Výsledky implementace Popisovaná aplikace byla úspěšně implementována v plném rozsahu specifikace. Ve vybraných oblastech dokonce přidává vlastnosti nové, jak je popsáno v kapitole 4.7.1. Následující text a diagramy znázorňují některé zajímavé metriky z výsledné implementace programu a jejího průběhu. V době psaní této práce se aplikace Esmska skládá z více než 24 000 řádků zdrojového kódu, z čehož přes 18 000 řádků je vlastní kód bez prázdných řádků a komentářů. Vývoj metriky počtu řádků v čase shrnuje obrázek 4.15.
Obrázek 4.15: Vývoj počtu řádků zdrojového kódu v čase
Zhruba 78 % z celkového kódu tvoří soubory v jazyce Java, většinu zbytku představují XML soubory používané k definici rozvržení formulářů uživatelského rozhraní. Komentáře tvoří v javových souborech cca 18 %. Poměr jednotlivých jazyků v programu zobrazuje obrázek 4.16.
36
Obrázek 4.16: Poměr jazyků ve zdrojových kódech programu
Po shlédnutí a propočítání statistik z protokolů použitého verzovacího systému (Subversion) vychází za poslední rok vývoje na každý měsíc v průměru 39 commitů. Obrázek 4.17 zobrazuje ukázkový náhled na commity v březnu 2009.
Obrázek 4.17: Použití verzovacího systému v březnu 2009
37
4.6 Dokumentace aplikace 4.6.1 Zásuvný systém operátorů Podpora bran operátorů je v programu řešena zásuvným modulárním systémem. Moduly jsou ve formě souborů, vždy jeden soubor pro jednu bránu operátora. Podporu operátorů je možné přidávat a odebírat bez potřeby rekompilace programu, stačí umístit vytvořený soubor do příslušného adresáře. Jednotlivé soubory jsou skripty implementující pevně předepsané rozhraní. Program poté při posílání volá jejich jednotlivé metody. Všechny skripty jsou psány v jazyce JavaScript. Jméno souboru musí být shodné se jménem operátora a končit na příponu „.operator“. Soubor musí být v kódování UTF-8 s konci řádků označených znakem LF (unixový styl). K souboru se skriptem je možné přidat ikonu operátora ve formátu PNG a rozlišení 16x16 pixelů, která má stejný název souboru jako skript operátora, jen příponu „.png“. Ikona není povinná. Adresář se skripty operátorů je prohledán při startu programu a jsou z něj vybrány validní skripty. Ty jsou poté zobrazeny v programu v rozvinovacích seznamech dostupných webových bran. Základní informace o skriptu (jméno, verze, maximální délka zprávy atd.) jsou načteny hned při spuštění programu. Metoda send() odesílající vybranou zprávu je dynamicky volána při každém použití. Z toho vyplývá, že pro přidání či odebrání operátora (případně změny základních údajů) je nutné program restartovat. Naopak samotný proces odesílání zprávy lze měnit a ladit přímo za chodu programu. Program je vytvořen tak, aby se dokázal vypořádat s případným přidáváním či odstraňováním operátorů. Například pokud má kontakt jako výchozího operátora přiřazen operátora X, a tento operátor X je odstraněn, pak (po restartu programu) kontakt běžně funguje, pouze zobrazuje „prázdného“ výchozího operátora. Pokus o odeslání zprávy na takového operátora skončí nahlášením chyby o neznámém operátorovi. Po nahrání operátora X zpět do příslušného adresáře začne daný kontakt opět běžně fungovat. Podobně ošetřené chování má i fronta zpráv, historie zpráv a další části programu pracující s operátory. Při spuštění programu se načítají základní informace o každém operátorovi. Mezi nejdůležitější patří: ● getName() - Označuje jméno operátora. ● getVersion() - Označuje verzi skriptu. ● getMaintainer() - Označuje správce skriptu ve tvaru „Jméno <e-mail>“. ● getSMSLength() - Označuje délku jedné SMS zprávy. ● getMaxChars() - Označuje maximální počet znaků, které operátor umožňuje najednou poslat ze své brány. ● getDelayBetweenMessages() - Označuje prodlevu, která musí být dodržena mezi posíláním jednotlivých zpráv.
38
Po vybrání operátora, napsání zprávy a odeslání se volá metoda send() zajišťující samotné odeslání zprávy. V této metodě je možné využít některých automaticky vytvořených proměnných, mezi které patří zejména: ● NUMBER – Číslo telefonu příjemce. ● MESSAGE - Text posílané zprávy. ● LOGIN - Uživatelské jméno pro přihlášení k webové bráně operátora. ● PASSWORD - Heslo pro přihlášení k webové bráně operátora. ● SENDERNAME - Jméno odesilatele. ● SENDERNUMBER - Číslo telefonu odesilatele. ● EXEC - Speciální proměnná, pomocí které lze volat metody vykonávané jádrem programu, případně přistoupit na předdefinované konstanty. Některé z těchto proměnných samozřejmě mohou být prázdné, například LOGIN u operátora, který žádné přihlašování nevyžaduje. Na proměnné EXEC je možné volat množství metod, zejména: ● getURL(...) - Stáhne požadovanou stránku a vrátí její obsah. ● postURL(...) - Pošle zadaná data na uvedenou adresu a vrátí obsah odpovědi. ● recognizeImage(...) - Dotáže se uživatele na rozpoznání bezpečnostního kódu na obrázku. ● setErrorMessage(...) - Nastaví chybovou hlášku zobrazenou poté uživateli. Kompletní dokumentace funkcí je dostupná ve formátu JavaDoc na stránkách projektu. V příloze A lze nalézt stručný návod pro vývojáře, jak do programu přidat podporu pro další bránu operátora. Tato dokumentace je dostupná na stránkách projektu a obsahuje mimo jiné i doporučené nástroje, způsoby ladění problémů či postup zařazení skriptu do oficiálního vydání.
39
4.1 Úspěchy projektu Následující kapitola popisuje, jakých význačných úspěchů tento projekt za dosavadní dobu svého vývoje dosáhl.
4.1.1 Schopnosti aplikace Během vývoje dostala aplikace do vínku ještě více schopností, než bylo na počátku požadováno. Přispěla k tomu zejména spolupráce komunity uživatelů, kteří mě zásobili hojným počtem nových nápadů a požadavků na zlepšení. Schopnosti aplikace, které přesahují rámec její specifikace, jsou následující: ● Podpora pro velké množství bran, včetně zahraničních. V době psaní práce program podporoval celkem 9 webových bran: český Vodafone (neplacená i samoobsluha), české O2 (neplacená), český T-mobile (neplacená i t-zones), české SMS.cz32, slovenský Orange33, litevské sms4you34 a mezinárodní SMSdiscount35. ● Velké množství dostupných vzhledů. Pomocí zásuvných vzhledů „look and feel“ lze kompletně měnit vzhled i chování jednotlivých grafických prvků. Kromě standardního systémového a meziplatformního Java vzhledu jsou dostupné i vzhledy dodatečné, jako je JGoodies36 či Substance. Substance vzhled je pro svoji grafickou přitažlivost vybrán na většině platforem jako vzhled výchozí. Při volbě meziplatformního vzhledu je v případě podpory na straně Javy zpřístupněn moderní vzhled Nimbus37. Na vzhled aplikace je kladen důraz, protože nevábně a zastarale vypadající aplikace bohužel mnoho uživatelů odsoudí hned po spuštění, aniž by ozkoušeli jejich funkcionalitu. ● Obarvování jednotlivých zpráv při psaní. Při psaní delších zpráv program barevně znázorní, kde končí jedna zpráva a kde začíná další. ● Odesílání vícenásobných zpráv. U operátorů podporujících pouze extrémně krátké zprávy (např. 60 znaků pro O2) je možné odeslat zprávu několikanásobně delší, kterou program sám rozdělí do několika menších zpráv a ty potom odešle. ● Podpora pro dodatečné možnosti některých bran. U bran, které podporují dodatečné možnosti odesílání, jako je nastavení čísla a jména odesilatele, případně zaslání doručenky, byla přidána podpora pro tyto funkce i do samotného programu. ● Odstraňování diakritiky. Aplikace umí ze zpráv automaticky odstraňovat diakritická znaménka, která mohou působit problémy na mnoha webových branách. 32 33 34 35 36 37
http://sms.cz https://www.orangeportal.sk http://www.sms4you.lt http://www.smsdiscount.com http://www.jgoodies.com/freeware/looks/index.html https://nimbus.dev.java.net
40
●
●
Podpora mnoha jazykových mutací. Díky spolupráci komunity je aktuálně program alespoň částečně přeložen do 10 jazyků a další budou jistě přibývat. Import kontaktů z různých formátů. Program podporuje import kontaktů z nativního formátu programu, programů Kubík SMS DreamCom, DreamCom SE a standardizovaného formátu kontaktů vCard.
Obrázek 4.18: Dialog importu kontaků (slovenská lokalizace) ●
●
Instalační balíčky pro různé operační systémy. Program je standardně distribuován v podobně platformně-nezávislého archivu. Díky pomoci ze strany komunity byly však vyrobeny i instalační balíky pro jednotlivé operační systémy. Program je tedy nyní dostupný i ve verzi Java WebStart, mnoha typech balíků pro Linux, FreeBSD, Mac OS X a Windows. Automatická aktualizace skriptů bran operátorů. Program umí detekovat, pokud se na server umístí nové či aktualizované skripty bran operátorů, umí je stáhnout a bez restartu aplikace nainstalovat. Tento systém je pro uživatele velmi pohodlný a umožňuje vývojáři rychle reagovat na změny na straně brány operátora, aniž by uživatele nutil ručně stahovat a instalovat novou verzi programu.
Obrázek 4.19: Dialog automatické aktualizace bran (česká lokalizace)
41
●
Dostupná podpora. Pro uživatele aplikace je volně dostupná podpora v podobě diskuzního fóra, kde mohou uživatelé klást dotazy, a wiki, kde jsou sepsány důležité informace o programu včetně odpovědí na často kladené dotazy a řešení běžných problémů. Nové problémy lze hlásit do databáze chyb a nápadů.
Obrázek 4.20: Podpůrné diskuzní fórum k programu k 8.5.2009
4.1.1 Ohlas uživatelů Měření oblíbenosti a míry použití svobodných programů je obtížný úkol. Některé programy obsahují mechanismy zasílání anonymních statistik, avšak ty bývají většinou kvůli zachování dobrého dojmu standardně vypnuty, případně obtěžují uživatele dotazem při prvním spuštění programu. Aplikace Esmska takový mechanismus neobsahuje a tudíž se jeho oblíbenost dá odhadovat pouze podle externích statistik, jako je počet stažení programu z jeho webových stránek. Tento způsob však není příliš přesný, neboť nezohledňuje stahování z linuxových repozitářů a také různých serverů specializujících se na vytváření adresářů softwaru a kopírujících si program lokálně k sobě (tyto servery mohou mít řádově vyšší počet stažení než samotná domovská stránka programu). Výjimkou není ani umisťování souboru s programem na BitTorrent servery nebo do diskuzních fór. Dle dostupných statistik38 si poslední verzi programu z jeho domovských webových stránek pravidelně stahuje průměrně 3 000 – 5 000 uživatelů, jak zobrazuje obrázek 4.21. Zároveň zhruba 2 000 uživatelů používá repozitář pro Ubuntu/Debian, od kterého mám taktéž dostupné statistiky.
38 http://code.google.com/p/esmska/wiki/Statistics
42
Počty stažení jednotlivých verzí programu 7000 6000 5000 4000 6 305
3000
156 0
2000 1000
83 2276
1715
Multiplatformní Mac OS X Windows
170
2215
19 34
2120
0.13.0
0.14.1
0.15.0
0 0.11.1
0.12.2
Obrázek 4.21: Statistika stahování balíků s programem z domovských stránek k 18.5.2009
Esmska se taktéž objevila na mnoha serverech fungujících jako adresáře programů. Nevýhodou těchto serverů je, že program je tam mnohdy nabízen v zastaralé verzi. Nicméně ani to viditelně uživatele neodrazuje. Z větších serverů tohoto typu, kde se Esmska nalézá, můžeme zmínit například Slunečnice39, GigaMania40, eDownload41 či světoznámou Softpedia42. Bohužel ne všechny tyto servery poskytují statistiku počtu stažení, ale přesto se zdá, že je využívá až několik tisíc dalších uživatelů. Do poslední verze aplikace, která byla vydána ještě před odevzdáním této diplomové práce, byl doplněn mechanismus, který umožnil sledování počtu dotazů ze strany programu na dostupné aktualizace. Tento postup by mohl být poměrně přesným ukazatelem počtu uživatelů, neboť drtivá většina uživatelů si standardně zapnuté upozorňování na aktualizace pravděpodobně vypínat nebude. Nicméně tento parametr by musel být sledován po delší dobu, než bylo možné, aby dával opravdu relevantní výsledky. Je velmi pravděpodobné, že v době dokončování práce stále existovala početná skupina uživatelů, která program na jeho poslední verzi neaktualizovala, a tudíž do statistik nebyla započítána. To se týká zejména uživatelů operačního systému Windows, u kterého není dostupná funkce automatických aktualizací programu pomocí softwarových repozitářů. Dále je třeba si uvědomit, že výsledná čísla neukazují skutečný počet instalací programu, ale pouze počet unikátních adres IP, ze kterých bylo v daném období k aktualizačnímu souboru přistoupeno. I když uživatelé mohou občas měnit adresy IP, mnohem častějším jevem bude sjednocení více uživatelů daného poskytovatele Internetu za společnou adresu IP. Toto je při čtení výsledků nutno vzít v úvahu. V době psaní práce zobrazuje popisované statistiky obrázek 4.22. Odhaduji, že v dané době existovalo nejméně 500 dalších uživatelů, kteří neměli nainstalovánu poslední verzi programu, a tudíž nebyli ve statistice zahrnuti.
39 40 41 42
http://www.slunecnice.cz/sw/esmska http://www.zive.cz/Programy/Esmska/pr-6257 http://www.edownload.cz/sw/esmska http://linux.softpedia.com/get/Communications/Telephony/Esmska-42531.shtml
43
Uživatelé programu (unikátní IP adresy) 4554
5000 4000 300026 58 2000 1000 0 duben 2009
květen 2009
Obrázek 4.22: Měsíční statistika unikátních uživatelů programu (adres IP) k 18.5.2009
Počet pravidelných uživatelů programu tedy lze odhadnout zhruba kolem 5 000, přičemž program alespoň vyzkoušelo zřejmě více než 10 000 lidí. Počet uživatelů programu se tedy nezdá býti zanedbatelným. Naopak se dá tvrdit, že program se stal celkem oblíbeným a že v něm uživatelé jistě vidí přínos. K oslovení nových potenciálních uživatelů je vhodné, pokud si programu všimnou i velké webové portály a zmíní se o něm. Považuji za úspěch, že se tak v mém případě opravdu stalo. Mimo řady blogů, které na tento projekt odkazovaly, jsem nalezl i recenzi na portálu Živě43 a Slunečnice44 (obsahující řadu nepřesností). Dále se projekt ocitl v redakčním výběru softwaru na GigaMania 45 a snad i díky tomu se velmi často nalézal v zobrazeném „Top 10“ nejstahovanějších programů. O projektu se občasně zmínily zprávičky na serverech Root46 a AbcLinuxu47. Největším úspěchem projektu byla jeho nominace v soutěži Czech Open Source 200948, kde byl vybrán jako jeden z pěti nejzajímavějších a nejprospěšnějších programů české open-source scény v roce 2009 (o nominaci rozhodovali čtenáři/uživatelé). Finální výsledky této soutěže bohužel již nebylo možné z časových důvodů do této práce zahrnout. Návštěvnost domovské stránky odpovídala ohlasu na program v internetových médiích. V prvních čtyřech měsících v roce 2009 navštívilo domovskou stránku projektu denně průměrně 200 návštěvníků, ovšem při zmínce programu v některém ze známých portálů návštěvnost lehce vyšplhala až na 800 návštěvníků denně. Toto období a jeho návštěvnost znázorňuje obrázek 4.23.
Obrázek 4.23: Denní návštěvnost domovské stránky v prvních čtyřech měsících roku 2009
43 44 45 46 47 48
http://www.zive.cz/Clanky/Esmska-Posilejte-sms-z-pocitace/sc-3-a-145853/default.aspx http://www.slunecnice.cz/tipy/esmska-sms-zpravy-zdarma-i-pres-google http://www.zive.cz/Clanky/Ke-stazeni-codeck-pack-s-milym-nazvem-CCCP/sc-3-a-137455/default.aspx http://www.root.cz http://www.abclinuxu.cz http://cos.root.cz/2009
44
4.1.2 Přínos od komunity K mé radosti se komunita při vývoji programu opravdu zapojila a ukázala tak, že umožnit dobrovolníkům podílet se opravdu dává smysl. V oblasti zdrojových kódů stojí za zmínku zejména obdržení většího množství záplat od Mariana Boučka, které podstatně zlepšovaly integraci programu s operačním systémem Mac OS X. Libor Krzyžanek mi pomohl se zprovozněním distribuce programu přes Java WebStart, což ocenilo jistě mnoho uživatelů. V neposlední řadě pak Vítězslav Válka navrhl a nakreslil pro program velmi pěkné vlastní logo ve vektorovém formátu.
Obrázek 4.24: Logo programu
V databázi chyb a nápadů se komunita angažovala velmi dobře a hlásila problémy či návrhy na vylepšení. Aktuálně je zde registrováno kolem 140 záznamů, z toho zhruba 15 otevřených. V nich nejsou započítány nesčetné podněty, které mi přicházely zejména e-mailem.
Obrázek 4.25: Obsah systému pro sledování chyb k 19.4.2009
Extrémní úspěch zaznamenala lokalizace programu. Ačkoliv byl zpočátku projekt zaměřen zejména na české publikum, implementace jediné mezinárodní brány stačila k tomu, aby jej začali používat uživatelé z celého světa, a zapříčinila tak vznik mnoha překladů. V době psaní práce byl program alespoň částečně (nad 10 %) přeložen do 11 jazyků – angličtiny, češtiny, slovenštiny, dánštiny, francouzštiny, hebrejštiny, italštiny, litevštiny, polštiny, ruštiny a turečtiny. Statistiky překladů z portálu Launchpad zobrazuje obrázek 4.26 (angličtina se nezobrazuje jakožto výchozí jazyk). 45
Obrázek 4.26: Statistika lokalizace programu k 18.5.2009
Dalším významným bodem byla tvorba instalačních balíčků pro jednotlivé operační systémy. Původně byl program distribuován v archivu obsahujícím platformně nezávislé soubory. Uživatelé ovšem projevili zájem o balíčky, které by byly lépe integrovány s jejich systémem – zejména se jedná o zástupce a ikony v aplikačních nabídkách systému či automatické aktualizace (v případě linuxových repozitářů). Našlo se velké množství schopných lidí, kteří byli schopni a ochotni balíčkovat program pro svůj oblíbený operační systém. Správci sledují vydání programu a pravidelně balíčky aktualizují. Návod, jak nejlépe program přichystat do instalačního balíčku, a další rady pro tyto správce jsou samozřejmě dostupné na stránkách programu a ve zdrojových kódech programu. Program je tedy nyní distribuován v těchto verzích: standardní archiv, spouštěč pro Java WebStart, balík pro Arch Linux, Debian, Fedoru, FreeBSD, Gentoo Linux, Mac OS X, Mandrivu, openSUSE, Ubuntu a instalátor pro Windows. Možnosti distribuce programu znázorňuje obrázek 4.27.
Obrázek 4.27: Způsoby distribuce programu
46
5 Závěr Cílem práce bylo vytvořit aplikaci využívající webové brány GSM operátorů k posílání SMS zpráv pomocí Internetu. Nejenže byl cíl této práce splněn v plném rozsahu, ale výsledná aplikace nabízí i vlastnosti přesahující rámec specifikace, které byly v práci také popsány. Pro aplikaci byla zpracována analýza v podobě UML diagramů, které umožňují nahlédnout na vhodně navrženou architekturu. Podstatným prvkem architektury je funkční zásuvný skriptovací systém bran, který umožňuje přidávat a upravovat podporu pro jednotlivé brány bez rekompilace programu, pouze poskytnutím souboru napsaného v jednoduchém skriptovacím jazyce. Formát tohoto souboru je podrobně zdokumentován včetně dostupného návodu a rad, jak tento soubor nejsnáze vytvořit. Aplikace taktéž využila několika zajímavých technologií, které byly rovněž popsány v textu této práce. Aplikace byla vyvíjena způsobem vývoje rozšířeným v oblasti svobodného softwaru a na celý tento proces byl kladen velký důraz. Použitý přístup se velmi osvědčil a díky spolupráci komunity nyní program disponuje možnostmi, které by bez ní byly jen stěží dostupné. Jako příklad lze uvést lokalizaci do 11 jazyků nebo dostupnost instalačních balíčků pro 10 různých operačních systémů. Ze strany uživatelů se program setkal s výborným ohlasem. V současné době program pravidelně používá odhadem kolem 5 000 uživatelů. O programu vyšly zmínky a několik recenzí na významných českých portálech zabývajících se informačními technologiemi. Všechny recenze, se kterými jsem se setkal, vyznívaly pozitivně a ve prospěch programu. Velkým úspěchem projektu byla jeho nominace v soutěži Czech Open Source 2009, kde byl vybrán jako jeden z pěti nejzajímavějších programů české open-source scény. Oproti stávajícím programům daného typu, které byly v této práci taktéž uvedeny a zhodnoceny, přináší aplikace Esmska výhody zejména uživatelům operačních systémů nepocházejících od firmy Microsoft, neboť pro tyto uživatele nebyly do této doby dostupné žádné použitelné alternativy. Avšak vysoká oblíbenost i mezi uživateli Windows ukazuje, že program má co nabídnout i jim – zejména bývá oceňována jeho orientace na jednoduchost a snadnost použití. Odevzdáním této diplomové práce život aplikace nekončí, právě naopak, teprve začíná. Plný přístup k verzovacímu systému bude poskytnut každému programátorovi, který má zájem a dostatečné schopnosti pro budoucí vývoj, oproti dosavadnímu přijímání pouze triviálních záplat a vylepšení. Uživatelská základna programu se neustále rozšiřuje a s přibývajícími schopnostmi programu určitě dále poroste. Možnosti vylepšení aplikace jsou stále velmi široké a uživatelé svými nápady nezapomínají autora programu dostatečně zásobit. Dá se předpokládat, že budoucí implementace často požadovaných vlastností, jako je například automatické rozeznávání bezpečnostních kódů (OCR), oblibu aplikace ještě zvýší. Tato diplomová práce umožnila vytvořit aplikaci, kterou uživatelé dle dosavadního ohlasu považují za velmi užitečnou. Nezbývá mi než vyjádřit přání, aby se nejen mým přispěním, ale i přispěním mnoha dalších aplikace nadále rozvíjela i v budoucnu.
47
Literatura: [Bloch 2001]
Joshua Bloch, Java efektivně: 57 zásad softwarového experta, Grada Publishing, 2001, ISBN:8024704161
[GTXT]
Free Software Foundation, Gettext Online Manual, http://www.gnu.org/software/gettext/manual/gettext.html (květen 2009)
[GoF 95]
The Gang-of-Four: E. Gamma, R. Helm, R. Johnson, J. Vlissides , Design Patterns: Elements of Reusable Object Oriented Software, Addison-Wesley Publishing Company, 1995, ISBN:0-201-63361-2
[GSM-LANG]
3GPP, Alphabets and language-specific information, http://www. 3gpp.org/ftp/Specs/html-info/23038.htm (květen 2009)
[GSM-MDS]
GSM World, GSM Market Data Summary, http://www.gsmworld.com/newsroom/market-data/market_data_summary.htm (květen 2009)
[Hillebrand 02]
Friedhelm Hillebrand, GSM and UMTS: The Creation of Global Mobile Communications, John Wiley & Sons, 2002, ISBN:9780470843222
[KaMu 07]
Hana Kanisová, Miroslav Müller, UML srozumitelně, 2. aktualizované vydání, Computer Press, a.s., 2007, ISBN:80-251-1083-4
[Raymond 98]
Eric S. Raymond, The Cathedral & the Bazaar, O'Reilly, 1999, ISBN: 1-56592-724-9, http://www.catb.org/~esr/writings/cathedral-bazaar/cathedralbazaar/ (květen 2009)
[RFC 2616]
Network Working Group, Hypertext Transfer Protocol – HTTP/1.1, 1999, http://tools.ietf.org/html/rfc2616 (květen 2009)
[SMS]
3GPP, Technical realization of the Short Message Service (SMS), http://www. 3gpp.org/ftp/Specs/html-info/0340.htm (květen 2009)
[SUN JT]
Sun Microsystems, The Java Tutorials, http://java.sun.com/docs/books/tutorial/index.html (květen 2009)
48
Přílohy:
A OperatorHowto Introduction Esmska features a pluggable operator system, which allows to create support for new operators as simple script files and add them to the program without the need of any program modification. With this plugin system, users can create their own operator plugins, and if it works well, they can send it to us so we can integrate it into official release. If you have some basic IT knowledge and you can create plugin for some local country or even international operator, you are very welcome.
Creating your own script The operator script is relatively simple to write. There are some rules, which you must abide, but they are quite easy to understand. The rest of the work lies in determining which data you must send to the operator website in order to have the message accepted.
Recommended tools •
•
•
Tool for easy visualization of HTML forms, such as Web Developer extension to Firefox browser. It allows you to graphically introspect HTML forms, enable/disable cookies, set HTTP Referer, disable javascript and lots of other stuff. This helps you to find out, which features and necessary to send the message. Network packet sniffer and analyzer, such as Wireshark. By observing legitimate request and responses packets when sending messages with your browser, you can easily find out, where is the problem when using your operator script. All modern Linux distributions should have Wireshark in their packaging system. cURL, which is a very powerful command-line tool for sending various HTTP requests. If you have problems with sending messages through your operator scripts, you should first of all try to send it with cURL. Because it is specializes tool just for this, it can help you solve many of your problems by comparing was web browser send, what cURL sends and what your script sends. All modern Linux distributions should have cURL in their packaging system.
49
•
If you still use Windows, you will also need some reasonable text editor capable of saving text file in standardized UTF-8 encoding with LF line-endings, which is the required format for the operator files.
Operator script specifics The operator script file must be located in the operators directory inside the program installation folder. The filename of the plugin must be the same as the name of the operator (see below the format description) with the .operator suffix, e.g. [XX]Foo.operator. The script file must be encoded in the UTF-8 encoding with standard LF newlines (standard UNIX format). It is recommended that you also supply and icon for your operator, which should be a 16x16 px PNG image with (preferably) transparent background. The filename of the image must be the same as the operator file, but ending with .png, e.g. [XX]Foo.png. The image file must also be in the operators directory. Supplying of the image file is not mandatory though, just recommended. Have a look into the operators folder for some examples.
Internal format description The whole file is just a simple JavaScript file. Therefore you can use there everything which is possible to use in JavaScript. The JavaScript support is based on the Mozilla Rhino project. If you don't know JavaScript, it's a very simple language, just google up some JavaScript reference and you can work with it almost instantly. The script file must implement the OperatorInfo interface, which serves as an list of necessary information about the operator. Content of all the methods are described in their documentation. Additionally, the script must implement the send() method, which is used to actually send the message (see below). In the script you can use some variables, which are predefined and contain some important information. You can find list of these variables in the OperatorVariable enumeration. Be sure not to overwrite this variables with some your temporary ones! And don't forget that JavaScript (as most languages) is case sensitive. There is also one special variable called EXEC. With this variable, you can invoke the public methods listed in OperatorExecutor documentation. All these methods are executed by the program itself and some of them return you some result (e.g. content of the requested web page). Again, behaviour and return values are described in the methods descriptions. On the EXEC variable there are also some constant strings, which you can use to inform the user about particular problem in a localized message. 50
Have a look at some existing operator files to see an examples of working plugins.
The send() method It's just up to you, how you will use the provided methods and send the message. It's only required that you always end this method returning boolean, whether the message was sent successfully or not. There are also some recommendations you should know about: 1. First of all, check for variables correctness and modify them, if needed. For examples, you get the phone number in the international format, but your operator wants it in country local format. Therefore, you have check the number and convert it to preferred format, if needed. As another example, if your operator requires user to log in, you should check that variables for login and password are not empty and inform the user otherwise. 2. Very probably you will have to download and parse some web pages for variables, image identifiers, etc. You can use classic string searches, but regular expressions are far more powerful. You can use them for extracting parts of strings, so you can even forward some operator error message directly to the user. If you don't know regular expressions, you should really learn it (even though it takes some time), search up for some reference and tutorials. 3. You can stop executing the script at any time by calling the return keyword. But be sure to use the EXEC variable to set success to true or false and provide some error message in case of the latter. This way a user can find out why the sending failed and will not blame the program itself. 4. You can use the EXEC variable to set operator message, which will be shown to user after sending is finished. For example you can inform the user about number of free SMS remaining this way. Be careful where to set the message, your script can end prematurely. 5. Be sure to test your script thoroughly and consider every possibility when looking for error messages. The recipient number can be non-existent/malformed, the same holds for the sender number or signature, the login or password can be incorrect, message text can be too long, and so on. Try all these settings and inform the user about each of this problems properly. 6. Use the predefined error messages preferentially. They can be localized which means more users will be able to use your scripts. There may be many cases in which a foreigner may want to use your country-local operator.
Solving problems Please be aware of the fact that not all websites which you can use in your browser can also be used in Esmska. There are some extremely poorly-written websites, which this program simply can't handle. It includes only a basic HTTP library, which does not have all the powers and workarounds of full-featured web browser. Therefore websites complying with web standards should pose no problems, but some of the ugly websites may not work.
51
•
Very often you will search for some string in text content return from GET or POST method. If you are not sure that you really got what you should have got, print the web content to standard output, e.g. like this: content = EXEC.getURL("http://somepage.com", []) print(content)
•
•
This way you can easily see what you actually got. Of course this means that you must run the program from the terminal/command line. You don't have to restart Esmska when you do some change in the send() method. Just send a new SMS, program executes the send() method every time from scratch. If you need more powerful tool to see your network activity, you can enable network logging. Just run the application with the --debug network option: $ java -jar esmska.jar --debug network
•
After running this command, you will see in the standard error output in your terminal lots of messages. During message sending you will see all HTTP headers and content of requests and responses. This can help you a lot, but be warned, there will be hundreds of lines on the output.
Having your script in the official release It's a complete nonsense to use your script only by yourself. All the users should benefit from your work, that's the reason we have a pluggable operator system - so the users can contribute. If you want to share your work, just create a new issue in the issue tracker and attach your operator script (and the icon) to it. We will include it in the next official release and all the users will be able to benefit from your work. The same procedure also applies when you have found some bugs or you have some improvements to currently available plugins. Just modify them and send them over, we will appreciate it. Just a small legal notice: By sending us some of your work you agree to publish it under GPL-compatible free software license (meaning we can integrate it into our program).
52