josephjang

Tutorial Introduction to Lambda Calculus

The λ calculus can be called the smallest universal programming language of the world. The λ calculus consists of a single transformation rule (variable substitution) and a single function definition scheme. It ws introduced in the 1930s by Alonzo Church as a way of formalizing the concept of effective computability. The λ calculus is universal in the sense that any computable function can be expressed and evaluated using this formalism. It is thus equivalent to Turing machines.

Tutorial Introduction to Lambda Calculus

Tutorial Introduction to Lambda Calculus 더 읽기"

Tom Curley's Opening Keynote at ONA Conference

We are shifting from an old “telegraph” model of pushing news to our subscribers through proprietary pipelines to a database model, where our customers can retrieve what they want, when they want it, over the network.

Our content is being formatted and databased to facilitate this new on-demand access, and, most important, we’re realigning our human resources to cover the kinds of stories people want to read and watch. We’re equipping our bureaus worldwide with flashcams. We’re adding domestic video to our content portfolio. We’ve established regional editing desks around the world to drive content from conceptualization to consumption.

Politics and breaking news remain a core strength — as we have demonstrated once again in the election, as well as in Iraq where we spend millions to cover the war and keep our journalists at the front safe. And we also have increased our coverage of financial news, entertainment and news for young audiences.

And we’re trying to harness the right technologies — search and RSS in particular — to plot a strategy for moving AP content where it needs to go in the new, free-flowing world of Web 2.0.

Tom Curley’s Opening Keynote at the ONA Conference (via 태우’s log)

Tom Curley's Opening Keynote at ONA Conference 더 읽기"

조엘 온 소프트웨어

조엘 온 소프트웨어조엘 온 소프트웨어 by Joel Spolsky

지인에게 생일 선물을 주느라 ‘조엘 온 소프트웨어’를 사면서 내 것도 함께 두권을 샀다. 원래 생일 선물 같은 걸 챙기는 타입은 아니지만, 내 생일 때 받아먹은 터라.

‘조엘 온 소프트웨어’는 이미 구독하고 있었을 뿐만 아니라, 몇몇 글들은 이미 읽어본 터여서 대충 넘어가면서 토요일 하루만에 읽을 수 있었다. 전체적인 내용은 기본적인 소프트웨어 엔지니어링의 주장에 충실하면서 Mythical Man-MonthPeopleware에 준하는 내용이었다. 물론, 그런 것과는 별로 관련없는 업계의 동향에 관한 내용과 전략에 관한 내용도 있긴 했다. 다른 점이라면 좀 더 재미있고 친근하게 설명한달까. 마치 누군가의 블로그를 보는 것처럼. (당연하다!) 칭찬할만 점은 어느 하나의 기술이나 의견에 치우치지 않고 균형잡힌 시각을 보여준다는 것이다. 어느 정도 권위가 있는 엔지니어들의 글을 보면 항상 느낄 수 있는 것이기도 하다.

번역은 – 그동안의 IT 관련 서적들의 번역 품질에 비해 – 매우 훌륭했다. 하지만, 역시 조엘의 유머를 우리말로 옮겨놓으니 재미가 떨어지는 것이 사실이었다. 역자주에서도 꼼꼼히 원작의 오류를 정정하거나 독자들이 모를만한 사실들을 언급해두고 있었던 점은 칭찬하고 싶다.

좀 마음에 안드는 점은 역자의 블로그 내용이나 번역 경험담을 중간중간에 넣어놓은 것이었다. 블로그 내용 같은 경우에는 원작의 내용과 관련된 내용이었는데, 조엘이 기술한 것 이상의 내용은 없었기 때문에 무의미한 것이었고, 번역 경험담은 역자 후기 정도에나 들어갈 내용이지, 중간중간에 들어가서 주의를 산만하게 만들만한 가치를 가진 것은 아니라고 생각한다. 분명히, 훌륭한 역자는 원작의 난해한 부분을 설명해주거나 새로운 방식으로 해석해줌으로써 원작과 다른 새로운 가치를 만들어낸다. 하지만, 조엘온소프트웨어 번역판에 삽입된 역자의 글들은 그럴만한 가치는 없었다고 생각한다.

