2012의 게시물 표시

bash에서 alias 무시하는 방법

alias ifconfig='ifconfig en0' 이렇게 설정했는데 진짜 ifconfig 명령을 실행하고 싶으면 아래처럼 하면 된다. 첫번째 방법 $ command ifconfig 두번째 방법 $ "ifconfig" 세번째 방법 $ \ifconfig

2012년 하반기에 읽은 책

[개발] 아는 만큼 보이는 데이터베이스 설계와 구축 <이춘식> ★★★★★ 다시 기본으로 돌아가자. 대규모 서비스를 지탱하는 기술 <이토 나오야, 다나카 신지> ★★★★ 이미 안정적으로 운영되고 있는 사이트를 이어 받아서 운영하게 되면 초기에 어떤 고민 때문에 지금 이러한 아키텍처가 설계되었는지 알기 어렵다. 이 책을 통해 조금이나마 초기 설계자들이 어떤 고민을 했었는지 들여다 볼수 있을 것이다. 스크럼 Scrum <켄 슈와버, 마이크 비들> ★★★ 기억해야할 단어들: 스크럼 마스터, 일일 스크럼, 백로그, 스프린트 등 리팩토링 <마틴 파울러> ★★★★ 리팩토링의 교과서. 개발자라면 'Clean Code'와 함께 이 책을 꼭 읽어보자. [교양] 우리는 어떻게 프로그래밍 되었는가 <고진석> ★ 근대를 말하다 <이덕일> ★★★ 대한민국 국민이라면 꼭 읽어봐야할 책. 다만 흥미롭게 읽혔던 이덕일 선생의 책을 상상했다면 이 책은 약간 실망할수도. 아프리카에는 아프리카가 없다 <윤상욱> ★★★★★ 이슬람, 아메리카와 함께 딱히 우리에게 영향이 없을 것 같은 아프리카를 다루었지만 이 책을 손에 든 순간 놓을 수 없었다. 이 책을 읽고 '블러드 다이아몬드'를 보면 또 다른 느낌으로 다가올 것이다. 멀티 유니버스 <브라이언 그린> ★★★ 저자가 아무리 설명의 달인이라고 해도 어렵긴 마찬가지. 그러나 책 전반부에서 다중우주를 패치에 비유해서 설명하는 부분은 압권! 내가 살고 있는 이 세상이 궁금하다면 '우주의 구조'와 함께 꼭 읽어보자. 어디 사세요? <경향신문 특별취재팀> ★★★★ 현재 우리나라 부동산 상황을 이해하려면 이 책을 읽으면 된다. 경제학 3.0 <김광수> ★★★ 2012년에 읽기에는 조금 진부한 내용.

manifest.json sample

http://cl.ly/code/3I0T2j163e2V

My Snippets

이미지
meteor 라는 녀석이 있길래 어떤 녀석인지 궁금해서 이것저것 해보다가 'My Snippets'라는 간단한 single page application을 만들어 보았다. http://mysnippets.meteor.com/ https://github.com/ickhyun82/mysnippets 처음 생각한건 이게 아니었는데 만들다 보니 이렇게 되어 버렸다. meteor를 왜 쓴거니..

static site generator

github 에 프로젝트 페이지 를 만드려다가 static site generator라는 용어를 알게 되었는데 이미 그것과 관련된 툴들이 많이 있었습니다. 말 그대로 static한 html 파일들을 생성해주어서 그 파일들로만 서비스를 하는겁니다. 보통 우리가 어떤 사이트를 들어가게 되면 그 사이트의 서버는 사용자로부터 받은 요청이 올바른지 확인하고 , DB에서 데이터를 읽은 다음 그 데이터를 템플릿 엔진이랑 쿵짝쿵짝해서 브라우저가 읽을 수 있는 형식으로 변환해서 내보내게 됩니다. 그런데 단순히 html 파일로만 서비스를 하게 되면 그러한 과정이 모두 생략됩니다. 이렇게 하게 되면 장점이 몇가지 생깁니다. 첫째, 보안이 향상됩니다. 예를 들어 DB와의 연결이 없기 때문에 SQL 인젝션과 같은 공격을 피할 수 있습니다. 두번째로 성능이 좋아집니다. 더 적은 리소스로 더 많은 요청을 처리할 수 있다는 의미입니다. 세번째로 서버에 배포가 쉬워 집니다. DB 설치가 필요없고 톰캣과 같은 어플리케이션 서버 혹은 언어별로 필요한 이런저런 모듈을 설치할 필요가 없습니다. 즉, html 파일만 서비스할 수 있는 서버가 있으면 어디든지 배포가 가능합니다. 네번째, 컨텐츠 자체에 대한 버전 관리가 쉬워 집니다. 파일을 생성하고 git에 commit 만 하면 컨텐츠 변경 이력을 쉽게 파악할 수 있습니다. 물론, 단점도 있습니다. 첫째, html 파일을 생성할 수 있는 환경이 아니면 새로운 문서를 배포하기가 힘듭니다. 즉, 티스토리처럼 아무 컴퓨터에서나 글을 쓸 수 없습니다. 둘째, 댓글과 같은 사용자 액션을 받을 수 없습니다. 다른 방법을 찾아봐야 합니다. statis site generator에는 jekyll (ruby), hyde (python) 등이 있습니다.

