블로그에 소스코드 삽입하기 기타

블로그에 소스코드를 깔끔하게 삽입할 방법이 없을까 이것 저것 알아보다가 나름 최선의 해결책을 찾았습니다.

http://gist.github.com/

첫 화면 입니다. 여기서 입력창에 소스 붙여넣기 하고, 우측 상단에 Language 선택하고 "Create Public Gist" 클릭

생성된 Gist입니다. 상단에 show embed 클릭하면 HTML으로 삽입할 코드를 줍니다.
<script src="http://gist.github.com/295648.js"></script>

이것을 HTML형식으로 직접 넣으면 됩니다. 하지만 이글루스는 script 태그를 허용하지 않아서 약간의 추가 작업이 필요합니다.
<script a='<>' src="http://gist.github.com/295648.js"></script a='<>'>



소스코드 삽입된 결과 보기




한번 생성된 Gist는 계속 유지되고 코드 수정도 가능합니다. Public Gist라서 다른 사람이 수정할수도 있을 것 같네요. 착하게 살아야 겠습니다. =_=;


Schema-less database MongoDB Programming

MongoDB는 따로 스키마가 존재하지 않고 그냥 JSON 형태로 레코드를 저장합니다. 이런 형태를 schema-less 혹은 Document-oriented database라고 하더군요. 이런 형태의 DB중에는 CouchDB가 가장 유명한 것 같더군요. 참고로 CouchDB는 Erlang, MongoDB는 C++로 작성되어 있습니다.

레코드가 저장되는 방식은 아래와 같습니다.
FirstName="Bob", Address="5 Oak St.", Hobby="sailing"
FirstName="Jonathan", Address="15 Wanamassa Point Road", Children=["Michael,10", "Jennifer,8", "Samantha,5", "Elena,2"]
실제 저장되는 방식은 stl map처럼 {키:값} 형식으로 인것 같습니다.

스키마가 없이 저장이 되니 당연히 느릴거라고 생각했습니다만 MySQL과 benchmark 결과가 있습니다.
INSERT
http://www.idiotsabound.com/howd-that-mongo-get-so-fast

SELECT
http://www.idiotsabound.com/did-i-mention-mongodb-is-fast-way-to-go-mongo

기타
http://blog.jasonmooberry.com/2009/08/mongodb-and-symfony-yes-part-1-inserts/
http://blog.jasonmooberry.com/2009/08/mongodb-and-symfony-yes-part-2-simple-queries/
http://obvioushints.blogspot.com/2009/07/benchmarking-mongodb-vs-mysql.html

CouchDB와의 bench
http://bcbio.wordpress.com/2009/05/10/evaluating-key-value-and-document-stores-for-short-read-data/

MySQL에 비해 느리지 않다고 합니다.

실제 활용쿼리

INSERT

db.testdb.insert( {Serial:1, Name:"alice"} )
db.testdb.insert( {QuestId:5, QuestNpc:"guard", RequiredLevel:12} )

SELECT
db.testdb.find( {Name:"alice"} )
db.testdb.find( "this.RequiredLevel > 10" )

UPDATE

db.testdb.update( {Serial:1, Name:"alice"}, {Serial:1, Name:"rabbit"} )

DELETE
db.testdb.remove( {Serial:1, Name:"rabbit"} )

다른 DB로 복사
db.testdb.find().forEach( function(x){ db.targetdb.save(x) } )

특정 필드가 있는 레코드만
db.testdb.find( {QuestNPC:{$exists:true}} )

정규식으로 검색
db.testdb.find( {QuestNPC:/guar./} )

위의 예는 shell에서 사용하는 방식이고 다른 언어도 비슷할거라 생각합니다. 현재는 C++, Java, python, Ruby, Perl, PHP 지원하더군요.

사용하고 있는 곳
http://www.mongodb.org/display/DOCS/Production+Deployments
소스포지 , EA, github, 뉴욕타임즈 등에서 이미 MongoDB를 제한적인 분야에서 사용하고 있습니다.

게임쪽에서도 이런 형태의 DB가 필요한 곳은 많으리라 봅니다. 퀘스트 저장이나 UCC 형식의 데이터 저장에 유용하겠죠. 또한서비스 중에 스키마가 틀려서 발생하는 문제, 개발 초반에 변경이 많을때 발생하는 문제도 해결이 가능할겁니다.

MongoDB 는 오픈소스로 개발되고있고 앞으로의 로드맵도 모두 공개되어 있습니다. 사용은 무료이고 기술지원에만 비용을 청구하는 방식입니다.웹 싸이트에 문서화가 잘 되어 있습니다. 전체가 Confluence(wiki의 일종)로 되어 있더군요. 언제든지 PDF로변환해서 받을수도 있습니다. 무척 깔끔해서 마음에 들더군요. :)


JSON C++ parser jsoncpp Programming

JSON은 XML과 비슷하지만 사람이 읽기에 더 편한 데이터 포맷입니다.
http://www.json.org/json-ko.html
http://ko.wikipedia.org/wiki/JSON

jsoncpp는 C++ JSON 파서 입니다.
http://jsoncpp.sourceforge.net

JSON Spirit도 많이 쓰이지만 boost spirit을 사용하기 때문에 boost가 필수입니다. jsoncpp는 별도의 라이브러리가 필요없고 링크에 있는 svn에서 15개의 파일만 받아서 포함하면 됩니다. 아쉽게도 유니코드는 지원하지 않는것 같습니다. 아래는 활용 예제입니다.