Update 2005/09/09: 역자의 블로그 내용과 번역 경험담에 대한 의견 추가.

조엘 온 소프트웨어 더 읽기"

친절한 금자씨 OST

dcf 파일을 던져주는 친구 녀석 때문에 우연히 멜론에 들어갔다가, 친절한 금자씨 OST를 발견하고는 바로 멜론 서비스를 결제해버렸다. 이로써 렛츠뮤직 (한동안 안들어갔더니 서비스가 제대로 안되고 있는 것 같다), 쥬크온, 멜론 세가지 서비스의 사용자가 되어버렸다.

친절한 금자씨 OST CD로도 사줄 예정.

친절한 금자씨 OST 더 읽기"

친절한 금자씨

복수 삼부작의 완결편

박찬욱 감독의 "복수는 나의 것", "올드 보이"를 본 사람이라면 복수 삼부작이 나오지 않을까 예측해보는 건 당연하다. 알다시피 친절한 금자씨는 그 삼부작의 완결에 해당하는 작품이다.

세개의 작품을 늘어놓고 보면, 얘기하는 방식에 있어서 어떤 스펙트럼이 보인다. "복수는 나의 것"이 일어난 사건을 그대로 보여주는 사실적인 이야기 방식이었다면, "올드 보이"로 오면 이미지와 상징을 통한 이야기를 한다. "친절한 금자씨"는 한층 더 강렬한 이미지를 사용하여 상징을 표현하려 하는 것 같다. 그러한 이미지들이 많이 등장하다보니 전작들보다 좀 더 화려하고 즐거운 분위기.

전작들을 본 사람들이라면, 전작들에 출연한 배우와 대사를 알아보는 것도 작은 재미.

박찬욱은 최고의 감독?

대사, 의상, 화면 구성, 음악 어느 하나 할 것 없이 최고였다. 한국에 이만한 감각을 가진 감독이 몇이나 있을까.

심각한 분위기에서 관객들의 웃음을 유도하는 박찬욱 감독의 단골 기법은 너무 능수능란해서 식상할 정도였다.

완벽한 복수자 캐릭터 금자씨

13년 동안의 복수 계획은 그야말로 완벽 그 자체다. 이러한 과정 자체를 보는 것도 하나의 즐거움이겠지만, 아무래도 복수의 절정은 그야말로 복수의 대상을 극한의 고통에 빠뜨리는 그 순간이다. 금자씨의 복수는? 역시 완벽하다. 금자씨가 직접 백 선생에게 주는 물리적인 고통은 극히 일부에 불과함에도 불구하고, 아마도 백 선생은 극한의 고통을 겪었을 것이다. 그야말로 완벽한 복수자 아닌가.

하지만, 플롯상에서 금자씨의 복수 계획은 너무 일찍 노출되고, 복수의 형태 자체가 그렇게 참신한 것도 아니고, 그렇다고 복수의 세세한 표현이 크게 충격적이지도 않음에도 불구하고 너무나 긴 시간을 할당한 것은 상당히 불만스러웠다. 전작들에서의 고어한 표현들에 대한 관객들의 비판들이 박찬욱 감독에게도 영향을 미친걸까 하고 생각할 정도였으니.

이영애

영화가 시작했을 때만해도 과연 이영애가 복수자의 캐릭터로 어울릴까 약간 의심하고 있었는데. 영화를 볼 수록 나긋나긋하고 조근조근한 목소리에 누구나 호감을 가질 수 있는 얼굴을 가진 이영애가 아니었다면 과연 누가 저 역을 소화할 수 있었을까 싶은 생각이 들었다.

노란색 죄수복의 이영애, 물방울 무늬의 원피스와 썬글래스 차림의 이영애, 잠옷 차림의 이영애, 가죽 코트 차림과 붉은색 아이섀도우의 이영애 모두 예뻤다. 그녀는 너무 예뻐서, 화면 한 구석에 이영애가 서 있기만 해도 화면 전체가 예뻐 보일 지경이었다.

복수에 관하여? 인간 군상에 관하여

