'분류 전체보기'에 해당하는 글 25건

한 달여만에 또 한번 위키백과 변환 작업을 하였다.

지난 번에는 에러가 나는 부분을 리눅스상에서 스크립트를 사용하여 skip 시켰는데 이번에는 C++ 코드를 작성하여 돌려 보았다.  평소 걸끄러워 보였던 본문 첫 부분의 thumb 문자도 제거해 버렸다.  

제작 방법은 기본적으로 Xcaliber 와 유사하지만 중간에 깨진내용과 thumb 를 처리하기 위한 filtering 프로그램을 한 번 돌려주는 것이 다르다.
 

1. http://download.wikipedia.org/kowiki/ 에서 pages-articles.xml.bz2 파일을 다운받는다. 

2. 알집으로 bz2 압축을 풀고 pages-articles.xml 파일로 이름을 변경한다.

3. WikiToMDict 2.0.exe 을 이용해서 wiki.txt파일로 변환한다.

4. wpko_filter.exe 를 이용해서 wiki_filtered.txt 로 변환한다.

5. MdxBuilder를 이용해서 mdx파일로 변환한다. 
Source : wiki_filtered.txt
Target : 위키백과_v8.12.mdx
Original format : MDict(Html)
Encoding : UTF-8(Unicode)
Title : Korean Wikipedia v8.12
Description :  (About 내용입력)

여기서 MdxBuilder 는 MDict 제작사에서 무료로 제공하는 MDict 사전 빌더 프로그램이다.

중요한 역할을 하는 프로그램은 위키백과의 xml 을 해석하여 MDict 빌더 입력을 위한 txt 파일을 생성하는 프로그램인 WikiToMDict 이다.  

이것은 MDict 에서 제공한 것도 아니고 위키백과에서 제공하는 것도 아니다.

출처인 http://www.hi-pda.com/forum/viewthread.php?tid=357806 로 보아 중국에서 만들어 졌음을 알 수 있다.  그런데 화면에 출력되는 진행 표시를 보면 infodisiac.com 에서 제공하는 툼레이더용 변환툴인 WikiToTome.pl 펄스크립트를 고친 것으로 보인다.

수 많은 위키백과 편집자와 infodisiac 의 TomeRaider 용 오리지널 perl 스크립트 개발자, WikiToMDict 개발자, MDict 개발자의 노력이 들어 있는 파일이다.  그것들에 비하면 내가 들인 노력은 아주 조그마한 것이다.

이 자리를 빌어 한국어 위키백과에 공헌하시는 분들께 또 한 번 감사드립니다.


WRITTEN BY
tinysun

,
지난 번 tomeraider 용 위키백과를 만들었지만 인덱스 기능의 부재 때문에 결국 MDict 용 2008.7 판을 애용하고 있었다.

그러다가 엊그제 위키백과 dump 가 올라온 것을 보고서 바로 MDict 용 판을 만들었다.  

Xcaliber 님이 제시한 방법으로 만들어 나갔지만 순탄하지는 않았다.  깨진 표제어가 있었고 긴 표제어가 있어서 편집을 조금 해야 했다.

어쨌든 100MB 가까이 되는 mdx 파일을 공들여 만들어 todaysppc.com 에 올렸더니 생각보다 인기가 많았다.  잘 했다는 생각이 든다.

이 자리를 빌어 위키백과 표제어 80,000건 달성을 축하합니다.

WRITTEN BY
tinysun

,
한참 전부터 국내 최고의 과학관이 과천에 생긴다는 것을 알고 개관을 기다려 왔는데 드디어볼 수 있었다.

개관일 바로 다음날 (11/15) 아침에 갔다.   그 큰 건물에 생각보다 많은 사람들이 붐비었다.  심지어 식당에서 밥을 먹기위해 1시간 가까이 기다리는 짜증도 있었다.

여러개의 전시실이 있는데 인기의 격차가 심하다.  가장 인기있는 곳은  어린이 탐구 체험관이다.   어린이를 대상으로 하는데다 입장 인원에 제한을 두기 때문에 길게 줄을 서서 기다리는 광경을 볼 수 있다.

