Archive for September, 2010

PostgreSQL 9.0

PostgreSQL 9.0이 어느새 릴리스 되었네요.

하지만 역시 눈치보다가 9.0.1이 나오면 업그레이트 하렵니다.


CalDav가지고 몇일 놀아봤다.

문제의 시작: iPhone <--> Google Calendar <--> Outlook

iPhone에 캘린터더를 보면 구글 캘린더와 연동이 된다. 여기서부터 출발이다. 그래 이거 좋은데! 그럼 회사에서 사용하는 Outlook과도 연동은 어떻게 할까? 하고 찾아봤다. 당연히 구글에서 Outlook과 연동하는 소프트웨어를 제공한다. 자 이렇게해서 iPhone <--> Google Calendar <--> Outlook과의 calendar의 연동이 가능해졌다.

Tasks는?

Google tasks도 연동이 되면 좋겠지만, 안된다. 돈주면 된다고 한다.

회사에서 사용할 수 있을까?

이거 괜찮습니다. 여기저기 캘린더가 연동되어서 일정관리가 되고, 서로 연동이 되니 정말 괜찮군요. 그럼 회사내에서 사용할 수 있을까요? 물론 Exchange 서버를 사용한다면 문제가 안되겠지요!! 하지만 Exchange를 사용하지 않고있기 때문에 문제가 생깁니다. 그럼 어떻게 할 것인가..

CalDav

여기 저기 찾다보니, 캘린더에대한 인터넷 표준이 있네요. 역시 사람은 공부해야합니다.

CalDav 서버를 설치하고 Outlook으로 지원하면 되겠다고 생각했습니다. 오픈소스 CalDav서버인 davical을 검토해보니, Apache + PostgreSQL의 조합이네요. 아주 좋습니다. 설치는 아주 간단하고 쉽게 되었고, 이제 Outlook의 차례..

근데 안됩니다. ㅡㅜ 좀더 알아보니 Outlook은 CalDav를 지원하지 않을 거라고합니다. 그런데 Exchange는 CalDav를 지원한다고 합니다. 생각해보면 MS로서는 일리있는 선택이지요. Outlook이 Exchange와 연동되어서 사용되어야지 다른 CalDav를 지원하는 서버와 연동이 된다면 Exchange 서버를 죽이는 결과가 나올 수 있으니깐요. 그래서 Outlook는 CalDav를 지원하지 않습니다. 이러니 테스트조차 할 수 없고, 그래서 다른 것을 알아보니

Thunderbird에 캘린더 부가기능인 Lightning은 CalDav를 지원합니다. 굿,~ 설치해 테스트하니 정말로 잘됩니다. 실시간으로 전송하니, 약간의 딜레이도 있고 몇가지 버그는 보이지만 잘 됩니다. 그렇다고 Outlook를 모두 Thunderbird로 바꿀 수 없고ㅡㅜ;,

Outlook CalDav 지원 Plugin: iCal4GL

그러다가 찾은 것이 iCal4GL입니다. CalDav 뿐만 아니라 여러 공개 캘린더 프로토콜을 지원하는 캘린터 Sync 플러그인이죠. 설정이 조금 복잡하지만 테스트 하니 그럭저럭 됩니다. 단 가장 중요한 하나만 빼놓구요.

바로 한글 지원이 안됩니다. 아마 유니코드 문제인가하고 인코딩 설정이 있어서 바꿔 줘 봤지만 역시나 안됩니다. 이거 참 ....

결론

  1. 개인적으로 사용하려면 Google calendar sync를 사용하면 된다.
  2. CalDav라는 캘린더 표준이 있고 davical이라는 오픈소스 서버도 있다. 아지민 Outlook은 지원하지 않고, 지원하지 않을 것이다.
  3. Outlook에서 캘린더 공유는 Exchange 밖에 없다. 아니면 Outlook Plugin을 만들어야 한다.
  4. 그것도 아니라면 Google calendar를 사자, 그렇게 되면 이메일 및 기타 서비스도 같이 구글로 간다. ^^;
  5. Lignting도 좋은 선택이다. 단 사람들의 반발만 없으면...

Lightning의 버그

