josephjang

Extreme Programming Explained, Understanding the Linux Kernel, Object Thinking

Extreme Programming Explained: Embrace Change

XP의 창시자인 Kent Beck이 쓴 XP에 관한 책이다. XP를 공부할 때 처음으로 읽어야할 책이 바로 이 책이다. 200 페이지도 채 안되는 분량의 책은 매우 잘 쓰여진 책이다. 맨 먼저 해결하려는 문제를 정의한 후, 문제에 관련된 변수들을 파악한 후, 추구하는 가치와 기본 원리를 설정한 후 (문제의 해결방법에 있어서, 서로 충돌하는 가치가 있을 때 중요한 단계이다), 이 가치를 달성하기 위한 방법을 제시하고, 이 방법을 실제로 적용할 때의 이슈를 논의한다. 책에서만이 아니라 실제 문제에 있어서도 이러한 접근을 하면, 쓸데없는 혼란을 야기하지 않고 문제를 해결할 수 있다. 또, 자신만의 문제를 해결하기 위해서 뿐만이 아니라 다른사람과 문제와 해결책에 관해 커뮤니케이션할 때도 유용한 패턴이라고 볼 수 있다. (가끔씩 주변을 보면, 문제를 정의하지 않고도 해결법을 찾으려고 하거나, 문제를 알려주지도 않고 해결법을 제시하는 사람들을 볼 수 있다. 선문답이 되면 행복한 케이스지만, 동문서답이 되면 곤란하다.)

다시 XP 얘기로 돌아가서, Kent Beck이 제시하는 소프트웨어 개발 프로젝트의 문제는 바로 Risk이다. 즉, 스케줄의 변경, 프로젝트의 취소, 소프트웨어 결함, 요구사항 변경, 리소스 변경 등이 소프트웨어 실패의 가장 큰 원인이란 것이다. (경험적으로, 이에 전적으로 동의한다) 그렇다면, 우리가 이걸 해결하기 위해서 무엇을 할 수 있는 가를 봐야할 것이다. Kent Beck은 소프트웨어 개발 프로젝트의 ‘Four Variables’로 Cost, Time, Quality, Scope를 제시한다. 일반적으로 Cost와 Time은 우리가 control 하지 않고, (이른바, ‘기획’하는 사람들이 control한다) Quality는 control하기에 너무 어려운 변수이기 때문에, Kent Beck은 Scope에 집중하겠다고 얘기한다.

XP의 네가지 가치(Four Values)는 바로 Communication, Simplicity, Feedback, Courage이다. 기본 원리에는 좀 더 여러가지가 있다. Rapid feedback, Assume simplicity, Incremental change, Embraching change, Quality work.

XP의 해결책이 되는 practice들은 비교적 잘 알려져있다. The Planning Game, Small releases, Metaphor, Simple design, Testing, Refactoring, Pair programming, Collective ownership, Continuous integration, 40-hour week, On-site customer, Coding standards. 이러한 practice는 XP에서 새로 발명한 practice들이 아니라 기존의 Software engineering에서 강조하는 것을 radical하게 강조한 것이다. 다시 말해, code review가 좋은 practice라면 항상 하자는 것이 바로 pair programming이고, simplicity가 좋다면 가장 simple한 design을 하자는 것이 Simple design이라는 식이다. 우리나라말로 하면 좋은 게 좋은 것 정도가 될까? 바로 이러한 아이디어가 ‘Extreme Programming’의 어원이라고 한다.