MacPorts로 설치한 daemon 프로그램 시작하고 종료하기

/opt/local/etc/LaunchDaemons 디렉토리 아래에 daemon 프로그램을 쉽게 그리고 확실하게 실행하고 종료할 수 있는 스크립트들이 있습니다. 아파지 HTTP 서버는 /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper MySQL 서버는 /opt/local/etc/LaunchDaemons/org.macports.mysql55/mysql55.wrapper 그 밖에 mongodb, rsync 등도 비슷하게 실행하거나 종료할 수 있습니다. 문득 daemon의 정의가 궁금해서 찾아 보았습니다. 뭔가 늘 실행중이라는 느낌이 들긴 하는데 좀 더 정확히 알고 싶군요!! Daemon[디-먼]은 주기적인 서비스 요청을 처리하기 위해 계속 실행되는 프로그램을 말한다. 디먼은 수집된 요구들을 또다른 프로그램이나 프로세스들이 처리할 수 있도록 적절히 전달한다. 디먼의 예로서, 각 웹 서버들은 웹 클라이언트나 사용자들로부터 들어오는 요구를 계속해서 기다리는 HTTPD라는 디먼을 가지고 있다. 사전적 의미에 따르면, 신화에 나오는 디먼은 "신들과 사람들 중간에 위치하고 있는 일종의 수호신"이라고 되어 있다. Daemon은 demon과 헷갈리기 쉬운데, 비슷한 의미를 갖고는 있지만 조금 다르다. 해커사전(The New Hacker's Dictionary)에서 구분하고 있는 바에 따르면, daemon은 운영체계하에서 그 자신이 직접 실행되는, 하나의 프로그램이고, demon은 커다란 응용프로그램의 일부분이라고 한다.  [출처 : http://terms.co.kr/daemon.htm] 발음이 [디-먼]이군요..그래서 데몬이라 썼다가 전부 daemon으로 고쳤습니다.^^ 편하실데로 발음하세요~

apache 서버에 설치된 모듈 확인하기

아래 명령을 통해서 아파치에 설치된 모듈 리스트를 확인할 수 있습니다. ./httpd -M

apache rewrite_module 로그

버전) apache 2.2 주의) apache 2.2와 2.4는 설정이 좀 다릅니다. 아래 내용은 2.2에서 테스트하였습니다. 참고)  http://httpd.apache.org/docs/2.2/ko/mod/mod_rewrite.html 참고2) 2.4는  http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html 를 참조하세요. 아파치 rewrite_module 에 대해서는 검색해보면 많습니다. 하지만 RewriteCond 및 RewriteRule 설정이 복잡하거나 이상해서 원하는데로 동작안하는 경우가 있습니다. 이럴때는 그냥 아무 생각없이 설정을 만지작거려 보다가 "어라?!?!" .......다시 아파치 매뉴얼을 읽어봅니다. 그리고 다시 설정을 만지작거리다가 운 좋으면 가끔 될 때도 있지만 아마도 1년 중에 360일은 운이 없는 날인듯 합니다.ㅋㅋ 간혹 되더라도 원하는데로 동작하게 했다는 것 이외에는 큰 의미가 없습니다. 나중에 또 삽질이 반복될테니까요. 암튼 우리같은 사람은 뭐가 잘 안될 때 증상을 파악해야 합니다. 바로 로깅이죠. 근데 rewrite_module의 로그를 남기는 방법에 대한 설명은 영문 매뉴얼 이외에는 잘 없어서 간단한 예제 하나 올립니다. (야간 서버 작업 중인데 기다리는 시간이 너무 지루합니다.^^ 롤백 어쩌고 저쩌고 하는거 보니 뭐가 잘 안되나 보네요. DB는 정말 어렵습니다. 엉엉) <IfModule rewrite_module> RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/notice.html -f RewriteRule .* /notice.html RewriteLog logs/rewrite.log RewriteLogLevel 4 </IfModule> 빨간색으로 표시된 부분이 바로 rewrite 로그 남기는 설정입니다. 로그 레벨은 0부터 9까지 사용할 수 있는데 숫자가 클수록 자

Mac용 영어사전

영어로 된 pdf 문서를 읽다가 갑갑해서 만든 영어 사전 어플입니다. 인터넷만 연결되어 있으면 언제 어디서나 사용가능합니다. Growl이 설치되어 있어야 합니다. Tip. Quicksilver에서 어플을 실행하는 단축키를 설정하면 편리하게 사용할 수 있습니다. 사용자 홈디렉토리의 .cuckoo_history.YYYYMM 파일에 검색했던 단어들이 정리되어 있습니다. 참고) 최근에 검색했던 단어는 클립보드에 저장됩니다. [사용방법] 1. 영어단어를 선택한다. 2. 어플을 실행한다. [다운로드] http://ge.tt/5aiVXAP

bash programming - read

read 표준 입력으로부터 입력을   받는다. read 명령에는 여러가지 옵션이 있다. 알고 있으면 좋은 옵션 몇개만 정리하면 -p (prompt) # 새로 만들 branch명을 입력받는다. echo -n "enter new branch name : " read branchname # 이렇게 하는 대신 아래처럼 할 수 있다. read -p "enter new branch name : " branchname # branchname 파라미터가 없으면 $REPLY라는 변수에 저장된다. read -p "enter new branch name :" echo $REPLY -d (delim) # newline 즉 enter key를 입력하면 입력이 종료되는데 다른 문자로 변경할 수 있다. # : 문자를 만나면 입력이 끝난다. read -d : -s (silent) # 입력받은 문자를 화면에 표시하지 않는다. read -s 모든게 그렇겠지만 linux 또한 아는만큼 쓰는거 같다. 옵션 하나면 해결될 문제를 그 옵션을 몰라서 고생한다. 리눅스를 사용하다가 뭔가 불편하다면 의문을 가지자. 이런 기능은 혹시 없을까? 좀 더 쉬운 방법이 있을텐데라고... 그동안 수많은 개발자들이 리눅스를 개발하면서 그냥 지나쳤을리 없으니까..

bash programming - 연산자

&& 연산자와 || 연산자는 short-circuiting 연산자이다. 즉, && 왼쪽 명령의 exit 코드가 0이 아니면 && 오른쪽의 명령은 실행되지 않는다. 마찬가지로 || 왼쪽 명령의 exit 코드가 0이면 || 오른쪽 명령은 실행되지 않는다. bash는 exit가 0을 리턴하면 성공, 그 외의 숫자는 실패를 의미한다. 아무것도 리턴하지 않으면 0을 리턴한것으로 간주한다. # 컴파일에 성공하면 배포한다. 배포에 실패하면 서버를 재시작하지 않는다. compile_project && deploy_war && restart_server # 컴파일에 실패하면 에러 메시지를 출력한다. compile_project || echo "컴파일에 실패하였습니다."

bash programming - 배열에 대해서

bash는 1차원 배열만 지원한다. 인덱스는 0부터 시작하며 정수값만 사용할 수 있다. 인덱스가 반드시 0부터 시작해야 하는건 아니며 연관 배열처럼 사용할 수도 있다. declare -a name 명령을 사용해서 배열을 선언할 수도 있으며 declare -a 명령을 사용하면 현재 선언되어 있는 모든 배열변수를 볼 수 있다. # 네 개의 요소를 가지는 배열 선언 names=(e0 e1 e2 e3) # 첫번째 엘리먼트를 출력 echo ${names[0]} # 인덱스값을 넣지 않으면 0번째 엘리먼트를 출력 echo ${names} # 배열 요소의 개수 echo ${#names[*]} # n번째 엘리먼트의 글자수를 구하려면 echo ${#names[n]} # 0번째 엘리먼트의 글자수를 구하려면 echo ${#names} # 인덱스가 2 이상인 엘리먼트들을 출력 echo ${names[*]:2} # 인덱스가 1 이상인 엘리먼트 두개만 출력 echo ${names[*]:1:2} # 엘리먼트 추가 names=(${names(*)} e4 e5 e6) # 엘리먼트 삭제 unset names[2] [*]과 [@]는 따옴표(") 안에서 서로 다르게 동작한다. books=(java cpp js sql css) mybooks=("${books[*]}") yourbooks=("${books[@]}") # declare -a 실행 결과 declare -a books='([0]="java" [1]="cpp" [2]="js" [3]="sql" [4]="css")' declare -a mybooks='([0]="java cpp js sql css")' declare -a yourbooks='([0]="java" [1]="cpp"

그림으로 보는 vi 단축키

이미지
출처: http://insightbook.springnote.com/pages/7571369

행마다 번호 매기기

별로 쓸일은 없지만 예전부터 궁금했던 문제가 하나 있었다. vi를 사용해서 행마다 번호를 매기는거였는데 비록 vi를 사용하는 건 아니지만 아무튼 꼼수를 오늘 찾았다. 원본 파일이 a b c d 이고 원하는 결과는 1 a 2 b 3 c 4 d 이다. 원본 파일을 file1.txt라고 하면 cat -n file1.txt > file2.txt 이렇게 하면 된다. 그런데 vi를 사용해서 하는 방법은 없을까. recording 기능을 사용해서 아래처럼 하면 어찌어찌 되긴 한다. 이 시간 피파랭킹은 아래와 같다. Spain Netherlands   Germany   Uruguay   England   Brazil Portugal Croatia   Italy Argentina Denmark   Chile Russia Greece France Switzerland   Sweden Côte Bosnia Japan Australia Mexico 여기에 숫자로 순위를 표시하고 싶다. 일단 Spain 앞에 1. 을 입력한다. 1. Spain Netherlands .. 그리고 커서를 N에다가 위치시키고 아래 명령을 차례데로 날려주면 된다. q a #a라는 레지스터에 레코딩 ^ k v w l y j P ^ ctrl+a j q #레코팅 끝 20@a #a레지스터를 20번 실행 이렇게 명령을 날려주면 된다. 막상 해보니 그렇게 어려운 작업은 아니지만 그래도 좀 쉬운 방법 없을까. <Tip> 전체 레지스터 확인하기 :reg 레지스터 a에 기록된 매크로 보기 :reg a 레지스터 a 수정하기 1. :let @a=' 2. ctrl+r ctrl+r 3. 매크로 수정 4. ' 입력하고 Enter 5. :reg a 로 확인 *  http://vim.wikia.com/wiki/Macros#Vie

vi 연마하기

좀 더 vi를 세련되게 사용해보자. 그 동안 잘 안섰던 기능 그리고 몰랐던 기능만 정리해 본다. ctrl + g 혹은 :f 현재 편집 중인 파일의 이름, 파일 수정 여부, 커서가 몇번째 라인인지 등등을 보여줌 ZZ 파일을 저장하고 vi를 빠져나간다. :wq 명령과 동일 ZQ 파일을 저장하지 않고 vi를 빠져나간다. :q! 명령과 동일 :e! 편집 중인 파일을 마지막으로 저장한 상태로 되돌린다. 즉, 버퍼 내용을 저장하지 않고 처음으로 되돌아가고 싶을 때 사용 :e# 동시에 여러개의 파일을 열었을 때 방금 편집한 파일을 연다. :rew 동시에 여러개의 파일을 열어서 :n으로 다음 파일을 열었을 때 :rew 명령으로 처음 편집했던 파일로 되돌아 갈 수 있다. !!command 명령 모드에서 느낌표 두번을 타이핑하면 커서가 상태줄로 옮겨 가는데 이 때 명령을 실행할 수 있다. 명령의 결과를 현재 라인에 붙혀 넣는다. 예를 들어 !!date를 하면 현재 시간을 입력할 수 있다. r, R r은 한글자만 대체하지만 R은 ESC를 누르기 전까지 문자를 대체한다. H, M, L 정말 요건 안외워진다. 차례데로 커서를 윈도우의 맨위, 중간, 맨아래로 이동 Named Buffer yy 또는 dd 명령 앞에 큰따옴표(")를 쓰고 버퍼명을 쓰면 텍스트를 네임드 버퍼에 저장한다. 이 때 버퍼명을 대문자로 사용하면 텍스트를 버퍼에 덮어 쓰지 않고 버퍼의 끝에 추가한다. 이렇게 하면 파일의 여러 부분을 버퍼에 모아두었다가 한번에 붙혀넣을 수 있다. "ayy   현재줄을 a 버퍼에 저장(덮어씀) "Ayy   현재줄을 a 버퍼에 추가 vim 실행 옵션 vim + filename   파일 편집을 마지막줄에서 시작한다.   

이클립스에서 마우스 없이 개발하기(2)

이클립스의 모든 기능과 단축키를 사용할 수는 없지만 그래도 자바 개발자라면 꼭 알아야할 단축키를 소개합니다. 단축키는 Mac기준입니다. command + . 소스 코드에서 노란 줄(warning)과 빨간 줄(error)이 그어져 있는 곳으로 커서를 이동시키면서 순환합니다. 보통 command + 1이 콤보로 같이 사용되는데 quick fix 창을 띄워서 에러를 수정할 수 있습니다. shift + command + t Type(Class)을 검색할 수 있는 창을 띄웁니다. 클래스를 찾을 때 패키지 익스플로러를 뒤진다거나 복잡한 검색(ctrl+h) 기능 대신 간편하게 사용할 수 있습니다. 검색조건에 와일드카드 문자도 사용할 수 있습니다. shift + command + r 각종 xml, properties 파일 및 템플릿 파일들을 찾을 수 있는 창을 띄웁니다. command + e 현재 열려 있는 에디터들 사이를 이동할 수 있습니다. shift + command + g 커서에 위치한 타입 혹은 메쏘드 등이 어디서 사용되거나 호출되는지 간편하게 찾을 수 있습니다. ctrl + option + h 복잡한 소스코드를 따라가야할 때 사용하면 좋습니다. 현재 메쏘드가 실행된 이후에 어떤 메쏘드들을 차례데로 실행하는지, 혹은 현재 메쏘드가 호출되기까지 어떤 메쏘드들이 실행되어 왔는지를 에디터를 열지 않고도 찾을 수 있습니다. command + t 현재 클래스 혹은 커서 아래에 있는 클래스의 상속 구조를 보여줍니다. command + l Go to Line command + [, ] 이전에 편집한 위치로 이동합니다. 파일이 닫혀 있는 상태라면 다시 열립니다. shift + command + [, ] command + F6으로 에디터 사이를 이동할 수 있지만 불편하기 때문에 저렇게 직접 설정을 해서 사용합니다. 터미널이나 크롬에서도 저 단축키를 사용하기 때문에 헤깔릴 염려가 없지요. command + j, command + shift + j,

이클립스에서 마우스 없이 개발하기(1)

어떤 툴로 어떤 프로그래밍을 하든지간에 마우스는 오른손을 귀찮게 하고 주의력을 분산시킨다. 웹질하거나 게임할 때는 마우스가 아주 편리한 도구이지만 프로그래밍할 때는 그렇지 않다. 그런 차원에서 eclipse를 vi처럼 사용할 수 있게 해주는 플러그인들이 많이 있다. vi를 사용하다가 다른 일반적인 GUI 에디터를 사용할 때 가장 불편한 점은 바로 방향키랑 페이지 스크롤이다. h, j, k, l 및 각종 페이지 스크롤 명령 대신 키보드 한쪽 구석에 있는 방향키를 사용하려면 여간 귀찮은게 아니다. 또한 command+z 대신 u키를 사용할 수 있도 블럭 편집 기능(shift+v)도 사용할 수 있다. 개인적으로 viable을 사용하는데 다른 플러그인과 비교했을 때 버그가 그나마 별로 없는거 같다.  * http://viableplugin.com/ viable은 유료지만 무료 플러그인도 찾아보면 있으니 한번쯤 사용해 보시길 추천합니다.