Serach

2013년 10월 25일 금요일

install Command Line Tools in OSX 10.9 Mavericks

open terminal
open terminal
2 : 다음과 같이 입력합니다.  xcode-select --install 
Screen Shot 2013-06-27 at 11.37.04 am
3: 새로운 팝업 창이 뜹니다.
Screen Shot 2013-06-27 at 11.38.59 am
4 : 인스톨 버튼 클릭
Installing Command Line Tools
Installing Command Line Tools


5 : 약 30분 정도 기다리면 설치 끝 !!
Done
Done


2013년 10월 11일 금요일

게임이 재미있는 4가지 이유

여러분, 혹시 호이징거의 이론을 아시나요?

네덜란드의 고전학자인 호이징거는 2차 세계대전 당시 독일군에 의해서 가택연금된 상태에서
세기의 명저를 남겼는데 그 중 게임 제작자들이 알고 있어야 하는「호모 루덴스」입니다.

「호모 루덴스」는 놀이를 하는 인간에 대한 놀라운 통찰력을 담고 있습니다.
인간은 본질적으로 유희(遊戱)를 추구하고, 인간 문명의 원동력은 바로 '놀이' 라는 것이 이것의 핵심 입니다.

뜬금없이 제가 이 「호모 루덴스」라는 것을 소개 했는지 이제 시작합니다.


호이징거의 이론은 프랑스의 학자인 <로제 카이와>에 의해서 확대 발전 되었다고 합니다.
로제 카이와는 호이징거의 비판론 으로 시작되었지만, 그의 생각을 발전시켜서 놀이에 대한 학문적 가치를 더욱 높였습니다.

호이징거가 인간의 본질을 연구하면서 '놀이'를 조명했고,
로제 카이와는 '놀이' 자체만을 연구 하여 20세기 최고의 놀이학자가 되었지요.

로제 카이와는 그의 저서인 「놀이와 인간」을 통해서
역할 놀이인 '미미크리(Mimicry)', 경쟁 놀이인 '아곤(Agon)', 확률 놀이인 '알레아(Alea)', 몰입 놀이인 '일링크스(Ilinx)'
위 4가지로 놀이를 분류 했습니다.


미미크리(Mimicry)

역할 놀이인 미미크리는 특정한 누군가를 흉내내거나 모방하는 놀이를 의미 합니다.

어린시절 소꿉놀이, 배역이 정해져 있는 연극과 영화 이들은  미미크리의 범주에 속해 있으며,

또한 애니메이션 혹은 게임의 주인공과 똑같은 옷을 입거나, 같은 행동을 하는 '코스튬 플레이' 역시 미미크리 놀이에 속한다.

이 놀이를 게임으로 보자.

게임상에서의 플레이어는 가장 먼저 무엇을 하는가?

플레이어는 가장 먼저 종족 혹은 캐릭터를 선택합니다.

사람들은 게임 안에서 캐릭터, 즉 역할을 가지고 시작합니다.

탱커가 되어 몬스터들로 부터의 공격을 막아주며 아군을 지켜주거나, 도시의 시장이 되어 도시를 건설하기도 하며,

사령관이 되어 전투를 지휘 하기도 한다.



아곤(Agon)

경쟁 놀이인 아곤은 일정한 규칙 안에서 참가자 모두가 경쟁관계를 형성하며 투쟁하는 놀이를 말한다.

참가자들에게 공정한 규칙이 주어지며, 명확한 승패가 결정되는 놀이가 된다.

인간은 똑같은 규칙과 삶 속에서 최고가 되고자 하는 욕구가 있기 때문에 서로 경쟁하게 됨으로 자연스레 아곤 놀이가 발동된다.

반면,

게임은 이 일정한 규칙과 속에서 서로 경쟁을 하는 재미를 주고있다.

게임 제작자들이 게임을 제작하면서 미미크리 다음으로 생각해야 하는것이 바로 경쟁 놀이인 아곤 이다.


알레아(Alea)

우연 놀이인 알레아는 라틴어로 '주사위 놀이' 라는 의미이다.

주사위는 정육면체 모양의 도구로 각 면 마다 1~6까지의 숫자가 있으며 중복은 없다.

주사위를 던졌을 때 어떠할까?

자신의 의지대로 숫자가 나오는 것이 아닌 확률, 즉 '운' 에 맡기는 놀이 이다.

일상생활의 알레아 놀이는 어디에 있을까? '운' 이라는 단어에서 가장 떠오르는 복권 이 역시도 알레아 놀이 이며,