개인적으로는 Simplicity와 Simple design이 가장 인상적이었다. 물론 현업(-_-;)에 가장 적용하기 쉬운 것이고, 스스로가 ‘design for tomorrow’에 의한 폐해를 많이 겪었기 때문이었다. XP 책을 읽기 전에 이미 약간은 이 practice를 적용해보았고, 결과는 매우 좋았던 것 같다. 개인적인 습관 때문인지 자꾸 복잡한 디자인을 하려는 경향이 있긴 하지만… 계속 remind하고 마인드 트레이닝을 할 필요가 있을 것 같다. 아, 그리고 개인적으로는 기획과 개발이 분리된 job을 그다지 많이 하지 않았기 때문에, 직접 경험한 적은 별로 없지만, 주변 사람들이 자주 불평하는, 기획이 계속 requirement를 변경하거나 기획과 개발의 경계가 불명확한 경우의 괴로움을 XP는, 깔끔하게 해결하고 있는 것 같다. Planning Game을 통한 role의 명확한 분리와 Small release로 인한 risk의 감소가 바로 그것이다. Shared code ownership도 매우 좋은 practice이긴 하지만, 실제 우리 팀에서는 중간 정도의 형태를 취하고 있는 것 같다. product의 경우에는 따로 ownership을 가지고 공유하는 라이브러리의 경우에는 shared ownership 정도가 되는 것 같다. 이렇게 되면 갑자기 다른 사람이 고쳐서 동작하지 않는다는 등의 약간의 리스크는 있지만, Testing으로 극복을 할 수 있도, 이 때에 얻는 개발 속도의 장점은 매우 큰 것 같다. 그리고 On-site customer도 회사에서 자주 보는 communication overhead를 상당히 줄여줄 것 같은데, 우리나라에서 자주 보이는, 팀 간의 알력이 강하게 존재하는 조직 구조에서는 실현하기가 상당히 힘들 것 같다. 더구나 manager들이 깨어있고, 같은 이익을 향해 달려간다는 마인드를 가질 수 있으려면 조직의 크기가 클 수록 불리한 반면, 충분한 인력을 확보할 수 없는 작은 조직의 회사라면 다시 불리한 면도 있는 것 같다.

Agile software development methodology가 상당히 유행하고 있는데, XP가 아닌 다른 방법론 – FDD 등의 방법론들도 한번 살펴보고 싶다.

Understanding the Linux Kernel (2nd Edition)

영문판이 아니라 한글판을 읽고 있다. 2.2 버전을 다룬 1판을 사둔 채 버려두고 있다가 2.4 버전을 다룬 2판도 역시 묵혀오고 있다가, 추석 때 집에 내려가서 읽기 시작했다. 내용은 말그대로 리눅스 커널의 구현에 대한 내용으로, 특히 x86 계열에서의 구현에 집중하고 있다. (때문에 x86에 관한 내용도 꽤 나온다.)

현재, 1장의 introduction을 읽은 후, VM 파트를 따라서 2장, 7장을 읽고 8장을 읽고 있는 중이다. 2장 ‘메모리 주소 지정’은 IA-32 매뉴얼에도 나오는 x86 시스템에서의 segmentation, hardware paging, cache, TLB 등을 다루고 있다. 모호하게 이해하고 있던 부분을 (특히 OS 레벨인지 하드웨어 레벨인지의 구분, ‘logical address’와 ‘linear address’의 용어 구분) 말끔하게 해소한 것 같다. 7장은 커널 상의 메모리 관리를 다루고 있다. physical memory와 linear address space의 관리를 다루고 있다. 8장은 커널이 아니라 사용자 프로세스에게 할당되는 메모리를 다루고 있다. 아마도 프로세스에게 할당되는 linear address space의 관리와 page fault handling을 통해 page frame (physical memory)을 할당하는 방법을 다루고 있다. 여기까지 읽은 후에는 3장으로 돌아가서 프로세스에 대한 내용을 읽을 생각이다.

약간의 번역 inconsistency가 눈에 띄지만 (용어의 번역 여부 e.g. TLB/변환참조버퍼) 번역 퀄리티는 만족스러운 편이며, 내용도 어느 정도 OS에 관심을 갖고 있던 사람이라면 그리 어렵지는 않은 정도. 침대 머리 맡에 놓고, 자기 전에 살짝 조금씩 봐주고 있다. 시스템 프로그래머의 길을 간다면 커널의 이해는 거의 필수적이므로 이를 위해 볼만한 책 중의 하나 일 것 같다.

참고를 위해 언급하자면, 물론 다른 고전적으로 유명한 책들도 있다. Bach의 The UNIX Operationg System (너무 오래된 감이 있음)이나 UNIX Internal (괜찮은 듯), The Design and Implementation of the 4.4 BSD Operating System (안봐서 모름), Solaris Internal (안봐서 모름).

Object Thinking

