Software Development

FTTH

하나로텔레콤의 인터넷 서비스를 사용하고 있습니다. 3년 이상 장기가입자여서 최근까지 라이트 요금으로 프로 서비스를 받고 있었는데요. 현재 살고 있는 곳에서는 최대대역폭이 6Mbps 정도가 나오더군요. 그런데, 최근에 최대대역폭이 갑자기 10Mbps로 늘어났습니다. 이 사람들이 아무 이유도 없이 늘려줬을 리는 없을테고, 최근 파워콤이 광케이블 인터넷 서비스를 시작하면서 타 인터넷 서비스 업체에 비해 저렴한 사용료로 10Mbps 서비스도 제공해주기 시작하면서 하나로도 경쟁을 위해 이런 선택을 하게 된 게 아닌가 싶습니다.

파워콤은 DSL 서비스를 완전히 배제하고 광케이블을 직접 연결하는 방식과 그것이 불가능한 지역 또는 가정에는 케이블을 사용하는 방식을 혼합해서 서비스하고 있습니다. 기존의 DSL 서비스를 떠안고 가야하는 다른 서비스 업체에 비해서는 앞으로의 전망은 밝다고도 볼 수 있을 것 같군요.

이유는 FTTH(Fiber to the Home)때문이죠. 모든 가정에 광케이블을 보급하는 것이 인터넷 서비스에 관심있는 정부들의 최근 화두죠. 우리나라에는 BcN(Broadband convergence Network)이라는 다소 모호한 이름의 정책이 FTTH를 포함하고 있는 듯 합니다. 정부에 따르면, 2010년까지 각 가정에 100Mbps 대역폭의 인터넷 서비스를 보급하는 것이 목표라고 하죠.

2010년은 좀 늦은 감이 없지 않아 있습니다만, 이미 FTTH 서비스는 아파트 단위에서 제공되고 있어서 3-40Mbps 정도의 대역폭은 흔한 편이고, 파워콤 서비스도 시작했으니, 좀 더 많은 사람들이 높은 대역폭의 인터넷 서비스를 경험할 수 있는 날은 멀지 않은 것 같아서 기분이 좋습니다.

FTTH 더 읽기"

Google, Sun partnership

Google, Sun plan partnership (CNET News.com)

Google과 Sun의 partnership에 대한 관측은 여러가지로 많이 있고, 이 기사는 partnership을 발표하기 이전에 나온 것이지만, partnership에 대한 흥미로운 몇가지 관점을 제시하고 있다.

  • Microsoft의 Windows를 통한 software distribution power가 이미 강력한 distribution power를 보유한 Google과 소프트웨어의 name value를 가진 Sun의 제휴로 인해 무너지게 생겼다는 것.
  • 데스크탑 어플리케이션의 가치가 다시 중요해질 것이라는 것.
  • 데스크탑 어플리케이션은 thin-client/network-based/server-centric해질 것이라는 것.

인터넷을 통해서 distribution power의 독점이 힘들어졌으며, 동시에 소비자에 직접 다가감으로써 오히려 distribution power가 강력해진다는 사실은 상당히 중요한 경향이라고 생각한다. 그러한 경향은 비단 Microsoft, IBM/Google, Sun의 구도에서만 나타나는 것이 아닌 것 같다. 충분히 소비자들에게 인정받은 소프트웨어는 굳이 독점적인 배급사의 손을 거치지 않더라도, 제작사가 직접 인터넷을 통해서 배포할 수 있다. Half-Life 2의 배급권을 둘러싼 Valve와 Vivendi의 소송 사건을 보면 알 수 있다. 비슷하게, 국내 게임 시장에서 패키지 게임이 온라인 게임에 구축되어버린 현상의 가장 중요한 원인도 distribution power로 볼 수 있을 것이다.

데스크탑 어플리케이션이 network-based/server-centric해질 것이라는 주장에는 공감하지만, thin-client화될 것이라는 점은 의문의 여지가 있다. 장기적으로는 (5년 이상) 그것이 사실일 지 몰라도, 당장은, thin-client로 시작한 웹 어플리케이션에게 요구되는 기능이 많아지면서 점점 richer해질 것이라고 생각하고 있다. 또 한가지, 이러한 경향에 대한 용어들이 상당히 두리뭉실해서, 무엇이 thin하고 무엇이 centric한 지 제대로 정의내리지 않는 한, 이런 논의가 별 가치가 없게 되기 쉬운 문제도 있다.

Google, Sun partnership 더 읽기"

Galaxy: Iteration 4 Plan

Introduction

Galaxy는 제가 개발 중인 웹기반의 RSS Feed Aggregator입니다. 다음은 Iteration 4의 개발 계획입니다.

