Series 60 ve Python
Cep telefonlarımız neredeyse bir mini bilgisayar şeklinde çalışabiliyor. GPRS destekli bir telefonla (bütçenizin el verdiği ölçüde) e-posta alışverişinden tutun da anlık mesajlaşma yazılımlarına kadar hemen her türden internet temelli uygulamayı gerçekleştirebiliyoruz. Bunun yanı sıra S60 (Series 60) destekli bir telefona sahipseniz ofis yazılımlarına kadar bir çok PC yazılımının Symbian muadiline cebinizden erişmeniz mümkün.
Neredeyse 10-15 yıl önceki işletim sistemlerinin yeterliliklerine sahip diyebileceğim günümüz Symbian OS'u, elbette ki üzerinde koştuğu donanımın kısıtlamalarına bir hayli bağlı. Bu nedenle telefonların işlemci ve bellek güçleri çıtasını bir kaç kademe daha yukarı çıkartana kadar günümüz bilgisayarlarının yerine kullanılabilecek birer alternatif olamayacaklar. Ama en azından internet uygulamaları bakımından laptopların yerini tutabiliyorlar. Bu bile büyük bir gelişme.
Emektar Java

Symbian OS, hemen her platformda sorunsuzca çalışabilen, emektar Java diliyle yazıldığından onun üzerinde çalışan yazılımların da büyük bir kısmı Java ile geliştiriliyor. Durum bu olunca Java dili cep telefonları için de bir zamanlar PC'ler için olduğu gibi bir hayli kıymetli bir hal alıverdi.
Ancak cep telefonları için bir uygulama geliştirirken yine PC ortamını ve Symbian OS emülatörlerini kullanmak durumunda kalıyorsunuz. Çünkü şu sıralar cebimizde taşıdığımız ve "alo" deyip SMS çekmekten başka bir şey yapmadığımız (tamam tamam arada fotoğraf ya da video da çekiyoruz) akıllı telefonların üzerinde çalışabilecek bir Java editörü bulunmuyor (en azından ben rastlamadım, bilenler bana yazabilir). Yani direk Symbian OS üzerinde Java kodu yazmanız pek mümkün değil. Ama Python geliştiricileri, Python için bir editör hazırlayıp, S60 ya da UIQ üzerinde çalışır hale getirmeyi başarmışlar.
Otobüs yolculuğunda program yazılır mı?
Şu sıralar piyasada uygun fiyata bulabileceğiniz Symbian OS'lu cep telefonları "büyük" diye nitelendirebileceğimiz bir ekrana sahipler. Bu ekran SMS yazmak, oyun oynamak ya da film izlemek için yeterli olabiliyor, tabii program yazmak için de...
Evet, yanlış okumadınız program yazmak dedim. Geçtiğimiz günlerde internette gezinirken Python'un Series 60 üzerinde çalışabilen bir sürümüne rastladım (PyS60). Yani Linux, Mac ya da Windows üzerinde kullandığınız Python'u artık cep telefonunda da kullanabileceğiz. Java'nın bir adım önüne geçip, Symbian OS'ta tek olmayı başaran Python beni şaşırttı diyebilirim. Çünkü artık cep telefonunuz için cep telefonunuz üzerinde program yazabileceksiniz. Ne kadar güzel değil mi? Aynı PC gibi...
Tamam, son cümle biraz abartılı oldu. Kabul ediyorum ama bir sonraki cep telefonu nesli bu sözümü haklı çıkartabilir. Bunu da bir kenara not edin. Çünkü cep telefonu CPU'ları 500 MHz'in üzerine çıkıp, ekran çözünürlükleri ve bellek miktarları biraz daha iyileştirilirse, otobüste yolculuk ederken bile Python editörü üzerinde (PED) program yazmak mümkün olabilir (gerçi şimdi bile mümkün bu, en azından ben N70 ile denedim ve oldu :-D ).
Sistemi tanımak şart!
Python ile cep telefonunuz üzerinde yazılım geliştirecekseniz, Symbian OS mimarisini tanımanız şart. Yani PC üzerinde (Linux, Mac ya da Windows) geliştirdiğiniz kodların büyük bir kısmı (yaklaşık %90'ı) Symbian OS üzerinde doğrudan çalışmayacaktır. Öncelikle sistemin gereksinimlerini öğrenip, kodlarınızı buna göre modifiye etmeniz gerekecek. Mesela, com ya da win32 bileşenlerini çağıran ya da Excel'e veri yazdıran bir kodu Symbian OS üzerinde çalıştırmanız pek mümkün değil. Bunun için öncelikle e32 (32-bit Symbian Executable File Format) ve Symbian OS sistem modellerini biraz kurcalamış olmanız gerekiyor. Yoksa "hello world" dışında pek bir şey yapamayabilirsiniz.
Küçük bir örnek
Cep telefonunuza Python ve PED'i kurduysanız, herhangi bir hatayla da karşılaşmadıysanız birkaç küçük örnek kod yazmaya başlayabilirsiniz demektir.
Aslında gene
>>> print "merhaba dünya"
merhaba dünya
şeklinde klasik bir örnekle başlayabiliriz. Tabii ki bu basit örnek bazılarınız için yetmeyecektir. O yüzden PED içerisinden de ulaşabileceğiniz bir başka uygulamadan örnek vermek istiyorum. Programlama dilleri öğrenilirken genellikle basit bir top oyunu üzerinde çalışılır. İşte hello world benzeri bir başka klasik örnek:

import appuifw
from graphics import *
import e32
from key_codes import *
class Keyboard(object):
def __init__(self,onevent=lambda:None):
self._keyboard_state={}
self._downs={}
self._onevent=onevent
def handle_event(self,event):
if event['type'] == appuifw.EEventKeyDown:
code=event['scancode']
if not self.is_down(code):
self._downs[code]=self._downs.get(code,0)+1
self._keyboard_state[code]=1
elif event['type'] == appuifw.EEventKeyUp:
self._keyboard_state[event['scancode']]=0
self._onevent()
def is_down(self,scancode):
return self._keyboard_state.get(scancode,0)
def pressed(self,scancode):
if self._downs.get(scancode,0):
self._downs[scancode]-=1
return True
return False
keyboard=Keyboard()
appuifw.app.screen='full'
img=None
def handle_redraw(rect):
if img:
canvas.blit(img)
appuifw.app.body=canvas=appuifw.Canvas(
event_callback=keyboard.handle_event,
redraw_callback=handle_redraw)
img=Image.new(canvas.size)
running=1
def quit():
global running
running=0
appuifw.app.exit_key_handler=quit
location=[img.size[0]/2,img.size[1]/2]
speed=[0.,0.]
blobsize=16
xs,ys=img.size[0]-blobsize,img.size[1]-blobsize
gravity=0.03
acceleration=0.05
import time
start_time=time.clock()
n_frames=0
# To speed things up, we prerender the text.
labeltext=u'yon tuslarini kullanin'
textrect=img.measure_text(labeltext, font='normal')[0]
text_img=Image.new((textrect[2]-textrect[0],textrect[3]-textrect[1]))
text_img.clear(0)
text_img.text((-textrect[0],-textrect[1]),labeltext,fill=0xffffff,font='normal')
while running:
img.clear(0)
img.blit(text_img, (0,0))
img.point((location[0]+blobsize/2,location[1]+blobsize/2),
0x00ff00,width=blobsize)
handle_redraw(())
e32.ao_yield()
speed[0]*=0.999
speed[1]*=0.999
speed[1]+=gravity
location[0]+=speed[0]
location[1]+=speed[1]
if location[0]>xs:
location[0]=xs-(location[0]-xs)
speed[0]=-0.80*speed[0]
speed[1]=0.90*speed[1]
if location[0]<0:
location[0]=-location[0]
speed[0]=-0.80*speed[0]
speed[1]=0.90*speed[1]
if location[1]>ys:
location[1]=ys-(location[1]-ys)
speed[0]=0.90*speed[0]
speed[1]=-0.80*speed[1]
if location[1]<0:
location[1]=-location[1]
speed[0]=0.90*speed[0]
speed[1]=-0.80*speed[1]
if keyboard.is_down(EScancodeLeftArrow): speed[0] -= acceleration
if keyboard.is_down(EScancodeRightArrow): speed[0] += acceleration
if keyboard.is_down(EScancodeDownArrow): speed[1] += acceleration
if keyboard.is_down(EScancodeUpArrow): speed[1] -= acceleration
if keyboard.pressed(EScancodeHash):
filename=u'e:\\screenshot.png'
canvas.text((0,32),u'screenshot kaydediliyor:',fill=0xffff00)
canvas.text((0,48),filename,fill=0xffff00)
img.save(filename)
n_frames+=1
end_time=time.clock()
total=end_time-start_time
print "%d frames, %f seconds, %f FPS, %f ms/frame."%(n_frames,total,
n_frames/total,
total/n_frames*1000.)
yakın zamanda çok daha fazla örnek ve yazdığınız kodları nasıl SIS uzantılı kurulabilir programlar haline getirebileceğiniz üzerine yazılarla burada olacağım.