여차저차 하다가, 모토로이를 갖고 앱 개발을 하게 되었다. 에뮬레이터만 쓰다가, 기기를 달아놓고 개발을 하니, 개발 속도가 훨씬 빨라졌다. (예전이 느렸던거겠지만). 에뮬 안에다가 apk를 install 하는 속도보다, 실제 기기에 usb로 install 하는게 훨씬 빠르다. 실행 속도는 두말할 나위 없고. 에뮬만으로 안드로이드 개발을 하는 것은, 한손으로 개발하는 것과 같다. -_-
일단, 모토로이에 대한 사용자 입장의 느낌을 몇가지 단어로 나열하자면, 우왕. 안드로이드다. 그럴싸하군. 근데 좀 느리네. 가끔 죽네. 내부 용량(어플 설치 가능한 용량)이 100M 밖에 안된다니!(열폭). /* 안드로이드의 현재 버전은, 외부 SD카드엔 앱을 설치할 수 없다. 보안상 제한인듯 싶은데, 안드로이드 다음 버전에서는 개선된다는 소문도 있다. 아이폰에 비해서 상당히 애매한 문제다. */
모토로이 드라이버를 깔고, 여차저차 해주니, 기존 adb 명령어도 다 먹고 참으로 좋은데, 앱 안에서 /sdcard 로 접근이 안되더라. 알고보니, PC에서 모토로이의 SD카드를 사용할 때는, 안드로이드 폰에서, (병행성 문제인 듯 싶지만) /sdcard 의 파티션이 unmount 되는 것. 모토로이의 알림창에서 USB연결을 누르고, 없음을 선택하면, PC와 연결된 상태에서도, 앱 안에서 /sdcard 를 사용할 수 있다. (PC에서의 SD카드 접근은 동시에는 안되지만).
/data/data/패키지이름/ 디렉토리의 접근은 잘 된다. 읽기/쓰기 다 된다. adb shell 에서는 쓰기는 할 수 없다. adb push가 있으니 상관 없겠지만.
작업관리자가 실제로 프로세스를 죽이지 못하는 경우도 있었는데, 개발을 하던 중에, 앱에서 mp3 를 재생시켰는데, 어플을 닫아도, mp3가 안 끝나더라. 그래서, 작업관리자에서 해당 앱을 죽였는데도 노래가 계속 나오더라. 당황하여 adb shell 로 들어가서, ps를 찍어봤는데... 헐. 프로세스가 살아있어?? 게다가, 에뮬과 달리, 실 기기에서는, 퍼미션이 적용되어 있기 때문에, kill -9 를 할 수도 없는데. -_- 노래가 계속 나와 ㅠㅠ
이건 안드로이드의 이슈이지만, 이미 종료된 앱이고, 작업관리자에도 없는데, 프로세스가 종료되는 시점은 정확히 알 수 없다. 종료되지 않을 수도 있다. 생각보다 꽤 오랫동안 프로세스가 살아 있다.
그 외에, 의외로 괜찮았던 구석도 있고, 생각만큼 별로였던 구석도 있고, 생각보다 더 별로였던 점도 있는데, -_-;; 안드로이드 개발자에겐 어쨌든 모토로이든 뭐든, 기기는 필수인 것 같고(개발속도가 엄청 차이난다), 사용자 입장에선 아이폰보다 별로인 것 같다. (나 아이폰 유저다.). 멀티태스킹이 되는 건 좋지만, 딱 그 뿐이다. 그 때문에 엄청 느려진다. 자주. 아... 뭐, 스카이프 같은 어플에겐, 안드로이드쪽이 더 좋아지겠다 싶다. (아이폰은 스카이프 쓰다가 문자가 오거나, 전화가 오면, 끊긴다. ㅠㅠ 어플이 죽으니깐.)
-- 이상한 나라의 종텐.
예전엔, 웹 2.0 어쩌구 저쩌구 사업을 해서 자기도 부자가 되겠다는 사람들이 넘쳐난 반면에, 요즘엔, 아이폰이나 안드로이드 마켓에서 히트를 쳐서, 부자가 되려는 꿈을 가진 사람들이 발에 채인다. 그 중에, 순진한 사람들이 정말정말 많은데..
-- 이상한 나라의 종텐.
예전에는, 버전 관리 시스템으로는 CVS를 사용하다가, 2004년부터는 Subversion을, 2009년부터는 Mercurial(= hg)을 사용하고 있는데, 폴더마다 .svn 이 생기지 않는다는 것과, 오프라인에서 commit이 가능하다는 점, 공유되지 않은 코드를 부담 없이 롤백 및 revert 할 수 있다는 점, TAG가 branch가 아니라는 점 등의 이유 때문이었다. Distributed의 진짜 장점은 체감하진 못하고 있었는데…
몇 일 전에, 멤버십에서 진행하던 프로젝트에서, 버전관리를 위해 중앙 저장소로 사용하던 서버를 사용할 수 없게 되는 초유의 불상사가 생겼다. 대체 소스코드 공유를 어떻게 해야 하나? 이 난관을 어떻게 극복해야 하나? 한~참을 고민하다가, Mercurial은 DVCS라는 것이 기억났다. 우와!
Subversion 이었으면, diff와 patch로 극복하거나, 임시로 다른 서버를 구해서 저장하거나 했겠지만, Mercurial은 그럴 필요가 없었다. 각 사용자가 가지고 있는 Repository 하나하나가 하나의 서버나 마찬가지다. Mercurial은 (Subversion과 다르게) 서버의 저장소 구조와 클라이언트의 저장소 구조가 전혀 차이가 없다. 단 한 명만이, hg serve를 실행하고, 나머지 사용자들은 기존대로 자기의 저장소에 commit 하다가, 모아서 hg serve를 실행한 사용자의 IP로 push를 하면 된다. 나중에 중앙 저장소 서버가 복구되면, 그쪽으로 push 해주면 그만이다. 같은 족보니깐 문제도 없다. 그래. Mercurial은 중앙 저장소가 필요 없는, 분산 버전 관리 시스템이잖아.
-- 이상한 나라의 종텐.
종텐닷컴 모바일 대응!!
http://jong10.com/m 으로 접속하면, 아이폰 등에 적합한 화면으로 나온다.
…이긴 한데, 사실은 티스토리에서 모바일 페이지를 지원 하더라.
블로그 주소에 /m 을 붙이면 다 되더라.
그래서, 종텐닷컴(jong10.com)에도 /m 을 붙이니깐 나오더라.
-- 이상한 나라의 종텐.
얼마전에, 구글에서 만들고 있는 오픈소스 프로그래밍 언어를 하나 발표했다.
이름하야, The Go Programming Language.
...이 아니고, 2007년에 디자인하기 시작해서, 작년부터 구현하기 시작했다는데, 초창기 개발자 3명중에, B언어와 Unix의 창시자인 Ken Tompson과, 그 유명한, Rob Pike잖아?! 교과서에나 나오는 이 할아버지/아저씨들이 구글에 있었어???
소개한 pdf 를 잠깐 훓어 봤는데, 흥미롭다. 잘 모르는데, 어설프게 설명을 하자면 안 될 것 같고, 롭 파이크 아저씨의 영상을 첨부한다.
lameproof에 굉장히 좋은 글이 올라왔다. 무언가를 모르는 9가지 이유라는 글이다. 이 우주에는 날로 먹으려고 하는, **(심의상 삭제)한 생명체들이 참 많다. 아서라. 그러다가 배탈 난단다.
1. 읽지 않는다
참고서, 메뉴얼 등을 읽지 않는다. 읽을 생각도 전혀 없다.
2. 조사하지 않는다
인터넷 등에서 최소한의 내용도 스스로 조사하려고 하지 않는다.
3. 시험하지 않는다
귀찮다, 등의 이유로 실행해보지 않는다. 할 생각도 없다.
4. 기억하지 않는다
누군가에게 쉽게 들은 대답은 자기 것이 되지 않기에 문제해결 직후 잊어버린다.
5. 설명을 할 수 없다
무엇이 문제인지, 제 3자에게 정확하게 전달할 문장을 쓸 수 없다.
6. 이해력이 부족하다
아니, 이해력보다도, 이해하려고 하지도 않는다.
7. 사람을 이용하려고만 생각한다
응석을 부리거나 억지로, 사람을 부려 임시로 그 문제만 극복하려고 한다.
8. 감사하지 않는다
가르쳐주는 것은 당연. 일이 끝나면 굿바이~
9. 적반하장
자신이 생각하는대로 안 되면 자기가 모르고, 잘못한 것임에도 도리어 화를 낸다.
Java + IIS + Tomcat + Spring + iBatis + Oracle 로 진행 하려던, 두 달짜리 프로젝트를, IIS + Python + Django + Oracle 로 하기 위해서 찾아보다가, "Django에 오라클 지원이 되긴 하지만, 커넥션 풀이 지원되지 않는 것 같다??"는 정보를 얻고는, 이를 극복하기 위해 여러 방안을 알아보고 있다. ㅠㅠ (IIS와 Oracle은 고객(?)의 환경인듯. -_-)
더불어, Django를 올리더라도, IIS에서 파이썬 프로세스가 매번 재실행되지 않아야 할텐데 싶어서 이것도 동시에 알아보고 있다. 이 쪽은 원래는 wsgi로 생각하다가, twisted.web(비동기인 모양이다)의 성능이 엄청나다고 해서, 이쪽에 또 혹~했다. -_-;; 근데 뭔가 알아볼수록 점점 더 복잡해지는 것 같아서, 이러다가 다시 자바로 돌아가는게 아닌지 걱정이 좀 된다.
내가 원하는 것은, IIS가 돌아가는 환경에서, 오라클을 DBCP 쓰듯이 쓰면서, WAS는 Django의 컨트롤러와 간단한 템플릿 엔진을 사용하고, 모델은 Django를 사용할 수 있으면 이걸 쓰고, 안되면, SQLAlchemy를 사용하는 것인데... 뭔가 간단치 않은 것 같다. 자바로 개발하기는 싫은데. ㅠㅠ (멤버십에 있는 내 PC에서 이클립스가 너무 느려서 파이썬으로 하려는거 아니다... 진짜다... 후... 그냥 PC를 사버리고, 자바로 할까... -_-;;)
TornadoWeb (epoll을 쓰기 때문에, Windows에서는 안된다.)
http://www.tornadoweb.org/
Twisted.Web
http://twistedmatrix.com/trac/wiki/TwistedWeb
SQLAlchemy - Connection Pooling
http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/pooling.html
SQLAlchemy - Oracle
http://www.sqlalchemy.org/docs/05/reference/dialects/oracle.html
Oracle Backend with SessionPool (Django #7732)
http://code.djangoproject.com/ticket/7732
Django with twisted.web.wsgi
http://clemesha.org/blog/2009/apr/23/Django-on-Twisted-using-latest-twisted-web-wsgi/
Building Oracle Database-backed Web Applications in Django
http://www.oracle.com/technology/pub/articles/vasiliev-django.html
Connecting To Oracle Directly (Without settings.py)
http://blog.awarelabs.com/2007/connecting-to-oracle-directly-without-settingspy/
Django and Oracle (한글)
http://biohackers.net/wiki/DjangoAndOracle
pyorapool : An oracle connection pooling daemon for python based projects
http://pyorapool.googlecode.com/
Oracle & Python
http://demmer.ipax.at/blog/oracle-python/
Django on Windows with IIS and SQL Server
http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer
원래는, "검증된 것만 사용해서 빨리빨리 끝내자"라는 계획이었는데, 뭔가 점점 일이 커지는 것 같기도 하고;; 아 그냥, 순결한 마음가짐으로, servlet/jsp 날코딩으로 RESTful하게 만들어놓고, SproutCore와 jQuery로 적당히 때워줘야 하는걸까? 흠...
Apache2, Trac, Mercurial을 연동하고 나서, Subversion일 때는 전혀 없던 문제가 발생. 파일 내용에 UTF-8로 된 한글이 있는 경우는 잘 나오는데, 커밋 로그에 한글이 있을 경우는 ??? 로 깨져서 나온다. Trac은 0.11.1 이고, Hg 연동은 TracMercurial을 사용했다.
Trac 사이트를 뒤져보니, 인코딩에 관련된 TracMercurial 플러그인의 여러가지 버그(#7160, #8180)가 있더라. 가장 간단한 해결책은, HGENCODING 환경변수를 utf-8 로 잡는 것인데, 아파치의 SetEnv에 넣어봤는데도 이상하게 안되더라. 결국, 소스에 박아버렸더니 작동한다.
mercurial-plugin-0.11/tracext/hg/backend.py 파일을 열어서, from 어쩌구 import 어쩌구가 끝나는 적당한 위치에…
os.environ["HGENCODING"] = "UTF-8"
를 써준다. 앗싸. 커밋 로그가 한글로 잘 나온다.
-- 이상한 나라의 종텐.
