2010년 2월 18일 목요일

MacVim - 맥에서 한글을 지원하는 vi 에디터


맥에 기본적으로 포함되어 있는 vim의 경우 멀티바이트 언어를 지원하지 않아 한글을 편집하려고 하면 화면이 깨져 나오는데 맥용으로 포팅된 MacVim을 사용하면 멀티바이트 언어를 지원해주기 때문에 한글 편집에도 문제가 없다. 기본적으로 gvim이 포팅된 형태이고 OS X 의 키보드 숏컷 바인딩(⌘Z, ⌘V, ⌘A, ⌘G, etc.), Snow Leopard의 경우 기본적으로 64비트로 컴파일된다.
또한 자체적으로 python, perl, ruby 인터프리터를 포함할 수 있기 때문에 vim을 빠져나오지 않고도 python, ruby등의 스크립트를 수행하거나 바로 디버깅이 가능하다.

바이너리로 구할수도 있지만 python, ruby, perl등의 인터프리터를 포함시켜주는등 원하는대로 설정하려면 소스를 구해서 컴파일하는게 좋다.

소스파일은 http://code.google.com/p/macvim/ 에서 다운받을 수 있다.


소스를 다운받아 컴파일 하는 경우 위의 링크를 눌러 위키로 가면 방법이 설명되어 있다.

먼저 맥에 GIT가 설치되어 있어야 한다.
http://code.google.com/p/git-osx-installer/ 에서 다운받아 설치하면 된다.


위의 화면에서 자신에게 맞는 파일을 골라 설치해주면 된다. 인텔맥의 경우 특별히 universal binary일 필요 없이 그냥 intel-leopard를 설치하면 된다.

GIT가 설치되었으면 터미널을 열고 다음의 명령을 쳐 준다.

% git clone git://repo.or.cz/MacVim.git vim7


그러면 위에서 보는것처럼 현재 디렉토리에 vim7이라는 서브디렉토리가 생기고 소스가 다운받아진다.
vim7 디렉토리로 들어가서 configure를 해 주어야 한다.

% ./configure --enable-pythoninterp --enable-rubyinterp --with-features=huge --enable-gui=macvim --with-tlib=ncurses --enable-multibyte --with-python-config-dir=/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config --with-macarchs=i386

좀 더 상세한 옵션을 알고 싶으면 ./configure --help 를 쳐 보면 된다. 위의 경우는 python과 ruby 인터프리터만 포함하도록 하였고 인텔맥용 바이너리를 만들도록 옵션을 준 것이다.
configure가 정상적으로 끝났으면 make를 해 주면 된다.

% make

에러가 없이 make가 끝나면 src/MacVim/build/Release 디렉토리에 MacVim.app이 만들어진다. 이 실행파일을 원하는 위치에 넣어주면 된다. 디폴트 위치는 /Applications라 그곳에 넣어 주었다.


또한 자신의 홈 디렉토리 아래에 있는 Applications디렉토리에 MacVim이라는 서브디렉토리를 만들고 src/MacVim에 들어있는 mvim 이라는 스크립트를 복사해준다.

이 스크립트를 부르면 상황에 맞는 vim을 실행시켜준다. 즉 ssh등으로 접속한 경우는 텍스트 베이스의 vim을, GUI환경이면 GUI 베이스의 MacVim을 실행시켜 주게 된다.
그 다음에는 .bash_profile에 아래의 문장을 추가해 준다.


저기서 VIM_APP_DIR은 MacVim.app을 넣어준 위치이고 2~5번째 줄은 mvim을 복사해 준 위치를 넣어주면 된다. 위에 설명한대로 MacVim.app를 /Appilcations 로 넣어주고 mvim은 자신의 홈 디렉토리 아래의  Applications/MacVim/ 으로 복사해 주었으면 위에 내용 그대로 쳐 주면 된다.

여기까지 했으면 설치가 다 끝난 것이다.


터미널에서 vi 명령어를 사용하면 바로 MacVim이 실행된다.


한글 뿐 아니고 일본어 입력도 잘 되는걸 확인할 수 있다.

* 다음 포스트에서는 MacVim내에서 python 스크립트를 사용하는것과 pdb를 이용해서 MacVim을 벗어나지 않고 디버깅 하는 방법에 대해 설명하겠다.

