Scalaris 소스 공개

조 암스트롱이 얼랭 킬러 어플리케이션이 될 것이라고 한 Scalaris가 공개되었습니다.

by 이피 | 2008/07/25 14:01 | Erlang | 트랙백(1) | 덧글(1)

HtmlCleaner!

HTML 파싱할 일이 있어 오늘 잠깐 HtmlCleaner를 써봤는데 아주 좋습니다. 개떡 같은 HTML도 찰떡으로 만들어 줍니다. API가 간편하여 사용성도 좋지만, 프로그래머로서 본 받을 만한 구현인 것 같습니다. 특히 이 부분이 감동입니다. 코드를 데이터로 대체하여 사용성, 가독성, 유연성, 확장성 등 모두를 향상 시킨 아주 훌륭한 예입니다. 태그 규칙 데이터 파일만 새로 정의해서 생각 했던 것보다 훨씬 적은 노력으로 원하는 기능을 구현할 수 있었습니다. :-)

비슷한 기능을 제공하는 CyberNeko HTML ParserHTML Parser를 써보지는 않았는데, 앞으로도 시험해볼일이 없었으면 좋겠군요.

개떡 같은 HTML이여 이제 안녕~

by 이피 | 2008/07/23 23:58 | 트랙백 | 덧글(3)

멀더



와 이래 됐노. 질리언 앤더슨은 아직 괜잖군.

by 이피 | 2008/07/23 23:36 | 트랙백 | 덧글(0)

Rails Migrations와 비슷한 자바용 DB Migration 툴

Carbon Five db-support maven-migration-plugin

Migrate4j

Migrate4j는 DML을 쓸 수 없어서 Carbon Five maven-migration-plugin 사용 중.

by 이피 | 2008/07/23 00:26 | 트랙백 | 덧글(0)

오늘 검색하다가 걸린 논문 제목

'The Dilemma of Encapsulation vs. Query Optimization'. 아 죽겠다. 온갖 잡다한 정보를 화면에 보여줘야 하는데 Encapsulation에 중점을 두면 쿼리를 여러 번 해야 하고, 쿼리수를 줄이자면 Encapsulation을 깨야하고. 조인하는 큰 쿼리 한 번으로 하는게 빠른지 잔 쿼리 여러 번 날리는게 빠른지도 모르겠고. 조인하면 쿼리수를 줄일 수는 있는데 파티셔닝하면 조인도 못하고, 정렬도 별 소용없고. 그렇다고 잡다한(어디까지나 내 기준에) 정보 빼고 싶어하지도 않고. 대체 왜 화면을 빡빡하게 채우고 싶은지 이해를 못하겠다.

파티셔닝을 한다고 가정해버리면 한마디로 RDBMS 별로 쓸모가 없다. 대용량 서비스하는 딴 애들은 다 플랫폼 차원에서 이런 거 신경쓰지 않아도 되도록 해주는데(Google BigTable, Facebook Casandra, Amazon SimpleDB, Apache CouchDB, etc) 회사는 써먹지도 못하는 잡다한 기능 다들어있는 RDBMS 만든다고 몇 십 억씩 삽질하고 가관이다.

퍼포먼스 신경 끄자. 사이트 죽어나가면 그 때 문제 되는 기능 빼자고 하지 뭐. 머리가 나쁜데 손발이 고생해야지 우짜겠노. 죽어나갈 만큼 쓰면 그나마 다행이고.

차라리 여기 후원하는게 훨 효과 있겠다.
Scalaris Transactional Key/Value Store for Web 2.0 Hosting

Seattle Conference on Scalability: Scalable Wikipedia with Erlang

by 이피 | 2008/07/23 00:07 | 트랙백(1) | 덧글(5)

좋은 놈, 나쁜 놈, 이상한 놈


좋은 놈, 나쁜 놈, 이상한 놈
송강호,이병헌,정우성 / 김지운
나의 점수 : ★★★★★



어쩌다 보니 XX, XX, XX와 함께 한 XY, XY, XY. 무지하게 재밌다. 총질, 칼질 좋아하는 사람은 꼭 보기. 액션도 액션이지만 음악도 좋아. 오랜만에 휘파람 별이나 들으며 자야지.

by 이피 | 2008/07/18 00:03 | 트랙백 | 덧글(2)

