python fuer mobile anwendungen 2007

6
26 IMVS Fokus Report 2007 Es muss nicht immer Java sein: Python für mobile Anwendungen Nokia hat mit Python für S60 eine für mobile Geräte neue Programmiersprache veröffentlicht, welche eine interessante Alternative zur herkömmlichen Softwareentwicklung in Java oder C/C++ darstellt. Wir stellen Python für S60 kurz vor und testen den Einsatz von Python sowohl für rechenintensive als auch kommunikationsorientierten Beispiele. Dabei kommen wir zum Schluss, dass sich Python vor allem für An- wendungen ohne grosse Ansprüche an die Rechenleistung und ganz allgemein für ein Rapid Prototyping eignet. Oliver Ruf | [email protected] Die Vor- und Nachteile von plattformspezifischen Maschinenprogrammen, welche zum Beispiel durch Kompilation von C/C++-Programmen ent- stehen, sind hinlänglich bekannt: sehr hohe Per- formanz bei mangelnder Plattformunabhängig- keit. Das Problem der fehlenden Unterstützung von verschiedensten Prozessortypen und Plattformen ist bei der Software-Entwicklung in Java weitest- gehend durch den Einsatz von plattformunabhän- gigem Bytecode gelöst. Dieser Zwischencode wird von der Java Virtual Machine (VM) interpretiert oder just in time (JIT) kompiliert. Somit reduziert sich die Plattformabhängigkeit auf die VM. Der grosse Nachteil dabei ist die verminderte Perfor- manz in rechenintensiven Anwendungen. Python ist im Gegensatz zu C/C++ und Java eine reine Interpretersprache. Andere bekannte Inter- pretersprachen sind beispielsweise Perl, Ruby, PHP und auch BASIC. Die Programme werden also nicht kompiliert, sondern direkt zur Laufzeit in- terpretiert. Sie benötigen daher, ähnlich zu Java, eine plattformspezifische Laufzeitumgebung, um die Programme, auch Skripte genannt, auszufüh- ren. Alleine die Tatsache, dass Python-Programme interpretiert werden, weist darauf hin, dass mit einer verminderten Performanz zu rechnen ist. Wie gross diese Einbusse ist und welche Vorzüge durch die Verwendung eines Interpreters anstatt eines Compilers resultieren, wollen wir hier ge- nauer untersuchen. Erfolg durch Einfachheit Bevor sich ein Programmierer an die Lösung eines Problems macht, wäre es wünschenswert, dass er die verschiedenen Vor- und Nachteile der unter- schiedlichen Programmierparadigmen und Pro- grammiersprachen im gegebenen Problemfeld un- tersucht. Denn nicht immer ist der erste Griff in die Sprachenkiste der Richtige; doch fast immer gilt, dass ein falscher Griff später sehr teuer be- zahlt werden muss. Falls sich also verschiedene Programmiersprachen anbieten, weil sie tech- nisch gut unterstützt werden und weil sich die Programmierer damit wohl fühlen, so sollten sich die Entwickler unter anderem die Frage stellen: Wie schnell und wie effizient kann ich das gege- bene Problem mit der Programmiersprache P lösen? Die redliche Beantwortung dieser Frage müsste zu einem Mix an Programmiersprachen führen, abhängig davon, welches Problem es zu lösen gilt. Denn gewisse Programmiersprachen, wie C/C++, bieten ein grosses Mass an Effizienz, sind aber im Entwicklungsprozess umständlich zu handha- ben. Andere Programmiersprachen, wie beispiels- weise Python, punkten hier, denn der Entwick- lungsprozesses hängt dabei von verschiedenen Faktoren ab, unter anderem von der Einfachheit der Sprache, den unterstützten Konzepten, den beiliegenden Bibliotheken und dem benötigten Aufwand um ein lauffähiges Programm zur Aus- führung zu bringen. Ein erstes Gefühl der Ein- fachheit Pythons erhalten wir dadurch, dass wir die Seitenzahl der Sprachdefinitionen vergleichen. Während für Python knapp hundert Seiten aus- reichen [PySpc], benötigt es für Java bereits über sechshundert Seiten um die Sprache zu definieren [JaSpc]. Kurz zusammengefasst heisst das, dass sich keine der heute verbreiteten Programmier- sprachen in einem absoluten Sinn als „die Beste“ behaupten kann. Um einen ersten Eindruck von Python ver- mitteln zu können, haben wir in Listing 1 den Klassiker Fibonacci programmiert. Anders als in vielen anderen strukturierten Programmierspra- chen werden in Python die strukturellen Blöcke lediglich durch das Einrücken von Zeilen defi- niert und es sind keine expliziten Klammern oder Schlüsselwörter als Begrenzung nötig. Die Art der Einrückung ist somit vorgegeben und kann nicht dem persönlichen Geschmack des Programmie- rers überlassen werden. Dies wird vor allem bei der for-Schleife im Beispiel deutlich sichtbar: alle

