Create TOC

2009년 12월 27일

Debian/samba 공유 설정

MacBook과 Linux PC 간에 파일 전송을 위해서 samba를 설정했는데, 이전과 달리 매번 smb.conf를 수정하지 않고도 공유가 가능했다.

samba 준비

설치

$sudo apt-get install samba sambaclient

테스트

smbclient 툴로 테스트 해본다.

$ smbclient -L localhost -U <계정이름>

비밀번호를 입력하면 아래와 같은 오류가 발생할 수 있다.

samba session setup failed: NT_STATUS_LOGON_FAILURE

이때는 smbpasswd로 비밀번호 설정을 해주면 된다.

$ sudo smbpasswd -L -U <계정이름>

nautilus 준비

설치

nautilus-share 패키지를 설치하고 nautilus를 재 실행 하면 된다. 잘 모르면 다시 로그인 하면 된다.

$sudo apt-get install nautilus-share

계정 설정

사용자 계정을 sambashare그룹에 넣어줘야 사용자 권한으로 공유 설정을 할 수 있다

$sudo adduser <계정이름> sambashare

설정이 끝나면 다시 로그인 해야 한다.

공유 설정

모든 준비가 끝나면 nautilus에서 디렉토리의 context 메뉴에 Share Options메뉴가 생긴다.

