iPhone push 테스트

Posted at 2011/05/13 18:41// Posted in mobile

http://code.google.com/p/apns-python-wrapper/

pem 만들기

openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
openssl pkcs12 -nocerts -out key.pem -in key.p12

# passphase 제거
openssl rsa -in key.pem -out key.unencrypted.pem

# pem 합치기
cat cert.pem key.unencrypted.pem > ck.pem




deviceToken = "~~~"

import binascii
deviceToken = binascii.unhexlify(deviceToken)
print deviceToken

from APNSWrapper import *

wrapper = APNSNotificationWrapper('ck.pem', True)

message = APNSNotification()
message.token(deviceToken)
message.alert("!!")

wrapper.append(message)
wrapper.notify()
이올린에 북마크하기
2011/05/13 18:41 2011/05/13 18:41

페이스북 억세스 토큰을 얻는 것은 트위터에 비해 조금 귀찮습니다.
브라우저를 사용해야 하기 때문입니다~
 

페이스북 억세스 토큰을 얻어내는 코드에 파이썬 브라우저 모듈인 mechanize 를 붙여보았습니다



# vi: set sw=4 sts=4 expandtab:
import os
import os.path
import json
import urllib2
import urllib
import urlparse
import BaseHTTPServer
import webbrowser
import mechanize
CODE_BEGIN = 'code='
CODE_END = '"'

APP_ID = '페이스북_앱_아이디'
APP_SECRET = '페이스북_앱_시크릿'
ENDPOINT = 'graph.facebook.com'
REDIRECT_URI = '콜백처리_URL'
ACCESS_TOKEN = None
LOCAL_FILE = '.fb_access_token'

STATUS_TEMPLATE = u"{name}\033[0m: {message}"

def get_url(path, args=None):
args = args or {}
if ACCESS_TOKEN:
args['access_token'] = ACCESS_TOKEN
if 'access_token' in args or 'client_secret' in args:
endpoint = "https://"+ENDPOINT
else:
endpoint = "http://"+ENDPOINT
return endpoint+path+'?'+urllib.urlencode(args)

def get(path, args=None):
return urllib2.urlopen(get_url(path, args=args)).read()


class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):

def do_GET(self):
global ACCESS_TOKEN
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()

code = urlparse.parse_qs(urlparse.urlparse(self.path).query).get('code')
code = code[0] if code else None
if code is None:
self.wfile.write("Sorry, authentication failed.")
sys.exit(1)
response = get('/oauth/access_token', {'client_id':APP_ID,
'redirect_uri':REDIRECT_URI,
'client_secret':APP_SECRET,
'code':code})
ACCESS_TOKEN = urlparse.parse_qs(response)['access_token'][0]
open(LOCAL_FILE,'w').write(ACCESS_TOKEN)
self.wfile.write("You have successfully logged in to facebook. "
"You can close this window now.")

def print_status(item, color=u'\033[1;35m'):
print color+STATUS_TEMPLATE.format(name=item['from']['name'],
message=item['message'].strip())


def main(email, password):
url = get_url('/oauth/authorize',
{'client_id':APP_ID,
'redirect_uri':REDIRECT_URI,
'scope':'read_stream'})

browser = mechanize.Browser()
browser.set_handle_refresh(False)
browser.set_handle_robots(False)
cookies = mechanize.CookieJar()
browser.set_cookiejar(cookies)
response = browser.open(url)
open("response.html", "wb").write(response.get_data())
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7')]


try:
browser.select_form(predicate=lambda f:"login.php" in f.action and f.method.lower() == "post")
except mechanize.FormNotFoundError:
print "WRONG_LOGIN_PAGE"
return -1

browser.form["email"] = email
browser.form["pass"] = password

response = browser.submit()
responseData = response.read()
relocationPos = responseData.find("window.location.replace")
open("response2.html", "wb").write(responseData)

if relocationPos < 0:
try:
browser.select_form(predicate=lambda f:f.action.endswith("uiserver.php") and f.method.lower() == "post")
except mechanize.FormNotFoundError:
print "RETRY_LOGIN_LATER"
return -2

response = browser.submit(name="grant_clicked")
responseData = response.read()
relocationPos = responseData.find("window.location.replace")
open("response3.html", "wb").write(responseData)


if relocationPos > 0:
tagBeginPos = responseData.find(CODE_BEGIN, relocationPos)
if tagBeginPos > 0:
tagEndPos = responseData.find(CODE_END, tagBeginPos)