여러 캘린터를 사용할 경우 Check 박스를 클릭하다보면 캘린터 일정이 안보입니다. ㅡㅜ;


psycopg2 쿼리 결과를 유니코드로 받기

psycopg2에서 쿼리의 결과는 client_encoding에 따른 그 형태 그대로 옮니다. 이 경우 인코딩을 처리하면서 해야하면 상당한 불편함이 따르지요.

무식하게 하나하나 unicode(row[0], 'utf8')로 인코딩해가면서 하고 있었습니다. 진짜 무식하게..

근데 설마 있겠지.. 하고 찾아봤더니 역시나 있군요.

import psycopg2
from lib import *

psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
cursor = get_cursor()
cursor.execute('select subject from messages order by id desc limit 1')

for row in cursor:
    print type(row[0])

실행 결과는...

$ python test.py
<type 'unicode'>

역시.. 사람은 공부해야 손발이 고생하지 않는다.


sysutils/screen 기본 사용법

Screen을 이용하면, 로그 아웃 이후에도 그 화면을 유지하고 나중에 동일한 환경으로 복원한다. 그리고 screen안에서 프로그램이 실행중이라면 그 프로그램이 실행중이므로 장시간 동작이 필요한 겨우 터미널을 닫고 다른데서(혹은 같은데서) 다시 작업을 이어가기 위함이다. 혹자는 텍스트 버전 vnc라고도 한다네...

screen 실행 옵션
screen -S [세션 이름]
screen --list
screen -r [세션 이름]: resume session
screen -x: multi display mode

screen 명령어
Ctrl+a,c 새 세션 열기
Ctrl+a,a 다음 세션으로 이동
Ctrl+a,k 스크린 닫기
Ctrl+a,d Detatch
Ctrl+a,w 스크린 리스트
Ctrl+0~9: 지정 창으로 이동
Ctrl+x
Ctrl+a,S 화면 수평 분할
Ctrl+a,Tab 화면 이동
Ctrl+a,X 현재 화면 닫기

역시나 글을 적으면서 기억하는거다.


awstats로 로그 분석할때 newsyslog가 처리해버린 로그는???

awstats로 로그를 가끔 보는데, 갑자기 노파심이 듭니다.
newsyslog로 로그 파일을 관리하는데, awstats가 로데이트 된 로그파일을 처리할 수 없기 때문에, newsyslog 실행되고 다름 로그파일로 넘어갔을때, 이전 로그는 분석이 안되는 걸 어떻게 하나라는 완전 씰때없는 생각이 들었습니다. 그래봤자 이 사이트에 누가 들어온다고 말이지요.. ^^;

근데 awstats가 훌륭하게도 로그 파일에 command pipe를 지정할 수 있게 되어있네요. 그래서 다음처럼 삽질을 했더니 잘됩니다. ㅋㅋ

LogFile="(bzcat /var/log/httpd-access.log.0.bz2 ; cat /var/log/httpd-access.log)|"

Outlook의 iCalendar는 ldap를 지원하지 않는군

iCalendar에는 Directory Entry Reference를 지원합니다. 아래와 같은 형식이죠.

 ORGANIZER;DIR="ldap://host.com:6666/o=eDABC%20Industries,c=3DUS??
      (cn=3DBJim%20Dolittle)":MAILTO:jimdo@host1.com

이렇게 iCalendar를 만들고 Outlook에서 가져오면, 역시나 아웃룩에서 안가져오고 무시해버립니다. 역시나 2% 부족한 MS에요.


Python으로 iCalendar 만들기

Python으로 iCalendar를 만드는건 vobject을 이용하면됩니다. 다른 iCalendar 라이브러리인 py-iCalendar도 있는데, 이벤트 각 필드에 parameter를 주는데 문제가 있어서 잘 안됩니다.

# -*- encoding: utf8 -*-
import vobject
from datetime import datetime

cal = vobject.iCalendar()
event = cal.add('vevent')
event.add('summary').value = u'이벤트 하나'
event.add('description').value = u'이벤트 하나\n\n모두 참석해주세요...'
event.add('dtstart').value = datetime(2010, 9, 9, 18, 0, 0)
event.add('dtend').value = datetime(2010, 9, 9, 20, 0, 0)
event.add('dtstamp').value = datetime(2010, 9, 9, 18, 0, 0)
event.add('location').value = u'회의실'

o = event.add('organizer')
o.value = u'MAILTO:organizer@gmail.com'
o.params['CN'] = [u'오거나이저']

o = event.add('attendee')
o.value = u'MAILTO:must@gmail.com'
o.params['CN'] = [u'필수 참석자']
o.params['ROLE'] = [u'REQ-PARTICIPANT']

o = event.add('attendee')
o.value = u'MAILTO:optinal@gmail.com'
o.params['CN'] = [u'옵션 참석자']
o.params['ROLE'] = [u'OPT-PARTICIPANT']

o = event.add('attendee')
o.value = u'MAILTO:optinal1@gmail.com'
o.params['CN'] = [u'옵션 참석자1']
o.params['ROLE'] = [u'OPT-PARTICIPANT']

file('example.ics', 'wb').write(cal.serialize())

이코드로 만들어진 파일은 아래와 같습니다.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
BEGIN:VEVENT
UID:20100910T025017Z-99461@woosum.net
DTSTART:20100909T180000
DTEND:20100909T200000
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=필수 참석자:MAILTO:must@gmail.com
ATTENDEE;ROLE=OPT-PARTICIPANT;CN=옵션 참석자:MAILTO:optinal@gmail.com
ATTENDEE;ROLE=OPT-PARTICIPANT;CN=옵션 참석자1:MAILTO:optinal1@gmail.c
 om
DESCRIPTION:이벤트 하나\n\n모두 참석해주세요...
DTSTAMP:20100909T180000
LOCATION:회의실
ORGANIZER;CN=오거나이저:MAILTO:organizer@gmail.com
SUMMARY:이벤트 하나
END:VEVENT
END:VCALENDAR

이제 이 파일을 Outlook 인터넷 일정으로 등록하여 공유할 수 있고, 다른 여러 용도로 사용할 수 있겠지요.


iPhone에 custom root certificate 설치하기

iPhone supports alternate CA root certs!을 보면 iPhone에 내가 만든 루트 인증서를 추가할 수 있다. 간단히 pem 파일을 사파리로 열고 거기서 등록하면 된다.

이렇게하면서 iPhone으로 회사메일을 확인하고, 보낼 수 있게 되었다.

추가로 회사에서는 아웃룩으로 pop3를 사용하는데, 여기서는 아이폰에서는 imap을 사용한다. 즉.. 아이폰을 이용해서 보낸 메일은 imap상의 보낸 편지함에 보관되겠지만, 회사 아웃룩에는 보관이 안되는 상태가 된다.

이 문제는 아이폰에서 보낼때 아래처럼 "자신을 항상 숨은 참조로"를 설정해놓고, 아웃룩에서 pop3로 받을 때 규칙으로 보낸 편지함으로 옮기면 되겠네요.


iPhone 팁이라고나 할까..

  • 수신 거부는 전화가 오면 Sleep 버튼 또는 볼륨 버튼, 슬립버튼은 수신 거부, 볼륨 버튼은 수신 벨 내지 않기
  • 스팸차단은 Show에 있는 스팸 관리 설정으로...
  • 음력 생일은 ihappydays
  • 우리나라 공유일 추가 : 꼬옥 사파리로 할것

쓸만한 어플?


vim 실행 결과를 편집기로…

사용하지 않는 명령어는 잊어버리게 마련이다. 이것도 그렇다 vim에서 명령을 실행하고 그 결과를 바로 현재 버퍼에 넣고싶다면... 뭔가 있었는데.. 하고 한참 시도하다가 역시나 구글링해서 찾았다.

:r !ls -al

이렇게 하면 ls -al 한 결과가 현재 버퍼에 추가된다. 역시나 기억 확인용 포스팅.. :!와의 차이는 다음고 같다.

  • :!{cmd} : Execute {cmd} with the shell
  • :r !{cmd} : Execute {cmd} and insert it's stardard output below the cursor or specified line.

  • Copyright © 1996-2010 Your wish is my command. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress