아아~ 요즘 집에오면 틈틈이 Multiple Processor에 대한 내용을 파고 있습니다. 스펙을 볼때마다 느끼는 것이지만, 스펙을 분석하는 과정은 퍼즐 맞추기와 굉장히 비슷하다는 생각이 듭니다. 퍼즐을 맞추기를 시작할때는 퍼즐 조각만 보입니다. 그러다 이제 퍼즐 맞추기에 힌트가 되는 면을 찾게되고 하나, 둘 끼워맞추다보면 어느새 전체적인 그림이 눈에 들어오고 얼마 남지않은 조각을 이용해서 쉽게 맞출 수 있습니다.

 지금 제가 하고있는 과정을 퍼즐 맞추기 과정에 대응시킨다면, 면을 찾는 과정쯤 되겠군요. 면을 찾아 퍼즐을 놓는 과정은 놓은 조각을 주위에 힌트로 쓸 수 있어 좋은 반면, 놓을 자리가 많아졌으니 고민할 것도 많아지는 단점이 있습니다. 지금 제 상황이 딱 그 상황인데, 조각이 맞춰져 가면 갈수록 궁금한 점이 생기더군요.

 현재 프레임워크를 사용해서 듀얼 코어 중에 나머지 하나의 코어를 동작시켰습니다. 물론 Real Mode지요. 이제 보호모드로 전환시키고 인터럽트 처리를 수행해야하는데, Symmetric Interrupt Mode로 동작하려하니 문제가 몇가지 생겼습니다.
 첫번째는 두 CPU에 Interrupt가 동시에 발생할텐데, 한쪽이 처리했을 때 나머지 한쪽은 어떻게 할 것인가 하는 문제입니다.
 두번째는 동일한 Interrupt가 계속해서 발생할 때, 두 CPU가 Interrupt를 처리하는 타이밍이 다르다면 언젠가는 한쪽에서 Interrupt가 밀리게 되는 일도 있을텐데 이를 어떻게 판단할 것인가 하는 것입니다.

 지금은 별로 퍼즐을 모은 게 없어서, 큰 그림이 보이지는 않지만 조만간 결판을 내고 구현에 들어갈 생각입니다. 하지만 그 전에 잠부터 좀 자야겠군요. 요즘은 12시만 넘으면 죽을 것 같습니다. ㅎㅎ

 그럼 다들 좋은밤 되세요 >ㅁ<)/~
 
 ps) TV에서 데이 브레이크를 봤는데, 상당히 흥미롭더군요. 잘못하면 드라마에 빠져서 작업을 안할 위험도... ^^;;


 고군분투 끝에 드디어 살짝(?) 동작시키는데 성공했습니다. '파랑새를 찾아서'란 고전에서 보면 그토록 찾아 다니던 파랑새가 자기 집에 있다는 내용이 나옵니다. 답이 먼곳에 있는 것이 아니더군요. 역시 처음에 보던 INTEL 메뉴얼에 있었습니다. ㅠ_ㅠ

 여기저기 다니긴 했지만 비슷한 내용만 반복해 언급되어있고, 실질적인 코드는 없었습니다. 프로그래머라면 백마디 말보다 한줄의 코드가 더 중요한법~!!! 한참을 뒤지다 문득 INTEL 메뉴얼에 나와있는 어셈코드가 떠올랐는데, 바로 그 코드가 핵심이었습니다. 물론 아무것도 모르는 상태로 그 코드를 봐봤자 평범한 어셈블리어 코드일 뿐입니다만, 여기저기를 뒤진 탓인지 다시보니 딱 알겠더군요. ^^;;;;

 일단 Real Mode에서 Halt 상태로 되어있는 Application Processor를 활성화시켜서 콘솔화면의 좌측 상단에 색깔을 바꿔가면서 문자를 찍도록 수정했습니다. 테스트를 하는 과정에 약간 문제가 있었지만, 그래도 잘 동작하네요. ^^)/~

사용자 삽입 이미지

 이제 Application Processor를 32bit 보호 모드로 바꾸고 실제 태스크를 할당해서 실행해볼 생각입니다. 조금만 더하면 어느정도 마무리가 되겠네요. 정리되면 또 올리겠습니다.

 다들 좋은밤 되세요 ^^)/~~



 3월호 원고도 무사히 넘어갔습니다. ^^)/~ 사실 글이 너무 넘친다는 기자님의 말씀이 있었습니다만, 제가 그때 PC에 아무것도 안깔린 상황이라... ^^;;; 결국 페이지가 2페이지나 늘었더군요. ㅎㅎㅎ 페이지가 늘어난다는 것은 쓰는 사람의 입장에서는 좋은 일인 것 같습니다.
 
 4월호 원고도 미리 보냈는데, 별 이야기가 없는 것을 보면 잘된 듯 합니다. 4월호가 마지막인데, 왠지 시원 섭섭하네요. ^^)/~ 다음에는 Multiple Processor Control 에 대해 다루어 볼까 합니다. 상용 OS를 제외하고 INTEL이나 AMD의 Multiple Processor를 완전히 다루고 있는 OS를 아직 못봤고, Multiple Processor에 대한 자료가 너무 없기 때문에 의미가 있을 듯 합니다. ^^)/~

 그럼 마이크로소프트웨어 3월호 목차 나갑니다.

=====================================================
STEP BY STEP

VS 2008을 이용한 블로그 프로그래밍│최지훈  290
실전 블로그 프로그래밍 1

3D 소프트웨어 플러그인 개발기│조영락  298
3ds Max SDK 레퍼런스

리눅스 시스템 프로그래밍│서상원 306
시스템 프로그래밍의 이해

프레임워크로 다시 보는 운영체제 개발│한승훈 312
스케줄러 및 동기화 객체 구현하기

오픈소스 검색 엔진의 세계│이성호 322
텍스트 검색 엔진, 루씬(Lucene)

=====================================================


 요즘 몸이 좀 허해져서 그런지 오늘 아침에 코피가 났습니다. 어의가 없더군요. ㅡ_ㅡa 뭐 그래도 요즘 잠을 별로 안자고 있기 때문에 그럴수도 있겠다는 생각을 했습니다. ^^;;; 설마 몸에 이상이 있을라구요 ㅎㅎ

 Multiple Processor 분석 쪽은 일단 문서를 정리하고 정리된 문서를 바탕으로 실제 테스트를 해보는 방식으로 진행하고 있습니다. 문서만 주구장창 읽으니 눈에 보이는 것이 없어서 더욱 깜깜하더군요. 그래서 가상머신을 이용해서 직접 테스트를 해봤는데, 의외로 결과가 잘나옵니다. 신기하네요 @0@)/~ 물론 지금은 아주 약소한 단계의 테스트만 진행하고 있습니다. ^^;;;;

 내일 일하러 가면 이틀동안 쉬는군요. 집에 내려갈까 가지말까 심하고 고민하고 있습니다. 내려가는데 걸리는 시간도 문제지만 몸이 피곤해서... ㅜ_ㅜ... 만약 안내려간다면 주말에 MP쪽 문서에 All in할 생각입니다. 이게 빨리 끝나야 본래의 목적인 Virtualization을 볼 수 있어서 ㅎㅎㅎ

 아우~ 오늘은 좀 일찍 자야겠군요. 자기 전에 오늘 테스트한 스샷 하나 올립니다.
사용자 삽입 이미지

 그럼 좋은 밤 되세요 ^^)/~


 Multiprocessor에 대한 INTEL의 문서를 읽다가, 뭔가 부족한 느낌이 들어서 웹검색을 했습니다. 여기저기를 뒤지다가 우연히 OS 개발 관련 링크에 들어갔는데, 월척(!!!!)을 낚았습니다. ㅜ_ㅜ)/~

 사이트 주소는 http://www.osdever.net/cottontail/#SMP%20(IA32)이고 가보시면 INTEL의 Multiprocessor Specification 문서와 Multiprocessing Support for Hobby OSes Explained 문서를 보실 수 있는데, Multiprocessor와 BIOS, 그리고 OS 간의 관계를 잘 설명해 주고 있습니다. 문서를 읽자마자 궁금했던 점이 바로 이해되더군요. 문서가 아주 깔끔히 정리되어있습니다.

 그런데 놀라운 사실은 Multirprocessor Specification 문서가 1997년도에 1.4 버전이 됬다는 겁니다. 좀 읽어보니 CPU가 486 정도 일때 부터 Multiprocessor에 대한 내용이 나오기 시작한 것 같던데, 역시 대단하다는 생각밖에는 안듭니다. 이렇게나 일찍부터 Multiprocessor에 대한 준비를 하고 있었다니... ㅜ_ㅜ...

 덕분에 진도를 꽤 빨리 나갈 수 있게 됬습니다. 회사 일 끝나고 틈틈이 정리해서 나중에 한꺼번에 올리겠습니다. 오늘은 잠이 잘 올 것 같군요. ;)

 그럼 다들 좋은 밤 되세요~ >ㅁ<)/~

