'개발'에 해당되는 글 8건

  1. 2007.09.03 OOXML은 아직... 11
  2. 2007.08.14 단순한 개발자 4
  3. 2007.08.10 즐거운 개발자 11
  4. 2007.05.03 개발하기에 좋은 폰트 6
  5. 2006.09.20 Mozilla ActiveX Control
개발2007. 9. 3. 00:22
OOXML의 ISO 표준 통과 여부에 대한 논쟁이 한참이다. 지금까지 내가 접한 내용들은 대부분 반대여론이었는데, 주로 기존 표준(ODF)과의 양립에 따른 혼란, 구현 가능여부에 대한 불확실함, 특허권이나 라이센스 문제 등 여러가지 이유가 있었다. 사실 나도 반대서명운동에 참여하기는 했으나, 복잡한 정황을 다 이해한 것은 아니고, 단지 그들의 표준안이 기술적으로 불만스럽기 때문이었다.

내가 개발에 참여하고 있는 ThinkFree Office는 MS Office와의 호환성이 핵심 과제이기 때문에 OOXML 지원은 필수요소라고 할 수 있다. 언젠가 ODF도 지원을 하겠지만, 그보다는 OOXML이 우선이었다. 그런 정책 덕분에 현재 ThinkFree Office는 WordprocessingML 읽고 쓰기가 지원이 되고 있고, SpreadsheetML과 PresentationML도 조만간 지원이 될 예정이다. 사실 OOXML 지원 업무에 많은 관여를 한 것은 아니지만, 일부 파트를 담당하면서 OOXML 스펙 문서(download)를 끼고 살다시피 했는데, 이 스펙 문서는 뭐랄까, 반쪽짜리 문서라는 느낌이 들었다. 얼핏 봐서는 모두 공개하는 것처럼 보이지만, 그렇지 않은 경우가 많다. 실제 이 스펙만 보고 문서를 정확하게 표현하는 것은 불가능하다. 몇가지 예를 들어보면 다음과 같다.

- 5.1.11.18 prstGeom(Preset Geometry), DrawingML-Main (p.3672)
Preset shape의 경우 '<a:prstGeom prst="heart"></a:prstGeom>"처럼 해당 shape의 preset name만 문서에 기록되며, path 정보가 없기 때문에, 해당 path를 알고 있는 MS Office만이 preset shape을 정확하게 표현할 수 있다.

- 5.1.11.11 gd(Shape Guide), DrawingML-Main (p.3660)
Shape path를 결정짓는 변수인 adjust value의 경우, shape guide로 그 값이 기록되는데, coordinate space가 정의되어 있지 않아 그 값의 의미를 파악할 수가 없다. 역시 MS Office만이 정확한 coordinate space를 알고 있다.

- 4.6.7 attrName(Attribute Name), PresentationML-Animation (p.3080)
애니메이션의 경우 특정 개체의 속성을 시간에 따라 변화시켜줘야 하는데, 그 속성이름을 attrName element에 기록한다. 그런데 실제로 PowerPoint 2007로 pptx 문서를 만들어보면 'style.color', 'style.rotation' 등 스펙에 정의된 이름 말고도 'fillcolor', 'r' 등 그네들만이 사용하는 이름이 문서에 기록된다. 심지어는 특정 vendor를 지칭하는 속성 이름들('ppt_x' 등)도 버젓이 기록된다. 만약 스펙에 근거한 개발을 한다면, 저런 속성 이름들은 처리가 불가능해진다.

- 4.6.92 val(Value), PresentationML-Animation (p.3158)
attrName과 마찬가지로 '0-#ppt_y/2'와 같은 말도 안되는 변수를 수식에 넣고 있다.

위의 예처럼 OOXML 스펙은, XSD를 통해 data type의 제한 정도만 정의하고 실제 data가 가지는 의미가 불확실한 부분들이 다수 존재한다. 이런 식으로 일부 문서 정보의 의미를 공유하지 않으면서 마치 모두 공개하는 양, 이름까지 Office Open XML이라고 지은 그네들은 정말... 가증스럽다. 만약 이런 상태의 스펙으로 OOXML이 전자 문서의 표준이 된다면, 그 스펙에 공개되지 않은 세세한 내용들까지 100% 지원해주는 Office 툴은 MS Office가 유일할테고, 결국 사용자 입장에서는 조금 비싸더라도 문서를 정확하게 표현해줄 수 있는 MS Office를 선호하게 될 것이다.

개인적인 생각으로는 OOXML은 표준으로 승격되기에 아직 무리가 있다. 다른 문제 다 제쳐두고 일단 스펙 자체가 불만스럽다. 이미 표준으로 확정된 ODF는 직접 다뤄본 적이 없어서 모르겠는데, 역시 부족한 접이 많다고 들었다. 바램이 있다면, 아직 문서표준을 확정짓지 말고, 어떤게 더 나은가 충분한 시간동안 검증을 한 다음에 표준을 정했으면 좋겠다. OOXML이건 ODF건 아직 나온지 몇년 되지도 않았는데, 벌써부터 표준으로 받아들이면 어쩌자는 건지...

Posted by roguebean
개발2007. 8. 14. 03:14
다행입니다. 저의 바램대로 일정은 연기되었습니다. 고생에 대한 격려도 받았구요. 좋지 못한 상황까지 각오하고 있었는데, 정말 다행입니다.

제가 초반에 산정했던 프로젝트 일정은 크게 빗나갔습니다. 거대한 산이 존재하고 있다는 것을 프로젝트가 꽤 진행된 이후에 알아챘기 때문입니다. 만만하게 봤다가 큰 코(?) 다쳤지요. 그 이후에 어떻게든 일정을 맞춰보려고 아둥바둥했었지만 역부족이었습니다. 결국 보고는 늦어졌고, 일정에 대한 압박을 느껴 고민 아닌 고민을 했었네요. 물론 관리자와 개발자, 그리고 소프트웨어에 대한 제 생각에는 변화가 없습니다만, 우려했던 현실은 다행히도 해피하게 변했네요.

오늘 좀 더 현실적인 일정을 다시 산정했고, 내일부터 몇 달간은 다시 맘잡고 열근모드 들어가려고 합니다. 후배 개발자가 의욕을 잃지 않도록 격려해주신 분들께 참으로 감사드리고... 당분간 블로그 관리는 좀 소홀해지겠지만, 연말쯤엔 '문제의 작품'을 소개드릴까 하오니, 사알짝 기대바랍니다.

Posted by roguebean
개발2007. 8. 10. 04:48
저는 개발자입니다.
초등학교 2학년때 친구네 집에서 처음으로 컴퓨터를 접했습니다. XT 컴퓨터였는데, 흑백 모니터에 하드디스크라는 건 없었고, 5.25인치 플로피 디스크로 MS-DOS를 띄웠던 기억이 납니다. 처음에는 그저 게임이 좋아 방과후에 그 친구네 집에 들러 몇 시간씩 게임을 하다가 집에 가곤 했었습니다. 'Rampage'라는 게임을 즐겨했었는데, 2인용도 가능해 친구랑 즐거운 시간을 보낼 수 있었습니다.

그러던 어느날 컴퓨터를 가르쳐주는 학원이 있다는 걸 알게 되었고, 그 곳에 다니면 더 많은 게임을 할 수 있지 않을까라는 단순한 생각에 결국 부모님을 졸라 학원을 다녔습니다. 실제로 그 학원은 저같은 원생 유치를 위해 주말마다 게임을 할 수 있는 시간을 줬습니다. 어린 마음에 신나게 즐겼었지요.

학원에서는 GW-BASIC이라는 프로그래밍 언어를 배웠었는데, 저의 프로그래밍 경험은 그 때가 처음인 것 같습니다. GW-BASIC은 줄번호로 한 라인을 시작했었는데, 1, 2, 3... 으로 1씩 증가시킬 경우, 나중에 중간에 새로운 라인을 추가하려면 아래쪽 라인의 번호를 모두 밀려써야 하는 불편함 때문에 항상 10, 20, 30... 으로 번호를 매겼던 기억이 납니다. 중간에 새로운 라인을 추가할 때는 15, 25, 35... 이렇게 넣으면 되니까요.

프로그래밍은 굉장히 즐거웠습니다. 충격적인 경험이기도 했구요. 제가 머릿속으로 생각한 계산과정이 컴퓨터라는 기계에서 정확하게 동작하는 것을 보고 너무나 신기했습니다. 프로그래밍에 오류가 있으면 그것마저도 정확하게 반영을 해주더군요. 이런 똑똑한 기계를 대체 누가 만들었을까... 호기심이 충만했습니다.

그 이후 초등학교 3학년 때 우리집에 첫 컴퓨터가 들어왔습니다. 삼보 286 AT 컴퓨터였는데, 당시에는 좀 산다는 집에만 있었던 컴퓨터를 아버지가 거금 200만원을 들여 사주셨습니다. 처음에는 그저 값비싼 게임기였는데, 나중에는 어떻게 어떻게 알게 되어서 모뎀으로 밤새 PC통신도 해보고, 덕분에 전화요금이 10만원 넘게 나와 혼나기도 많이 혼나고... 이래저래 재미있는 경험들을 해볼 수 있었습니다.

중, 고등학교 때는 프로그래밍보다는 3D 디자인에 푹 빠졌었습니다. 3D STUDIO를 주로 사용했었는데, 컴퓨터에서 사물을 3D로 표현할 수 있다는 게 너무 신기했습니다. 게다가 애니메이션까지도 제작할 수 있어 시각적인 즐거움이 엄청났었습니다. 언젠가 학교에서 장래희망을 조사했는데, '컴퓨터 그래픽 디자이너'라고 제출했던 기억이 납니다. 그 때 만들었던  작품들 중 일부는 남겼지만 아쉽게도 대부분의 작품들은 잃어버렸습니다. 허접하긴 해도 간혹 보고 싶을 때가 있는데, 그 때마다 백업의 중요성을 새삼 느낍니다.

그렇게 소년시절을 보내고, 운 좋게 대학교에 들어갔지만 이래저래 술만 마시고 방황만 하다가 결국 군대를 갔습니다. 끔찍한 2년 2개월이었지요. 복학 후에는 머리가 굳어서 조금 힘들었지만, 정신차리고 공부를 해봤더니 다시 흥미가 생기기 시작했습니다. '컴퓨터 시스템'이라고 주로 어셈블리 언어를 다루는 강의가 있었는데, 그 과목을 시작으로 점점 재미가 붙더군요. 그래도 솔직히 그 때까지만 해도 제가 개발자라는 직업을 가질 수 있으리란 생각을 못 했습니다. 무개념에 지식과 상식이 황폐했기 때문입니다.

하지만 인연은 어떻게든 이루어지나 봅니다. 친구 소개로 아르바이트를 시작한 게 연이 닿아 지금까지도 한 회사를 다니고 있습니다. 여기서는 재미있는 일들을 많이 할 수 있어 좋았습니다. 생업으로 다니는 거라 연봉도 신경쓰이긴 하지만, 솔직히 그보다는 재미있어서 다니고 있습니다. 배우는 것도 굉장히 많구요.

그런데 언제부터인가 회사라는 조직에 실망을 하기 시작했습니다. 저는 소프트웨어도 하나의 예술작품이라고 생각합니다. 잘 만든 소프트웨어를 보고있자면 아름답다는 생각이 듭니다. 멋진 그림을 보거나 멋진 음악을 들으면 아름답다는 생각을 하는 것과 비슷한 것 같습니다. 스위스 시계나 멋진 건축물같은 경우도 마찬가지구요. 가치를 인정받는 예술작품은 작가의 장인정신이 깃들어 있습니다. 작품을 볼 줄 아는 사람이라면 굳이 설명하지 않아도 알 수 있습니다.

소프트웨어도 마찬가지라, 이 작품이 명작인지 졸작인지 알 수 있습니다. 명작이라 불리는 소프트웨어는 개발자의 장인정신이 깃들어 있습니다. 하지만 이런 소프트웨어를 만들려면 개발자의 실력도 실력이지만, 주변환경도 굉장히 중요한 것 같습니다. 개발자가 개발에 전념하고 정성을 들일 수 있도록 환경을 만들어줘야 합니다. 가장 이상적인 경우는, 개인적인 생각입니다만, 그냥 믿고 내버려두는게 아닌가 싶습니다. 물론 개념없는 개발자를 방치해두는 것은 위험하겠지만요. 그리고 칭찬은 못 할 망정 사기를 꺾는 일은 하지 말았으면 좋겠습니다. 일부러 그러는 것은 아니겠지만 말입니다.

저는 오늘 사기가 많이 꺾였습니다. 사실 요즘 굉장히 흥미로운 프로젝트를 진행중이라, 오랜만에 창작의 즐거움을 만끽하고 있습니다. 시간가는 줄 모르고 일하고 있습니다. 이번 프로젝트를 위해 많은 연구를 했고, 어떻게든 개념을 정확하게 코드로 표현하려고 노력중입니다. 명작을 만들 능력까지는 안되더라도, 좋은 소프트웨어를 만들기 위해 제 깜냥으로 할 수 있는 모든 노력을 다하고 있습니다. 하지만 회사는 이런 걸 원하는 게 아닌 것 같습니다. 노력도 중요하지만 그보다는 일정 관리가 더 중요한가 봅니다. 기능을 어떻게 구현했는지보다는 기능을 구현했냐 못했냐가 더 중요한가 봅니다. 저도 이해는 갑니다. 회사 입장에서는 리스크를 관리해야 되고, 프로젝트의 지연은 쉽게 용납할 수가 없겠지요. 스펙에 적혀있는 기능이 동작하는지 안하는지도 물론 중요하구요.

그렇지만 정말 그게 최우선의 가치입니까? "동작만 하는 코드"는 누구나 작성할 수 있습니다. 코드의 품질을 따지지 않는다면 일정이 지연될 일은 별로 없을 겁니다. 그렇게 해서 그 일정을 준수했다고 칩시다. 당장은 좋은 평가를 받겠지요. 하지만 그 뒤에 유지보수는? 뻔합니다. 조금만 코드 수정해도 여기저기서 삐걱댑니다. 나비효과도 생깁니다. 여기서 수정했더니 저 멀리 있던 엉뚱한 놈이 망가집니다. 이런 모래성같은 코드는 파도 한 방에 하염없이 무너집니다. 기능 추가는 어떻습니까? 모든 부품들을 처음부터 새로 만들어야 됩니다. 이미 스파게티로 섞여버린 코드에서 재사용 가능한 모듈을 빼낸다는 건... 미친짓입니다.

지금 당장은 더뎌보이더라도 신경써서 개발을 해두면 두고두고 편합니다. 프레임웍이 잘 잡히면 쉽게 무너지지 않습니다. 버그양산도 드물어서 디버깅 시간도 비약적으로 줄어듭니다. 모듈별로 경계를 확실히 구분해두면 여기저기서 재사용 가능합니다. 이후에 모듈을 그대로 사용할 수 있다면 새로 개발할 필요가 없으니 결국 장기적으로 봤을 때 훨씬 더 유리하다는 겁니다. 이런 사실을 간과하고 지금 당장 눈에 보이는 결과만을 좇다보면... 뒷일은 불보듯 뻔하지 않겠습니까.

오늘 그렇게 관리에 대한 얘기를 듣고나니 참으로 기운이 빠지더군요. 신경써서 구조 잡고 모듈을 독립적으로 만들려고 아둥바둥 노력해봤자 뭐하나 싶었습니다. 아무도 알아주지도 않는 거 그냥 고민하지 말고 대충 빨리빨리 만들어서 일정 지키고, 평가나 잘 받을까라는 생각까지 들었습니다. 나는 그저 수많은 기계들 중에 제때 일처리 못하는 불량품같은 존재인가 싶기도 하고.

저는 아직 이상주의자입니다. 기술로 먹고사는 회사에서 관리를 목적으로 기술을 경시한다는 것은 이해가 안 됩니다.
그리고 저는 바랍니다. 일정을 맞추기 위해 기술을 깎을 게 아니라 기술을 위해 일정을 지연시킬 수 있기를.

신나고 즐겁게 개발하고 싶습니다.

Posted by roguebean
개발2007. 5. 3. 01:26
개발할 때 어떤 폰트를 사용하십니까?

저는 Andale Mono (Regular 11)를 사용하고 있는데 깔끔하니 좋네요.
저의 주력 개발환경은 Mac + Eclipse + Java 구요.

Andale Mono

Andale Mono


참고로, 다들 아시겠지만, 개발하기 좋은 폰트는 다음과 같은 조건을 만족해야 한다고 합니다.
(from Typographica)

1. Fixed-width with easily distinguishable symbols (such as numeral zero and letter ‘O’)
2. Easily scannable for text.
3. “Not cause a headache” after long periods of immersive reading.

Posted by roguebean
개발2006. 9. 20. 21:33

Internet Explorer engine은 ActiveX control container인 동시에, 그 자신도 ActiveX control이다. 즉, ActiveX control을 hosting할 수도 있고, 역으로 hosted될 수도 있다. 이런 점 때문에 Windows의 여러 application들이 IE engine을 ActiveX control 형태로 hosting하여 자기네들 입맛에 맞게 사용하고 있는데, Firefox addon 중에도 IE engine을 활용한 IE Tab이라는 extension이 있다. Windows용 Firefox에서 web page를 IE engine으로 rendering해주는 재미있는 extension인데, IE-only page를 FF에서 browsing한다든지, IE와 FF의 rendering을 비교한다든지 하는 데 용이하다.

요즘 이런저런 생각의 실타래를 따라가다가 문득, IE engine용 ActiveX control이 있다면 FF engine용 ActiveX control도 있지 않을까라는 생각이 들었다. 역시 이런 생각은 누군가가 먼저 했었다(Joel 아저씨도 언급했었다). Mozilla ActiveX Control이라는게 있더군. Mozilla 계열 browser가 사용하는 Gecko engine을 wrapping해서 ActiveX control 형태로 만든 것인데, 사실 Mozilla측에서 공식적으로 배포하는 건 아니고, Netscape의 Adam Lock이라는 사람의 실험 프로젝트 정도로 진행했던 것 같다.

일단 Mozilla ActiveX Control을 설치를 하고 테스트를 해봤는데... 신기하다. :) 그런데 딱히 써먹을 데가 생각이 나지 않아, Adam 아저씨가 만들어둔 샘플 페이지를 발전시켜 Gecko engine으로 page를 rendering하는 가상의 Mozilla web browser를 만들어봤다. 이왕 하는 거 Web Browser Platform이라는 이름도 짓고, Dojo toolkit으로 이쁘게 꾸며봤다. 아래 링크에서 구경할 수 있다!

(! Deprecated)Web Browser Platform(FF/IE in IE)

사용자 삽입 이미지

Web Browser Platform Screenshot

그런데 역시나 어따 써먹으면 좋을 지 아직 모르겠다. Windows에서밖에 사용할 수 없다는 것도 좀 그렇고...

Posted by roguebean