Feature List

  • Refactoring
    • Improve Controller-View plumbing
    • Use ActiveRecord pattern
  • User Interface
    • "Mark Read" with AJAX (Say, AJAX view)
    • Item/Subscription Folding with javascript
    • Specify subscription category when adding subscription
  • Feature
    • Authentication (instead of HTTP Authentication)
    • DB Abstraction Layer (instead of Ruby/Mysql)
    • Minimize Apache Web Server dependency (how?)

Schedule

일단은 7월말까지 Iteration 4를 종료하고 0.2.0를 릴리즈하는 것을 목표로 하고 있습니다.

Update: 10월말로 수정합니다.

Galaxy: Iteration 4 Plan 더 읽기"

MySQL Optimization for Galaxy

Galaxy 자체의 optimization을 한 후에 데이터베이스가 병목이라는 것은 알고 있었지만, 손을 놓고 있다가, 살짝 건드려주었습니다. 기본적인 두가지 optimization을 해주었는데, 상당히 성능이 좋아졌군요.

Indexing

모든 optimization은 measurement가 우선해야겠지만, 귀찮은 나머지, 그냥 MySQL이 제공하는 Slow query log를 사용해서 Index를 달기 위한 query들을 선별했습니다.

log_slow_queries
set-variable = long_query_time=1

MySQL 설정에 위와 같이 추가해주면, 1초 이상 걸리는 (in real time) query들의 로그를 생성해줍니다.

처음 table 설계시에는 Galaxy의 logic에 대한 고려가 없었기 때문에 Primary/Unique를 제외한 Index는 하나도 없었습니다. Indexing을 적당히 넣어주자 당장 Slow query에서 빠졌을 뿐만 아니라, 체감속도도 빨라졌습니다.

Increasing Buffer Size

Galaxy가 사용하는 MySQL table은 모두 InnoDB로 되어있기 때문에 다음 설정들을 손봐주었습니다.

set-variable = innodb_buffer_pool_size=128M

기본값인 32M일 때는, Indexing을 해주었음에도 불구하고 가끔씩 Slow query가 나왔는데, Buffer size를 늘려주고 나서는, 처음 query를 제외하고는 Slow query가 나오지 않더군요.

Etc.

대충 크게 잡아놨던 Column들의 type들을 조정해주었습니다. Galaxy는 날짜 순으로 최근 item부터 보여주기 때문에, table order를 날짜 순으로 정리해줬습니다. Defragmentation도 해주었습니다.

References

MySQL by Paul DuBois

MySQL Optimization for Galaxy 더 읽기"

조엘 온 소프트웨어 서평 업데이트

조엘 온 소프트웨어의 서평에 역자의 블로그 내용과 번역 경험담에 대한 의견을 추가했습니다. 당시에는 편견이 아닌가 싶어 이런 의견을 밝히는 것에 좀 조심스러웠는데, 다른 사람과 의견을 나눈 후에 약간 용기를 얻었습니다.

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

조엘 온 소프트웨어 서평 업데이트 더 읽기"

Tejun Heo

KernelTrap 기사를 보다가 Serial ATA (SATA) Linux software status report에서 태준옹의 이름을 발견했습니다. 물론 그 전에도 ChangeLog를 살피다보면 간간이 볼 수 있긴 했지만요. 배틀필드 2 한국 서버의 tejun과 동일 인물이라죠.

Tejun Heo has contributed error handling improvements, and assisted in various other areas.

태준옹으로 말하자면, 참으로 멋진 사람입니다. 그는 여러가지 면에서 저의 선생이기도 하지만, 그의 가장 큰 장점을 들자면 아무래도 합리적이면서도 균형 감각을 잃지 않는 점이랄까요. 논리에 너무 빠져들다보면 전혀 현실적이지 않은 극단에 빠지기가 쉬운데, 태준옹은 제가 그럴 때마다 항상 그런 것을 바로 잡아줍니다. 그렇다고 해서, 자신이 믿지 않는 것과 손쉽게 타협하지는 않습니다. (균형 감각이라는 말에 오해의 소지가 있을 것 같아서 언급합니다.)

한번은 제가 다니던 회사에 형을 추천한 적이 있는데, 면접에서 다음과 같은 재미있는 얘기가 있었다죠.

면접관: 당신은 사랑과 우정과 일 중 하나를 선택하라면 무엇을?

tejun: (쩔쩔매며..) 저는.. 그런 질문 되게 싫어하거든요? 그러니 딴 질문을..

결과는? 떨어졌습니다. 물론, 저런 대답을 했다고해서 떨어진 거라고 단정지을 수는 없지만요. 이유가 무엇이었든간에 태준옹과 같은 인재가 떨어진 것은 매우 아쉬웠습니다.

아, 그리고 이번에 Linux 관련 모 외국 기업으로부터 job offer를 받으셨다죠. 이 자리를 빌어서 한번 더 축하드려요.

Tejun Heo 더 읽기"

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