ps) 잘하면 OS 프레임워크의 Multiprocessor 버전이 나올지도 모르겠습니다. ;)~


 테스트용으로 만든 한글 입력 메모장에 대해서 많은 분들의 문의가 있으셔서, 오늘 드디어 구석에 박아두었던 소스를 꺼냈습니다. 일단 전체적인 수정을 하기 보다는 많은 분이 필요로 하셨던 TXT 저장 기능과 리셋기능을 먼저 추가했습니다. ^^

 대부분의 기능은 기존의 1.0 버전(http://kkamagui.tistory.com/238)과 크게 차이가 없습니다. 특별히 이번에 추가된 기능만 나열하면 아래와 같습니다.
1. 소프트웨어 리셋 기능 : "START" 버튼을 클릭하여 펌웨어 시작화면으로 돌아가는 기능 추가. 파워를 껏다가 켜야했던 기존의 불편함을 줄임
2. TXT 추가 기능 : 메모 페이지에서 "A"버튼을 누르면 루트 디렉토리에 DATA + 페이지번호 +.txt 형식으로 txt 파일을 생성. PC에서 데이터 파일 공유 가능
사용자 삽입 이미지
3. 메모 페이지 확장 : 메모장의 페이지를 40 페이지를 확장. 기존의 20 페이지용 데이터 파일의 경우, 안전한 사용을 위해 모든 데이터를 백업해 놓고 루트 디렉토리에 있는 NOTEDATA.DAT 파일을 삭제하길 권장

 아래는 실행 화면을 캡쳐한 것입니다.
사용자 삽입 이미지

 추가 요구사항이나 기타 건의사항은 http://kkamagui.tistory.com으로 부탁드립니다. ^^
 그럼 좋은 하루 되세요 >ㅁ<)/~



 휴일을 맞아 방청소를 해놓고 오후 느즈막한 시간부터 인텔 문서를 붙잡고 읽기 시작했습니다. 워낙 영어가 부족한지라 이해가 잘 안되서 테스트 코드 위주로 볼려고 이곳 저곳 뒤졌습니다. Pseudo 코드는 발견했지만 전체적인 흐름의 일부분만 되어있어서 크게 도움이 안되더군요. 결국 차분히(??) 읽었습니다. ㅜ_ㅜ

 문서를 읽어가면서 여기저기 줄치고, 제가 만든 OS 프레임워크(http://kkamagui.tistory.com/category/OS%20Kernel(Intel,%20ARM) 참고)를 이용해서 테스트를 진행하다가 재미있는 사실을 알아냈습니다. VMware(코어 2개로 설정)를 사용해서 테스트했기 때문에 실제 PC와 동일할지는 알 수 없습니다만, 전원이 켜지고 BIOS가 시스템을 초기화하는 동안 BIOS가 CPU에 있는 모든 코어를 초기화 하고 ID를 할당해준다는 것입니다.
 
 인텔 문서에 의하면 CPU는 BIOS 코드에 의해 BSP(Bootstrap Processor)와 AP(Application Processor)로 나누어 설정된다고 합니다. 그리고 BSP는 초기화된 후 OS 코드를 실행하며, AP는 초기화된 후 인터럽트를 대기하면서 HLT 루프를 돈다고 되어있습니다. 실제로 테스트 코드를 넣어서 플래그를 확인해보니 APIC가 활성화되어 있었습니다. @0@)/~!!! 사실 간단히 코드를 작성해서 플래그만 확인해본 것이라 확실한 것은 아닙니다만, 일단 알아낸 것이니 포스팅합니다. ^^;;;
사용자 삽입 이미지

CPUID, APIC ID 및 APIC Enable 정보


 만약 진짜로 AP가  인터럽트를 대기하며 HLT 루프를 돈다면, BSP가 어떤 방식으로 AP가 태스크를 실행하도록 할 수 있을까요? 지금 추측하기로는 AP쪽의 인터럽트 백터를 조작하고 인터럽트를 발생시켜서 인터럽트 서비스 루틴(ISR)을 통해 태스크 또는 커널 코드를 실행하도록 하는 것이 아닐까 합니다. 이부분은 나중에 좀 더 시간을 내서 확인해 봐야할 것 같습니다.

 어이쿠, 또 밤이 깊었네요~ 이만 자야겠습니다. 다들 좋은 밤 되세요 ^^)/~

ps) 인텔 문서를 분석한다고, NDS 프로그램을 수정하지 못했군요.
죄송합니다. ㅜ_ㅜ 일단 내일이라도 짬을 내서 수정하도록 하겠습니다. (_ _)


 원래는 VT(Virtualization Technology)에 대해서 먼저 볼 생각이었지만, VT 기술을 보기 이전에 먼저 해결해야 할 일이 있더군요. 예전부터 궁금했던 것이 물리적으로 CPU의 개수가 2개 이상이면 이것이 어떻게 조율되어 동작할까 하는 부분이었습니다.

 특히 애매한 부분이 파워가 On 되거나 리셋이 됬을 때, CPU는 2개 모두 동작하도록 되어있는 것인지, 만약 그렇다면 둘다 BIOS 코드를 실행하고 OS 코드를 실행하는 것인지에 대한 부분이었습니다. 시간이 나면 본다고 미뤄뒀더니 아득한 기억 속으로 사라져있다가 이제야 떠올랐네요(역시 사람은 망각의 동물... ㅜ_ㅜ).

 이 부분에 대한 내용은 Intel64 and IA-32 Archtectures Software Developers Manual-Volume 3A-System Programming Guide, Part 1CHAPTER 7 MULTIPLE-PROCESSOR MANAGEMENT에 자세하게 나와있습니다. 지금 읽어보면서 정리하고 있는데, 나중에 대충 끝나면 포스팅하겠습니다. 현재는 스프링노트에서 작업 중이고, 어느정도 작업되면 링크를 걸어놓을테니 진행 과정이 궁금하신 분들은 참고하시면 될듯 합니다. ^^)/~

 새벽에 시간을 내어 앞부분을 조금 읽어보니, 지금까지 궁금해했던 내용이 바로 해결됬습니다(진작 읽어볼껄... ㅜ_ㅜ).


PC가 처음에 부팅이 되면 코어를 2종류로 설정하는데, 하나는 BSP(Bootstrap Processor)가 되고 나머지는 AP(Application Processor)가 됩니다. BSP는 부팅코드를 실행하고 OS 코드를 실행하는 메인의 역할을 하고, AP는 BSP에게서 신호를 받아서 동작하는 수동적인 역할을 하는 것 같습니다.


 물론 이것은 부팅과정에서만 해당되는 이야기이며, 실제 OS에서는 용도에 따라 Master - Slave로 가던지 Master - Master로 가던지 할겁니다. BSP와 AP로 나누고 부팅을 완료하는 과정까지 꽤나 복잡하던데, 자세한 것은 내일 또 알아봐야겠습니다.

 벌써 밤이 많이 깊었군요. ^^;;;;; 다시 올빼미로 돌아가는 것 같습니다. 이러면 안되는데... ㅜ_ㅜ
 다들 좋은 밤되세요 >ㅁ<)/~~!!!


 

 옛날에 AMD 듀얼코어를 사면서 인텔 패치도 본적이 있었는데, 오늘 갑자기 생각나서 급히 정리해 놓습니다. 앞으로 XP를 얼마나 쓰게 될지는 모르겠지만, 그래도 백업을 해둬야 할 것 같아서... 듀얼 코어 패치를 하면 성능이 조금 개선된다고 하던데, 글쎄요... ^^;;; 잘 모르겠습니다.
 설치 방법은 아주 간단하고 아래와 같습니다. ^^)/~

1. 아래의 파일을 모두 받습니다.
2. WindowsXP-KB896256-v4-x86-KOR.exe 파일을 실행해서 설치합니다. 그리고 재부팅하지 않음을 선택해서 3번 단계로 넘어갑니다.
3. windowsxp_kb896256_enable-enflenfl1014.reg 파일을 더블 클릭해서 레지스트리에 병합해 줍니다.
4. 마지막으로 [시작]->[실행]->"C:\boot.ini"를 실행하셔서 맨 마지막에 /usepmtimer 를 추가해 줍니다.
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /usepmtimer


 다들 알고계신 내용일텐데... 역시나 뒷북성 포스트를... ^^;;;

 컴퓨터를 워낙 급히 맞추다 보니 스피커를 깜빡했길래 대구에서 올라오면서 저질(?) 스피커를 하나 샀습니다. 처음 사용했던 모델은 컴소닉 필라 모델로 CS-3300(http://blog.danawa.com/prod/237235) 였습니다. 대구에서 속아서 비싼 가격에 사왔는데, 이게 간혹 찌직하는 잡음이 들리는 겁니다.
사용자 삽입 이미지

필라 CS-3300


 제 귀가 그리 민감한 편이 아니라 그러려니 하고 쓰려했지만, 계속 소리가 나서 가만히 분석을 해봤습니다. 원인은 바로 옆에 있는 냉장고와 좀 멀리 떨어진 도시가스 보일러였습니다!!! 보일러와 냉장고가 피크로 동작할 때마다 찌직하는 잡음이 발생!!! ㅜ_ㅜ 전력 쪽에 문제가 있거나 스피커 자체가 주변 기기의 전자파에 민감하거나 둘중 하나인 것 같더군요. 이럴수가... ㅜ_ㅜ 결국 참다 참다 못참아서 용산으로 향해 스피커를 질렀습니다.

 다른 볼일이 좀 있어서 겸사 겸사 용산으로 간건데, 도착하니 시간이 너무 늦어서 문을 거의 닫았더군요. 더군다나 사고싶었던 Britz 스피커는 찾을 수 없었고, 내일 다시 오려니 몸도 피곤하고 해서 그냥 질렀습니다. 보노보스껄로 질렀구요, 제가 책상이 좁은지라 우퍼가 있는 모델은 쓰지 못해서 2채널로 된 스피커를 샀습니다. 모델명은 BOS-N201(http://blog.danawa.com/prod/507035)이고 외관은 상당히 고급스럽습니다. 한가지 흠이라면 제가 용팔이님께 속아서 무려 8000원 정도를 더 비싸게 샀다는 겁니다. ㅜ_ㅜ... 아흑 내돈... 그냥 인터넷으로 구매할껄 ㅜ_ㅜ
사용자 삽입 이미지

BOS-N201


 소리는 앞서 사용했던 필라와는 차원이 틀립니다. 뭐랄까... 중저음이 제대로 사는 듯한 느낌이랄까요? 주변기기의 영향도 거의 안받는 것 같습니다. 지금 아주 만족하면서 음악을 듣고 있습니다. ^ㅡ^)/~~~!!!

 스피커가 필요하신 분이라면 한번쯤 저 모델로 고민해 보시는 것도 괜찮을 듯 합니다. 특히 책상이 좁고 그냥 음악을 막 듣는 분이시라면 강력 추천합니다. ^^
 
 보노보스 만세~~!!

ps) 오늘 저에게 19000원에 넘기신 분... 돈 많이 버시고 부자되십시오. (_ _)


 인터넷 익스플로어에서 파이어폭스로 넘어온지 이제 한 6개월 정도가 됐습니다. 파이어폭스의 꽤 괜찮은 성능과 다양한 플러그인때문에 만족하면서 쓰고 있습니다. 하지만 Active X로 도배된 우리나라 사이트를 방문할때 불편한 것은 어쩔 수 없었습니다.

 그래서 플러그인 목록을 뒤졌는데, 재미있는 것을 발견했습니다. IE Tab이라는 것인데요, 이미 많은 분들이 쓰고 계시더군요(뒷북성 포스트를... ㅜ_ㅜ). 파일은 https://addons.mozilla.org/ko/firefox/addon/1419 에서 받을 수 있습니다. 설치를 끝내고 나면 마우스 오른쪽 버튼을 눌렀을때 아래와 같이 표시됩니다.