스토리가 진행되면서 영화는 백 선생(최민식 분)은 어느 누구도 감히 용서할 수 없는 죄를 지은 사람이란 것을 보여준다. (식탁에서의 섹스 장면은 억지스러울 정도?) 이것은 금자씨가 무슨 형태로 복수를 하든 죄책감을 느끼지 않아도 되는 자유를 보장해준다. 물론, 죄책감의 주체는 관객이다. 박찬욱 감독은 우리들을 양심의 우리에서 풀어준 후에, 자 어떻게 할꺼냐 하고 물어본달까. 금자씨로부터 복수를 의뢰받은(?) 평범한 모습의 부모들은 어쩌면 관객들 자신을 대입시키기 좋으라고 등장시킨 분들 일지도 모른다.

영화가 막을 내릴 즈음 눈이 오는 장면에서, 제니는 입을 벌리면서 하얀색 (두부 모양의) 케익을 먹고 하얗게 된 혀를 보여준다. 아무것도 먹지 않은 근식이 보통의 혀를 보여준다. 피로 만든(?) 케익을 먹은 금자씨는 당연히 붉게 물든 혀를 보여주어야 하지 않은가 싶더니, 그녀는 입을 꼭 다물고 그녀의 혀를 보여주지 않는다. 모든 사람들은 태어날 때 같은 색깔의 혀를 가지고 태어난다. 하지만, 세상을 살아가다보면 그렇게 여러가지 색깔의 혀를 가진 사람들이 생기게 되고 때로 그 중에는 자신의 혀를 내보이고 싶지 않은 사람도 있는 것이다.

친절한 금자씨 더 읽기"

fread/ifstream::read/mmap performance comparison

예전에 comp.lang.c++.moderated에서 iostream performance가 fread를 사용하는 것에 비해서 나쁘다라는 글을 읽고 해당 테스트 케이스를 사용하여 실제로 테스트해 보았다. 테스트 케이스는 일정 크기의 파일 내에서 특정 레코드를 찾아내는 코드로, 읽기 오퍼레이션에 대한 성능 테스트에 가깝다.

결론은 fread와 ifstream::read는 별 차이가 없고, mmap은 엄청나게 빠르다는 것이다. gcc 버전에 따라 약간의 우위를 보이는 것이 흥미롭다.

fread/ifstream::read/mmap performance comparison 더 읽기"

Language Oriented Programming

Language Oriented Programming: The Next Programming Paradigm by Sergey Dmitriev

Part 1에서는 Language Oriented Programming (이하 LOP)이란 paradigm이 어떻게 나오게 되었는가를 설명하고 있다. 지난 번에 소개했던 Martin Fowler의 글과 내용은 거의 중복된다.

To achieve this independence, I need the freedom to create, reuse, and modify languages and environments. For this freedom to be practical, it needs to be easy to archive.

OOP나 DSL과 같은 높은 레벨의 abstraction을 제공하는 것은 생산성 향상에 있어서 중요한 의미를 가질 것이라는 것까지는 누구나 공감할 수 있는 내용일 것이지만, 그냥 지나치기 어려운 대목은 아무래도 DSL을 쉽게 만들 수 있도록 함으로써 그러한 이익을 극대화할 수 있다는 논리일 것이다. 물론, LOP의 성공 여부는 그것이 얼마나 쉬워질 수 있느냐하는 문제일 것이다. 얼마나 쉬워질 수 있는가에 대한 설득력 있는 논리가 부족한 것이 약간 아쉽다.

Part 2에서는 JetBrains의 Meta Programming System (이하, MPS)에서 어떻게 Language Oriented Programming을 구현했는가에 대해서 설명하고 있다. 즉, DSL을 쉽게 만드는 것이 중요하다는 것을 강조하는 것이 Part 1이라면 어떻게 쉽게 만들 수 있도록 할 것인가를 보여주는 것이 Part 2의 내용이다. MPS는 현재 JetBrains가 개발한 상용 Java IDE인 IntelliJ IDEA의 플러그인으로 구현되어있다. MPS는 Early Access Program을 통해서 개발중인 제품이 공개되고 있기 때문에 튜터리얼 (스크린샷 포함)을 약간 따라가보았다. DSL을 설계하기 위해서는 기본적으로 Structure Language, Editor Language, Transformation Language/Template을 사용하여 DSL을 표현해야하는데, 이러한 과정이 GUI를 통해서 이루어지는 것이 상당히 흥미로웠다.

