What is Your Perfect Major?



What is Your Perfect Major?, originally uploaded by Joseph Jang.

What is Your Perfect Major?란 테스트를 해본 결과. 말그대로 자신에게 적합한 전공이 무엇인가를 알려주는 테스트인데, 개인이 그냥 만든거라서 그다지 신뢰가 가지는 않는다. 어쨌든, 내 결과는 철학, 수학, 사회학 정도. 별로 마음에 들지는…

What is Your Perfect Major? 더 읽기"

Can't replace files with Subversion

refactoring을 하다보면 AAA라는 클래스를 지우고, BBB라는 클래스를 AAA로 바꾸고 싶을 때가 있다. eclipse의 refactoring 기능을 사용하면 이러한 refactoring은 매우 자연스럽고 쉽게 수행할 수 있다. 하지만, commit할 때가 문제다. 다음은 이를 시도할 때 subclipse (정확히는 subversion) 에서 발생하는 에러다.

delete --force AAA.java
D AAA.java
move BBB.java AAA.java
Entry already exists
svn: 'AAA.java' is scheduled for deletion; it must be committed before it can be overwritten

subclipse의 문제가 아니라 file 이름 기반으로 entry들을 관리하는 subversion 자체의 문제로 보인다. 물론 해결하는 방법이야 존재한다. 가장 간단하게는 deletion과 rename을 따로 commit하는 것이 바로 그것이다. 하지만, 항상 code repository에는 working version 만을 넣겠다는 rule을 깨뜨려야하기도 하다.

Can't replace files with Subversion 더 읽기"

Annoying mod_ruby

현재 하고 있는 일이 간단한 웹 어플리케이션을 만드는 일이라 apache + mod_ruby를 사용하고 있는데, 그냥 단순히 apache + CGI + ruby를 사용하는 것에 비해서도 좋지 못한 선택이 되고만 것 같습니다.

라이브러리 등에 이미 존재하는 클래스를 override할 수 없는 문제라든가 HTTP header와 관련해서 시키는대로 했는데도 불구하고 제대로 동작하지 않아서, Apache Runtime에 접근해서 직접 조작해주어야 하는 짜증스러움이 있군요.

아햏햏한 문제는 또 있습니다. 다른 개발자가 항상 사용할 수 있어야하기 때문에, 테스트 버전과 개발 버전을 하나의 apache 서버에서 돌리고 있습니다만, 하나의 버전에 접근한 후 다른 버전에 접근하면 알 수 없는 에러가 발생합니다.

nohmad 옹에게 문의해보니 대뜸 mongrel + Nitro + Og + amrita2을 쓰시라고 하시는군요. 굳이 Nitro나 amrita는 아니더라도, 일단 mongrel이나 webrick 같은 ruby로 된 web server를 사용해보는 것도 괜찮을 것 같습니다. RoR과 같은 web application development framework를 선택하지 않은 것은 DB를 쓸 정도로 복잡한 어플리케이션이 아니었기 때문이었는데, 차후에 DB를 사용할 필요가 생기면 그 때 정도에 고려해도 무난할 듯 하군요.

Annoying mod_ruby 더 읽기"

Dr. Dobb's Journal Freely Available

온라인 구독권을 판매하던 DDJ가 어느새 온라인으로 기사를 공개하는 정책으로 선회했나봅니다. PDF Issue Archive 까지도 제공합니다. CUJ는 폐간되고 DDJ로 흡수된 건 알고 계시죠? 따라서, The New C++ 과 같은 칼럼도 전부 DDJ에서 볼 수 있게 되었습니다.

대전에 내려가있는 동안, 구독을 온라인 구독만 하고 있었는데, 다시 종이로 구독을 시작했습니다. ;-)

Dr. Dobb's Journal Freely Available 더 읽기"

SLF4J

Talking about logging libraries

3rd party logging 라이브러리를 사용하든 직접 만든 logging 라이브러리를 사용하든, 사용하고있던 logging 라이브러리를 다른 것으로 바꾸기는 매우 힘든 일이다. logging의 특성상 logging 라이브러리의 API가 사용된 곳들이 어플리케이션 전체에 걸쳐 얇게 퍼져있기 때문이다. 그렇다면, logging 라이브러리를 사용하지 않거나, 항상 하나의 logging 라이브러리를 사용하면 문제는 해결되지 않을까?

현실은 그리 녹록하지 않다. 일단 logging은 trivial 하지 않은 어플리케이션을 개발할 때는 거의 필수적인 요소 중의 하나다. 또한, 여러 프로젝트를 하다보면 항상 하나의 logging 라이브러리를 쓰라는 법도 없다.

Logging libraries in Java

Java와 같은 platform의 경우에는 상대적으로 운이 좋은 편이다. Java 프로그래머라면 누구나 들어보았을 log4j라는 logging 라이브러리가 어느 정도 de facto standard 수준의 위치를 점유하고 있었기 때문이다. 심지어 다른 여러 언어로 porting 되기까지 했을 정도다. (log4c, log4cpp, log4r, log4cxx, log4net, log4perl, log4php)

하지만, Java에서도 logging 라이브러리의 편재화 현상은 나타나고 있는 듯 하다. 가장 큰 주범은 Java logging 라이브러리를 표준화하기 위한 노력으로(?), Log4J를 Java API 안으로 편입시킨 java.util.logging package를 들 수 있다.