사용자 삽입 이미지

 상당히 좋네요~ ^ㅡ^)/~~ 대만족입니다~
 파이어 폭스 만세~!!!



 요 며칠간 시간을 좀 내서 틈틈히 플러그인 프레임워크를 만드는 글(http://www.ddj.com/cpp/204202899)을 읽어 보았습니다. 짧은 영어에 피곤까지 겹쳐서 집중이 잘 되지 않아 읽는데 한참 걸리더군요(그렇다고 다 읽은 것은... ㅜ_ㅜ).

 점점 읽기 귀찮아 질 때쯤 되어서 결론이 어떻게 되는가 확인할 요량으로 스킵하면서 중간 중간을 읽고 있었습니다. 그러던 중 제가 관심있는 Cross-Platform에 대한 부분을 Apache Portable Runtime(APR)를 사용해서 해결한 것을 발견했습니다. 맥이 빠지는... ㅜ_ㅜ...

 사실 플러그인 보다는 저런 Cross-Platform에 대한 처리에 더 관심이 있었는데, 저런 부분을 보고 나니 별로 읽고 싶지 않더군요. 차라리 APR에 대한 글을 읽어보는게 더 나을 듯 합니다. 일단 스프링노트에 대충 정리해 놓긴 했는데, 내일 맑은 정신으로 다시 한번 보고 마무리를 해야겠습니다.

 Virtualization Technology에 대한 내용이나 볼껄 그랬습니다. ㅜ_ㅜ 흑흑...
 심하게 낚인 듯한 기분이군요. 밤늦게 이게 뭐람... ㅜ_ㅜ


 생전 처음으로 24인치 모니터를 질렀는데, 이게 너무 넓어서 거의 우측은 활용하지 못하고 있습니다. ㅜ_ㅜ... 이 좋은 모니터를 낭비하다니... 그렇다고 창을 두개씩 띄우서 좌/우측으로 나누기도 그렇고... 피봇해서 한참을 썻는데, 이거 원... 목이 아프더군요 ㅎㅎ
 
 그동안 밀린 글도 좀 보고, 부족한 PC 셋팅도 했습니다만, 역시나 이 넓은 화면은 어떻게 커버를 쳐야할지... 습관적으로 하는 최대화가 상당히 당황스럽습니다. 이 무시무시한 "여백의 미"는 압박이 심하군요. ㅜ_ㅜ 뭔가 방법을 강구해야 겠습니다. 진짜 완전 피봇해서 사용하던지, 아니면 뭔가 예쁜 것을 우측에 띄워놓던지... ㅜ_ㅜ

 큰 모니터 쓰시는 분~ 모니터 100% 활용하는 팁 좀 주세요~ ㅎㅎ

ps) 이번 주말은 NDS의 노트패드의 기능을 업그레이드 할까 생각 중입니다. 그동안 많이 건의되었던 소프트웨어 리셋 기능과 TXT 저장 기능을 넣어야 겠습니다. 다되면 릴리즈할테니 기대하세요 ^^;;;


 헥헥... 12시가 넘어서야 겨우 마이크로 소프트웨어 4월호 원고를 탈고했습니다. 상당히 일찍 끝날줄 알았더니, 결국 밤 늦게까지 하게 되는군요. 내일 강의가 무지하게 많은데... 조는 것 아닌가 모르겠습니다. ㅜ_ㅜ...

 원고도 마무리한 김에 지난번에 찜해두었던 기사를 소개해 드립니다. 저도 아직 보지는 않았구요, 앞부분만 조금 읽었습니다. 대충 보니 C++로 플러그인 프레임워크를 구축하는 예제를 보여줄 모양이던데... C++로 어떻게 플러그인 인터페이스를 맞출 것인가에 대한 내용도 들어있는 걸 보니 나쁘지는 않을 것 같습니다. ^^;;;;

 원문은 http://www.ddj.com/cpp/204202899 에서 보실 수 있으며 Part 5까지해서 5회 분량으로 되어있는 듯 합니다. 시간날때 한번 읽어봐야겠네요 ^^)/~

 그럼 다들 좋은 밤 되시길~~!!!


 오늘이 학교 졸업식이었는데, 졸업식 내내 교환보낸 LCD 모니터 생각에 정신이 하나도 없었습니다. 마음은 콩밭에 가있다는 것이 이런 것이 아닌지... ㅎㅎ 졸업식은 그냥 조촐하게 아버지와 여자친구, 그리고 친구들과 사진 좀 찍고 맛난 거 먹는 걸로 마무리 했습니다. 샤브 샤브를 먹었는데 나름 괜찮더군요. ㅎㅎ (없는 살림에 카드를 긁었더니 허리가 좀... ㅜ_ㅜ)

 올라오는 길에 택배기사분의 전화를 받고 어찌할까 고민하다가 주인 아저씨 댁에 LCD를 맡겼습니다. 이때부터 고민이 본격적이 되더군요. 기차는 왜 이렇게 느린지, 어떻게 하면 최단거리로 집에 갈 수 있을지, 택시를 탈지 버스를 탈지... 완전 머리가 터지는 줄 알았습니다(결국은 그냥 느긋하게 걸어왔습니다. 하핫 ^^;;;).

 도착해서 기쁜 마음으로 열어봤더니만, 얼래... 교환은 박스랑 기타 부품은 그대로 두는 거였나 보군요. 박스에 제가 그린 낙서가 보이고, 안에 케이블은 제가 대충 싼 그대로 였습니다. 혹시나 LCD도 그대로가 아닌가 하면서 조심스래 꼽아봤는데, 다행이도 LCD는 교환해줬습니다. 불량화소 검사를 해보니 좌측 구석탱이에 불량화소가 한개... ㅜ_ㅜ 그래도 처음것 보다는 좋으니 그냥 쓰기로 했습니다.

 LCD 제품 이름은 UNI240WC이고 요즘 없어서 못판다는 모델입니다. LG S-IPS 패널을 사용하고 콤포넌트 단자에 피봇 기능까지 지원합니다. 상당히 괜찮은 것 같구요, 특히 피봇해서 사용하면 아주 끝장입니다. 기술 문서 같은 것 볼때는 더할나위 없을 것 같습니다. ^^)/~

 이제야 겨우 풀셋트가 갖춰진 듯 합니다. 아직 데이터 백업 문제와 개발환경 설정 문제가 좀 남아있긴 하지만 개발을 하다보면 자연스레 설정되니까요 ^^)/~

 아아~ 기분 좋은 밤입니다. 다들 좋은 밤 되세요 ^^

ps) 내일 출근해야 한는데 들뜬 기분에 잠도 안자고 있습니다. 내일 왠지 졸듯한... ㅜ_ㅜ...


 휴가를 받아서 살림에 필요한 물건들이랑 PC를 사느라 일주일을 다 보냈습니다. 택배를 받고 조립하고 하느라 쉬는데 쉬는게 아니더군요. ㅜ_ㅜ... 그래도 어제 오늘은 책상이 들어오는 바람에 글을 좀 쓸수가 있었습니다. 그 덕분에 조금만 더 하면 마이크로소프트웨어 4월호 원고도 끝이군요. ^^;;;;

 보통 마소 원고에 많은 내용을 넣을 수 없기 때문에, 블로그에 적어놓은 글을 많이 링크합니다. 링크를 걸때마다 느끼는 거지만, 글을 쓰는 당시에 왜 좀 더 자세히 쓰지 못했을까하는 생각이 듭니다. 그때 좀 더 성의있게 내용을 채워놓았다면 지금처럼 이렇게 부끄럽지는 않았을텐데 말이지요. ㅜ_ㅜ...
 그렇다고 블로그 글까지 한꺼번에 손보기에는 일이 좀 많은 것 같고... 그래도 내용이 부실한 글은 좀 더 추가를 해야겠습니다. ^^)/~

 이제 VT에 대해서 한번 정리를 해볼까 하는데, 윈도우 드라이버를 이용하면 윈도우와 제가 만든 OS를 같이 돌릴 수 있을지도 모르겠다는 생각이 어렴풋이 들어서... ^^;;; 물론 좀 더 알아봐야겠지만, 그게 아니더라도 재미있는 일을 해볼 수 있을 것 같습니다. 일이 진행되는데로 스프링노트에 추가를 할테니 기대하셔도 좋습니다.

 아아~ 이제 게으름은 그만 피워야겠네요. 내공 증진에 힘써야겠습니다. ㅎㅎ
 다들 좋은 밤 되세요 ^^)/~!!!!


 요즘 컴퓨터 부품 가격이 슬금 슬금 계속 오르고 있습니다. 왜그런가 했더니 용산쪽에 물건이 부족한 듯 합니다. LCD 같은 경우도 24인치 품목은 없어서 못팔 정도라니... ㅡ_ㅡa... 계속 기다릴까 고민도 했지만, 언제 내릴지 몰라서 결국 질렀습니다.

 견적내고 나서도 송금을 해야하나 말아야 하나 많이 고민했지만, 필요하면 질러야 한다는 생각이 들어서 눈 딱 감고 송금했습니다. 사양은 대충 아래와 같습니다(다나와에 있는 모 사이트에서 낸 견적서인데, 사이트마다 조금씩 차이가 있을 수 있습니다).