code = responseData[tagBeginPos+len(CODE_BEGIN):tagEndPos].decode("unicode-escape")

response = get('/oauth/access_token', {'client_id':APP_ID,
'redirect_uri':REDIRECT_URI,
'client_secret':APP_SECRET,
'code':code})
ACCESS_TOKEN = urlparse.parse_qs(response)['access_token'][0]
open(LOCAL_FILE,'w').write(ACCESS_TOKEN)
print "LOGIN_SUCCESS"
return 0
else:
print "UNKNOWN_REDIRECT"
return -4
else:
print "INVALID_CODE"
return -3

if __name__ == '__main__':
import sys
if len(sys.argv) >= 3:
sys.exit(main(sys.argv[1], sys.argv[2]))
else:
print "USAGE:"
print "\t%s [email] [password]" % os.path.split(sys.argv[0])[1]


UNKNOWN_REDIRECT 는 뭔가 페이스 북이 특수 기능 - 이메일 친구 스캔 하기 - 을 처리하기 위해

로그인 절차와는 상관없는 페이지를 보여주는 경우가 있습니다. 이 때는 진짜 웹 브라우저를 띄워서 처리해주는 수밖에 없을 듯 합니다.

끝 ~(-_-)~

이올린에 북마크하기(0) 이올린에 추천하기(0)
2011/03/31 17:26 2011/03/31 17:26

파이썬에서 트위터 날리기 tweepy

Posted at 2011/03/31 17:11// Posted in python/py-sns

tweepy 를 사용해서 트위터 OAuth 로그인을 한 다음 타임 라인을 보는 예제입니다~


USERNAME = "아이디"
PASSWORD = "비밀번호"

import tweepy

import re
roToken = re.compile("<\w+|>|/>|</\w+>|\w+|=|\"[^\"]+\"")

def GetTagAttrd(tokens, beginTag, endTag, curIndex, endIndex):
itokens = []
try:
curIndex = tokens.index(beginTag, curIndex)
except ValueError:
return curIndex, None

if curIndex >= endIndex:
return endIndex, None

while tokens[curIndex] != endTag:
itokens.append(tokens[curIndex])
curIndex += 1

return curIndex, dict(zip(itokens[1::3], [val[1:-1] for val in itokens[3::3]]))

from urllib import *
from urllib2 import *

def Main():
CONSUMER_KEY = '트위터_앱_키'
CONSUMER_SECRET = '트위터_앱_시크릿'

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
aurl = auth.get_authorization_url()
data = urlopen(aurl).read()
lines = data.splitlines()
tokens = []
for line in lines:
tokens += roToken.findall(line)

curIndex, formd = GetTagAttrd(tokens, "<form", ">", 0, len(tokens))
endIndex = tokens.index("</form>", curIndex)
actionURL = formd["action"]

valued = {}
while True:
curIndex, inputd = GetTagAttrd(tokens, "<input", "/>", curIndex, endIndex)
if inputd:
if inputd["type"] == "hidden":
valued[inputd["name"]] = inputd["value"]
elif inputd["type"] == "text":
valued[inputd["name"]] = USERNAME
elif inputd["type"] == "password":
valued[inputd["name"]] = PASSWORD
elif inputd["type"] == "submit":
valued["submit"] = inputd["value"]
else:
print inputd
else:
break

params = urlencode(valued)
req = Request(actionURL, params)
res = urlopen(req)
data = res.read()
lines = data.splitlines()
tokens = []
for index, line in enumerate(lines):
if "div" in line and "oauth_pin" in line:
index += 1
break

verifier = lines[index].strip()
auth.get_access_token(verifier)

api = tweepy.API(auth)

if 0:
api.update_status(u"~tweepy test")
else:
for s in api.user_timeline():
print s.text.encode("utf8")

Main()
이올린에 북마크하기(0) 이올린에 추천하기(0)
2011/03/31 17:11 2011/03/31 17:11

mac python 32bit 실행

Posted at 2010/11/29 20:49// Posted in python
$ vim .vimrc

export VERSIONER_PYTHON_PREFER_32_BIT=yes


위의 내용을 추가한다
이올린에 북마크하기
2010/11/29 20:49 2010/11/29 20:49

wxPython JSON Pretty Viewer

Posted at 2010/11/29 20:44// Posted in wxPython/etc


import wx
import os
import simplejson as json

class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=(480, 640))
self.CentreOnScreen(wx.BOTH)

textCtrl = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_RICH2)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(textCtrl, 1, wx.ALL|wx.EXPAND, 0)
self.SetSizer(sizer)
self.SetAutoLayout(True)
textCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter)

self.textCtrl = textCtrl

def OnTextEnter(self, evt):
print "enter"
data = json.loads(self.textCtrl.GetValue())
text = json.dumps(data, indent=4)
text = text.replace("\\n", "")
text = text.replace('\\"', '"')
self.textCtrl.SetValue(text)

class TestApp(wx.App):
def OnInit(self):
"OnInit"
frame = TestFrame(None, "TestApp")
frame.Show()
self.SetTopWindow(frame)
return True

def OnExit(self):
"OnExit"
pass

TestApp(redirect=False).MainLoop()


Copy & Paste 후 Enter 누르면 한줄 JSON 이 이쁘게 보입니다.
이올린에 북마크하기
2010/11/29 20:44 2010/11/29 20:44

비주얼 스튜디오 UTF8-BOM 플러그인 (1)

Posted at 2010/06/27 18:33// Posted in msvc
요즘 아이폰이 인기입니다.
그래서 아이폰 프로그래밍도 인기입니다.
아이폰 프로그래밍은 매킨토시에서 해야 합니다.
매킨토시는 BSD 다시 말해 유닉스 기반 운영체제입니다.

유닉스라... 익숙하지 않습니다.
더군다나 기존에 만들었던 코드는 전부 윈도우 기반입니다.
영희 철희 크로스를 시도 해야합니다.

그런데 한가지 문제점이 있습니다.
한글 윈도우 기본 인코딩은 CP949 입니다.
유닉스의 기본 인코딩 방식은 UTF8 입니다.

파일 변환이 필요합니다.

아하!
앞으로는 UTF8 기반으로 작업하면 되겠구나!


하지만...
앞에서 말한 것처럼 한글 윈도우에서 돌아가는 MS 제품의 기본 인코딩은 CP949 입니다.
비주얼 스튜디오에서 새로운 파일을 만들면 무조건 CP949 인코딩이 됩니다.

기본 인코딩을 바꿀 방법이 없을까?
구글링을 해보면 3가지 방법이 나옵니다.


1. 비주얼 스튜디오 파일 메뉴에 있는 Advanced Save Options... 를 사용해
파일 하나 하나마다 UTF8 인코딩으로 변환한다.

2. 윈도우 기본 언어 설정을 영어로 변경한다.


3. 비주얼 스튜디오 모든 템플릿 파일을 찾아 인코딩을 UTF8 로 변경한다.
( Common 7\IDE\ItemTemplates )

참고:
http://devblog.ailon.org/devblog/post/2007/11/05/File-Encoding-in-Visual-Studio.aspx

모두 쉣 -ㅅ- 소리 나오는 방법들이네요.


왜 상식적인 방법...
예를 들면 기본 인코딩 설정이나 파일별 인코딩 태그 등을...
지원하지 않는건지 모르겠습니다; (이미 지원하고 있다면 좀 알려주세요 T_T)! 저의 검색 능력으로는 실패입니다. )


Tools/Options/Environment/International Settings


Language:
English
Same as Microsoft Windows


이런 옵션이 있음에도 불구하고 파일 기본 인코딩은 무조건 윈도우 기본 설정을 사용하는군요 =ㅁ=);; ㄷㄷㄷ;


Tools/Options/Environment/Document
[ ] Save documents as Unicode when data cannot be saved in codepage

http://stackoverflow.com/questions/696627/how-to-set-standard-encoding-in-visual-studio

게다가 현재 코드 페이지로 저장이 안되는 문자가 나올때만 유니코드로 저장시킨다는 공포의 옵션까지 ㄱ-
영어 윈도우 사용자,  한글 윈도우 사용자, 일본 윈도우 사용자가 뒤섞인 상황에서 벌어질 지옥이 생각나네요.



어쨌든 여러가지 해결책을 생각해봤습니다.


해결책1: 퍼포스를 사용한다.

퍼포스를 사용하면 파일 타입을 수정해서 unicode 형식으로 저장하고
윈도우에서는 P4CHARSET 을 UTF8-BOM 으로 설정하고
유닉스에서는 P4CHARSET 을 (BOM 이 없는) UTF8 로 설정하면 됩니다. 야호!


