Blog zamrznjen -- Blog Frozen
Ta spletni dnevnik je zamrznjen. To pomeni, da ne bo več prejemal novih prispevkov in komentarjev. Kmalu bo tudi arhiviran in s tem prestavljen na trajnejše mesto. Temu sporočilu sledi običajna vsebina spletnega dnevnika.
Hvala za razumevanje.
This blog has been frozen. This means it will no longer accept new posts and comments. It will soon be archived and moved to a more permanent location. Below this message you can find the blog's usual contents.
Thank you for your understanding.
Pred nekaj dnevi sem se spravil na programiranje nove aplikacije za mobilne telefone. Pri procesu pa sem naletel na ovire, ki se jih vsaj za zdaj ne da prečkati. Zgodba govori o tem, kako ni mogoče ustvariti praktične in brezplačne uporabniku prijazne aplikacije...
Ozadje
Po daljšem premisleku sem se odločil, da se bom spustil v projekt, rezultat katerega bo aplikacija za mobilne telefone. Ta aplikacija bo imela veliko bazo podatkov (v bistvu slik – lahko tudi več 50MB). Te podatke bi bil treba nekako »prilastiti« aplikaciji, da bi jih ta lahko brala. Preučil sem možnosti:
- prenos preko interneta
- vcepljanje podatkov v namestitveno datoteko programa
- postavitev podatkov na zunanji pomnilnik telefona
Ideja prenosa preko interneta je hitro propadla. Osebno enostavno sovražim aplikacije na mobilniku, ki za svoje delovanje zahtevajo internetno povezavo. Infrastruktura interneta na mobilnikih je premalo zrela, da bi to bilo praktično (v prvi vrsti so krivi (nepotrebni) stroški povezave in prenosa, takoj za njimi varnost prenosa).
Vcepljanje (embedding) podatkov v JAR datoteko bi bila dobra ideja, če nebi bila takšna datoteka prevelika za večino mobilnikov. Nokie sploh ne sprejmejo Java aplikacije, večje od nekaj 100 kilobajtov, SonyEricssoni pa so sicer manj izbirčni, vseeno pa bi uporabnik moral imeti 50+ MB pomnilnika na telefonu (kartica ne velja), če bi hotel takšno aplikacijo namestiti. Poleg tega bi bilo skrajno nepraktično, da bi končni uporabnik moral vedno, ko kaj doda, znova namestiti aplikacijo.
Torej tretja možnost – uporabniku omogočiti, da si izbere, kam želi te podatke prekopirati (tako ali tako je uporabnik tisti, ki si pri tej aplikaciji izbira, kaj sploh bo v teh podatkih). Lepo ustvariš mapo na spominski kartici (veliko telefonov jo ima) in v njo shranjuješ svoje slike. Sliši se lepo, a zagotavljam vam, skrajno neprijazno in kruto do razvijalca aplikacije.
Teorija
Java je s svojo J2ME strukturo in standardom poskrbela, da z aplikacijo, napisano v Javi, lahko dostopamo do podatkov v pomnilniku telefona in spominske kartice (do zunanjih datotek). Ampak je dodala nekaj zank, ki učinkovito ubijajo J2ME razvoj na tem področju. Za vsak dostop do zunanje datoteke mora program pridobiti dovoljenje od uporabnika telefona. To pomeni, da vas bo za vsako datoteko iz podatkovne kartice telefon dobesedno gnjavil, če želite potrditi dostop. To aplikacijo seveda naredi preprosto neuporabno (uporabnik se ustraši teh sporočil ali pa se jih hitro naveliča in raje izbriše aplikacijo, ki pa pri tem ni nič kriva).
Problemi pa se tukaj šele začnejo. V kolikor aplikacija ni podpisana (to pomeni, da jo je s certifikatom potrdila tretja stran med razvijalcem in uporabnikom), ni možnosti, da ta sporočila ukinete. Pri vsaki posamezne aplikaciji, nameščeni na telefonu, se skrivajo varnostne nastavitve. Če želite na primer aplikaciji dovoliti dostop do kamere, lahko to storite in telefon vas ne bo več gnjavil. Isto lahko to storite za dostop do interneta. Ali za dostop do modrega zoba (Bluetooth). Na voljo imate možnosti »ne dovoli«, »vprašaj vsakič«, »vprašaj enkrat« in »ne sprašuj«. Prva ne dovoli dostopa do izbrane funkcije, druga vas vsakič gnjavi, tretja vpraša za dostop le enkrat na zagon aplikacije, zadnja pa sploh ne sprašuje ničesar, ampak preprosto dovoli.
Zakaj vam to razlagam? Ker se teh stvari ne da nastaviti, ko pride na vrsto dostop do zunanjih datotek. Tam sta na voljo le dve možnosti: ali aplikaciji sploh ne dovolimo dostopa, ali pa smo se primorani zadovoljiti z večnim gnjavljenjem za vsak posamezen dostop.
Praksa
Ko sem to spoznal, sem začel ugotavljati, kako bi se tega problema rešil. Ena možnost bi bila, da vse podatke, do katerih aplikacija dostopa, stlačim v eno samo datoteko. Aplikacija bi tako samo na začetku vprašala za dostop, nato pa več ne, saj bi datoteka ostala odprta skozi ves zagon aplikacije. Sliši se lepo, in zares je prelepo, da bi bilo res.
Datoteke v Javi lahko beremo s pomočjo tako imenovanih tokov. Predstavljajte si reko informacij, ki tečejo iz datoteke. Takšen tok se da brati le v eni smeri. To pomeni, da bi moral, če bi želel skakati po podatkih sem ter tja, nekako spraviti ta tok v obratno smer. Java standard pa ne podpira nič, s čemer bi se to dalo storiti! Če želim na začetek datoteke, lahko uporabim le posebno metodo za vrnitev na označeno mesto (označim lahko začetek datoteke). Te metode ne podpira večina telefonov (kolikor vem doslej, le poceni Nokie, tiste z Symbianom in Sonyericssoni tega ne podpirajo), polovica tistih, ki pa to podpirajo, pa ne podpirajo velikih skokov.
Še ena možnost je, da znova odprem tok. Za to mi ni treba znova odpreti datoteke, le tok (datoteka in tok podatkov iz nje sta dve različni stvari v aplikaciji). Ampak problem pa je, da Sonyericssoni za odprtje toka prav tako gnjavijo, ne le za odprtje datoteke! Večina Nokij (ne vse) tega sicer ne počne, vendar le iz usmiljenja do razvijalcev, saj standard pravi, da je to treba početi!!! Torej sedaj nimam možnosti, da pridem v svoji aplikaciji nazaj na začetek datoteke s podatki, brez gnjavljenja za potrditev.
Potrt, kot sem do tega trenutka že bil, sem začel vohljati, kako aplikacijo podpisati z certifikatom. Tu pa me je čakala še ena mrzla prha. V glavnem sta na voljo dve firmi, ki ponujata podpisovanje s certifikati in ki jih podpira večina telefonov. To sta VeriSign in Thawte. Thawte zahteva za enoletno licenco za potrjevanje 199 ameriških dolarjev, VeriSign pa kar 499 dolarjev! Poleg tega Thawte ponuja svoje storitve le podjetjem in ne fizičnim osebam. To pomeni, da bi moral za svojo aplikacijo zapraviti 499 dolarjev na leto (!), da bi jo lahko ponudil javnosti. V praksi to pomeni, da je praktično nemogoče, da jo ponudim brezplačno, saj je 500 dolarjev letno prevelik strošek, da bi ga plačeval sam. Pomislite – to je trenutno 354,08 EUR oz. 84.851 starih tolarjev! Še na vrh teh stroškov pa bi se morda prišteli še stroški testiranja ($200 na test na verzijo programa), kar pomeni, da bi še dodatno plačeval za vsak popravek, ki bi ga objavil.
Alternativa
So še alternativne možnosti! Aplikacijo lahko lansiram z lastnim certifikatom in podpisom (self-signed). To pa v praksi pomeni, da bi uporabnik moral namestiti na svoj telefon moj certifikat in ga nastaviti kot zaupanja vrednega. To prinaša svoje slabosti. Namestitev uporabniških certifikatov podpirajo le nekatere (ne najnovejše) Nokie, Sonyericssoni in Motorole tega ne podpirajo. Prav pri Nokiah pa je najmanjši problem uporabljati nepodpisano aplikacijo (saj za dostop vprašajo le enkrat na datoteko). Pri novejših Sonyericssonih (od W800i dalje) je način, kako certifikat spraviti na telefon, vendar vključuje uporabo podatkovnih kablov za spreminjanje programske opreme in posebnih programov za vsiljevanje certifikatov. Saj ne rečem, da je težko ali smrtno-nevarno (kabel pa se tudi povsod da dobiti, pošiljajo jih že v paketih zraven telefonov), a vseeno sklepam, da je malo uporabnikov, ki bi imeli voljo in željo posegati v programsko opremo telefona. Ampak lahko da se motim.
In še epilog te zgodbe: razvijalci Jave za mobilnike skupaj z razvijalci mobilnih telefonov efektivno uničujejo duh zdravega, prostega, brezplačnega in odprto-kodnega programiranja.
- 26. september 2007 @ 21:35 - Ogledov: 7743 -
Komentarjev: 7