사용자 삽입 이미지

 잘한 일인지는 모르겠습니다만... 꼭 필요했기 때문에... ㅜ_ㅜ 흑흑... 안급하신 분들은 좀더 기다렸다가 사시길...


 오늘 드디어 인터넷을 연결했습니다. ㅠ_ㅠ 집에서 쓰던 노트북만 덜렁 들고와서 얼마나 황당했던지... 인터넷도 안되고 그렇다고 노트북에 게임이 많이 깔려있는 것도 아니고... 예전에 하던 오락실 게임을 죽어라했더니 손가락이 다 아프더군요.

 그런데... 일복이 터졌는지, 갑자기 인터넷을 연결하자마자 여기저기서 전화가 왔습니다. 인터넷 연결 안했으면 어쩔뻔했는지... ㅡ_ㅡa... 이제 열심히 하라는 무언의 압박인가요? ^^;;;;

 이제 또 틈틈히 글도 쓰고 해야겠습니다. VT에 대한 공부도 슬슬 시작해야겠군요. 아아~ 너무 행복합니다. ^^)/~~ 다들 그럼 좋은하루 되세요 ^^



 
 이번 주에 친구, 후배와 함께 수원 지역을 마구 뒤진 결과 꽤나 괜찮은 원룸을 잡을 수 있었습니다. 가격은 쎄지만 가격에 비해 성능(?)은 괜찮습니다. 2명 정도 살기에는 약간 좁은 듯 하지만, 일단 신축이니 깨끗하고 짐을 좀 줄이면 얼마든지 가능할 것 같습니다. ^^)/~
 
 하지만 가격의 압박이... 쿨럭... 원초 예상보다 비싼 가격의 원룸을 지르는 바람에 지갑이 텅텅 비어버렸습니다. 다행히 틈틈이 모아놓은 돈이 좀 있어서 잔고 정리를 해보니 모자라지는 않더군요. 사실 마음을 졸이고 있었는데... 돈이 아슬아슬해서 말이죠. ^^;;;; (까딱하면 한달 내내 라면만 먹을 뻔 했습니다. ㅠ_ㅠ)

 이제 옷걸이도 사고 다리미, 청소기 등등을 사는 일만 남았는데... 진공 청소기를 살지는 의문입니다. 그냥 빗자루만 있어도 될 것 같기는 한데... 진공 청소기가 워낙 편하니 사는 것도 나쁘지 않겠더라구요. ^^;;; 그리고 가장 중요한 PC를 사는 일!!! 울프데일 CPU의 가격에 거품이 빠지지 않아서... 계획을 수정할지도 모르겠습니다. 비슷한 성능에 합리적인 CPU를 사는 것도 나쁘지는 않으니까요.

 이제 자리 좀 잡히고 나면 다시 개발을 시작해야겠습니다. 연수 받느라 책 보는 것도 뜸했고, 머리가 뻑뻑해지는 느낌이네요. 빨리 기름칠해서 뚝딱 뭔가를 만들어야겠습니다.

 늦은 밤... 잠도 안자고 그냥 한자 끄적거려봅니다. ^^;;;;


 다들 설은 잘 보내셨는지요? 저는 할머니댁에서 실컷 NDS만 하고 왔답니다. 이틀만에 게임 소프트를 하나 깨고 왔을 정도니... 얼마나 했는지는 굳이 설명을 안드려도 될 듯합니다(NDS 충전만 중간에 2번 했습니다). 시간이 아주~ 안가더군요. ㅜ_ㅜ

 게임을 하는 중간 중간에 지쳐서 올해는 무엇을 해야할지 고민해 봤습니다. 목표를 정하고 달리는 스타일은 아니지만, 너무 지겨워서... ㅡ_ㅡa;;;;

 일단 크게 64bit CPU 분석과 VT(Virtualization Technology) 분석을 목표로 잡았습니다. 64bit 쪽은 예전부터 관심이 있던 부분이었고, VT 기술쪽은 제가 잘 모르고 있는 부분이라 공부를 위해 잡았습니다.

 아직은 32bit가 대세인듯 하지만, 언젠가는 64bit의 시대로 가겠지요 ^^;;; 그전에 미리 대비해 놓는 것도 나쁘지 않을 것 같습니다. VT 기술쪽은 제가 따로 생각한 부분이 있어서, 실제 CPU의 명령을 사용해서 제어를 해보는 단계까지 진행할 생각입니다. VT는 아주 유용하게 써먹을 수 있을 것 같거든요. ^^)/~!!!

 가장 이상적인 것은 64bit OS를 만들어서 VT 기술을 이용해 32bit OS를 돌리는 것이 아닐까 생각합니다. 지금 32bit용 OS 프레임워크를 가지고 있으니 64bit용 OS 프레임워크를 만들고 VT 기술을 넣으면 딱이겠네요. 하핫~

 올해도 마구 달려보렵니다.
 여러분들도 새해 복 많이 받으시고 목표 다 이루시길 바랍니다. ^^)/~

 화이팅~!!!!

18 Path 관련 Shell API

 원문 :  http://kkamagui.springnote.com/pages/790020

 참고 : http://blog.naver.com/drvoss/20046975128

 

함 수 명

인  자

결  과

PathAddBackslash

c:\path1

c:\path1\

PathBuildRoot

0

A:\

PathCanonicalize

c:\path1\..\.\path1

c:\path1

PathCompactPath

c:\path1\path2\path3\file.txt

c:\path1\...\file.txt

PathFileExists

c:\path1\file.txt

파일의존재유무[T/F]

PathFindFileName

c:\path1\path2\file.txt

file.txt

PathIsDirectory

c:\path1\path2

디렉토리유무[T/F]

PathIsfileSpec

file.txt

순수파일이름인지[T/F]

PathMakePretty

C:\PATH1\FILE.TXT

C:\path1\file.txt

PathIsNetworkPath

\\YHKim\path1\file.txt

네트워크경로인지[T/F]

PathIsRoot

c:\

루트경로인지유무[T/F]

PathIsSystemFolder

c:\windows\System32

시스템폴더인지유무[T/F]

PathRemoveBackslash

c:\path1\path2\

c:\path1\path2

PathRemoveBlanks

“ c:\path1\path2 “

“c:\path1\path2”

PathRemoveExtension

c:\path1\path2\file.txt

c:\path1\path2\file

PathRemoveFileSpec

c:\path1\path2\file.txt

c:\path1\path2

PathRenameExtension

c:\path1\path2\file.txt

c:\path1\path2\file.changed

PathStripPath

c:\path1\path2\file.txt

file.txt

 

관련된 참고할 만한 MSDN Resource
Shell Function들 중 일부 함수들
http://msdn2.microsoft.com/en-us/library/bb776426(VS.85).aspx
Shell Lightweight Utility Functions중 Path와 관련된 함수들
http://msdn2.microsoft.com/en-us/library/bb773559(VS.85).aspx
User Profiles Function중 Path를 얻어 오는데 관련된 함수들
http://msdn2.microsoft.com/en-us/library/aa375109(VS.85).aspx

ps. Path가 등록이된 파일을 찾고 싶다면, SearchPath를 이용하면 FullPath가 넘어 온다.
Qus) 클라이언트 컴퓨터에 설치된 firefox의 경로를 찾고 싶은데 어떻게 하지? Firefox가 써 놓은 레지스터리값를 뒤져볼까? firefox의 기본 설치 경로에 exe 파일을 createfile해서 판단할까?
Ans) SearchPath를 이용하셔서 FullPath를 얻으시고, 얻은 FullPath를 PathFileExists로 검증하시면 됩니다.

이 글은 스프링노트에서 작성되었습니다.

 1월호에 이어서 2월호에도 실렸습니다. 사실 3월호까지는 미리 써놓고 연수를 다녀왔기 때문에 3월호까지는 문제가 없어보입니다만, 정작 문제는 마지막인 4월호군요. ㅜ_ㅜ... 쓰다가 말았기 때문에 감이 영... ㅜ_ㅜ

 방을 잡을 생각과 PC 맞출 생각에 머리가 깨어질 듯 한데... 일단 열심히 해야겠지요 ^0^)/~ 홈브루 개발에 대한 문의도 빗발치고 있어서 왠지 쉴틈이 없는 듯합니다. ㅜ_ㅜ... 그래도 열심히하면 어떻게든 마감은 지킬 수 있을지도... 쿨럭..;;;

=====================================================
STEP BY STEP

VS 2008을 이용한 블로그 프로그래밍│최지훈  290
블로그 구조의 이해와 환경 설정

3D 소프트웨어 플러그인 개발기│조영락  296
플러그인 개발을 위한 개념도와 컴파일러 세팅

네트워크 보안 기술의 원리와 응용│서상원 304
인터넷 보안, SNMP

프레임워크로 다시 보는 운영체제 개발│한승훈 312
운영체제 프레임워크 시작하기

WPF 실전코딩 기법│김영욱 320
WPF 나머지 객체들과 실버라이트

=====================================================

ps) 울프데일 CPU를 사는 게 좋을까요? 아니면 쿼드를 사는 게 좋을까요? 금액은 별 차이가 없던데... 심히 고민입니다. s(ㅡ_ㅡ )z...

 그래픽카드를 고를때, 같은 모델이라면 무엇을 보고 고르시나요? 저같은 경우는 메모리 용량을 보고 고릅니다. 하지만 이게 잘못된 것이었습니다. ㅜ_ㅜ... 소위 낚인다는 것이 이런 것인가요... ㅜ_ㅜ... 그래픽카드와 메모리에 대한 내용은 http://www.smartgadget.kr/blog_post_257.aspx 에서 보실 수 있습니다.

 간단히 내용만 요약하자면, 그래픽 카드 코어에 권장하는 메모리 크기 정도면 되고... 만약 그 크기를 만족한다면 메모리의 동작속도를 우선으로 보는 것이 좋다는 것입니다. 아래는 그래픽 코어 별로 권장 메모리 용량입니다(윗글에서 발췌했습니다).


지포스 8400GS - 256MB
지포스 8500GT - 256MB
지포스 8600GT/GTS - 256MB
지포스 8800GTS(구형) - 320MB, 640MB
지포스 8800GT/GTS(신형) - 512MB

