EXAMENSARBETE

Bildtolkningstjänst för synskadade Hur mobiltelefonteknologi kan användas för att hjälpa synskadade personer att

få information om sådant de inte kan se.

David Renström 2016

Högskoleingenjörsexamen Datateknik

Luleå tekniska universitet Institutionen för system- och rymdteknik

Sammanfattning

Detta projekt syftade till att undersöka möjligheterna till att utveckla en lättanvänd mobilbaserad bildtolkningstjänst som går ut på att Internet-uppkopplade dator- eller mobiltelefonanvändare beskriver vad som syns på bilder som skickas från synskadade brukares mobiltelefoner. De tilltänkta användarna av denna tjänst är personer med varierande grad av synskada, alltifrån helt blinda till personer med vissa synrester. Användningsområdena kan vara alltifrån att få veta vilken smak det är på yoghurten i kylen och hur länge potatisgratängen ska tillagas i ugnen till att ta reda på vilken färg det är på en tröja och vad tvättmaskinen är inställd på. I denna rapport utreds vilka problem som synskadade stöter på i vardagen som denna typ av tjänst skulle kunna lösa. Olika tekniker och metoder vad gäller bildöverföring samt kommunikation mellan tolken och den synskadade brukaren jämförs. Framtagandet av en prototyp till klient för -mobiltelefoner samt utfallet efter testningen av denna tillsammans med utvalda brukare utvärderas också i detalj.

Abstract

This project aimed to examine the possibilities of developing an easy-to-use mobile-based image description service. The idea is that users who are connected to the Internet using their computers or mobile phones describe what can be seen on pictures sent to them from the mobile phones of visually impaired users. The proposed users of this service are persons with varying degree of visual impairment, everything from completely blind people to those who have some sight left. The field of application can be everything from determining the taste of the yoghurt in the fridge and for how long the potato gratin should be cooked in the oven, to finding out the colour of a sweater and what programme the dishwasher is set to. In this report, the problems that visually impaired encounter in everyday life and which of these issues this type of service could solve, are examined. Different techniques and methods regarding transferring images and how the communication between the describer and the visually impaired user should work are compared. The development of a client prototype for Symbian mobile phones and the results after testing this application together with selected users are evaluated as well in detail.

Innehållsförteckning

Tack ...... 1 1. Introduktion ...... 2 2. Bakgrund ...... 2 3. Kommunikation ...... 4 3.1. MMS och SMS ...... 4 3.2. Internet ...... 5 3.2.1. Kommunikationsprotokoll ...... 5 4. Bildöverföring ...... 6 4.1. Out of Band Data (OOB) ...... 8 4.2. File Transfer ...... 8 4.2.1. In-Band Bytestreams (IBB) ...... 9 4.2.2. SOCKS5 Bytestreams ...... 9 4.3. WebDAV File Transfers ...... 10 4.4. Förslag till metod för bildöverföring ...... 10 5. Operativsystem ...... 11 5.1. Symbian OS ...... 11 5.2. Windows Mobile ...... 12 5.3. Java 2 Micro Edition ...... 12 5.3.1. Java-komponenter ...... 14 5.4. Val av operativsystem ...... 15 6. Klient ...... 15 7. Prototyp ...... 16 7.1. Klienten ...... 16 7.2. Servern ...... 17 7.3. Problem ...... 18 7.4. Utvärdering ...... 18 8. Slutsatser och diskussion ...... 19 8.1. Allmänna reflektioner ...... 19 8.2. Alternativa plattformar ...... 19 8.3. Vidareutveckling ...... 20 8.4. Projektets genomförande ...... 20 Appendix A: Mobiltelefoner som stöds av skärmläsningsprogrammen Mobile Speak och Talks ...... 22 Appendix B: Exempel på enkelt C++-program för Symbian 2nd Edition ...... 30 Appendix C: Exempel på enkelt J2ME-program ...... 35 Appendix D: Kompilering av J2ME-applikationer från kommandoraden ...... 37 Appendix E: Referenser ...... 41

Tack

Jag vill först och främst tacka min handledare Joakim Syk på Polar Print i Luleå för ett gott samarbete. Jag vill även tacka Patrik Johansson på Polar Print i Umeå. Slutligen vill jag också rikta ett tack till Örjan Tjernström på Luleå Tekniska Universitets institution i Skellefteå som utgjort ett värdefullt bollplank.

1

1. Introduktion

Detta projekt genomfördes i huvudsak under tidsperioden 2005 – 2007 och syftade till att undersöka förutsättningarna för och, om möjligt, utveckla en prototyp till en bildtolkningstjänst för synskadade mobiltelefonanvändare. Tanken var att man som synskadad eller helt blind skulle kunna skicka bilder eller filmer som man fångat med hjälp av kameran i sin mobiltelefon till en tolkningscentral. Tolkningscentralen skulle i sin tur kunna bestå av ett antal frivilliga seende personer, t.ex. vänner eller släktingar till den synskadade, som kunde befinna sig var som helst och antingen sitta vid sina datorer eller vara uppkopplade med hjälp av andra kommunikationsenheter, t.ex. handdatorer [1] eller mobiltelefoner. Den person som valde att ta på sig tolkningsuppdraget skulle sedan få en bild eller ett videoklipp sänt till sig och skicka tillbaka en beskrivning i text av vad bilden föreställde. Man skulle som användare själv kunna välja om man ville ge tolkningsuppdraget till någon i sin grupp av närstående eller till vem som helst i hela tolkcentralens system. Denna tjänst skulle kunna vara till nytta om man som synskadad t.ex. vill veta bäst-före-datumet på ett mjölkpaket, vad ett visst fotografi föreställer, vad tvättmaskinen är inställd på eller vad det står på ett papper med handskriven text som skannerns bildtolkningsprogram inte klarar av att tolka. Det kan också handla om busstidtabeller i busskurer eller vägskyltar. Det kan även vara så att man gått vilse och helt enkelt behöver hjälp med att ta reda på var man befinner sig. Projektägare har varit hjälpmedelsföretaget Polar Print Försäljning AB [2] som är baserat i Luleå. Hjälpmedelsinstitutet [3] bidrog med 200 000 kr i utvecklingsbidrag för att ta fram en prototyp till denna tjänst.

2. Bakgrund

Som gravt synskadad eller helt blind mobiltelefonanvändare har man länge varit förvägrad många av telefonens funktioner och tjänster som fullt seende konsumenter tar förgivna. Som exempel kan nämnas telefonboken och kalendern samt meddelandefunktionerna SMS, MMS [4] och e-post. Det har under lång tid funnits ett krav på tillverkarna från synskadeorganisationernas sida att göra telefonernas användargränssnitt tillgängliga även för personer med synskador. Det alternativ som man i första hand har diskuterat är möjligheten att använda sig av en s.k. talsyntes [5], dvs. göra det möjligt för telefonen att läsa upp menyer, meddelanden, etc. för användaren med

en syntetisk röst. Ett problem har dock varit att telefonerna inte har varit tillräckligt kraftfulla. Processorerna har helt enkelt inte orkat med den relativt höga belastning som en mjukvarubaserad talsyntes medför. Ett annat alternativ hade kunnat vara att ansluta en extern talsyntes till telefonen, dvs. i form av en extra tilläggsenhet med egen processor. Detta är dock inte en särskilt attraktiv lösning då det skulle leda till en mera otymplig telefon som antagligen också lättare skulle ta skada av oförsiktig hantering. Dessutom skulle den extra hårdvaran troligtvis bli alltför dyr för den gemene konsumenten. Den snabba teknikutvecklingen ledde dock till att det i början av 2000-talet började komma ut mobiltelefonmodeller på marknaden som var tillräckligt kraftfulla för att kunna driva en mjukvarubaserad talsyntes. Många av dessa s.k. [6] kan kanske snarare ses som datorer i fickformat än mobiltelefoner i traditionell mening. De tillåter bl.a. att användaren själv installerar tredjepartsprogram för att utöka telefonens funktioner och detta är högst troligt en viktig anledning till att s.k. skärmläsningsprogram (även kallade skärmläsare) [7] blivit allt vanligare i synskadade personers mobiltelefoner under de senaste åren. Användaren behöver inte nödvändigtvis skicka in telefonen till något företag för ett hårdvaru- eller mjukvaruingrepp av ena eller andra slaget utan kan i stället på egen hand ladda ner och installera allt som behövs från Internet. En annan och kanske ännu viktigare anledning till den ökande populariteten kring skärmläsningsprogram i mobiltelefoner är förstås att priserna på själva telefonerna sjunkit till mera humana nivåer. Då detta projekt inleddes fanns det fem olika skärmläsningsprogram för mobiltelefoner att välja mellan på marknaden, nämligen Mobile Speak [8], Mobile Speak [9] och Mobile Speak Pocket [10] som utvecklas av det spanska företaget Code Factory, Talks [11] som utvecklas av det amerikanska företaget Nuance Communications samt Smart Hal [12] och Pocket Hal [13] som utvecklades av brittiska Dolphin. Dessa programvaror stödjer tillsammans en mängd olika telefonmodeller och har för- och nackdelar som jag inte tänker gå in på i detalj här. Vad som kan nämnas är att skärmläsningsprogrammen förutom att använda sig av syntetiskt tal även kan erbjuda möjligheten att ansluta telefonen till vissa modeller av punktdisplayer [14] via [15] och på så sätt även förmedla skärminnehållet taktilt. Detta kan vara till stor nytta speciellt för dövblinda personer. Det ska också nämnas att vissa hjälpmedelsföretag under de senaste åren tagit fram några olika specialanpassningar som bl.a. inkluderar stöd för grundläggande mobiltelefonfunktioner som t.ex. telefonbok och SMS. Det handlar då om specialbyggda enheter som har både inbyggd punktskriftsdisplay och talsyntes. Dessa enheter marknadsförs som anteckningshjälpmedel och är främst avsedda som

alternativ till vanliga bärbara datorer. Den här typen av lösningar kostar dock väldigt mycket jämfört med ”vanliga” mobiltelefoner, dvs. oftast upp emot eller över 30 000 kr, och är därför inte ett rimligt alternativ för en privatperson. En del landsting och arbetsförmedlingar i Sverige förskriver dessa speciallösningar som hjälpmedel till synskadade som bedöms ha behov av dem i t.ex. skolan eller på arbetet. Exempel på dessa anteckningshjälpmedel är Alva MPO [16] och Pronto [17]. Den ökade tillgängligheten för gravt synskadade personer till mobiltelefonernas alla funktioner ledde fram till idén till detta projekt. Tanken var att man som synskadad skulle kunna använda mobiltelefonens inbyggda kamera, vilken är mer eller mindre standard i de flesta telefonerna i dag, för att ta ett foto av i princip vad som helst, t.ex. ett papper med text, ett klädesplagg eller ett paket i skafferiet. Användaren, som vi fortsättningsvis kan kalla för brukaren, skulle sedan skicka bilden över Internet till en tolkningscentral till vilken ett antal personer, som vi fortsättningsvis kan kalla för tolkar, skulle vara anslutna via sina datorer, mobiltelefoner eller handdatorer. Någon av tolkarna skulle därefter titta på bilden och skicka i retur en text som beskrev vad som syntes på bilden. För att allt detta ska kunna fungera måste det förstås finnas en server någonstans som sköter ihopkopplingen av brukare och tolkar samt distribuerar bilderna och textmeddelandena mellan dem. Det var denna tjänst som man på Polar Print ville utveckla och erbjuda till de synskadade mobiltelefonanvändare som har behov av den.

3. Kommunikation

Första steget blev att bestämma på vilket sätt kommunikationen mellan tolkarna och brukarna skulle ske. Närmare bestämt var frågeställningen hur bilden skulle skickas från brukaren till tolkarna och på vilket sätt tolkarna sedan skulle returnera en bildbeskrivning.

3.1. MMS och SMS

Den första lösningen som togs upp till diskussion var möjligheten att brukaren skickar ett vanligt MMS med en bild som tagits med mobiltelefonens kamera till tolkcentralens server. Denna bild distribueras sedan av servern ut till alla tolkar, antingen via MMS eller över Internet. Någon av tolkarna skickar sedan tillbaka ett SMS till brukaren i vilket bilden beskrivs.

Fördelen med denna lösning är att inga specialprogram behöver installeras, varken på brukarnas eller tolkarnas telefoner, eftersom funktionaliteten (SMS och MMS) redan finns inbyggd. Nackdelarna med detta förfaringssätt är dock många. För det första har brukaren ingen möjlighet att veta i fall någon av tolkarna som är anslutna till tolkcentralen har tid eller möjlighet att tolka en bild just nu. Bilden skickas alltså i blindo och brukaren kan få vänta i ovisshet i princip hur länge som helst innan ett svar dyker upp. En annan nackdel är att kostnaderna skulle bli tämligen höga för både brukarna, tolkarna och det företag eller den myndighet som har ansvaret för tolkcentralen. Såväl SMS som MMS blir vid omfattande nyttjande ganska dyrt att använda. Slutligen så finns det ingen möjlighet för de övriga tolkarna att veta när någon annan tolk har svarat på en förfrågan om att tolka en bild. Resultatet kan alltså bli att brukaren antingen får flera beskrivningar av samma bild eller att ingen svarar eftersom alla tänker att någon annan har säkert redan svarat då det var en stund sedan förfrågan skickades ut.

3.2. Internet

Det alternativ som tidigt framstod som det bästa var att helt och hållet sköta kommunikationen via Internet. I dag kan de flesta mobiltelefonerna ansluta till Internet, antingen via GPRS [18] (även kallat 2,5G), det snabbare EDGE [19] (även kallat 2,75G) eller det ännu snabbare [20]. I och med att både brukare och tolkar är anslutna till Internet ökar tillgängligheten betydligt. Nästan alla persondatorer är i dag anslutna till Internet och därmed finns det förstås också ett potentiellt stort antal människor som kan fungera som tolkar. Men det finns egentligen inget som säger att tolkarna måste sitta vid en dator utan de kan lika gärna använda mobiltelefoner de också eller handdatorer.

3.2.1. Kommunikationsprotokoll

Nästa fråga att ta ställning till var vilket kommunikationsprotokoll som skulle användas för att skicka data mellan brukarna, tolkarna och tolkcentralen. Frågan var mera exakt om det redan fanns ett protokoll som var baserat på en öppen standard, passade ändamålet och som det gick att bygga vidare på. Ett annat alternativ hade förstås varit att bygga ett helt eget protokoll från grunden. Detta kunde dock ha blivit både komplicerat och tidsödande. Det första alternativet lät alltså mera attraktivt eftersom det innebar betydligt mindre arbete och

förhoppningsvis också mindre risker för fel relaterade till själva kommunikationen. Ett protokoll som tidigt kom in i bilden och som verkade tilltalande var Jabber [21], även kallat XMPP (eXtensible Messaging and Presence Protocol). Detta är en helt öppen standard som bygger på XML (eXtensible Markup Language) [22] vilket är ett helt textbaserat format avsett för att strukturera och lagra godtyckliga mängder data. Jabber är tänkt att i första hand vara ett alternativ till kommunikationsprotokoll för s.k. snabbmeddelandetjänster [23] som t.ex. ICQ [24] och Windows Live Messenger [25] (tidigare MSN Messenger). Protokollet kan dock användas till mycket annat också, t.ex. kommunikation mellan klienter i ett online- spel eller liknande. En av de stora fördelarna med Jabber, förutom att det är ett protokoll som helt och hållet bygger på öppen källkod, är att det är tämligen väl spritt över Internet. Det finns otaliga klienter och även ett flertal olika Jabber-servrar avsedda för alla möjliga operativsystem och plattformar. Detta gör förstås bl.a. att det blir lättare att hitta lämpliga klienter med öppen källkod att bygga vidare på då det gäller den applikation som ska installeras i brukarens mobiltelefon. En annan sak som förstås också är positiv är att många redan dagligen använder någon typ av klient för snabbmeddelanden och därmed mest troligt inte behöver installera något ytterligare program i sin dator för att kunna ta emot såväl förfrågningar om tolkningshjälp som själva fotografierna. Det bästa hade kanske varit om vi hade kunnat använda oss av Windows Live Messenger-protokollet då detta är det i särklass vanligaste programmet för snabbmeddelanden i Sverige i dag. Detta protokoll är dock byggt på en sluten standard som är patentskyddad av och därför olämplig att använda. Det finns dock s.k. Transports eller Gateways [26] som installeras på Jabber-servern. Dessa utökningar av servrarnas funktionalitet gör det möjligt att skicka meddelanden mellan Jabber- klienter och klienter som tillhör andra snabbmeddelandenätverk, t.ex. Windows Live Messenger och ICQ.

4. Bildöverföring

Vi beslutade tidigt att inrikta oss på överföring av stillbilder och skjuta ev. stöd för överföring av rörliga bilder på framtiden. Detta för att minska komplexiteten samt spara tid vid testning av tjänsten. Någon slags filöverföring var förstås nödvändig för att det skulle vara möjligt att skicka bilder från brukarnas mobiltelefoner till tolkarna. Något att ta ställning till var hur man ser till att endast en av

tolkarna behöver ta emot bilden och hur de andra tolkarna sedan får veta att så har skett. Efter diskussion med min handledare kom vi fram till att det bästa vore att brukaren först skickar en förfrågan om tolkningshjälp till en hel grupp tolkar. När brukaren sedan får svar från en av dem så skickar brukaren bilden endast till den tolken och de andra tolkarna i gruppen får ett meddelande om att tolkningsuppdraget har accepterats av någon annan. Det krävs alltså att såväl klienten som servern stödjer funktionen att skicka ett meddelande till en hel grupp användare åt gången för att detta ska fungera. Jabber-protokollet definierar dels ett antal standarder för den grundläggande kommunikationen mellan klienter och servrar samt dels ett större antal föreslagna standarder, s.k. XMPP Extensions (XEPs) [27], som utökar funktionaliteten hos protokollet. Det finns ett Jabber-tillägg som heter Extended Stanza Addressing [28]. Detta protokoll definierar en metod som gör det möjligt för en Jabber-klient att skicka ett och samma meddelande till flera användare på samma gång. Detta tillägg till Jabber- protokollet var dock endast ett utkast och kunde alltså när som helst förändras eller förkastas av Jabber-rådet (the XMPP Council [29]) som delvis baserar sina beslut på de diskussioner som förs på den öppna mailinglistan Standards-JIG [30]. Till den Java-baserade servern OpenFire [31] fanns dock ett broadcast-plug-in [32] som gör det möjligt att skicka ett och samma meddelande till en hel grupp användare. Så länge gruppen finns definierad på servern så behöver Jabber-klienten endast ange gruppnamnet som destinationsadress för att meddelandet ska gå ut till alla i gruppen. Detta, kom vi fram till, kräver antagligen endast små justeringar i den klientapplikation som brukaren ska använda. Man behöver endast försäkra sig om att det förutom att skicka meddelanden till vanliga användare även går att skicka meddelanden med en hel grupp som destinationsadress. En annan sak att ta ställning till var frågan om sekretess. Det är viktigt att bilder inte blir liggande någonstans, varken på någon server eller hos någon tolk. Det förra är förstås betydligt lättare att ha kontroll över än det senare. Man får försöka se till att bilder inte lagras hur länge som helst på servern. Detta är förstås även en utrymmesfråga eftersom allt fler bortglömda bilder på servern till slut kommer att göra att serverns lagringsutrymme tar slut. Bland Jabber-tilläggen finns bl.a. ett antal förslag till metoder för att överföra filer mellan Jabber-klienter. Inga av dessa föreslagna metoder hade dock fått status som en färdig standard under projekttiden. Stöd för åtminstone en av filöverföringsmetoderna finns dock redan implementerat i de flesta klienterna och servrarna.

4.1. Out of Band Data (OOB)

Den första metoden som tidigt tillämpades för filöverföringar över Jabber-nätverket kallades Out of Band Data (OOB) [33]. Denna metod går ut på att sändaren använder den ”vanliga” kanalen som meddelanden skickas över för att skicka en URI (Unified Resource Identifier) [34], även kallad URL, från vilken filen kan laddas ner till mottagaren. Denna URI kan men måste inte vara av typen HTTP. Den kan även vara av typen FTP eller vilken som helst annan URI som följer den generella syntaxen. Det definieras inte klart och tydligt i specifikationen för detta filöverföringsprotokoll huruvida det är meningen att man ska använda en tredje part, dvs. en mellanliggande server, för att ladda upp och mellanlagra filen på eller om det ska implementeras t.ex. en liten HTTP- server som en del av Jabber-klienten. Båda lösningarna tycks ha provats i praktiken, men den mest praktiska lösningen verkar förstås vara att använda en tredje part för mellanlagring av filen. Det specificeras inte heller huruvida sändarens klient automatiskt ska ta hand om uppladdningen av filen eller om den sändande användaren själv måste göra detta manuellt innan URI:n skickas till mottagaren. Dock får man anta att mottagarens klient automatiskt ska initiera nerladdningen av filen när användaren har accepterat att ta emot den. Det här utkastet till standard för filöverföring är numera märkt som historiskt (historical) i listan över föreslagna Jabber-standarder. Detta innebär i praktiken att programutvecklare inte direkt uppmanas att implementera stöd för detta protokoll, men det står var och en fritt att göra så för att erbjuda bakåtkompatibilitet med äldre Jabber-klienter som inte stödjer de nyare metoderna för filöverföring. Fördelen med denna metod är att den kringgår de flesta typer av brandväggar [35]. Så länge det går att etablera en anslutning till t.ex. en webbserver så går det både att ladda upp och ladda ner filer även om man befinner sig bakom en brandvägg. Nackdelen är förstås att detta protokoll inte längre rekommenderas för implementering. Detta gör naturligtvis att många Jabber-klienter som utvecklas i dag och i framtiden antagligen inte kommer att stödja denna filöverföringsmetod.

4.2. File Transfer

File Transfer [36] är egentligen ingen metod för filöverföring i sig utan snarare en metod för två klienter att vid varje filöverföringstillfälle komma överens om den mest lämpliga metoden.

Detta protokoll bygger i sin tur på ett annat XMPP-protokoll vid namn Stream Initiation [37] som är framtaget just för att åstadkomma olika typer av byte-strömmar mellan Jabber-klienter. Detta protokoll kan användas tillsammans med vilka filöverföringsmetoder som helst. Dock kräver specifikationen klart och tydligt att åtminstone protokollen SOCKS5 Bytestreams [38] och In-Band Bytestreams [39] finns implementerade i klienten. Protokollet definierar också ganska detaljerade metadata för varje fil som skickas, såsom storlek, datum och filbeskrivning. Specifikationen innehåller även stöd för överföring av delar av filer, men detta är frivilligt att implementera.

4.2.1. In-Band Bytestreams (IBB)

Den enklaste metoden för filöverföring via Jabber-nätverket kallas In-Band Bytestreams (IBB) och går ut på att koda om all binär data som ska skickas till mottagaren till ett format som kallas för Base64 [40]. Detta innebär att varje byte binärdata kodas om som 4 byte XML-godkänd data. Denna byte-ström skickas sedan över samma kanal som de övriga textmeddelandena, därav ”in-band”. En fördel med detta filöverföringsprotokoll är att filerna utan problem passerar genom brandväggar eftersom ingen ny anslutning måste etableras mellan sändaren och mottagaren och därmed behöver ingen extra port öppnas upp. Så länge som en anslutning till Jabber- servern går att åstadkomma så fungerar filöverföringen alltså utan problem. Nackdelen med denna metod är förstås att all data som skickas ökar i storlek med en faktor av 4 (ej inräknat de extra byte som krävs för själva XML-formateringen). Detta är förstås högst olämpligt om man som mobiltelefonanvändare dels antagligen har tillgång till en tämligen begränsad bandbredd och dels vanligtvis debiteras av mobilleverantören beroende på mängden data som skickas och tas emot och/eller har en begränsning från leverantörens sida på hur mycket man får ladda ner under en viss tidsperiod.

4.2.2. SOCKS5 Bytestreams

En nyare och bättre metod för filöverföring heter SOCKS5 Bytestreams. Detta protokoll använder, som namnet antyder, SOCKS- protokollet [41] som är speciellt framtaget för att göra det möjligt för klienter att upprätta anslutningar till servrar genom brandväggar med hjälp av en s.k. proxy-server [42]. Jabber-standarden specificerar dels en

metod för att etablera en SOCKS-ström direkt mellan två klienter och dels en metod för att låta byte-strömmen passera genom en mellanhand. Ett problem med denna lösning är dock att Jabber- tillämpningen kräver vissa förändringar i själva SOCKS-protokollet vilket gör att existerande SOCKS-proxy-servrar inte kan användas utan att vissa modifieringar görs. Dessutom tillhandahåller långt ifrån alla nätverkskonfigurationer någon SOCKS-proxy-server över huvud taget.

4.3. WebDAV File Transfers

Det finns ett utkast till Jabber-protokoll vid namn WebDAV File Transfers [43] som är tänkt att låta Jabber-användare skicka filer till varandra även om mottagaren inte är uppkopplad för tillfället. Protokollet använder sig av WebDAV [44] som är en utökning av HTTP-protokollet [45] och som gör det möjligt att ladda upp filer till webbservrar. Detta gör det också möjligt att skicka samma fil till flera användare på en gång. Den sändande klienten ger webbservern en lista över Jabber-användare, s.k. JIDs (=Jabber ID), som får hämta filen i fråga. En kontroll sker sedan från serverns sida så att ingen obehörig får tillgång till filen. Problemet med detta protokoll var dock att det inte verkar finnas någon som helst implementation av denna metod för filöverföring, varken på klient- eller serversidan. Jag har varit i kontakt med upphovsmannen till specifikationen och han var själv förvånad över att ingen hittills har visat sig intresserad av att implementera hans idé. Detta protokoll är numera märkt som uppskjutet (deferred) på hemsidan med listan över föreslagna Jabber-tillägg. Man kan tolka det som att man vill se tiden an och kanske försöka lansera idén igen vid ett senare tillfälle. Det känns som om det här protokollet hade varit helt rätt för detta projekt om det bara hade funnits implementerat. Som det är nu skulle alltså en implementering av ett server-tillägg samt en mobilklient för brukarna och en PC-klient för tolkarna varit nödvändiga för att detta skulle ha fungerat. Med tanke på att vi ville att tjänsten ska vara i princip oberoende av vilken Jabber-klient tolkarna använde så kändes detta protokoll inte aktuellt. Dessutom skulle det omfattande programmeringsarbetet inte ha rymts inom tidsramen för detta projekt.

4.4. Förslag till metod för bildöverföring

Eftersom det inte fanns någon helt färdig standard för filöverföring inom Jabber-protokollet och då de förslag som verkade närmast standardisering inte riktigt såg ut att vara vad vi letade efter så diskuterade vi fram en egen lösning. Vi konstaterade att många Jabber-

klienter i dag låter användaren öppna URL:er, t.ex. webbadresser, som skickas i vanliga textmeddelanden genom att klicka på dem. Man skulle alltså kunna göra det enkelt för tolkarna genom att de i ett meddelande får en länk till en hemsida från vilken de kan ladda ner bilderna. När tolken har laddat ner bilden tas den bort från servern. Rimligt är förstås också att bilden tas bort automatiskt i fall ingen har laddat ner den inom en viss tid. Det måste finnas en mekanism på hemsidan som kontrollerar att endast den tolk som får länken till en viss bild kan ladda ner den och ingen annan. Någon typ av slumpmässigt genererade ID-nummer kan räcka som identifiering, åtminstone till att börja med. Dessa ID-nummer genereras troligtvis enklast när brukarens klient laddar upp bilden och skickas sedan med som en parameter i HTTP-länken som tolken får. Det som behövdes göras i den Jabber-klient som brukaren ska använda var alltså i korthet att implementera en funktion för att ladda upp bildfilen till en webbserver. Detta kan enklast åstadkommas antingen med hjälp av HTTP-kommandot PUT eller genom att göra en s.k. HTTP POST. Det viktiga är dock att webbservern och klienten båda känner till ID- numret. Förslagsvis kan klienten ta hand om att generera ID-numret och sedan skicka med detta som en parameter när bilden laddas upp till servern. Det skript (förslagsvis PHP [46]) som tar emot filen lägger sedan lämpligen in detta ID-nummer i en databas (förslagsvis MySQL [47]) för att senare kunna verifiera att tolken verkligen har tillåtelse att ladda ner och titta på bilden.