[##_1L|cfile25.uf.18773E594D1437FD0693D6.png|width="267" height="502" alt=""|_##]

메뉴를 선택하면 Folder Sharing창이 나타나고 공유 설정을 할 수 있다.

[##_1L|cfile4.uf.1809C74D4D1437FD2AF710.png|width="322" height="353" alt=""|_##]

디렉토리의 속성창을 통해서도 공유 설정을 할 수 있다.

[##_1L|cfile23.uf.121398474D1437FE2754A5.png|width="439" height="599" alt=""|_##]

2009년 12월 24일

Debian/pidgin이나 evolution이 offline 모드로 시작할 때

pidgin이나 evolution이 자동으로 offline모드로 시작할 때가 있다. network manager가 설치되어 있는 경우 그런 증상이 발생한다. network manager를 삭제하거나 서비스를 중지하면 문제가 해결된다.

$ sudo apt-get remove network-manager

2009년 12월 22일

Debian/구글 가젯 설치

Debian Sid/GNOME 환경에서 구글 가젯을 설치하는 방법을 기술한다.

패키지를 이용

apt-get을 이용해서 간단하게 설치할 수 있다.

$ sudo apt-get install google-gadgets-gtk

실행은 아래와 같이 -ns옵션을 주면 된다.

$ ggl-gtk -ns

직접 빌드

그런데 구글 가젯 실행시 js-script-runtime 에러를 만나면 구글 가젯을 빌드해야 한다.

빌드 환경 구성

$ sudo apt-get build-dep google-gadgets-gtk

패키지 빌드

$ mkdir ggl-build
$ cd ggl-build
$ sudo apt-get source google-gadgets-gtk
$ cd google-gadgets-0.10.5
$ dpkg-buildpackage -rfakeroot

2009년 12월 17일

iPod 재시동 하기

클릭 휠(Click Wheel)이 있는 기종의 iPod이 멈추거나 이상 현상이 있을 때 재시동(reset)하는 방법을 설명한다.

대상제품은 아래와 같다

  • iPod nano(4세대)
  • iPod nano(3세대)
  • iPod nano(2세대)
  • iPod nano iPod classic iPod(5th generation)
  • iPod with color display(iPod photo)
  • iPod(Click Wheel)
  • iPod mini
  • iPod mini(2세대)

재시동 방법은 아래와 같다.

  1. HOLD 스위치를 HOLD 쪽으로 움직였다가 다시 원래 위치로 옮긴다.
  2. Apple 로고가 나타날 때까지 메뉴 및 중앙(선택) 버튼을 약 6-8초 동안 길게 누른다. 경우에 따라서는 이 과정을 몇 차례 반복 한다.

2009년 12월 16일

Debian/iBus 사용시 Opera에서 한글 입력이 되지 않을 때

환경 변수 QT_IM_MODULEibus으로 설정되어 있는 경우 Opera에서 한글이 입력되지 않을 때가 있다정확하게 이야기하면 한/영 전환이 이루어지지 않는다..

QT_IM_MODULE값을 xim으로 변경하면 되는데, QT_IM_MODULE값은 /etc/X11/xinit/xinput.d/ko_KR파일에서 결정하며 기준은 ibus-qt4패키기 설치 여부이다. 아래 명령으로 ibus-qt4패키지를 제거하면 된다.

$ sudo apt-get remove ibus-qt4

Debian/Opera에서 "ㅌ"이 입력되지 않을 때

입력기를 iBus을 사용한 상태에서 Opera브라우저를 사용하면 "ㅌ"이 입력되지 않고 작은 따옴표(')가 입력된다세벌식390 자판 기준.

iBus입력기 설정을 변경해야 하는데, 알림영역의 iBus아이콘에서 기본설정화면을 띄우고 아래처럼 시스템 키보드 레이아웃 사용 설정을 unchecked 상태로 변경하면 된다

2009년 12월 11일

OS/X - ls 설정

OS/X Snow Leopard의 터미널에서 color ls를 설정하기 위해서 ~/.profile 파일에 아래 한 줄을 추가하면 된다

export CLICOLOR=1

2009년 12월 10일

Debian/QR code 생성하기

qrencode 패키지를 설치한다.

$ sudo apt-get install qrencode

설치가 끝나면 아래와 같은 형식으로 사용한다.

$ qrencode -8 -o <저장할 png 파일이름> <변환할 문자열>

아래는 사이트 주소를 변환한 예제이다.

2009년 12월 1일

Debian/gtkpod을 이용해서 ipod과 Sync 하기

Debian에서 gtkpod을 이용해 ipod에 각종 데이타를 Sync 하는 방법을 설명한다. 대상 시스템의 로케일은 ko_KR.utf8이다.

설치

$ sudo apt-get install gtkpod

연결

별다른 설정 없이 ipod을 연결하면 외장 디스크로 잡힌다.

실행

gtkpod를 실행하면 아래와 같은 화면을 볼 수 있다.실행할 때 Error reading iPod photo database에러 메시지가 나오면 Music - Create iPod's Directories명령을 실행한 후 gtkpod을 재실행한다.

iPod에서 마우스 우클릭을 통해 context menu를 띄우고 Edit iPod properties를 선택하면 아래처럼 iPod설정을 할 수 있다.

sync script는 선택하지 않는다. 나중에 한번에 sync 할 스크립트를 작성해서 따로 사용한다.

Sync

음악

음악 파일을 iPod 위로 드래그 해서 옮긴다

사진

Photos폴더를 선택하고 Photos버튼을 눌러서 사진을 추가한다.

비디오

비디오 Sync를 위해서는 gtkpod 패키지 대신 gtkpod-aac 패키지debian-multimedia 를 소스 리스트에 추가해야 한다.를 설치한다.

$ sudo apt-get install gtkpod-aac

gtkpod를 실행 한 후 New Playlist버튼을 눌러서 Videos play list를 만든다.

변환된 mp4 파일을 Videos play list 위로 드래그해서 추가한다샘플 mp4 파일은 QuickTime - 샘플파일에서 받을 수 있다..

비디오 변환

FFMpeg

@todo

Mencoder

@todo

Avidemux

AVidemux를 실행하고 아래 그림처럼 Video 코덱, Audio 코덱, 출력 Format을 설정한다.

Video의 Filters를 선택하고 Resize를 선택한 후 원하는 크기를 입력한다1세대 비디오 팟을 가지고 있어서 320x240을 선택했다..

File - Save - Save Video메뉴를 선택해서 인코딩한다.

주소록

evolution

특이하게 주소록은 utf-8을 쓰면 불러오지 못한다. cp949를 사용한다.

$ /usr/share/gtkpod/scripts/sync-evolution.sh -i /media/MARKBOY_IPO/ -e cp949

달력

evolution

$ /usr/share/gtkpod/scripts/sync-evocalendar.sh -i /media/MARKBOY_IPO/ -e utf-8

Google Calendar

sync하고 싶은 달력의 ical 주소를 얻어서 사용한다.

$ /usr/share/gtkpod/scripts/sync-webcalendar.sh -i /media/MARKBOY_IPO/ -d ical주소 -c 저장할 달력 이름

주소록, 달력 Sync 스크립트

#!/bin/sh

IPOD_MOUNT=/media/MARKBOY_IPO
ENCODING=utf-8

while getopts i: option; do
	case $option in
		i) IPOD_MOUNT=$OPTARG;;
		\?) echo "Usage: `basename $0` [-i <ipod mountpoint>]"
			exit 1;;
	esac
done

# evolution 주소록
/usr/share/gtkpod/scripts/sync-evolution.sh -i $IPOD_MOUNT -e cp949

# evolution 달력, 할일
/usr/share/gtkpod/scripts/sync-evocalendar.sh -i $IPOD_MOUNT -e utf-8

# google calendar - 대한민국 공휴일
/usr/share/gtkpod/scripts/sync-webcalendar.sh -i $IPOD_MOUNT  -d http://www.google.com/calendar/ical/south_korea__ko%40holiday.calendar.google.com/public/basic.ics -c korea_holiday
# google calendar - 일본 공휴일
/usr/share/gtkpod/scripts/sync-webcalendar.sh -i $IPOD_MOUNT  -d http://www.google.com/calendar/ical/japanese__ko%40holiday.calendar.google.com/public/basic.ics -c japan_holiday

Python/자동 링크 생성

input에서 http 또는 https 링크를 찾아서 a tag를 붙여주는 python script

import re

re_href= re.compile('(\b(http|https)://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))')
output = re_href.sub(r'<a href="\1" target="_self">\1</a>', input)

2009년 11월 26일

Debian/DropBox 설치

Dropbox는 Ubuntu package 만 제공한다. Debian에서 사용하기 위해서는 소스를 빌드해야 한다.

소스 받기

Dropbox사이트에서 소스를 받는다.

빌드 환경 구성

아래와 같은 패키지를 설치한다.

$ sudo apt-get install python-docutils libnautilus-extension-dev libnotify-dev

컴파일과 설치

컴파일

$ tar xvfj nautilus-drop-box-0.6.1.tar.bz2
$ cd nautilus-drop-box-0.6.1
$ ./configure
$ make

설치

실행

gnome-menu -> 인터넷 -> Dropbox를 실행한다.

2009년 11월 17일

Debian/구글 프로그램 설치

이 문서는 Debian에서 Google 프로그램을 설치하는 방법을 다룬다.

준비

google repository 추가

/etc/apt/source.list에 아래와 같은 줄을 추가한다.

# Google software repository
deb http://dl.google.com/linux/deb/ stable non-free

google key 설치

아래 명령으로 key를 설치한다.

# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -

source list 갱신

아래 명령으로 source list를 갱신한다.

$ sudo apt-get update

google earth package 설치

아래 명령으로 google earth package를 설치한다.

$ sudo apt-get install googleearth-package

설치

picasa

$ sudo apt-get install picasa

주의) picasa 설치 후 언어 설정을 영어로 해야 한다.

google earth

아래 명령을 입력하면 google earth package가 만들어진다.
$ make-googleearth-package

만들어진 googleearth*.deb 파일을 dpkg 명령을 사용해서 설치한다amd64에서는 --ignore-depends=ia32-libs옵션을 줘야 설치된다..

$ sudo dpkg -i googleearth*.deb

5.0에서 추가 작업

공통

몇몇 library를 시스템에 설치된 것을 사용하도록 수정한다.

$ cd /usr/lib/googleearth
$ sudo mv libQtCore.so.4 libQtCore.so.4.old
$ sudo mv libQtGui.so.4 libQtGui.so.4.old
$ sudo mv libQtNetwork.so.4 libQtNetwork.so.4.old

amd64

그리고 ia32를 위한 패키지를 추가로 설치한다.

$ sudo apt-get install lib32nss-mdns ia32-libs-gtk nvidia-glx-ia32

tip

글꼴 설치

msttcorefonts 패키지와 네이버 사전체를 설치한다.

google earth font setting

GoogleEarth 를 설치하면 초기 글꼴 크기가 매우 작다. 글꼴 설정은 ~/.config/Google/GoogleEarthPlus.conf 파일에 아래 내용을 수정하면 글꼴과 크기를 조절할 수 있다.

[Render]
GuiFontFamily=Naver Dictionary
GuiFontSize=12

5.0 추가

5.0에서는 폰트 설정이 추가되었다.

[Render]
PrimaryFontVersion2Family=Naver Dictionary
SecondaryFontVersion2Family=Naver Dictionary

폰트 설정을 끝내면 아래와 같이 예쁘게 화면이 나온다.

picasa 에서 한글 글꼴이 인식되지 않을때

picasa 의 글꼴 설정 프로그램을 실행해도 한글 글꼴이 인식하지 않을 때가 있다. Wine 설정이 잘못되어 있는 경우인데 이때 ~/.picasa/system.reg 파일을 수정한다.

추가할 내용

Software\\Microsoft\\Windows\\CurrentVersion\\Fonts 섹션과 Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts 섹션을 찾아서 아래 글꼴 정보를 추가한다.

"Andale Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Andale_Mono.ttf"
"Arial (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Arial.ttf"
"Arial Black (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Arial_Black.ttf"
"Arial Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Arial_Bold.ttf"
"Arial Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Arial_Bold_Italic.ttf"
"Arial Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Arial_Italic.ttf"
"Comic Sans MS (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Comic_Sans_MS.ttf"
"Comic Sans MS Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Comic_Sans_MS_Bold.ttf"
"Courier New (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Courier_New.ttf"
"Courier New Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Courier_New_Bold.ttf"
"Courier New Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Courier_New_Bold_Italic.ttf"
"Courier New Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Courier_New_Italic.ttf"
"Georgia (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Georgia.ttf"
"Georgia Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Georgia_Bold.ttf"
"Georgia Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Georgia_Bold_Italic.ttf"
"Georgia Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Georgia_Italic.ttf"
"Impact (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Impact.ttf"
"Times New Roman (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Times_New_Roman.ttf"
"Times New Roman Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Times_New_Roman_Bold.ttf"
"Times New Roman Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Times_New_Roman_Bold_Italic.ttf"
"Times New Roman Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Times_New_Roman_Italic.ttf"
"Trebuchet MS (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Trebuchet_MS.ttf"
"Trebuchet MS Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Trebuchet_MS_Bold.ttf"
"Trebuchet MS Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Trebuchet_MS_Bold_Italic.ttf"
"Trebuchet MS Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Trebuchet_MS_Italic.ttf"
"Verdana (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Verdana.ttf"
"Verdana Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Verdana_Bold.ttf"
"Verdana Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Verdana_Bold_Italic.ttf"
"Verdana Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Verdana_Italic.ttf"
"Webdings (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\msttcorefonts\\Webdings.ttf"
"\xb124\xc774\xbc84\xc0ac\xc804 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\naver\\naverdic.ttf"

수정할 내용

Tahoma 글꼴의 연결 글꼴에 네이버 사전체를 추가한다. Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink 섹션을 찾아서 아래와 같이 네이버 사전체를 추가한다.

"Tahoma"=str(7):"naverdic.ttf\0MSGOTHIC.TTC,MS UI Gothic\0kochi-gothic-subst.ttf\0sazanami-gothic.ttf\0sgothic.ttf\0uming.ttf\0bsmi00lp.ttf\0gbsn00lp.ttf\0dotum.ttf\0Purisa.ttf\0ae_Arab.ttf\0KacstBook.ttf\0"

2009년 11월 8일

Debian/i386을 amd64로 이전

이 문서는 사용 중인 i386 플랫폼의 debian linux를 amd64 플랫폼의 debian linux로 이전하는 과정을 기술한 것이다.

시스템 사양

mount 상황

  • /dev/sda1 on /media/WindowsXP
  • /dev/sda2 on /
  • /dev/sda3 on swap
  • /dev/sda4 on /media/DATA

시스템 백업

홈 백업

홈 디렉토리는 크기 때문에 다른 하드에 백업한다.

$ tar cvpzf /media/DATA/backup/homebackup.tgz /home/markboy

etc 백업

$ sudo tar cvpzf /media/DATA/backup/etc.tgz /etc

설치된 package 목록 백업

$ dpkg --get-selections > /media/DATA/backup/package_list

Debian AMD64 설치

설치 USB 만들기

5.1. AMD64에서 설치 프로그램 부팅하기 문서를 참고해서 설치 USB를 만들고, 부팅한다.

설치

윈도우 파티션을 삭제하지 않도록 주의해서 설치한다. 설치 과정은 따로 설명하지 않는다. 단, 설치할 때 base system만 설치한다.

sid로 업그레이드

/etc/apt/sources.list파일을 편집해서 sid를 받아오도록 수정한다.

파일 내용

파일 수정 후 아래 명령을 통해서 sid로 업그레이드 한다.

$ sudo apt-get update
$ sudo apt-get dist-upgrade

복구

백업한 파일을 가져오기 위해서 수동 mount

아까 백업한 파일을 가져오기 위해서 해당 파티션을 수동으로 mount한다. mount 할 경로는 만들기 귀찮으니 이미 만들어진 경로를 사용한다.

$ sudo mount /dev/sda4 /media/floppy

패키지 복구

$ sudo dpkg --set-selections < /media/floppy/backup/package_list 
$ sudo apt-get dselect-upgrade

홈 복구

$ tar xvpfz /home/markboy/backup.tgz -C /home/markboy

etc 복구

$ sudo tar -xzf etc.tar.gz /etc

2009년 10월 26일

spellcheck-ko를 시스템에 적용해보기

hunspell 에서 동작하는 한글 맞춤법 검사기 를 시스템에 적용하는 방법

OS별

Debian/Linux

  1. 아래 명령을 입력하면 된다.
$ apt-get install hunspell-ko

OSX

  1. 한글 맞춤법 검사기 사이트에서 최신 버전의 ko-aff-dic-?.?.?.zip 파일을 받는다.
  2. 압축을 풀고 압축 파일 안의 ko.aff, ko.dic 파일을 ~/Library/Spelling 으로 복사한다.

프로그램별

OpenOffice

  • Debian/Linux에서는 hunspell-ko 패키지를 설치하면 된다.
  • MS Windows와 OSX 에서는 Koraen spellchecker 확장을 설치한다.

Firefox

  • Debian/Linux에서는 hunspell-ko 패키지를 설치하면 된다.

2009년 8월 16일

svn 서버 구축

repository 설정

directory 설정

web interface를 사용하기 위해서 owner.group설정을 해줘야 한다.

mkdir /home/svn
chown -R apache.apache /home/svn

create repository

/home/svnsample repository를 만든다.

cd /home/svn
svnadmin create --fs-type fsfs sample
svn mkdir http://localhost/svn/sample/trunk -m "initialize trunk"
svn mkdir http://localhost/svn/sample/branches -m "initialize branches"
svn mkdir http://localhost/svn/sample/tags -m "initialize tags"
chown -R apache.apache /home/svn/sample

Apache 설정

설정 파일 수정

apache 설정 파일에 아래 내용을 추가한다.

LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
        DAV svn
        SVNParentPath /home/svn
        AuthType Basic
        AuthName "Subversion Repository"
        AuthUserFile /var/www/dav_svn.passwd
        Require valid-user
</Location>

계정 설정

/svn에 접근할 계정 설정을 한다.

htpasswd -cm /var/www/dav_svn.passwd <id>

최초 소스 commit

$ svn import 소스폴더 http://localhost/svn/sample/trunk/폴더이름 --username=<id>

Reference

2009년 7월 12일

GB-P100

Gigabyte에서 생산하고 KTF에서 출시한 SmartPhone.

기본 사양

전화번호 등록

*147359*682* 후 리셋.

필수 설치

  • TotalCommander CE : 파일 관리와 레지스트리 편집이 가능하다.
  • WkTASK : 닫기 버튼을 진짜 닫기 버튼으로 변경해주고 간단한 런처를 제공한다.
  • NoData : 3G 데이타 통신 기능을 꺼준다.
  • 모아키 : 터치에 최적화된 한글 입력기

GPS

GPS tracker 테스트

내장된 GPS tracker 를 이용해서 경로를 저장하고 Google EarthGoogle Map에서 보았다.

kml 수정

GPS tracker에서 저장되는 kmz 파일을 Google EarthGoogle Map에서 바로 인식하지 못해서 kmz를 풀고(zip 형식이다) 그 안의 kml 파일을 수정해야 한다.

kml 파일 내용 중 아래 내용을

<kml xmlns='http://earth.google.com/kml.0'>

아래와 같이 변경해야 한다.

<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">

Google Earth에서 본 모습

Google Map에서 본 모습

Mappy 설정

Mappy에서 GPS 자동 찾기를 하면 BlueTooth를 건드리기 때문에 아래와 같이 수동 설정하는 것이 좋다.

GPS 설정 - 일반
Port 설정COM 4
Baud Rate 설정38400
GPS 설정 - 고급
GPS좌표계 설정WGS84
블루투스 연결창해제
GPS 우선순위높음
사용자 설정 - 시스템
메모리 사용설정최소

웹에서 GPX 파일 분석하기

http://utrack.crempa.net/

ActiveSync

Google Calendar와 Sync 하기

ActiveSync에서 Microsoft Exchange Server 설정을 하면 Google Calendar와 Sync 할 수 있다. 설정 방법은 아래 링크를 보면 된다.

http://www.google.com/support/mobile/bin/answer.py?answer=138636&topic=14299

제약 사항

아직은 첫 번째 달력과 sync 만 지원한다. 여러 달력을 한번에 sync 하고 싶으면 Nueva Sync서비스를 사용해야 한다.

Tweak

제어판

ClearType 설정 표시

키 이름: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell

값이름기본수정
NoClearType10

오류보고 아이콘 표시

키 이름: HKEY_LOCAL_MACHINE\ControlPanel\Error Reporting

값이름기본수정
Group01
Redirect?값 삭제

네트워크 연결 아이콘 표시

키 이름: HKEY_LOCAL_MACHINE\ControlPanel\Connections

값이름기본수정
Group102

고급 네티워크 연결 lnk 파일

아래와 같은 내용의 text 파일을 만들고 확장자를 lnk로 저장한다.

21#ctlpnl cplmain.cpl,19

무선공유기 설정

070 공유기에는 한번에 붙었지만, 집에서 사용하는 공유기 (LG Alxer)에는 붙지 않는다. 검색해보면 공유기에 따라 호환성 문제가 발생하는 것 같다.

무선랜 설정을 g only + WPS off 로 변경하면 무선 공유기에 잘 접속한다.

Dialer 스킨 기능 끄기

메모리를 2MB 정도 더 확보할 수 있다.

키 이름 : HKEY_LOCAL_MACHINE\Security\Phone\Skin

값이름기본수정
enabled10

I/O 반응 속도 높이기

키 이름 :HKEY_LOCAL_MACHINE\System\StorageManager

값이름기본수정
PNPUnloadDelay40961500
PNPWaitIODealy40961500

입력기 자동 팝업 없애기

키 이름 :HKEY_CURRENT_USER\ControlPanel\Sip

값이름기본수정
TurnOffAutoDeploy01

NeoStylo 삭제

http://www.todaysppc.com/mbzine/bbs/zboard.php?id=gb&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=neostylo&select_arrange=headnum&desc=asc&no=5262

모아키가 기본 입력기가 되는 것을 off 하기

시작 프로그램의 DefaultMOA.lnk를 삭제한다.

안쓰는 입력기 감추기

레지스트리 HKEY_CLASSES_ROOT\CLSID\에서 원하는 입력기의 guid를 찾아서 하위키인 IsSIPInputMethod의 기본값을 0으로 변경하면 된다.

입력기guid
모아키 {4DDFD05A-AE44-41aa-95E9-78B9847B6037}
Kor_Writer{2D33CF70-1C4C-454a-841C-1B51298731E0}
기본(영문) 키보드{42429667-ae04-11d0-a4f8-00aa00a749b9}
Letter Recognizer{42429690-ae04-11d0-a4f8-00aa00a749b9}
Block Recognizer{42429691-ae04-11d0-a4f8-00aa00a749b9}
한글 키보드{8D018493-3945-4c6a-A3B1-BABAEEC568D6}
Japanese Multibox Input{0CBEA010-F68E-11D1-8C63-0060977B4593}
Japanese Character Completion{BB6E8371-06DF-11d2-8C6A-0060977B4593}
Transcriber{F0034DD0-2AD4-11d1-9CB0-E84BE8000000}

KTFOTA.exe 프로세스 중지시키기

BarringService 를 중지시키면 된다.이 서비스를 중지하면 ActiveSync가 제대로 동작하지 않는다.

키 이름 :HKEY_LOCAL_MACHINE\Services\BarringService

값이름기본수정
Keep10

Today의 날짜 표시를 1줄로 바꾸기

키 이름: HKLM\SOFTWARE\Microsoft\Today

값이름기본수정
AutoSingleLineDatePlugin01

Taskbar에 배터리 표시 대신 시계 표시하기

키 이름: HKEY_LOCAL_MACHINE\Services\Power

값이름기본수정
ShowIcon01

키 이름: HKEY_LOCAL_MACHINE\Software\Microsoft\Shell

값이름기본수정
ShowTitleBarClock01

2009년 7월 10일

Opera/한글 키워드 사이트 검색을 구글로 넘기기

DNS 검색이 한글 키워드 검색 사이트(넷피아 등) 페이지로 넘어가면 그것을 구글 검색 페이지로 이동시키는 UserScript. 반드시 UTF-8 로 저장하고 사용해야 한다.

// ==UserScript==
// @name URL redirect from hangul keyword search site to google.com
// @author Yun-yong Choi
// @version 0.1
// @include             http://find.netpia.com/*
// @include             http://netpia.*.com/*
// @include				http://dns.paran.com/*
// @compatible			Opera 9
// ==/UserScript==
(function () {
      var newurl = 'http://www.google.co.kr/'
      // netpia 한글 키워드
      // url 에서 q=XXXX 의 XXXX 부분을 추출해서 구글에 넘긴다.
      matchObj = window.location.href.match(/q=(.+)&/)
      if (matchObj && (matchObj.length > 1)) {
        newurl = 'http://www.google.co.kr/search?complete=1&hl=ko&q=' + matchObj[1]
      }
      else {
        // 메가패스 한글 키워드
        // url에서 Query=XXXX 의 XXXX 부분을 추출해서 구글에 넘긴다.
        matchObj = window.location.href.match(/Query=(.+)&/)
        if (matchObj && (matchObj.length > 1)) {
          newurl = 'http://www.google.co.kr/search?complete=1&hl=ko&q=' + matchObj[1]
        }
      }
      window.location = newurl
})();

Opera/다음뷰바 제거 스크립트

다음 뷰바를 제거하는 UserScript. 반드시 UTF-8 로 저장하고 사용해야 한다.

// ==UserScript==
// @name remove_daumviewbar.user.js
// @author	Yun-yong, Choi
// @version	0.1
// @namespace	http://*.daum.net/*
// @compatible   Greasemonkey, Opera 8/9
// ==/UserScript==

if (/(?:^|\.)daum\.net/i.test(window.location.hostname)) document.addEventListener('load', function() {
	var iframe = document.getElementById("viewIframe");
	if (iframe)
	{
		window.location = iframe.src;
	}
}, false);

2009년 6월 21일

Debian/WindowsMobile과 Sync

이 문서는 Debian에서 Windows Mobile기기(이하 WM)와 sync 하는 방법을 기술한 문서이다.

SynCE 설치

WM 기기와 sync하기 위해서 SynCE를 설치해야 한다.

$ sudo apt-get install synce-sync-engine synce-hal synce-trayicon

기기 연결

우선 synce-trayicon 프로그램을 실행하면 아래와 같이 tray icon이 보인다.

이후 WM 기기를 연결하면 아래와 같이 tray icon이 보이고 마우스 커서를 가져가면 툴팁으로 현재 기기 상태를 보여준다.

에볼루션과 sync

@todo

남아있는 문제

synce-gvfs 패키지가 없어서 synce:// 프로토콜을 처리할 수 없다.우분투에는 관련 패키지가 존재한다.

2009년 6월 18일

Debian/Opera 브라우저에 대한 몇 가지 팁

한글 글꼴이 깨질때

Debian에서 Opera 9.5 이상 버전을 사용할 때 방법이다.

  1. ~/.opera/opera6.ini에서 아래 내용을 추가한다.
    [User Prefs]
    Enable Core X Fonts=0
    Enable Xft Fonts=1
  2. ~/.opera/fontswitch.ini 파일을 삭제한다.
  3. 가운데 버튼을 윈도우처럼

    오페라에서 가운데 버튼의 기본 동작은 클립보드로 텍스트 복사 이다(이것은 X Window System의 관례). 그러나 Microsoft Windows처럼 스크롤 커서가 나오게 하고 싶다면 아래 그림처럼 환경 설정 - 고급 설정 - 단축키 - 중간 클릭 옵션...에서 패닝 시작 을 선택하면 된다.

2009년 6월 11일

Python/피보나치 수열 구하기

12345678999(123억...)과 99987654321(999억...) 사이의 피보나치 수를 모두 더하면 얼마인가 에 대한 풀이를 해보았다. (원문 )

수의 범위가 매우 크기 때문에 루프 대신 generator를 사용했다. (루프로 코드를 짜보았지만 Quad Core에서도 오랜 시간 계산이 끝나지 않아서 포기했다)

import cProfile
import itertools


def Fibonacci_generator():
    """ 피보나치 수를 구하는 generator """
    yield 0
    yield 1
    prev1 = 0  # n-2
    prev2 = 1  # n-1
    result = 0
    while True:
        try:
            result = prev1 + prev2
            yield result
            prev1 = prev2
            prev2 = result
        except OverflowError:
            break


def solve(start, end):
    """ star ~ end 사이의 피보나치 수의 합을 구하는 함수."""
    total = 0L
    for fib in Fibonacci_generator():
        if fib >= end:
            break
        if fib > start:
            total += fib
    return total


def solve2(start, end):
    """ star ~ end 사이의 피보나치 수의 합을 구하는 함수."""
    return sum(itertools.takewhile(
        lambda fib: fib < end,
        itertools.dropwhile(lambda fib: fib > start,
                            Fibonacci_generator())))

start = 12345678999L
end = 99987654321L
cProfile.run('solve(%d, %d)' % (start, end))
print solve(start, end)
cProfile.run('solve2(%d, %d)' % (start, end))
print solve2(start, end)

결과는 아래와 같다.

$python fibo.py
         60 function calls in 0.000 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 fibonachi.py:25(solve)
       57    0.000    0.000    0.000    0.000 fibonachi.py:9(Fibonacci_generator)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}