2010년 2월 12일 금요일

iProcessing - 아이폰용 프로세싱 (Processing for iPhone)

iProcessing이라는 아이폰용 Processing이 나왔다.

Processing은 Ben Fry와 Casey Reas가 만든 오픈소스 프로그래밍 언어로 배우기 쉬워 미디어 아트나 예술계 쪽 학생들이 취미나 프로토타이핑, 미디어 아트 작품 제작에 많이 사용되고 있다.


맥, 윈도우, 리눅스등 플랫폼을 가리지 않고 동일하게 사용할 수 있다.


이전 포스트에서도 한번 소개했던 것처럼 Mobile Processing이라고 java를 지원하는 휴대폰에서 실행되는 Processing도 있고 Wiring 보드에서 실행되는 코드를 만들어주는 Wiring이라는 Processing 도 있다.

모바일 프로세싱 - 휴대폰에서 프로세싱을 사용하기 (Mobile Processing runnng on a cellphone)

모바일 프로세싱을 사용해 보기 (Using Mobile Processing)

그런데 아이폰은 아쉽게도 java를 지원하지 않기 때문에 Mobile Processing을 사용할 수 없었는데 이번에 아이폰에서 동작하는 코드를 만들어주는 Processing인 iProcessing 나온 것이다.



다만 다른 Processing과 차이점은 위의 화면과 같이 프로그램상에서 직접 코드를 집어넣어 실행파일을 만들어 주는게 아니고 아이폰용 앱을 만들 수 있는 프레임웍 형태로 제공된다.


iProcessing을 다운받아 압축을 풀으면 위와 같은 파일이 생긴다. Processing이나 Mobile Processing과는 달리 별도의 실행파일은 없다.


examples 폴더로 들어오면 이런식으로 각각의 예제 프로젝트가 들어있다.


Animator 폴더의 내용이다. Xcode 프로젝트 파일이 들어있는게 보인다. 저 파일을 더블클릭하면 Xcode가 실행되고 프로젝트가 열린다.


main 폴더의 내용이다. 다른 부분은 프레임웍의 일부분으로 손 댈 필요가 없고 main.pde를 수정해서 자신이 원하는 동작을 하게 해 줄 수 있다.


이 파일을 수정해 원하는 프로그램을 만들어 준 다음 Xcode에서 빌드하면 아이폰 시뮬레이터에서 직접 실행시켜 동작을 확인할 수 있다.

기본적인 processing의 기능 이외에 추가로 멀티터치, 가속도센서, 방향(가로/세로), 위치, 사운드 플레이/녹음 등등 아이폰의 다양한 기능도 사용할 수 있다. 또한 따로 Objective-C를 배우지 않아도 간단하게 아이폰 앱을 만들어 줄 수 있다.


2010년 2월 9일 화요일

GuruPlug Server - small & low power server platform


SheevaPlug의 후속제품으로 홈 네트워킹 서버로 꽤 쓸만한 GuruPlug라는 제품이 나왔다.
$129의 Server모델은 기가빗 이더넷 포트 2개, eSATA II (3Gbps) 커넥터, USB포트 2개, MicroSD슬롯, 블투, 무선랜을 다 포함하고 있다.


또한 1.2GHz CPU(ARMv5TE 아키텍쳐), 512MB RAM, 512MB Flash, 그리고 MicroSD를 통해 더 확장할 수 있기 때문에 단순 파일서버 정도가 아니고 홈오토메이션, 리얼타임 비디오 인코딩 등의 다양한 어플리케이션 서버로서 사용하는데도 부족함이 없다.


외부 장비와 쉽게 연결할 수 있도록 UART, I2C, 7핀의 GPIO등을 제공해준다.
또한 전력소모도 5W 정도라 서버로 하루 종일 켜 놔도 별로 전기요금을 신경쓰지 않아도 된다.

아직은 preorder만 받고 있고 실제 제품은 4월경에나 판매가 시작된다고 한다. 하지만 2/28까지 preorder를 하면 사은품(?)으로 $39 짜리 GuruPlug JTAG Board를 무료로 제공해 준다고 하니 이 제품에 관심이 있으면 preorder를 하는것도 나쁘지 않을거 같다.




Near Field Communication (NFC) - RFID extension