물론 자기네 회사에서 나온 책이니 그렇겠지만, MSDN blog들에서 워낙 칭찬하던 책이라, 이 책을 처음 접하게 되었다. OOT에서 얘기하는 Object design의 기본적인 기법이나 pattern 같은 것들을 어느 정도 알고 있고, 또 사용하고 있지만, 내가 디자인한 OO 코드를 반대하는 사람에게 나의 디자인을 설득할 자신까지는 없었다고 할까. 기껏해야 OO에서 널리 쓰이는 기법이다 정도?의 argument로는 스스로가 납득할 수가 없었다. 따라서, 이 책을 산 목적은 Object-Oriented Technology의 역사/철학적인 백그라운드를 갖기 위해서였다. 실제로 이 책은 OOT의 역사와 철학, 용어들을 설명하는 non-formal한 OOT의 introduction book 정도로 생각하면 될 것 같다.

Preface, Introduction을 막 마친 상태인데, 11월까지는 끝낼 생각이다. 여기서 빠뜨릴 수 없는 얘기가 Preface/Introduction에서 이 사람은 범상치 않은 얘기를 하고 있다는 것이다. Preface에서는 Booch의 말을 언급하면서 OO란 decomposition에 대해 다르게 생각하는 방식/다른 가치/다른 문화라고 얘기한다. 이어서, formalism/Software engineering과 hermeneutics-postmodernism/XP/agile methodologies/behaviroal objects의 철학을 서로 대조하고 있다. Introduction에서는 Software crisis에 대해서 언급하면서 이를 해결하기 위해서 학계가 선택한 현재의 Software engineering은 process와 methodology에 주안점을 두었지만, 이는 현재 실패했다고 한다. 따라서, tool이나 process나 methodology를 만드는 것이 아니라, 원래 ‘Software Crisis’의 해결책으로 제시되었던 ‘Better people’을 만들어내야한다고 주장하고 있으며, 자신의 책이 ‘Better people’을 만드는 데 도움을 주는 책(중의 하나)이라고 주장하고 있다.

참고로, 얼마전에 slashdot에 review가 올라왔던 Organizational Patterns of Agile Software Development에서는 이렇게 얘기하고 있다.

What makes a software development project succeed? It’s not language or tools or process. It’s not a simple as people; even great programmers sometimes find themselves associated with disasters. In some sense, a successful project is the same thing as a successful organization; but what makes those? We need an anti-Dilbert. In Organizational Patterns of Agile Software Development, James O. Coplien and Neil B. Harrison lay out the results of their research on the subject; what they found, helps.

즉, 소프트웨어 개발 프로젝트를 성공하게 하는 건, 툴이나 프로세스도, 사람도 아니라 바로 조직이라고 얘기하고 있다. “Object Thinking”에서 주장하는 “사람”과는 또 다른 주장인 것이다. 누구 말이 맞는 것일까? 서로 다른 철학과 서로 다른 주장이 난무하는 이 분야는 아직 pseudo-engineering의 분야이다.

Extreme Programming Explained, Understanding the Linux Kernel, Object Thinking 더 읽기"

헌재의 신행정수도의 건설을 위한 특별조치법 위헌 결정문

요즘 주위의 논쟁을 들어보니, 논쟁의 핵심인 이 결정문을 실제로 읽어본 사람이 거의 없는 것 같아서 링크합니다. 주변에서 ‘관습 헌법’ 만을 안주로 삼아서 비판하길래 좀 짜증이 나더군요. 이 결정문은, 성문헌법체제에서의 관습헌법의 의의 + (정체성의 의거한) 기본적 헌법사항으로서의 수도문제 라는 두가지 핵심 논지에 의해서 판단을 내리고 있지, 관습헌법만을 근거로 삼지는 않고 있습니다. 농담일 뿐인 얘기에 너무 민감하지 않느냐고 얘기할 수 있겠지만, 사실을 왜곡하는 농담은 비판하고 넘어갈 수 밖에 없습니다. (실제 자리에서 이런 얘기를 하면 무시당하기 일쑤입니다. 조심하시길.. ㅋ)

그리고, 더불어 전효숙 재판관의 반대의견 요지를 한번 읽어보세요. 정말 아이러니컬하게도, ‘재판관 전효숙의 반대의견 요지’가 이 결정문에서 가장 합리적인 논리인 것 같습니다.

http://www.ohmynews.com/articleview/article_view.asp?no=192822&rel_no=1

헌재의 신행정수도의 건설을 위한 특별조치법 위헌 결정문 더 읽기"

sata_sil + Seagate SATA HD problem

