2008년 5월 24일 토요일

간단하게 자작 하드웨어와 맥을 연동하기

얼마 전 Macworld 잡지에 'Control the world' 라는 제목의 재미있는 기사가 소개되었다.

사용자 삽입 이미지

이 기사에서는 임베디드 시스템을 맥과 연동시켜 동작시킬 수 있는 방법중에 가장 간단한 방법을 설명해주고 있다. 위의 사진에는 Arduino Diecimila라는 완제품으로 판매되는 보드를 사용하고 있지만 실제로는 시리얼 포트를 가지고 있다면 자신이 직접 만든 어떤 종류의 보드도 관계 없다.

여기서는 보드의 I/O포트에 압력센서(오른쪽 위의 동그란 부분)과 저항을 붙이고 저 압력센서를 의자에 집어 넣어 사람이 의자에 앉으면 앉아있는 시간을 감지해서 일정 시간이 지나면 휴식을 취하라고 말하게 해 주는데 사용한다.

위에서 사용한 보드에는 이미 serial-usb converter가 들어있기 때문에 맥에 드라이버 프로그램을 설치하고 USB케이블로 연결하면 된다. 자작 보드에 시리얼 포트만 있는 경우는 시판되고 있는 USB to RS-232 컨버터를 사용해서 연결하면 된다.

 Arduino보드는 압력센서에 압력이 감지되면 (즉 사람이 의자에 앉으면) 그때부터 시간을 기록하고 있다가 각각 정해진 규칙에 따라 맥에 특정 문자를 보내주는 역할을 한다. 예를 들어 의자에 앉으면 'U'를, 15분 이내에 일어나면 'D'를, 45분이 지나면 'B'를 보내는 것이다.

맥에서는 시리얼 포트에 각각의 글자가 들어오면 그에 해당하는 문장을 말하게 만들어 준다.

Arduino와 맥 사이에 좀 더 복잡한 양방향의 명령/데이터 전송이 필요하다면 맥에서도 직접 프로그램을 만들어야 하겠지만 이번 예제같이 Arduino에서 맥으로 단방향으로 단순한 명령만 전달되는 경우는 별도의 복잡한 프로그래밍 없이 간단하게 사용할 수 있는 프로그램이 나와 있다.
 
사용자 삽입 이미지

ASProxy 를 사용하면 위의 그림과 같이 특정 문자가 들어올 때 어떤 동작을 할 것인가를 애플스크립트로 지정해 줄 수 있다.

애플스크립트로 다양한 맥 OS의 어플리케이션들을 제어할 수 있기 때문에 위의 예를 조금만 변경해도 할 수 있는 일들은 무궁무진하다.
 
예를 들자면 압력센서 대신 PIR(Passive InfraRed) 센서를 붙여주면 인체의 움직임을 감지할 수 있기 때문에 맥 앞에 사람이 오면 전차남의 '어서오세요. 주인님' 같은 부분이 들어있는 동영상 클립을 전체화면에서 플레이 시키는것이 가능해진다.

ASProxy의 장점은 별도 프로그래밍이 필요없이 쉽게 사용할 수 있다는 것이지만 단점은 외부에서 맥으로 신호를 입력해 줄 수는 있지만 반대로 맥에서 외부로 신호를 출력하지 못한다는 것이다. 이 경우는 별도의 스크립팅 또는 프로그래밍 언어로 원하는 동작을 하도록 만들어 줘야 한다.

애플 스크립트에서 시리얼 포트를 직접 제어하려면 SerialPort X를 사용할 수 있고 python에서는 PySerial을 사용하면 된다.

Arduino 보드에 관심이 있는 사람은 http://www.arduino.cc/en/ 를 참조하면 된다.
또한 위의 예제에서 Arduino에 사용할 코드의 소스는 맥월드의 기사에 보면 다운로드 받을 수 있는 링크를 찾을 수 있다. 관심이 있는 사람은 맨 위쪽의 기사 링크를 따라가서 참조하길 바란다.

2008년 5월 20일 화요일

Mac에서 정해진 시간에 자동으로 프로그램 실행하는 법

애플은 Mac OS X v10.4 Tiger에서부터 launchd라는 프로그램을 사용하기 시작했다. launchd는 애플이 개발하여 공개한 open source service management framework으로 전통적인 유닉스에서 사용되는 /etc/rd, cron, xinetd, init.d의 기능을 통합해서 제공해준다.
좀 더 자세한 소개는 애플 사이트의 Getting started with launchd 를 참조하면 된다.