205486422643
         118 function calls in 0.000 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 fibonachi.py:35(solve2)
        6    0.000    0.000    0.000    0.000 fibonachi.py:37(<lambda>)
       51    0.000    0.000    0.000    0.000 fibonachi.py:38(<lambda>)
       57    0.000    0.000    0.000    0.000 fibonachi.py:9(Fibonacci_generator)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.000    0.000    0.000    0.000 {sum}


205486422643

2009년 5월 19일

Debian/PS2 키보드가 인식되지 않을 때

부팅시 아래와 같은 메시지와 함께 PS/2 키보드가 바로 인식되지 않을 수 있다.

PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp

일부 BIOS 에서 발생할 수 있는 문제이며 부트 로더에 커널 인자로 아래 값을 추가한다.

i8042.nopnp=1

Grub을 사용한다면 아래와 같이 커널 인자를 전달할 수 있다.

title       Debian GNU/Linux 5.0
root        (hd0,1)
kernel      /boot/vmlinuz-2.6.29.090518 root=UUID=7d0ee3d0-05cd-4737-ba08-2dee  eeff6ea9 ro i8042.nopnp=1 vga=785 splash quiet
initrd      /boot/initrd.img-2.6.29.090518

Debian/Kernel 패키지 만들기

kernel을 컴파일해서 사용할 때, debian에서는 패키지*.deb 파일을 말한다.를 만드는 것을 권장한다.