그 다음 인기 전시장은 바로 옆의 기초과학관.  이 곳의 백미는 시간마다 굉음을 내는 번개 발생 장치인 테슬라 코일이다.  어린아이 울음소리도 빠짐없이 들을 수 있다.

2층의 첨단기술관-2 도 인기 만점이다.  로봇들이 전시되어 있고 특히 움직이는 로봇이 시간마다 춤을 추기 때문이다.   아이들이 워낙 좋아 해서 전시물이 많이 고장 날 것 같다.

그 옆의 자연사관 도 꼭 들러야 할 곳이다.   입구 바로 안 쪽에 있는, 소파에 자빠져서 천정의 스크린을 감상하는 전시물에서 잠깐 쉴 수 있다.  가장 재미있는 것은 전시실 깊숙히 안쪽에 숨어있는 지름 2m 의 대형 지구본 (SOS, Science On a Sphere)이다.  어두운 방에서 회전하고 있는 커다란 파란색 지구는 환상적이었다.

그런데 몇 몇 전시실은 재미도 별로고 인기도 별로였다.  개인적 관심사에 따라 다르겠지만...

마지막으로 별도 건물로 되어있는 천체과학관에서 플라네타리움을 구경하고 싶었는데 못했다.  오후에는 예매객만 들여보내기 때문에 발걸음을 돌려야 했다.  다음 기회에...

옥외 전시물은 근처에도 못갔다.  하루만에 모든 전시물을 관람하는 것은 보통 체력이 아니면 안 될듯하다.




WRITTEN BY
tinysun

,

 큰사진보기!

지난 번 분당에 볼일 보고 오는 길에 헌인릉을 관람하였다.  외진 곳에 있고 날씨가 막 추워지던 때라 단풍이 볼 만 한데도 사람은 많지 않았다.

헌인릉에는 헌릉과 인릉이 있다.  헌릉은 세종의 아버지인 태종의 릉이고, 인릉은 정조의 아들인 순조의 릉이다.  인릉은 정자각, 비각 보수공사로 인해 관람이 어려웠으나 헌릉은 능침까지 들어가 볼 수 있었다.  12시,1시를 제외하고 매시 정시에 30분간 개방을 하므로 시간에 맞추어 능 꼭대기까지 올라가면 내부를 관람할 수 있다.

(참조)
헌인릉 - 위키백과     http://ko.wikipedia.org/wiki/헌인릉
문화재청 헌릉관리소  http://heonin.cha.go.kr/







WRITTEN BY
tinysun

,

위키백과 ebook

위키백과 2008. 10. 25. 09:09
영문 wikipedia ebook 포맷(No image full version .tr3 포맷)을 PDA 에 담아서 오프라인으로 사용하였다.  wikipedia ebook 과 imdb ebook 으로 유명한 tomeraider 와 함께. 크기는 약 1GB 로 2GB 플래쉬 메모리에 넣고도 남았다.

영어의 압박으로 해석하느라 불편함이 있었지만 한글 위키백과는 ebook 버전을 찾을 수 없으니 어쩔 수 없었다.  그래도 방대한 양의 백과사전을 주머니에 넣고 다니면서 임의의 항목을 언제 어디서나 바로 조회하여 궁금함을 달랠 수 있어서 아주 좋았다.

그런데 얼마전 맘마미아 영화를 보고 배우들의 프로필을 알려고 PDA 에서 찾았지만 해당 항목의 내용이 부실해서 아쉬웠다.

wikipedia ebook 이 2006년도 판이라 2008년 개봉 영화에 관해서는 자세한 내용은 없고 제작예정이라는 정보뿐이었다.  최신 wikipedia 용량이 3GB+ 나 되어서 4GB 짜리 메모리카드를 사서 넣으니 좀 자세한 정보가 나왔다.  아마 다음 버전은 4GB 메모리로도 부족할 정도로 방대해 지지 않을까 생각한다.

