A Note on Distributed Computing

We argue that objects that interact in a distributed system need to be dealt with in ways that are intrinsically different from objects that interact in a single address space. These differences are required because distributed systems require that the programmer be aware of latency, have a different model of memory access, and take into account issues of concurrency and partial failure.

A Note on Distributed Computing

많은 사람들이 network transparency 또는 distributed object 기술에 관해서 부정적인 견해를 보이고 있지만 이 문제에 관해 잘 정리된 문서를 보기는 힘들었다. 이 paper에서는 latency, memory access model, concurrency와 partial failure의 문제를 들어 local object와 distributed object 사이의 차이를 보이고 있다. 그러한 차이 때문에 local object와 distributed object 사이에는 implementation의 차이뿐만 아니라 interface 수준 (즉 설계 수준)에서 차이가 발생할 수 밖에 없다고 얘기하며, 이를 무시할 경우에 어떤 문제가 발생하는 지를 설명하고 있다. NFS를 예로 들어 설명하고 있으며, 마지막에서는 같은 machine boundary지만 memory는 공유하지 않는 세번째 모델에 대해서 언급하고 있다.

실제로 distributed object 기술 개발을 경험해봤던 사람으로써, 이 paper가 언급하고 있는 문제를 대부분 경험해보았다고 얘기할 수 있을 것 같다. 이 paper가 언급하고 있는 NFS와 같이 오래된 예보다는 RPC나 CORBA 계열의 기술들을 직접 예로 들어서 이 paper의 논리를 보충하면 좋을 것 같다는 생각이 든다. 나중에 시간이 생기면 실제 경험을 바탕으로 얘기해보도록 하겠다.

A Note on Distributed Computing 더 읽기"

Arithmetic & Logic in Lambda Calculus

Tutorial Introduction to Lambda Calculus을 읽으면서 재미있었던 것은 Church integer/boolean들과 그에 상응하는 arithmetic/logic operator가 λ calculus만으로도 잘 정의될 수 있다는 점이었다. 예를 들어보자.

Church integer

λ calculus를 사용하여 자연수를 표현하는 방법 중에는 Church integer라는 방법이 있다.

  • 0 := λsz.z
  • 1 := λsz.s(z)
  • 2 := λsz.s(s(z))
  • 3 := λsz.s(s(s(z)))z

간단히 설명하면 자연수 n은 s를 n번 z argument에 적용한 함수인 것이다.

Addition

successor function을 사용하여 Addition을 구현할 수 있다. successor function은 다음과 같다.

  • S := λwyx.y(wyx)

successor function에 argument를 적용하면,

S0 := λwyx.y(wyx) λsz.z := λyx.y(λsz.z yx) := λyx.yx := 1

0S := λsz.z λwyx.y(wyx) := λz.z := I (identity function)

S1 := λwyx.y(wyx) λsz.sz := λyx.y(λsz.sz yx) := λyx.yyx := 2

1S := λsz.sz λwyx.y(wyx) := λz.λwyx.y(wyx) z := λz.λyx.y(zyx) = λzyx.y(zyx) = S

S2 := λwyx.y(wyx) λsz.s(s(z)) := λyx.y(λsz.s(s(z)) yx) := λyx.y(y(y(x))) := 3

2S := λsz.s(s(z)) S := λz.S(S(z))

결국, Sn의 형태는 s를 치환하는 y를 하나 더 추가하게 되어 n+1의 결과를 낳게되고, nS의 형태는 Church integer의 특성상 S를 n번 수행하는 함수를 결과로 넘겨주게 된다. 따라서, 다음과 같은 형태도 가능함을 알 수 있다.

2S3 := λz.S(S(z)) 3 := S(S(3)) = S(4) = 5

증명해보지는 않았지만, 아마도 S는 commutative하고 transitive할 것 같다.

그럼 이런 건 어떻게 될까?

12 := λz.2(z) := λz.(λst.s(s(t)))z := λz.(λt.z(z(t))) := λzt.z(z(t)) := 2

22 := λz.2(2(z)) := λz.2(λt.z(z(t))) := λz.(λsu.s(s(u)) (λt.z(z(t))) ) := λz.(λu.(λt.z(z(t))) ((λt.z(z(t))) u) ) := λz.(λu.(λt.z(z(t))) z(z(u)) ) := λzu.z(z(z(z(u)))) = 4

결과는 곱셈 같지만, 다른 것들도 계산해보면, 일관성있는 결과는 나오지 않는 것 같다. 물론, Church integer에 대한 곱셈 연산도 따로 있다.

Churge Booleans

  • T := λxy.x
  • F := λxy.y

F는 0과 동일함을 눈여겨볼 수 있다.

Logic

기본적인 논리 연산들은 다음과 같이 정의된다.

  • ∧ := λxy.xy(λuv.v) := λxy.xyF
  • ∨ := λxy.x(λuv.u)y := λxy.xTy
  • ¬ := λx.x(λuv.v)(λab.a) := λx.xFT

T는 두 argument 중 첫번째를 선택하고, F는 두번째를 선택하므로, 쉽게 다음을 계산할 수 있다.

∧TT := TTF := T

∧TF := TFF := F

∧FT := FTF := F

∧FF := FFF := F

∨TT := TTT := T

∨TF := TTF := T

∨FT := FTT := T

∨FF := FTF := F

¬T := TFT := F

¬F := FFT := T

Tutorial에서는 multiplication, conditional test, predecessor, equiality, recursion 등도 소개하고 있는데, λ calculus의 substitution과 기본적인 함수들(church integers/booleans, arithmetic/logic operator)의 특성만 잘 이해하면 이해하기는 쉬운 편이다.

Arithmetic & Logic in Lambda Calculus 더 읽기"

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 더 읽기"