사용자 권한 추가

$ sudo adduser user_id src

권한 추가 후 groups 명령을 통해서 확인한다.

소스 준비

소스 패키기 설치

$ apt-get install linux-source-x.y.z

소스 풀기

$ cd /usr/src
$ tar xvfj linux-source-x.y.z.tar.bz2

링크 생성

$ ln -s linux-source-x.y.z linux

커널 패키지 만들기

커널 설정

$ make menuconfig

또는

$ make-kpkg --config=menuconfig configure

빌드

$ make-kpkg clean
$ fakeroot make-kpkg debian
$ CONCURRENCY_LEVEL=2 fakeroot make-kpkg -append-to-version=.090519 --initrd binary-arch

  • --initrd 옵션은 커널 옵션 중 initrd support 가 켜져 있어야 한다.
  • CONCURRENCY_LEVEL=2make -j2 옵션을 주는 것과 동일하다. cpu * 2 정도의 수를 입력한다.(안줘도 상관은 없다)
  • -append-to-version은 내가 빌드한 커널에 버전 값을 추가할 때 사용한다.

자동으로 -append-to-version을 붙이기 위해서 아래와 같은 간단한 shell script를 사용하기도 한다.

#!/bin/sh

APPENDVERSION=.`date +%y%m%d`
cd /usr/src/linux
fakeroot make-kpkg debian
CONCURRENCY_LEVEL=6 fakeroot make-kpkg -append-to-version=$APPENDVERSION --initrd binary-arch