꽤 오래 전에 했던 삽질인데, 앞으로의 미디어 정리 프로젝트 진행을 위해, 정리해 둠.

Problem

현재 www.lastmind.net이 동작하고 있는 machine인 athlon64 machine에 SATA HDD를 꽂고, 데이터를 복사하기 시작하니까 kernel이 hang 되기 시작했다.

문제 재발생/확인은 여러가지 loop 테스트 (CPU/memory/disk)로 했고, /var/log/messages에서 disk I/O 오류를 확인하고, linux kernel의 sysrq debugging을 켜서 disk I/O 관련 루틴에서 hang 되는 것을 확인하였다.

더불어 검색을 통해, 다음과 같은 호환성 문제를 확인하였다.

http://www.uwsg.iu.edu/hypermail/linux/kernel/0404.3/1364.html
http://www.ussg.iu.edu/hypermail/linux/kernel/0406.3/0666.html

즉, 내 nForce2 보드에 들어있는 Silicon Image SATA controller와 sata_sil driver, Seagate 160GB SATA Hard Disk 사이의 문제…

Solution?

kernel 버전을 2.6.8-rc1까지 올려보았으나, 해결되지 않았다. 현재는 Hard Disk를 떼서 Windows machine에 물려놓고, samba로 연결해서 사용중이다. 앞으로 athlon64 machine에 Hard Disk를 추가할 때는 Seagate SATA를 선택하지 않는 것이 간단한 해결책이겠지만, 그래도 Seagate가 성능/소음 면에서 가장 만족스럽기 때문에, 가능하다면 Seagate를 고르고 싶다. (현재 stable이 2.6.9이니 테스트해볼까… 하지만, ChangeLog에 sata_sil 관련 fix는 보이지 않는다.)

사실 전에도 linux와 하드웨어 간의 호환성을 고려하지 않고 하드웨어를 선택해서 곤욕을 치른 적이 있었는데, 비슷한 것을 이번에도 또 반복했다. (요즘에 워낙 지원이 잘 되다보니 … 고려하지 않은 면도 있다.) SATA controller들은 비교적 최근에 추가된 하드웨어이다보니 리눅스에서 잘 지원되지 않거나 문제가 발생하는 경우가 많으니, 리눅스 machine을 고려중이라면, SATA 쪽은 재고해보거나, 호환성 문제를 잘 확인하고 선택하는 것이 바람직하리라고 본다.

다음은 문제 해결(?)에 많은 도움이 되었던 tj형과의 대화 발췌.

tj. doom III this summer, prep for upgrades 님의 말:
우선 콘솔 모드로 부팅해보고
tj. doom III this summer, prep for upgrades 님의 말:
커널 뷜드할 때 debug에 가면 sysrq어쩌고 있거든
tj. doom III this summer, prep for upgrades 님의 말:
그거 켜고 멈췄을 때 ctrl-alt-break-? 치면 도움말 나오고 어디서 멈춰있는 지 알 수 있거든
[세라비/회사] WTL on sf.net! 님의 말:

tj. doom III this summer, prep for upgrades 님의 말:
NMI watchdog도 켜고
[세라비/회사] WTL on sf.net! 님의 말:

tj. doom III this summer, prep for upgrades 님의 말:
커널 문제면 보통 그런걸로 찾을 수 있고 아니면 뭔가 하드웨어상의 문제일 듯..
[세라비/회사] WTL on sf.net! 님의 말:
넹 T_T
[세라비/회사] WTL on sf.net! 님의 말:
SATA 달았는데 그것때문인가 ㅎ
tj. doom III this summer, prep for upgrades 님의 말:
우선은 빌드할 때 안 쓰는 옵션은 다 끄고 빌드해
tj. doom III this summer, prep for upgrades 님의 말:
드라이버들
tj. doom III this summer, prep for upgrades 님의 말:
별로 상관은 없겠지만 하여간 커널 버그면 저런걸로 대충 나와
tj. doom III this summer, prep for upgrades 님의 말:
시퓨 온도도 측정해보고 무한 룹 돌리는 거 한참 해보고 그러다보면 알겠지 뭐
[세라비/회사] WTL on sf.net! 님의 말:
아 안그래도 무한룹 해보는 중
[세라비/회사] WTL on sf.net! 님의 말:
음 INT32_MAX에 도달하는데도 꽤 걸리네요 한 1-2초?
tj. doom III this summer, prep for upgrades 님의 말:
아 INT32_MAX면 2G인걸 -_-;
[세라비/회사] WTL on sf.net! 님의 말:
아 10초 정도군
tj. doom III this summer, prep for upgrades 님의 말:
그리고 룹안에 뭔가 좀 길게 넣어놔
tj. doom III this summer, prep for upgrades 님의 말:
그냥 계속 점프만 하는 건
[세라비/회사] WTL on sf.net! 님의 말:

tj. doom III this summer, prep for upgrades 님의 말:
시퓨가 별로 하는 일이 없어서 열이 많이 안날거야
tj. doom III this summer, prep for upgrades 님의 말:
int/float이런거 섞어서 길게.. 서로 디펜던시 없게 가득 차서 돌게

sata_sil + Seagate SATA HD problem 더 읽기"

Indigo: The Five Minute Challenge

Don Box의 Indigo가 무엇인지/왜 Indigo를 만들었는지에 대해 ‘5분 안에 설명하기’. 영문를 읽기 싫어하는 사람들을 위해 대충 번역을 해주겠다.

The Five Minute Challenge

Indigo는 structureal contracts (schemas) 또는 behavioral contracts (message exchange pattern) 를 사용하여 software를 연결한다.

CLR과 COM을 연동하고, local type을 data contracts나 service contracts로 추출해준다. Indigo의 특히 멋진 기능은 sender와 receiver가 같은 CLR type을 공유할 필요가 없다는 것이다. (Indigo와 CLR 혹은 COM 사이에서도..)

Indigo에서 사용하는 message는 SOAP processing/data model이 기반하고 있지만, 필요하지 않다면, angle bracket을 사용하지 않을 수 있다.

여러 message transport를 지원하고 transport-level/SOAP-level 모두에서 보안과 신뢰성(reliability)을 지원한다.

System.Transactions와 queueing system과도 tight하게 연동한다.

Indigo가 local type에 독립적으로 동작한다는 점은 매우 마음에 든다. 왜냐하면, Indigo와 같은 integration solution에서 가장 큰 문제 중 하나가, platform (예를 들면, programming language) 별로 local type을 어떤 common type으로 static하게 binding 해야한다는 점이 solution을 매우 구리게 만드는 점 중의 하나였기 때문이다. php와 C++ 간의 data mapping을 예로 들면, php 상의 array는 (요즘 대부분의 dynamic language에서 그런 것처럼) 실제로 hash이다. 하지만, C++의 array는 hash가 아닐 뿐더러, size 정보조차 없다. 물론 standard library (container)를 사용할 수 있다. 하지만, std::vector를 선택할 것인가? 아니면 hash container를 추가할 것인가? 논의가 이렇게 되면 C++ 개발자는 raw array를 돌려달라고 외친다. Microsoft의 경우 local type의 문제는 CLR에서 어느 정도 해결했겠지만, non-CLR platform에서는 다시 이 문제가 불거지게 마련이므로, Indigo에서 이러한 점을 해결(?)한 것은 매우 훌륭하다고 생각한다. 아마도 구현상으로는 XML messaging이 이러한 점을 해결해주는 것이 아닐까 하는데, contract 상에 정의된 데이터 모델과 local type 사이의 변환이 매우 자유로운 스타일 정도가 아닐까 생각된다. 자세한 것은 좀 더 살펴봐야할 듯 하다.

Message 자체와 Message Transport의 분리, 그리고 거기에 Aspect의 형태로 여러가지 서비스(Transaction, Security, …)를 붙일 수 있는 점은 매우 훌륭한 architecture인 것 같다. 물론 CORBA도 이러한 architecture이고, EIP 같은 책에서도 이러한 architecture를 언급하고 있으므로 절대 처음은 아니다.

SOAP/XML은 Service간의 integration을 위한 Web Services에서는 표준 프로토콜이 되었지만, 하나의 Service 내에서의 component/module 간의 integration에 과연 XML을 사용하는 것이 맞는 solution일까 하는 의문이 든다. 성능 때문에 XMLRPC도 버리는 마당에 말이다. (이것이 미신은 아니라고 생각한다.) angle bracket 없이 SOAP data를 전송한다는 것도 흥미로운 점인데, 일종의 binary protocol인지 아니면 단순히 약간의 성능을 위한 tweak인지가 궁금하다.