레이디언 HD 2400 - 256MB
레이디언 HD 2600 - 256MB
레이디언 HD 2900 - 512MB
레이디언 HD 3400 - 256MB
레이디언 HD 3600 - 256MB
레이디언 HD 3850 - 256MB, 512MB
레이디언 HD 3870 - 512MB


 방을 구하면 PC를 새로 맞춰야 하는데, 꼭 고려해야겠습니다. '메모리 속도'가 중요하다는 사실을요. ^^ 다들 한번씩 읽어 보시길 권합니다.

 그럼 좋은하루 되세요 ^^)/~


17 User Mode Process Dumper

원문 : http://www.microsoft.com/Downloads/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e&displaylang=en

 

User Mode Process Dumper Version 8.1

Brief Description
Microsoft Support Professionals Toolkit for Windows
The User Mode Process Dumper (userdump) dumps any running Win32 processes memory image on the fly, without attaching a debugger, or terminating target processes.

On This Page

Quick Details
File Name: UserModeProcessDumper8_1_2929_5.exe
Version: 8.1.2929.5
Date Published: 4/4/2007
Language: English
Download Size: 3.5 MB
Estimated Download Time: Dial-up (56K)DSL/Cable (256K)DSL/Cable (768K)T1 (1.5M) 9 min 

Overview

The User Mode Process Dumper (userdump) dumps any running Win32 processes memory image (including system processes such as csrss.exe, winlogon.exe, services.exe, etc) on the fly, without attaching a debugger, or terminating target processes. Generated dump file can be analyzed or debugged by using the standard debugging tools.

The userdump generates dump file by several triggers;
  • Dump by specifying PID or process name from command line
  • Dump automatically when process being monitored caused exceptions
  • Dump automatically when process being monitored exited
  • Dump by pressing hot key sequence


Updates in April 4,2007 (Build 8.1.2929.5)
  • Userdum is now fully compatible with Windows Server 2003 SP2 and Windows XP x64 Edition SP2. Previously, Process Monitoring did not function on SP2 of these operating systems. The same problem also occurred if a hotfix for KB919341 or KB909613 was applied to SP1 of these operating systems. This problem has been fixed.
  • System crash problem on Windows 2000 SP4 has been fixed. Bugcheck 0x1E (BucketID = userdump!ExtractImageFileName+26) could happen when a process monitored by Exit Monitor went to zombie state (the process is not alive but still remains in the system process list) and another process attempted to terminate the process in zombie state. Exit Monitor no longer dumps processes in zombie state in this case as they don’t have any meaningful memory image.
Updates in August 7,2006 (Build 8.1.2929.4)
  • Thread time information is added to the dump file by default so that debugger extension !runaway works.
  • Added all other meaningful MiniDumpWriteDump() options available in dbghelp.dll V6.4.7.1
  • Comment stream is added to the dump file indicating that the dump file was generated by userdump.exe. Comment includes Computer Name and how userdump.exe was launched
  • New userdump.exe -W option is added to add Window handle information. udext.dll debugger extension DLL is provided to see this information by debugger to debug the dump file.
  • EXEs and DLLs are now installed to %windir%\system32\kktools\ folder and this location is added to system path.
  • Userdump.exe is linked with dbghelp.dll dynamically for x86, too. You now need userdump.exe and dbghelp.dll provided with userdump.exe even in command line mode. The same dbghelp.dll is also installed for full-featured mode.
  • Userdump.exe no longer uses system provided dbghelp.dll on x64 and IPF. Instead, dbghelp.dll provided with userdump is always used on all platforms – x86, x64, and IPF.
  • Process Monitoring and Hot Key snapshot support long process names up to 32 bytes.
  • Process Monitoring supports "Switch the dumper" option to specify an alternative dumper such as sqldumper.exe.
  • Process Exit Monitoring supports dumping both a process being killed and a process who called NtTerminateProcess() in the cross-process termination scenario.
  • Process Exit Monitoring allows to specify either Complete minidump, Small minidump, or No dump .
  • Process Exception Monitoring allows to specify Complete minidump or Small minidump.
  • Process Exception Monitoring can catch exceptions raised by calling RaiseException() in WOW64 processes.
  • Process Exception Monitoring always catches exceptions raised by RaiseException() regardless of "Ignore exceptions that occur inside Kernel32.dll" switch.
  • The control panel applet was refined for better GUI.
  • Non-privileged users can no longer launch the control panel applet.
  • Improved event logging to log at the beginning and the end of dumping and indicates process names/PIDs.

 Top of page

System Requirements

  • Supported Operating Systems: Windows 2000 Service Pack 3; Windows 2000 Service Pack 4; Windows Server 2003; Windows Server 2003 Service Pack 1; Windows Server 2003 Service Pack 2; Windows XP Embedded Service Pack 1; Windows XP Embedded Service Pack 2
You need a debugger tool which support dump file analysis like "Debugging Tools for Windows"

 Top of page

Instructions

  1. If the previous version of the User Mode Process Dumper is installed, you need to uninstall first.

  2. Click the Download button on this page to start the download. Do one of the following:

    1. To start the installation immediately, click Open or Run this program from its current location

    2. To copy the download to your computer for installation at a later time, click Save or Save this program to disk.

  3. To install the User Mode Process Dumper, run the UserModeProcessDumper8_1_2929_5.exe package. After you accept the Software License Terms, all necessary files are copied to the C:\kktools\userdump8.1 folder.

  4. Go to C:\kktools\userdump8.1\Architecture folder or the folder you specified in the previous step, and run setup.exe.

  5. Prior to starting and using the User Mode Process Dumper, please be sure to read the readme.htm file, which is located in the C:\kktools\userdump8.1 folder.

 Top of page

Additional Information

Microsoft and partners are jointly developing tools to improve Windows supportability. This joint-development project started from 1998 and has counted 8th phase already. At phase 8 project, the following partners are participating in the project.
  • Fujitsu Limited.
  • Hitachi, Ltd.
  • Nihon Unisys, Ltd.
  • NTT Data Corporation
  • Toshiba Corporation

Tools are owned and released by Microsoft Corporation under the name of "Microsoft Support Professionals Toolkit for Windows".

 Top of page

 Top of page

 Top of page

 Top of page

 

이 글은 스프링노트에서 작성되었습니다.

12 문자셋(Character Set) 자동 탐지

 원문 :  http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html

 

A composite approach to language/encoding detection

 

Shanjian Li (shanjian@netscape.com)
Katsuhiko Momoi (momoi@netscape.com)
Netscape Communications Corp.

[Note: This paper was originally presented at the 19th International Unicode Conference (San Jose). Since then the implementation has gone through a period of real world usage and we made many improvements along the way. A major change is that we now use positive sequences to detect single byte charsets, c.f. Sections 4.7 and 4.7.1.  This paper was written when the universal charset detection code was not part of the Mozilla main source. (See Section 8). Since then, the code was checked into the tree. For more updated implementation, see our open source code at Mozilla Source Tree. - The authors. 2002-11-25.]

1. Summary:


This paper presents three types of auto-detection methods to determine encodings of documents without explicit charset declaration.  We discuss merits and demerits of each method and propose a composite approach in which all 3 types of detection methods are used in such a way as to maximize their strengths and complement other detection methods. We argue that auto-detection can play an important role in helping transition browser users from frequent uses of a character encoding menu into a more desirable state where an encoding menu is rarely, if ever, used.  We envision that the transition to the Unicode would have to be transparent to the users.  Users need not know how characters are displayed as long as they are displayed correctly -- whether it’s a native encoding or one of Unicode encodings.  Good auto-detection service could help significantly in this effort as it takes most encoding issues out of the user’s concerns.

2. Background:


Since the beginning of the computer age, many encoding schemes have been created to represent various writing scripts/characters for computerized data. With the advent of globalization and the development of the Internet, information exchanges crossing both language and regional boundaries are becoming ever more important. But the existence of multiple coding schemes presents a significant barrier.  The Unicode has provided a universal coding scheme, but it has not so far replaced existing regional coding schemes for a variety of reasons. This, in spite of the fact that many W3C and IETF recommendations list UTF-8 as the default encoding, e.g. XML, XHTML, RDF, etc. Thus, today's global software applications are required to handle multiple encodings in addition to supporting Unicode.

The current work has been conducted in the context of developing an Internet browser. To deal with a variety of languages using different encodings on the web today, a lot of efforts have been expended. In order to get the correct display result, browsers should be able to utilize the encoding information provided by http servers, web pages or end users via a character encoding menu. Unfortunately, this type of information is missing from many http servers and web pages. Moreover, most average users are unable to provide this information via manual operation of a character encoding menu. Without this charset information, web pages are sometimes displayed as ‘garbage’ characters, and users are unable to access the desired information. This also leads users to conclude that their browser is mal-functioning or buggy.

As more Internet standard protocols designate Unicode as the default encoding, there will undoubtedly be a  significant shift toward the use of Unicode on web pages. Good universal auto-detection can make an important contribution toward such a shift if it works seamlessly without the user ever having to use an encoding menu.  Under such a condition, gradual shift to Unicode could be painless and without noticeable effects on web users since for users, pages simply display correctly without them doing anything or paying attention to an encoding menu.  Such a smooth transition could be aided by making encodings issues less and less noticeable to the users. Auto-detection would play an important role for such a scenario.

3. Problem Scope:

 

3.1. General Schema

Let us begin with a general schema. For most applications, the following represents a general framework of auto-detection use:

Input Data ->  Auto-detector -> Returns results

An application/program takes the returned result(s) from an auto-detector and then uses this information for a variety of purposes such as setting the encoding for the data, displaying the data as intended by the original creator, pass it on to other programs, and so on.

The auto-detection methods discussed in this paper use an Internet Browser application as an example. These auto-detection methods, however, can be easily adapted for other types of applications.

3.2.  Browser and auto-detection


Browsers may use certain detection algorithms to auto-detect the encoding of web pages. A program can potentially interpret a piece of text in any number of ways assuming different encodings, but except in some extremely rare situations, only one interpretation is desired by the page’s author.  This is normally the only reasonable way for the user to see that page correctly in the intended language.

To list major factors in designing an auto-detection algorithm, we begin with certain assumptions about input text and approaches to them.  Taking web page data as an example,