어쨌든 이런 이유로 PDA 메모리가 업그레이드 되었다.

그런데 메모리카드에 3GB+ 파일을 넣고도 수백메가가 남으니 여기에 한글 위키백과가 있으면 좋겠다는 생각이 점점 커지게 되었다.  한글 위키백과는 영문에 비해 표제어수가 1/10 아래라서 300MB 도 안될 것 같았기 때문이다.  

하지만 또 아무리 인터넷을 뒤져도 한글판 위키백과 ebook 을 찾을 수 없었는데 이번에는 
http://infodisiac.com/Wikipedia/ProcedureTR3.html 를 찾을 수 있었다. 하지만 사이트 내용을 보면 지원되는 언어는 안타깝게도 DE (German), EN (English), EO (Esperanto), ES (Spanish), FR (French), NL (Dutch) or PL (Polish) 뿐이다.

그래도 혹시나 해서 절차를 따라 갔지만 한글 버전에는 역시 안 통했다.  심지어 돌다가 멈춰버린다. 그래도 조금만 손대면 될 수도 있겠다는 생각에 마음먹고 perl 스크립트 삽질을 시작했다.  

결국 일요일 하루와 며칠간의 아침잠을 헌납하여 숯한 시행착오 끝에 한글 tr3 파일을 만들 수 있었다.  처음 표제어 검색을 하려면 수만건의 표제어를 스크롤하여서 찾아야 하는 불편함이 있지만 컨텐츠간의 하이퍼링크는 정확히 작동했다.

이제 영문 wikipedia 와 한글 위키백과를 PDA의 4GB 메모리카드에 넣어 한 손에 들고 다닐 수 있게 되었다.  ^^;

허접 하지만 가져가서 써보고 싶은 분을 위해 링크를 걸어둔다.




WRITTEN BY
tinysun

,

일원동 느티나무

보호수 2008. 10. 1. 07:43
지난 일요일엔 일원동의 가장 오래된 고목이라는 느티나무를 찾았다.  느티나무는 놀이터 옆에 있으며 300년된 나무답게 높이 솟아 있다.



일원동 느티나무 사진

일원동 느티나무




일원동 느티나무 안내판 사진

일원동 느티나무 안내판



마침 어떤 할머니가 놀이터 벤치에 앉아 쉬고 계시길래 나무에 대해 물어보았다.  동제를 지내는 나무라는 것을 인터넷을 통해 알고 있었기에 확인차 물어본 것이다. 

제사라기보다 고사를 지냈는데 나라에서 주관하여 지냈으나 요새는 지내지 않는다고 한다. 또, 일원동이 개발된 후에 이 나무는 죽어가고 있었는데 돈을 들여 살려놓은 것이란다.  일원터널 도로 밑에 물길이 있었는데 아마도 그것 때문에 나무가 잘 사는 것일 게라는 말도 하였다.

기대밖으로 그 근처에 오래사셨던 분이었나보다.  그 나무가 죽을 뻔 했다는 것은 처음 알게 되었다.

WRITTEN BY
tinysun

,
어제 여기저기에서 뉴스로 소개되었지만 다른 평범한 사건들과 함께 그냥 잊고 있었다. 과학사의 커다란 사건을 오늘의 구글 두들이 상기시켜주었다.
사용자 삽입 이미지
그런데 이 CERN 이라는 곳은 팀버너스리에 의해 웹이 태어난 곳이기도 하니(최초의 웹사이트가 만들어진 곳이다) 구글과 무관하지는 않아보인다.

WRITTEN BY
tinysun

,

Arduino 시작하기

아두이노 2008. 6. 23. 22:02
마소에서 안윤호님의 'Arduino 보드를 소개하며'라는 글을 읽고 흥미를 가지게 되었는데 인터넷에 관련 글들이 많이 있었다.  특히, Suapapa 님의 Arduino  에서는 기판제작에서 bootloader 심기까지의 과정을 자세히 보여 주었고 STK200 호환의 패러렐 ISP 를 사용하기위한 고급수준의 방법도 소개하였다.