화투, 마작, 포커, 슬롯머신 역시 알레아 놀이에 속한다.

주사위는 단순히 운으로 결정되는 놀이정도로 알고 있다.

하지만 정확히는 확률이며 통계이다.

컴퓨터 게임 전체에 확률과 통계가 있는데 이를 '밸런싱' 이라는 이름으로 곳곳에 있다.

이 '밸런싱' 은 플레이어와 NPC 그리고 오브젝트의 행동에 의해 결정 된다.

따라서 게임 제작자들은 유저가 재미를 느끼도록 밸런싱 조절에 신경을 써야 할 것이다.


일링크스(Ilinx)

몰입 놀이인 일링크스는 고도의 집중력이 필요한 놀이를 의미 한다.

서커스, 롤러코스터, 스키 처럼 일시적으로 무아지경의 상태를 일으키는 놀이 이지만

현기증이라기보다 난관 상태에서 경험하는 일종의 몰입 상태 라고 볼 수 있다.

컴퓨터 게임은 플레이어에게 끊임없이 도전 과제를 준다.

플레이어는 이 과제를 수행하기 위해서 한계에 도전하고, 극복해 가며, 그 자체에 몰입을 하게 된다.

일링크스 놀이는 앞에서 말했던 다른 분류의 놀이들 속에 녹아 들어 있다.

미미크리, 아곤, 알레아 이 세 가지의 놀이가 컴퓨터 게임 자체를 이루는 구성 요소 라면

일링크스는 게임을 즐기는 사람의 감정 상태를 말 한다.

즉. 세 가지의 놀이가 플레이어를 일링크스의 상태로 이끌어 가는 셈 이다.



여기 까지 로제 카이와의 「놀이와 인간」에서 분류한 네 가지의 놀이를 살펴 보았다.

게임이 살아남기 위해서는 위 네 가지의 놀이가 성립해야 하며 지속적인 순환이 되어야 한다.

아마도 위의 네 가지 단어를 처음 들어 보아서 혼란스러울 수도 있다.

하지만 게임 제작자 에게 있어서 중요하지만 간단한 내용 이므로 꼭 알아두자.


정리

ⓐ  인류학자인 호이징거는 인간은 놀이하는 동물이라고 말했다.
이와 같이 놀이는 인간 문명 창조의 원동력으로, 매우 위대한 행위이다.

ⓑ 놀이학자인 로제 카이와는 인간이 재미를 느끼는 놀이를
'미미크리', '아곤', '알레아', '일링크스' 라는 네 가지 유형으로 나누었다.

ⓒ 미미크리는 게임 속에서 플레이어가 맡는 혁할이다.

ⓓ 아곤은 게임의 진행을 총괄하는 규칙의 모음이다.

ⓔ 알레아는 플레이어가 게임을 진행하며 느끼는 공정함, 밸런싱을 의미한다.

ⓕ 일링크스는 플레이어가 게임에서 승리자가 되기 위해서 극복해야 할
도전 과제에 온 정신을 몰입하면서 느끼는 감정 상태를 의미한다.

ⓖ 게임이 재미있는 이유는 놀이의 네 가지 유형인
미미크리, 아곤, 알레아, 일링크스가 상호 복합적으로 게임에 녹아있기 때문이다.




TCP와 UDP의 차이점

1. Connection Oriented Protocol vs. Connectionless Protocol

TCP는 3-way handshaking을 통하여 Session을 수립 후에 통신을 하는 Connection Oriented (연결지향형) Protocol 입니다. 그에 반해 UDP는 상대방이 받던 받지 못하던 무작정 데이터를 전송하는 Connectionless (비연결형) Protocol 입니다. 그럼, 언제 UDP를 사용할까요? 

예를 들어 DNS 같은 경우 예로 보세요. 누군가 DNS 서비스를 요청할 때마다 TCP처럼 Session을 맺고 통신을 한다면 속도도 느리고, 서버 리소스도 엄청나게 소모될 겁니다. 그런가 하면 NMS(Network Management Server)가 5분에 한번씩 장비 상태를 점검하기 위해 정보를 읽어오는데 수백, 수천대의 장비와 Session을 맺어야 한다면 이것도 마찬가지로 문제가 있겠죠? 그래서, SNMP(Simple Network Management Protocol)는 UDP를 사용하는 Protocol입니다.

2. Reliable vs. Best Effort