설치

Kernel 패키지 설치

빌드가 끝나면 /usr/src에 3개의 package가 생성된다.

  • linux-headers-x.y.z.090519_x.y.z.090519-10.00.Custom_i386.deb
  • linux-image-x.y.z.090519_x.y.z.090519-10.00.Custom_i386.deb
  • linux-image-x.y.z.090519-dbg_x.y.z.090519-10.00.Custom_i386.deb

만들어진 패키지를 아래 명령으로 설치한다.

$ sudo dpkg -i linux-headers-x.y.z.090519_x.y.z.090519-10.00.Custom_i386.deb
$ sudo dpkg -i linux-image-x.y.z.090519_x.y.z.090519-10.00.Custom_i386.deb

ramdisk 업데이트

--initrd 옵션을 사용했다면 아래 명령으로 ramdisk 이미지를 갱신한다.

$ sudo update-initramfs -c -t -k x.y.z.090519

드라이버 업데이트

nvidia, VirtualBox 드라이버 등을 사용했다면 방금 빌드한 커널을 위해서 드라이버 모듈을 다시 빌드한다.

$ sudo m-a -l x.y.z.090519 a-i nvidia
$ sudo m-a -l x.y.z.090519 a-i virtualbox-ose

부트 로더 수정

빌드한 커널 이미지는 /boot/vmlinuz-x.y.z.090519 에 생성된다. 부트 로더를 이에 맞게 수정해준다.GRUB를 사용한다면 update-grub명령만 실행하면 된다.