여기서는 launchd의 다양한 기능들 중에 cron을 대치하는 기능을 설정하는 법을 설명하겠다.

launchd를 제어하기 위해서는 launchctl을 이용하면 된다.
xml로 된 configuration파일을 작성해서 .plist 확장자를 붙인 다음 해당 디렉토리에 저장해준다.
관리자가 아닌 경우 자신의 홈 디렉토리(~) 아래의 Library/LaunchAgents 에 저장해주면 된다.

* 각각의 경우에 따른 .plist 파일 저장 위치
     ~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents Per-user agents provided by the administrator.
/Library/LaunchDaemons System wide daemons provided by the administrator.
/System/Library/LaunchAgents Mac OS X Per-user agents.
/System/Library/LaunchDaemons Mac OS X System wide daemons.

.plist 파일의 상세한 내용은 애플 사이트의 man pages 를 참조하면 된다.

여기서는 일단 간단한 예로 설명하기로 하겠다.

$ /usr/bin/python /Users/abcd/bin/checkmail.py

위의 명령을 1분(60초)마다 한번씩 실행해서 메일이 왔는지 확인하고 싶은 경우

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>check_mail</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>/Users/abcd/bin/checkmail.py</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>

---
실행할 명령에 argument가 없으면

<key>ProgramArguments</key>
<array>
<string>프로그램 이름</string>
</array>

같이 해 주면 되지만 argument가 있는 경우 각각의 argument를 다음과 같이 별개의 element로 구분해서 넣어줘야 한다.

<key>ProgramArguments</key>
<array>
<string>프로그램 이름</string>
<string>argument 1</string>
<string>argument 2</string>
....
</array>

<key>StartInterval</key>
<integer>시간간격(초)</integer>

빨간색 부분은 Tiger(v10.4)에서만 사용할 수 있고 Leopard(v10.5)에서는 저 부분을 아래와 같이 바꿔줘야 한다.

<key>KeepAlive</key>
<false/>
---

위의 내용을 ~/Library/LaunchAgents 에 check_mail.plist 라는 이름으로 저장한 경우 터미널을 열고

$ launchctl load ~/Library/LaunchAgents/check_mail.plist

를 쳐 주거나 맥을 재부팅 시키면 바뀐 내용이 적용된다.

지금까지 설명한 방식은 전통적인 유닉스 환경에서 vi를 사용하는 방식이고 사용자 편의성을 최고로 생각하는 맥OS답게 이미 사용자가 쉽게 launchd configuration을 만들거나 수정할 수 있는 어플리케이션도 나와 있다.

사용자 삽입 이미지

Lingon은 launchd의 configuration파일을 에디팅하거나 만들어주는 소프트웨어로 xml이나 plist의 문법을 몰라도 손 쉽게 launchd를 설정할 수 있게 해 준다. 물론 오픈소스 소프트웨어로 여기에서 다운받을 수 있다.
위에 보이는 화면은 베이직 모드로 일반적인 설정을 손 쉽게 할 수 있게 해 주는 모드고 전문가 모드에서는 텍스트 입력 화면에서 각 xml element를 직접 쳐 넣을 수 있다.

2008년 5월 6일 화요일

블루투스 휴대폰의 활용법 - 컴퓨터의 RFID키로 사용하기 (Use bluetooth-enabled cellphone as a RFID key for PC)

블루투스를 지원하는 휴대폰을 가지고 있어도 막상 블투 헤드셋 연결하는 경우 제외하면 블루투스를 활용할 기회가 없지만 여기서 재미있는 활용법을 소개하겠다.

사용자 삽입 이미지
요새 고급 자동차에 보면 인텔리젼트 키 또는 keyless entry라고 해서 열쇠를 꺼낼 필요 없이 주머니에 넣은 상태로 자동차로 가서 바로 문을 열고 시동도 걸 수 있는 기능이 달려 나온다.
블루투스 기능을 가지고 있는 휴대폰을 자동차의 인텔리젼트 키 같이 동작시켜서 휴대폰의 블루투스가 컴퓨터와 통신할 수 있는 거리로 들어가면 암호가 걸린 스크린 세이버가 자동으로 해제되고, 컴퓨터에서 멀어지면 자동으로 암호가 걸린 스크린 세이버가 동작하게 만들어 줄 수가 있다. 여러 사람이 같이 사용하는 오피스 같은 곳에서 본인이 잠시 자리를 비운 사이 컴퓨터를 남이 함부로 사용하지 못하게 만들어 줄 수 있는 것이다.
물론 스크린 세이버 뿐 아니고 컴퓨터에 가까이 접근했을 때와 멀어졌을 때 어떤 동작을 하게 만들지는 원하는대로 설정할 수 있다. 이 방법의 최고의 장점은 휴대폰에 아무 소프트웨어도 설치할 필요가 없고 특정 프로파일을 지원해줘야 할 필요도 없고 단지 휴대폰과 컴퓨터를 블루투스로 페어링만 해 줄 수 있으면 된다는 점이다.