TCP는 데이터 전송에 문제가 발생했을 경우, 재전송 요청 등을 통해서 데이터가 정확하게 전송되는 것을 보장하는 Protocol인 반면, UDP는 에러가 생기든 말든... 보내는 놈이나 받는 놈이나 신경을 쓰지 않는 Protocol입니다. 이런, 이따위 Protocol을 어디에 쓸까요?

재전송을 하면 안되는 서비스들이 있습니다. 대표적인 예가 바로 Real-Time Protocol입니다. 전화를 하고 있다고 가정해 보세요. '여''보''세''요'라는 4개의 데이터를 전송했는데, '세'를 못 받았다고 다시 보내달라고 하면 '여보요세'가 될겁니다. 그냥 '여보X요'로 전달하는게 더 낫겠죠?

그런가 하면 Multicast 서비스가 UDP를 사용합니다. 1:N으로 통신하는 방식에서 한놈이 데이터를 받지 못했다고 재전송 요청을 한다고 생각해보세요. 제대로 받은 놈들도 해당 데이터를 다시 받아서 처리해야 한다는 문제가 발생할 수 있습니다. 그래서 UDP를 사용하는거죠!

그리고, UDP는 상대방이 잘 받았는지 못 받았는지 신경을 쓰지 않으니 Ack가 별도로 필요없겠죠? ^^

3. Sequence Number vs. Non-Sequencing

TCP는 데이터 유실 등을 확인하기 위하여 데이터마다 Sequence Number라는 번호를 붙여서 전송을 합니다. 하지만, UDP는 데이터 유실에 관심이 없기 때문에 Sequence Number가 없는 Non-Sequencing Protocol 입니다. 그럼, 데이터를 전송할 때 상이한 경로로 전송되서 나중에 보낸 데이터가 먼저 도착하게 되면 어떻게 되나요? 예를 들어 '여''보''세''요'를 전송했는데 '여''세''보''요' 순으로 도착을 한겁니다.

이렇게 데이터 전송 순서를 알아야 하는 서비스는 RTP(Real-time Protocol)과 같은 Sequence Number 기능을 가지고 있는 기술과 함께 쓰이거나 어플리케이션 수준에서 Sequencing을 수행합니다.
 
4. Half-duplex vs. Full-duplex

Layer 2에서의 duplex가 아니구요, 한개의 Port를 이용하여 [upload/download]가 가능한가에 대한 부분입니다. 원칙적으로 UDP는 Half-duplex이고 TCP는 Full-duplex 입니다. 하지만, UDP도 어플리케이션 개발 방식에 따라 Full-duplex 방식으로도 설계가 가능합니다. 그래서,TCP를 Full-dulpex 방식이라고 이야기하지만, UDP를 Half-duplex 또느 Full-duplex 방식이라고 정의하지는 않습니다.

5. Control vs. Don't care

TCP는 Error-Contol, Flow-Control 등 이것저것 제어를 많이 합니다.
하지만, UDP는 그런건 그냥 짜증스럽고 귀잖을 뿐입니다. 

My-SQL 백업 및 복원

- 특정 데이타베이스 하나만을 백업
백업형식 : myslqdump -u DB계정명 -p 백업대상데이터베이스명 > 저장할파일명
복구형식 : mysql -u DB계정명 -p 복구할테이터베이스명 < 저장할파일명

# ./mysqldump -u root -p mysql > mysql.sql      //mysql 디비 백업 예
# ./mysql -u root -p mysql < ./mysql.sql           //mysql 디비 복구 예

위 백업결과물인 sql 파일은 디비를 생성하지는 않는다.. 다시말해 복구하려는 디비에 mysql이란 디비가 없다면 복구가 되지않는다.

복구하려는 mysql 디비에 테이블이 이미 존재한다면 복구 실패... sql 파일에서 해당 디비의 테이블을 생성하므로.. 따라서 특정 데이타베이스 하나만을 복구 할 시에는 데이타베이스의 이름만 생성한 다음에 위 방법의 복구하여야 함


- 특정 데이타베이스의 특정 테이블 하나만을 복구 백업
백업형식 : myslqdump -u DB계정명 -p 데이터베이스명 테이블명 > 저장할파일명
복구형식 : mysql -u DB계정명 -p 데이터베이스명 < 저장할파일명
#./mysqldump -u root -p mysql user > user.sql
#./mysql -u root -p mysql < user.sql