Upload: ikram

Post on 26-Jan-2016

219 views

Category:

Documents


1 download

DESCRIPTION

programming mobile phone with python

TRANSCRIPT

Page 1: Python Fuer Mobile Anwendungen 2007

26 IMVS Fokus Report 2007

Es muss nicht immer Java sein: Python für mobile Anwendungen

Nokia hat mit Python für S60 eine für mobile Geräte neue Programmiersprache veröffentlicht, welche eine interessante Alternative zur herkömmlichen Softwareentwicklung in Java oder C/C++ darstellt. Wir stellen Python für S60 kurz vor und testen den Einsatz von Python sowohl für rechenintensive als auch kommunikationsorientierten Beispiele. Dabei kommen wir zum Schluss, dass sich Python vor allem für An-wendungen ohne grosse Ansprüche an die Rechenleistung und ganz allgemein für ein Rapid Prototyping eignet.

Oliver Ruf | [email protected]

DieVor-undNachteilevonplattformspezifischenMaschinenprogrammen, welche zum Beispieldurch Kompilation von C/C++-Programmen ent-stehen,sindhinlänglichbekannt:sehrhohePer-formanz bei mangelnder Plattformunabhängig-keit.DasProblemderfehlendenUnterstützungvonverschiedenstenProzessortypenundPlattformenistbeiderSoftware-EntwicklunginJavaweitest-gehenddurchdenEinsatzvonplattformunabhän-gigemBytecodegelöst.DieserZwischencodewirdvonderJavaVirtualMachine (VM) interpretiertoderjustintime(JIT)kompiliert.Somitreduziertsich die Plattformabhängigkeit auf die VM. DergrosseNachteildabeiistdievermindertePerfor-manzinrechenintensivenAnwendungen.

PythonistimGegensatzzuC/C++undJavaeinereineInterpretersprache.AnderebekannteInter-pretersprachen sind beispielsweise Perl, Ruby,PHPundauchBASIC.DieProgrammewerdenalsonichtkompiliert,sonderndirektzurLaufzeit in-terpretiert.Siebenötigendaher,ähnlichzuJava,eineplattformspezifischeLaufzeitumgebung,umdieProgramme,auchSkriptegenannt,auszufüh-ren.AlleinedieTatsache,dassPython-Programmeinterpretiertwerden,weistdaraufhin,dassmiteiner verminderten Performanz zu rechnen ist.WiegrossdieseEinbusseistundwelcheVorzügedurchdieVerwendungeinesInterpretersanstatteines Compilers resultieren, wollen wir hier ge-naueruntersuchen.

Erfolg durch EinfachheitBevorsicheinProgrammiererandieLösungeinesProblemsmacht,wäreeswünschenswert,dasserdie verschiedenen Vor- und Nachteile der unter-schiedlichen Programmierparadigmen und Pro-grammiersprachenimgegebenenProblemfeldun-tersucht.DennnichtimmeristderersteGriffindieSprachenkistederRichtige;doch fast immergilt,dasseinfalscherGriffspätersehrteuerbe-zahlt werden muss. Falls sich also verschiedene