NFC는 초단거리 무선통신 기술로 대략 10cm이내의 기기간에 통신을 가능하게 해 준다. NFC는 ISO/IEC 14443 proximity-card standard (비접촉 카드 또는 RFID) 표준을 확장한 것으로 스마트카드와 리더기를 하나로 합쳐놓은 것이라고 생각하면 된다.
ISO/IEEE 14443 표준을 확장한 것이기 때문에 NFC 디바이스간 뿐 아니고 기존의 ISO/IEEE 14443 리더기나 스마트카드와도 통신을 할 수 있다. NFC는 기본적으로 휴대폰에서 사용할 목적으로 만들어졌다.



간단한 기술적인 스펙으로는

- 13.56MHz의 ISM밴드에서 14KHz의 대역폭을 사용
- 최대 동작 거리: 20cm
- 지원하는 통신 속도: 106, 212, 424, 848 Kbit/s
- 동작모드: Passive, Active

NFC포럼은 현재까지 11개의 스펙을 공개하고 있다.


   * NFC Data Exchange Format (NDEF) - Common data format for devices and tags
   * NFC Tag Types 1,2,3 &4 Operation - Defines RW operation for NFC tags
   * NFC Record Type Definition (RTD) - Standard record types used in messages between devices/tags
   * Smart Poster RTD - For posters with tags with text, audio or other data
   * Text RTD - For records containing plain text
   * Uniform Resource Identifier (URI) RTD - For records that refer to an Internet resource
   * Generic COntrol Record Type Definition (RTD) - Ways to request an action
   * Connection Handover Specification - How to establish a connection with other wireless technologies

스펙은 http://www.nfc-forum.org/specs 에서 무료로 다운받을 수 있다.


현재 NFC는 주로 휴대폰에서 사용되는데 3가지 방식으로 동작하고 있다.

- 카드 에뮬레이션: NFC디바이스(휴대폰)이 기존의 RFID카드와 같이 동작한다. 즉 리더기에 기존의 카드 대신 휴대폰을 가져다 대면 된다.
- 리더 모드: NFC디바이스가 카드 리더기로 동작하는 모드이다.
- P2P 모드: 두대의 NFC디바이스가 서로 통신하는 모드이다.

이렇게 3가지 모드를 지원하기 때문에 NFC디바이스는 매우 다양한 방법으로 사용할 수 있다. 휴대폰이 교통카드, 문 열쇠등으로 동작(카드 에뮬레이션), 미술관, 박물관 등에서 작품에 휴대폰을 가까이 가져가면 해당 작품의 소개로 연결하기, 스마트카드 결제 단말기(리더모드), 휴대폰간 명함 교환 (P2P 모드)등등이 가능해진다.

그리고 통신거리가 매우 짧기 때문에 보안 문제도 간단해지고 통신을 위한 초기 셋업타임이 매우 짧은것이 (0.1초 이하) 최대의 장점이다.

현재 휴대폰에는 노키아, 삼성, 모토롤라의 일부 소수 기중에서만 채용되어 있지만 여러곳에서 트라이얼 하는 곳이 많아서 조만간 급속하게 사용이 늘어나리라고 본다.

그리고 이 방식의 통신이 가장 널리 사용되고 있는 곳은 역시 일본이다. 일본은 소니가 개발한 FeLiCa를 교통카드에서부터 신용카드와 멤버쉽카드와 핸드폰, 결제 기능이 있는 손목시계 등, 다양한 곳에서 이용하고 있다.






물론 현재 일본의 FeLiCa기능을 가지고 있는 휴대폰의 경우 카드 에뮬레이션 모드로만 동작한다. (즉 스마트카드를 휴대폰에 집어넣은 형태) 소니의 발표에 의하면 2억개 이상의 FeLiCa칩을 판매하였다고 하고 가정용 USB리더기도 구매할 수 있다. 또한 일본 내수용 바이오 모델을 가지고 있는 사람들은 터치패드 오른쪽에 아래 사진과 같은 마크가 찍혀 있는것 봤을텐데 그 부분에 FeLiCa리더가 들어있다.


libnfc 에서 오픈소스 NFC 라이브러리(리눅스, Mac OS X, 윈도우)를 구할 수 있고 몇일전에 NFC 칩을 판매하는 프랑스 회사인 Inside Contactless 가 Linux 2.6 and Windows CE 6.0용 프로토콜 스택인 Open NFC 3.4를 open source Apache License 2.0으로 공개했고 3월 말에는 안드로이드도 지원하는 Open NFC 3.5를 공개할 예정이다.