이것 저것을 보다가 Digitypo님의 Bootloading for a board as an Arduino 를 읽어 보고선 나도 Avrmall 의 ATmega168 보드를 구입하여 여기에 Arduino 부트로더를 심어보고 싶어졌다.  명성높은 Arduino Diecimila 를 큰 맘먹고 구입하고, Avrmall ATmega168 Board 는 물론 부트로더를 Burnning 하기위해 P-AVRISP 도 같이 구입하였다. 

사용자 삽입 이미지

Arduino Diecimila (왼쪽) 와  Avrmall ATmega168 Board V2.1 (오른쪽)


사용자 삽입 이미지

Arduino Diecimila 밑면엔 이탈리아 지도가 그려져 있다.


사용자 삽입 이미지

패러렐포트를 사용하는 P-AVRISP


앞의 Digitypo 님께서 사용한 USBISP V3.0 보다는 저렴하다.  하지만 이것은 패러렐포트용 이라서 PC 에 패러렐포트가 붙어 있는지 확인해야 한다.  MrKiss 님의 USBTiny  에서 USB용 ISP를 자작한 내용을 볼 수 있다.  USBTinyISP 는 ATTINY2313 칩을 사용하는데 MrKiss 님은 이 칩을 프로그램하기위해 다른 ISP를 사용하였다고 한다.  Arduino 사이트에 Parallel Programmer 의 자작방법이 나와 있지만 그냥 P-AVRISP 를 사버렸다.  그런데 지금보니 비슷하게 생긴 youknow 님의 ISP 가 LED 도 있는 것이 더 좋아 보인다.


사용자 삽입 이미지

Avrmall ATmega168 Board 의 ISP 연결 사진

 

컴퓨터가 책상밑에 있기 때문에 같이 딸려 나오는 20cm 짜리 케이블로는 어림도 없었다.  확장케이블을 따로 구매했는데 10pin x 1m 짜리밖에 없었다.  보드의 커넥터는 6pin 이지만 10pin 용 케이블을 잘 사용하고 있다.


Avrmall ATmega168 Board V2.1 는 Digitypo님이 선택했던 것에 비해 더 저렴하고(\12,000) 빠른 클럭의 보드이지만 serial chip 이 없으므로 RS-232C 를 직접연결할 수 없다.  때문에 RS-232C <-> RS-232.TTL 변환기 또는 USB <-> RS-232.TTL 변환기가 있어야 Arduino 환경에서 작성한 코드를 시리얼로 업로드 할 수 있다.  Digitypo님은 DIP232RL V1.0 을 사용하였고 인터넷을 보니 더 저렴한 것도 있었는데 집에 있던 USB <-> RS-232C 를 분해하여 쓸 생각으로 아무 것도 구매하지 않았다.


arduino.cc 다운로드 페이지 에서 윈도용 Arduino 환경을 다운받아 적당한 위치에 압축을 풀면 바로 실행을 할 수 있다.

사용자 삽입 이미지

Arduino 개발환경 초기화면


Arduino Diecimila 보드를 USB 로 연결하니 FT232칩 관련 드라이버를 설치하는 화면이 나오고 난 후 COM 포트가 새로 생겼다.  Arduino 환경에서 새로 생긴 COM 포트를 사용한다.

사용자 삽입 이미지

Arduino 개발 환경에서 COM7 이 추가된 모습


Sketch 로 샘플 소스를 열고 Upload to I/O Board 아이콘을 클릭하면 잠시 후 Arduino Diecimila 에서 실행되는 것을 볼 수 있다.

사용자 삽입 이미지

Sketch 소스 (LED 점멸)


사용자 삽입 이미지

Arduino Diecimila 의 LED가 켜져있는 사진