Programmiersprachen anbieten, weil sie tech-nisch gut unterstützt werden und weil sich dieProgrammiererdamitwohlfühlen,sosolltensichdie Entwickler unter anderem die Frage stellen:Wieschnellundwieeffizientkannichdasgege-beneProblemmitderProgrammiersprachePlösen?Die redliche Beantwortung dieser Frage müsstezu einem Mix an Programmiersprachen führen,abhängigdavon,welchesProblemeszulösengilt.DenngewisseProgrammiersprachen,wieC/C++,bieten ein grosses Mass an Effizienz, sind aberimEntwicklungsprozessumständlichzuhandha-ben.AndereProgrammiersprachen,wiebeispiels-weise Python, punkten hier, denn der Entwick-lungsprozesses hängt dabei von verschiedenenFaktorenab,unteranderemvonderEinfachheitder Sprache, den unterstützten Konzepten, denbeiliegenden Bibliotheken und dem benötigtenAufwandumeinlauffähigesProgrammzurAus-führung zu bringen. Ein erstes Gefühl der Ein-fachheitPythonserhaltenwirdadurch,dasswirdieSeitenzahlderSprachdefinitionenvergleichen.Während für Python knapp hundert Seiten aus-reichen[PySpc],benötigtesfürJavabereitsübersechshundertSeitenumdieSprachezudefinieren[JaSpc]. Kurz zusammengefasst heisst das, dasssich keine der heute verbreiteten Programmier-sprachenineinemabsolutenSinnals„dieBeste“behauptenkann.

Um einen ersten Eindruck von Python ver-mitteln zu können, haben wir in Listing 1 denKlassikerFibonacciprogrammiert.AndersalsinvielenanderenstrukturiertenProgrammierspra-chen werden in Python die strukturellen Blöckelediglich durch das Einrücken von Zeilen defi-niertundessindkeineexplizitenKlammernoderSchlüsselwörteralsBegrenzungnötig.DieArtderEinrückungistsomitvorgegebenundkannnichtdem persönlichen Geschmack des Programmie-rersüberlassenwerden.Dieswirdvorallembeiderfor-SchleifeimBeispieldeutlichsichtbar:alle

Page 2: Python Fuer Mobile Anwendungen 2007

27IMVS Fokus Report 2007

nachfolgendenAnweisungen,welcheeinfachein-gerückt sind, gehören zum Schleifenkörper. FürJava-oderPascal-ProgrammiereristderQuellcodeetwas gewöhnungsbedürftig aber die Lesbarkeitistinsgesamtverbessert.Esbestehtdadurchaberauch die Gefahr eines fälschlichen EinrückensundsomiteinerfehlerhaftenInterpretation.

VariablenwerdengenerelldynamischalloziertundderSpeicherautomatischverwaltet,sodasskeine explizite Instanzierung notwendig ist. Eswird auch nicht vorgeschrieben, auf welche ArtdieProgrammegeschriebenwerdenmüssen,undPython lässt dem Entwickler dadurch die Wahlfunktional,objektorientiertoderaspektorientiertzuprogrammieren.Esistsogarmöglich,diesePa-radigmenzumischen.

DieseeinfachenGrundsätzesindnichtunwe-sentlich, weil sich dadurch in kürzester Zeit einlauffähigesProgrammerstellenlässt.

WennmanalsoeinespontaneIdeehatundnurkurzmalausprobierenmöchte,obsichdieseauchalsProgrammumsetzten lässt, sowünschtman

import time

def fibonacci(n): if n == 0: return 0 elif n == 1: return 1 else: return fibonacci(n - 1) + fibonacci(n - 2)measurings = 100amount = 30totaltime = 0.0for i in range( measurings ): begin = time.clock() fibonacci(amount) end = time.clock() totaltime += end - beginaverage = 1000 * totaltime / measurings # in ms

Listing 1: Fibonacci mit Zeitmessung

sicheinenmöglichsteinfachenEntwicklungspro-zess ohne schwerfällige EntwicklungsumgebungundohnelangwierigenKompilations-undBinde-prozess.Isteinsolchernichtvorhanden,verwirftmandieIdeezuleichtoderverschiebtsieaufspä-ter.

Die Einfachheit des Python-Entwicklungs-prozesseslässtsichgutimVergleichzuJavaamStandardprogramm „Hello, World!“ zeigen. ImJava-Programm (Listing 2) benötigen wir eineineinerKlasseeingebettetenmain-ProzedurmitdementsprechendenPrint-Aufruf.