Reference

Python/py2exe를 이용해서 win32 binary를 만들때 manifest 추가

Windows 환경에서 py2exe 를 이용해서 exe를 만들때 manifest 를 추가할 수 있다.

setup.py를 아래와 같이 만든다.

manifest = """
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <asmv3:trustInfo xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:security>
      <asmv3:requestedPrivileges>
        <asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </asmv3:requestedPrivileges>
    </asmv3:security>
  </asmv3:trustInfo>
</assembly>
"""

setup(name='MyApp',
    #...
    windows=[ { #...
        'other_resources':[(24, 1, manifest)],
    }]
)

2009년 5월 16일

Ubuntu Netbook Remix

Ubuntu Netbook RemixVirtualBox에 설치해보았다.

Ubuntu Netbook Remix는 iso대신 img 파일만 제공하기 때문에 아래 링크의 내용을 참조해서 VirtualBox에 설치했다.

http://platonic.techfiz.info/2009/04/26/ubuntu-netbook-on-virtualbox/

설치 후 첫 로그인 화면은 아래와 같다.

Ubuntu Netook Remix에서는 화면이 작고 해상도가 낮은 Netbook을 위해서 여러가지 기능이 추가되어 있다. 우선 로그인 후 보이는 기본 화면. 좌측 위의 우분투 아이콘을 클릭하면 항상 이 화면을 볼 수 있다. 프로그램 시작 메뉴 역할도 같이 하는데 화면에 크게 크게 표시되는 아이콘이 특징이다.

불여우를 실행한 화면. 거의 모든 프로그램이 전체 화면으로 실행되며 실행한 프로그램은 좌측 상단에 아이콘이 추가된다. 해상도가 낮은 Netbook을 고려한 기능이다.

여러 프로그램을 실행한 모습.

추가된 기능은 시작 프로그램 형태로 제공된다(화면을 보면 Maximus Window Manager와 Netbook Launcher를 볼 수 있다).

2009년 5월 12일

Python/PyGTK

PyGTK 예제 소스를 순수 API를 호출하는 방법과 GtkBuilder를 사용한 방법으로 각각 구현해본다.

Hello, World

아래와 같은 모습을 가지도록 프로그램을 수정한다.

API 호출

코드

hello.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk

class HelloWorld :
    def hello(self, widget, data=None) :
        print 'Hello, World'

    def delete_event(self, widget, event, data=None):
        print 'delete event occurred'
        return False

    def destroy(self, widget, data=None) :
        gtk.main_quit()

    def __init__(self) :
        self._win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self._win.connect('delete_event', self.delete_event)
        self._win.connect('destroy', self.destroy)
        self._win.set_border_width(10)
        self._btnhello = gtk.Button('Hello World')
        self._btnhello.connect('clicked', self.hello, None)
        self._btnhello.connect_object('clicked', gtk.Widget.destroy, self._win)
        self._win.add(self._btnhello)

    def main(self) :
        self._win.show_all()
        gtk.main()

def main() :
    w = HelloWorld()
    w.main()

if __name__ == '__main__' :
    main()

GtkBuilder

GtkBuilder를 사용하면 ui 구성 코드를 xml로 분리할 수 있다.

코드

hello.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<interface>
  <object class="GtkWindow" id="HelloWindow">
    <property name="border_width">10</property>
    <signal name="delete_event" handler="delete_event" />
    <signal name="destroy" handler="destroy" />
    <child>
      <object class="GtkButton" id="BtnHello">
        <property name="label">Hello, world</property>
        <signal name="clicked" handler="hello" />
      </object>
    </child>
  </object>
</interface>

hello2.py