이제 Sketch 로 작성된 것을 Avrmall ATmega168 Board 에서도 같은 방식으로 돌려보겠다.  우선, Avrmall ATmega168 Board 에 P-AVRISP 를 사용하여 Arduino 부트로더를 심어야 한다.  Avrmall ATmega168 Board 의 clock 은 Arduino Diecimila 나 Arduino Mini 와 다르게 20MHz 로 되어 있으므로 이것에 맞게 새로 빌드한 부트로더와 보드설정을 사용한다.

arduino 개발환경이 설치된 곳의 hardware 디렉토리에 boards.txt 라는 파일이 있다.  맨 끝에 다음을 추가한다.
##############################################################
avrmall.name=Avrmall ATmega168 Board V2.1

avrmall.upload.protocol=stk500
avrmall.upload.maximum_size=14336
avrmall.upload.speed=19200

avrmall.bootloader.low_fuses=0xff
avrmall.bootloader.high_fuses=0xdd
avrmall.bootloader.extended_fuses=0x00
avrmall.bootloader.path=atmega168
avrmall.bootloader.file=ATmegaBOOT_168_avrmall.hex
avrmall.bootloader.unlock_bits=0x3F
avrmall.bootloader.lock_bits=0x0F

avrmall.build.mcu=atmega168
avrmall.build.f_cpu=20000000L
avrmall.build.core=arduino
##############################################################

f_cpu 값이 20MHz 에 맞추어 졌고 bootloader.file 에 지정된 파일명이 Arduino Diecimila 의 설정과 다르다.  아래 ATmegaBOOT_168_avrmall.hex 를 다운로드 하여 hardware\bootloaders\atmega168 디렉토리에 복사한다.
invalid-file

Avrmall ATmega168 Board V2.1 용 부트로더


참고로, 이 hex 파일은 atmega168 디렉토리의 Makefile 을 아래와 같이 고친 후 cygnus 쉘에서 make avrmall 을 실행하여 만든 것이다.
##########################################
#AVR_FREQ = 16000000L
AVR_FREQ = 20000000L

avrmall: TARGET = avrmall
avrmall: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>3' '-DNUM_LED_FLASHES=3'
avrmall: $(PROGRAM)_avrmall.hex
##########################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 Avrmall 보드가 표시된다.


P-AVRISP (유저가이드)는 Arduino 의 Parallel Programmer (회로도) 와 다른 종류 이다.  P-AVRISP 를 Arduino 환경에서 사용할 수 있도록 hardware 디렉토리의 programmers.txt 파일의 맨 끝에 다음을 추가한다.
#####################################
stk200.name=P-AVRISP(STK200)
stk200.communication=parallel
stk200.protocol=stk200
#####################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 P-AVRISP 가 표시된다.


이제 P-AVRISP 를 연결해서 Avrmall ATmega168 V2.1 에 arduino bootloader 를 burnging 할 차례다.  Arduino 환경의 Tools / Board 에서 Avrmall ATmega168 Board V2.1 을 선택한 후 Burn Bootloader 에서 w/ P-AVRISP(STK200) 을 선택한다.  Digital 13번(PB5) 핀에 LED 를 연결해 놓았다면 LED가 깜박이는 것으로 부트로드가 버닝되는 순간을 확인할 수 있다.

사용자 삽입 이미지

다운로드 되는 것을 확인하기위한 LED 연결


그런데 LPT1 을 열 수가 없다는 에러가 발생하면 별도의 드라이버(giveio.sys)를 설치해주어야 한다.    hardware\tools\avr\bin 디렉토리에 가면 install_giveio.bat 가 있다.  이것을 탐색기에서 더블클릭 하여 실행한다.  아래는 실행결과를 보기 위해 도스창을 열어서 실행한 화면이다.  
사용자 삽입 이미지
 
패러렐포트 사용을 위한 giveio.sys 설치