DiesesJava-ProgrammmussinderDatei«Hello.java» (entsprechend dem Klassennamen) gespei-chertunddanachkompiliertwerden.DieKompi-lationgeschiehtmitdemBefehl javacHello.java,welcher die Bytecode-Datei Hello.class erstellt.UmdasGanzedannauchauszuführen,mussmandieVMmitdemAufrufjavaHellodazuanweisen.DasResultatist,dass„Hello,World!“aufderKon-soleausgegebenwird.BeiJava-ApplikationenfürMobiltelefonemussdieFunktionzusätzlichnoch

public class Hello { public static void main( String[] args ) { System.out.println( „Hello, World!“ ); }}

Listing 2: „Hello World“ mit Java Abb. 1: „Hello, World!“ in der Python-Konsole auf einem Nokia E61

Page 3: Python Fuer Mobile Anwendungen 2007

2� IMVS Fokus Report 2007

ineinemMIDleteingebautwerden,wasweiterenAufwandbedeutet.

BeiPythonerfülltlediglicheineinzelnerBefehlnach Aufstarten des Interpreters seinen Dienst(sieheAbb.1).DieserreduzierteinitialeAufwandspieltspeziellbeikleinenApplikationeneinwich-tigesKriterium,fälltaberbeigrösserenProjektennichtmehrstark insGewicht,dadasVerhältniszum restlichen Quellcode mit dessen Zunahmeabnimmt.DahereignetsichPythonbesondersgutfürRapidPrototyping.

Wieeingangsschonangesprochen,isteinwei-teres wichtiges Merkmal von erfolgreichen Pro-grammiersprachen die Güte der zugehörigen Bi-bliotheken. Ähnlich wie die Standardbibliothekvon Java [JaLib] besitzt auch Python eine um-fangreicheStandardbibliothek [PyLib]mitvielennützlichenFunktionen.ImPython-JargonheissendieBibliothekseinheitenModuleundreichenvoneinfachen Datenstrukturen über Internet- undNetzwerk-Funktionen bis hin zu XML-ParsernundKompressionsalgorithmen.

Python für MobiltelefoneImJanuar2006veröffentlichteNokiafürdieS60Serie ihrer Mobiltelefone eine Implementierungder Programmiersprache Python in der Version2.2[SFS60].DasssichNokiageradefürPythonalsSkripting-Spracheentschiedenhatte,hängtdamitzusammen,dassPythongenerelleineSchnittstel-le zu C/C++-Programmen besitzt. Somit bestehtdie Möglichkeit, vorhandenen C++-Code in einevon Python aus aufrufbare DLL zu kompilierenunddortzuverwenden.DiePython-Implementie-rung von Nokia enthält einen Interpreter, einenGrossteilderStandardbibliothekundeinAPIfürdieGeräte.NokiastelltdieseImplementierungalsopensourceuntereinerApacheLicenseV2.0freizur Verfügung [ApLic]. Eine aktive CommunitywieauchNokiaselbstarbeitenkontinuierlichanderWeiterentwicklungderImplementierung.

Als zentrale Stelle dient der Community dieoffizielle Webseite der open-source-Projekte vonNokia[NoWik],welchealsWikirealisiertistundsomitallenBenutzerndieMöglichkeitbietet,Sei-tenändernunderweiternzukönnen.AlsSupport-und Diskussionsplattform stehen ein offiziellesForum[NoFor]undeinIRC-ChatzurVerfügung.

Eines der Kernstücke von Python für S60 istdie Nokia-API. Mit viel Aufwand hat Nokia ihreC/C++-APIsnachPythonexportiert.DieseC/C++-APIs bieten Zugriff auf die meisten FunktionendesTelefons.EntsprechendgibtesauchinPythonfürS60diverseModulefürallemöglichenFunkti-onendesentsprechendenmobilenGeräts:Modulefür GUI- und Grafik-Funktionalität, der Zugriffauf die interne Kamera, die Möglichkeit SMS-Nachrichten zu versenden, oder auch Bluetooth-Verbindungen aufzubauen sind einige Beispieledafür.

Im Gegensatz dazu sind bei Python für S60noch nicht alle Module der Standardbibliothekumgesetztworden.DieBetonungliegthierspezi-ellaufdem„nochnicht“,denndieEntwicklervonNokiaarbeitenanderErweiterungderbisherigenUmsetzungundveröffentlichenmittlerweile fastmonatlichneueVersionen.