>#!/usr/bin/python # -*- coding: utf-8 -*- import gtk class HelloWorld : def hello(self, widget, data=None) : print 'Hello, World' def delete_event(self, widget, event, data=None): print 'delete event occurred' return False def destroy(self, widget, data=None) : gtk.main_quit() def __init__(self) : builder = gtk.Builder() builder.add_from_file('hello2.xml') builder.connect_signals(self) self._win = builder.get_object('HelloWindow') self._btnhello = builder.get_object('BtnHello') self._btnhello.connect_object('clicked', gtk.Widget.destroy, self._win) def main(self) : self._win.show_all() gtk.main() def main() : w = HelloWorld() w.main() if __name__ == '__main__' : main()

Hello, World 업그레이드

아래와 같은 모습을 가지도록 프로그램을 수정한다.

API 호출

코드

hello_upgrade.py

>#!/usr/bin/python # -*- coding: utf-8 -*- import gtk class HelloWorld2 : def callback(self, widget, data) : print 'Hello again - %s was pressed ' % data def delete_event(self, widget, event, data=None): gtk.main_quit() return False def __init__(self) : self._win = gtk.Window(gtk.WINDOW_TOPLEVEL) self._win.set_title('Hello Buttons!') self._win.connect('delete_event', self.delete_event) self._win.set_border_width(10) self._box1 = gtk.HBox(False, 0) self._win.add(self._box1) self._button1 = gtk.Button('Button 1') self._button1.connect('clicked', self.callback, 'button 1') self._box1.pack_start(self._button1, True, True, 0) self._button2 = gtk.Button('Button 2') self._button2.connect('clicked', self.callback, 'button 2') self._box1.pack_start(self._button2, True, True, 0) def main(self) : self._win.show_all() gtk.main() def main() : w = HelloWorld2() w.main() if __name__ == '__main__' : main()

GtkBuilder

코드

hello2_upgrade.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<interface>
  <object class="GtkWindow" id="HelloWindow">
    <property name="title">Hello Buttons!</property>
    <property name="border_width">10</property>
    <signal name="delete_event" handler="delete_event" />
    <child>
      <object class="GtkHBox" id="box1">
        <child>
          <object class="GtkButton" id="button1">
            <property name="label">Button 1</property>
            <signal name="clicked" handler="callback" />
          </object>
        </child>
        <child>
          <object class="GtkButton" id="button2">
            <property name="label">Button 2</property>
            <signal name="clicked" handler="callback" />
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>

hello2_upgrade.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk

class HelloWorld2 :
    def callback(self, widget, data = None) :
        print 'Hello again - %s was pressed ' % widget.get_name()

    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def __init__(self) :
        builder = gtk.Builder()
        builder.add_from_file('hello2_upgrade.xml')
        builder.connect_signals(self)
        self._win = builder.get_object('HelloWindow')

    def main(self) :
        self._win.show_all()
        gtk.main()

def main() :
    w = HelloWorld2()
    w.main()

if __name__ == '__main__' :
    main()

Reference

2009년 5월 8일

Urlencode된 파일 이름을 Decode하기

Opera에서 파일을 받으면 한글이름일 경우 urlencode 된 이름으로 저장된다. decode 하는 간단한 스크립트를 작성했다

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import urllib


def printUsing():
    """사용 방법을 출력한다."""
    print 'fixname.py  [  ...]'


def getUnquoteFileName(name):
    try:
        return unicode(urllib.unquote(name).decode('utf-8'))
    except UnicodeDecodeError:
        return unicode(urllib.unquote(name).decode('cp949'))


def main():
    for argv in filter(os.path.isfile, sys.argv[1:]):
        decoded_argv = getUnquoteFileName(argv)
        if argv != decoded_argv:
            print '%s -> %s' % (argv, decoded_argv)
            os.rename(argv, decoded_argv)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        printUsing()
    else:
        main()

2009년 5월 3일

Debian/HDTV 시청하기

이 문서는 Debian_Sid kernel 2.6.29 에서 HDTV 를 보기 위한 방법을 기술한다.

장치 설정

HDTV 카드

Dvico FusionHDTV5 USB Gold

ItemSpecifications
Input/OutputTV antenna reception port 1 Composite(using dongle cable), 1 S-Video Video Input Direct audio stream output to sound card(HDTV)
Compatibility (DVHS)Running on Windows XP or later only. 1394(Firewire) port
DriversConexant CX23882 drivers Dvico's own tuner driver Dvico's own full software HDTV decoder Dvico's own DxVA software HDTV decoder

커널 설정

-> Device Drivers
  ->Multimedia devices
   -> <M> DVB for Linux
    -> [*] Load and attach frontend and tuner driver modules as needed
    -> [*] Video capture adapters
      -> <M> BT848 Video For Linux
          -> [*] DVB/ATSC Support for bt878 based TV cards
      -> <M> Conexant 2388x (bt878 successor) support
          -> <M> Conexant 2388x DMA audio support
          -> <M> Blackbird MPEG encoder support (cx2388x + cx23416)
          -> <M> DVB/ATSC Support for cx2388x based TV cards
    -> [*] DVB/ATSC adapters
      -> <M> Support for various USB DVB devices
          -> [*] Conexant USB2.0 hybrid reference design support

펌웨어 설치

$ cd /usr/src/linux/Documentation/dvb
$ sudo perl get_dvb_firmware  bluebird
$ sudo  mv dvb-usb-bluebird-01.fw /usr/lib/hotplug/firmware
$ sudo ln -s /usr/lib/hotplug/firmware/dvb-usb-bluebird-01.fw /lib/firmware

또는

$ sudo wget http://www.linuxtv.org/download/dvb/firmware/dvb-usb-bluebird-01.fw
$ sudo  mv dvb-usb-bluebird-01.fw /usr/lib/hotplug/firmware
$ sudo ln -s /usr/lib/hotplug/firmware/dvb-usb-bluebird-01.fw /lib/firmware

디바이스 동작 확인

USB 에 접속한 후 아래와 같은 방법으로 확인한다.

dmesg로 확인

dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.
usb 1-4: new high speed USB device using ehci_hcd and address 6
usb 1-4: configuration #1 chosen from 1 choice
dvb-usb: found a 'DViCO FusionHDTV5 USB Gold' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (DViCO FusionHDTV5 USB Gold)
DVB: registering adapter 0 frontend 0 (LG Electronics LGDT3303 VSB/QAM Frontend)...
tuner-simple 4-0061: creating new instance
tuner-simple 4-0061: type set to 64 (LG TDVS-H06xF)
input: IR-receiver inside an USB DVB receiver as /class/input/input5
dvb-usb: schedule remote query interval to 100 msecs.
dvb-usb: DViCO FusionHDTV5 USB Gold successfully initialized and connected.

device 로 확인