5. Operativsystem

De flesta s.k. smartphones som fanns på marknaden när projektet inleddes använde antingen Windows Mobile [48] eller Symbian OS [49] som operativsystem för sina applikationer. Av dessa två var Symbian helt klart det vanligaste operativsystemet bland synskadade mobiltelefonanvändare. Linux [50] var på gång som mobilt operativsystem men hade inte slagit igenom.

5.1. Symbian OS

Då det gäller Symbian OS finns det i dagsläget egentligen bara en huvudtyp av det grafiska gränssnittet, nämligen S60 [51], som utvecklas av . Båda skärmläsningsprogrammen Mobile Speak och Talks stödjer flera telefonmodeller som bygger på Symbian S60. Talks stödjer dessutom ett par telefonmodeller baserade på Symbian Series 80 [52] som dock inte verkar utvecklas längre.

Det fanns tidigare en variant av Symbian OS som hette UIQ [53] och som huvudsakligen utvecklades av Sony-Ericsson. Denna gren av Symbian lades dock ner och det har aldrig funnits några skärmläsningsprogram avsedda för det.

5.2. Windows Mobile

Då det gäller telefoner som använder operativsystemet Windows Mobile fanns då projektet inleddes skärmläsningsprogrammen Mobile Speak Smartphone samt Mobile Speak Pocket som var avsett för lite mera avancerade telefoner/handdatorer med pekskärm. Det fanns även två skärmläsningsprogram som hette Smart Hal resp. Pocket Hal och som stödde i princip samma eller något färre telefonmodeller än Mobile Speak Smartphone. Windows Mobile är dock inte särskilt vanligt som operativsystem i telefoner på den svenska marknaden och speciellt inte bland synskadade användare. Den absoluta majoriteten av synskadade med skärmläsningsprogram i mobilen använder telefoner från Nokia, dvs. Symbian OS-baserade telefoner.

5.3. Java 2 Micro Edition

Det finns en version av det plattformsoberoende maskinspråket Java [54] som är speciellt utvecklad för mobila enheter som har lite mera begränsade resurser med avseende på minnesutrymme och processorkraft. Denna Java-svit kallas Java Micro Edition [55] och den senaste versionen som baseras på J2SE (Java 2 Standard Edition) [56] benämns Java 2 Micro Edition (J2ME). I princip alla s.k. smartphones baserade på Symbian OS som används av synskadade i dag har i varierande grad inbyggt stöd för J2ME. Skärmläsningsprogrammen har också successivt blivit bättre på att förmedla skärminnehållet i Java-applikationerna till användaren. Då det gäller skärmläsningsprogrammen för Windows Mobile-baserade telefoner är Java-stödet dock inte lika bra än. Fördelarna med att bygga Jabber-klienten på Java-plattformen är många. Det främsta argumentet är att samma Java-applikation går att köra på flera olika operativsystem så länge enheten i fråga stödjer Java. Klienten går alltså i teorin lika bra att använda på en telefon baserad på Symbian S60 som en Windows Mobile-telefon. En annan stor fördel med Java är även enkelheten för programmeraren. Det är kort sagt betydligt enklare och effektivare att utveckla och felsöka Java-applikationer än komplicerade Symbian-

applikationer som kan bygga på tiotals C++-filer där ändringar kan krävas i flera av dessa för att åstadkomma en enda liten förändring i applikationens användargränssnitt. Se appendix B och C för en jämförelse mellan ett enkelt program implementerat i C++ för Symbian S60 resp. J2ME. Det finns naturligtvis även nackdelar med Java. Den största, som jag ser det, är att Java-applikationer alltid körs i vad man på engelska brukar kalla för sandlådemiljö (sandboxed environment). Detta innebär att användaren alltid måste bekräfta att programmet får använda en viss resurs som t.ex. kamera eller Internet-anslutning. På många telefoner går det endast att ställa in så att denna fråga ska ställas varje gång eller endast en gång per session, dvs. en gång efter varje omstart av programmet. Ingen implementation verkar dock ha en inställning för att låta en viss Java-applikation få tillgång till en viss resurs för alltid utan att fråga igen. Dessa ständigt återkommande dialogrutor som kräver att användaren bekräftar att applikationen får använda det ena och det andra kan utan tvekan bli en källa till irritation för de tilltänkta användarna. Det finns dock ett sätt att kringgå problemet med att användaren måste ge sitt godkännande för att Java-applikationen ska få nyttja vissa resurser. Med hjälp av s.k. digital signering [57] kan applikationen få status som betrodd (trusted). Detta innebär att programmet får använda sig av de funktioner som den behöver utan att användaren måste ge sitt godkännande. Signeringen kostar dock en hel del eftersom man då måste blanda in en tredje part som utfärdar certifikaten. GeoTrust [58] är exempel på ett företag som säljer kodsigneringstjänster. Varje gång ett signerat Java-program installeras kontrollerar telefonen dess certifikat för att se om det är giltigt. I bland, beroende på aktuell inställning, ansluter telefonen även till Internet för att kontrollera med det företag som utfärdat certifikatet att det inte dragits tillbaka. I fall certifikatet inte kan hittas, t.ex. därför att den som utvecklat applikationen inte längre betalar avgiften till den tredje parten som utfärdat det, går det inte längre att installera programmet. I bland går det att ”lura” enheten att installera programmet ändå genom att ställa tillbaka datumet till den tidsperiod då certifikatet var giltigt. Detta förutsätter dock förstås att enheten inte också kontrollerar certifikatet via Internet. En annan nackdel med Java är naturligtvis också den långsammare programexekveringen. Eftersom Java-kod inte är maskinkod för den enhet som applikationen körs på utan byte-kod som tolkas av den virtuella maskinen som körs på enheten så tar alla instruktioner lite längre tid att utföra än i ett program som är skrivet och kompilerat speciellt för den aktuella enheten. Skärmläsningsprogrammet kräver förstås också en hel del systemresurser och bidrar till att allting som exekveras på telefonen går märkbart långsammare än i vanliga fall. Dock ska det sägas

att telefonernas processorer blir allt snabbare och inte ens när Java- applikationer körs på en telefon som är ett par år gammal är exekveringshastigheten ett egentligt problem. Det har också betydelse hur applikationen är skriven. Är applikationen skriven så att den exekveras på ett effektivt sätt så behöver den inte bli så långsam.

5.3.1. Java-komponenter

Det finns i första hand två komponenter att ta hänsyn till när man ska implementera en Java-applikation för att den ska bli kompatibel med så många enheter som möjligt. Den ena komponenten heter CLDC (Connected Limited Device Configuration) [59] och fanns under projekttiden i versionerna 1.0 (äldre telefoner) och 1.1 (nyare telefoner). Det som skiljer versionerna åt är bl.a. antalet system-, stränghanterings-, säkerhets-, trådnings-, matematik- samt in- och utmatningsfunktioner. Den andra Java-komponenten heter MIDP (Mobile Information Device Profile) [60] och fanns under projektet i versionerna 1.0 och 2.0. Denna komponent avgör bl.a. vilka grafiska komponenter som applikationen kan använda sig av. Vilken version av MIDP som används avgör också vilka ljud-, nätverks-, bildhanterings- och kamerafunktioner som kan användas. Både CLDC och MIDP är bakåtkompatibla, dvs. det går utan problem att t.ex. köra applikationer skrivna för CLDC 1.0 och MIDP 1.0 på en enhet som stödjer CLDC 1.1 och MIDP 2.0. Om man ska bygga en Java-applikation för så många enheter som möjligt kan det alltså vara en god idé att försöka använda så ”gamla” versioner som möjligt av såväl CLDC som MIDP. Dock kan det sägas att det i dag inte är speciellt många enheter, även inräknat de lite äldre telefonmodellerna, som inte stödjer både CLDC 1.1 och MIDP 2.0 eller senare. Alltså kan den nyare versionen användas om det blir nödvändigt utan att man förlorar särskilt många presumtiva kunder. Se appendix A för en tabell över vilka Symbian- baserade telefoner som stöds av respektive skärmläsningsprogram och vilka CLDC- och MIDP-versioner dessa telefoner kan hantera. Inom detta projekt måste vi förutom CLDC och MIDP även ta hänsyn till huruvida en viss telefon stödjer tillägget Mobile Media API (MMAPI) [61]. Det är denna komponent som gör det möjligt för Java- applikationer att utnyttja multimediaresurser som t.ex. kamera, mikrofon och högtalare. Denna API fanns under projektets gång i versionerna 1.0 och 1.1. Skillnaderna mellan dessa versioner ligger endast i dokumentationen och handlar om säkerhetsaspekter som inte påverkar funktionaliteten. Inom detta projekt spelade det därför ingen roll vilken version av MMAPI vi använde. De flesta telefonerna som stödjer Java har också stöd för åtminstone MMAPI 1.0.

5.4. Val av operativsystem

De skärmläsningsprogram för mobiltelefoner som används mest av synskadade i Sverige är i nuläget de som stödjer operativsystemet Symbian OS och det grafiska gränssnittet S60. Det verkade alltså som om den tjänst som detta projekt syftade till att utveckla skulle vara tillgänglig för flest användare om Jabber-klienten som brukaren skulle använda i första hand fungerade på Symbian S60-telefoner. Sammanfattningsvis så tycktes Java vara ett fullt acceptabelt, om än inte idealiskt alternativ jämfört med att implementera brukarklienten i något mera plattformsspecifikt programmeringsspråk som t.ex. C++ för Symbian S60 där programmeraren måste ta hänsyn till de olika operativsystemversionernas programmeringsgränssnitt för det grafiska gränssnittet, Internet-anslutning, kamera, etc. Dessutom skulle programutvecklingen ha tagit betydligt längre tid pga. den större komplexiteten. Slutligen fanns problemet med att olika versioner av S60 inte var kompatibla med varandra. Applikationer skrivna för S60 2nd Edition fungerade t.ex. inte på nyare telefoner som använde S60 3rd Edition.

6. Klient

Nästa steg blev att försöka hitta en Java-baserad Jabber-klient med öppen källkod att bygga vidare på. Det fanns tyvärr inte så många klienter som byggde på den nerskalade Micro Edition-versionen av Java (J2ME). Jag hittade två klienter baserade på J2ME med öppen källkod, nämligen Mobber [62] och Jabber Mix Client [63]. Den klient som ganska snart visade sig vara det bästa alternativet var Jabber Mix Client. Denna klient är fortfarande under utveckling och förbättrades avsevärt bara under projekttiden. Jabber Mix Client är helt och hållet ett fritidsprojekt för upphovsmannen Gabriele Bianchi som i vanliga fall arbetar på ett mjukvaruföretag i Italien. Jabber Mix Client bygger på MicroJabber [64] som är ett Java- bibliotek med Jabber-specifika funktioner implementerat just för Micro Edition-versionen av Java. Jabber Mix Client stödjer i grundutförandet basala funktioner för att skicka och ta emot såväl meddelanden som närvarostatus. Det är även möjligt att hålla igång flera konversationer samtidigt. Klienten innehåller inget som helst stöd för att skicka eller ta emot filer. Något som däremot finns är stöd för krypterade anslutningar genom SSL (Secure Sockets Layer) [65], vilket kan vara intressant ur sekretessynpunkt. Andra intressanta funktioner är stöd för multichatt

(chatta med flera personer samtidigt) och möjligheten att starta mobilsamtal med Jabber-kontakter direkt inifrån programmet. Jag ansåg att Jabber Mix Client utgjorde en bra grund för vidareutveckling och testning inom detta projekt. Det som i första hand behövde implementeras var stöd för att ta fotografier och ladda upp dessa till en webbserver. Sedan behövdes det även göras en del justeringar för att göra gränssnittet lite mera användarvänligt för synskadade. Ytterligare en sak som måste implementeras var möjligheten att kunna skicka meddelanden till en hel grupp användare.

7. Prototyp

Projektet mynnade ut i en prototyp till bildtolkningstjänst som sedan testades på en mindre grupp synskadade mobiltelefonanvändare. I detta fall var det Mobile Speak som användes som skärmläsningsprogram på samtliga enheter. I det här avsnittet beskriver jag hur jag gick till väga för att ta fram prototypen.

7.1. Klienten

Som tidigare nämnts valde jag att vidareutveckla och anpassa den J2ME-baserade klienten Jabber Mix Client. Att som blind programmerare kompilera J2ME-program verkade från början mycket komplicerat. Med det s.k. Wireless Toolkit [66] som man kan ladda ner från Sun Microsystems, alternativt Nokias, hemsida följer ett grafiskt verktyg som kallas kToolbar. Detta verktyg är tänkt att användas för att hantera programmeringsprojekt och kompilera program. Dess användargränssnitt är dock helt omöjligt att använda med skärmläsningsprogrammet JAWS [67] som jag använder i Windows. Jag tvingades därför leta reda på ett annat sätt att kompilera mina program. Det visade sig dock att det även går att kompilera J2ME-program via kommandoraden. Detta sätt är däremot något krångligare. Se appendix D för mer information om hur detta går till. Innan jag gav mig in på att ändra och flytta om saker och ting i Jabber Mix Client gick jag först in för att lära mig lite mera om J2ME. Jag hade sedan tidigare läst en programmeringskurs i Java och detta underlättade förstås en hel del. Det som var nytt för mig var främst hanteringen av grafiska objekt, såsom formulär, menyer, listor, etc. Jag skapade några små testprogram som jag kompilerade och testkörde på min Nokia 6600. På ett tidigt stadium gav jag upp tankarna på att testköra programmen i den emulator [68] som följer med Wireless Toolkit. Användargränssnitten som emulerades på datorns skärm gick nämligen