단점은;
일단 퍼포스를 구입해야합니다.
2개까지는 무료이고 계정당 워크 스페이스 제한은 없지만;
개발팀은 대개 2명보다 많은데다; 계정 2개로 나눠 모든 사람이 사용하면 버전 관리가 쉽지 않습니다.
결국 개발팀 숫자 만큼 사야하는데 비용이 들어가는 만큼 쉬운 결정은 아닙니다.

SVN 과 퍼포스는 완전히 다른 작업 스타일을 지원합니다.
SVN 은 일단 작업하고 나중에 커밋하지만, 퍼포스는 먼저 체크아웃하고 작업한 다음 서브밋해야 합니다.
물론 퍼포스를 써도 SVN 처럼 사용할 수는 있지만; 느리고 불편합니다 ㄱ-

unicode 파일 형식 관리가 의외로 쉽지 않습니다.
퍼포스가 자동으로 unicode 여부를 판단하는데; 오진이 많습니다.
더군다나 한번 잘못올라가면 복구가 되지 않고 새로 올려야 합니다.
(몇번 파일 에러나면 p4 typemap 을 사용해 디폴트 binary 로 설정하게 되더군요; )



해결책2: SVN 을 수정한다.

svn 에는 파일별 프로퍼티를 지원합니다.
svn:eol-style 이란 프로퍼티가 있어서 운영체제에 따라 \r\n 으로 저장할지 \n 으로 저장할지 설정할 수 있습니다.
하지만 안타깝게도 text-style 같은 프로퍼티가 없기 때문에 직접 수정한 다음 빌드해서 사용해야합니다.
능력만 된다면 훌륭한 해결 방법인데 안타깝네요 ㄱ-



해결책3: 개발툴을 수정한다.

gcc 에서 다양한 인코딩을 지원하게 하거나, 비주얼 스튜디오에서 utf8 을 사용하면 됩니다.

구글링 해보면 gcc 에서 utf8-bom 문서를 컴파일 못한다고 나와있던데;
어제 linux 와 apple 에서 테스트해보니 잘 되더군요; 문제를 호소하는 글들이 다들 2008년 글인걸 보면
최근 gcc 컴파일러에서는 버그가 수정된게 아닐까 싶습니다. (혹시 제가 잘못 알고 있는 거라면 알려주세요~ )

만약 지원 안될 경우를 대비해서 파이프를 사용해 인코딩을 변환하는 놀라운 방법이 소개되어있더군요;
(역시 코드 구루들은 대단하네요; )

애플에서 utf8-bom 이 컴파일 된다면 문제는 간단해집니다.
비주얼 스튜디오에서 utf8-bom 문서 변환만 쉽게 할수 있으면 되죠 ~(-_-)~


그래서 비주얼 스튜디오 utf8-bom 자동 붙이기 플러그인을 만들어 보았습니다! (다음에 계속... )
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/27 18:33 2010/06/27 18:33

C++ 에 대한 회의 ~(-_-)~

Posted at 2010/06/17 19:14// Posted in freetalk
IronPython 을 보고 난 다음 c# 과 .net framework 에 빠져버렸습니다~

리눅스랑 iMAC 에서 거짓말처럼 잘 돌아가더라구요 >ㅁ<)~
http://www.mono-project.com/Main_Page

아직 돌려보지는 않았지만 iPod Touch 랑 iPhone 도 지원한다고 하고
http://monotouch.net/

올해 8월쯤이면 안드로이드까지!! 두둥!
http://androidcommunity.com/novel-monoc-is-developing-monodroid-20100217/




최근 들어 C++ 에 대한 회의가 들고 있었거든요...

boost 활용의 절정이라 할 수 있는 libtorrent 의 난감한 코드라던지...;
STL 썼을때 libcmt,lib 링크 에러라던지, 바이너리 레벨 호환이 안되는 문제라던지...;
다른 언어와의 연동시 c 언어에 비해 매우 불편하다는 점이라던지..; ( C++ - C# 연동은 최악이더군요 ㄱ- )
언제든지 방심할 수 없는 메모리 릭, 크래쉬 ...;
지저분한 인터페이스...;
느린 컴파일 속도...;
쓸데없이 커다란 용량..;


boost 나 차기 c++ 표준이 추구하는 방향은 훌륭해보입니다만;
저수준 언어와 고수준 언어의 사이에서 태어난 c++ 이 가진 근본적인 모순점을 벗어나기에는 힘들어보입니다.

하드웨어와 운영체제를 담당하는 분야는 c언어같은 저수준 언어로 작성하고
컨텐츠는 스크립트 언어나 Java, c# 같은 언어로 작성하는 것이 훨씬 깔끔하죠 ~(-_-)~

컨텐츠를 작성하다 실수로 저수준 영역을 건들여 오작동이나 크래쉬를 만들어내는
과도기 언어 C++ 은 이제 역사의 뒤안길로 사라질 때가 되었다고 생각합니다.
( 물론 완전히 사라지기보다는 c 언어 보조 역할 정도 하게 되지 않을까 싶내요~ )


모든 컨텐츠가 스크립트 언어(JavaScript, PHP, ASP, Python, Ruby, ...)로 작성될리는 없을 것이고
속도나 보안을 요구하는 프로그램은 컴파일러 언어(JAVA, C#, VisualBasic, ...)가 사용될텐데,
JAVA 보다는 C# 쪽이 좀더 가능성이 있어보입니다~

거의 대부분이 플랫폼에서 실행된다는 점은 JAVA 와 C# 이 비슷하지만
가장 큰 시장을 갖고 있는 MS 의 전폭적인 지원이 있는데다,
다양한 언어를 사용할 수 있어서 이미 구축된 코드풀을 사용할 수 있다는 점도 매력입니다.

유일한 단점이 MS 외의 시장에서 거의 사용이 안된다는 점이었는데,
모노 프로젝트로 인해 거의 희석되어 버렸다는 것이 큰 호재로 작용하고 있는 것 같습니다.



ps.
요즘 C# 과 닷넷 프레임워크도 공부하고
게임 엔진 트렌드도 익힐 겸해서

nebula3 포팅중
입니다 ♡

http://dev.naver.com/projects/nebula3dotnet/

닷넷 프레임워크에서 지원하는게 많아서 의외로 쉽게 되네요~ ㅎㅎ

IronPython 연동도 해봤는데... 오오 -ㅅ-; 빌드만 한번 더 해주면 끝이네요~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/17 19:14 2010/06/17 19:14

IronPython 3D 프로그래밍 프레임워크

Posted at 2010/06/10 21:14// Posted in IronPython
IronPython 을 사용하는 목적은 아무래도 "한번 작성해서 모든 플랫폼에 적용하자" 일 것입니다.
멀티 플랫폼하면 아무래도 Mono + OpenGL 이겠죠?

모노에서 사용가능한 3D 프로그래밍 프레임워크를 찾아보니
http://www.mono-project.com/Libraries
  • Tao
  • OpenTK
  • Orge.NET
  • Irrlicht NETCP
  • Axiom 3D
  • GtkGLAreaSharp
위와 같은 것들이 있는데...

OpenTK 쪽이 제일 만만해보이는군요.
http://www.opentk.com/

설치한 다음 바이너리 폴더에서 OpenTK.dll 파일을 가져와 IronPython 폴더에 복사해주면 준비 끝입니다 -_-)/

사용자 삽입 이미지

사용 방법도 간단하네요~

more..



의외로 쉽게 별 문제없이 결과를 확인해 볼 수 있네요 ~(-ㅁ-)~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/10 21:14 2010/06/10 21:14

IronPython 간단한 윈도우 만들기

Posted at 2010/06/10 19:10// Posted in IronPython
http://www.zetcode.com/tutorials/ironpythontutorial/firststeps/

처음 만들어 본 예제입니다~

사용자 삽입 이미지


그냥 화면에 윈도우를 만드는 소스입니다~

소스 보기

more..



이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/10 19:10 2010/06/10 19:10

IronPython-2.6.1

Posted at 2010/06/10 18:10// Posted in IronPython

http://ironpython.net/

오오 -ㅁ-; iron python 1.x 의 허접함에 실망해서 거의 신경 쓰지 않고 있었는데...


엄청나게 강한 모습으로 다시 돌아왔습니다.

최근 앞으로 변화되는 플랫폼에 대응하기 위해 아래 3가지로 고민하고 있었는데...

1. HTML5 + JavaScript

2. FLASH + Action Script

3. Unity3D + JavaScript, CLR 언어

4. nebula3 + C++



사실 마음에 내키는게 별로 없었거든요.

HTML5 는 핵심인 canvas 기능에 대해 MS 가 딴청부리는 중인데다;
JavaScript 무조건 소스 공개 스타일이 게임에는 적합하지 않아보였고


FLASH 는 애플에서 노골적으로 거부를 하는 상황이죠;

Unity3D 는 과연 커스터마이징이 어느정도 될 것인가... 문제 발생시 대처가 어느정도나 가능할까...
(무엇보다 설치 후 툴이 실행 안되는 모습에 신뢰도가 -ㅅ-;; DEP 문제라는 것 같은데... )

nebula3 는 코어는 맘에드는데 최근 업데이트가 거의 없는데다가;
과연 다른 플랫폼에 대응하려면 엄청난 노력이 필요할것 같더군요.




제가 생각하는 프로그램을 만드는 가장 좋은 방법은

일단 스크립트 언어로 편하게 프로토 타입을 만든 다음
필요한 부분만 저수준 언어로 확장 모듈을 만드는 방법이거든요.


그런데 c 나 c++ 만 10년 정도 하신 분들은 새로운 언어에 대한 두려움아 꽤 많은 것 같더라구요.
더군다나 통합 디버깅 환경도 지원이 안되면... 모르겠다 -ㅁ-)~ 이런 결과가...;

이런 점에서 IronPython-2.6.1 버전은 꽤 괜찮은 솔류션으로 보입니다.

홈페이지 첫화면에 떠있는 대형 문구!

IronPython Tools


for Visual Studio 2010


오오 -ㅁ-);

다운로드 받아서 돌려보니

단독 실행 파일 생성 을 지원하더군요!!



ipy.exe Tools\Scripts\pyc.py /out:test /target:exe /main:test.py /platform:x86


Windows 뿐만 아니라 Mono 가 지원되는 유닉스 계열 운영 체제나 모바일 운영체제도 지원되죠
동일한 바이너리로 말이죠! -ㅁ-)! 오오;


파이썬 모듈은 ctypes 도 가능!


IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.4927
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> ctypes.cdll.msvcrt.puts(b"HAHA")
HAHA
0
>>>


ctypes 가 된다는 말은 .NET 안쓰고
기존에 c/c++ 로 작성된 dll 을 그냥 불러와서 사용할 수 있다는 이야기거든요! 확장 모듈 만들기가 쉽다는 말이죠

>ㅁ<) 와하하~



멀티 코어 시대에 GIL 때문에 난감한 CPython 과는 달리


멀티 쓰레딩도 어느정도 지원한다는 것 같고요~



다만 몇가지 문제가 있긴 한데...

그중 하나가 성능입니다.

2008 년 성능 비교 (음... ;; )
http://ironpython.codeplex.com/wikipage?title=IP20VsCPy25Perf&referringTitle=IronPython%20Performance&ProjectName=ironpython


2010 년 성능 비교 ( 아아-_-;; )
http://ironpython.codeplex.com/wikipage?title=IP261Net20VsCPy26Perf&referringTitle=IronPython%20Performance

2년이 지난 결과가 오히려 더 안 좋다는건 그만큼 CPython 성능이 좋아진걸로 받아드리도록 하죠. 흠흠;;


개별 성능 비교를 보면 극단적인 결과를 찾아볼 수 있습니다.

빠른건 2배 가까이 빠른데

느린건 (구체적으로 말하면 문자열 처리-_-) 2배 이상 느리네요;;


열심히 최적화하다보면 언젠가는 빨라지지 않을까 기대해 봅니다.
(왜 이렇게 느린지는 소스를 한번 뜯어 봐야 할 듯 합니다)



두번째 모듈은 아직까지 Python 모듈 포팅이 완벽하지 않습니다.
자주 사용되는 모듈 중심으로 70% 정도 진행된것 같은데...

신기하게도 제가 자주 사용하는 expat 이 빠졌더군요 T_T)~


덕분에 xml.dom.minidom 을 사용 못하고 있습니다 orz;


스크립트 언어를 쓰는 이상 느리거나 없는 건 만들어 쓰는게 당연하니
큰 문제는 없으리라고 생각됩니다~

이런 이유로 오늘부터 저는 IronPython 의 세계로 들어가겠습니다. 햐햐 -ㅂ-)~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/10 18:10 2010/06/10 18:10
1 2 3 4 5 ... 23