The ideas underlying LOP and MPS are not new, and have actually been around for more than 20 years. The term Language Oriented Programming itself has been around for at least 10 years. What is new is that these ideas have silently saturated the software development community, and their time has finally come.

결론 부분에서 얘기하는 것과 같이 현재에 주목을 받고 있는 여러가지 기술들은 대부분 옛날에 만들어진 개념으로부터 출발하고 있다. 하지만, 그것이 주목을 받는데에는 거기에 근접한 기술들이 충분히 성숙해야할 뿐만 아니라 그 기술을 사용하는 사람들로부터 유효한 기술이라는 공감대를 형성하는 것이 필요하다. LOP가 과연 그들이 얘기하는 것처럼 OOP를 대체하는 시대를 뛰어넘는 기술일까? 지켜볼만한 가치는 있는 것 같다.

Language Oriented Programming 더 읽기"

The Design of C++0x

The Design of C++0x는 Bjarne Stroustrup이 CUJ 2005년 5월호에 기고한 글이다. C++0x 디자인의 기본적인 정책에 대해 설명하고 있다.

먼저 C++0x에서의 언어 디자인에 관해서는 최대한 호환성을 고려할 것이지만, 충분한 이익을 얻을 수 있는 부문이라면 호환성에 있어서의 작은 희생도 감수하겠다고 얘기하고 있다.

C++0x will be almost 100-percent compatible with the existing Standard C++. … We aim for compatibility but realize that there may be cases where a large advantage is worth paying for by small incompatibilities.

그리고, C++의 강점은 일반성(generality)라고 얘기하고 있고, 이러한 장점을 강화하는 방향으로 갈 것이라고 얘기하고 있다.

C++’s emphasis on general features (notably classes) has been its main strength, and often its lack of specialized features (such as “properties” and threads0 has been seen as its main weakness. … Nevertheless, we must keep the focus on general features aimed at efficient abstraction; the huge diversity of the C++ community requires that. … The obvious areas where C++ could be improved for greater generality is through better support for generic programming and more flexible initialization/construction mechanisms. Is is also obvious that some support for concurrency is needed as many forms of concurrent, parallel, and distributed programming are becoming common.

프로그래머가 프로그래밍 언어를 대하는 태도에 관한 짤막한 의견.

You don’t want to become a language expert-you want to be (or become) an expert in your own field and know just enough of some programming language to get your work done.

type safety는 compiler optimization 등의 이점을 얻기 위한 중요한 C++의 특성임을 강조하고 있다. 언어의 변경을 위해서 완벽한 type safety를 얻기는 힘들지만, 표준 라이브러리를 통해서 이를 강화하겠다고 얘기하고 있다.

C++0x will not be able to close all the loopholes in the C++ type system, but it will not introduce new holes and it will provide ways of avoiding inherently unsafe facilities-primarily through the Standard Library providing (compile-time or run-time) type-safe alternatives.

C++의 중요한 원칙 중의 하나인 zero-overhead principle을 재확인하고 있다.

That is, the zero-overhead principle: “what you don’t use, you don’t pay for” and “what you use can be implemented without overhead compared with hand coding” is still the bedrock of C++.

라이브러리의 중요성.

A language cannot support everything, but conceivably, a large set of libraries could. … Library extensions will be preferred to language extensions.

표준 결정 과정에서 벤더들에 대한 고려(예를 들어 구현의 용이성)도 중요한 요소임을 강조하고 있다.

The development of C++0x must be timely and to gain acceptance from vendors, new language features must be easier to implement that the most difficult C++98 features. … we dislike dialects. … My suggestion is for programmers to avoid nonstandard features whenever possible.

C++ Programming Language를 읽어보신 분이라면, C++0x 또한 C++의 기본 철학에서 크게 벗어나지는 않는다는 것을 알 수 있을 것이다. 특히 눈에 띄는 점은 라이브러리에 대한 강조.

Whereas we’ll be cautious and skeptical about language extensions, we’ll be aggressive and opportunistic when in comes to new library-especially for libraries that extend the range of portable support for systems programming.

The Design of C++0x 더 읽기"