- 여러개의 데이터베이스 한번에 백업과 복구
백업형식 : mysqldump -u root -p --databases [옵션] DB1 [DB2 DB3] > 파일명
복구방법 : mysql -u root -p < 파일명
# ./mysqldump -u root -p --databases mysql test > dbs.sql   //mysql, test 디비를 백업
# ./mysql -u -root -p < dbs.sql                                            //백업된 두 디비를 복구

databases 옵션 시 일반 백업과 달리 "CREATE DATABASE ..."문과 "USE DB .." 문이 추가됨
//달리 애기하면 DB를 생성할 필요가 없이 바루 디비가 생성되고 생성된 디비로 전환되고 테이블을 생성하고 인서트로 데이타를 붓는다.. 데이타베이스를 지정하면 안됨


- Mysql 의 전체 데이타베이스 백업
백업형식 : ./mysqldump -u root -p --all-databases > 파일명.sql
복구형식 : mysql -u root -p < 파일명.sql

원본 데이타베이스명과 동일한 디비가 생성됨


- 기존 테이블 삭제후  백업된 파일로 복구를 위한 백업
 (mysqldump문으로 데이타베이스 백업 시 각각의 create table문 앞에 drop table문을 삽입한 형태가 된다)
백업형식 : ./mysqldump -u root -p --add-drop-table test > test.sql
test 데이타베이스를 기존 태이블 삭제문을 추가하여 백업한다
복구형식 : ./mysql -u root -p test < test.sql
기존 테이블을 삭제하고 복구한다는것에 유의


- 기타 옵션
   -A, --all-databases : 모든 DB 덤프
   -B, --databases : 특정 DB를 덤프 
   --opt : 버퍼링을 비확성화 하고, 많은 데이터를 덤프에 있는 소량의 SQL구문에 기록해 더효율적으로 동작하다록 한다.
   --allow-keywords, --quote-names : 예약어를 사용하는 테이블을 덤프하고 복원할 수 있게 한다.
   --lock-alltables : 전역적으로 일관된 백업을 만들도록 "FLUSH TABLES WITH READ LOCK"을 사용한다. 
   --tab : "SELECT INTO OUTFILE"로 파일을 덤프하여, 덤프 및 복원 속도가 매우 빠르다.
   -d, --no-data :  데이터는 제외하고 스키마만 덤프
   -t, --no-create-info : 스키마는 제외하고 




로그 복구 방법

delete나 truncate 같은 명령으로 데이터를 지웠을때 복구하는 방법입니다.
mysql의 모든 명령들은 로그를 남기기때문에 가능합니다.
일단 mysql의 DB가 쌓이는 디렉토리로 이동합니다. 
대게 /usr/local/mysql/data /usr/local/mysql/var 등으로 설정해 놓으셨을겁니다.
해당 디렉토리로 이동하면 xxx-bin.001 xxx-bin.002 같은 바이너리 파일들이 존재할겁니다.
이게 바로 DB를 첨 생성할때부터 지금까지 쌓여온 로그인데요 이 파일을 활용하시면 삭제된 데이터도 살릴수 있습니다.
바이너리 파일이기때문에 그냥 접근하시면 이상한 문자들이 보이구요
mysqlbinlog 명령을 이용하셔서 사용해야 합니다.
다음은 예제입니다.

일단 DB 디렉토리로 이동한다.
# cd /usr/local/mysql/data

바이너리 파일을 소스파일로 변환한다.
# ../mysqlbinlog leopit-bin.002 > rescue.sql

필요한 구문만 가져온다.
# grep "insert" rescue.sql > rescue1.sql

이렇게 하시면 rescue1.sql은 지금까지의 인서트구문이 다 들어옵니다.
여기서 필요없는 부분은 지우세요

이제 최종적으로 DB에 삽입만 하시면 됩니다.
# mysql -u 계정아이디 -p DB이름 < rescue1.sql

git prompt 설정

ubuntu

다음의 내용을 ~/.bashrc 파일의 끝에 붙여넣는다.

# Configure colors, if available.
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    c_reset='\[\e[0m\]'
    c_user='\[\e[0;32m\]'
    c_path='\[\e[1;34m\]'
    c_git_clean='\[\e[0;37m\]'
    c_git_staged='\[\e[0;32m\]'
    c_git_unstaged='\[\e[0;31m\]'
else
    c_reset=
    c_user=
    c_path=
    c_git_clean=
    c_git_staged=
    c_git_unstaged=
fi

# Add the titlebar information when it is supported.
case $TERM in
xterm*|rxvt*)
    TITLEBAR='\[\e]0;\u@\h: \w\a\]';
    ;;