1. Input text is composed of words/sentences readable to readers of a particular language.  (= The data is not gibberish.)

2. Input text is from typical web pages on the Internet. (= The data is usually not from some dead or ancient language.)

3. The input text may contain extraneous noises which have no relation to its encoding, e.g. HTML tags, non-native words (e.g. English words in Chinese documents), space and other format/control characters.

To cover all the known languages and encodings for auto-detection is nearly an impossible task. In the current approaches, we tried to cover all popular encodings used in East Asian languages, and provided a generic model to handle single-byte encodings at the same time. The Russian language encodings was chosen as an implementation example of the latter type and also our test bed for single-byte encodings.

4. Target multi-byte encodings include UTF8, Shift-JIS, EUC-JP, GB2312, Big5, EUC-TW, EUC-KR, ISO2022-XX, and HZ.

5. Providing a generic model to handle single-byte encodings – Russian language encodings (KOI8-R, ISO8859-5, window1251, Mac-cyrillic, ibm866, ibm855) are covered in a test bed and as an implementation example.

4. Three Methods of Auto-detection:

 

4.1. Introduction:


In this section, we discuss 3 different methods for detecting the encoding of text data. They are 1) Coding scheme method, 2) Character Distribution, and 3) 2-Char Sequence Distribution. Each one has its strengths and weaknesses used on its own, but if we use all 3 in a complementary manner, the results can be quite satisfying.

4.2. Coding Scheme Method:


This method is probably the most obvious and the one most often tried first for multi-byte encodings. In any of the multi-byte encoding coding schemes, not all possible code points are used. If an illegal byte or byte sequence (i.e. unused code point) is encountered when verifying a certain encoding, we can immediately conclude that this is not the right guess. A small number of code points are also specific to a certain encoding, and that fact can lead to an immediate positive conclusion. Frank Tang (Netscape Communications) developed a very efficient algorithm to detecting character set using coding scheme through a parallel state machine.  His basic idea is:

For each coding scheme, a state machine is implemented to verify a byte sequence for this particular encoding. For each byte the detector receives, it will feed that byte to every active state machine available, one byte at a time. The state machine changes its state based on its previous state and the byte it receives. There are 3 states in a state machine that are of interest to an auto-detector:

  •  START state: This is the state to start with, or a legal byte sequence (i.e. a valid code point) for character has been identified.
  •  ME state:  This indicates that the state machine identified a byte sequence that is specific to the charset it is designed for and that there is no other possible encoding which can contain this byte sequence. This will to lead to an immediate positive answer for the detector.
  •  ERROR state: This indicates the state machine identified an illegal byte sequence for that encoding. This will lead to an immediate negative answer for this encoding. Detector will exclude this encoding from consideration from here on.

In a typical example, one state machine will eventually provide a positive answer and all others will provide a negative answer.

The version of PSM (Parallel State Machine) used in the current work is a modification of Frank Tang's original work. Whenever a state machine reaches the START state, meaning it has successfully identified a legal character, we query the state machine to see how many bytes this character has. This information is used in 2 ways.

  • First, for UTF-8 encoding, if several multi-byte characters are identified, the input data is very unlikely to be anything other than UTF-8. So we count the number of multi-byte characters identified by the UTF-8 state machine. When it reaches a certain number (= the threshold), conclusion is made.  
  • Second, for other multi-byte encodings, this information is fed to Character Distribution analyzer (see below) so that the analyzer can deal with character data rather than raw data.

 

4.3. Character Distribution Method:


In any given language, some characters are used more often than other characters. This fact can be used to devise a data model for each language script. This is particularly useful for languages with a large number of characters such as Chinese, Japanese and Korean. We often hear anecdotally about such distributional statistics, but we have not found many published results. Thus for the following discussions, we relied mostly on our own collected data.

4.3.1. Simplified Chinese:



Our research on 6763 Chinese characters data encoded in GB2312 shows the following distributional results:

Number of Most Frequent Characters Accumulated Percentage
10 0.11723
64 0.31983
128 0.45298
256 0.61872
512 0.79135
1024 0.92260
2048 0.98505
4096 0.99929
6763 1.00000

     Table 1.  Simplified Chinese Character Distribution Table

 

4.3.2. Traditional Chinese:


Research by Taiwan’s Mandarin Promotion Council conducted annually shows a similar result for traditional Chinese encoded in Big5.

Number of Most Frequent Characters

Accumulated Percentage

10

0.11713

64

0.29612

128

0.42261

256

0.57851

512

0.74851

1024

0.89384

2048

0.97583

4096

0.99910

   

     Table 2. Traditional Chinese Character Distribution Table


4.3.3. Japanese:


We collected our own data for Japanese, then wrote a utility to analyze them.  The following table shows the results:

Number of Most Frequent Characters Accumulated Percentage
10 0.27098
64 0.66722
128 0.77094
256 0.85710
512 0.92635
1024 0.97130
2048 0.99431
4096 0.99981
  1.00000

       Table 3.  Japanese Character Distribution Table

4.3.4.  Korean:


Similarly for Korean, we collected our own data from the Internet and run our utility on it. The results are as follows:

Number of Most Frequent Characters Accumulated Percentage
10 0.25620
64 0.64293
128 0.79290
256 0.92329
512 0.98653
1024 0.99944
2048 0.99999
4096 0.99999
   

      Table 4.  Korean Character Distribution Table

 

 

4.4. General characteristics of the distributional results:


In all these four languages, we find that a rather small set of coding points covers a significant percentage of characters used in our defined application scope.  Moreover, closer examination of those frequently used code points shows that they are scattered over a rather wide coding range.  This gives us a way to overcome the common problem encountered in the Coding Scheme analyzer, i.e. different national encodings may share overlapping code points.  Because the most frequently occurring sets for these languages have the characteristics described above, the overlap problem between different encodings in the Code Scheme Method will be insignificant in the Distribution Method.

4.5. Algorithm for analysis:


In order to identify characteristics of a language based on the character frequency/distribution statistics, we need an algorithm to calculate a value from a stream of text input. This value should show the likelihood of this stream of text being in a certain character encoding. A natural choice might be to calculate this value based on each character’s frequency weight. But from our experiment with various character encodings, we find that this approach is not necessary and it uses too much memory and CPU power. A simplified version provides a very satisfactory result, and uses much less resources and runs faster.  

In the current approach, all characters in a given encoding are classified into 2 categories, “frequently used” and “not frequently used”.  If a character is among the top 512 characters in the frequency distribution table, it is categorized as a “frequently used” character. The number 512 is chosen because it covers a significant amount of accumulated percentages in any of the 4 language input text while only occupying a small percentage of coding points. We count the number of characters in either category in a batch of input text, and then calculate a float value we call Distribution Ratio.  

The Distribution Ratio is defined as follows:

Distribution Ratio = the Number of occurrences of the 512 most frequently used characters divided by the Number of occurrences of the rest of the characters.

Each of the multi-byte encodings tested actually shows a distinct Distribution Ratio. From this ratio then, we can calculate the confidence level of the raw input text for a given encoding. Following discussions for each encoding should make this clearer.

4.6. Distribution Ratio and Confidence Level:


Let us look at the 4 language data to see the differences in Distribution Ratios.  Note first that we use the term Distribution Ratio in two ways. An “ideal” Distribution Ratio is defined for language scripts/character sets rather than for encodings.  If a language script/character set is represented by more than one encodings, then, for each encoding, we calculate the “actual” Distribution Ratio in the input data by sorting characters into “frequently used” or “not frequently used” categories. This value is then compared against the ideal Distribution Ratio of the language script/character set.  Based on the actual Distribution Ratios obtained, we can calculate the Confidence level for each set of input data as described below.

4.6.1. Simplified Chinese (GB2312):


GB2312 encoding contains two levels of Chinese characters. Level 1 contains 3755 characters, and Level 2, 3008 characters. Level 1 characters are more frequently used than Level 2 ones, and it is no surprise to see that all 512 characters on the most frequently used character list for GB 2312 are within Level 1. Because Level 1 characters are sorted based on pronunciation, those 512 characters are evenly scattered in 3755 code points. These characters occupies 13.64% of all coding points in Level 1, but it covers 79.135% of the character occurrences in a typical Chinese text. In an ideal situation, a piece of Chinese text that contains enough characters should return us something like:

 Distribution Ratio =  0.79135/(1-0.79135) =3.79

And for a randomly generated text using the same encoding scheme, the ratio should be around 512 / (3755-512)=0.157 if no level 2 character is used.

If we include Level 2 characters into consideration, we can assume that the average probability of each Level 1 character is p1, and that of Level 2 is p2.  The calculation then would be:

512*p1 / (3755*p1 + 3008*p2 – 512*p1) = 512/(3755 + 3008*p2/p1-512)

Obviously, this value is even smaller. In a later analysis, we just use the worst case for comparison.
 

4.6.2. Big 5:


Big5 and EUC-TW (i.e. CNS Character Set) encodings have a very similar story.  Big5 also encodes Chinese characters in 2 levels. The most frequently used 512 characters are evenly scattered in 5401 Level 1 characters. The ideal ratio we can get from a big5-encoded text is:

Distribution Ratio = 0.74851/(1-0.74851) =2.98

And for a randomly generated text should have a ration near

512/(5401-512)=0.105

Since Big5 Level 1 characters are nearly identical to CNS plane 1 characters, the same analysis applies to EUC-TW.

4.6.3. Japanese Shift_JIS & EUC-JP:


For the Japanese Language, Hiragana and Katakana are usually more frequently used than Kanji. Because Shift-JIS and EUC-JP encode Hiragana and Katakana in different coding ranges, we are still able to use this method to distinguish among the two encodings.
Those Kanji characters that are among the most 512 frequently used characters are also scattered evenly among 2965 JIS Level 1 Kanji set.  The same Analysis leads to the following distribution ratio:

Distribution Ratio = 0.92635 / (1-0.92635) = 12.58

For randomly generated Japanese text data, the ratio should be at least

512 / (2965+63+83+86-512) = 0.191.

The calculation includes Hankaku Katakana (63), Hiragana (83), and Katakana (86).