Als konkretes Beispiel sind die XML-Funkti-onenderStandard-BibliotheknochnichtaufdemMobiltelefonverfügbar.Einübliches importxmlendetabruptmiteinemImportError.GeradehierzeigtsichdieCommunityvonderflexibelstenSei-te. Einer der interessierten Benutzer hat zu die-semZweckeinanderes freiesXML-Modul, cEle-mentTree,fürdiemobilePlattformübersetztundbietetdieseszumherunterladenaufseinerWeb-seitean[PyXml].WiediesesBeispielzeigt,füllendieBenutzerdienochvorhandenenLückendurcheigeneModuleundProgramme.Dennochbedeutetdies für den Programmierer immer zusätzlichenAufwand;vorderVerwendungeinesModulslohntessichzuüberprüfen,obesaufdermobilenPlatt-

Abb. 2: Das Nokia E61

Page 4: Python Fuer Mobile Anwendungen 2007

2�IMVS Fokus Report 2007

formverfügbarist.Fallsnicht,isteineSucheimInternetodereineeigeneAlternativenotwendig.

PyAmazonViele Leute bestellen heute ihre Bücher direktvon zuhause über das Internet. Dies tun sie vorallemdann,wennsiegenauwissen,welchesBuchsie kaufen wollen. Das gezielte und ungezielteSchmökern in Büchern ist aber nur in einer Bi-bliothekoderBuchhandlungrichtiggutmöglich.WennmannunvordemendlosenRegalstehtundvorsicheinenStapelBücherzumgleichenThemahat, so fällt es einem oft nicht einfach, sich füreinsderBücherzuentscheiden.DieserEntscheidkönntedurchvorhandene,abrufbareRezensionenbeeinflusst werden. Bei Amazon zum Beispielkönnen die Kunden direkt zu jedem Artikel eineBewertung abgeben. Gleichzeitig können andereKundendiesedannbeurteilen,obsiesinnvollundzutreffend ist, wodurch man eine ehrliche undguteRezensionaucherkennenkann.

UmsolcheRezensionenundandereBuchinfor-mationendirektimBuchladenabrufenzukönnen,habenwirunterEinsatzvonPython fürS60diekleine, mobile Applikation PyAmazon entwickelt

Abb. �: Gefundene Suchresultate zur Titelsuche „Python in a Nutshell“

Abb. 4: Daten zu einem Buch

[PyAma].PyAmazonbietetdieMöglichkeit,Buch-titelbeiAmazonabzufragen(sieheAbb.3)unddenPreis,BewertungenundandereDatenineinerbe-nutzerfreundlichen Darstellung zu präsentieren(sieheAbb.4).DurchdieEigenentwicklungunterVerwendungvonPythonhabenwirdieMöglich-keitenundGrenzenvonPythonfürS60kennenge-lerntunddasganzeopensourceProjektvonNokiagenauerunterdieLupenehmenkönnen.

DieBücherinformationenfragenwirüberdenvon Amazon angebotenen E-Commerce Dienst(ECS) ab. Dabei kann die ECS-Schnittstelle aufzwei verschiedene Arten angesprochen werden:entweder mit dem Simple Object Access Proto-col (SOAP) oder über den Representational StateTransfer (REST). Während man bei SOAP ent-sprechende Parameter in XML verpackt und andie Schnittstelle schickt, kodiert man bei REST-AbfragendiebenötigtenParameterdirekt inderURL.

InPyAmazonhabenwirunsfürdieREST-Me-thode entschieden, da die ganze Kodierung derParameterinXMLentfälltunddadurchauchwe-niger Daten übermittelt werden müssen. DieserUmstand ist speziell bei mobilen Applikationennachwievorwichtig,dadieKosten fürdenDa-tentransferrechthochsind.

Den Python-Code des Kerns der REST-Abfra-geistinListing3dargestellt.MitdemStandard-ModulurllibkannüberdieFunktionurlopen(…)einHTTP-RequestandieURLgeschicktwerden.DabeiwerdendieParameterspeziellkodiertundmittels der Variablen post_data mitgeschickt.AlsRückgabewerterhältmandanneinenDaten-stromf.MitdemanschliessendenBefehlf.read()wird die Antwort empfangen und der Variablenresponse zugewiesen. f.close() schliesst danachdieoffeneVerbindungwieder.BeidenAntwortenderECS-SchnittstellehandeltessichimmeruminXMLgespeicherteDaten.DerUmfangderAntwor-ten des Amazon-Webservices ist direkt von den

Listing �: URL-Abfrage mit dem Standard-Modul urllib

# url: URL als String# post _ data: codierte Ab-frageparameter

f = urllib.urlopen(url, post _ data)response = f.read()f.close()

Page 5: Python Fuer Mobile Anwendungen 2007

�0 IMVS Fokus Report 2007

verwendeten Parametern abhängig. Die vielfäl-tigen Möglichkeiten und Kombinationen werdengut in der Amazon ECS-Dokumentation [AmECS]beschrieben.

Für eine kommunikationsorientierte Applika-tionwiePyAmazon ist Python fürS60 eine guteWahl.DadieApplikationhauptsächlichdemBe-schaffen und Darstellen von Information dientund keine rechenintensiven Verarbeitungen be-nötigt,istdiePerformanzvölligausreichend.DasAbfragenundEmpfangenderInformationenüberdasInternetbenötigtdabeidiemeisteZeit.Zudemsind alle wichtigen Funktionen in den verschie-denen Modulen vorhanden. Auch die Benutzer-schnittstelle kann mit Hilfe der Nokia-API undden vorhandenen Komponenten effizient erstelltwerden.

import mathimport time

pi = 3.14159265359measurings = 100degrees = 360degsteps = 10totaltime = 0.0for m in range( measurings ): begin = time.clock() for i in range( degrees*degsteps ): angle = (i * pi) / (180.0 * degsteps ) math.sin( angle ) math.cos( angle ) math.tan( angle ) end = time.clock() totaltime += end - begintotaltime *= 1000 # <- convert seconds to msaverage = int( totaltime / measurings )

Listing 4: Berechnung von Winkelfunktionen

Abb. 5: C++ versus Java versus Python

PerformanzDie Flexibilität einer interpretierten SprachemussüblicherweisemiteinemVerlustanPerfor-manzbezahltwerden.UmdieGrössediesesVer-lustesabschätzenzukönnen,habenwirzweiun-terschiedliche Benchmark-Programme je einmalinPython,JavaundC/C++implementiert.

Beim ersten Programm handelt sich um diemehrfacheBerechnungeinerFibonacci-Zahlmit-telseinerzweifachrekursivenFunktion(sieheLi-sting 1). Mit der Hilfsfunktion fibonacci(n) wirddien-teFibonacci-Zahlberechnet. ImHauptpro-gramm wird diese Funktion hundertmal wie-derholtaufgerufenund für jedenAufrufdieZeitgemessen. Diese Zeiten werden aufsummiert, sodassschliesslicheingemittelterWertausgegebenwerden kann. Bei diesem Programm handelt essichwenigerumeinrechenintensivesProgramm,aberdurchdieRekursionwirddieEffizienzderFunktionsaufrufeaufdieProbegestellt.

Beim zweiten Programm werden die Win-kelfunktionen Sinus, Kosinus und Tangens fürverschiedene Winkel berechnet und dabei dieRechenkapazitätausgelotet(sieheListing4).Wie-derumwirddieZeitgemessenundüberhundertIterationengemittelt.

BeideProgrammebringenwirinPython,Javaund C++ auf einem Mobiltelefon Nokia E61 zurAusführung.DasE61isteinneueresS60-GerätderdrittenGenerationundverfügtübereinenARM9-kompatiblenProzessormitetwa200MHzund25MBArbeitsspeicherfürProgramme(Abb.2).Zudemverfügt noch kaum ein Gerätemodell über eineHardwareunterstützung für Fliesskommaarith-metikunddeswegenmussdieseentwederdurchdievorhandeneFixkommaarithmetikersetztoderaufwändigemuliertwerden.

DieErgebnissediesesVersuchssindinAbb.5klar ersichtlich. Der Performanzverlust von Py-thonfürS60imVergleichzuJavaundC++istsehrdeutlich. Während die Rechenperformanz beim

Page 6: Python Fuer Mobile Anwendungen 2007

�1IMVS Fokus Report 2007

