위 내용을 보니, 개화기 이후 외래어 표기에 대한 시도를 ㅇㅂ, ㅇㅍ을 붙여 쓰는 자음으로 제안하였었군요. 익숙함의 문제겠지만, 우리도 한글의 다양한 표현을 최대한 간편하게 줄여 사용하는 것 같습니다. 아마 외국 발음을 한글로 표현한다면, 저렇게 자유도 높은 결합을 최대한 이용하는 방향으로 나가는게 맞고, 그런 한글을 본다면 술술 읽힐 것 같진 않네요.
'분류 전체보기'에 해당되는 글 611건
F, V 에 대한 옛 한글 표기
Posted at 2010/05/13 17:52// Posted in 잡생각
http://ko.wikipedia.org/wiki/%e1%85%84 ··· 585%258b
HTTP 프록시를 사용하여 외부의 SSH 서버에 접속하는 간단한 방법
Posted at 2010/05/13 14:00// Posted in 장난하기
openssh 의 클라이언트는 외부에 접속할 때 HTTP 프록시를 통하여 접속하는 것을 지원하지 않습니다. 하지만, 다른 유틸의 도움을 받아 접속할 수가 있지요. openssh에는 ProxyCommand 라는 옵션이 있습니다. 이것은 ssh 명령을 내릴때 서버에 직접 접속하지 않고, 다른 명령을 실행시켜 접속을 위임하고, 그 표준 입출력을 접속으로 여기겠다는 것입니다. 그 다른 명령에 HTTP 프록시를 지원하는 'nc' 를 이용하면 됩니다.
예를 들어, squid가 돌고 있는 proxyhost
nc -X connect -x proxyhost:3128 coolengineer.com 80
이런 명령을 내리면 proxyhost:3128에 접속하여 http 프로토콜을 이용하여 coolengineer.com 의 웹서비스에 접속합니다. 이후 "GET / HTTP/1.0" 와 같은 명령을 내리면 제 홈의 HTML 소스가 전송되는 것입니다.
nc -X connect -x proxyhost:3128 coolengineer.com 22
이렇게 하면 coolengineer.com의 SSH 서비스에 접속을 하겠죠. 그럼 openssh 클라이언트의 ProxyCommand 규격에 맞게 다음과 같이 하면..!
ssh -o "ProxyCommand nc -X connect -x proxyhost:3128 %h %p" coolengineer.com
짜잔! openssh 클라이언트인 ssh는 proxyhost를 거쳐서 coolengineer.com 22 번포트에 접속한 nc 의 표준 입출력을 이용하여 로그인을 진행하게 됩니다.
적당한 4월말의 아침 온도와 외출하기 좋다는 날씨예보를 막 듣자 마자 라디오를 끈다.
30대 후반이 돼서 조금씩 찌뿌둥한 몸으로 아침 외출을 간단히 마치고 주차장을 걸어 집으로 들어 온다.
이 짧은 순간에 느껴지는 행복감이란...
온 몸이 느낄 수 있는 조건과 그다지 걱정 없는 정신 상태의 지속이랄까.
^^;
RPM-Wand, 쉽게 RPM 만드는 유틸리티
Posted at 2010/04/19 22:15// Posted in 장난하기소스 컴파일이 되지 않는 바이너리 혹은 스크립트 수준의 패키지를 위한 rpm build utility 입니다. 만들어 쓰던것을 공유해보고자
http://code.google.com/p/rpmwand/위에 둥지를 하나 틀어, rpmwand 라는 이름으로 올렸습니다.
사용방법은 간단합니다.
초기화
$ rpmwand init sample* Created skeleton directory: 'sample-skel'* Created file list: sample-files.txtPlease edit sample-files.txt* Created spec input file: sample.spec.inPlease edit sample.spec.inFix TODO values
rpmwand 는 크게 두가지 명령으로 구성되어 있습니다. 'init' 명령과 패키지 이름을 주면 두 개의 파일과 한 개의 디렉토리가 생성됩니다. rpm 빌드용 spec file과 간단한 skeleton root 디렉토리, 그리고, skeleton에 들어간 file list가 들어 있는 파일하나가 생성됩니다.
빌드
$ rpmwand build sample* Package name : sample* Version : 1.0.0* Release : 1--------------------------------------------------------------------------* Making tarball(sample-1.0.0.tar.gz) for rpm build...* Tarball(sample-1.0.0.tar.gz) is assumed containing 'sample-1.0.0' directory as the first child item* Cloning 'sample-skel' directory to 'sample-1.0.0'* Check if there is custom packaging script (sample-setup.sh)skip running: bash sample-setup.sh /home/pynoos/rpmwand/sample-1.0.0* Tarring 'sample-1.0.0.tar.gz' from 'sample-1.0.0'--------------------------------------------------------------------------* Now, building rpm....Building target platforms: noarchBuilding for target noarchExecuting(%prep): /bin/sh -e /home/pynoos/rpmwand/faked-root.19231/tmp/rpm-tmp.83533+ umask 022+ cd /home/pynoos/rpmwand/faked-root.19231/+ true ==================================================================================+ true 'BEG Build preprocess'+ true 'END Build preprocess'+ cd /home/pynoos/rpmwand/faked-root.19231+ rm -rf sample-1.0.0+ /bin/gzip -dc /home/pynoos/rpmwand/sample-1.0.0.tar.gz+ tar -xf -+ STATUS=0+ '[' 0 -ne 0 ']'+ cd sample-1.0.0++ /usr/bin/id -u+ '[' 503 = 0 ']'++ /usr/bin/id -u+ '[' 503 = 0 ']'+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .+ true ==================================================================================+ true 'BEG Setup'+ true 'END Setup'+ exit 0Executing(%build): /bin/sh -e /home/pynoos/rpmwand/faked-root.19231/tmp/rpm-tmp.83533+ umask 022+ cd /home/pynoos/rpmwand/faked-root.19231/+ cd sample-1.0.0+ true ==================================================================================+ true 'BEG Build'+ echo 'BUILDROOT: /home/pynoos/rpmwand/faked-root.19231'BUILDROOT: /home/pynoos/rpmwand/faked-root.19231+ echo 'PACKAGE-NAME: sample'PACKAGE-NAME: sample+ echo 'PACKAGE-VERSION: 1.0.0'PACKAGE-VERSION: 1.0.0+ echo 'PACKAGE-RELEASE: 1'PACKAGE-RELEASE: 1+ true 'END Build'+ exit 0Executing(%install): /bin/sh -e /home/pynoos/rpmwand/faked-root.19231/tmp/rpm-tmp.83533+ umask 022+ cd /home/pynoos/rpmwand/faked-root.19231/+ cd sample-1.0.0+ true ==================================================================================+ true 'BEG Installation'+ /bin/cat+ true 'END Installation'+ make prefix=/home/pynoos/rpmwand/faked-root.19231/usr exec_prefix=/home/pynoos/rpmwand/faked-root.19231/usr bindir=/home/pynoos/rpmwand/faked-root.19231/usr/bin sbindir=/home/pynoos/rpmwand/faked-root.19231/usr/sbin sysconfdir=/home/pynoos/rpmwand/faked-root.19231/etc datadir=/home/pynoos/rpmwand/faked-root.19231/usr/share includedir=/home/pynoos/rpmwand/faked-root.19231/usr/include libdir=/home/pynoos/rpmwand/faked-root.19231/usr/lib libexecdir=/home/pynoos/rpmwand/faked-root.19231/usr/libexec localstatedir=/home/pynoos/rpmwand/faked-root.19231/var sharedstatedir=/home/pynoos/rpmwand/faked-root.19231/usr/com mandir=/home/pynoos/rpmwand/faked-root.19231/usr/share/man infodir=/home/pynoos/rpmwand/faked-root.19231/usr/share/info installI am FAKE Makefile install target. Do you see me?+ true ==================================================================================+ true 'BEG make install'+ true BUILDROOT:/home/pynoos/rpmwand/faked-root.19231+ /bin/rm -rf /home/pynoos/rpmwand/faked-root.19231/sample-1.0.0/Makefile+ mv /home/pynoos/rpmwand/faked-root.19231/sample-1.0.0/etc /home/pynoos/rpmwand/faked-root.19231/sample-1.0.0/usr /home/pynoos/rpmwand/faked-root.19231+ true 'END make install'+ /usr/lib/rpm/brp-compress+ /usr/lib/rpm/brp-strip+ /usr/lib/rpm/brp-strip-static-archive+ /usr/lib/rpm/brp-strip-comment-noteProcessing files: sample-1.0.0-1Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/pynoos/rpmwand/faked-root.19231Wrote: /home/pynoos/rpmwand/RPMS/noarch/sample-1.0.0-1.noarch.rpmExecuting(%clean): /bin/sh -e /home/pynoos/rpmwand/faked-root.19231/tmp/rpm-tmp.27064+ umask 022+ cd /home/pynoos/rpmwand/faked-root.19231/+ cd sample-1.0.0+ true ==================================================================================+ exit 0--------------------------------------------------------------------------* RPM build done...* Check../home/pynoos/rpmwand/RPMS/noarch/sample-1.0.0-1.noarch.rpm
위 명령은 'build' 인데 인자를 추가로 version, release, architecture를 갖습니다. 이 명령으로 spec.in을 spec으로 만들고, file-list를 읽어서 rpm을 만드는데 사용합니다.
이렇게 간단한 두 명령으로 일단 sample-1.0.0-1.noarch.rpm 파일이 만들어집니다.
실제 사용을 위해서는 init 명령에 의해 생성된 skeleton root에 원하는 파일을 추가하고, 설치 목록 파일(file-list.txt)을 수정하여 build 명령을 주면 됩니다. 만들어지는 spec.in 파일들을 직접 열어서 수정할 수 있고, 수정하면 전문적으로 사용할 수도 있는 구조로 되어 있으므로, 처음 배우시는 분들에게 도움이 될 것입니다.
참고로, 저희 팀 내부에서는 이 유틸리티의 전신이 되는 툴을 사용하여 php 배포용 rpm을 만들어 사용합니다.
Subversion Commit Log Template for VIM
Posted at 2010/04/11 23:34// Posted in 장난하기
VIM 사용자를 위해서, 서브버전 커밋로그 템플릿 빔플러그인을 만들어 보았습니다.
원래.
12 --This line, and those below, will be ignored--34 M src/cmdcenter.py
이렇게 나오던 것을
1 [Hojin Choi][BT:n/a][RV:n/a][2010-04-11]23 M src/cmdcenter.py45 --This line, and those below, will be ignored--6 * Log template from /home/pynoos/.subversion/commit-template.txt
이런식으로 맨 윗줄에 임의의 양식을 넣어 주고, 그 아래에 수정된 내용을 바로 붙여주는 기능입니다.
$ more ~/.subversion/commit-template.txt@DATE:%Y-%m-%d[Hojin Choi][BT:n/a][RV:n/a][{DATE}]
템플릿의 예로 사용된것은 위와 같습니다.
여기서 다운로드하시면됩니다.
제목은 아직 안 정했음
Posted at 2010/04/04 00:18// Posted in 사는 얘기
집중하기 조금 어렵게 되자 집에 돌아왔다.
약간의 만족함과 부족함을 동시에 느낄 수 있는 오묘함마저 있다.
유치하게 표현하자면,
지친 몸에게 한 잔의 맥주를 생각하는 것만으로도 하루 잘 보냈다고 할 수 있을듯!
좋다~!
Theodore 표기.
Posted at 2010/03/25 15:27// Posted in 잡생각
찾은게 아까워서 기록. (뭔짓이야!)
(15:22:45) Hojin: 시어도어 119000 개
(15:22:58) Hojin: 데오도르 17800 개
(15:23:10) Hojin: 시어도르 62300 개
(15:23:22) Hojin: 데어도어 57500 개
(15:23:38) Hojin: 씨어도어 3540개
(15:23:47) Hojin: 씨어도르 1240개
(15:22:58) Hojin: 데오도르 17800 개
(15:23:10) Hojin: 시어도르 62300 개
(15:23:22) Hojin: 데어도어 57500 개
(15:23:38) Hojin: 씨어도어 3540개
(15:23:47) Hojin: 씨어도르 1240개
저는 선입견이라는 단어를 좋아(?)합니다. 아니, 선입견이 작동하는 방식에 오히려 흥미를 느낀다고 해야할까요? 선입견에 대해 조금 생각해온 바가 있어 정리해보렵니다.
선입견은 첫인상을 보고 판단하는 굉장히 빠른 판단을 수반하게 됩니다. 누구나 이런 선입견이 동작합니다. 그것은 어린아이가 세상을 배울때 본능적으로 익힌 것이기 때문이지요. 내가 어떤 행위를 했을때, 안좋은 자극으로 되돌아 온다면, 어린이는 기억하게 됩니다. 다시 겪고 싶지 않기 때문이죠. 그런 생활의 반복이 일정한 패턴을 찾아내게 되고, 나아가 어떤 사람과의 관계에 있어서도 경험하지 않아도 이전 경험에 비추어 굉장히 빠른 판단을 갖게 됩니다.
마찬가지로, 안좋은 자극이든 좋은 자극이든 그 결과에 대한 일정한 규칙을 판단하는 동작 방식은 어릴적부터 훈련되는 것입니다.
사람들은 대화하지 않고도 겉모양으로 어느정도 사람을 이해할 수 있습니다. 세상을 살아온 전문가니까요. 이젠 나아가 겉모양을 바꾸므로써 나를 다르게 보일 수 있습니다. 마찬가지로 세상을 살아온 전문가니까요. 이젠 겉모양으로 사람을 판단하지 않음으로써 일정한 거리를 두어 판단을 위한 정보를 더 수집하면서 그 사람을 이해하려고 합니다. 더더욱 마찬가지로 세상을 살아온 전문가니까요.
잠시 다른 길로 샜습니다만, 선입견이라는 것이 동작하는 방식은 종합적인 빠른 판단이라는 매력적인 방법입니다. 약간의 부정적인 어감을 제외한다면, 우리가 이 복잡한 세상을 쉽게 사는 방법인것이죠. 아마 정보량이 많아지면 많아질수록 이런 능력이 발달되어야 그나마 살 수 있지 않을까요?
오픈소스는 개발자 그룹에게 많은 도움을 주는 것임에는 틀림없다. 어떤 프로젝트의 메인에 위치할 수도 주변 모듈에 위치할 수도 있으니까. 오픈 소스를 가져다가 잘 배치하는 것만으로도 프로젝트의 상당 모듈에 대한 설계를 쉽게 넘어갈 수 있지 않은가?
뭐 때론 납품을 해야하거나 메인 프로그램이 이미 공개된 소프트웨어 소스의 대부분을 사용하여 해결해야하는 경우도 있을 수 있다. 이 경우 라이센스문제만 허용한다면 문제될 것도 없다. 납품을 기대하는 당사자가 소스를 보는 것이 아니면 무슨 문제가 있으랴. 또한 서비스로 제공하는 부분에 대하여 소스 제공의 의무가 없는 것을 알고 있다면 이것 또한 문제가 아닐 수 있다.
오픈소스에 대해 잘 알고, 라이센스 문제도 없다. 그런데도 오픈소스를 가져다쓰는 양심상 문제가 생기는 것은 무엇일까? 그것은 내 이름을 걸고 어떤 문제가 해결되었을 때, 검증 절차를 따지는 후배들에 의해 내 결과물을 어떻게 판단할까를 고민할 때는 문제가 조금 달라지는 것 같다.
내 실력이라하는 것이 어디에 나타나는가. 그 사람의 역할이 그 문제를 해결함에 있어서 어느 정도의 기여를 했느냐가 판가름나는 순간을 생각한다면, 오픈소스는 사실 최선의 선택이라 할 수 없다.
사업의 시급함이 문제이냐 내 작업 결과물에 대한 판단이 문제냐하는 것에 있어서, 나는 과연 내 자존심을 살짝 내려 놓을 수 있는 각오가 되어 있나?
-- 끝 --
SVN log edit script
Posted at 2010/02/16 17:38// Posted in 장난하기가지고 다니는것이 귀찮아서요. 블로그를 임시 저장소로 쓸 겸해서 올립니다.
#!/bin/shTMPFILE=/tmp/svnlog-$$.txtTMPFILE2=/tmp/svnlog-$$.orig.txtsvn pg --revprop -r$1 svn:log > $TMPFILE || exit 1ex $TMPFILE <<'EOT':$d:wq!EOTcp -p $TMPFILE $TMPFILE2vi $TMPFILE || exit 1if cmp $TMPFILE $TMPFILE2 2>/dev/null; thenecho "Skip editting..."elsesvn ps --revprop -r$1 svn:log -F $TMPFILEfirm -f $TMPFILE $TMPFILE2
언젠가는 쉬는 날이 오겠지요. 그때까지는 달리렵니다.