사실 logging 라이브러리의 requirement는 어느 정도 정리되어있고, 따라서, 여러가지 라이브러리를 사용함으로써 얻는 이익은 거의 없다고 봐도 무방하다. 게다가, 여러가지 라이브러리가 존재하고 서로 다른 프로젝트를 할 때마다 각각을 새로이 배워야하는 것은 불필요한 노력이다. 이런 문제에 대한 근본적인 해법은 바로 표준을 만드는 것이다. 이미 존재하는 여러가지 대안들까지도 끌어안을 수 있기도 해야할 것이다. 사실 java.util.logging의 의도도 원래 선하고 순수한 것이었겠지만, 결과적으로는 사실상 두가지의 안이 혼재하는 상황이 벌어지고 말았다.

더욱 나쁜 것은 이 두가지 라이브러리들의 facade 역할을 하는 라이브러리들도 등장하기 시작했다는 것이다. 그 중의 하나가 요즘 사용해보고 있는 SLF4J이고 다른 하나는 Jakarta CommonsLogging 컴포넌트 (JCL)이다.

SLF4J

Simple Logging Facade for Java (SLF4J)는 위에서 언급했던대로, 여러가지 logging 라이브러리들의 facade에 해당한다. SLF4J 역시, log4j와 마찬가지로, level과 section 개념, 유연한 Handler/Formatter 구조를 가지고 있어, 기본적인 logging 라이브러리의 requirement를 만족할 뿐만 아니라, java.util.logging이나 log4j와 같은 logging 라이브러리를 wrapping 하고 있다. 물론 SLF4J의 API를 그대로 구현한 NLOG4J와 같은 native 구현들도 존재한다.

SLF4J의 API로부터 backend가 되는 logging 라이브러리의 API로의 mapping은 static하게 이루어진다. 그래서, wrapping 하고 있는 logging 라이브러리에 맞는 SLF4J 바이너리를 어플리케이션의 classpath에 넣어줄 필요가 있다. Dynamic하게 binding함으로써 쓸데없이 잃게 되는 성능을 생각하면 그리 커다란 문제는 아니다.

한가지 아쉬운 점은 logging level이나 handler 설정을 위한 설정 파일을 통합하고 있지는 않다는 것이다. 그래서, backend가 되는 logging 라이브러리의 레퍼런스를 찾아볼 필요가 생긴다는 귀찮음이 있다.

What a mess?

log4j, java.util.logging, JCL, SLF4J, … Java community가 왜 이런 짓을 하고 있는지 잘 이해가 가지 않는다. 더구나, C++ community에 표준 라이브러리의 중요성을 깨닫게 해준 Java community에서 말이다.

SLF4J 더 읽기"

a bit of industriousness

아거님‘블로거가 갖출 기술들’에 인용된 문구를 재인용.

We don’t possess any remarkable skills, we just exercised a little skepticism, some open-minded curiosity, and a bit of industriousness.

지금의 나에게는 a little skepticism (여자친구의 말에 의하면 ‘세상을 부정적으로 보는 경향’)과 some open-minded curiosity는 충분하다 못해 넘치지만, a bit of industriousness가 부족한 것 같다. 최근 블로그 포스팅이 없는 것도 그런 탓.

a bit of industriousness 더 읽기"

KAIST, Is the crouching tiger a threat?

경향신문에 “KAIST 최고연구기관”이라는 기사가 났길래 봤더니, ACMKAISTJournal of System and Software에서 논문 게재수로 1위를 먹을 정도로 대단하다는 내용의 기사가 났다는 것이었다.

과학/기술 관련 기사에서, 더군다나 한국 잘났다 성의 기사에서 우리나라 기자들의 뻥튀기 수준은 잘 알고 있기에 ACM을 뒤져봤더니 다행히도 “Is the crouching tiger a thread?”라는 기사가 실제로 있었고 신문 기사와 일치하는 내용을 가지고 있었다. 게다가 “Facts and Fallacies of Software Engineering”이란 책으로 유명한 Robert L. Glass가 쓴 기사였다. 요약하면, 아시아 학교들과 국가들이 컴퓨팅 분야에서 잘하고 있기 때문에 미국이 석권하고 있는 이 분야에서 그런 나라들이 치고 올라올 ‘가능성’이 있다는 것이었다. 그렇다고 섣불리 ‘위협이다’라고 규정한 것도 아니고, ‘정말로 위협인지 아닌지 우리 논의해보자’ 이런 수준이다. KAIST의 논문 게재수와 같은 것은 그러한 결론에 대한 근거로 쓰였는데, Robert L. Glass 자신이 editor로 있는 저널에 대해서만 그렇다는 것이지, 그렇다고 또 권위있는 ACM이나 IEEE 쪽 저널에서 그런 것은 또 아니니까… Journal of System and Software가 KAIST 교수님들의 publication 목록에서 자주 눈에 띄었던 것 같긴 한데, 정말로 권위있는 곳인가에 대해서는 난 잘 모르겠다. 또, 미국의 컴퓨팅 현실에 대해서 항상 ‘우려’를 표하는 기사를 올리는 것이 취미인 ACM의 또 다른 기사에 새삼스레 놀라워 할 것도 없는 것 같기도 하고… Robert L. Glass가 학계에서 아무리 유명하더라도 그 사람이 1등 먹여줬다고 해서, KAIST가 CMU보다 더 좋을리는 – 있을 수도 있지만 – 없잖은가. 하지만, 어쨌든 기분이 좋은 것은 사실이다.

KAIST, Is the crouching tiger a threat? 더 읽기"