Why Indigo? : The Five Minute Challenge

대부분의 소프트웨어 개발은 이미 만들어진 코드와 이미 저장된 정보를 서로 붙이는 (gluing together) 것이다. 순수하게 처음부터 개발을 시작하는 (pure green fields development) 사치를 가진 사람은 거의 없다.

Microsoft나 업계 전체의 현상태는 integration (CORBA, DCOM, EDI)와 access (JNDI, JDBC, JMX)를 위한 여러 solution들을 만들어내고, 개발자들이 알아서 해결하는 것이다. Indigo에서는 XML messaging을 사용하여 interact하는 service에 기반한 새로운 범용 platform을 만들 수 있다.

중심 metaphor로 messaging을 선택한 것은, pipe의 end(역주: messaging을 주고 받는 peer/endpoint)에 사용되는 기술이 아닌, 교환되는 데이터의 통합(integration)에 집중을 하게 해준다. 이것은 great discipline으로 증명되었고, Indigo의 시작으로부터 수백명의 사람을 가진 팀(역주: Indigo 팀)이 집중을 할 수(초점을 가질 수) 있게 해주었다.

XML을 선택한 것은 진입점(bar of entry)을 가능한 한 낮게 해주었다. 돌아보면, XML stack은 상당히 복잡해졌고, (XSD, XML DSIG, XML Encryption, XQuery) 나는 XML 대신 Lisp S-Expressions에 기반한 architecture를 원했었다. 하지만 우리는 XML을 선택했다.

“service”란 용어를 선택한 것은 사실 어느 정도 임의적이다. 업계는 XML message를 사용하는 code에 대해 용어를 필요로 했고, “service”는 그 첫번째 용어였다. “SOA”의 인기(glow)가 사그라들기 시작하면, 우린 다른 이름을 사용하게 되리라고 확신한다. (예를 들면, “business agents”?)

재미있는 의문은 도대체 왜 Microsoft가 이것을 하느냐이다. 그것은 쉽다. 우리는 새로운 platform을 만들기 위한 local execution의 토대를 필요로 했고, CLR을 만들었다. CLR-based platform은 distributed/heterogeneous integration/access를 위한 토대를 필요로 하고 있고, 따라서 Indigo를 만들고 있는 것이다.

“Message”라는 metaphor를 왜 썼느냐보다, ‘metaphor’를 적극적으로 활용하고 있는 것이 인상적이었다. 우리 회사의 경우, 개개의 ‘requirement’가 개발의 주축을 이루기 때문에, 결과물인 product는 공유된 ‘metaphor’를 가지지 못하는 문제가 있는 것 같다. 진짜 문제는 ‘metaphor’가 없는 것이 아니라, 이로 인해, 해당 product의 정체를 아무도 모른다는 것이고, 또한 앞으로 어떤 방향으로 나가야할 지를 모른다는 것이다.

Indigo가 완성되면, CLR과 함께 엄청난 시너지를 발생시킬 것 같다. 어떻게 보면 ‘reinventing wheel’처럼 보이지만, ‘wheel’은 승합 마차에 쓰이느냐, 전차에 쓰이느냐에 따라 새로 발명할 필요도 있는 것이다.

Indigo: The Five Minute Challenge 더 읽기"

Dave's True Story – I'll Never Read Trollope Again

Dave’s True Story는 guitarist이자 songwriter인 Dave Cantor가 waitress이자 singer인 Kelly Flint를 만나서 자신의 노래를 가르쳐주면서 만들어진 밴드라고 합니다. Davit Cantor의 곡과 가사도 좋지만, 무엇보다 매력적인 것은 Kelly Flint의 목소리 같습니다.

약간 우울하군요. 저녁을 안먹어서 그런지, Kelly Flint의 목소리 때문인지… 그나마 약간은 즐거운 곡을 선곡합니다.

일찍 퇴근해서 저녁 내내 음악만 들어버렸습니다. 그러고보니 생각이 났는데, 여러분들은 저에게 제가 시간을 사용하는 방법에 대해서 이러쿵 저러쿵 가치판단을 강요할 권리가 전혀 없습니다. 기껏해야 충고 정도지요. 충고라고 하더라도 그 선의는 고맙게 받겠지만, 충고는 마음속으로만 하시기를 바랍니다. 제가 항상 말하듯이, “제 인생에 너무 많은 간섭은 말아줘요”.