*)
    TITLEBAR="";
    ;;
esac

# Function to assemble the Git parsingart of our prompt.
git_prompt ()
{
    GIT_DIR=`git rev-parse --git-dir 2>/dev/null`
    if [ -z "$GIT_DIR" ]; then
        return 0
    fi
    GIT_HEAD=`cat $GIT_DIR/HEAD`
    GIT_BRANCH=${GIT_HEAD##*/}
    if [ ${#GIT_BRANCH} -eq 40 ]; then
        GIT_BRANCH="(no branch)"
    fi
    STATUS=`git status --porcelain`
    if [ -z "$STATUS" ]; then
        git_color="${c_git_clean}"
    else
        echo -e "$STATUS" | grep -q '^ [A-Z\?]'
        if [ $? -eq 0 ]; then
            git_color="${c_git_unstaged}"
        else
            git_color="${c_git_staged}"
        fi
    fi
    echo "[$git_color$GIT_BRANCH$c_reset]"
}

# Thy holy prompt.
PROMPT_COMMAND="$PROMPT_COMMAND PS1=\"${TITLEBAR}${c_user}\u${c_reset}@${c_user}\h${c_reset}:${c_path}\w${c_reset}\$(git_prompt)\$ \" ;"





mac

~/.bash_profile 에 다음 내용을 복사한다.


# Custom git prompt
function __git_status() {
    local git_status="`git status -unormal 2>&1`"
    if ! [[ "$git_status" =~ Not\ a\ git\ repo ]]; then
        if [[ "$git_status" =~ nothing\ to\ commit ]]; then
            local ansi=32
        elif [[ "$git_status" =~ nothing\ added\ to\ commit\ but\ untracked\ files\ present ]]; then
            local ansi=33
        else
            local ansi=35
        fi
        if [[ "$git_status" =~ On\ branch\ ([^[:space:]]+) ]]; then
            branch=${BASH_REMATCH[1]}
        else
            # Detached HEAD.  (branch=HEAD is a faster alternative.)
            branch="(`git describe --all --contains --abbrev=4 HEAD 2> /dev/null ||
                echo HEAD`)"
        fi
        echo -n '\[\e[0;'"$ansi"'m\]'"($branch)"
    fi
}
function __git_prompt() {
    ps1pc_start="$1"
ps1pc_end="$2"
ps1git=`__git_status`
    PS1="$ps1pc_start$ps1git$ps1pc_end"
}

#PS1="\[\e[0;32m\]\u@\h:\[\e[0;34m\]\w\$ \[\e[0m\]"

PROMPT_COMMAND='update_terminal_cwd;__git_prompt "\[\e[0;32m\]\u@\h:\[\e[0;34m\]\w " "\[\e[0;34m\]\$ \[\e[0m\]"'

export PATH=$PATH:~/bin
export CLICOLOR=yes
export TERM=xterm-color
#export LESS=X
#if [ -z $DISPLAY ]; then export DISPLAY=":0.0"; fi    # Enable X11 tunneling through ssh
#alias ssh='ssh -Y'                                    # force X11 tunneling through ssh

# Set variable for GTest
export GTEST_COLOR=yes

# Git auto-completion
source ~/.git-completion.bash

# Resize open files
ulimit -n 8192



2013년 10월 10일 목요일

Sublime Text2 설정 & 팁

설치 패키지 목록 
git
git sidebar
BracketHigHlighter - 괄호 하이라이터
SublimeCondelntel - 코드 추적
Python Auto-Complete - 코드 자동 완성
SideBarEnhancements - 사이드바 확장
inputHelper - 한글 입력
SFTP
SublimeREPL - 가상환경 설정


코딩 컨벤션 & 스타일
Python Flake 8 Lint
Python PEP8 AutoFormat






자주 쓰게되는 단축키

  • 행 들여쓰기 · 내어쓰기
    win: ctrl+[ · ctrl+], mac: cmd+[ · cmd+]
    기본적으로 탭키를 사용할 수도 있지만, 한참 코드를 작성하다가 행단위 들여쓰기를 제어하려면 이 방식이 편하기도.
  • 행 상하 이동
    win: ctrl+shift+↕, mac: cmd+ctrl+↕
  • 코드블럭 접기 · 펴기
    win: ctrl+shift+[ · ctrl+shift+], mac: cmd+opt+[ · opt+shift+]
  • 찾아바꾸기
    win: ctrl+h, mac: cmd+opt+f
  • 여러파일에서 찾기
    win: ctrl+shift+f, mac: cmd+shift+f
  • GoTo Anything
    win: ctrl+p, mac: cmd+p
    GoTo Anything을 호출한다. 해당기능은 아래서 살펴볼 것이다.
  • Command Palette
    win: ctrl+shift+p, mac: cmd+shift+p
    Command Palette를 호출한다. 해당기능은 아래서 살펴볼 것이다.



    유용한 패키지 목록

    내가 쓰고 있는 패키지는 다음과 같다. 코딩을 즐겁게 해준다 ;)
    • BracketHighlighter
      블럭영역의 시작과 끝을 눈에 좀 더 잘 띄게(?) 해준다. 기본은 옅은 밑줄만 쳐져 있어 분간이 어려웠다.
    • Theme - Soda
      조금은 뚱뚱한 느낌이 드는 기본 테마를 변경해준다. Theme는 에디터 내부 문법강조 컬러를 변경해주는 Color Scheme과는 다른 개념으로, 프로그램 전체의 룩앤필을 칭한다.
    • RailsCasts Theme
      위의 Theme와는 다르게 이건 Color Scheme을 변경해준다. RailsCast 스타일이다. 현재까지 써본것중엔 기본으로 포함된 Twilight과 함께 제일 편안한 색상이다.
    • Package Control
      위에서 살펴보았다. 다양한 패키지를 커맨드 팔렛트에서 관리할 수 있도록 해준다.
    • Quick File Creator
      커맨드 팔렛트에서 파일, 폴더 등을 생성할 수 있다. 마우스 안녕~
    • Emmet (ZenCoding)
      젠코딩을 가능하게 해준다. html 코딩할 때 이거 없으면 피곤하다.
      [2012.01.26] ZenCoding이 Emmet으로 진화했다. Fuzzy Search 기능 최고!
    • SCSS
      SCSS를 위한 문법강조를 지원한다.
    • ERB Insert and Toggle Commands
      ERB 블럭 입력을 도와준다.
    • SublimeCodeIntel
      코드인텔리전스 기능이다. 지원언어는 다음과 같다.
      PHP, Python, RHTML, JavaScript, Smarty, Mason, Node.js, XBL, Tcl, HTML, HTML5, TemplateToolkit, XUL, Django, Perl, Ruby, Python3
    • SFTP
      FTP, FTPS, SFTP 지원을 위한 녀석.
      _유료. 이것도 라이센스키를 입력하지 않으면 구매권유 팝업이 뜬다.
    • Automatic Backups
      파일을 저장할때마다 백업본을 생성해준다.







    우분투 런처 등록

    1. 우선 Sublime Text 2 를 다운로드 받습니다. (http://www.sublimetext.com/2)
    2. 아무데나 압축을 풀어줍니다.
    $ tar jxvf Sublime Text 2.0.1 x64.tar.bz2
    3. /opt 폴더로 압축 푼 폴더를 옮깁니다.
    sudo mv Sublime Text 2/ /opt/
    4. /usr/bin 폴더에 실행파일을 심볼릭 링크 걸어줍니다.
    $ sudo ln -s /opt/Sublime Text 2/sublime_text /usr/bin/sublime
    5. application 에 등록 해주는 단계입니다. desktop 파일을 만들어 줍니다.
    $ sudo sublime /usr/share/applications/sublime.desktop
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    [Desktop Entry]
    Version=1.0
    Name=Sublime Text 2
    # Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
    # From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
    GenericName=Text Editor
     
    Exec=sublime
    Terminal=false
    Icon=/opt/Sublime Text 2/Icon/48x48/sublime_text.png
    Type=Application
    Categories=TextEditor;IDE;Development
    X-Ayatana-Desktop-Shortcuts=NewWindow
     
    [NewWindow Shortcut Group]
    Name=New Window
    Exec=sublime -n
    
    * Unity 를 사용한다는 가정 입니다. +_+ 현재 상황에 맞게 고쳐 쓰세요. (다른 파일 참고 하심 됩니다.)
    6. 기본 프로그램을 Sublime Text 로 설정하는 방법입니다. 다른 에디터를 기본프로그램으로 쓰고 계시다면 안하셔도 됩니다.
    $ sudo sublime /usr/share/applications/default.desktop
    위 파일을 열어 기존의 기본 에디터(gedit)를 sublime 으로 변경해줍니다.
    (ex, gedit.desktop 을 모두 sublime.desktop 으로 변경)