우연히 어우동을 뽑아서 (배수 카드) 저번 달 내내 잘 썼습니다. 그런데 배수 카드라는게 중독이 되는 거더군요. 곧 배수 카드가 끝나가니 재미도 덩달아서 끝나갈려고 하는 것입니다. 그래서 친구들한테 뻥을 쳤습니다. 

"야 ~ 나 춘향이 뽑았어"

반응이 없더군요. 그래서 에이.. 하고 공짜로 받은 가챠 카드 5장 소비해서 뽑았는데 진짜 나왔습니다. =ㅅ=

 


토르, 시드링크? 는 덤으로 나오더군요. 



이거 웹 디자인 하시는 분이라는데.. 왠만한 개발자 보다 수준이 훨씬 높으신 듯 ㅎㅎ 
예전에 언급 했듯이 확산성 밀리언 아서 게임을 열심히 하고 있습니다. 뭐 불법적인것은 안하는 주의지만 부캐가 필요해 지더군요. AP 를 이빠이 올려서 요정만 팝시키고 다닐 수 있는 ... 그렇다고 그 목적을 위해서 기기 한개를 새로 살 수는 없지 않겠습니까? (사실 살려고도 생각했습니다.. 넥서스가 30만원 선이라고. 쩝쩝) 

게임은 현질은 죽어도 안하면서 이런 기계는 마구 마구 사지르다니 그럴 수는 없다고 생각했습니다. 공짜로 해결할 수 있으면 공짜로 해결하자! 가 제 모토기 때문에 편안한 길을 찾다가 답을 찾았습니다.

http://www.bluestacks.com/bstks_mac.html

바로 안드로이드 머신을 맥 OSX 에서 돌릴 수 있게 해주는 어플입니다. (제가 주로 사용하는 노트북이 맥이 관계로 OSX 용입니다. PC 용도 그리 다르지 않을 것이라 생각합니다) 

1. 위에서 언급된 주소에서 블루스택을 다운 받아서 설치해줍니다. 
    http://www.bluestacks.com/bstks_mac.html 받아서 더블 클릭해서 설치하는 일반적인 맥용 DMG 파일입니다. 

2. 설치된 블루스택을 실행해줍니다. 
 실행하면 뭐 셋업이니 뭐니 해서 시간이 좀 오래 걸리고 나면 일반적인 안드로이드 폰하고는 전혀 다른 모습의 메인 화면이 떡하니 뜹니다. (귀찮아서 사진이 없는 것은 양해해 주시기 바랍니다)

3. 오른쪽 상단 구석에 있는 검색에서  'actoz' 로 검색해 보지만 나와 있는 리스트에 있는 '확산성 밀리언 아서'는 설치할 수가 없다고 합니다. 
  좌절하지 마시고!!

4. 왼쪽에 있는 'app stores' 를 클릭합니다.  

 
5. 'Get Jar' 를 클릭합니다.  

 

6. 오른쪽 상단 구석의 검색창에서 'firefox' 를 검색하고 'Go' 버튼을 클릭해 줍니다.

 

7. 'Firefox Browser for Android' 를 선택해서 설치해 준다고 합니다. 이때 정말 중요!! Google Play  계정으로 설치해 준다고 선택해 줘야 합니다.

8. 그러면 '구글 계정'을 만들라는 창이 나옵니다.  하나 빠르게 만들어 주시고 (저는 날림으로 만들어서 계정하고 비밀번호를 적어뒀습니다..)

9.  FireFox 가 인스톨이 끝나면 그 창 그대로 머문 상태에서 검색 버튼을 누르시고 'actoz' 로 검색하시면 '확산성 밀리언 아서' 라고 나오는 항목을 설치해 주시면 됩니다. 

 
10. 화면 맨 아래의 '블루스택' 아이콘을 클릭하시면 메인 화면으로 돌아오는데 그 중에서  위 사진 처럼 'My apps' 를 클릭하시면 설치되어 있는 밀리언 아서가 보입니다. 

11. 밀리언 아서를 실행하시면서 추천인 노가다 같은 행위를 하시면서 계정 블락 당하는 사태가 벌어지지 않았으면 좋겠습니다. (저는 단지 노예로만 활용 예정)


실행화면 인증샷 입니다. 
 
Node.js express 를 이용해서 개발하다 보면 아쉬운 것이 한가지 있습니다. 본의 아니게 서버가 죽어버리는 일입니다. 물론 이런일이 발생하지 않게 에러 핸들링을 속된 말로 빡세게 해야 하지만 뭐 어떻게 알아서 그걸 다 하고 있습니까... (후다다다닥) 

만약 서버가 죽는다고 하더라도 우아하게 재시작 된다면 (gracefully restart 라는 표현을 쓰더군요) 추후에 비슷한 에러가 발생하지 않도록 조치를 취해줄 수가 있습니다.  

역시나 설치법은 무지 쉽습니다. npm 이 설치되어 있다고 가정한다면

$ sudo npm install forever -g 



이러면 설치되고, 원하는 스크립트 서버를 띄워주고 싶다면

$ forever start app.js


하면 데몬 형식으로 구동됩니다. 아! 로그도 봐야 하지요?

$ forever logs



하면 현재 띄워져 있는 스크립트랑 거기에 관한 로그에 대한 내역이 나옵니다.  내용을 보고 싶다면 , 예를 들어 한개의 스크립트 서버를 띄웠다고 가정한다면

$ forever logs 0



하면 tail 로 로그를 뒤지는 효과가 나옵니다. 자세한 설명은 원문을 찾아보시면 됩니다.

원문링크 : https://github.com/nodejitsu/forever 
푸시 기능 구현을 Node.js 에서 하기에는 너무 쉬운 관계로.. 안드로이드 쪽부터 보기로 하겠습니다. 
안드로이드는 실 기계에서 작업하지 않는 한 에뮬레이터에서 푸시 기능을 테스트 해 보기 위해서는 Google API 를 지원해야 합니다.

Android SDK Manager (Windows 메뉴에 보면 있습니다. OSX 기준) 를 실행시키고 화면을 보면 


Android 4.2 (API 17) 에 'Google APIs' 가 설치 되어 있어야 합니다. 만약 설치 안되어 있다면 체크박스에 체크 하고 설치해주시면 됩니다. 

Google API 가 설치되어 있는 형태의 '가상 기계'를 구동하셔야 푸시 이벤트 처리가 가능합니다. 

Android Virtual Device Manager 를 실행시킵니다. (역시 Windows 메뉴에 있습니다) 
그리고 새로 '가상 기계'를 설정해 주는데 OS 버젼 골라주는 곳? 그곳에서 Google API 라고 쓰여져 있는 버젼을 골라주면 됩니다. 


자 제것의 화면입니다. 같은 4.2 버젼이지만 Google API 를 쓰느냐 안 쓰느냐의 차이만 존재합니다. 

그리고 다시 Android SDK Manager 를 실행시켜줍니다.

 
위에 보이는 라이브러리를 설치해줍니다. 자 그러고 나면 

$SDK/extras/google/gcm/ 밑에 보면 프로젝트들이 설치되어 있습니다. 그중에서 samples 밑의 gcm-demo-client 를 주목해야 합니다.  (본인의 경우에는 /Users/crazia/work/android/sdk/extras/google/gcm/samples/gcm-demo-client 에 설치되어 있습니다. )

Eclipse 가 이미 구동되어 있을 테니 (안 그러면 SDK 메니져랑 가상 기계 매니져를 실행시킬 수 없었겠지요?) 위에 지정한 프로젝트를 Import 해옵니다. 

자 이제 안드로이드 쪽에서 해야 할일의 90% 는 끝이 난 셈입니다. 이제 키가 두개 필요합니다. 편의상 Project Key (SEND ID) 와 API Key 라고 부르겠습니다. 각각 클라이언트와 서버쪽에서 필요한 키입니다. 

https://code.google.com/apis/console 에 접속하셔서 


아직 등록이 안되어 있다면 'Create Project' 를 누르시면 프로젝트가 생성됩니다. 그리고 나면 URL 이 자동으로 변경이 되는데. 

https://code.google.com/apis/console/#project:4815162342

여기서 보이는 저 굵은 글자가 바로 Project Key 입니다. (SEND ID) 아이템을 얻었습니다!!

왼쪽에 탭을 보면 여러가지 메뉴가 있는데 그중에 

"Services." 탭을 선택합니다. 
"Google Cloud Messaging" 을 ON 으로 토글링 합니다. (켭니다) 


이제 구글 클라우드 메시지 서비스를 이용하기로 결정이 됐습니다. 
자 다시 왼쪽 탭을 보면 그중에서 

"API Access" 탭을 선택합니다. 
아래쪽에 보면 "Create New Server Key" 라는 버튼이 있습니다. 
보내고 싶은 IP 리스트에 대한 리스트를 작성해 주고 싶으면 작성하고 마땅히 할게 없으면 "Create" 버튼을 눌러줍니다. 



이제 중간에 나오는 화면에서 "API Key" 부분에 나와 있는 키를 따로 떼서 저장합니다. (Server Key) 아이템을 얻었습니다!!

중간 점검을 하자면 

1. Google API 를 지원할 수 있게 Virtual Device 를 생성하는 준비를 마쳤습니다. 
2. Extra/gcm 샘플 소스를 받아서 Eclipse 에서 쓸 수 있게 Import 했습니다. 
3. Sender ID 와 Server Key 로 사용할 수 있는 Project Number 와 API Key 를 받았습니다. 

여기까지 완수가 되었다면 이제 클라이언트 (Android) 쪽 코딩을 마무리 지어 봅니다. Eclipse 의 프로젝트에 포함된 파일중에서 CommonUtilities.java 파일을 열어줍니다. 

    /**

     * Base URL of the Demo Server (such as http://my_host:8080/gcm-demo)

     */

    static final String SERVER_URL = "http://192.168.0.36:3000";
    // node.js 서버가 기다리고 있는 주소와 포트를 적어 주는 것입니다. 


    /**

     * Google API project id registered to use GCM.

     */

    static final String SENDER_ID = "4815162342";
    // 위에서 얻은 Project Number 를 입력해 줍니다.

이로서 클라이언트 부분은 끝이 났습니다. 이제야 제일 핵심인 Node.js 에서의 푸시 기능 구현에 들어가겠습니다.

$ cd $PROJECT_DIRECTORY
npm install node-gcm --save

-- save 옵션을 package.json 에 해당 사항을 기입하라는 뜻입니다.  

app.js 를 열어서 다음과 같이 추가 해 줍니다. 

var main = require('main');

app.post('/register', main.regist);
app.get('/send', main.send_push);


main.js 파일을 하나 만들어서 열고 

exports.regist = function (req, res) {

console.log (req.param('regId'));
        // 원래는 DB 에 저장하는 부분이 있어야 할 것입니다. 받아서 디비에 저장하기       

res.end(); 


exports.send_push = function(req, res) {

var message = new gcm.Message();

var sender = new gcm.Sender('API Key 를 입력하는 곳입니다. ');

var registrationIds = [];


// Optional

message.addData('key1','message1');

message.addData('key2','message2');

message.collapseKey = 'demo';

message.delayWhileIdle = true;

message.timeToLive = 3;


// At least one required

registrationIds.push('이곳은 register 함수에서 받은 regId 를 입력하는 부분입니다.');
        // 만약 제대로 구현 됐다면 디비에서 읽어서 가져오겠지요?  

        

/**

 * Parameters: message-literal, registrationIds-array, No. of retries, callback-function

 */

sender.send(message, registrationIds, 4, function (err, result) {

    console.log(result);

});

// sender.sendNoRetry(message, registrationIds-array, function (err, result) {

//     console.log(result);

// }); // retry 없이 보내는 부분입니다. 보통은 이것을 더 많이 애용할 것 같습니다. 

}




너무 쉽게 끝났지요? 이게 node.js 의 힘이라고 볼 수 있습니다. 자신의 안드로이드 프로젝트에 기능을 추가하고 싶으시다면 참조 사이트를 참조하시면 됩니다. 

참조  사이트 

https://github.com/ToothlessGear/node-gcm : node.js 에 gcm 모듈 구현 
http://developer.android.com/google/gcm/gs.html : 구글의  gcm 모듈 구현하는 설명 페이지 (완전 중요!!)


 
프로그래밍 세계의 어둠의 마법 (Dark Magic) 으로 불리우는 Lispy Macro 를 다시금 정복할려고 도전중입니다. 벌써 한 세번째 도전했나.. 좌절할 때마다 아니야 도저히 이럴 수는 없어!! 내가 이렇게 평범할 리는 없어!! 라며 눈물을 (?) 흘리게 만듭니다. 이제 다시 기초 지식을 쌓았으니 다시 도전할 시기입니다. 

예전포스트  
저번에 살짝 언급했던 일을 처리중입니다. ( 요기에서 언급함 ) 뭐 우리가 무슨 힘이 있겠습니까? 해달라면 해줄 뿐이지 ㅎㅎ 

바꾸면서 나도 무슨 테이블인지, 무슨 컬럼인지 자세히 봐야지만 알 수가 있는 네이밍 컨벤션이더군요.. 투덜 투덜..

아 이제 그만 투덜되고!! 그렇다고 많지도 않지만 또 어찌보면 많은 부분을 다 찾아주기가 귀찮더군요. 그래서 어떻게 하면 편하게 바꿀 수 있을까를 고민했습니다. 

'훌륭한 해커는 게을러 지기 위해서 프로그래밍을 한다!!' 라는 멋진 사상과 부합되간다면 저도 훌륭하지는 않지만 해커의 길로 나선 것이라고 볼 수가 있습니다.  더구나 제가 쓰는 텍스트 에디터가 바로 이맥스 아닙니까? 바로 개발 들어갔습니다. 



바껴야 될 쿼리 부분을 리젼으로 지전하고 change-table 함수를 호출해 주면 변환은 끝입니다.

 
원래는 다른 의미로 쓰는 용어인데, 요즘은 이 한가지를 의미하는 말로 바뀐거 같습니다. 
프로그래머가 웹 프로그래밍을 할 때 제일 싫어하는 게 무엇인지 물어보면 10중 7은 서슴치 않고 대답을 할 것입니다. 망할 CSS ..

전문 프로그래머에 가까우면 가까울 수록 이쁜 웹 디자인하고는 거리가 멀리 멀리 떨어지게 마련입니다. 혹 유려한 디자인과 훌륭한 개발 실력을 동시에 갖춘 개발자 아닌 돌연변이가 있기는 하지만 그런 사람 찾기가 하늘의 별 따기입니다.

그래서 혹시나 특출난 아이디어를 기반으로 하여 웹 서비스를 개발한다고 하더라도 그 못생긴 UI 에 실망하며 아 못생겼으니 이용도 하기 싫구나!! 를 연발하기 마련입니다.

그런 개발자분들을 위한 트위터 형식의 UI 형식을 갖춰줄 수 있게 해주는 훌륭한 개발 패키지 입니다.

http://twitter.github.com/bootstrap/

일단 직접 찾아가서 살펴 보시면 됩니다. 소개 부분에 있는 'by Nerds, for Nerds' 라는 말이 인상 깊군요 ㅎㅎ. 만들어진 예제 사이트를 보시면 어디선가 본듯한 형상이실 것입니다. 맞습니다!! 게으른 개발자들이 바로 이걸 이용해서 만든 것이지요!! 

EDITED: 2013-01-22

 
저도 이정도의 화면 작업이 가능해진답니다 ㅋㅋㅋ  
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20130117094340

천재 해커가 자살했습니다. 논문 절도 혐의에 대한 4억달러 배상과 50년 이상의 형이 집행될 예정을 비관해서.. 지적 재산권이 중요하지만 인권에 비하겠습니까? 그는 평소 해커정신을 소유해서 정보의 자유로운 공유를 주장했을 뿐입니다. 물론 그 방법이 범법적 행위 였지만 그 행위가 4억달러와 50년 이상의 형을 받을 만큼 참혹한 행위라고 볼 수 있었을 까요? 

이 논쟁은 사실 첨예한 부분이고 다른 사람들도 많이 의견이 분분한 분야이기 때문에, 저는 다른 관점으로 보고 있습니다. RSS  초기 개발자이며, Reddit 사이트의 개발자 인건 유명하지만 Reddit 의 초기 개발은 Lisp 으로 만들어 졌습니다. 초천재 Lisper 가 사망한 것이지요 ㅜ.ㅜ 안그래도 고수가 부족한 리습 세상에서 또 한사람의 고수가 세상을 뜨다니 나중에 이 사실을 접하고 가슴이 멍하더군요. 26살의 젊은 나이에 ..  이제 슬슬 물이 올라서 놀라운 창작을 만들어 내야 할 나이에.. 

더 열받는건 판결에 정치적 이슈가 끼어 있을지도 모르는 사실이군요.. 이놈의 신 자유주의가 뭔지 돈 때문에 정말 중요한 것들이 무시 받는 세상이 되버렸군요. 

매카시 옹께서 스와르츠군을 잘 보살펴 드릴꺼라 믿습니다.  
최근에 자기 기업 스타일과 다른 디비 설계 컨벤션을 썼다고 설계 품질이 낮다고 지적하면서 이걸 전체 회신으로 보내는 엽기 행각을 당했다. (디비 테이블명을 명사 복수형으로 쓰는게 그렇게 이상한가? -ㅅ- person / people , user / users  등등) 

대체 설계품질을 뭐로 따지는 건가? 디비 컬럼명을 대문자로 안 썼다고? 어트리뷰트가 컬럼명으로 전환이 안된다고?

심지어 모델 케이스 툴을 안쓰냐고 (거의 ㅉㅉ 가 뒤에 붙어있는지 음성 지원 효과도 되는 듯한..) 원하면 교육시켜준다는 소리까지..

그거 다 알거든요? 몇년전에 쓰다가 그냥 대충 만들어도 되길래 안 쓰는거거든요?

완전 느낌이  "C/C++ 코딩할 때 헝가리안 표기법 안쓰니까 당신 초급 개발자네요 열심히 노력하세요.." 라는 지적을 당한 기분!! 그르르르릉!! 

+ Recent posts