• 2010-11-09

    Setup npm & socket.io

    EDIT: npm 은 이제 기본적으로 설치가 되므로 설치 방법은 생략한다.

    npm install express 
    npm install socket.io
    

    참고로, 모든 npm 소스는 ~/.node_libraries/.npm 아래에 저장되어 있다.

    가장 간단한 express 서버는 다음과 같다. curl 로 로컬 서버에 접속해볼 수 있지만, 먼저 테스트를 위해서 아마존 EC2 콘솔에 접속해서 방화벽의 8080 포트를 열어둬야 한다.

    var app = require('express').createServer();
    app.get('/', function(req, res){
      res.send('hello world');
    });
    app.listen(8080);
    

    가장 간단한 socket.io 서버와 클라이언트는 github 에 존재한다. (이상하게도 제대로된 매뉴얼을 찾기가 힘드니, 그냥 샘플 코드를 보기를 권한다) 

    git clone git://github.com/LearnBoost/Socket.IO-node.git socket.io
    cd socket.io/example/
    sudo node server.js
    

    서버와 클라이언트간의 통신은 순전히 JSON 으로 구현된다. 보내는 쪽에서

    socket.send({ id:chat, type:whisper, target:reiot, message:Hello World! })
    

    라고 보내고, 받는 쪽에서는

    socket.on('message',function(data){
      if('id' in data){
      if(data.id=='chat'){
      show_message(data.message);
      }
      }
    });
    

    이런 식의 전통적인 소켓 프로그래밍이 이루어진다. 브로드캐스팅은 그냥 소켓에 대고

    socket.broadcast({something:special})
    

    이라고 하면 끝. 

    첫 소감은 

    • 아 쉽다. 처음 소켓 프로그래밍을 배울 때의 느낌이야. 왜 지금까지 이런게 안되었을까..
    • 소스가 노출될테니 게임 서버에서 해야 하는 모든 것 - 스니핑, 스피드핵, 프로토콜 해킹, 암호화, 한방핵 - 등을 다 구현해야겠지. 클라이언트에게 많은 권한을 줘서는 안될 것 같아..
    • 이걸로 HTML5 캔버스에서 멀티플레이 가능한 로그라이크를 만들 수 있을까? ㅎㅎ

    정도 되겠다. 한마디로 꽤 재미있는 장난감이 될 것 같다.

  • 2010-11-07

    Setup Node.js on Amazon EC2 Linux

    이번 11월부터 1년 무료인 마이크로 인스턴스라는 게 있다길래 node.js 를 위해서 재빨리 가입을 했다. 왜 하필 node.js 인지 궁금하신 분은 nodejs-has-a-bright-future 를 읽어보시길. 싱가포르쪽이 좀 느린 듯해서 그냥 미쿡 버지니아에다가 만들었다.

    처음 가입할 때 전화를 준다고 해서 살짝 망설였는데 그냥 미리 녹음된 전화에 개인키를 입력해서 인증하는 방식이라길래 용감하게 시도했으나.. 아무리 등록하려고 해도 요청 폭주로 전화가 오지 않아서 이틀이나 기다려야 했다. (3회 실패하면 12시간 후에나 다시 요청이 가능한 시스템..) 알고보니 전화 번호를 잘못 써서.울먹.. 다들 외국 사이트 가입할 때 +82 국제 전화 번호 붙이지 않나요 ㅠㅠ 

    어쨌든 초보답게 아마존에서 제공하는 기본 리눅스 AMI 64bit 를 설치하고 보니, git 는 커녕 gcc 도 설치 안된 깔끔한 배포판이었다. 10년만에 리눅스를 만져본 터라 어떤 패키지 시스템을 써야 하는지 헷갈렸는데, 요즘은 yum 이란게 인기가 있나보다. (마지막으로 써본 게 rpm 이었던가..)

    기억 소멸을 방지하기 위해 대충 순서를 정리해본다 :P

    • sudo yum install git-core
    • git clone https://github.com/ry/node.git
    • sudo yum install gcc
    • sudo yum install gcc-c++
    • sudo yum install openssl-devel
    • ./configure
    • make 
    • sudo make install
    • make test

    마이크로 인스턴스에서 빌드 시간은 17분 정도 걸린다. configure 할 때 select/eio/kqueue 를 찾는 걸 보니, 내부적으로 저런 걸 쓰는 모양이다. 내 경우에는  test-exec,  test-repl, test-http-curl-chunk-problem 3개의 테스트가 실패했다 :(

    ps. 오랜만에 느끼는 이 콘솔의 감촉. 아 섹시하다~~

  • 2010-11-02

    <% raw %> custom tag

    jQuery 템플릿의 조건문/반복문들은 {{if}} {{each}}와 같이 선언하는데, 이게 Django의 템플릿 변수 {{var}} 선언과 동일해서 템플릿 문법 에러가 발생하게 된다. 이를 해결하려면 모든 {{ }} 에 대해서

    {% templatetag openvariable %}if ${var}==a{% templatetag closevariable%} 
    

    과 같이 바꿔줘야 한다. StackOverflow 에 물어보니 Django 1.3 에서 <% raw %> 에 대한 제안이 들어가긴 했다고 하는데, 언제 나올지도 모르고 해서 구글에 검색해보니 다행스럽게도 누군가가 이미 구현해둔 걸 찾을 수 있었다.

    다만 GPL 이라는 점에 유의할 것 :P

  • 2010-10-12

    Photoshop Shortcuts

    • 영역 선택시 shift 는 더하고, alt 는 빼고, shift+alt 는 교집합이 된다.
    • 굳이 move(v) 를 선택하지 않아도 ctrl 을 누르면 현재 레이어를 이동시킬 수 있다. 
    • ctrl 을 누르고 현재 레이어의 미리보기(썸네일) 아이콘을 누르면 레이어만을 선택할 수 있다. 이 상태에서 ctrl + shift 로 다른 레이어 미리보기를 선택하면 영역이 더해지고, ctrl + alt 를 누르면 빼지고, ctrl + shift + alt 를 누르면 교집합 영역이 골라진다.
    • 툴 단축키는 shift 를 누르면 비슷한 다른 툴들이 순차적으로 선택된다.
    • ctrl + 오른쪽 클릭: 현재 마우스 위치의 레이어 목록이 보인다. 레이어 리스트 없이 특정 레이어를 고를때 편하다. 대신 레이어 이름을 잘 붙여둬야 한다.
    • ctrl + G 는 선택된 레이어들을 그룹으로 묶어준다. ctrl + alt + G 는 클리핑 마스크를 만든다. 
    • 클리핑 마스크를 만들면 브러시가 아래 하위 레이어의 영역에서만 칠해진다. 실제로 레이어의 그레디언트나 패턴 이펙트들은 클리핑 마스크로 구현되어 있다. (각각의 이펙트를 별도의 레이어로 분리해보면 알 수 있다) 썸네일을 상위 레이어로 ALT 드래그하면 클리핑을 할 수 있다. 썸네일을 폴더로 드래그하면 폴더에 속한 레이어들 전체에 마스크가 씌여진다. shift 를 누르고 썸네일을 클릭하면 해당 마스크를 disable 시킬 수 있다.
    • 레이어 목록에서 ctrl 드래그는 복사, alt 드래그는 위치 이동이다. (그냥 드래그해도 이동이긴 하다)
    • 글로벌 라이트는 모든 열린 문서를 끈 상태에서 설정해야 한다.
    • 브러쉬 크기 조절은 [] 로 할 수 있다. alt 를 누르면 잠시 스포이드(eyedropper) 모드로 색깔을 지정할 수 있다. 
    • ctrl + 1 또는 줌 버튼을 더블클릭하면 100% 크기로 볼 수 있다. 줌을 바꾸려면 ctrl + alt + wheel 을 누르면 된다.
    • ctrl + [] 은 현재 레이어를 아래 위로 옮기는 반면, alt + [] 는 아래 위로 레이어를 선택한다. ctrl + shift + [] 는 가장 위 또는 가장 아래로 레이어를 보낸다. 
    • ctrl 을 누른 상태에서 새 레이어 버튼을 누르면 현재 레이어 아래에 새 레이어가 만들어진다. 그냥 ctrl + shift  + N 은 현재 레이어 위에 만든다.
    • alt 를 누른 상태에서 레이어의 눈 아이콘을 누르면, 해당 레이어만 보여준다. ctrl + alt 를 누른 상태에서 다시 누르면 모두 다 보이게 된다.
    • shift 를 누른 상태에서 +- 를 누르면, 블렌딩 모드를 순차적으로 바꿀 수 있다. move 툴을 선택한 상태에서 숫자키를 누르면 opacity 를 바꿀 수 있다. 
    • 각종 숫자로 된 입력창에 포커스를 두고, ctrl 을 누르고 좌우로 드래그하면 마우스로도 바꿀 수 있다. ctrl + shift 를 누르면 10단위로 바뀐다. 그냥 휠만 움직이면 1씩 증감된다. 화살표 상하 키로도 휠과 동일한 효과를 줄 수 있다.
    • 폰트 크기를 바꾸려면 ctrl + shift + <>
    • 브러시 모드에서 1-0 숫자를 누르면 opacity 를 바꿔서 칠할 수 있다.
    • ctrl + T 로 크기 변환할 때 shift 를 누르면 비율이 고정되고, alt + shift 는 중심이 고정되고, ctrl + shift 는 현재 점 외의 다른 점들이 고정된다.
  • 2010-10-12

    Advanced Photoshop Techniques for UI

    • 레이어의 그레디언트 효과에서 linear burn 블렌딩 옵션을 주면, 원본 색상과 그레디언트 색상이 자연스럽게 섞이도록 할 수 있다. (단일 색이면 그레디언트 색깔을 지정하지 않아도 되므로, 귀찮음이 줄어든다.)
    • 레이어의 스트로크 효과도 마찬가지로, color burn 블렌딩을 주면, 굳이 스트로크 컬러를 지정하지 않아도 된다. (그런데 막상 해보면 잘 안된다 OTL)
    • 레이어에 동일한 패턴 효과를 여러 개 주려면, 레이어를 복사한 후, fill=0 으로 만들고 그냥 이펙트를 추가하면 된다.
    • shape 를 만들 때 shift 를 누르면 임의 각도가 아니라 지정된 각도로 회전시킬 수 있다. shift 는 거의 이런 의미인 듯.
    • shape 를 하나 만든 상태에서, shift 를 누르고 다른 걸 만들면 합쳐지는데 이를 이용해서 커스텀 shape 를 등록할 수 있다. 
    • 슬라이스는 하나의 psd 에서 여러 개의 이미지 파일들을 추출해내는 도구이다. New layer based slice 를 이용하면 Save for Web & Devices 에서 개별 이미지를 저장할 수 있다. 다만, 이때 하나의 레이어가 하나의 이미지가 되면서 동시에 이미지를 슬라이스의 경계로 자르기 때문에, 레이어 슬라이스들이 잘못 겹쳐져서 잘리지 않게 잘 배치해야 한다. 
    • 그리드의 가이드라인과 서브디비전을 10, 10 으로 동일하게 두면, 픽셀 단위로 위치 맞춤(snap)이 가능해진다. 그리드 on/off 는 ctrl +  
    • 레이어 컴포지션을 이용하면, 여러 개의 레이어 그룹으로 구성된 파일에서 어떤 것을 보이고 어떤 것을 보이지 않게 하는 프리셋들을 만들 수 있다. 여러 페이지나 구성요소들을 한 번에 하나씩 보여줄 때 편리함. PSD 에서 스프라이트를 추출할 때 이 기능을 사용하면 좋다.
    • 히스토리 옵션에서 저장할 때마다 새 스냅샷 만들기와 비선형적 히스토리 만들기를 켜면 굿.
    • Advanced Blending option 에서 layer mask hide effects 는 마스크에서 효과를 없에준다. 응?