http://www.davestruestory.com/

Dave's True Story – I'll Never Read Trollope Again 더 읽기"

한국 문화의 집

점심식사를 하고 날씨가 좋아서, 자판기 커피 놀이를 하러 회사 건물(COEX 아셈타워) 밖으로 나갔다가, 국악 공연을 하는 것을 발견하고 구경하게 되었다. 해금, 대금/소금, 태평소/피리(아마도?)와 키보드의 연주였다. 가을 날씨에 야외 공연만한 즐거움은 흔치 않을 것 같다. 귀에 익숙한 곡들을 적당히 양악과 조합한 연주를 들으면서, 곡이 끝날 때마다 인사에 박수로 다함께 화답하며 즐길 수 있었다.

끝날 때 즈음, 안내지를 나누어주었는데, 삼성역 근처에 있는 ‘한국 문화의 집’이란 곳이었다. 무료 공연도 많이 하고 있는 것 같으니, 언제 짬을 내어 부담없이 방문해봐도 괜찮을 것 같다.

‘한국 문화의 집’ 홈페이지: http://www.kous.or.kr/

한국 문화의 집 더 읽기"

OOPSLA '2004

OOPSLA는 10월 24일부터 시작하는 Object technology에 관한 ACM conference이다. 본인도 참석하려 하였으나, 제출한 paper가 accept되지 않는 바람에, 기분이 나빠서 안가기로 했다..는 것은 농담. 아직도 병역의 의무를 다하지 못한 본인은, keyword라도 살펴볼 생각에, 프로그램이나 살펴보기로 하였다.

개인적으로 눈에 띄는 topic을 다룬 것들을 몇몇 뽑아보았다. Google에서 찾을 수 있는 것들은 link도 걸어놓았으니, 참고.

Tutorials

  • Model-Driven Software Development: Introduction & Best Practices
    Markus Voelter, Indepdendent Consultant
    Jorn Bettin, SoftMetaWare
  • Scrum and Agile Project Management
    Angelika Langer, Independant Trainer/Mentor/Consultant
  • Generative Software Development http://www.swen.uwaterloo.ca/~kczarnec/gsdoverview.pdf
    Krzysztof Czarnecki, University of Waterloo
    Jack Greenfield, Microsoft Corporation
  • Feature Oriented Programming and Product-Lines http://portal.acm.org/citation.cfm?id=776935 (ACM Portal로의 link이니 필요한 사람은 개인적으로 contact 바람.)
    Don Batory, University of Texas at Austin
  • Testing Component-Based Software
    John McGregor, Clemson University

Practitioner Reports

  • Synchronization-Free Concurrency: Comparing the RTSJ to C++
    Daniel Dvorak & William Reinholtz, Jet Propulsion Laboratory, California Institute of Technology

Technical Papers

Workshops

  • Patterns for Retrospectives http://www.cs.unca.edu/~manns/retropatterns.html
    Linda Rising, Independent Consultant
    Mary Lynn Manns, University of North Carolina at Asheville
  • Early Aspects 2004: Aspect-Oriented Requirements Engineering and Architecture Design http://www.early-aspects.net/events/oopsla04ws
    Ana Moreira, Universidade Nova de Lisboa
    Awais Rashid, University of Lancaster
    Elisa Baniassad, Trinity College
    Bedir Tekinerdogan, University of Twente
    Paul Clements, Carnegie Mellon University
    Joao Araujo, Universidade Nova de Lisboa
  • Component And Middleware Performance http://nenya.ms.mff.cuni.cz/projects/corba/oopsla-workshop
    Petr Tuma, Charles University, Czech Republic
    Paul Brebner, University College London, United Kingdom
    Emmanuel Cecchet, INRIA Rhone-Alpes, France
  • Objects in Large Distributed Applications III (OLDA-III) http://www.dcs.gla.ac.uk/~pd/OLDA3/
    Peter Dickman, University of Glasgow
    Karen Renaud, University of Glasgow
    Huw Evans, Kelvin Institute

OOPSLA '2004 더 읽기"

Double-Checked Locking