$ ls -l /dev/dvb/adapter0/
crw-rw----+ 1 root video 212, 4 2009-04-21 22:50 demux0
crw-rw----+ 1 root video 212, 5 2009-04-21 22:50 dvr0
crw-rw----+ 1 root video 212, 3 2009-04-21 22:50 frontend0
crw-rw----+ 1 root video 212, 7 2009-04-21 22:50 net0

채널 검색

프로그램 설치

$ sudo apt-get install dvb-apps

채널 검색

안테나 사용시

$ mkdir ~/.azap
$ scan /usr/share/dvb/atsc/us-ATSC-center-frequencies-8VSB >> ~/.azap/channels.conf

케이블1

/usr/share/dvb/atsc/us-Cable-Standard-center-frequencies-QAM256 파일을 ~/us-Cable-Standard-center-frequencies-8VSB으로 복사한 후 vi등 에디터를 이용해서 파일안의 QAM256을 모두 8VSB로 변경한 후 scan 명령을 사용한다.

$ mkdir ~/.azap
$ scan ~/us-Cable-Standard-center-frequencies-8VSB >> ~/.azap/channels.conf

케이블2

$ mkdir ~/.azap
$ scan /usr/share/dvb/atsc/us-Cable-Standard-center-frequencies-QAM256 >> ~/.azap/channels.conf

채널 이름 설정

~/.azap/channels.conf 를 열어보면 채널 이름 없이 아래처럼 나온다(집이 난시청 지역인지 MBC는 보이지 않는다.).

$ cat ~/.azap/channel.conf
:623028615:8VSB:17:20:1
:641028615:8VSB:33:36:1
:677028615:8VSB:33:36:1
MBC DTV:749028615:8VSB:17:20:1

채널 이름을 넣어준다.채널 값은 지역마다 다를 수 있기 때문에 꼭 scan 해봐야 한다.

EBS:623028615:8VSB:17:20:1
KBS1:641028615:8VSB:33:36:1
KBS2:677028615:8VSB:33:36:1
MBC DTV:749028615:8VSB:17:20:1

리모콘 설정

@todo

프로그램별 설정

Mplayer

채널 설정

$ ln -s ~/.azap/channels.conf ~/.mplayer/channels.conf

TV 시청

실행할 때 채널 이름을 직접 입력한다.

mplayer dvb://KBS1

Totem

채널 설정

Totem은 backend로 GStreamer gst-plugins-bad 0.10.6 을 필요로 한다.또는 Xine을 사용할 수 있는데 이 문서에서는 GStreamer를 사용한다고 가정한다.

$ ln -s ~/.azap/channels.conf ~/.gstreamer-0.10/dvb-channels.conf

TV 시청

동영상 - 'DVB 어댑터 0' 에서 TV 보기 메뉴를 선택한다.GStreamer 문제인지 다른 설정 문제인지 몰라도 첫 화면이 표시된 후 화면이 갱신되지 않는다(정지 화면처럼 보인다.

채널 선택은 playlist를 사용한다.

Xine

채널 설정

$ ln -s ~/.azap/channels.conf ~/.xine/channels.conf

TV 시청

playlist 를 열고 DVB를 선택한다.

me-tv

채널 설정

metv를 실행하고 ~/.azap/channels.conf 파일을 import 한다.

TV 시청

그냥 실행한다.

VLC

VLC를 실행하고 미디어 - Stream메뉴를 선택한다(보기 - 재생목록 화면에서 고급 열기을 선택해도 된다.

갈무리 장치를 선택하고 아래와 같이 주파수를 선택하면 된다.

여기서 재생을 선택하면 재생목록에 추가되면서 바로 시청이 가능하고, 대기열에 넣기를 선택하면 재생목록에만 추가된다.

TV 녹화하기

@todo vdr

Reference

2009년 4월 29일

CF to HD1.8

대상 제품

PA-CF18H. 옥션에서 구입. PA-CF18H 문제인지 HDTune 문제인지 알 수 없지만 info를 확인하면 어떤 기능도 on 되어 있지 않음.

테스트 대상

  • PC : Sharp Muramasa MM2
  • HDD: HITACHI Travelstar 20GB HTC424020F7AT00
  • CF: Transcend 2GB x120 MLC
  • 성능 측정 : HDTune

결과

Travelstar

Transcend 2GB x120

일반

극악의 CPU 점유율을 보여줌

EWF 적용

EWF는 write에만 영향을 미치기 때문에 HDTune 결과는 일반 상태와 큰 차이가 없다.

FlashPoint 적용

FlashPoint는 write에만 영향을 미치기 때문에 HDTune 결과는 일반 상태와 큰 차이가 없다.

2009년 4월 23일

Moniwiki/1.1.3 버그 수정

plugin/RecentChanges.php에 버그가 있다. 아래와 같이 수정한다.

  1. $user = $DBInfo->user 를 $userinfo = $DBInfo->user 로 수정
  2. $user-> 부분을 $userinfo->로 수정

2009년 3월 15일

Debian/CapsLock과 Control키 바꾸기

이 문서는 Debian 에서 CapsLock 키와 Control 키를 바꾸는 방법에 대해서 기술한다.

적용한 시스템에서 사용하는 키보드는 MS Natural Keyboard 이다.

GNOME 설정

시스템 - 기본 설정 - 키보드 에서 키보드 배치 옵션Ctrl 과 CapsLock 뒤바꾸기를 선택한다.

이 설정을 하면 키 기능을 바뀌나 CapsLock LED는 여전히 CapsLock 키를 눌러야 켜진다. 이것은 아래 X window 설정을 변경하면 된다.

X window 설정

/etc/X11/xorg.conf 파일에서 InputDevice 섹션중 키보드 관련 섹션에 아래 줄을 추가한다.

Option  "XkbOptions"    "ctrl:swapcaps"

2009년 1월 14일

Bootvis를 이용한 시스템 부팅 시간 측정

BootVis 를 이용해서 시스템 부팅 시간을 측정하는 방법을 기술한다.

대상 OS

Windows XP 이상의 OS

WikiPedia:BootVis 설치

bootvis.msi 를 설치한다.

bootvis.zip

BootVis 를 이용해서 Boot 시간 측정

BootVis 를 실행하면 아래와 같은 화면이 나타난다.

Trace - Next boot 메뉴를 선택한다.

시스템 재시작 후 잠시 기다리면 아래와 같이 결과 화면이 출력된다. Boot Activity 값을 이용해서 알 수 있다.

제한

  1. 자동 로그인 기능을 사용해야 보다 정확한 시간 값을 얻을 수 있다.
  2. VMware 에서는 Boot Activity 값이 표시되지 않는다.