inte att läsa med skärmläsningsprogrammet då de var helt grafiska. Detta gjorde förstås att det tog längre tid att testa varje förändring i ett program eftersom det först måste överföras till telefonen, sedan installeras och slutligen startas från telefonens meny. När jag väl hade fått en grundläggande förståelse för J2ME- applikationernas sammansättning gav jag mig in på att ändra i Jabber Mix Clients användargränssnitt. Att i detalj gå in på exakt vad jag ändrade och hur blir alltför långt och komplicerat. Vad jag i korthet gjorde var att bl.a. ta bort en del grafiska objekt som man som synskadad ändå inte har någon nytta av, t.ex. statusikoner, menygrafik, etc. Sedan tog jag bort onödiga knappar och menyval som jag bedömde ändå inte skulle komma att behövas i detta projekt. Allt för att göra applikationen så lättanvänd som möjligt. En stor förändring jag genomförde var att se till att varje mottaget meddelande visades i ett eget fönster och att detta fönster måste stängas för att nästa skulle visas. Detta återigen för att minimera risken för missförstånd, dvs. risken för att meddelanden skulle kunna gå förlorade utan att läsas. Jag lade också till en ljudsignal samt vibration vid inkommande meddelande för att uppmärksamma användaren. Jag lade även till möjligheten att skicka en tolkförfrågan antingen till alla tolkar eller brukarens egna personliga tolkar. Möjligheten att skicka en tolkförfrågan till en enskild tolk lät jag också finnas kvar som ett alternativ. Det största och viktigaste tillägget jag gjorde till programmet var förstås funktionen för att ta en bild och sedan ladda upp den till en webbserver med hjälp av en HTTP POST-förfrågan. Detta var den i särklass mest krävande och tidsödande delen av projektet. Det visade sig bl.a. att medan uppladdningen av bilder till en webbserver fungerade utmärkt på min telefon fungerade det inte alls på en annan. Detta kom jag slutligen fram till berodde på att min telefon tillät mer än en samtidig etablerad ren TCP-anslutning [69] medan den andra telefonen, trots att den var nyare, endast tillät en enda TCP-anslutning åt gången. En TCP- anslutning var ju redan öppen i och med att telefonen var ansluten till Jabber-servern och därmed hakade programmet upp sig när det försökte öppna ytterligare en kommunikationskanal som operativsystemet inte tillät. Jag fick alltså skriva om programmet så att det i stället använde en HTTP-anslutning för att ladda upp bilden. Detta hade förstås i slutändan ingen inverkan på programmets funktionalitet eftersom det ju faktiskt var en slags HTTP-förfrågan som skulle göras, men det tog ett bra tag innan jag hittade var felet låg och kunde rätta till det.

7.2. Servern

Att implementera ett PHP-skript som tar emot en uppladdad bild och placerar den i en mapp på servern var nog den enklaste delen av projektet, mycket förstås tack vare att jag sedan tidigare hållit på en hel del med PHP. Skriptet arbetar mot en MySQL-databas och ser till att inga ”gamla” bilder blir liggande på servern. Möjligen kan identitetskontrollen förbättras ytterligare en del för att säkerställa att inga obehöriga får tillgång till de uppladdade bilderna.

7.3. Problem

Ett problem jag upplevde under projektets gång var att skärmläsningsprogrammet i mobiltelefonen tycktes göra att Java-applikationerna i bland kraschade sporadiskt utan någon rimlig förklaring. Detta gällde speciellt äldre telefoner som t.ex. min Nokia 6600. Det är förstås svårt att veta i fall detta berodde på telefonens Java- motor, minnesbrist eller Mobile Speak, men det verkade troligt att det hellre var Mobile Speak som tog upp för mycket av telefonens resurser. Alternativt kan det ha varit så att tillverkaren helt enkelt inte hade testat Mobile Speak tillräckligt ordentligt tillsammans med Java-applikationer. Det har även hänt att en version av skärmläsningsprogrammet har gjort det omöjligt att starta en Java-applikation medan det med föregående och efterföljande versioner inte varit några problem. Med en specifik version av Mobile Speak gick det inte heller att skriva in annat än siffror i inmatningsfält. Något som förstås kan bli problematiskt för brukaren är att veta hur han/hon ska rikta kameran för att få med det objekt som är intressant. Det har dock visat sig när vi provkört tjänsten med några testpersoner (se längre ner) att de flesta upplevde att det inte var så svårt att lära sig rikta kameran rätt när man väl hade förstått var kameran var placerad på telefonen samt fått en känsla för vad som är ett lämpligt avstånd.

7.4. Utvärdering

Under 2006 valdes en mindre grupp synskadade personer i Norrbottens och Västerbottens län ut för att testa denna prototyp till syntolkningstjänst. Efter testperioden som varade några månader fick deltagarna svara på ett tiotal frågor. Det framkom då bl.a. att man ville att programmet i mobiltelefonen skulle bli enklare att använda, dvs. man ville ha färre knapptryckningar. Man var också eniga om att programvaran måste bli stabilare. Man var dock över lag mycket positivt inställda och såg helt klart användningsområden för denna tjänst som ett komplement till OCR-program [70], färgindikatorer etc. Hela sammanställningen av brukarnas synpunkter finns i Polar Prints slutrapport för fas 1 av bildtolkningsprojektet [71].

8. Slutsatser och diskussion

8.1. Allmänna reflektioner

Eftersom jag själv är blind kunde jag notera att jag då och då hade nytta av denna tjänst. Den är dock inget som jag personligen skulle nyttja varje dag. För mig är det snarare ett komplement att använda i situationer då ordning och reda hemmavid inte räcker till eller när jag är på resande fot. För mig har största nyttan visat sig vara i kylen, t.ex. för att ta reda på bäst före-datum samt kontrollera smak på t.ex. crème fraiche eller yoghurt om jag haft flera likadana burkar med lite olika innehåll. Det kändes vid projektets slut som om J2ME och Jabber Mix Client var rätt väg att gå om man skulle fortsätta att vidareutveckla denna tjänst för Symbian-baserade telefoner. Det fanns dock som tidigare nämnts en del saker som behövde förbättras. Det skulle t.ex. ha varit bra med en förloppsindikator som talade om hur mycket av en bild som hade laddats upp så att man som användare inte behövde oroa sig för att klienten hakat upp sig när processen tog lite längre tid. Det skulle även ha varit bra i fall det gick att skicka röstmeddelanden från mobiltelefonen till tolken. På så sätt skulle brukaren inte behöva skriva in vad det är på bilden som han/hon vill ha beskrivet. Många brukare upplever generellt att det är ganska krävande att skriva längre texter på en mobiltelefon, oavsett om man använder fysiska knappar eller ett skärmtangentbord. En annan sak som också hade varit praktiskt hade varit att från mobilen via Internet kunna skicka rörliga bilder i form av korta videoklipp till tolken. Detta var under projekttiden möjligt med hjälp av J2ME på vissa modeller av Nokia-telefoner men inte på andra [72] och sköts därför på framtiden. Det märkliga var att en del äldre telefonmodeller tycktes stödja denna funktion medan vissa nyare inte gjorde det. Problemet med att rikta kameran rätt skulle man delvis kunnat råda bot på genom att göra det möjligt att ta flera bilder i serie och sedan skicka hela bildserien till tolken. Alternativt kunde man helt enkelt ha startat ett videosamtal mellan tolken och brukaren så att tolken i realtid kunde tala om hur kameran skulle riktas för att få en bra bild.

8.2. Alternativa plattformar

När jag till slut tog mig tid att slutföra denna rapport kunde jag konstatera att det inte längre är möjligt att köpa nytillverkade mobiltelefoner med Symbian som operativsystem. Detta beror på att Nokia för några år sedan beslutade att överge systemet till förmån för

Windows Phone [73]. I dag är det endast de olika modellerna av iPhone [74] samt på senare tid även i viss mån även Android-baserade telefoner [75] från t.ex. Samsung och Sony som kan sägas vara helt tillgängliga för synskadade som behöver kunna använda sin mobil med tal- och/eller punktskriftsstöd. är också på gång med bättre tillgänglighet men har än så länge endast stöd för engelskt tal och ingen punktskrift [76]. Operativsystemet iOS [77] som används i iPhone har inget stöd för J2ME och Android stödjer inte heller den typen av Java- applikationer utan använder en annan variant av Java- programmeringsspråket. Eftersom antalet användare av Symbian-telefoner stadigt minskar skulle en klient för denna tjänst i dag följdaktligen vara till nytta för flest användare i fall man utvecklade den för i första hand iOS och senare även för Android. Fördelen med dessa betydligt modernare operativsystem är att det på ett helt annat sätt är förberett för många av de funktioner som skulle göra tjänsten ännu bättre, t.ex. strömning av och ljud över Internet, röststyrning, bättre hantering av push- notiser, stöd för 4G etc.

8.3. Vidareutveckling

Polar Print blev mycket nöjda med det inledande projektet och vidareutvecklade tjänsten under de följande åren under namnet Bildtolkning för synskadade (www.bildtolken.se) [78] med stöd av Post- och Telestyrelsen (PTS). Dock medverkade jag själv inte i projektet under dess fortsättning då jag vid det laget hade börjat arbeta för en konkurrent inom hjälpmedelsbranschen. Tjänsten öppnades ganska snart upp för alla intresserade brukare och frivilliga bildtolkar. Bland annat lade man till funktioner för att skicka ljudmeddelanden, koppla upp videosamtal samt möjligheten att skicka flera bilder samtidigt. Klienten finns dock fortfarande i skrivandes stund (april 2016) endast i en version för de föråldrade Symbian- telefonerna (J2ME).

8.4. Projektets genomförande

Jag kände stundtals under projektets gång att det var en aning opraktiskt att sitta och jobba i Skellefteå medan uppdragsgivaren satt i Umeå/Luleå. Jag saknade framför allt att när som helst spontant kunna bolla idéer och funderingar med min uppdragsgivare, t.ex. under lunch- eller fikarasterna. Nu blev det i stället så att jag samlade ihop saker att ta upp och sedan talade med min uppdragsgivare per telefon någon gång i

veckan samt mailade vissa frågor vartefter. Sedan hade vi förstås även ett par live-möten inom projektgruppen. Till en början använde jag min egen något ålderstigna Nokia 6600 från 2004 för att testa klienten. Den var dock redan då förhållandevis långsam och hade framför allt inte stöd för 3G utan endast GPRS vilket gjorde att Internet-trafiken flöt ganska trögt. Senare under projektets gång fick jag dock låna en nyare med 3G-stöd av uppdragsgivaren vilket gjorde att arbetet flöt på lite bättre. Framför allt märktes stor skillnad vid sändning av bilder till servern. En intressant sak som förbryllade oss under en tid var hur det kunde komma sig att min gamla Nokia 6600 klarade av att öppna två TCP-anslutningar till olika servrar – en till Jabber-servern och en till HTTP- servern – medan den betydligt nyare Nokia N70 hakade upp sig då man försökte sig på detta (se 7.1). Det visade sig att implementationen av J2ME på den äldre telefonen medgav fler än en TCP-anslutning åt gången medan den nyare versionen på Nokia N70 inte gjorde det. Denna skillnad hittade jag inte dokumenterad någonstans. När jag till slut med hjälp av trial-and-error hade identifierat problemet var det relativt enkelt att byta ut den ena anslutningstypen till en HTTP-anslutning i stället och på så sätt var problemet löst. Jabber-servern OpenFire som vi testade mot i projektet installerade min handledare på en server som Polar Print sedan förut hyrde hos ett webbhotell. Detta fungerade utmärkt hela tiden utan avbrott. PNG-bilderna från mobiltelefonerna laddade vi upp till en Apache- server med PHP-stöd som fanns installerad på samma fysiska server som OpenFire. Detta projekt var mycket intressant att arbeta med, speciellt som jag själv tillhör målgruppen för tjänsten. Avslutningsvis så vill jag nämna att jag lärde mig mycket om hur projekt bedrivs inom företag. Detta har jag definitivt haft stor nytta av senare i arbetslivet.

Appendix A: Mobiltelefoner som stöds av skärmläsningsprogrammen Mobile Speak och Talks

Nedan hittar du en sammanställning som gjordes under projektperioden och som visar alla mobiltelefoner som då stöddes av ett av eller båda de skärmläsningsprogram för Symbian OS som finns på marknaden. För varje telefonmodell finns angivet såväl operativsystemsversion och plattform som information rörande Java- stödet. Tre äldre modeller från Nokia, nämligen 9210, 9210i och 9290, stödjer inte J2ME. Dessa telefoner stödjer en föregångare som kallas PersonalJava [79] med utökningen JavaPhone API som baseras på JDK 1.1. Detta var Suns första försök att skapa en Java-miljö för mobila enheter och samma begränsade funktionalitet finns numera i J2ME som en delkomponent vid namn Personal Profile API.

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Ja Belle S60 1.1 2.1 Ja [80, 81] Ja Belle FP1 S60 1.1 2.1 Ja [82, 83] Ja Belle FP1 S60 1.1 2.1 Ja [84, 85] Ja Belle FP1 S60 1.1 2.1 Ja [86, 87] Nokia 808 Ja Belle S60 1.1 2.1 Ja PureView [88, 89] Nokia 3230 Ja Ja 7.0s S60 2nd 1.0 2.0 Ja [90] Ed. FP1 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [91] Ed. Nokia 3600 Ja Ja 6.1 S60 1.0 1.0 1.0 Ja [92] / 3650 [93] Nokia 3620 Ja Ja 6.1 S60 1.0 1.0 1.0 Ja [94] / 3660 [95] Nokia 5228 Ja 9.4 S60 5th 1.1 2.1 Ja [96, 97] Ed. Ja 9.4 S60 5th 1.1 2.1 Ja