ProgrammmitdenWinkelfunktionenimVergleichmitJavaumeinenFaktorfünf,undimVergleichmitC++umfasteinenFaktorneungelittenhat,sohabendievielenrekursivenFunktionsaufrufebeiFibonaccigleichein260fachesanZeitbenötigt.

WennmanaberdenArbeitsaufwandbetrach-tet, sieht die Sache etwas anders aus. WährendmandiebeidenPython-ProgrammedirektwieinListing1resp.Listing4aufdasMobiltelefonko-pierenundausführenkann,müssendieJava-Ver-sionenzuerstineinMIDletverpacktunddannalsPaketaufdemTelefoninstalliertwerden.

Fazit und AusblickMit dem Python für S60 Projekt hat Nokia eineganzneueArtvonSoftwareentwicklungfürMobil-telefonemöglichgemacht.Mitihrergutdokumen-tiertenAPIermöglichensiedeneinfachenZugriffaufdieFunktionendesTelefons.DieUmsetzungder Python-Standardbibliothek ist im Allgemei-nensehrgut,lediglicheinigewenigeModulefeh-len noch. Durch die laufende Weiterentwicklungdes Projekts ist längerfristig damit zu rechnen,dassauchdie fehlendenModulevonNokianochumgesetzt werden. Zwischenzeitlich lassen sichdurchdieHilfederaktivenCommunitydiemei-stendieserSchwierigkeitenumgehen.

Die klare Struktur und die dynamischen Ei-genschaften dieser Programmiersprache führenschnellundeinfachzuResultatenundmansiehtwährendderEntwicklungschön,wiesichdieein-zelnenTeilezueinemGanzenzusammenfügen.EsisteineeleganteArtzuprogrammieren.

Wenn man die Performanz von kompiliertenProgrammenmitdervoninterpretiertenSkriptenvergleicht, sind die Skript-Programme deutlichlangsamer.DiegeringerePerformanzistbeivie-len, vor allem kommunikationsorientierten Ap-plikationen für den Benutzer nicht spürbar undausreichend.Bei rechenintensivenApplikationenmusssichderEntwicklerüberlegen,wiegutsichderrechenaufwändigeTeilseparierenundausla-gernlässt,sodasseralsexternesModulinC/C++realisiertwerdenkann.Währendaufhandelsüb-lichenComputerndieRechenkapazitätundSpei-chermengen auch bei Python-Programmen fürfastjedenZweckausreichendsind,fallendieRes-sourcenaufMobiltelefonenrechtknappaus.

FürgrössereProjektelohntsichdergenerelleEinsatzvonC/C++oderJava,insbesonderewenndieApplikationperformanzkritischoder rechen-intensivist.

Aus unserer Sicht eignet sich Python für S60allerdingssehrgut,umschnelleinenerstenPro-totypen einer Applikation zu erstellen. Und wersicheinmalintensivermitPythonauseinanderge-setzthat,wirdsichschnelldamitanfreundenunddie Vorzüge dieser dynamischen Programmier-sprachezuschätzenlernen.

Referenzen[AmECS] Dokumentation Amazon ECS Dienst, http://developer.

amazonwebservices.com/connect/kbcategory.jspa?

categoryID=19

[ApLic] Apache Lizenzen, http://www.apache.org/licenses

[JaLib] Dokumentation der Java-Standardbibliothek,

http://java.sun.com/j2se/1.4.2/docs/api/

[JaSpc] Java Language Specification,

http://java.sun.com/docs/books/jls/

[PyAma] PyAmazon, http://pys60.ifi.ch/PyAmazon/

[PyLib] Dokumentation der Python-Standardbibliothek,

http://docs.python.org/lib/

[PySpc] Python Language Specification,

http://docs.python.org/ref/ref.html

[PyWeb] Offizelle Python Webseite, http://www.python.org

[PyXml] cElementTree für PyS60,

http://ssalmine.googlepages.com/somepys60extensions

[NoFor] Offizielles Nokia Forum, http://discussion.forum.nokia.

com/forum/forumdisplay.php?forumid=102

[NoWik] Offizielles Nokia Wiki, http://wiki.opensource.nokia.com/

projects/Python_for_S60

[SFS60] PyS60 auf SourceForge,

http://sourceforge.net/projects/pys60/