Guide to the Arduino Mini 의 Connecting the Arduino Mini and a regular Arduino 에 나온대로 가지고 있는 Arduino Diecimila 보드를 USB<->RS-232.TTL 변환기 대용으로 사용해 보았다.(리셋핀 연결은 필요없다)  Arduino 환경에서 Upload 하는 순간에 맞추어 Avrmall ATmega128 Board 의 Reset 버튼을 눌러줘야 한다.  Arduino Diecimila 보드에 내장된 RX, TX LED가 깜박여서 업로드 되고 있음을 확인할 수 있다.
 
사용자 삽입 이미지

Arduino Diecimila 를 USB<->시리얼 컨버터로 사용


이제 Arduino 가 두 개 생겼다.  하나는 Arduino Diecimila 정품, 하나는 Arduino Mini 짝퉁(?).  하지만 더 빠르고(16MHz -> 20MHz) 귀여운 Arduino 이다.




WRITTEN BY
tinysun

,

Prefactoring

카테고리 없음 2008. 4. 22. 19:59


Ken Pugh 가 쓴 명저로 졸트(Zolt)상을 수상한 책이다.

prefactoring 이란, 경험으로 부터 얻은 소프트웨어 개발에 관한 통찰력을 새 프로젝트에 응용하는 것이다.
( THE ART OF PREFACTORING APPLIES TO NEW PROJECTS THE INSIGHTS INTO DEVELOPING SOFTWARE YOU HAVE GLEANED FROM YOUR EXPERIENCE, as well as the experience of others, in developing software to new projects. )

Refactoring 이 이미 만들어진 코드의 내부구조를 개선하는 것이고 prefactoring 은 만들고 있는 코드를 위한 것으로 볼 수 있다.

책의 내용은 가상의 소프트웨어 프로젝트를 진행하면서 design, code, testing 에 관한 guideline 및 design principle 을 제시한다.  guideline 및 principle 하나하나가 녹록한 경험에 의한 산물로 보인다.  더러는 너무 쉽고 당연한 것도 있고 이해하기 힘든 추상적인 것도 있다.  하지만 대부분은 간결한 문장으로 정리되었으면서도 깊이있고 공감이 가게되는 주옥같은 표현의 지침들이다.

접근하기 쉬워 보이는 것들만 소개한다.


Guidelines
==========
(Big Picture)
Don't Reinvent the Wheel
Think About the Big Picture
Don't Repeat Yourself (DRY)
Plan Globally, Develop Locally

(Extreme Abstraction)
Splitters Can Be Lumped More Easily than Lumpers Can Be Split
Never Let a Constant Slip into Code

(Extreme Separation)
Adapt a Prefactoring Attitude
Do a Little Job Well and You May Be Called Upon Often
Decouple with Associations

(Extreme Readability)
A Rose by Any Other Name Is Not a Rose
Communicate with Your Code
The Easiest Code to Debug Is That Which Is Not Written
Use the Client's Language

(Interfaces)
Test the Interface, Not the Implementation

(Error Handling)
Report Meaningful User Messages
Never Be Silent

(General Issues)
Don't Speed Until You Know Where You Are Going
Consistency Is Simplicity
Plan for Testing
More Is Sometimes Less



Software Design Principles
==========================
Well-Defined Interfaces
Decomposition and Modularity
Prioritized Requirements
Abstraction
Information Hiding
Extensibility
Hierarchy
Separation of Concerns
Packaging




WRITTEN BY
tinysun

,
가지고 다니던 USB 메모리를 개비하였다.

기존에 쓰던 64 MB 짜리는 용량이 너무 적어서 소스 백업 받을 때마다 뭔가를 열심히 지워야 했기에 용량이 큰 것을 구입했다.  Memorette Swing Silver 2GB 로 용량 대비 32배 크다.

새 메모리의 디자인과 용량은 대만족.  그런데 속도를 재보자.  1.4GB 저장하는데 4분 걸렸으니  5.97 MB/s 쓰기 속도가 나왔다.   스펙엔  쓰기 15MB/s, 읽기 21MB/s 이니 쓰기 성능이 스펙대비 40% 밖에 안나왔다.

뭐가 잘못되었지 ?

WRITTEN BY
tinysun

,