[98, 99] Ed.

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Ja 9.4 S60 5th 1.1 2.1 Ja [100, 101] Ed. Nokia 5320 Ja 9.3 S60 3rd 1.1 2.0 Ja XpressMusic Ed. FP2 [102, 103] Nokia 5500 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja Sport [104] Ed. Nokia 5530 Ja 9.4 S60 5th 1.1 2.1 Ja XpressMusic Ed. [105, 106] Nokia 5630 Ja 9.3 S60 3rd 1.1 2.1 Ja XpressMusic Ed. FP2 [107, 108] Nokia 5700 Ja Ja 9.2 S60 3rd 1.1 2.0 Ja Xpress Music Ed. FP1 [109] Nokia 5730 Ja 9.3 S60 3rd 1.1 2.1 Ja XpressMusic Ed. FP2 [110, 111] Nokia 5800 Ja 9.4 S60 5th 1.1 2.0 Ja XpressMusic Ed. [112, 113] Nokia 6110 Ja Ja 9.2 S60 3rd 1.1 2.0 Ja Navigator Ed. FP1 [114] Nokia 6120 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja Classic [115] Ed. FP1 / 6121 Classic [116] / Nokia 6124 Classic [117, 118] Nokia 6210 Ja 9.3 S60 3rd 1.1 2.1 Ja Navigator Ed. FP2 [119, 120] Nokia 6220 Ja 9.3 S60 3rd 1.1 2.0 Ja Classic [121, Ed. FP2 122]

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Nokia 6260 Ja Ja 7.0s S60 2nd 1.0 2.0 Ja [123] Ed. FP1 Nokia 6290 Ja Ja 9.2 S60 3rd 1.1 2.0 Ja [124] Ed. FP1 Nokia 6600 Ja Ja 7.0s S60 2.0 1.0 2.0 Ja [125] Nokia 6620 Ja Ja 7.0s S60 2nd 1.0 2.0 Ja [126] Ed. FP1 Nokia 6630 Ja Ja 8.0a S60 2nd 1.1 2.0 Ja [127] Ed. FP2 Nokia 6650 Ja 9.3 S60 3rd 1.1 2.1 Ja Fold [128, Ed. FP2 129] Nokia 6670 Ja Ja 7.0s S60 2nd 1.0 2.0 Ja [130] Ed. FP1 Nokia 6680 Ja Ja 8.0a S60 2nd 1.1 2.0 Ja [131] Ed. FP2 Nokia 6681 Ja Ja 8.0a S60 2nd 1.1 2.0 Ja [132] Ed. FP2 Nokia 6682 Ja Ja 8.0a S60 2nd 1.1 2.0 Ja [133] Ed. FP2 Nokia 6700 Ja 9.3 S60 3rd 1.1 2.1 Ja Slide [134, Ed. FP2 135] Nokia 6710 Ja 9.3 S60 3rd 1.1 2.1 Ja Navigator Ed. FP2 [136, 137] Nokia 6720 Ja 9.3 S60 3rd 1.1 2.0 Ja Classic [138, Ed. FP2 139] Nokia 6730 Ja 9.3 S60 3rd 1.1 2.0 Ja [140, 141] Ed. FP2

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Nokia 6790 Ja 9.3 S60 3rd 1.1 2.1 Ja Surge [142, Ed. FP2 143] Nokia 7610 Ja Ja 7.0s S60 2nd 1.0 2.0 Ja [144] Ed. FP1 Nokia 7650 Nej Ja 6.1 S60 1.0 1.0 1.0 Nej [145] Nokia C5 Ja 9.3 S60 3rd 1.1 2.1 Ja [146, 147] / Ed. FP2 Nokia C5 5MP [148, 149] Nokia C6 Ja 9.4 S60 5th 1.1 2.1 Ja [150, 151] Ed. Nokia C7 Ja Belle 1.1 2.1 Ja [152, 153] Nokia E5 Ja 9.3 S60 3rd 1.1 2.0 Ja [154, 155] Ed. FP2 Ja Belle 1.1 2.1 Ja [156, 157] Nokia E7 Ja Belle 1.1 2.1 Ja [158, 159] Nokia E50 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [160] Ed. Nokia E51 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja [161] Ed. FP1 Nokia E52 Ja 9.3 S60 3rd 1.1 2.0 Ja [162, 163] Ed. FP2 Nokia E55 Ja 9.3 S60 3rd 1.1 2.1 Ja [164, 165] Ed. FP2 Nokia E60 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [166] Ed. Nokia E61 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [167] / E61i Ed. [168] Nokia E62 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [169] Ed. Nokia E63 Ja 9.2 S60 3rd 1.1 2.0 Ja [170, 171] Ed. FP1

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Nokia E65 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [172] Ed. Nokia E66 Ja 9.2 S60 3rd 1.1 2.0 Ja [173, 174] Ed. FP1 Nokia E70 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [175] Ed. Ja 9.2 S60 3rd 1.1 2.0 Ja [176, 177] Ed. FP1 Ja 9.3 S60 3rd 1.1 2.1 Ja [178, 179] Ed. FP2 Nokia E73 Ja 9.3 S60 3rd 1.1 2.1 Ja Mode [180, Ed. FP2 181] Nokia E75 Ja 9.3 S60 3rd 1.1 2.1 Ja [182, 183] Ed. FP2 Nokia E90 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja Communicator Ed. FP1 [184] Ja Belle Refresh 1.1 2.1 Ja [185, 186] Nokia N70 Ja Ja 8.1a S60 2nd 1.1 2.0 Ja [187] Ed. FP3 Nokia N71 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [188] Ed. Nokia N72 Ja Ja 8.1a S60 2nd 1.1 2.0 Ja [189] Ed. FP3 Nokia N73 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [190] Ed. Nokia N75 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [191] Ed. Nokia N76 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja [192] Ed. FP1 Nokia N77 Ja Nej 9.1 S60 3rd 1.1 2.0 Ja [193] Ed. Nokia N78 Ja 9.3 S60 3rd 1.1 2.1 Ja [194, 195] Ed. FP2 Ja 9.3 S60 3rd 1.1 2.0 Ja [196, 197] Ed. FP2

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Nokia N80 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [198] Ed. Nokia N81 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja [199] Ed. FP1 Nokia N82 Ja Nej 9.2 S60 3rd 1.1 2.0 Ja [200] Ed. FP1 Nokia N85 Ja 9.3 S60 3rd 1.1 2.0 Ja [201, 202] Ed. FP2 Nokia N86 Ja 9.3 S60 3rd 1.1 2.1 Ja [203, 204] Ed. FP2 Nokia N90 Ja Ja 8.1a S60 2nd 1.1 2.0 Ja [205] Ed. FP3 Nokia N91 Ja Ja 9.1 S60 3rd 1.1 2.0 Ja [206] Ed. Nokia N92 Ja Nej 9.1 S60 3rd 1.1 2.0 Ja [207] Ed. Nokia N93 Ja Nej 9.1 S60 3rd 1.1 2.0 Ja [208] / N93i Ed. [209] Nokia N95 Ja Ja 9.2 S60 3rd 1.1 2.0 Ja [210] / N95 Ed. FP1 8GB [211] Ja 9.3 S60 3rd 1.1 2.1 Ja [212, 213] Ed. FP2 Ja 9.4 S60 5th 1.1 2.0 Ja [214, 215] / Ed. Nokia N97 Mini [216, 217] Nokia N-Gage Ja Ja 6.1 S60 1.0 1.0 1.0 Ja [218] / N- Gage QD [219] Nokia X6 Ja 9.4 S60 5th 1.1 2.1 Ja [220, 221] Ed. Nokia X7 Ja Belle 1.1 2.1 Ja [222, 223]

Telefonmodell Mobile Talks Symbian- Plattform CLDC- MIDP- Mobile Speak version version version Media API Samsung Ja 9.2 S60 3rd 1.1 2.0 Ja SGH-G810 Ed. [224, 225] Samsung Ja 9.2 S60 3rd 1.1 2.0 Ja SGH-i450 Ed. FP1 [226, 227] Samsung Ja 9.2 S60 3rd 1.1 2.0 Ja SGH-i550 Ed. FP1 [228, 229] Samsung GT- Ja 9.3 S60 3rd 1.1 2.0 Ja i7110 [230, Ed. FP2 231] Samsung GT- Ja 9.3 S60 3rd 1.1 2.1 Ja i8510 INNOV8 Ed. FP2 [232, 233] Samsung Ja 9.3 S60 3rd 1.1 2.1 Ja L870 [234, Ed. FP2 235] Samsung Ja Ja 7.0s S60 2nd 1.0.4 2.0 Ja SGH-D720 Ed. [236] Samsung Nej Ja 7.0s S60 2nd 1.0 2.0 Ja SGH-D730 Ed. 2.1 [237, 238] Siemens SX1 Ja Ja 6.1 S60 1.0 1.0 1.0 Ja [239] Panasonic Ja Nej 7.0s S60 1.0 2.0 Ja X700 [240] Nokia 9210 Nej Ja 6.0 Series - - - [241] / 9210i 80 1.0 [242] Nokia 9290 Nej Ja 6.0 Series - - - [243] 80 1.0 Nokia 9300 Nej Ja 7.0s Series 1.1 2.0 Ja [244] 80 2nd Ed. Nokia 9500 Nej Ja 7.0s Series 1.1 2.0 Ja [245] 80 2.0

Appendix B: Exempel på enkelt C++-program för Symbian S60 2nd Edition

Nedan följer ett typiskt “Hello World”-exempel skrivet i C++ för Symbian S60 2nd Edition. Observera att endast de 6 viktigaste filerna har tagits med i denna rapport, dvs. 5 källkodsfiler (.cpp) samt en resursfil (.rss). Bl.a. har en del header-filer exkluderats tillsammans med ett par andra filer som behövs vid kompilering. Lägg också märke till att alla kommentarer har tagits bort av utrymmesskäl.

MittProgram.cpp #include "MittProgramApplication.h" GLDEF_C TInt E32Dll(TdllReason { return KErrNone; } EXPORT_C CApaApplication* NewApplication() { return (static_cast(new CMittProgramApplication)); }

MittProgramApplication.cpp #include "MittProgramDocument.h" #include "MittProgramApplication.h" const TUid KUidMittProgramApp = {0x10005B91}; CApaDocument* CMittProgramApplication::CreateDocumentL() { return (static_cast (CMittProgramDocument::NewL(*this))); } TUid CMittProgramApplication::AppDllUid() const { return KUidMittProgramApp; }

MittProgramAppUi.cpp #include #include #include "MittProgram.pan" #include "MittProgramAppUi.h" #include "MittProgramAppView.h" #include "MittProgram.hrh" void CMittProgramAppUi::ConstructL() {

BaseConstructL(EAknEnableSkin); iAppView = CMittProgramAppView::NewL(ClientRect()); AddToStackL(iAppView); } CMittProgramAppUi::CMittProgramAppUi() { } CMittProgramAppUi::~CMittProgramAppUi() { if (iAppView) { iEikonEnv->RemoveFromStack(iAppView); delete iAppView; iAppView = NULL; } } void CMittProgramAppUi::HandleCommandL(TInt aCommand) { switch(aCommand) { case EEikCmdExit: case EAknSoftkeyExit: Exit(); break; case EMittProgramCommand1: { _LIT(message, "Hej Världen!"); CAknInformationNote* informationNote = new (ELeave) CAknInformationNote; informationNote->ExecuteLD(message); } break; default: Panic(EMittProgramUi); break; } }

MittProgramAppView.cpp #include #include "MittProgramAppView.h" CMittProgramAppView* CMittProgramAppView::NewL(const TRect& aRect) { CMittProgramAppView* self = CMittProgramAppView::NewLC(aRect);

CleanupStack::Pop(self); return self; } CMittProgramAppView* CMittProgramAppView::NewLC(const TRect& aRect) { CMittProgramAppView* self = new (ELeave) CMittProgramAppView; CleanupStack::PushL(self); self->ConstructL(aRect); return self; } CMittProgramAppView::CMittProgramAppView() { } CMittProgramAppView::~CMittProgramAppView() { } void CMittProgramAppView::ConstructL(const TRect& aRect) { CreateWindowL(); SetRect(aRect); ActivateL(); } void CMittProgramAppView::Draw(const TRect&) const { CWindowGc& gc = SystemGc(); TRect rect = Rect(); gc.Clear(rect); }

MittProgramDocument.cpp #include "MittProgramAppUi.h" #include "MittProgramDocument.h" CMittProgramDocument* CMittProgramDocument::NewL(CEikApplication& aApp) { CMittProgramDocument* self = NewLC(aApp); CleanupStack::Pop(self); return self; } CMittProgramDocument* CMittProgramDocument::NewLC(CEikApplication& aApp) {

CMittProgramDocument* self = new (ELeave) CMittProgramDocument(aApp); CleanupStack::PushL(self); self->ConstructL(); return self; } void CMittProgramDocument::ConstructL() { } CMittProgramDocument::CMittProgramDocument(CEikApplication& aApp) : CAknDocument(aApp) { } CMittProgramDocument::~CMittProgramDocument() { } CEikAppUi* CMittProgramDocument::CreateAppUiL() { return (static_cast (new (ELeave) CMitt ProgramAppUi)); }

MittProgram.rss NAME HELL #include #include #include #include "MittProgram.hrh" RESOURCE RSS_SIGNATURE { } RESOURCE TBUF r_default_document_name { buf=""; } RESOURCE EIK_APP_INFO { menubar = r_MittProgram_menubar; cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; } RESOURCE MENU_BAR r_MittProgram_menubar { titles =

{ MENU_TITLE { menu_pane = r_MittProgram_menu; } }; } RESOURCE MENU_PANE r_MittProgram_menu { items = { MENU_ITEM { command = EMittProgramCommand1; txt = "Hej"; }, MENU_ITEM { command = EAknSoftkeyExit; txt = "Avsluta"; } }; }

Appendix C: Exempel på enkelt J2ME-program

Här nedan följer ett exempel på ett J2ME-program som ser ut och uppför sig ungefär likadant som programexemplet för C++ för Symbian S60 2nd Edition som återfinns i appendix B. Eftersom J2ME- applikationer presenteras lite olika på skärmen beroende på vilken enhet som de körs på så kan utseendet variera en aning. import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class MittProgram extends MIDlet implements CommandListener { private Display display; private Form frm; private Command cmdHello, cmdExit; public MittProgram() { } public void startApp() { frm = new Form("MittProgram"); cmdHello = new Command("Hej", Command.OK, 1); frm.addCommand(cmdHello); cmdExit = new Command("Avsluta", Command.EXIT, 1); frm.addCommand(cmdExit); frm.setCommandListener(this); display = Display.getDisplay(this); display.setCurrent(frm); } public void pauseApp() { } public void destroyApp(boolean u) { } public void commandAction(Command c, Displayable d) { if(c == cmdHello) { display.setCurrent(new Alert("", "Hej Världen!", null, AlertType.INFO), frm); } if(c == cmdExit)

{ destroyApp(true); notifyDestroyed(); } } }

Appendix D: Kompilering av J2ME-applikationer från kommandoraden

Som blind eller gravt synskadad programmerare är det omöjligt att använda det verktyg, kToolbar, som följer med Sun Wireless Toolkit och som är tänkt att användas till att hantera och kompilera J2ME-projekt. Jag blev därför tvungen att hitta en annan lösning. Jag fann den i manualen för J2ME Wireless Toolkit [246]. Här nedan beskriver jag hur man går till väga för att kompilera och paketera J2ME-program från kommandoprompten i Windows.

Gör så här: Börja med att skapa en mapp för ditt projekt, t.ex. ”C:\MittProjekt”. I denna mapp skapar du sedan undermapparna ”src”, ”classes”, ”tmpclasses” och ”res”. Källfilerna placerar du sedan i ”src”- mappen. Använd filändelsen ”.java”, t.ex. ”Test.java”. I mappen ”res” placerar du ev. resursfiler, t.ex. WAV-filer och bilder. Om du inte tänker använda några filer utöver själva programfilerna behöver du inte skapa mappen ”res”. Nu är det dags att starta Kommandoprompten. Den hittar du antingen under Start-menyn > Program > Tillbehör eller så kan du gå till Kör och skriva ”cmd”. Navigera sedan till projektmappen. För att kompilera källkoden måste du förutom sökvägarna till källfilerna även ange sökvägarna till de funktionsbibliotek som ditt program använder sig av, t.ex. MIDP 2.0, CLDC 1.0 och MMAPI. Syntaxen ser ut som följer här nedan.

Syntax: javac -d -bootclasspath ;

Exempel: C:\Documents and Settings\Ägaren>cd \MittProgram C:\MittProgram>javac -d tmpclasses -bootclasspath c:\wtk\lib\cldcapi10.jar;c:\wtk\lib\midpapi20.jar;c:\wtk\lib\mmapi.jar src\Test.java

I exemplet ovan använder vi alltså funktionsbiblioteken för MIDP 2.0, CLDC 1.0 och MMAPI. Lägg märke till att hela sökvägen måste anges för varje funktionsbibliotek. Det kan därför vara en god idé att vara konsekvent och alltid installera Wireless Toolkit i samma mapp. Normalt föreslår installationsprogrammet mappnamnet ”WTK” följt av ett par

siffror som anger versionsnumret. Jag brukar ta bort siffrorna så att mappen alltid heter ”WTK”. De kompilerade klasserna hamnar i mappen ”tmpclasses”. Vi är dock inte helt färdiga med dem ännu. Vi måste även köra kommandot ”preverify” på varje klass för att förbereda dem för körning på en J2ME- kompatibel enhet, dvs. mobiltelefon. Navigera först till mappen ”tmpclasses” och följ sedan nedanstående syntax.

Syntax: preverify -d -classpath ;

Exempel: C:\MittProgram>cd tmpclasses C:\MittProgram\tmpclasses>preverify -d ..\classes -classpath c:\wtk\lib\cldcapi10.jar;c:\wtk\lib\midpapi20.jar;c:\wtk\lib\mmapi.jar Test

Observera att du inte ska ange filändelsen ”.class” när du anger namn på klassfiler. Du kan nu radera de temporära klassfilerna.

Exempel: C:\MittProgram\tmpclasses>del *.class

Innan vi skapar installationsfilen för detta program måste vi skapa en fil med metadata som beskriver programmet. Denna fil används av målenheten för att avgöra i fall programmet går att köra på just den aktuella konfigurationen och i förlängningen huruvida det får installeras. Följ nedanstående mall för att åstadkomma en grundläggande metafil.

Mall för metafil: MIDlet-1: , , MIDlet-Name: MIDlet-Vendor: MIDlet-Version: MicroEdition-Configuration: CLDC- MicroEdition-Profile: MIDP-

Exempel på metafile (MittProgram.mf): MIDlet-1: Testprogram, , Test MIDlet-Name: Mitt Program MIDlet-Vendor: David Renström MIDlet-Version: 1.0

MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0

Lägg märke till att jag i exemplet inte angav någon bildfil som ska användas som ikon för Test. Detta är alltså inte nödvändigt. Observera också att du inte heller här ska ange ”.class” när du anger namnet på en klassfil. Nu är det dags att paketera alla programfilerna i ett installationspaket, en s.k. JAR-fil. Följ syntaxen nedan.

Syntax: jar cfm -C .

Exempel: C:\MittProgram\tmpclasses>cd .. C:\MittProgram>jar cfm MittProgram.jar MittProgram.mf -C classes . res

OBS! Om du får problem med att målenheten inte vill acceptera installationspaketet kan du prova att lägga till en eller ett par blanka rader i slutet av metafilen. En del enheter, t.ex. mobiltelefoner från Nokia, verkar vilja ha det så av någon anledning.

Nu är det bara att överföra installationsfilen till målenheten med hjälp av Bluetooth, USB, Internet eller någon annan metod. Jag rekommenderar att du skapar en batch-fil (.bat) för att utföra kompileringen och paketeringen av programmen. Nedan följer ett exempel på en batch-fil.

Exempel på batch-fil (build.bat): @echo off javac -d tmpclasses –bootclasspath c:\wtk\lib\cldcapi10.jar;c:\wtk\lib\midpapi20.jar;c:\wtk\lib\mmapi.jar src\Test.java ; Avsluta exekveringen av batch-filen i fall något fel uppstod under ; kompileringen if errorlevel 1 goto Quit cd tmpclasses preverify -d ..\classes –classpath c:\wtk\lib\cldcapi10.jar;c:\wtk\lib\midpapi20.jar;c:\wtk\lib\mmapi.jar Test del *.class cd .. jar cfm MittProgram.jar MittProgram.mf -C classes . res

:Quit

Appendix E: Referenser

1. Wikipedia: Handdator http://sv.wikipedia.org/wiki/Handdator (besökt 2006-05-01) 2. Polar Print Försäljning AB http://www.polarprint.se (besökt 2006-05-01) 3. Hjälpmedelsinstitutet http://www.hi.se (besökt 2006-05-01) 4. Wikipedia: Multimedia Messaging Service http://sv.wikipedia.org/wiki/Multimedia_Messaging_Service (besökt 2006-03-10) 5. Wikipedia: Talsyntes http://sv.wikipedia.org/wiki/Talsyntes (besökt 2006-03-10) 6. Wikipedia: Smartphone http://sv.wikipedia.org/wiki/Smartphone (besökt 2006-03-10) 7. Funka Nu: Skärmläsare http://www.funkanu.se/start.asp?sida=977 (besökt 2006-03-10) 8. Code Factory, S.L.: Mobile Speak http://www.codefactory.es/mobile_speak/mspeak.htm (besökt 2006-03-10) 9. Code Factory, S.L.: Mobile Speak Smartphone http://www.codefactory.es/en/products.asp?id=36 (besökt 2006-03-10) 10. Code Factory, S.L.: Mobile Speak POCKET http://www.codefactory.es/mobile_speak_pocket/mspeak_pocket.htm (besökt 2006-03-10) 11. Nuance Communications: TALKS http://www.nuance.com/talks/ (besökt 2006-03-10) 12. Dolphin Computer Access Ltd.: Smart Hal http://www.yourdolphin.com/productdetail.asp?id=26 (besökt 2006-03-10) 13. Dolphin Computer Access Ltd.: Pocket Hal http://www.yourdolphin.com/productdetail.asp?id=7 (besökt 2006-03-10) 14. Funka Nu: Punktskriftsdisplay http://www.funkanu.se/start.asp?sida=980 (besökt 2006-03-10)

15. Wikipedia: Bluetooth http://sv.wikipedia.org/wiki/Bluetooth (besökt 2006-03-10) 16. Polar Print: ALVA MPO http://www.polarprint.se/produkt?ID=815 (besökt 2006-03-10) 17. BAUM Retec AG: Pronto18 http://www.baum.de/en/products/organizer/index.php (besökt 2006-03-10) 18. Wikipedia: GPRS http://sv.wikipedia.org/wiki/GPRS (besökt 2006-03-10) 19. Wikipedia: Enhanced Data Rates for GSM Evolution http://sv.wikipedia.org/wiki/Enhanced_Data_Rates_for_GSM_ Evolution (besökt 2010-12-13) 20. Wikipedia: 3G http://sv.wikipedia.org/wiki/3G (besökt 2006-03-10) 21. Jabber.org: Open Instant Messaging and a Whole Lot More, Powered by XMPP http://www.jabber.org (besökt 2006-03-10) 22. XML.com: XML From the Inside Out http://www.xml.com (besökt 2006-03-10) 23. Wikipedia: Snabbmeddelanden http://sv.wikipedia.org/wiki/Instant_messaging (besökt 2006-03-10) 24. ICQ LLC: ICQ http://www.icq.com (besökt 2006-03-10) 25. Microsoft Corporation: Windows Live Messenger http://get.live.com/messenger/overview (besökt 2006-03-10) 26. Jabber.org: Finding Gateways http://www.jabber.org/user/userguide/ar01s12.html (besökt 2006-03-10) 27. XMPP Standards Foundation: XMPP Extensions http://www.xmpp.org/extensions/ (besökt 2006-03-15) 28. XMPP Standards Foundation: XEP-0033: Extended Stanza Addressing http://www.xmpp.org/extensions/xep-0033.html (besökt 2006-03-15)

29. XMPP Standards Foundation: XMPP Council http://www.xmpp.org/council/ (besökt 2006-03-15) 30. Mail.jabber.org Mailing Lists http://mail.jabber.org/mailman/listinfo/standards-jig/ (besökt 2006-03-15) 31. Ignite Realtime: Openfire Server http://www.igniterealtime.org/projects/openfire/index.jsp (besökt 2006-03-15) 32. Jive : Broadcast Plugin http://www.jivesoftware.org/wildfire/plugins/broadcast/readme.html (besökt 2006-03-15) 33. XMPP Standards Foundation: XEP-0066: Out of Band Data http://www.xmpp.org/extensions/xep-0066.html (besökt 2006-03-16) 34. Internet Engineering Task Force: RFC 3986: Uniform Resource Identifiers (URI): Generic Syntax http://www.ietf.org/rfc/rfc3986.txt (besökt 2006-03-16) 35. Wikipedia: Brandvägg http://sv.wikipedia.org/wiki/Brandv%C3%A4gg (besökt 2006-03-16) 36. XMPP Standards Foundation: XEP-0096: File Transfer http://www.xmpp.org/extensions/xep-0096.html (besökt 2006-03-16) 37. XMPP Standards Foundation: XEP-0095: Stream Initiation http://www.xmpp.org/extensions/xep-0095.html (besökt 2006-03-16) 38. XMPP Standards Foundation: XEP-0065: SOCKS5 Bytestreams http://www.xmpp.org/extensions/xep-0065.html (besökt 2006-03-16) 39. XMPP Standards Foundation: XEP-0047: In-Band Bytestreams (IBB) http://www.xmpp.org/extensions/xep-0047.html (besökt 2006-03-16) 40. Internet Engineering Task Force: RFC 3548: The Base16, Base32, and Base64 Data Encodings http://www.ietf.org/rfc/rfc3548.txt (besökt 2006-03-16) 41. Internet Engineering Task Force: RFC 1928: SOCKS Protocol Version 5 http://www.ietf.org/rfc/rfc1928.txt (besökt 2006-03-16) 42. Wikipedia: Proxy http://sv.wikipedia.org/wiki/Proxy-server (besökt 2006-03-16)

43. XMPP Standards Foundation: XEP-0129: WebDAV File Transfers http://www.xmpp.org/extensions/xep-0129.html (besökt 2006-03-18) 44. Internet Engineering Task Force: RFC 2518: HTTP Extensions for Distributed Authoring -- WEBDAV http://www.ietf.org/rfc/rfc2518.txt (besökt 2006-03-18) 45. Internet Engineering Task Force: RFC 2616: Hypertext Transport Protocol -- HTTP/1.1 http://www.ietf.org/rfc/rfc2616.txt (besökt 2006-03-18) 46. PHP: Hypertext Preprocessor http://www.php.net (besökt 2006-03-18) 47. MySQL AB http://www.mysql.com (besökt 2006-03-18) 48. Microsoft Corporation: Windows Mobile: Smartphone and PDA Software http://www.microsoft.com/windowsmobile/default.mspx (besökt 2006-04-01) 49. Symbian OS http://www.symbian.com (besökt 2006-04-01) 50. Wikipedia: Embedded Linux http://en.wikipedia.org/wiki/Embedded_Linux#Development (besökt 2006-04-01) 51. S60 Home http://www.s60.com (besökt 2006-04-01) 52. Wikipedia: Series 80 http://en.wikipedia.org/wiki/Series_80 (besökt 2010-12-13) 53. UIQ Technology http://www.uiq.com (besökt 2006-04-01) 54. Sun Microsystems, Inc.: Java Technology http://java.sun.com (besökt 2006-04-02) 55. Sun Microsystems, Inc.: The Java ME Platform http://java.sun.com/javame/index.jsp (besökt 2006-04-02) 56. Sun Microsystems, Inc.: Java Platform, Standard Edition (Java SE) http://java.sun.com/javase/index.jsp (besökt 2006-04-02)

57. Sun Microsystems, Inc.: The Security and Trust Services API (SATSA) for J2ME: The Security APIs http://developers.sun.com/techtopics/mobility/apis/articles/ satsa2/index.html (besökt 2007-12-29) 58. GeoTrust: SSL Certificate, SSL, Server Certificates, Web Server Certificates http://www.geotrust.com/products/signing_services/code_signi ng_java.asp (besökt 2007-12-29) 59. Sun Microsystems, Inc.: Connected Limited Device Configuration (CLDC) http://java.sun.com/products/cldc/ (besökt 2006-04-02) 60. Sun Microsystems, Inc.: Mobile Information Device Profile (MIDP) http://java.sun.com/products/midp/ (besökt 2006-04-02) 61. Sun Microsystems, Inc.: The J2ME Mobile Media API http://developers.sun.com/techtopics/mobility/midp/articles/m mapioverview/ (besökt 2006-04-02) 62. Mobber http://mobber.gryf.info (besökt 2006-04-05) 63. Bianchi, Gabriele: Jabber Mix Client http://jabbermixclient.sourceforge.net (besökt 2006-04-05) 64. MicroJabber http://micro-jabber.sourceforge.net/ (besökt 2006-04-05) 65. Netscape Communications: SSL 3.0 Specification http://wp.netscape.com/eng/ssl3/ (besökt 2006-04-05) 66. Sun Microsystems, Inc.: Sun Java Wireless Toolkit for CLDC http://java.sun.com/products/sjwtoolkit/ (besökt 2006-04-05) 67. Freedom Scientific, Inc.: JAWS for Windows Headquarters http://www.freedomscientific.com/fs_products/JAWS_HQ.asp (besökt 2006-04-15) 68. Wikipedia: Emulator http://sv.wikipedia.org/wiki/Emulator (besökt 2006-04-15) 69. Wikipedia: Transmission control protocol http://sv.wikipedia.org/wiki/Transmission_control_protocol (besökt 2006-04-15)

70. Wikipedia: Optical character recognition http://sv.wikipedia.org/wiki/OCR (besökt 2007-12-29) 71. Polar Print: Redovisning av Fas 1 av Bildtolkningsprojektet http://www.bildtolken.se/redovisning_polarprint_bildtolkning07 04.pdf (besökt 2010-12-13) 72. Nokia: MIDP: Mobile Media API Support in Nokia Devices http://sw.nokia.com/id/bc00e4ce-7df3-4527-962c- d39843a808d0/MIDP_Mobile_Media_API_Support_In_Nokia_De vices_v1_0_en.pdf (besökt 2010-12-13) 73. PCWorld: The end of Symbian: Nokia ships last handset with the mobile OS http://www.pcworld.com/article/2042071/the-end-of-symbian-nokia-ships- last-handset-with-the-mobile-os.html (besökt 2015-03-28) 74. Apple: iPhone https://www.apple.com/iphone/ (besökt 2015-03-28) 75. Android https://www.android.com/ (besökt 2015-03-28) 76. Windows Phone How-to: Use Narrator on my Windows Phone http://www.windowsphone.com/en-us/how-to/wp8/settings-and- personalization/use-narrator-on-my-phone (besökt 2015-03-28) 77. Wikipedia: iOS http://en.wikipedia.org/wiki/IOS (besökt 2015-03-28) 78. Bildtolkning för synskadade http://www.bildtolken.se/ (besökt 2015-03-28) 79. Symbian Developer Community: Differences between PersonalJava and MIDP Java Environments http://developer.symbian.com/main/downloads/papers/PJAE_MIDP/pjae _midp_2.pdf (besökt 2010-12-13) 80. GSMArena.com: Nokia 500 - Full phone specifications http://www.gsmarena.com/nokia_500-4085.php (besökt 2014-12-22) 81. MobileRated.com: Nokia 500 Specifications http://www.mobilerated.com/nokia-500-specifications.html (besökt 2014-12-22) 82. GSMArena.com: Nokia 603 - Full phone specifications http://www.gsmarena.com/nokia_603-4243.php (besökt 2014-12-22)

83. MobileRated.com: Nokia 603 Specifications http://www.mobilerated.com/nokia-603-specifications.html (besökt 2014-12-22) 84. GSMArena.com: Nokia 700 - Full phone specifications http://www.gsmarena.com/nokia_700-4021.php (besökt 2014-12-22) 85. MobileRated.com: Nokia 700 Specifications http://www.mobilerated.com/nokia-700-specifications.html (besökt 2014-12-22) 86. GSMArena.com: Nokia 701 - Full phone specifications http://www.gsmarena.com/nokia_701-4119.php (besökt 2014-12-22) 87. MobileRated.com: Nokia 701 Specifications http://www.mobilerated.com/nokia-701-specifications.html (besökt 2014-12-22) 88. GSMArena.com: Nokia 808 PureView - Full phone specifications http://www.gsmarena.com/nokia_808_pureview-4577.php (besökt 2014-12-22) 89. MobileRated.com: Nokia 808 PureView Specifications http://www.mobilerated.com/nokia-808-pureview-specifications.html (besökt 2014-12-22) 90. Forum Nokia: Device Details -- Nokia 3230 http://www.forum.nokia.com/devices/3230/ (besökt 2007-12-29) 91. Forum Nokia: Device Details -- Nokia 3250 http://www.forum.nokia.com/devices/3250 (besökt 2007-12-29) 92. Forum Nokia: Device Details -- Nokia 3600 http://www.forum.nokia.com/devices/3600/ (besökt 2007-12-29) 93. Forum Nokia: Device Details -- Nokia 3650 http://www.forum.nokia.com/devices/3650/ (besökt 2007-12-29) 94. Forum Nokia: Device Details -- Nokia 3620 http://www.forum.nokia.com/devices/3620/ (besökt 2007-12-29) 95. Forum Nokia: Device Details -- Nokia 3660 http://www.forum.nokia.com/devices/3660/ (besökt 2007-12-29) 96. PhoneArena.com: Nokia 5228 - Full specs http://www.phonearena.com/phones/Nokia-5228_id4699/fullspecs (besökt 2014-12-22) 97. MobileRated.com: Nokia 5228 Specifications http://www.mobilerated.com/nokia-5228-specifications.html (besökt 2014-12-22)

98. GSMArena.com: Nokia 5230 - Full phone specifications http://www.gsmarena.com/nokia_5230-2909.php (besökt 2014-12-22) 99. MobileRated.com: Nokia 5230 Nuron Specifications http://www.mobilerated.com/nokia-5230-nuron-specifications.html (besökt 2014-12-22) 100. GSMArena.com: Nokia 5250 - Full phone specifications http://www.gsmarena.com/nokia_5250-3477.php (besökt 2014-12-22) 101. MobileRated.com: Nokia 5250 Specifications http://www.mobilerated.com/nokia-5250-specifications.html (besökt 2014-12-22) 102. GSMArena.com: Nokia 5320 XpressMusic - Full phone specifications http://www.gsmarena.com/nokia_5320_xpressmusic-2348.php (besökt 2014-12-22) 103. MobileRated.com: Nokia 5320di Specifications http://www.mobilerated.com/nokia-5320di-xpress-music- specifications.html (besökt 2014-12-22) 104. Forum Nokia: Device Details -- Nokia 5500 http://www.forum.nokia.com/devices/5500 (besökt 2007-12-29) 105. GSMArena.com: Nokia 5530 XpressMusic - Full phone specifications http://www.gsmarena.com/nokia_5530_xpressmusic-2832.php (besökt 2014-12-22) 106. MobileRated.com: Nokia 5530 Specifications http://www.mobilerated.com/nokia-5530-xpressmusic-specifications.html (besökt 2014-12-22) 107. GSMArena.com: Nokia 5630 XpressMusic - Full phone specifications http://www.gsmarena.com/nokia_5630_xpressmusic-2670.php (besökt 2014-12-22) 108. MobileRated.com: Nokia 5630 XpressMusic Specifications http://www.mobilerated.com/nokia-5630d-specifications.html (besökt 2014-12-22) 109. Forum Nokia: Device Details -- Nokia 5700 XpressMusic http://www.forum.nokia.com/devices/5700 (besökt 2007-12-29) 110. GSMArena.com: Nokia 5730 XpressMusic - Full phone specifications http://www.gsmarena.com/nokia_5730_xpressmusic-2743.php (besökt 2014-12-22) 111. MobileRated.com: Nokia 5730 XpressMusic Specifications http://www.mobilerated.com/nokia-5730-xpressmusic-specifications.html (besökt 2014-12-22) 112. GSMArena.com: Nokia 5800 XpressMusic - Full phone specifications http://www.gsmarena.com/nokia_5800_xpressmusic-2537.php (besökt 2014-12-22)

113. MobileRated.com: Nokia 5800 XpressMusic Specifications http://www.mobilerated.com/nokia-5800-xpressmusic-specifications.html (besökt 2014-12-22) 114. Forum Nokia: Device Details -- http://www.forum.nokia.com/devices/6110_Navigator (besökt 2007-12-29) 115. Forum Nokia: Device Details -- Nokia 6120 Classic http://www.forum.nokia.com/devices/6120_Classic (besökt 2007-12-29) 116. Forum Nokia: Device Details -- Nokia 6121 classic http://www.forum.nokia.com/devices/6121_classic (besökt 2007-12-29) 117. GSMArena.com: Nokia 6124 Classic - Full phone specifications http://www.gsmarena.com/nokia_6124_classic-2312.php (besökt 2014-12-22) 118. MobileRated.com: Nokia 6124 Classic Specifications http://www.mobilerated.com/nokia-6124-classic-specifications.html (besökt 2014-12-22) 119. GSMArena.com: - Full phone specifications http://www.gsmarena.com/nokia_6210_navigator-2255.php (besökt 2014-12-22) 120. MobileRated.com: Nokia 6210 Navigator Specifications http://www.mobilerated.com/nokia-6210-navigator-specifications.html (besökt 2014-12-22) 121. GSMArena.com: Nokia 6220 Classic - Full phone specifications http://www.gsmarena.com/nokia_6220_classic-2256.php (besökt 2014-12-22) 122. MobileRated.com: Nokia 6220 Classic Specifications http://www.mobilerated.com/nokia-6220-classic-specifications.html (besökt 2014-12-22) 123. Forum Nokia: Device Details -- Nokia 6260 http://www.forum.nokia.com/devices/6260/ (besökt 2007-12-29) 124. Forum Nokia: Device Details -- Nokia 6290 http://www.forum.nokia.com/devices/6290 (besökt 2007-12-29) 125. Forum Nokia: Device Details -- Nokia 6600 http://www.forum.nokia.com/devices/6600/ (besökt 2007-12-29) 126. Forum Nokia: Device Details -- Nokia 6620 http://www.forum.nokia.com/devices/6620/ (besökt 2007-12-29) 127. Forum Nokia: Device Details -- Nokia 6630 http://www.forum.nokia.com/devices/6630/ (besökt 2007-12-29)

128. GSMArena.com: Nokia 6650 Fold - Full phone specifications http://www.gsmarena.com/nokia_6650_fold-2311.php (besökt 2014-12-22) 129. MobileRated.com: Nokia 6650d Specifications http://www.mobilerated.com/nokia-6650d-specifications.html (besökt 2014-12-22) 130. Forum Nokia: Device Details -- Nokia 6670 http://www.forum.nokia.com/devices/6670/ (besökt 2007-12-29) 131. Forum Nokia: Device Details -- Nokia 6680 http://www.forum.nokia.com/devices/6680/ (besökt 2007-12-29) 132. Forum Nokia: Device Details -- Nokia 6681 http://www.forum.nokia.com/devices/6681/ (besökt 2007-12-29) 133. Forum Nokia: Device Details -- Nokia 6682 http://www.forum.nokia.com/devices/6682/ (besökt 2007-12-29) 134. GSMArena.com: Nokia 6700 Slide - Full phone specifications http://www.gsmarena.com/nokia_6700_slide-3035.php (besökt 2014-12-22) 135. MobileRated.com: Nokia 6700 Slide Specifications http://www.mobilerated.com/nokia-6700-slide-specifications.html (besökt 2014-12-22) 136. GSMArena.com: Nokia 6710 Navigator - Full phone specifications http://www.gsmarena.com/nokia_6710_navigator-2687.php (besökt 2014-12-22) 137. MobileRated.com: Nokia 6710s Specifications http://www.mobilerated.com/nokia-6710s-specifications.html (besökt 2014-12-22) 138. GSMArena.com: - Full phone specifications http://www.gsmarena.com/nokia_6720_classic-2686.php (besökt 2014-12-22) 139. MobileRated.com: Nokia 6720 Classic Specifications http://www.mobilerated.com/nokia-6720-classic-specifications.html (besökt 2014-12-22) 140. GSMArena.com: Nokia 6730 Classic - Full phone specifications http://www.gsmarena.com/nokia_6730_classic-2811.php (besökt 2014-12-22) 141. MobileRated.com: Nokia 6730 Classic Specifications http://www.mobilerated.com/nokia-6730-classic-specifications.html (besökt 2014-12-22) 142. GSMArena.com: Nokia 6790 Surge - Full phone specifications http://www.gsmarena.com/nokia_6790_surge-2869.php (besökt 2014-12-22)

143. MobileRated.com: Nokia 6790s Specifications http://www.mobilerated.com/nokia-6790s-specifications.html (besökt 2014-12-22) 144. Forum Nokia: Device Details -- Nokia 7610 http://www.forum.nokia.com/devices/7610/ (besökt 2007-12-29) 145. Forum Nokia: Device Details -- Nokia 7650 http://www.forum.nokia.com/devices/7650/ (besökt 2007-12-29) 146. GSMArena.com: Nokia C5 - Full phone specifications http://www.gsmarena.com/nokia_c5-3122.php (besökt 2014-12-22) 147. MobileRated.com: Nokia C5-00 Specifications http://www.mobilerated.com/nokia-c5-00-specifications.html (besökt 2014-12-22) 148. GSMArena.com: Nokia C5 5mp - Full phone specifications http://www.gsmarena.com/nokia_c5_5mp-4019.php (besökt 2014-12-22) 149. MobileRated.com: Nokia C5-00 5MP Specifications http://www.mobilerated.com/nokia-c5-00-5mp-specifications.html (besökt 2014-12-22) 150. GSMArena.com: Nokia C6 - Full phone specifications http://www.gsmarena.com/nokia_c6-3229.php (besökt 2014-12-22) 151. MobileRated.com: Nokia C6-00 Specifications http://www.mobilerated.com/nokia-c6-00-specifications.html (besökt 2014-12-22) 152. GSMArena.com: Nokia C7 - Full phone specifications http://www.gsmarena.com/nokia_c7-3394.php (besökt 2014-12-22) 153. MobileRated.com: Nokia C7-00 Specifications http://www.mobilerated.com/nokia-c7-00-specifications.html (besökt 2014-12-22) 154. GSMArena.com: Nokia E5 - Full phone specifications http://www.gsmarena.com/nokia_e5-3198.php (besökt 2014-12-22) 155. MobileRated.com: Nokia E5-00 Specifications http://www.mobilerated.com/nokia-e5-00-specifications.html (besökt 2014-12-22) 156. GSMArena.com: Nokia E6 - Full phone specifications http://www.gsmarena.com/nokia_e6-3717.php (besökt 2014-12-22) 157. MobileRated.com: Nokia E6-00 Specifications http://www.mobilerated.com/nokia-e6-00-specifications.html (besökt 2014-12-22)

158. GSMArena.com: Nokia E7 - Full phone specifications http://www.gsmarena.com/nokia_e7-3545.php (besökt 2014-12-22) 159. MobileRated.com: Nokia E7-00 Specifications http://www.mobilerated.com/nokia-e7-00-specifications.html (besökt 2014-12-22) 160. Forum Nokia: Device Details -- Nokia E50 http://www.forum.nokia.com/devices/E50 (besökt 2007-12-29) 161. Forum Nokia: Device Details -- Nokia E51 http://www.forum.nokia.com/devices/E51 (besökt 2007-12-29) 162. GSMArena.com: Nokia E52 - Full phone specifications http://www.gsmarena.com/nokia_e52-2792.php (besökt 2014-12-22) 163. MobileRated.com: Nokia E52 Specifications http://www.mobilerated.com/nokia-e52-specifications.html (besökt 2014-12-22) 164. GSMArena.com: Nokia E55 - Full phone specifications http://www.gsmarena.com/nokia_e55-2685.php (besökt 2014-12-22) 165. MobileRated.com: Nokia E55 Specifications http://www.mobilerated.com/nokia-e55-specifications.html (besökt 2014-12-22) 166. Forum Nokia: Device Details -- Nokia E60 http://www.forum.nokia.com/devices/E60 (besökt 2007-12-29) 167. Forum Nokia: Device Details -- Nokia E61 http://www.forum.nokia.com/devices/E61 (besökt 2007-12-29) 168. Forum Nokia: Device Details -- Nokia E61i http://www.forum.nokia.com/devices/E61i (besökt 2007-12-29) 169. Forum Nokia: Device Details -- Nokia E62 http://www.forum.nokia.com/devices/E62 (besökt 2007-12-29) 170. GSMArena.com: Nokia E63 - Full phone specifications http://www.gsmarena.com/nokia_e63-2599.php (besökt 2014-12-22) 171. MobileRated.com: Nokia E63 Specifications http://www.mobilerated.com/nokia-e63-specifications.html (besökt 2014-12-22) 172. Forum Nokia: Device Details -- Nokia E65 http://www.forum.nokia.com/devices/E65 (besökt 2007-12-29)

173. GSMArena.com: Nokia E66 - Full phone specifications http://www.gsmarena.com/nokia_e66-2426.php (besökt 2014-12-22) 174. MobileRated.com: Nokia E66 Specifications http://www.mobilerated.com/nokia-e66-specifications.html (besökt 2014-12-22) 175. Forum Nokia: Device Details -- Nokia E70 http://www.forum.nokia.com/devices/E70 (besökt 2007-12-29) 176. GSMArena.com: Nokia E71 - Full phone specifications http://www.gsmarena.com/nokia_e71-2425.php (besökt 2014-12-22) 177. MobileRated.com: Nokia E71 Specifications http://www.mobilerated.com/nokia-e71-specifications.html (besökt 2014-12-22) 178. GSMArena.com: Nokia E72 - Full phone specifications http://www.gsmarena.com/nokia_e72-2831.php (besökt 2014-12-22) 179. MobileRated.com: Nokia E72 Specifications http://www.mobilerated.com/nokia-e72-specifications.html (besökt 2014-12-22) 180. GSMArena.com: Nokia E73 Mode - Full phone specifications http://www.gsmarena.com/nokia_e73_mode-3348.php (besökt 2014-12-22) 181. MobileRated.com: Nokia E73 Mode Specifications http://www.mobilerated.com/nokia-e73-mode-specifications.html (besökt 2014-12-22) 182. GSMArena.com: Nokia E75 - Full phone specifications http://www.gsmarena.com/nokia_e75-2688.php (besökt 2014-12-22) 183. MobileRated.com: Nokia E75 Specifications http://www.mobilerated.com/nokia-e75-specifications.html (besökt 2014-12-22) 184. Forum Nokia: Device Details -- Nokia E90 Communicator http://www.forum.nokia.com/devices/E90_Communicator (besökt 2007-12-29) 185. GSMArena.com: Nokia N8 - Full phone specifications http://www.gsmarena.com/nokia_n8-3252.php (besökt 2014-12-22) 186. PhoneArena.com: Nokia N8 full specs http://www.phonearena.com/phones/Nokia-N8_id4543/fullspecs (besökt 2014-12-22) 187. Forum Nokia: Device Details -- Nokia N70 http://www.forum.nokia.com/devices/n70/ (besökt 2007-12-29)

188. Forum Nokia: Device Details -- Nokia N71 http://www.forum.nokia.com/devices/N71 (besökt 2007-12-29) 189. Forum Nokia: Device Details -- Nokia N72 http://www.forum.nokia.com/devices/N72 (besökt 2007-12-29) 190. Forum Nokia: Device Details -- Nokia N73 http://www.forum.nokia.com/devices/N73 (besökt 2007-12-29) 191. Forum Nokia: Device Details -- Nokia N75 http://www.forum.nokia.com/devices/N75 (besökt 2007-12-29) 192. Forum Nokia: Device Details -- Nokia N76 http://www.forum.nokia.com/devices/N76 (besökt 2007-12-29) 193. Forum Nokia: Device Details -- Nokia N77 http://www.forum.nokia.com/devices/N77 (besökt 2007-12-29) 194. GSMArena.com: Nokia N78 - Full phone specifications http://www.gsmarena.com/nokia_n78-2254.php (besökt 2014-12-22) 195. MobileRated.com: Nokia N78 Specifications http://www.mobilerated.com/nokia-n78-specifications.html (besökt 2014-12-22) 196. GSMArena.com: Nokia N79 - Full phone specifications http://www.gsmarena.com/nokia_n79-2497.php (besökt 2014-12-22) 197. MobileRated.com: Nokia N79 Specifications http://www.mobilerated.com/nokia-n79-specifications.html (besökt 2014-12-22) 198. Forum Nokia: Device Details -- Nokia N80 http://www.forum.nokia.com/devices/N80 (besökt 2007-12-29) 199. Forum Nokia: Device Details -- Nokia N81 http://www.forum.nokia.com/devices/N81 (besökt 2007-12-29) 200. Forum Nokia: Device Details -- Nokia N82 http://www.forum.nokia.com/devices/N82 (besökt 2007-12-29) 201. GSMArena.com: Nokia N85 - Full phone specifications http://www.gsmarena.com/nokia_n85-2496.php (besökt 2014-12-22) 202. MobileRated.com: Nokia N85 Specifications http://www.mobilerated.com/nokia-n85-specifications.html (besökt 2014-12-22)

203. GSMArena.com: Nokia N86 8MP - Full phone specifications http://www.gsmarena.com/nokia_n86_8mp-2713.php (besökt 2014-12-22) 204. MobileRated.com: Nokia N86 8MP Specifications http://www.mobilerated.com/nokia-n86-specifications.html (besökt 2014-12-22) 205. Forum Nokia: Device Details -- Nokia N90 http://www.forum.nokia.com/devices/n90/ (besökt 2007-12-29) 206. Forum Nokia: Device Details -- Nokia N91 http://www.forum.nokia.com/devices/N91 (besökt 2007-12-29) 207. Forum Nokia: Device Details -- Nokia N92 http://www.forum.nokia.com/devices/N92 (besökt 2007-12-29) 208. Forum Nokia: Device Details -- Nokia N93 http://www.forum.nokia.com/devices/N93 (besökt 2007-12-29) 209. Forum Nokia: Device Details -- Nokia N93i http://www.forum.nokia.com/devices/N93i (besökt 2007-12-29) 210. Forum Nokia: Device Details -- Nokia N95 http://www.forum.nokia.com/devices/N95 (besökt 2007-12-29) 211. Forum Nokia: Device Details -- Nokia N95 8GB http://www.forum.nokia.com/devices/N95_8GB (besökt 2007-12-29) 212. GSMArena.com: Nokia N96 - Full phone specifications http://www.gsmarena.com/nokia_n96-2253.php (besökt 2014-12-22) 213. MobileRated.com: Nokia N96 Specifications http://www.mobilerated.com/nokia-n96-specifications.html (besökt 2014-12-22) 214. GSMArena.com: Nokia N97 - Full phone specifications http://www.gsmarena.com/nokia_n97-2615.php (besökt 2014-12-22) 215. MobileRated.com: Nokia N97 Specifications http://www.mobilerated.com/nokia-n97-specifications.html (besökt 2014-12-22) 216. GSMArena.com: Nokia N97 mini - Full phone specifications http://www.gsmarena.com/nokia_n97_mini-2921.php (besökt 2014-12-22) 217. MobileRated.com: Nokia N97 Specifications http://www.mobilerated.com/nokia-n97-mini-specifications.html (besökt 2014-12-22)

218. Forum Nokia: Device Details -- Nokia N-Gage http://www.forum.nokia.com/devices/n-gage/ (besökt 2007-12-29) 219. Forum Nokia: Device Details -- Nokia N-Gage QD http://www.forum.nokia.com/devices/n-gageqd/ (besökt 2007-12-29) 220. GSMArena.com: Nokia X6 - Full phone specifications http://www.gsmarena.com/nokia_x6-2922.php (besökt 2014-12-22) 221. MobileRated.com: Nokia X6-00 Specifications http://www.mobilerated.com/nokia-x6-00-specifications.html (besökt 2014-12-22) 222. GSMArena.com: Nokia X7-00 - Full phone specification http://www.gsmarena.com/nokia_x7_00-3664.php (besökt 2014-12-22) 223. MobileRated.com: Nokia X7-00 Specifications http://www.mobilerated.com/nokia-x7-00-specifications.html (besökt 2014-12-22) 224. GSMArena.com: Samsung G810 - Full phone specification http://www.gsmarena.com/samsung_g810-2257.php (besökt 2014-12-22) 225. MobileRated.com: Samsung SGH-G810 Specifications http://www.mobilerated.com/samsung-sgh-g810-specifications.html (besökt 2014-12-22) 226. GSMArena.com: Samsung i450 - Full phone specifications http://www.gsmarena.com/samsung_i450-2076.php (besökt 2014-12-22) 227. MobileRated.com: Samsung SGH-i450 Specifications http://www.mobilerated.com/samsung-sgh-i450-specifications.html (besökt 2014-12-22) 228. GSMArena.com: Samsung i550 - Full phone specifications http://www.gsmarena.com/samsung_i550-2115.php (besökt 2014-12-22) 229. HandsetDetection.com: Samsung SGH-i550 Device Specifications http://www.handsetdetection.com/properties/vendormodel/Samsung/SG H-I550 (besökt 2014-12-22) 230. GSMArena.com: Samsung i7110 - Full phone specifications http://www.gsmarena.com/samsung_i7110-2559.php (besökt 2014-12-22) 231. MobileRated.com: Samsung GT-i7110 Specifications http://www.mobilerated.com/samsung-gt-i7110-specifications.html (besökt 2014-12-22) 232. GSMArena.com: Samsung i8510 INNOV8 - Full phone specifications http://www.gsmarena.com/samsung_i8510_innov8-2471.php (besökt 2014-12-22)

233. MobileRated.com: Samsung GT-i8510 Specifications http://www.mobilerated.com/samsung-gt-i8510-specifications.html (besökt 2014-12-22) 234. GSMArena.com: Samsung L870 - Full phone specifications http://www.gsmarena.com/samsung_l870-2387.php (besökt 2014-12-22) 235. MobileRated.com: Samsung SGH-L870 Specifications http://www.mobilerated.com/samsung-sgh-l870-specifications.html (besökt 2014-12-22) 236. J2ME Polish: Samsung/SGH-D720 J2ME Specification http://www.enoughsoftware.com/devices/Samsung/SGH- D720.html (besökt 2007-12-29) 237. PDAdb.net: Samsung SGH-D730 Specs | Technical Specifications http://www.pdadb.net/index.php?m=specs&id=996 (besökt 2007-12-29) 238. Le Club-Java: MIDP telephones http://www.club-java.com/TastePhone/J2ME/MIDP_mobile.jsp (besökt 2007-12-29) 239. Le Club-Java: Siemens SX1 MIDP Java telephone http://www.club- java.com/TastePhone/J2ME/MIDP_Java_telephone.jsp;jsessioni d=7C43F1DFC413A53D4270D72273937B45?m=65&brand =Siemens&model=SX1 (besökt 2007-12-29) 240. Benhui.net: Source for J2ME Bluetooth Mobile 3D MIDP 2.0 http://www.benhui.net/modules.php?name=Midp2Phones (besökt 2007-12-29) 241. Forum Nokia: Device Details -- Nokia 9210 http://www.forum.nokia.com/devices/9210/ (besökt 2007-12-29) 242. Forum Nokia: Device Details -- Nokia 9210i http://www.forum.nokia.com/devices/9210i/ (besökt 2007-12-29) 243. Forum Nokia: Device Details -- Nokia 9290 http://www.forum.nokia.com/devices/9290/ (besökt 2007-12-29) 244. Forum Nokia: Device Details -- Nokia 9300 http://www.forum.nokia.com/devices/9300/ (besökt 2007-12-29) 245. Forum Nokia: Device Details -- Nokia 9500 http://www.forum.nokia.com/devices/9500/ (besökt 2007-12-29)

246. Sun Microsystems, Inc.: User's Guide, J2ME Wireless Toolkit, Version 1.0.4 http://147.188.192.43/docs/java/j2me/UserGuide_HTML /ch_cline.html (besökt 2010-12-15)