Software Development

Programming Language & Database

http://www.joelonsoftware.com/items/2004/03/25.html

DB가 모든 어플리케이션의 필수요소가 된 때에, SQL과 Programming Language의 gap이 아직도 크다는 점을 지적하고 Programming Language가 적극적으로 이를 메꾸기 위한 방향으로 나가야한다는 내용. 아래에 원문과 대충 번역한 내용이 있다.

Related links:

  • Anders Hejlsberg – Programming data in C# 3.0: C# 3.0(정확히는 .Net langauges)이 general purpose/object oriented syntax로 data를 programmable하게 만드는데 초점을 맞추고 있다는 내용.
  • Comega language: Cw is a research programming language. It can be written (and searched for) as Cw or the “Comega language”. Cw is an extension of C# in two areas: 1) A control flow extension for asynchronous wide-area concurrency, 2) A data type extension for XML and table manipulation. (다음 기회에 이에 대한 포스팅을..)

March 25, 2004

Thanks to everyone who came to the open house last night. If you have
pictures, send me a link!

We had an interesting conversation about how the impedance
mismatch
between contemporary high-level programming languages (Java, C#,
Python, VB) and relational databases. Since a huge percentage of code requires
access to databases, the glue (a.k.a. the connecticazoint) between the RDBMS
layer and the application code is very important, yet virtually every modern
programming language assumes that RDBMS access is something that can be left to
libraries. In other words, language designers never bother to put database
integration features into their languages. As a tiny example of this, the syntax
for “where” clauses is never identical to the syntax for “if” statements. And
don’t get me started about data type mismatches: just the fact that columns of
any type might be “null” leads to an incompatibility between almost every native
data type and the database data types.

하이레벨 프로그래밍 언어에서
RDB 지원이 안되는 것에 대해 얘기를 나누었다. 많은 코드들이 DB를 사용하기 때문에 RDB와 App 코드의 접목은 중요하지만, 요즘
언어들은 전부 라이브러리에게 그 역할을 맡기고 언어상의 DB integration을 꺼리고 있다. 예를 들면 SQL의
where절 문법과 if syntax는 너무나 차이가 많이난다. data type도 마찬가지다.

The trouble with this is that the libraries (think ADO, DAO, ODBC, JDBC,
embedded SQL, and a thousand others) need to be general purpose to be reusable,
and yet what you really want is a mapping between a native data structure and a
table row or query result row. Inevitably, you have to hand roll this mapping
and wire it up manually, which is error prone and frustrating

RDB에 접근하기
위한 라이브러리들이 재사용 가능하려면 범용적이어야 하지만, 우리가 진짜 원하는건 native data type 과 table
row, query result row와의 mapping
이란
거다. 결국 전부 손으로 해야하고, 이런건 구리다.

I think this is a fatal flaw in language design, akin to the bad decision by
the designers of C++ that it was not necessary to support a native string type.
“Let a thousand CString/TString/String/string<char> types flourish,” they
said, and then spent more than a decade adding new features to the language
until it was marginally, but not completely, possible to implement a non-awful
string class. And now we have a thousand string types (most large C++ bodies of
code I’ve seen use three or four) and a bunch of really good books by Scott
Meyers about why your personal hand-rolled string class is inadequate. It’s
about time that a language designer admitted that RDBMS access is intrinsic to
modern application implementation and supported it in a first-class way
syntactically.

난 이게 언어 디자인 상의
치명적인 결함이라고 생각한다. C++에서 string type을 native로 지원하지 않은 문제와
마찬가지다. CString/TString/String/string<char> 타입들을 맘대로 만들도록 두자고 얘기하고는
새로운 기능을 추가하는데만 신경써왔다. 이제 수많은 string type들이 생겼고, 스콧 마이어 아저씨는 따로 자기가 만든 string class는 부적합하다고 말한다. 이제 언어 디자인하는 인간들이 RDB 지원은 app에 기본적인 요소이고 맨먼저 문법적으로 지원되어야 함을 인정할 때다.