JavaBeans와 Value Object

  • Value Object는 상태가 변하지 않기 때문에 몇가지 장점이 있다. 자바빈즈(JavaBeans) 규약을 따르는 iBatis 등은 외부에서 읽은 데이터를setter를 통해 객체에 넣어준다. 외부에서 데이터를 읽을 때만 setter를 제공하고 그 외에는 Value Object로 사용할 수 있으면 좋겠다.

1. 짧게 말하면

ValueObject 패턴에 따라 상태가 변하지 않는 Immutable 클래스를 구현하고, 이를 상속 받아 setter를 추가한Mutable 클래스를 구현하여 setter가 필요한 API에서는 Mutable 클래스를 사용하고 그 외에는 Immutable클래스를 사용한다.

2. 설명하자면

보통 자바빈즈 규약을 따르는 클래스는 다음과 같이 구현한다.

public class Person extends ObjectSupport {
private String name;
private int age;

public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public void older() { age += 1; }
}

자바빈즈 규약을 따르는 API들로 name, age값을 읽거나 쓸 수 있다. 외부에서 객체를 읽을 때 말고는 setter를 이용해값을 바꾸는 경우는 드물지만 자바빈즈 규약을 따르는 API를 사용해야 한다면 어쩔 수 없이 setter를 제공해야 한다. 객체를어떤 메서드의 파라메터로 전달 했을 때 setter가 제공되기 때문에 어디서나 예기치 않게 값이 바뀔 수도 있다. 예기치 않게값이 바뀌는 것을 원하지 않지만 자바빈즈 규약을 따르는 API에는 setter를 제공해야 한다. 어떻게 해야할까?

책임을 분리하면 된다. Immutable 인터페이스와 Mutable 인터페이스를 분리해서 제공한다.

public class Person extends ObjectSupport {
protected String name;
protected int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
public Person older() {
return age > 100
? new DeadPerson(name, age)
: new Mutable(this).setAge(getAge() + 1);
}

public static class Mutable extends Person {
public Mutable(Person prototype) { this(prototype.name, prototype.age); }
public Mutable() { }
public Mutable setName(String name) { this.name = name; return this; }
public Mutable setAge(int age) { this.age = age; return this; }
}
}

일반적인 경우는 다음과 같이 사용한다.

Person one = new Person("Eung-ju PARK", 29);
Person olderOne = one.older();
...

iBatis에서는 다음과 같이 ResultMap을 정의하고 DAO를 구현한다.

<resultMap id="result" class="package.Person$Mutable">
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap>

public Person find(String name) {
return (Person)getSqlMapClientTemplate().queryForObject("Person.find", name);
}

이제 한 번 만들어진 객체는 값이 변경되지 않는다! 멀티 쓰레드 환경에서도 캐시를 써도 이제 전혀 불안하지 않다. 혹Mutable로 업캐스팅 해서 몰래 값을 바꾼다고 해도 Mutable을 참조하는 곳을 찾으면 어디서 바꾸는지 쉽게 제거할 수있다.

3. 참고

by 이피 | 2008/07/14 01:03 | 트랙백(1) | 덧글(4)

주먹질, 칼질, 총질

탄천에서 땀을 빼고 와도 기분이 계속 꿀꿀해서 새벽까지 폭력의 세계를 감상했다.

주먹질



크로우즈 제로
오구리 Œ,야마다 다카유키,야베 쿄스케 / 미이케 타카시

곱게 생긴 애들이 간지 폭풍 고딩들 많이 등장한다.



칼질



스트레인져 무황인담


액션이 볼만하다. 잔인하지도 않다.



총질



플레넷 테러


극장 가서 보려고 열 두시 넘기를 기다리다 피곤해서 안보러 갔다. 극장에서 봤어야 했다.



세 편 모두 수준급.

by 이피 | 2008/07/12 22:22 | 트랙백 | 덧글(4)

2008년 7월 10일 아침 하늘


커튼이 없어 방 안에만 있어도 얼굴이 타지만, 아침에 눈 뜨면 바로 이런 구름을 볼 수 있다. 물론 밤에 달도 죽인다. 구름과 달 따위를 보고 아름답다고 느끼다니 안타깝다.

by 이피 | 2008/07/10 23:02 | 트랙백 | 덧글(7)

◀ 이전 페이지다음 페이지 ▶