libnfc에는 여러가지 예제 코드와 함께 사용할 수 있는 하드웨어 목록을 확인할 수 있다.




몇가지 종류의 하드웨어가 있는데 현재 가장 쉽고 저렴하게 구할 수 있는 리더로는 ACR-122 NFC가 있다. 몇곳에서 다른 이름으로 팔고 있지만 하드웨어는 기본적으로 동일하고 PN532 NFC Controller를 사용하고 있다.


touchatag 에서도 ACR-122 리더기를 사용(윈도우, 맥용 드라이버 제공)한다. 다른곳에 비해 이 것이 가장 구하기 쉽고 저렴하다. 사진의 리더기와 10장의 스티커로 된 태그를 포함해서 $39.95, 추가로 태그만 구입하는 경우 25장에 $24.95, 500장에 $474.95이다.

touchatag에서도 라이브러리를 제공해 주지만 그걸 사용하지 않고 libnfc를 사용해도 된다.

집의 현관 문 앞에 저 USB리더기를 설치하고 스티커로 되어 있는 태그를 자신의 휴대폰 뒷면에 붙여주면 휴대폰을 집 열쇠로 사용할 수도 있다.

2010년 2월 4일 목요일

구글앱스 사용자 관리 (Manage accounts in google apps)

구글앱스에서 사용자 및 그룹 추가/관리법에 대해 설명하겠다.


해당 도메인의 관리자 아이디로 로그인하면 화면 오른쪽 상단에 Manage this domain 링크가 보인다. 이걸 클릭해 준다.


관리자 화면으로 넘어오면 도메인에 관련된 여러가지를 설정할 수 있다. 사용자를 추가하기 위해 Users and groups를 선택한다.


사용자를 추가해야 하니까 Create a new user를 선택한다. 이 방법은 한명씩 추가하는 것이고 여러명을 한꺼번에 추가할수도 있다.


사용자의 이름과 아이디를 넣어준다. 기본적으로는 랜덤하게 정해진 초기암호가 설정되어 있다. 해당 사용자가 저 암호를 가지고 처음으로 로그인을 하면 새 암호를 넣으라고 나오게 된다. 랜덤한 암호 대신 관리자가 임의로 암호를 설정해 주고 싶으면 Set password를 눌러주면 된다. 모든 정보를 다 입력했으면 Create new user 버튼을 눌러주면 된다.


이제 Test User라는 이름의 계정이 만들어 진 것이다. 이 사용자의 아이디는 'testuser', 초기암호는 'Z57829'이고 예를 들어 회사 도메인이 xyz.com이라고 하면 이메일 주소는 testuser@xyz.com 이다.
또한 웹 브라우져에서 이 계정으로 로그인 하기 위한 초기 웹 페이지는 http://start.xyz.com이 된다.


좀 더 상세하게 설정하거나 입력된 내용을 수정하고 싶으면 위의 화면에서 Edit settings for test를 눌러주면 된다.


Edit settings for test를 누르면 화면이 위와 같이 바뀐다. 여기서 이 사용자가 다음번 로그인하면 강제적으로 암호를 바꾸기, 도메인 관리자 권한 부여(관리자가 되면 사용자 생성, 수정, 삭제등 모든것이 가능), 별명 추가(여기서 사용자 이메일 주소는 testuser@xyz.com인데 별명으로 foo를 추가해주면 foo@xyz.com으로 보낸 메일도 testuser@xyz.com으로 배달된다.), 그룹 설정등이 가능하다.


하나라도 변경하면 맨 아래 Save changes의 글자가 진하게 바뀐다. 변경한 다음에는 잊지 말고 꼭 눌러줘야 변경된게 적용된다.


계정이 추가되었으므로 처음 화면으로 돌아가보면 위와 같이 추가된 계정이 보인다.





그룹을 추가하려면 Groups 탭을 선택한 다음 Create a new group을 눌러준다.


그룹에 관련된 정보를 넣어준다. 위와 같이 RnD라는 그룹을 만들어주고 그룹의 이메일 주소를 rnd@xyz.com으로 해 주면 rnd@xyz.com으로 메일을 보내면 그룹에 속한 모든 멤버에게 메일이 날라가게 된다.
또한 그룹의 억세스 권한을 따로 설정해 줄 수 있다.

- Team : xyz.com 도메인의 모든 멤버(그룹에 속해있지 않아도 관계 없음)가 rnd@xyz.com으로 메일을 보낼 수 있고 멤버 목록을 볼 수 있다.
- Announcement-only : 공지사항 전용으로 그룹의 owner만 rnd@xyz.com으로 메일을 보내거나 멤버 목록을 볼 수 있다.
- Restricted : 그룹에 속한 멤버만 rnd@xyz.comdm로 메일을 보내거나 멤버 목록을 볼 수 있다.

즉 회사 내에 연구개발 팀을 위한 그룹을 두개 만들어서 그룹 멤버는 같지만 하나는 rnd-public@xyz.com, 나머지는 rnd-private@xyz.com 으로 해 주고 rnd-public은 억세스 권한을 Team으로, rnd-private은 억세스 권한을 Restricted로 해 주면 사내의 다른 부서 사람이 연구개발팀원 전체에게 메일을 보낼때는 rnd-public@xyz.com을 사용하고 연구개발팀원중 한명이 팀원에게 공지사항을 보낼때는 rnd-private@xyz.com을 사용할수도 있다.
이렇게 하면 메일의 필터 기능을 이용해서 팀원에게 오는 메일은 별도의 라벨을 붙여 관리할수도 있어 편리하다.

모든 정보를 입력했으면 아래쪽의 Create new group 버튼을 눌러준다.


그룹의 멤버를 추가해준다. 위쪽의 칸에 이미 만들어져 있는 사용자의 이름, 아이디 또는 이메일 주소를 넣어주고 Member 로 추가할것인지 Owner로 추가할것인지 정한 다음에 Add버튼을 누르면 된다. 위쪽의 칸에 여러명을 한꺼번에 추가할 경우는 ','로 구분해주면 된다.


여기서는 testuser@xyz.com을 RnD 그룹의 Member로 추가했다.

이렇게 계정 추가가 끝났으면 실제 계정 사용자에게 아이디와 임시 암호를 알려주면 된다.


만들어 진 계정을 사용하려면 웹 브라우져에서 시작페이지로 가면 된다. 이 예제에서는 http://start.xyz.com 으로 가면 된다. 위의 화면에서 오른쪽 상단의 Sign in을 눌러준다.


위와 같은 화면이 나온다. 여기서 자신의 아이디와 임시 암호를 넣어주고 Sign in 버튼을 누른다.


처음 로그인 하는 것이기 때문에 위와 같은 화면이 나오고 새 암호를 넣으라고 나온다. 여기에 자신이 원하는 암호를 넣어주고 사람이라는걸 확인(컴퓨터가 자동으로 하는걸 방지하기 위함)해주기 위해 중간에 녹색으로 나온 글자를 그래도 입력(여기서는 gitation 을 넣어준다.)하고 맨 아래쪽의 I accept. Create my accounts를 눌러준다.


그럼 모든 설정이 끝난 것이고 위와 같은 화면이 나와서 자신이 사용할 수 있는 서비스 목록을 보여준다.


Email 화면이다. 구글의 gmail을 그대로 사용하는 것이지만 메일 주소는 testuser@gmail.com이 아니고 testmail@xyz.com (자신의 회사 도메인을 그대로 사용)하게 된다. 웹 브라우져로 메일을 사용하려면 이대로도 문제없지만 만일 아웃룩, 썬더버드, 애플 메일등 외부 메일 클라이언트를 사용할 예정이면 우측 상단의 Settings를 눌러준다.


설정 화면에서 Forwarding and POP/IMAP을 눌러준다.


기본적으로 POP3는 활성화 되어있고 IMAP은 비활성화 되어 있다. IMAP프로토콜을 사용할 생각이면 Enable IMAP을 선택하고 Save Changes를 눌러 설정변경을 저장해주면 된다.

* 도메인을 구입한 후 구글앱스 신청 및 도메인을 구글앱스에 연동시키는 방법은 이 포스트를 참조하면 된다.
* 각 사용자가 자신의 계정을 아웃룩에 연동시키는 방법은 이 포스트를 참조하면 된다.