망할 윈도우... BMP 쓰기가 너무 싫어 몇시간을 삽질했다..


GDI+ 를 사용하므로 

gdiplus.lib 

를 프로젝트 속성 - Linker - Input - Additional Dependencies 에 넣어주고


#include <gdiplus.h>

using namespace Gdiplus;


를 코드 상단에 적어주자.





위 코드로 

HBITMAP hBitmap = LoadPNGToHBITMAP(MAKEINTRESOURCE(IDB_PNG));

와 같이 이미지를 불러온 후에


WM_PAINT 메세지에서 아래 더보기와 같이 그려주면 된다.

사이즈는 원래 구하는 코드가 있었는데, 난 필요없어서 제거함. 그정도는 구글링하자.(후에 내 자신을 원망하겠지..)




* VS 2015 에서 VS 2010 의 컴파일러를 사용하여, Win XP SP3 및 Win 7 SP1 에서의 작동을 확인하였다.


'개발개발 > 기타' 카테고리의 다른 글

Python euc-kr 인코딩 변환 및 길이 계산하기  (0) 2016.04.03
[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15

뭐.. 다들 한번씩 겪는 것 같은데, 리모트 푸시의 Token 을 제대로 못 받아오는 문제..


Target Provisioning Profile 에서 push 용으로 받은거 잘 골라주고,

iOS8 에서 변경된 푸시 등록 방법을 사용하면 잘되야 정상이다. (각각 방법은 알아서 찾아보기.)


Push 세팅을 리셋해주고 다시 하니까 잘 되던데,

Apple 에선

1. 앱을 지우고

2. 재부팅을 하고

3. 날짜를 하루 당겼다가 돌아오고

4. 재부팅


이라고 안내하는데, 난 이게 귀찮아서,,, 탈옥폰의 장점은 이게 아니겠는가!


/var/mobile/Library/BackBoard/applicationState.plist

에서 해당 앱과 관련된 키를 지워버리고 BackBoard 를 재시작 한다.


$ killall backboardd


그리고 다시 앱을 시작하면 푸시 권한을 다시 물어보고, 허용해주면 잘 됨!




Tistory 에서 뭐가 바뀌었는지 모르겠지만,

최근에 Surrounded 스킨을 쓰는 블로그들이 하나같이 이렇게 변해버렸다..


귀찮아서 냅두고 있었는데, 생각이나서(시험기간이니) 수정해보았다.


관리 - HTML/CSS편집 메뉴에서 아래 style.css


사진과 같은 곳을 찾아, 드래그한

padding-right: 16px;

부분을

padding-right: 15px;

로 변경한다.


그러면 현재 내 블로그 상태처럼 정상으로 돌아옴.

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
python to exe  (2) 2015.02.25
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15
XCode4 업데이트  (1) 2011.03.11

아무래도 python 으로 프로그램을 짜기가 쉽다.


라이브러리가 많기도 하고...

윈도우 프로그램 개발할 일이 있었는데, c++ 로 개발하긴 귀찮아서 파이썬을 택했다.

(그냥 c++ 할걸 하는 후회도 약간 있긴 하지만 여튼.)



GUI 제작은 wxPython 을 사용하였고..

맥에서 주로 테스트를 하다가 윈도에서 한번씩 확인해보는 방식으로 개발하였다.

뒤늦게 알았는데, sys.platform 값을 darwin /win32 로 분기해서 구분하면 좀 더 편함.



마지막으로 만든 파이썬 스크립트를 배포용으로 만들 필요가 있었는데 여기서 애를 먹었다.


우선 난 Python 2.7.


처음에 py2exe 를 시도하였으나 안됨.


그 다음으로 cx_Freeze 를 사용하였는데 만들어지긴 하나 라이브러리 파일들이 덕지덕지 튀어나온다.

패커? 같은걸로 해보려 했으나 뭔가 잘 못찾겠어서 패쓰.

아래 문서의 도움을 잘 받았당

http://stackoverflow.com/questions/20754180/cx-freeze-bundling-files



그래서 그 다음으로 선택한게 PyInstaller.

처음 설정하기가 뭔가 좀 애먹었긴 한데 잘 된다.


단지, onefile 옵션을 주면 실행할 때 리소스를 임시폴더에 푼 다음 실행을 하는 것 같다.

프로그램 상에서 리소스를 불러올 때 resource_path 를 따로 계산해줘야 함.

http://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile

이 글을 참고하자.


(PyInstaller 기준) icon 파일은 .spec 파일에 기술했을 경우에 알아서 포함한다.


* 그런데... PyInstaller 는 만들고 난 결과 파일이 있는 경로에 한글이 섞여있으면 에러가 난다....ㅂㄷㅂㄷ....

Python 으로 exe 만들기 뭔가 험난하네....ㅠㅠㅠ


'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
[XCode5] 부분적으로 MRC 사용  (0) 2013.12.15
XCode4 업데이트  (1) 2011.03.11


1. MySQL 설치 및 시작

MySQL 홈페이지( http://dev.mysql.com/downloads/mysql/ ) 에서 dmg 로 다운받아 설치.

10.10 요세미티라면, 10.9 가 아니라 10.8 용 버전을 받자.


설치 후 소켓을 위해 아래 명령어 실행한다.

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock


서버 시작 / 종료는..

sudo /usr/local/mysql/support-files/mysql.server start

sudo /usr/local/mysql/support-files/mysql.server stop


접속은

/usr/local/mysql/bin/mysql


난 cui 로 쓸일이 없어서 그냥 저렇게 한두번 쓰고 말거지만, 자주 쓸거면 환경변수에 경로를 넣어두자.


여튼 /usr/local/mysql/bin/mysql/mysql -u root 로 접속 후 (만약 안되면 sudo)


UPDATE mysql.user SET Password=PASSWORD('패스워드') WHERE User='root';

FLUSH PRIVILEGES;


로 root 패스워드를 설정해준다.



그 다음으로는 /usr/local/mysql/my.cnf 파일을 수정한다. utf8 설정을 위해...!!

이 파일을 /etc/my.cnf 혹은 /etc/mysql/my.cnf 로 복사해서 수정해도 될...걸?


여튼 파일을 열어서 아래 더보기 내용을 써둔다.




2. PHPMyAdmin 다운로드

PHPMyAdmin 홈페이지 ( http://www.phpmyadmin.net/ ) 에서 다운,

압축을 풀고 Document Root 에 넣어둔다. 폴더명도 적당히 입력하기 좋게 바꾸고...

Document Root 를 모르겠으면 일단 대기. 밑에 있음



3. Mac 의 웹서버 및 php 활성화

이건 내가 예전에 글을 썼던게 있다. 참고.

Mac 내장 웹서버 활성화 하기 (웹 공유) (2013/09/05)

맥 내장 php 활성화 하기 (2011/01/08)


user directory ( ~/Sites ) 는 모듈이 주석처리된건가..? 뭐 그런것 같으니 php 활성화 방법처럼 활성화 해줘도 되겠지만,

난 userdir 안쓰니 패쓰.

document root 는 php 활성화 글에도 있지만,

/Library/WebServer/Documents/


root 권한 폴더라, 작업하는데 조금 번거로우니 그냥 권한을 바꿔두는 것도 나쁘지 않다.


4. phpmyadmin 설정

맥의 웹서버를 켰고, php 를 활성화 했으며,

phpmyadmin 폴더를 도큐먼트 루트로 이동하고, mysql 을 정상적으로 시작했다면 다음 단계로!


도큐먼트 루트로 옮겨둔 phpmyadmin 폴더 하위에 config 폴더를 만들고 chmod 777 config 을 준다.


그다음 http://localhost/phpmyadmin/setup 으로 접속


새 서버 -> 인증 방식을 cookie -> 적용 -> 저장

하면 config 폴더 안에 config.inc.php 파일이 생겨 있다.

이 파일을 phpmyadmin 폴더 안으로 옮기고 config 폴더는 삭제. (setup 폴더도 삭제해도 됨.)


그 다음 phpmyadmin/examples 폴더로 이동하여

/usr/local/mysql/bin/mysql -u root -p < create_tables.sql


자, 이제

http://localhost/phpmyadmin 으로 들어가서,

root / 설정한 패스워드 로 로그인을 한다.


그 다음 사용자 탭 - phpmyadmin 사용자를 생성하고

phpmyadmin 테이블에 대한 전체 권한을 준다.


phpmyadmin/config.inc.php 에 아래 더보기 내용을 추가




다 했으면 phpmyadmin 을 로그아웃했다가 재 로그인 해보자.


하단에 에러메세지가 나오면 알아서 해결 ㄱㄱ




References

http://miconblog.com/archives/2014/11/mac에서-mysql-설치와-실행-그리고-몇가지-유의사항/

http://nsnotification.blogspot.kr/2013/05/phpmyadmin.html

http://link2me.tistory.com/486

http://jinifactory.tistory.com/10






'개발개발 > Mac, iOS' 카테고리의 다른 글

iOS Push 인증서 pem 변환하기  (0) 2016.07.17
APNS device token 받아오지 못하는 문제  (0) 2015.07.02
IPC on iOS7 with Evais0n  (11) 2014.02.08
BadaSori - 소리바다 for Mac  (10) 2013.12.15
[Mac] 독에서 아이콘 없애기  (0) 2013.12.15

IPC, Inter Process Communication..


말 그대로 프로세스 간에 통신을 위한 방법이다.

예전에 deVbug 님 글에 몇가지 소개가 있었는데 ... IPC (Inter Process Communication) in iOS


나도 이것에 대해 잠깐 끄적여 볼까 한다..

BeeKeyboard 의 온갖 버그의 주범이자, BeeKeyboard 가 iOS7 대응하는데 2달이나 걸리게 한 장본인이기도 하다.. orz


IPC 자체에 대해 쓰기보다는, iOS7 의 강화된 샌드박스에 의해 IPC 를 제대로 사용하지 못하면서 생긴 문제와 그를 풀어갔던 삽질.. 에 대해서 써볼려고...

BeeKeyboard 업데이트 일기..? 의 느낌으로 써보려 했으나 글의 목적에 어긋나는 것 같아 

BeeKeyboard 보다는 IPC 자체의 삽질에 좀더 초점을 맞춰보려 한다.

일대기.. 식으로 회상하면서 써내려 갈 거임!! ㅋㅋㅋ


시작하기 전에 IPC 에 대해 잠깐 정리.

- mach_msg : 기본적으로 모든 IPC 는 mach_msg 라는걸 기본으로 한다. 그런 만큼 얘는 매우 low level 이고, 메세지 하나 보내는데 20줄 가까이를 요구한다.. 래핑하지 않으면 더럽게 쓰기 어려운 녀석이지.. Ryan Petrich 의 LightMessaging 이 얘를 래핑했다. 나의 경우 BoatMessaging 이라는 녀석으로 래핑해서 사용 중.

- CFMachPort : mach_msg 에 쓰이는 mach_port_t 를 위한건데.. 한단계 래핑했다기 보다는 그냥 같이 쓰인다

- CFMessagePort : 좀 쓸만하게 래핑된 프레임워크. 양방향 메세징을 지원하며 내가 주로 사용했다ㅋㅋ

- CPDistributedMessagingCenter : 마찬가지로 양방향 메세징을 지원하며, CFMessagePort 보다 한층 더 쓰기 쉬우나, 자질구레한 문제가 많이 일어난다. 내가 제대로 못써서 그런거일 수도 있고...BeeKeyboard 의 iOS5 시절에 사용했었다.


뭐 이정도..? 당연히 더 있지만 일단 지금 글에선 필요없다.



1. iOS7 의 강화된 샌드박스

그냥 더 많은게 안된다. 시스템 로그를 보면, 앱스토어 앱이나 시스템 기본 데몬들도 sandbox 에 의해 좌절하는 로그를 무수히 쏟아낸다...

특히 CFMessagePort 의 경우 본래 앱스토어 앱에선 사용 못할텐데 맥 레퍼런스에서

"This method is not available on iOS 7 and later—it will return NULL and log a sandbox violation in syslog."

라고 친절히 알려주기 까지 한다..  ( 출처: 애플 레퍼런스 )


2. 근데 왜 제목에서 with Evais0n??

사실 BeeKeyboard 는 본래 iOS7 탈옥이 나오기 전에 winocm의 opensn0w 를 이용한 아이폰4 반탈로, iOS7 에 대한 대응이 되어 있었다.

탈옥할 때 탈옥툴 개발자들이 sandbox 를 깨주는데(그래야 트윅이 사용가능 하므로) 이 작업을 evais0n 탈옥팀은 뭔가 반틈만 한게 아닌가.. 라고 생각하고 있다. 물론 1번의, Apple 의 강화된 샌드박스도 한 몫할 것이고.


3. 삽질의 시작.

진짜 처음엔 답이 없어보였다.. 자고 깨고 자고 깨고(일이 잘 안풀리면 급격히 졸려서 1~2시간쯤 자고 일어난다)를 반복하며 1주일 가까이를 헤맸었던 것으로 기억한다.(심지어 이땐 RocketBootstrap 이 없거나, 개발 중이였다)

요즘 오전 6~7시에 취침 하고 오후에 일어나는, 6시간쯤 비틀린 삶을 사는데 그 원인이 여기에 있나니...

여튼 sandbox 에 의해 막히지만, privileged process, 즉 backboardd 나, SpringBoard, 혹은 Preferences 같은 시스템 앱들은 정상 사용이 가능하다. 하지만 난 일반적인 앱 모두에서의 사용을 필요로 했다. 단방향이 아닌 양방향.


4. XPC, WaveMessaging!

처음으로 가능성의 빛을 본 건 xpc. iOS5 정도 부터 iOS 에 들어간 것으로 보이고, 맥에서 IPC 로 애플이 추천하는 방법이다.

양방향 통신도 가능하고... 데이터형을 모두 xpc_object_t 를 사용해서 변환작업이 있다는 것만 제외하면 쓸만했다.

하지만 이 방법의 단점은 plist 에 특정 이름을 쓸거라고 미리 지정을 해 줘야 한다. 그렇지 않으면 사용할 수 없음...

launchd 가 관리하기에 후킹도 불가능하다...

그래서 난 원래 시스템이 사용하는 xpc 를 빌려, 적절히 후킹해서 사용하기로 했다.

그 결과물이 WaveMessaging. 좀더 자세한 방법은 써봤자 모를테니 패스..

open source... 지만 쓸 일 없을거다.. 써서도 안되고. 혹시나 xpc 를 쓸 일이 있으면 참고가 되려나? 

소스: https://github.com/iolate/WaveMessaging


5. Optimo의 리젝...orz

SimulateTouch, BeeKeyboard, QuickKakao 프로토버전 등, IPC 가 필요한 앱에 모두 이식을 해 보았다.

결과는 대 성공! 모두 정상작동 하고 큰 문제도 없어보였다.

일단 WaveMessaging 패키지만 먼저 BigBoss 에 업로드 하였으나 돌아온 대답은 No!

이미 RocketBootstrap 이라는, 같은 목적의 패키지가 있으니 이것과 합치는 방향으로 가라는 것이다.

당시 RocketBootstrap 은 SpringBoard 를 기반으로만 작동하였고, LightMessaging 이 사용하는, mach_msg 와 이미 문제때문에 사용하지 않는 CPDistributedMessagingCenter..정도만 지원하였기에 나의 경우엔 쓸 수 없었다.

Optimo 에게 요구해 보았지만, 돌아온 대답은 "Ryan 과 잘 얘기해서 RocketBootstrap 으로 합치거라."


6. Ryan 의 CFMessagePort 지원

Ryan 은

1. CFMessagePort 혹은 xpc 를 지원하고 2. daemon 등에서도 사용가능 하게 해주겠다.

면서 몇일만 기다려 달라고 했다.

별 수 있으리.. 기다렸다. 며칠 후 RocketBootstrap 은 CFMessagePort 를 지원하였고, 잘 작동하는 듯 보였다.

하지만 일이 이렇게 쉽게 풀렸으면 이 글을 시작하지도 않았다..ㅠㅠ

일반 App -> SpringBoard, backboardd 는 정상적으로 사용이 가능해 졌지만, SpringBoard, backboardd -> App 은 사용이 불가능 했다!

App 위에서 CFMessagePort 의 서버를 돌렸는데 mach_lookup 뿐만 아니라 mach_register 까지 sandbox 에 의해 막히면서 크래시....

SimulateTouch 의 경우 이정도 만으로 충분히 사용이 가능했지만, BeeKeyboard 와 후에 만들 빠른 답장 트윅에선 곤란했다.

Ryan 에게 요구했으나 이건 자기도 어쩔 수 없다며, 다른 방법을 찾으라고 했다..


7. 결국 mach_msg

Ryan 이 나에게 왜 그런 기능들이 필요하냐고 물었다. 그래서 나는 BeeKeyboard 의 동작 원리와, 후에 만들 빠른 답장 류의 앱에 대해 간략히 설명해줬다. 음.. 여기는 말로 풀어내기 복잡하니 대충 건너뛰고 결론은

1. timeout 기능은 mach_msg 로 가능하다

2. xpc 또한 mach_msg 로 만들어 졌다. 니가 xpc 에서 사용하던건 mach_msg 로 구현이 가능하다


.... 별 수 있나.. mach_msg 로 시도했다.

xpc 를 떠올리며 최대한 흡사하게 흉내낸 후, 결과는 성공.

Ryan 의 LightMessaging 의 소스를 많이 참고하였지만, 그래도 생각보다 쉽게 해결되서 상당히 허탈했던 기억이....

Ryan 에게 확인을 구하니 접근은 정확하게 맞았고, 방법에 약간의 수정을 가하면 된다고 하였다.

이렇게 해서 mach_msg 로 내가 원하는 기능을 정확히 구현...

위에 말했듯이, mach_msg 를 그대로 사용하는건 토나오므로, BoatMessaging 이라는, CPDistributedMessagingCenter 와 CFMessagePort 의 사이.. 정도 수준으로 래핑한 스태틱 라이브러리를 만들었다.


이걸로 IPC 해결!!!



이렇게 까지 오는데 한달 넘게? 거의 두달? 여튼 엄청난 시간을 쏟아 부었던 것 같다..ㅠㅠ

BoatMessaging 의 소스나 하다못해 라이브러리라도 어디 올릴까 했지만,

살짝 꼼수스러운 라이브러리이기도 하고, 레퍼런스 등을 만들기 귀찮아서 일단은 그냥 나 혼자 쓰고 있다.


혹시나 필요하시면 연락주세요..ㅋㅋㅋ 기쁜 마음으로 공유해드립니다! ㅋㅋㅋ

이래봤자 요구할 만한 사람은 상당히 한정되어 있지만....

탈옥 개발자에, 한국어 사용자.. 몇이나 되겠어? 


만들 당시 Source Control 켜서 쓰고 있었길래 그냥 그대로 github 에 올렸다.

주소는 https://github.com/iolate/BoatMessaging

static library 에,, rocket bootstrap 을 필요로 하므로, 사용하려면 LDFLAGS 에 -lboatmessaging -lrocketbootstrap

둘다 해줘야 함...


여튼,, 수능이 끝난 잉여로운 고3이였기에 해결이 가능했던 것 같다..




바다소리(맞춤법상으론 "바닷소리"가 맞습니다)는 Mac 용 소리바다 플레이어입니다.


기존의 웹플레이어를 이용해 만들었으며, (당연히) 비공식 어플리케이션입니다.

(고로 별 문제 없으리라 믿지만, 갑자기 작동이 안되거나 사라질 수도...)


http://badasori.iolate.kr/

이 링크를 보고 오시면 어떻게 생겼는지 이해가 가실거에요.


다운로드는 여기

(혹은 위 페이지)


이 플레이어를 만든 이유는

1. 웹플레이어 형태가 웹 서핑시 불편하다

- 새 창을 띄우기 위해 손을 한번 더 쓰거나 실수로 꺼버리는 상황이 발생


2. 키보드 단축키 사용을 위해서


3. 웹으로 인한 자잘한 불편함


4. 맥용 Bugs 플레이어를 고등학생이 만들었다고 기사까지 난거보고

-그리고 수능 친 잉여지만 나도 아직 고등학생.......



아직 불편한 점도 많고 개선할 부분도 많지만 조금씩 개선해나갈 생각입니다.




재생목록과 관련된 부분은 미니플레이어에 있는 소리바다 로고를 누르면 나타나는 소리바다 웹에서 해결해 주셔야합니다..


또한 상태바의 소리바다 아이콘을 우클릭하면 로그인과 설정을 할 수 있는 메뉴가 나타납니다.



감사합니다~!!



ps. 근데,, 소리바다를, 그것도 맥에서 쓰는 사람은 많지 않을 것 같은데 말이죠.....

ps2. 형이 Genie 버전을 내놓아라고 강요하고 있어서 곧 Genie 용 플레이어도 만들어질 수도...


Version 1.0 (2013.12.15) :

최초 버전

미니 플레이어 - 현재 재생 정보, 컨트롤(재생, 다음곡, 이전곡, 시간 탐색, 볼륨, 반복, 셔플)

알림센터 지원

맥용 키보드의 미디어 키(재생, 다음곡, 이전곡) 지원


Version 1.1 (2013.12.17) :

플레이어 새로고침 버튼 추가

로딩 중에도 소리바다 웹을 열 수 있도록 수정

메뉴 - 로그인 시 로그인 탭이 열리지 않던 문제 수정

플레이어가 나타날 때 작업중이던 창이 포커스를 잃는 문제 수정

네비게이트 에러시 url 출력

간단하다.


Target -> Info (즉 Info.plist 수정) 에서

Application is agent (UIElement) 값을 YES 로 해주면 된다.

Raw key 값은 LSUIElement



근데 이렇게 하면 내가 원하는대로 수정이 안되거나,

수정을 하더라도 앱을 재실행 해줘야 한다.


그래서,, 아래와 같은 방법이 있다!!


위에서 설정하는 UIElement 값을 동적으로 바꿔주는 것 같다.


ProcessSerialNumber psn = { 0, kCurrentProcess };

TransformProcessType(&psn, kProcessTransformToForegroundApplication);


이건 독에 아이콘을 나타내는 코드



ProcessSerialNumber psn = { 0, kCurrentProcess };

TransformProcessType(&psn, kProcessTransformToUIElementApplication);


이건 다시 UIElement = TRUE, 즉 독에서 앱을 없애게 해준다.


type 인자만 다르지만,, 두줄밖에 안되니 그냥 두번 적어줬다.



여기에 앱을 등록하고, 확인하고, 제거하는 코드.

자신의 bundlePath 기준으로 등록, 검사, 제거한다.


코드를 그냥 붙여넣기 하려 했으나, 들여쓰기가 없어진다..ㅠ


그래서 걍 gist 로 올림.


https://gist.github.com/iolate/7963775


원래 추가/삭제만 있었는데 등록되어 있는지 검사하는 코드도 넣었다.(삭제에서 조금만 수정..ㅎㅎ)

그리고.. 메모리 관리 조금.. 근데 맞는지 모르겠다ㅋㅋㅋ


출처: http://cocoatutorial.grapewave.com/tag/mac-os-x/

ARC 사용하는 프로젝트에서 특정 파일만 MRC 를 사용하기 위해서는

컴파일 옵션에 -fno-objc-arc 를 넣어주면 된다.


근데 xcode5 로 올리고 나니

Targets -> Build Phases 로 이동하면...



없다!!! 

컴파일러 옵션이 없고, 더블 클릭해도 안된다.


그래서 검색해보니,, 답은 황당하다..



오른쪽 탭을 없애든지 뭐 기타 방법으로 창을 길게 만들어주면 된다.

그럼 숨어있던 컴파일러 옵션이 나타난다.. ㅡ_ㅡ...


저기에 -fno-objc-arc 를 넣어주면 됨.

'개발개발 > 기타' 카테고리의 다른 글

[Mac / Ubuntu] Go (golang) 설치하기  (0) 2015.12.22
winapi gdi+ image load and convert to HBITMAP  (0) 2015.11.02
Surrounded 스킨 깨짐 해결  (0) 2015.06.07
python to exe  (2) 2015.02.25
XCode4 업데이트  (1) 2011.03.11

+ Recent posts