Now for all the disclaimers to prevent “but what about” emails. (1) in
functional languages like lisp the syntax layer is so light that you could
probably implement very good RDBMS shims in ways that feel almost native.
Especially if you have lazy evaluation of function parameters, it’s easy to see
how you could build a “where” clause generator that used the same syntax as your
“if” predicates. (2) Access Basic, later Access VBA, had a couple of features to
make database access slicker, specifically the [exp] syntax and the rs!field
syntax, but it’s really only 10%. There are probably other niche-languages or
languages by RDBMS vendors that do a nice job. (3) Attempts to solve this
problem in the past have fallen in two broad groups: the people who want to make
the embedded SQL programming languages better (PL/SQL, TSQL, et al), and the
people who want to persist objects magically using RDBMS backends (OODBMSes and
object persistence libraries). Neither one fully bridges the gap: I don’t know
of anyone who builds user interfaces in SQL or its derivatives, and the object
persistence implementations I’ve seen never have a particularly good
implementation of SELECT.

1) functional language에선 syntax layer가 가벼워서 좋은 RDBMS
shim을 만들어 거의 native하게 느낄 수 있을 거다. 특히 lazy evaluation이 있다면 if 절과 같은 문법으로 where 절
생성기를 만들기도 쉬울 것이다..

2) Access
Basic/VBA는 DB access를 위한 여러가지 기능이 있지만 10%정도일 뿐이다. 아마 다른 더 좋은 언어들이 있을
것이다.

3) 이 문제를 해결하기 위한
시도에는 두가지가 있었다.

embedded SQL 프로그래밍
언어를 만들자는 쪽과 RDBMS backend를 이용해 object persistence를 만들자는 쪽.

어느쪽도 gap을 완전히 메꾸지는
못했다. SQL로 user interface를 만드는 사람을 한명도 모를뿐만 아니라 내가 본 object persistent 구현 중 SELECT를 제대로 구현한 것은 없었다.

Programming Language & Database 더 읽기"

Surf Log

웹서핑하고 돌아다닌 기록을 정리하기 위해 여러가지 솔루션(Wiki, Web browser의 bookmark, Link blog)들을 택해보았지만, 전부 각각의 방식의 한계점들 때문에, 실패에 가까운 것 같다. 딥뿔군의 제안에 따라 Last Mind..::Links를 운영중이었는데, 이 방식의 한계점은 링크를 등록하기가 쉽지 않다는 것이다. 그래서 최근에 또다시 browser의 bookmark를 사용하는 모드로 바뀌었는데, 마침 딥뿔군이 ‘Blog Links! 0.1’을 만들어 쓴다길래 나도 ruby 연습겸 console 버전으로 한번 만들어보았다.

Web browser에 integration되어서 단축키로 현재 페이지에 바로 comment하는 인터페이스 정도면 가장 좋을 것 같다. 모질라 플랫폼(XUL, …)을 체험해볼 겸 모질라쪽 플러그인을 만들어보는 것도 재미있을 듯. 그리고 추가적으로 하루하루의 링크들에서 digest를 생성해서 본 blog 쪽에 자동 posting 해주는 스크립트 정도..가 있으면 좋지 않을까 생각이 든다.

다음은 MT의 XMLRPC interface를 이용해 link posting을 하기 위한 console 버전의 ruby script.

Surf Log 더 읽기"

데드라인 : 소설로 읽는 프로젝트 관리

[“딥뿔군의 글”:http://myruby.net/archives/002324.html]에 적혀있는 세가지 법칙을 보고 생각난 것을 적어보자면…
**1. ‘공격적인’ 스케쥴에 메인 프로젝트는 좀 더 타당한 스케줄을 따랐을 때보다 프로젝트를 끝내는 데 더 오래 걸린다.**
bq. 흔히 스케줄을 일에 비해 짧게 또는 희망적으로 잡는 경우인데, 스케줄은 프로젝트 관리에 경험이 적을 수록 비관적으로 잡는 것이 좋다고 생각한다. (경험이 많아지면, 스케줄을 재조정하는 것도 프로젝트에 나쁜 효과를 끼치지 않고 유연하게 할 수 있지 않을까 생각) 그런데, 의외로 이렇게 잡아야만 열심히 일한다고 생각하는 사람이 많다. 하지만, 경험적으로 리스크가 끼어들거나 해서 시간이 부족하면 위에서는 압력이 들어오고, 당사자들은 초조해지고, 그래서 프로젝트가 방향을 잃고 좌초하는 경우도 많다.
**2. 작업을 완료하는데 필요한 프로세스에 대한 자신의 직감을 모델링한다.**
bq. ‘직감’ 이런 단어가 들어가면 정말 어려운 것들이다. 책을 읽지는 않아서, 이 말이 무엇을 말하는지 정확히는 모르겠지만, 경험을 통해 직감을 성숙시키고, 이를 ‘모델’화하라는 말인 것 같다. 대부분의 책들은 이를 위한 의식적인 노력이 필요하다고 얘기하고 있다. 특히 ‘측정’을 통해, 원래의 예측이 얼마나 틀렸는지, 무엇이 원인인지 등을 파악해야한다. 난 측정까지가 아니라 원인 분석 정도에 그치고 있는데, 측정을 활용하면 좀 더 빠르게 이러한 직감에 이를 수 있지 않을까 생각해본다.
**3. 하루를 잃는 데는 수없이 많은 방법이 존재하지만, 하루를 만회하는 데는 단 한가지 방법조차도 존재하지 않는다.**
bq. 내 경우, 하루를 잃게 되는 대부분의 경우는, 오늘 할 일을 내일로 미루는 것이다. 프로젝트 원에게 진행상황을 물어볼 것을 오늘 하지 못하는 경우, 무엇을 확인하고 시켜야할 것을 내일로 미루는 경우, 스케줄은 하루씩 미뤄지는 것 (단축할 수 없는 것)과 마찬가지인거다.

데드라인 : 소설로 읽는 프로젝트 관리 더 읽기"

More Mac OS X 10.4 "Tiger"…

Tiger Spotlight Results
Mac OS X 10.4 “Tiger”에 관한 몇몇 읽을거리.
[“Inside Mac OS X 10.4 ‘Tiger’: Overview”:http://appleinsider.com/article.php?id=527]
[“Inside Mac OS X 10.4 ‘Tiger’: Safari 2.0”:http://appleinsider.com/article.php?id=531]
[“Inside Mac OS X 10.4 ‘Tiger’: Mail 2.0”:http://appleinsider.com/article.php?id=532]
[“Tiger’s Help application will search web support docs”:http://appleinsider.com/article.php?id=538]
[“Inside Mac OS X 10.4 ‘Tiger’: iCal”:http://appleinsider.com/article.php?id=539]

More Mac OS X 10.4 "Tiger"… 더 읽기"

Mac OS X v10.4 “Tiger”

WWDC2004에서 Apple의 CEO인 Steve Jobs가 Mac OS X의 새버전인 “Tiger”를 발표했다.
Mac OS X Tiger Sneak Preview
[“http://www.apple.com/macosx/tiger/”:http://www.apple.com/macosx/tiger/]
WWDC 2004 Keynote Webcast
[“http://stream.apple.akadns.net/”:http://stream.apple.akadns.net/]
감동적인 애플 차세대 OS “타이거”
[“http://www.zdnet.co.kr/webtv/webtv.html?id=69678”:http://www.zdnet.co.kr/webtv/webtv.html?id=69678]
Keynote 전체를 보지 않아서 모르겠지만, ZDNet의 동영상에서는 Spotlight와 iChat을 보여주고 있다.
Spotlight는 iTunes에서도 보았던, OS상의 검색기술을 얘기한다. 이제까지의 OS 검색은 파일들의 이름이나 단순한 내용을 기준으로 찾아야만 했지만, Spotlight는 파일 또는 정보(메일, 주소록)의 meta 정보를 이용하여 쉽게 검색할 수 있도록 하고 있다. 한가지 예를 들면, “앞으로 일주일 내에 생일이 있는 사람들의 목록” 같은 것을 쉽게 생성할 수 있다는 것이다. Longhorn의 WinFS와도 관련성이 있어보이긴 하는데 어느쪽의 결과물이 더 나을지는 두고볼 일이다.
iChat은 video/audio conferencing인데, 그 자체로는 새로울 것이 별로 없지만, 그 인터페이스가 정말로 Apple 답다고할 수 밖에 없는 감동을 자아내는 것이었다.
Mac OS X “Tiger” vs Longhorn?

Mac OS X v10.4 “Tiger” 더 읽기"

Visual Studio 2005 Beta 1 and Express version released

아시는 분은 다 아시다시피 ‘Whidbey’라는 code name을 가진 VS 2005 Beta 1과 Express version이 공개되었습니다. VS 2005 Beta 1은 MSDN subscriber만, Express version은 누구나 다운받을 수 있는 버전입니다. Express version은 Visual Web Developer 2005, Visual Basic 2005, Visual C# 2005, Visual C++ 2005, Visual J# 2005, SQL Server 2005로 나뉘어서 다운 받을 수 있는 것 같습니다. 다음 페이지에서 다운 받을 수 있습니다. Express version은 .Net passport가 필요합니다.

http://lab.msdn.microsoft.com/vs2005/get/default.aspx

Visual Studio 2005 Beta 1 and Express version released 더 읽기"

The Schematron

The Schematron: An XML Structure Validation Language using Patterns in Trees
http://xml.ascc.net/resource/schematron/schematron.html
Schematron은 DTD, XML Schemas, RELAX처럼 XML의 schema를 표현하기 위한 language의 일종이다. 이들과의 차이점은 grammar를 이용해서 schema를 표현하는 것이 아니라 tree pattern을 이용해서 schema를 표현한다는 것이다.
full schema를 표현하는데에 활용하기 보다는, 간단한 validation 등에서 성능상의 이점을 가지고 훨씬 유용하게 사용될 수 있을 듯 하다.

The Schematron 더 읽기"

Estimating and scheduling – the most exciting parts of the milestone

From http://blogs.msdn.com/gunnarku/archive/2004/06/23/164257.aspx
Project Manager가 프로젝트의 처음 단계에서 생각해야할 것들
– How much it’ll take
– Who’ll do it
– What are the priorities and risks associated with every tasks
– How the dependency graph looks etc.
Project Manager가 항상 답변할 수 있어야 하는 질문들
1. On what people in my team are currently working/worked/will be working?
2. How much time something takes/took/will takes?
3. How much the current schedule deviates from the original one?

Estimating and scheduling – the most exciting parts of the milestone 더 읽기"

WEB-BASED HTML Editor 종류 및 간단비교

원문: http://blog.naver.com/pistos2/80002160967

웹개발시 종종 필요로 하는 웹기반 HTML에디터..

Sourceforge에 등록되어 있는 오픈소스 웹기반 HTML 에디터의 종류와 기능비교  및 미리보기

순서는 Sourceforge의 Activity 순

 

– FCKeditor (http://sourceforge.net/projects/fckeditor/)
  * IE의
Editor Object 를 이용하여 제작
  * jsp, php, asp에 대응하는 이미지 업로드 및, 브라우징
기능
  * 미리 정의된 3가지 형태의 툴바 형태제공
  * 간편하게 기존 소스에 추가 가능
  *
테이블 편집 기능 지원
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요
  * 다양한
언어 지원(한글포함)

  * 완성도 높음.. 강추!
  * sample – http://pistos.pe.kr/FCKeditor/_test/test.php

– HTMLarea (http://sourceforge.net/projects/itools-htmlarea)
  *
이미지 업로드 지원 안함
  * 풀스크린 편집 지원
  * 영문메뉴만 지원
  * 타 사이트 내용
copy&paste시 이미지 경로 변경 필요 없음  
  * PHP Image Editor 지원 (http://sourceforge.net/projects/imgmngedt/)

  * 한글화 및 이미지업로드만 커스터마이징하면 FCK에 떨어지지 않을듯
  * sample – http://pistos.pe.kr/htmlArea/examples/full-page.html

 

– SPAW web-based WYSIWYG editor control (http://sourceforge.net/projects/spaw/)
  * 예쁜
디자인
  * 이미지 라이브러리 기능
  * 이미지 업로드 지원 안함  
  * 타
사이트 내용 copy&paste시 이미지 경로 변경 필요 없음

  * 디자인만 놓고 보면 최고! 그러나 이미지삽입부분이 맘에 들지 않고, 사소한 버그가 좀 있는듯.
  *
sample – http://pistos.pe.kr/spaw/test.php

 

– hypertextarea (http://sourceforge.net/projects/hypertextarea/)
  *
기본적인 기능만 제공
  * 이미지 업로드 지원 안함
  * 심플한 디자인
  * 타 사이트 내용
copy&paste시 이미지 경로 변경 필요 없음

  * 바로 갖다 쓰기엔 스크립트에러의 압박이 심함..
  * sample – http://pistos.pe.kr/hypertextarea/javascript/demo.html

 

– RichText-editor (http://sourceforge.net/projects/richtext/)
  * 브라우저
언어설정이 한글인경우 문제있음(한글지원 커스터마이징 필요)
  * 이미지 업로드 지원 안함
  * 타 사이트 내용
copy&paste시 이미지 경로 변경 필요 없음

  * 한때는 꽤 잘나가는 녀석이었는데… 이제는 경쟁력이 떨어짐.. 가져다 쓰려면 고쳐야
할것도 많음.
  * sample – http://pistos.pe.kr/richtext/editor/rte/richedit.html

 

– aynHTML (http://sourceforge.net/projects/aynhtml/)
  * 이미지업로드
지원
  * 이미지 저장소 지원
  * 깔끔한 디자인
  * 타 사이트 내용
copy&paste시 이미지 경로 변경 필요 없음

  * 나름대로 깔끔함.. 소스보기시 컬러링도 해주고.. 간단히 쓰기엔 좋을듯
  * sample – http://pistos.pe.kr/aynHTML/

 

– XsDhtmlEditor (http://sourceforge.net/projects/xsdheditor/)
  * 심플한
디자인
  * 이미지 업로드 지원
  * 타 사이트 내용 copy&paste시 이미지 경로 변경 필요
없음

  * 바로 쓰기에는 버그가 좀 있음..
  * sample – http://pistos.pe.kr/XsDhtmlEditor/

 

– bpEditor ( http://sourceforge.net/projects/bpeditor/)
  * 만들다
만듯..ㅡㅡ
  * sample – http://pistos.pe.kr/bpShitEditor/bpShitEditor.php

WEB-BASED HTML Editor 종류 및 간단비교 더 읽기"

Books on C++

원문: http://www.lastmind.net/tWiki/bin/view/Main/SoftwareDevelopmentBooks

C++ Programming Language

프로그래밍 언어에 대한 책에는 세가지가 있다. 프로그래밍 언어를 배우기 위한 책, 프로그래밍 언어를 잘 쓰기 위한 책, 프로그래밍 언어의 레퍼런스.

읽어보지는 않았지만, C++을 배우기 좋은 책으로 ‘Essential C++’을 꼽을 수 있을 것 같다. Bruce Eckel의 ‘Thinking in C++’같은 것도 나쁘지 않은 것 같다. (본인은 좋은 C++ 입문서를 읽어본 적이 없다. 번역서는 커녕 일반 서점에서는 외서를 구하기가 힘들었기 때문에, 한국 사람이 쓴 책을 읽었었다.)

‘The C++ Programming Language’는 C++의 창안자인 Bjarne Stroustroup이 쓴 책인 만큼 권위도 있고 자세하기도 하고 잘 쓰여진 책이기도 하다. (한 때, ISO C++ Standard가 이 책을 기반으로 쓰여지기도 했으니까) 이 책은 위에서 말한 프로그래밍 언어에 대한 책의 세가지 성격을 모두 갖고 있는 책에 가깝다. C++의 문법뿐만 아니라 왜 그런 문법이 생기게 되었는가, 그리고 어떻게 사용해야하는가 까지도 자세하게 적고 있으니 말이다. 이러한 성격 탓에 입문서로는 약간 부담스러울 수는 있으나, 다른 입문서를 읽고 C++ 문법을 모두 익히더라도 한번 쯤 읽어볼만한 책이다.

개인적으로 Effective 서들은 C++의 중급자로 올라서기 위해서는 ‘필수서’라고 생각한다. C++을 사용할 때 거의 항상 부닥치는 문제들에 대한 idiom을 제시하고 있기 때문이다. Exceptional* 서는 *Effective*보다는 덜 범용적이지만, 역시 중요하고 유용한 idiom들을 적고 있다. Modern C++ Design은 template의 사용에 관한한 최고의 책이라고 한다. template이 어디에 쓰는 건지 모르겠다면 Modern C++ Design은 template을 사용해서 구현할 수 있는 모든 technique을 보여줄 것이다.

‘The C++ Standard’는 말그대로 ISO C++ Standard를 책으로 만든 것이다. 더 정확하게는 C++98과 이후에 나온 Technical Corrigandum 1 (일종의 서비스팩)을 합쳐놓은 버전이다.
STL reference로는 STL Tutorial and Reference Guide의 번역판을 가지고 있으나 별로 참조할 일이 없어서 평가는 하기 힘들 듯 하다.
대체로 http://cppreference.com 이나 ‘The C++ Standard’를 참조하는 편이다.

번역에 관해 한마디 하자면, 본인이 읽어본 번역서는 Effective 시리즈와 Exceptional C++이다. (Modern C++ Design 읽는 중) Effective 시리즈도 번역이 나쁘다는 사람이 있으나, 개인적으로는 그런대로 읽을만하다고 생각했고, (개인적으로 기본적인 용어를 번역하는 것을 싫어한다) Exceptional C++은 악역이었다. Herb Sutter의 홈페이지에 쓰여진 내용을 찾아 대조해보면서 읽어야만 했다.

저자에 대해서도 좀 적어보면, Bjarne Stroustroup(http://www.research.att.com/~bs/homepage.html)은 C++의 창안자이자 현재도 ISO C++ standard commitee에서 활발하게 활동하고 있는 사람이다. Herb Sutter(http://www.gotw.ca/)는 ISO C++ standard committee의 의장(convener)이며, 책이나 논문, 잡지(CUJ) 등을 통해, 활발할 저술활동을 하고 있다. comp.lang.c++.moderated newsgroup의 moderator이기도 하다. ‘Modern C++ Design’의 저자인 Andre Alexandrescue도 CUJ에 정기적으로 기고하는 사람 중 하나이다. Scott Meyers는 Effective 시리즈의 저자라는 사실 하나라도 너무나도 유명하기 때문에 굳이 따로 언급할 필요도 없을 듯 하다. (사실, 그 외에는 잘 모르겠음)

입문서

C++을 잘 쓰기 위한 책

레퍼런스

Books on C++ 더 읽기"