JSON file

쓰기

읽기


참고로 python 예제도 올려봅니다. 자체 내장되어 있는 json 모듈을 사용했습니다. 실행 결과는 같습니다.
쓰기


읽기


MongoDB라고 JSON 형태 그대로 저장해주는 DB도 있더군요.
http://www.mongodb.org/display/DOCS/Home

일반 DB처럼 쿼리도 되는 모양입니다.
http://www.mongodb.org/display/DOCS/Tutorial

JSON을 패킷으로 사용하고 모든 패킷을 MongoDB에 저장한다면 유저의 거의 모든 행동 패턴을 추적하는 것도 가능할 것 같다는 생각을 해봤습니다. JSON 파서는 거의 모든 언어로 나와있기 때문에 다른 시스템과 통신도 쉽게 할 수 있겠죠. 패킷 크기가 다소 커지기 때문에 속도가 생명인 게임서버에는 맞지 않겠지만 그 외의 서버에는 시도해 볼만하지 않을까 생각해 봅니다. 그 밖에는 로그 저장 용도가 떠오르네요.

JSON Viewer도 있군요. 공용 포맷을 사용하면 따라오는 장점인것 같네요. :)
http://jsonviewer.codeplex.com/

wxPython을 이용한 간단한 UI 예제 Programming

wxPython은 크로스플랫폼 GUI 라이브러리인 wxWidget의 python 라이브러리 입니다. wxPython을 이용하면 몇줄 안되는 코드로 쉽게 UI를 만들수 있습니다.

http://www.wxpython.org/download.php#binaries
[wxPython runtime]이 라이브러리이고 [Docs, Demo, Samples, etc]은 예제 소스입니다. python 좀 하시는 분이면 이것만 보고도 쉽게 이해할 수 있으실 겁니다.

wxPython을 이용해서 간단한 파일변환 프로그램 예제 UI를 만들어 봤습니다. 어떤 파일하나를 선택해서 압축/파싱/암호화 등등 을 한다는 시나리오입니다.

static label, edit, button, file browse dialog, status bar 이렇게 4가지 컨트롤이 사용되었습니다.


코드는 아래와 같습니다.


python에서 C++코드를 호출할 일이 있으면 SWIG를 사용하면 되고, 실행파일로 배포를 해야 하면 py2exe를 사용하면 실행파일로도 만들수 있습니다.

북미보다는 유럽 기타

간만에 해외취업에 대한 이야기를 해볼까 합니다. 이곳으로 오기전에 GPG를 비롯한 게임개발자 커뮤니티에서 해외취업에 대한 이야기가 나오면 항상 나오는 말이 있었습니다.
그쪽에서 학교를 나오시는게 빠릅니다.

그런데 다니던 직장을 그만두고 다시 학교를 다닌다는 것은 보통 용기로는 어렵죠. 게다가 유부남의 경우는 더욱더 그렇습니다. 그런 조언을 하는데는 이유가 있다고 생각했지만
학교를 그쪽에서 졸업하지 않고 취업하는게 그렇게 불가능한 일인가

하는 생각이 들더군요. 해외에서 일해보고 싶기는 하지만 학교까지 다시 다니면서 시도하고 싶은 정도의 열정은 아니었습니다. 그래서 바로 지원하는 방식을 택했고 다행히도 유럽으로 취업을 해서 잘 다니고 있습니다.

그런데 최근에 생각을 해보니 그말도 틀린말은 아닌게 북미쪽에는 제가 아는 한에는 바로 취업을 하신분이 한분도 안계시더군요. 지인들 말고 웹에서 본 인터뷰나 전해들은 이야기 중에도 없습니다. 하지만 유럽에는 바로 취업하신 분이 대다수입니다. 저도 회사 알아볼때 북미쪽으로도 인터뷰도 보고 했지만 모두 탈락이었습니다. 북미쪽이 유럽에 비해 취업이 쉽지 않다고 볼수 있지요.

왜 북미는 어렵고 유럽은 그에 비해 쉬울까. 제 생각에는 이렇습니다.
  1. 북미는 모두 영어 native, 유럽은 그렇지 않은 곳이 더 많죠. 영어 실력에 대해 좀 더 관대하다는 의미입니다.
  2. 비자 발급의 까다로움
  3. 쟁쟁한 지원자들. 북미가 유럽에 비해 네임밸류가 높은 회사들이 많죠.
  4. 유럽쪽 회사에 대한 정보의 부재
아마 1번이 가장 크지 않을까 합니다. 저도 영어때문에 많이 낙방했습니다. 심지어 딱 부러지게 영어실력 때문에 불합격했다고 알려주는 회사도 있었습니다. 아마 다른 분들도 실력은 있으신데 영어 때문에 떨어지는 분들 참 많으실 겁니다.

해외 취업을 목표로 하시는 분중에 유부남이거나 영어에 자신이 없으시다면 북미보다는 일단 유럽을 목표로 하시는 게 어떨까 합니다. 북미에 최고의 회사들이 많은 건 사실이지만 진입장벽이 너무 높고 일단 영어때문이라도 직접은 조금 어렵지 않을까 생각합니다. 유럽에도 좋은 회사들이 꽤 있습니다.

특히 유부남이라면 더욱 추천합니다. 가족과 함께 살기에 더 좋고, 많은 시간을 함께 할 수(해야만?) 있습니다. :)


1 2 3 4 5 6 7 8 9 10 다음