Double-Checked Locking은 C++/Java 세계에서는 Singleton 또는 Lazy Initialization을 구현하는데에 잘 알려진 idiom이다. DCL은 Singleton object를 생성하는 부분에 필요한 synchronization cost를 절약하기 위한 방법이다. (자세한 내용은 다음 paper를 참고. “Double-Checked Locking” http://www.cs.wustl.edu/~schmidt/PDF/DC-Locking.pdf)

하지만, DCL은 compiler optimization 문제와 Multiprocessor에서의 cache coherence 문제 때문에 portable하게(Memory barrier를 사용하지 않고) 동작하는 것이 불가능한 것이라고 한다. (자세한 내용은 Scott Meyer가 정리한 다음 note를 참고. “Double-Checked Locking, Threads, Compiler Optimizations, and More” http://www.nwcpp.org/Downloads/2004/DCLP_notes.pdf)

이러한 문제는 C++이 memory model(e.g. memory read/write ordering)을 명시하기 않기 때문이라고 볼 수도 있고, Java에서는 Memory Model의 개선을 통해 이 문제를 해결하려는 것 같다. (http://www.cs.umd.edu/~pugh/java/memoryModel/)

관련 링크들

Double-Checked Locking 더 읽기"

rpm vs dpkg

흔히 rpm이 dpkg에 비해 나쁘다는 얘기가 있다. 자주 들리는 얘기임에도 불구하고, 확실한 근거가 따라다니지 않으며, rpm과 dpkg를 동시에 ‘잘’ 써본 사람이 드물다는 점 때문에, ‘미신’이 아닌가하는 의심이 크게 들었다.

일단 나의 경험을 얘기해보자면, 학교 다니던 시절에만 redhat을 쓰고 이후에는 FreeBSD, 지금 회사에선 debian을 쓰고 있기 때문에, 동시에 사용하면서 비교해본 적은 없다고 할 수 있을 것 같다. 개인적으로 rpm을 사용할 때 가장 불편했던 점은 dependency에 해당하는 package들을 모두 따로 www.redhat.com이나 www.rpmfind.net에서 받아서 써야한다는 것, 그리고 cyclic dependency가 있으면 update하기가 불편해지는 점 (내가 기억하고 쓰는 rpm command line option은 ‘rpm -qa’와 ‘rpm -Uvh’ 밖에 없기 때문일지도) 이었다. 하지만, 데비안에서도 이러한 문제를 pakaging system인 dpkg가 해결하는 것이 아니라, apt가 해결하는 것이란 것은 rpm와 dpkg의 비교에서 항상 사람들이 혼동하는 사실중의 하나다. redhat에서 제공하는 상용 패키지 관리툴인 up2date가 apt에 equivalent한 product라고 볼 수 있는데, RHN에 등록해야하고 또 무료로는 불편한 점(업데이트 주기에 제한)이 있어서 사용을 그만두었었다. 하지만, 현재는 “ Yes, but it no longer uses the Red Hat Network (RHN). (It still downloads from the Red Hat servers, you just can’t use the features of the Red Hat Network.”라고 한다. (from http://www.fedorafaq.org/#up2date)

이러한 package management tool에는 up2date, yum, apt가 있다. apt야 debian에서는 검증된 시스템이지만 rpm 쪽에서는 porting 중이고 아직 신뢰할 만한 수준은 아닌 것 같다. (?) up2date는 위에서 말한대로 RHN에 관련된 문제없이 사용가능하다. 결국, rpm에서도 package management tool로서 3가지의 option이 존재한다는 것인데, 한번 써봐야할 것 같다.

결국, 내가 직접 경험한 차이도 rpm과 dpkg 자체와는 관련없는 외적인(package management) 문제라는 것인데, 주변 사람의 얘기를 들어보아도 거의 비슷한 의견을 들려주었다.

다음은 googling을 통해 얻은 rpm과 dpkg의 비교에 관한 page들인데,

사실, 단순한 package의 사용자 측면에서는 느끼기 힘든 차이들(pros and cons)인 것 같다.

다음은 RPM의 문제를 지적하고 해결책을 제시하는 article인데, 역시 마찬가지.

결론은 사용자 (특히, 나)의 입장에서 rpm과 dpkg는 별로 차이가 없으며, rpm과 함께 사용할 수 있는 package management tool(up2date w/o RHN, yum, apt)을 한번 사용해보자는 것.

rpm vs dpkg 더 읽기"