맥에서는 Home Zone이라는 소프트웨어를 사용하면 블루투스 뿐 아니고 무선랜 신호 또는 유선랜에 따라서도 원하는 동작을 하게 설정해 줄 수 있다. 예를 들어 집에서 사용하는 무선랜의 SSID가 연결되면 자동으로 집에 있는 네트웍 드라이브나 프린터들을 언결하게 만들기 또는 유선랜이 연결되면 자동으로 무선 끄기 등등을 해 줄 수 있다.


현재 베타버젼 0.9.9.2이고 위의 링크에서 무료로 다운받을 수 있다. 프로그램을 설치하고 실행시키면 화면 오른쪽 위의 상태바에 열쇄 모양의 아이콘이 나타난다.


아이콘을 눌러주면 다음과 같은 풀다운 메뉴가 나타난다. 지금 화면은 이미 Proximity라는 설정(configuration)이 되어 있고 이름 옆의 녹색 불은 그 설정내용이 현재 동작중(enabled)이라는걸 보여준다.

처음 실행했으면 Proximity라는건 없고 그 아래부터 보일것이다. 원하는 동작을 설정하고 싶으면 'Configure...'를 선택해 준다.





(그림을 누르면 원래 크기로 볼 수 있다.)

Configure...를 선택하면 위와 같은 창이 열린다. 처음에는 Zones에 아무
사용자 삽입 이미지
것도 없다. '+' 버튼을 눌러 Zone을 추가해준다. 여기서는 Proximity라고 이름을 지정해 주었다. 그리고 이 Zone에 대해서는 어떤 디바이스를 사용할지를 Kind와 Device에서 선택해준다. 여기서는 블루투스 휴대폰을 사용할 것이기 때문에 Kind는 'Bluetooth Device'를, Device에는 내 휴대폰을 선택해준다. 물론 이 프로그램 설정 이전에 휴대폰은 맥과 페어링이 되어 있어야 Device목록에 보인다. 그리고 각각 휴대폰이 zone에 들어왔을 때(컴퓨터와 휴대폰이 블루투스로 통신이 가능한 거리에 있을 때)와 zone에서 나갈 때(컴퓨터와 휴대폰이 더 이상 블루투스로 통신을 할 수 없을 때)의 동작을 지정해주면 된다. 여기서는 zone에 들어오면 스크린 세이버가 멈추고 zone에서 나가면 스크린 세이버가 시작하게 해 주었다. 지정해 줄 수 있는 동작의 종류는 다음과 같다.




Preference...에서 설정할 수 있는 내용들은 다음과 같다.
사용자 삽입 이미지


윈도우 환경의 PC에서는 Blue Lock을 사용하면 유사하게 사용할 수 있다.
사용자 삽입 이미지

Blue Lock 역시 freeware로 위의 링크에서 다운받을 수 있다. 다만 설정할 수 있는 옵션이 Home Zone보다 적고 설정을 변경하려면 bluelock.conf 파일을 텍스트 에디터로 직접 수정해 주어야 한다.

---

최근에 확인한 결과 Blue Zone은 개발자가 더 이상 개발을 하지 않기로 했다고 한다.
그 대신 사용할 수 있는 프로그램으로는 Sleep Watcher, Proximity 등이 있다.
Sleep Watcher는 커맨드라인 유틸리티라 약간의 컴퓨터 지식이 있어야 하고 Proximity는 Home Zone과 매우 유사하게 사용할 수 있다.

2008년 5월 2일 금요일

The Day The Routers Died...



The Day  The Routers Died....

Words and performance by Gary Feldman

가사는 여기를 클릭..


RIPE(Réseaux IP Européens)이라는 유럽의 인터넷 관련 포럼의 컨퍼런스인 RIPE 55 마지막 모임에서 깜짝 행사로 부른 노래입니다. 절묘하게 가사를 바꿔서 nerd humor를 만들면서도 전달하고자 하는 메세지를 잘 전달하고 있군요. 이런 유머감각이 부럽습니다. :)