메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

휴대폰 S60의 파이썬

한빛미디어

|

2005-05-16

|

by HANBIT

13,140

휴대폰 S60의 파이썬

저자: John Littler / 주재경 역
원문: http://www.onlamp.com/pub/a/python/2005/04/14/s60.html


2004년 크리스마스 무렵 노키아는 심비안시리즈 60휴대폰에서 동작하는 파이썬 버젼을 발표하였다. 흥미롭긴 하지만 과연 이것이 쓸모있는 것일까? 노키아는 프로토타입 개발, 교육 그리고 응용프로그램 개발을 이번 버젼 발표 목적으로 설명하였다. 주요대상은 60시리즈의 리소스와 고유의 특징을 사용하고자 하는 응용 개발자들이다.

과연 이것은 무엇일까?

파이썬은 내장된 객체 타입,자동메모리 관리,내장된 다양한 툴, 라이브러리와 써드 파티 유틸리티 등의 특징을 가지는 객체지향 스크립트 언어이다. 오라일리는 Learning Python을 포함하여 여러 관련 서적을 출판하였다.

이 프로젝트를 다운로드 하기 위해선 노키아의 Python for series 60페이지를 방문해보라. 다운로드 하기전에 포럼에 가입해야 한다.

제공되는 내용은 다양한 60시리즈 SDK와 실제 폰에서 실행되는 패키지들로 구분된다. SDK에 관한 더욱 상세한 정보를 원한다면 그리고 특히 리눅스에 관심있는 독자라면 나의 이전 글을 살펴보라.

폰에서 동작하는 패키지는 콘솔과 다양한 스크립트를 포함한다. 이전에 이러한 것을 알았다면 폰에서 파이썬 프로그램과 디버깅을 하고 블루투스나 이메일로 다른 곳으로 파이썬 코드를 보낼 수 있었을 것이다.

노키아 6600과 같은 폰이 가지는 하나의 특징으로, 단지 드라이버를 다운 받는 것 만으로 포켓PC의 미니 적외선 키보드를 동작하도록 할 수 있다. 폰상에서 실제로 가능하다. mstation.org은 노키아 6600에서 setup한 과정을 그림으로 보여 주고 있다.

또다른 사용예는 블루투스 콘솔을 사용하는 것이다. 이것은 사용자의 PC를 폰상의 파이썬 환경에 직접 연결하므로 사용자가 시험과 디버깅을 할 수 있다. 윈도우 SDK 사용자는 에뮬레이터를 사용할 수도 있다.

인스톨과 스크립트 실행

블루투스, 적외선 통신 혹은 이메일을 사용하여 폰으로 스크립트를 전송하고 콘솔에서 스크립트를 실행한다. 스크립트는 또한 60시리즈의 애플리케이션 형태로 만들어 질수도 있으므로 폰상의 일반 애플리케이션으로 취급되기도 한다. 이것은 콘솔없이도 애플리케이션을 실행할수 있음을 의미한다. 불행히도 이런 작업을 할수 있는 툴은 윈도우용만 있다. 그러나 응용프로그램을 작성한다는 것은 정보를 저장하는 일련의 파일을 생성한다는 것만을 의미한다. 비 윈도우 솔루션은 곧 지원 될 것이다.

파이썬에서 Hello World 프로그램은 아래와 같다:

print "Hello Kernighan and Ritchie!"

이걸로 그만이다. 어떤 import도 없으며 그외의 어떤 다른 작업도 없다. 라인의 끝에 세미콜론(;)도 없다. 콘솔에서 타이핑을 하고 Enter키를 치면 실행된다. 그러나 GUI환경에서 프로그램 하고자 한다면 다음과 같이 작성해야 한다.

import appuifw
appuifw.app.title = u"Hello K and R"
appuifw.note(u"Hello Kernighan and Ritchie!", "info")

이 소스는 화면 상단에 "Hello K and R"를 표시하고 바로 그 아래에 입력한 문자를 표시한다. appuifw는 S60과 인터페이스하는 클래스이다. 당신도 알다시피 이 클래스는 실제로는 아주 잘 동작하지는 않는다 할 지라도 GUI프로그램을 위한 아주 작은 분량의 코드이다.

포함된 스크립트

S60용 파이썬은 간단한 파일 브라우져,앞서 언급한 블루투스 콘솔, 스포츠 다이어리 그리고 날씨 정보스크립트를 포함하고 있다. 사용자는 스크립트를 통해 이미 작성한 메세지중 하나를 선택한 다음 그것을 송신하도록 할 수 있다. 심비안 인터페이스를 알 수 있는 몇 가지의 좋은 예가 여기 있다. 노키아 포럼의 examples/ 디렉토리에서 이 코드 전체를 볼 수 있다.

import appuifw
import e32

old_title = appuifw.app.title
appuifw.app.title = u"SMS sending"

데이터를 송 수신하는 그 순간에 이를 유지하고 있는 데이터베이스에 액세스 하고자 할때 이름과 번호 필드를 set up하는 방법은 아래와 같다

class NumbersView:
    def __init__(self, SMS_multiviewApp):
        self.SMS_multiviewApp = SMS_multiviewApp
        self.dict             = [(u"Jim", "55512345"), (u"Jane", "55567890")]
        self.names            = [item[0] for item in self.dict]
        self.numbers          = [item[1] for item in self.dict]

        self.numbers_list     = appuifw.Listbox(self.names, self.handle_select)
        self.index            = None
        appuifw.app.body      = self.numbers_list

선택할 메세지와 몇가지의 setup에 대한 코드:

class ChoiceView:
    def __init__(self, SMS_multiviewApp):
        self.SMS_multiviewApp = SMS_multiviewApp
        self.texts   = [u"I am late",
                      u"What is for dinner?",
                      u"Do you need anything from the supermarket?", 
                      u"How about a round of golf after work?"]
        self.listbox = appuifw.Listbox(self.texts, self.handle_select)

    def activate(self):
        appuifw.app.body = self.listbox
        appuifw.app.menu = [(u"Select", self.handle_select),
                            (u"Send", self.handle_send)]
        
    def handle_select(self):
        i = self.listbox.current()
        appuifw.note(u"Selected: " + self.get_text(),"info")

    def handle_send(self):
        appuifw.app.activate_tab(3)
        self.SMS_multiviewApp.handle_tab(3)

    def get_text(self):
        return self.texts[self.listbox.current()]

class SendView:
    def __init__(self, SMS_multiviewApp):
        self.SMS_multiviewApp = SMS_multiviewApp
        self.log_text         = appuifw.Text()
        self.log_contents     = u""
        
    def activate(self):
        self.log_text.set(self.log_contents)
        appuifw.app.body = self.log_text
        appuifw.app.menu = []
        nbr = self.SMS_multiviewApp.get_number()
        txt = self.SMS_multiviewApp.get_text()
        nam = self.SMS_multiviewApp.get_name()
        if appuifw.query(u"Send message to " + nam + "?", "query"):
            t = u"Sent " + txt + " to " + nbr + " (" + nam + ")\n"
            self.log_contents += t
            self.log_text.add(t)
            # messaging.sms_send(nbr, txt)

class SMS_multiviewApp:
    def __init__(self):
        self.lock = e32.Ao_lock()
        appuifw.app.exit_key_handler = self.exit_key_handler
        
        self.n_view = NumbersView(self)
        self.c_view = ChoiceView(self)
        self.t_view = TextView(self)
        self.s_view = SendView(self)
        self.views  = [self.n_view, self.c_view, self.t_view, self.s_view]
        appuifw.app.set_tabs([u"Numbers", u"Choice", u"Text", u"Send"],
                             self.handle_tab)

소켓관련 부분을 처리하는 블루투스 콘솔 스크립트:

sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)

#좀더 빠른 시작을 위해서 연결할 주소와 포트는 여기에.
target="" #("00:20:e0:76:c3:52",1)
if not target:
    address,services=socket.bt_discover()
    print "Discovered: %s, %s"%(address,services)
    if len(services)>1:
        import appuifw
        choices=services.keys()
        choices.sort()
        choice=appuifw.popup_menu(
            [unicode(services[x])+": "+x for x in choices],u"Choose port:")
        target=(address,services[choices[choice]])
    else:
        target=(address,services.values()[0])        
print "Connecting to "+str(target)
sock.connect(target)
socketio=socket_stdio(sock)
realio=(sys.stdout,sys.stdin,sys.stderr)
(sys.stdout,sys.stdin,sys.stderr)=(socketio,socketio,socketio)


미래의 가능성

시리즈60에서 파이썬을 사용하는 사람들과 얘기를 하면서 떠오르는 첫번째 아이디어는 폰의 데이터베이스에 이미 있는 데이터에 추가하거나 재구성하는 것이었다. 그러나 이것이 공식적으로 가능하지 않다는 것을 곧바로 알았지만 여전히 역 엔지니어링을 통해 이러한 시도를 하는 사람들이 있으며 이것은 이들의 발전에 꽤 도움이 되는것 같아 보인다. 흥미롭게도 some folks in the Java sandpit는 다양한 데이터베이스에 접근하는 방법을 발표하기 시작했다. 파이썬도 곧 이를 지원할 것 같다.

forum.nokia.com에서 필요한 정보를 가지고 있는 괜찮은 곳은 PythonForSeries60 Wiki이다. 상당히 많은 흥미로운 프로젝트들이 여기에 언급이 되어 있다.

위의 예제들은 파이썬이 다루기에 상대적으로 깔끔하고 간결한 언어라는 것을 보여준다. 심비안 인터페이스는 배우는데 시간이 좀 걸린다. 당신이 게으르다고 생각한다면 파이썬 스크립트를 작성하기 위해 당신의 폰상에서 바로 이것을 사용할 수 있다.

[역자]
주재경 / jkjoo@teleware21.com
휴대폰을 개발하고 있으며 리눅스, Network, Embedded System에 관심을 가지고 있다.
TAG :
댓글 입력
자료실

최근 본 상품0