4.6.4. Korean EUC-KR:


In EUC-KR encoding, the number of Hanja (Chinese) characters actually used in a typical Korean text is insignificant. The 2350 Hangul characters coded in this encoding are arranged by their pronunciation.  In the frequency table we got through analyzing a large amount of Korean text data, most frequently used characters are evenly distributed in these 2350 code points. Using the same analysis, in an ideal situation, we get:

Distribution Ratio = 0.98653 / (1-0.98653) = 73.24

For randomly generated Korean text, it should be:

512 / (2350-512) = 0.279.

4.6.5. Calculating Confidence Level:


From the foregoing discussions for each language script, we can define the Confidence level for each data set as follows:


Confidence Detecting(InputText)
{
  for each multi-byte character in InputText
  {
      TotalCharacterCount++;
      if the character is among 512 most frequent ones
          FrequentCharacterCount++;
  }

   Ratio = FrequentCharacterCount
                / (TotalCharacterCount-FreqentCharacterCount);
   Confidence = Ratio / CHARSET_RATIO;
   Return Confidence;
}


The Confidence level for a given set data is defined as the Distribution Ratio of the input data divided by the ideal Distribution Ratio obtained by the analyses in the preceding sections.

4.7.  Two-Char Sequence Distribution Method:

 
In languages that only use a small number of characters, we need to go further than counting the occurrences of each single character. Combination of characters reveals more language-characteristic information. We define a 2-Char Sequence as 2 characters appearing immediately one after another in input text, and the order is significant in this case. Just as not all characters are used equally frequently in a language, 2-Char Sequence distribution also turns out to be extremely language/encoding dependent. This characteristic can be used in language detection. This leads to better confidence in detecting a character encoding, and is very useful in detecting single byte languages.

Let’s use Russian language as an example. We downloaded around 20MB of Russian plain text, and wrote a program to analyze the text. The program found 21,199,528 2-Char sequence occurrences in total. Among the sequences we found, some of them are irrelevant for our consideration, e.g. space-space combination. These sequences are considered as noises, and their occurrences are not included in the analysis . In the data we used to detect the Russian language encodings, this left 20,134, 122 2-Char sequence occurrences.  That covers about 95% of all the sequence occurrences found in the data.  The sequences used in building our language model can be classified into 4096 different sequences, and 1961 of them appear fewer than 3 times in our 20,134,122 samples. We call these 1961 sequences as Negative Sequence Set of this language.

4.7.1. Algorithm for determining Confidence Level


For single-byte languages, we define the Confidence Level as follows:

Confidence Detecting(InputText)
{
  for each character in InputText
  {
      If character is not a symbol or punctuation character
          TotalCharacters++;
    Find its frequency order in frequency table;
      If (Frequency order < SampleSize)
      {
        FrequentCharCount++;
        If we do not have lastChar
        {
           lastChar = thisChar;
           continue;
        }
        if both lastChar and thisChar are within our sample range
        {
         TotalSequence++;
         If Sequence(lastChar, thisChar) belongs to NegativeSequenceSet
           NetgativeSequenceCount++;
        }
      }
   }
   Confidence = (TotalSequence – NegativeSequenceCount)/TotalSequence
                * FrequentCharCount / TotalCharacters;
   return Confidence;          
}  
 

There are several things in the algorithm that need to be explained.

First, this sequence analysis is not done to all characters. We can build a 256 by 256 matrix to cover all those sequences, but many of those are irrelevant to language/encoding analysis and thus unnecessary.  Since most single-byte languages use fewer then 64 letters, the most frequently used 64 characters seem to cover almost all the language specific characters.  This way, the matrix can be reduced to 64 by 64, which is much smaller.  So we are using 64 as our SampleSize in this work. The 64 characters we choose to build our model are mostly based on the frequency statistics with some adjustment allowed. Some characters, such as 0x0d and 0x0a, play roles very similar to the space character (0x20) in our perspective, and thus have been eliminated from the sampling.

Second, for all the sequences covered by this 64 by 64 model, some sequences are also irrelevant to detecting language/encoding.  Almost all single-byte language encodings include ASCII as a subset, it is very common to see a lot of English words in data from other languages, especially on web sites. It is also obvious that the space-space sequence has no connection with any language encoding. Those are considered as “noise” in our detection and are removed by filtering.
 
Third, in calculating confidence, we need to also count the number of characters that fall into our sample range and those that do not. If most of the characters in a small sample data do not fall into our sampling range, the sequence distribution itself may return us a high value since very few negative sequences might be found in such a case.  After filtering, most of those characters that have been fed to the detector should fall into the sampling range if the text is in the desired encoding. So the confidence obtained from counting negative sequences needs to be adjusted by this number.

To summarize the foregoing:

  • Only a subset of all the characters are used for character set identification. This keeps our model small. We also improved detection accuracy by reducing noise.
  • Each language model is generated by a script/tool.
  • Handling of Latin Alphabet characters:
  • If the language does not use Latin Alphabet letters, Alphabet -letter to Alphabet -letter sequences are removed as noise for detection. (e.g. English words frequently appear in web pages of other languages.)
  • If the language does use Latin Alphabet letters, those sequences are kept for analysis.
  • The number of characters that fall into our sample range and those that do not are counted so that they can be used in calculating the Confidence Level.

 

5. Comparison of the 3 methods:

 

5.1. Code scheme:


For many single-byte encodings, all code points are used fairly evenly. And even for those encodings that do contain some unused code points, those unused code points are seldom used in other encodings and are thus unsuitable for encoding detection.

For some multi-byte encodings, this method leads to a very good result and is very efficient. However, because some multi-byte encodings such as EUC-CN and EUC-KR share almost identical coding points, it is very hard to distinguish among such encodings with this method. Considering the fact that a browser normally does not have a large amount of text, we must resort to other methods to decide on an encoding.  

For 7-bit multi-bye encodings like ISO-2022-xx and HZ, which use easily recognizable escape or shift sequences, this method produces satisfactory results. Summarizing, the Code Scheme method,

  • is very good for 7-bit multi-byte encodings like ISO-2022-xx and HZ.
  • is good for some multi-byte encoding like Shift_JIS and EUC-JP, but not for others like EUC-CN and EUC-KR.
  • is not very useful for single-byte encodings.
  • can apply to any kind of text.
  • is fast and efficient.


5. 2. Character Distribution:


For multi-byte encodings, and especially those that can not be handled reliably by the Code Scheme method, Character Distribution offers strong help without digging into complicated context analysis. For single-byte encodings, because the input data size is usually small, and there are so many possible encodings, it is unlikely to produce good results except under some special situations. Since the 2-Char Sequence Distribution method leads to a very good detection result in such a case, we have not gone further with this method on single-byte encodings. Summarizing these points, the Character Distribution Method

  • is very good for multi-byte encodings.
  • only applies to typical text.
  • is fast and efficient.


5.3.  2-Char Sequence Distribution:


In the 2-Char Sequence Distribution method, we can use more information data in detecting language/encodings. That leads to good results even with a very small data sample. But because sequences are used instead of words (separated by a space), the matrix will be very big if it was to apply to multi-byte languages. Thus this method:
 

  • is very good for single-byte encodings.
  • is not efficient for multi-byte encodings.
  • can lead to good results with even small sample size.
  • only applies to typical text.

 

6. A composite Approach:

 

6.1. Combining the 3 methods:


Languages/encodings we want to cover with our charset auto-detector includes a number of multi-byte and single-byte encodings.  Given the deficiencies of each method, none of the 3 methods alone can produce truly satisfactory results.  We propose, therefore, a composite approach which can deal with both types of encodings.

The 2-Char Sequence Distribution method is used for all single-byte encoding detections.
The Code Scheme method is used for UTF-8, ISO-2022-xx and HZ detection. In UTF-8 detection, a small modification has been made to the existing state machine. The UTF-8 detector declares its success after several multi-byte sequences have been identified.  (See Martin Duerst’s (1977) detail). Both the Code Scheme and Character Distribution methods are used for major East Asian character encodings such as GB2312, Big5, EUC-TW, EUC-KR, Shift_JIS, and EUC-JP.

For Japanese encodings like Shift_JIS and EUC-JP, the 2-Char Sequence Distribution method can also be used  because they contain a significant number of Hiragana syallbary characters, which work like letters in single-byte languages.  The 2-Char Sequence Distribution method can achieve an accurate result with less text material.

We tried both approaches -- one with the 2-Char Distribution Method and the other without.  Both led to quite satisfactory results. There are some web sites which contain a lot of Kanji and Katakana characters but only a few Hiragana characters. To achieve the best possible result, we use both the Character Distribution and 2-CharDistribution methods  for Japanese encoding detection.

Here then is one example of how these 3 detection methods are used together.  The upper most control module (for auto-detectors) has an algorithm like the following:


Charset AutoDetection (InputText)
{
   if (all characters in InputText are ASCII)
   {
       if InputText contains ESC or “~{“
       {
          call ISO-2022 and HZ detector with InputText;
          if one of them succeed, return that charset, otherwise return ASCII;
       }
       else
          return ASCII;
   }
   else if (InputText start with BOM)
  {
      return UCS2;
  }
  else
  {
      Call all multi-byte detectors and single-byte detectors;
      Return the one with best confidence;
  }
}



Summarizing the sequences in the code fragment above,

  • Most web pages are still encoded in ASCII. This top-level control algorithm begins with an ASCII verifier. If all characters are ASCII, there is no need to launch other detectors except ISO-2022-xx and HZ ones.
  • ISO-2022-xx and HZ detectors are launched only after encountering ESC or “~{“, and they are abandoned immediately when a 8-bit byte is met.
  • BOM is being searched to identify UCS2. We found that some web sites send 0x00 inside http stream, and using this byte for identifying UCS2 proved to be unreliable.
  • If any one of the active detectors received enough data and reaches a high level of confidence, the entire auto-detecting process will be terminated and that charset will be returned as the result. This is called shortcut.

 

6.2.  Test Results:


As a test for the approach advocated in this paper, we applied our detector(s) to the home pages of 100 popular international web sites without document-based or server-sent HTTP charset.  For all the encodings covered by our detector(s) we were able to achieve 100% accuracy rate.

For example, when visiting a web site that provides no charset information (e.g. the web site at http://www.yahoo.co.jp before its server started sending the charset info), our charset detector(s) generates output like the following:

[UTF8] is inactive
[SJIS] is inactive
[EUCJP] detector has confidence 0.950000
[GB2312] detector has confidence 0.150852
[EUCKR] is inactive
[Big5] detector has confidence 0.129412
[EUCTW] is inactive
[Windows-1251 ] detector has confidence 0.010000
[KOI8-R] detector has confidence 0.010000
[ISO-8859-5] detector has confidence 0.010000
[x-mac-cyrillic] detector has confidence 0.010000
[IBM866] detector has confidence 0.010000
[IBM855] detector has confidence 0.010000

This then leads to the determination that EUC-JP is the most likely encoding for this site.

7. Conclusion:


The composite approach that utilizes Code Scheme, Character Distribution and 2-Char Sequence Distribution methods to identify language/encodings has been proven to be very effective and efficient in our environment. We covered Unicode encodings, multi-byte encodings and single-byte encodings. These are representative encodings in our current digital text on the Internet. It is reasonable to believe that this method can be extended to cover the rest of the encodings not covered in this paper.

Though only encodings information is desired in our detection results at this time, language is also identified in most cases. In fact, both Character Distribution and 2-Char Distribution methods rely on characteristic distributional patterns of different language characters. Only in the case of UTF16 and UTF8, encoding is detected but the language remains unknown. But even in such cases, this work can still be easily extended to cover language detection in future.

The 3 methods outlined here have been implemented in Netscape 6.1 PR1 and later versions as the “Detect All” option. We expect our work in auto-detection to free our users further from having to deal with cumbersome manipulations of the Character Coding menu.  The Character Coding menu (or Encoding menu for others) is different from other UI items in the Internet client in that it exposes part of the i18n backend to general users. Its existence itself is a mirror of how messy today’s web pages are when it comes to language/encoding.

We hope that offering good encoding default and universal auto-detection will help alleviate most of the encoding problems our users encounter in surfing the net. Web standards are shifting toward Unicode, particularly, toward UTF-8, as the default encoding. We expect gradual increase of its use on the web. Such shifts need not be overt as more and more users are freed from confronting issues related to encoding while browsing or reading/sending messages, thanks in part to auto-detection.  This is why we advocate good auto-detection and good default encoding settings for Internet clients.

8. Future Work:


Our auto-detection identifies a language. The encoding determination is a byproduct of that determination. For the current work, we only covered Russian as an example of single-byte implementation.  Since it identifies a language and only then which encoding it uses, the more language data models there are, the better the quality of encoding detection.

To add other single-byte languages/encodings, we need a large amount of text sample data for each language and certain degree of language knowledge/analysis.  We currently use a script to generate a language model for all the encodings for that language.

This work is at present not in the Mozilla source but we hope to make it public in the near future. When we do, we hope people with the above qualification will contribute in this area. Because we have not yet tested many single-byte encodings, it is likely that the model we propose here needs to be fine-tuned, modified or possibly even re-designed when applying to other languages/encodings.

 9. References:

Duerst, Martin. 1977. The Properties and Promizes of UTF-8.  11th Unicode Conference.
     http://www.ifi.unizh.ch/groups/mml/people/mduerst/papers/IUC11-UTF-8.pdf
Mandarin Promotion Council, Taiwan. Annual survey results of Traditional Chinese character usage.
  http://www.edu.tw/mandr/result/87news/index1.htm
Mozilla Internationalization Projects.  http://www.mozilla.org/projects/intl
Mozilla.org.  http://www.mozilla.org/
Mozilla source viewing.  http://lxr.mozilla.org/

이 글은 스프링노트에서 작성되었습니다.

16 윈도우 Network Share 함수

 원문 :  http://kkamagui.springnote.com/pages/773470

 

Network Share Management Functions

The Network Share Management functions can be grouped as follows.

NetFile Functions

NetFileClose
NetFileClose2
NetFileEnum
NetFileGetInfo

Session Functions

NetSessionDel
NetSessionEnum
NetSessionGetInfo

Network Share Functions

NetConnectionEnum
NetShareAdd
NetShareCheck
NetShareDel
NetShareEnum
NetShareGetInfo
NetShareSetInfo

Statistics Function

NetStatisticsGet

 

이 글은 스프링노트에서 작성되었습니다.

 와우~ 이제 조금만 더 버티면 사업부에 배치를 받겠군요. >ㅁ<)/~ 다행이 총괄까지는 원하는 곳으로 갔습니다. 이제 사업부하고 팀만 배치 받으면 되는데, 운이 계속 따라줘서 원하는 곳으로 갔으면 좋겠습니다.

 그나저나연수를 시작한 것이 1월이었는데, 벌써 2월에 접어 들었습니다. ㅜ_ㅜ)/~~ 마소를 3월호 분량까지 써서 넘겼는데... 여유로운 마음에 2월호 분량까지만 썼다면 어찌 되었을까 하는 섬짓한 생각을 해봅니다. 연수 과정에서 컴퓨터를 쓸 수 있을 줄 알았는데... 이게 쉽지 않더군요. 기숙사는 컴퓨터가 없고 그렇다고 밖으로 나가려니 귀찮고...

 이제 슬슬 4월호도 정리를 해야 하는데... 어찌할까 고민입니다. 흑흑... 연수 중간 중간에 나와서 쓸 생각이었지만 숙제를 내주는 바람에 그것도 쉽지 않습니다. 다행인 것은 설 연휴가 있어서 설에 좀 글을 쓸 수 있을 것 같다는... ^^;;;;

 컴퓨터없이 거의 1달을 버텼습니다. 저도 이게 가능할지 몰랐습니다. 저같은 컴퓨터 중독인 녀석도, 바쁘니 잊게 되는군요. 이러다가 코딩감도 잃어버리지 않을까 걱정입니다. 흑흑... 이제 슬슬 방도 잡고 컴퓨터도 멋진 녀석으로 새로 들여서 "홈 스위트 홈"을 꾸며서 다시 골방 폐인 모드로 돌입하여 내공을 쌓아야겠습니다. ^^;;;;

 여담으로 어제 저와 같이 과제를 열심히 하던 후배한테서 전화를 받은 이야기를 할까 합니다. 원체 천성이 우직하고 불평이 별로 없는 놈이라 알아서 잘할 꺼라고 생각하고 있었는데, 기술총괄의 과제 미팅을 다녀왔다더군요. 지방이라 과제를 따기가 쉽지 않을텐데... 무시무시한 스킬로 압박했나 봅니다. ^^)/~ "자랑스런 후배"라고 할까요. ㅎㅎ 뿌듯한 마음에 적어봅니다(grampus 만세~!!!!).

 그럼~ 다들 좋은 하루 되시길~ ^^
 21일 정도의 길고 긴(?) 연수 과정이 드디어 끝이 났습니다. ㅜ_ㅜ... 처음에는 힘들고 어려웠지만 조금씩 익숙해지더니 어느새 적응해서 그 빡빡한 일정 중에도 여유가 생겼습니다. ^^;;;; 또한 동기들 중에 재미있는 애들이 너무 많아서 연수 과정이 힘들지 않았습니다.
 
 동기들... 참 신기한 것 같습니다. 나름대로 개성이 뚜렷한 애들이고 왠지 섞어 놓으면 불협화음이 날 것 같은 애들인데... 뭉치면 아름다운 화음이 되는 것과 같이 좋은 성적을 내거든요. 1+1은 2가 아니라 10이 될 수도 있다는 것을 이번 연수에서 느낀 것 같습니다. 물론 멋진 지도선배님과 주진행 선배님이 없으셨다면 불가능한 일이었겠지요. ^^)/~ 선배님들 만세~!!!

 이제 연수가 끝났으니 각자 계열사로 돌아가겠지만, 1년에 몇번씩은 연락하고 지냈으면 하는 생각이 듭니다. 뭐랄까요... 힘든 연수과정을 힘을 합쳐 지내는 과정에서 "동기애" 라는 녀석이 생긴 것 같습니다. 제가 대인관계, 즉 사람이 만나고 헤어지는 데 크게 연연하지 않는데... 이번에는 아쉬운 느낌이 많이 듭니다. 때가 되면 만날 사람은 만난다는 것이 저의 생각인데, 왠지 끈을 놓고 싶지 않은 느낌... 말로는 설명할 수 없는 그런 느낌이 그렇게 만든 것 같습니다.

 동기 여러분들~ 모두 고생하셨고 우리 인연을 계속해서 이어 갑시다!!! 동기 만세~~ >ㅁ<)/~!!!

 마이크로소프트웨어 홈페이지가 가보니 이번호 목차가 있더군요. 죽 훓어보니 제 기사가 있었습니다. 이야~ 이렇게 보니 기분이 새롭군요. 마이크로소프트웨어 책자가 아직 도착하지 않아서 읽어보지는 못했지만, 기대가 됩니다. ㅎㅎ 빨리 왔으면 좋겠네요 >ㅁ<)/~

=====================================================
STEP BY STEP

ASP.NET과 ASP.NET AJAX와의 만남│최지훈  292
ASP.NET AJAX로 만드는 RSS 뷰어

스트럿츠2 애플리케이션 국제화│현철주  298
리소스 번들의 활용

프레임워크로 다시 보는 운영체제 개발│한승훈 306
운영체제 개발과 프레임워크의 만남

네트워크 보안 기술의 원리와 응용│서상원 314
인터넷 보안, IPSec

WPF 실전코딩 기법│김영욱 322
Custom Object Programming(2)
=====================================================

 그럼 다들 좋은하루 되시길~ ^^)/~

15 오디오 드라이버를 이용한 exploit 개발

 원문 : http://coderant.egloos.com/4069321

 

 오디오 드라이버의 취약점을 이용해서 exploit을 개발하는 내용이 담긴 자료이다. 굉장히 흥미로운 내용을 담고 있다.

 

 

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts