화요일, 12월 30, 2008

예전에 구매했던 맥북을 팔고, 다시 x6으로 가볼생각이다.
69만원에 팔았으나, 나름 아주 선방한것이고...

메냐 사이트에 중고 놋북 구한다는 글을 올렷는데, 장난아닌 사양을 보낸다.
돈만 맞다면야.. 당연히 지르겟지만... 70마넌 선에서 괴안은 놋북없을까나

새로 구매할 놋북은, 역시 원도로 가야할듯...
회사 데탑도 원도우로 가야할듯...

금요일, 12월 26, 2008

다른분의 블로그에 함께 일하는 동료에게 감동을 줄수 있는 개발자가 되어야 한다고 코멘트를 남겼는데, 그 코멘트가 계속 머리에 남는다.

지금 나는 나와함께 일하는 동료들에게 감동을 주고 있는가?
질문하는 동료들에게 감동받게 답을 해주고있어?
너의 코딩에 그런 감동이 있어?
너의 설계에 그런 감동이 있어?

자질이 부족해 감동을 줄수 있을만큼 뛰어나지 못하다면,
적어도 그 감동을 주려고 노력은하고있어?

아주 작게 나마 고민해 보고, 몸 부림 쳐 봐야지

== 이 아마추어 수준의 고민은 언제까지해야하지 ==

화요일, 12월 23, 2008

예전에 비해 자신감이 없어 진듯하다.
혹은 예전에 비해 코딩(?) 능력이 떨어진듯 하다.
혹은 예전에 비해 암기력이 떨어진듯 하다.
혹은 예전에 비해 체력이 떨어진듯 하다.

곰곰히 생각해 보건데, 이건 아직은 적어도 아직은 '정신력' 문제 인듯하다.
혹은 누군가의 말대로 '초심'의 문제일지도 모르겠다.

어제 eclipse Tasks에 몇가지 기능을 추가한 가칭 Expand Tasks를 만들어 볼 요령으로
기존 eclipse에 붙어 있는 Tasks 소스를 받아보았다.

3.4부터는 예전의 org.eclipse.ui.ide(TaskList)를 쓰지 않는다는 말고 함께 상당부분 소스를 분석해야한다는 생각이들자... 10분정도 보다.. 노트북을 덮었다. -_-;;;

예전 가튼면 누가 이기나 보자며, 기를 쓰고 분석해 냈을 것이며 결국은 내가 원하는데로
결과물을 만들어 냈을 텐데..

이젠 귀찮다.
이거 답내는게 별로 급하지 않다.
재미있지도 않고...

월요일, 12월 22, 2008

저번 한주동안 다른 몇개월간의 패턴을 깨버려서 인지...

지난 몇 개월 동안 어떻게 살았나 싶은 의구심이 든다.
그리고, 그 일주일동안의 시간이 4개월시간을 깨버린것도 또한 궁금하고,
사람이 이렇게 빨리 변할수 있다는 것 또한 궁금하다.

여기저기 흐트져있는 책들이 좀 짠하다. --;;

수요일, 12월 17, 2008

저번 주 부터 시스템에 대한 메모리 릭 유무를 테스트 중이다.

저번주 몇일동안 engine 부분 테스트를 진행했고(다행이 정상으로 판단).
이번주에는 ui 부분 테스트를 진행해야 한다.

어제 저녁 rcp ui에서 메모리 릭이 나는지 테스트 하고있다.

자, 퇴근하기 5초전 엔진을 시작.
ui를 Profile모드로 시작...
아싸 완전 든든한 JProfiler 5가 시작
JProfiler 5의 메모리 옵션 조절...

흐뭇한 미소를 지으며 모니터 끄고 집으로 고고싱.....

아침 출근
아 두려움 반, 기대 반으로 모니터 킨다.
JProfile 5의 메모리 그래프 보기... 완전 정상~~ 흐믓....

그러나 ui화면 보면서 좌절........................................ -_-;;; 이건 몽미
ui는 로그인 화면이 떠 있을 뿐............

젠장...

엔진은 정상으로 시작했을뿐이고,
프로파일러는 모니터링만 했을 뿐이고
ui는 로그인 화면에서 깜빡였을 뿐이고.
serverside.com 매일에 다음과 같은 링크가 있었다.
http://hamletdarcy.blogspot.com/2008/12/java-7-update-from-mark-reinhold-at.html

대략 자바 7.0 se에 대한 이야기. 5.0, 6.0 릴리즈 되는것에 비하면 속도가 늦다.(요건 좋은듯..)

JSR 296 - Swing application framework - It still needs to be easier to create Swing apps.
RCP는 아직 약간의 진입장벽이 존재하므로.. 296이 어떻게 나올지 궁금하다.
(찾아보면 되는데, 귀차늠)

월요일, 12월 15, 2008

카페정모

저번 금요일 Eclipse RCP/plug-in 카페의 정모(http://cafe.naver.com/eclipseplugin/2791)가 있었습니다.

카페가 초반에 몇번의 정모가 있었으나, 이날 처럼 사람이 많이 모인 날은 처음이고, 인터넷으로는 몇년(?)째 알고 지내지만, 얼굴 보기는 처음인지라 나름 설래(?) 이기까지 하였지요.

전체 9명(까꿍, 풀하우스, 눈꽃, 자수씨, sunde41, 콩자반, 잠티카사, 한금이, 침묵)이 참석하였고, 카페에서 글로만 볼때는 둥그런 안경과 풍부한 몸을 가진(?) 전형적인 개발자들일거라는 생각을 했는데... ㅋㅋㅋ 상상의 이미지를 다 깨 주어서 좋았습니다.

꼬치님 구직도 잘 되시면 좋겟고, 멀리서 오신 콩자반님과 꼬치님도 감사하고...


새벽 3시,4시까지인가 ... 모임은 끝났는데... 아 정말 오랫만에 웃고 떠들은듯..

이런 모임을 종종 가져야 겠다는 생각을 해보게 됩니다.
그디어 vmware team으로 구성된것 중 하나가 깨졌다.
다행인것은 시스템이 비 정상적으로 죽어서 깨진것이 아니라....서....

백업해둔 한쪽 시스템을 복사하였고, 백업해둔 시스템은 service pack 2를 열심히 업데이트 중이다.

첫주 월요일 첫 작업은 복구.

오늘은 개발팀 망년회날인데, 무엇을 먹어야하나?

금요일, 12월 12, 2008

오늘 하루동안 시스템이 비정상적으로다가 2번 꺼졋다.

마지막 한번은 vm이 맛탱이 가기 일보 직전까지 온듯한다. 팀으로 묶여있는게 에러 낫다고 메시지 나옸따는... 깨지면, 백업받은 이미지가 있다해도, 한두시간은 보내야 하는 상황이라..

팀깨지면 os를 갈아버릴까보다. 아마 사운드카드 혹은 네트웍카드가 충돌나는듯 한대....
몇일전에 보낸 키보드가 도착했다.

아, 엠에스의 하드웨어 에이에스는 짱좋다.
대략 소비자 관점에서 말이다.

이런 ...
나를 제어 해보려고 하지만, 안돼는 것들이 있나 봅니다.

나의 의지와 상관없이, 나를 지배하고 있는 것 인가 봅니다.
몸부림쳐 보지만, 마음은 이미 안될것이란걸 아는가 봅니다.

while(true) {

try {
Thread.wait();
} catch(Exception e) {
// ignore exception
}

//
// work... thing....
//

}

화요일, 12월 09, 2008

자신에게 노력하는 사람에게는

자신에게 노력하는 사람에게는
경력이 쌓일수록 소심(?, 겸손?) 해질 수 밖에 없는 것이 진리가 아닌가 합니다.

무언가 알아갈수록, 모르는 것은 배로 늘어 나는 듯 합니다.
이정도면 됐어하고 나에게 질문을 던질때쯤이면, 그 질문한것 조차 부끄러워 집니다.

초심으로 돌아가 보겟다고, 기본에 충실해 보겟다고 나에게 다시한번 주문을 걸어봅니다.

금요일, 12월 05, 2008

아 xx.......

setString(1);
setString(1, "str");
setString(1, "str1", "str2");

private void setServie(int code, String... others) {
.......
}

아 -_-;;;;;;;

자바에서 위와 같은 문법이 있는 줄 오늘에야 알았음.
아고 통재라~

잠을 자야겟음. 잊어버려야지~~~~~

ps) String.format가 위의것을 사용하는 대표적인 거네. 아고 자주 사용하는 함수인데...
잊어버려야해~~~ -_-;;

목요일, 12월 04, 2008

SWT Development Tools

http://www.eclipse.org/swt/tools.php

이런것도 잇네요.

SWT Development Tools

JniGen is a tool that generates JNI wrappers for creating the SWT Platform Interface. For more information on how to generate the JNI code, see this tutorial.

Sleak is a simple tool that monitors the creation and disposing of SWT graphics resources. (see tutorial)

* Sleak plug-in for Eclipse 2.1.0 to 3.3 (zip file)
o Extract the zip file into the eclipse/plugins/ folder.
* Sleak plug-in for Eclipse 3.4 M1 - M5 (zip file)
o Extract the zip file into the eclipse/plugins/ folder.
* Sleak plug-in for Eclipse 3.4 M6 or later (zip file)
o Extract the zip file into the eclipse/dropins/ folder.
* After extracting the Sleak plug-in (above):
o Extract the .options file from the eclipse/plugins/org.eclipse.ui_.jar/ archive to the eclipse/ folder.
o Add the following lines to the .options file:
org.eclipse.ui/debug=true
org.eclipse.ui/trace/graphics=true
o Launch Eclipse with the "-clean -debug" option on the command line.
+ Note that you do not need the "-clean" option with Eclipse 3.4 M6 or later.
o Open the SWT Sleak view (Window > Show View > Other ... > SWT Tools > Sleak)
o The plug-in monitors all other plug-ins running in its Eclipse environment.
* Sleak for standalone applications (Sleak.java)

SWT Spy plug-in for Eclipse is a simple tool that prints out information about the widget under the cursor. Currently, this includes style, layout and parent information.

* Requires Eclipse 3.0 or later.
* Save org.eclipse.swt.spy_1.0.1.jar into the eclipse/plugins/ folder.
* Launch eclipse with "-clean" argument (clears caches so eclipse will pick up new plugin).
* Open the SWT Spy view (Window > Show View > Other ... > SWT Tools > SWT Spy.)
* Enable collection of info by clicking on the "Monitor" button in Spy view.
* Move cursor over the control of interest and see data printed in Spy view.
* To start or stop data collection while over a control, toggle the monitor action using ALT+SHIFT+".".

화요일, 12월 02, 2008

org.eclipse.ui.console.MessageConsole의 버그

org.eclipse.ui.console.MessageConsole의 hang현상

현재 ui가 hang이 걸리는 것은

IOConsolePartitioner.streamAppended(?, ?)의
if (fBuffer > 160000) {
try {
pendingPartitions.wait();
} catch (InterruptedException e) {
}
}

코드 때문입니다.

이것은 ui가 죽지 않도록 하기위해 정기적으로 fBuffer를 초기화해주는데, 초기화 해주지 못해서(ui가 바쁘거나 기타이유로)
wait현상이 일어 나서 그렇습니다.
(mccs console이 처음 시작할때는 잘 가져오는데, 두번째에서 에러나는것은 디버그를 해보고, clearBuffer() 메소드를 호출해 보았지만... 역시나 되지 않네요)

이클립스 버그로도 등록되어 있습니다.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=136943

위의 내용중에 그나마 해결책으로 나온 코드를 우선 적용해 놓았습니다.
다른 코드도 바꾸어야 겠습니다.

LogConsoleWriter.java

synchronized public void write(final String data,final Level level) throws IOException{

/**
* 임시 방편으로 죽지 않도록 수 정했음.
*
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=136943
*/
new Thread(new Runnable() {
public void run() {
try {
streams.get(level).write(data + "\r");
} catch(Exception e) {
e.printStackTrace();
}
}
}).start();

}


제 생각에는 ?가 로그를 가지고 올때 전체를 가져오는 것보다는 마지막 로그 전 대략 200byte정도만 가져와서 보여주면 어떨까 싶습니다.

이전 로그를 보여주어야 한다면, 로그를 보여줄수 있는 viewer를 만들어서 보여주는 것이 어떨까 싶습니다.

수고하세요.

==================
하루종일 디버깅하고 에러 찾기를 한 결과.
가끔 이클립스가 행걸리고 죽는것도 저것때문이 아닌가 싶다. 추측만......

월요일, 12월 01, 2008

새벽3시 취침
새벽6시 기상

애기 밥주는것을 끝으로 잠이 들었고,
애기 밥주는것으로 하루를 시작.

금요일, 11월 28, 2008

나의작업환경



오늘은 청소하는 날이어서..
정리작업

우분투 8.04를 메인으로 하고 vmware 로 2003 서버가 실행되어 있네요.

bcel

지금 하는것(?)이 어느정도 마무리가 되면,

파일럿프로젝트를 위한 bcel sample을 만들어 봐야겟네요.

우선 어려운 분들도 있을것이니, 제니퍼 설치 메뉴얼을 보시면
어떻게 설치하는지(?), 이것은 우리의 개발환경이기도 하니 중요.
설치 메뉴얼 보시면 설정 가이드, 이것은 어차피 개발할때 개발 포인트(?)가 될 것이므로 중요.

등을 보시면 도움이 되실거에요.

목요일, 11월 27, 2008

다리들

사장님 매일 말미에 있는 코멘트.

___________________________________________________________
초심을 상실했다는 것은 교만이 싹트기 시작했다는 것이고,
마음의 열정이 식기 시작했다는 것이며
겸손히 배우려는 마음을 상실해 가고 있다는 것이다
___________________________________________________________

나의 초심에 대한 정의가 필요하겠으나, 되새겨 봄직하다.

설마, ... -_-;; 여기까지는 못찾으실거야~ 아암, 그렇고 말고..

수요일, 11월 26, 2008

엇그제 어느분이 c언어를 물어오셨는데...

순간 하나도 모르겟다.
하기야, c언어 손땐지가 벌써 몇년전인지 기억도 못하겠고....
모르는게 세삼스럽지도 않는데... 뭘 -_-;;;;;

어제 집에가서 맥에 xcode와 codeblock를 인스톨하고, 먼지쌓이 c언어 책을 들여다 보면서..
몇가지 예제를 타이핑 해 보았다. 흠흠..

아래 질문에대한 침묵님의 멋진 추리

아래 질문에 대해서 침묵님의 멋진 추리이시다.
http://cafe.naver.com/eclipseplugin/2750
http://cafe.naver.com/eclipseplugin/2751

대강 이유는 안드로메다이고...

이클립스 소스중에 많이는 아니고, 필요한 몇개의 소스를 따라가 보고, 수정도 해보았으나...
언제나 나이스 하지는 않다는 것을...

이클립스 코드를 분석해보고, 추리해보는 작업을 틈틈히 해보아야겟다.

금요일, 11월 21, 2008

Eclipse Debug, debug project

요 몇일 머리 아픈부분에 대한 정리.

Window32 시스템에서 Eclipse를 자바 디버그 모드로 실행했을 경우 시스템 환경변수(System.env()) 값들이 모두 대문자로 나온다. (unix나 mac등은 원래대로 나온다)
(org.eclipse.debug.core 프로젝트의 LaunchManager.getNativeEnvironment())

/* (non-Javadoc)
* @see org.eclipse.debug.core.ILaunchManager#getNativeEnvironment()
*/
public synchronized Map getNativeEnvironment() {
if (fgNativeEnv == null) {
Map casePreserved = getNativeEnvironmentCasePreserved();
if (Platform.getOS().equals(Constants.OS_WIN32)) {
fgNativeEnv= new HashMap();
Iterator entries = casePreserved.entrySet().iterator();
Map.Entry entry = null;
String key = null;
while (entries.hasNext()) {
entry = (Entry) entries.next();
key = ((String)entry.getKey()).toUpperCase();
fgNativeEnv.put(key, entry.getValue());

}
} else {
fgNativeEnv = new HashMap(casePreserved);
}
}
return new HashMap(fgNativeEnv);
}

그러나, 여기서 한가지 트랩이 존재했는데....(eclipse의 버그라면 버그이기도하고...)

이 디버그 모드로 실행할때, 항상 동일한 결과가 나오지 않았다.
실행하려는 프로젝트가 jre를 참조하면 debug모드로 실행해도 원래값이 출력된다.
jdk로 실행했을경우 에만 대문자로 나온다.

왜 그런지는 집에가서 좀더 적도록하고.. 우선..


더 궁금한것은 왜 이클립스 jdt 개발 팀은 디버그 모드일때 원도우 시스템만 대문자로 바꾸었을까?


나의 한계이다.
하고있는 일이 eclipse rcp위에 올라가는 일을 하고있고...

주변에 블로거나 알았던 분들의 대부분은 웹어플리케이션 개발하는 하는 부분들이고...
블러거들을 돌아다니다 보면, 이것 참 격세지감을 느낀다.
거의 외계어 수준의 용어들을 보게(?)되고..
내가 알고있는 eclipse platform에 대한 기술은 답보가 아니라, 거의 퇴보 수준이다.

예전에 노트했던, android나 기타 등등은 점점 멀어져가고..

몬가 이슈가 필요한 때?

목요일, 11월 20, 2008

오전에 데모를 끝내고, 개발팀과 이사님과 함께 고문님이 점심을 사주셨다.
차이??(?) 중국레스토랑에서 점심을 먹었는데...

갓난쟁이를 데리고(?)있는 애기엄마들이 무척 많았다.
주변에 타워팰리스며 고급 주택단지여서인지.. 일상적인(?) 점심을 먹고있는듯 하다.

그 레스토랑은 불경기와는 다른세상이고, 그 주변사람들도 다른 세상인듯하다.
xper그룹에서 캔트백아저씨의 방한을 타진하는 이야기가 올라왔다.
가려고 준비한 ibm aix교육을 반납하고 혹시나 올지 모르는.... 오버하는 지도 모른다.

교육비나 참가비가 100만원, 150만원정도해도 갈수있으리라...면서....

일요일, 11월 16, 2008

금요일에 주문한 책이 도착했다.

할베가 추천한 리스크
현주니가 추천한 나쁜 사마리아인
우연히 발견한 내 고향은 전라도, 내 영혼은 한국인

우연히 발견한 내 고향은 전라도.. 이 책은 그냥 제목만 보고 사버렸다. -_-;;;
토요일 받자마자 다 읽어 버렷다.
저자 인요한 의 자서전이자, 한국 근대사의 자서전을 보는듯하다.

그의 가문은 4대에 걸쳐 한국에서 선교를 하고 있고, 전주에서 태어나 순천에서 자랐으며, 한국에 살고있는.. 껍데기는 미국사람이지만, 속은 한국 사람이라고 자신을 소개한다.

윌리엄 린튼(인돈, 한남대 설립)이 그의 할아버지의 할아버지이시다. 그는 22살의 나이에 한국에 왔다고 한다. 그는 유진벨(배유지)의 딸인 샬렛벨과 결혼하였고, 그의 자식들 또한 한국에 뿌리내리고 살고있다. 교회와 학교 병원을 지었으며, 자신의 고향에(정확히 말하면 할아버지 교향 미국에, 그의 고향은 전주이므로) 한국에 대한 소식을 알렸고, 호소 했고,
지금은 북한에 그 사랑을 전하며,
멀어진 멀어져가는 한국과 북한의 다리를 만들고 있는듯하다.

책의 말미에 요사이 한국교회는 생각해 보아야 한다는(2006년에 출판 되었다) 글이 있었다.
2008년이 요즘 한국교회는 린튼가를 어떻게 생각하고 있는 것일까?
커져버린 교회, 장로인 대통령, 거짖말 장이 위선자 가진자들과 동일시 되는 교회, 교인들... 나

한국이란 나라의 사람들은 리튼가에 대한 고마움이 있을까?
누군가 도움이 있었고, 도움이 필요한 누군가가 있다는 걸 알고 있을까?
작년 아프카니스탄에서 있었던 일과, 한국사람들의 반응이 못내 씁쓸할 뿐이다.


그리고 부끄럽다. 감사하다.
누나가 살고있는 순천에 가면, 인요한님의 어머니가 살고 계시 댔는데... 아직도 병원에서 사람들을 볼보고 계시겠지. 가면 그분께 무궁화꽃(?)이라도 들고 찾아뵈야겟다.

정말 감사하고 고맙다고...

ps) 5.18 이야기와 엠블런스 이야기는 미처 알지 못했던 이야기도 있으며, 거리에 엥엥거리며 응급환자를 이송하는 흔히 보는 엠블런스의 도입도 가슴아프네요. 엠블런스가 없어서 택시안에서 돌아가신 휴린튼(인휴)분을 계기로 그분이 죽은지 8년만에 조의금으로 모아진 4만달러가 한국에서 최초로 만들어진 엠블런스이야기...

금요일, 11월 14, 2008

화장실을 다녀와서 사무실에 들어서려는 순간 어느분이 하나은행 카드를 만들어 달라고하신다.
갑자기 요청한 거라 어찌나 당황스럽던지...

실적때문에 그렇다며, 만들어 달라고 .....
나이는 40대 초,중반정도 되어 보이시는데..
통 사정하시는 것을, 마지못해 사양했다. -_-;;;;;;;;;

예전에 카드 만들어 달라고 하시는 분들은 저러지 않으셨는데....
나름 자존심과 ??등이 있었는데....

회사앞에있는 l? 스토어 가전제품 파는곳에서도 폐업으로 인해, 전시품 50% 할인을 한단다.

경기가 안좋은것을 실감한다.

휴~ 살떨린다.

'아저씨 미안해요.'
인터넷을 통해 보게되는 두가지 극단이 있다.

하나는 이명박정권과 그 반대.(사실 입장에 따라 중간도 있지만...)

잘 잘 못을 떠나서더라도, 너무 심하고 심하다.

휴, 새롭게 아이가 태어나고, 가정이 있는 나로서는...
어떻게 사는 것이 나와 나의가정을 지키는것일까?
더이상 정부나 정부의 주구 노릇을 하는 언론의 이야기는 믿어지지 않고...

할배 말처럼 서바이벌 랭귀지를 하루빨리 습득해야겟다.
기존의 게으르고, 이상한 생각을 바꾸는 작업또한 무엇보다 중요하겟다.

요기에 할배가 추천한 책목록
http://palix.tistory.com/42?srchid=BR1http%3A%2F%2Fpalix.tistory.com%2F42

목요일, 11월 13, 2008

Google Android

당분간 Adroid와 영어에 집중해 볼까한다.
시간이 남거나 짜투리 시간에 보는것이겟지만, 말이다.

편식하는(?) 나의 식습관을 고쳐보려는 시도이기도하다.
지금까지 windows, java와 java 친구들과만 친하게 지냈는데,
이제부터는 linux, unix나 c와 c친구들과도 친하게 지내보고 싶다.

kernel부분을 좀 뜯어보고 싶은 욕심도 생기고..

맥북을 깔끔하게 정리를 시켜 준 다음에, 천천히 시작해 봐야지.

수요일, 11월 12, 2008

아무 드린 것, 한 것 없는데, 내게 혹은 나의 가족에게 너무 잘 해주시는 분들이있다.

세상에 태어난 아이의 안부를 물으시고, 필요한 것을 챙겨주시는 분들...
그런 모든 분들께 감사를 드릴 뿐이다
감사합니다. 꾸벅

화요일, 11월 11, 2008

찬이 형제사진



왼쪽 쪼매난 놈은, 엄마 밥줘.. 밥주고 찍지 하는듯~~
은근 귀엽다는...

Google Android

Google이 Android를 Open source 프로젝트화 했다는걸 아시는 분들이 많을 거라 생각 합니다.

http://source.android.com/

다운이나 받아보려고(???) 했는데, 대략(http://source.android.com/download) 다운받는데 매우 친숙한 Windows 버전이 안보인다. Linux, mac용 만 있다. 후하하하하
이 부분에서 엄청나게 웃어버렷다.

우리 구글 형님이 라이벌인 마소 큰형님을 제대로 까시는구나..... ㅋㅋㅋ


경민이에게 이야기를 했더니, 구글이 개념을 안드로메다로 보냈다는 이야기도 했으며,
마소와 맞짱을 떠보겠다는 구글의 강력한 의지가 보이기도 하다.
위의 안드로이드 로고 처럼, 뚜껑 열린 마소분들이 눈에 선하다. 프프프...
혹은 자신의 모든것을 보여주는 구글이 대단하다.

구글이 새로운 os를 만들고있다는데....
기대가 될 뿐이다.

그나저나 난 64비트다 -..-;;

ps) 물런 커뮤니티나 등등에서 사실관계나 사정(?)은 알아봐야하고, 위의 이야기는 전적으로 나의 생각만이니..

토요일, 11월 08, 2008

1분경영



회사 도서관(?)에 있는 책을 한권가지고왔습니다.
사실 경영이니, 업무 효율화, ~~관리 라는 책을 별로 좋아하지 않습니다.

이런류의 책들은 어찌 됐든 나를 더 피곤(?)하게 한다는 생각이 들어서 이지요.
1분경영이라는 책을 들고 오면서도 그런 생각에 찜찜(?) 했습니다..

책도 두껍지 않고 공감가는 내용도 많아서 괸찮습니다.

책의 저자(켄 블랜차드, 스펜서 존슨)도 이미 여러번 읽어본 유명한 사람들이었네요.

금요일, 11월 07, 2008

키보드, 마우스 이야기

내가 사용하는 키보드 마우스는 Microsoft Natural Wireless Lager 7000 세트를 사용한다.

열명에 아홉명은 이상하다, 독특하다는 반응이 대부분이다.
그도 그럴것이 쫙벌어진 인체공학 키보드에, 무슨 수류탄도 아닌 무식하게 큰 마우스때문일것이다.

내가 인체공학(?) 키보드를 사용한지는 대략 2001년때로 올라가야한다.
모팀장님 사용하시는것을 보고 그날로 거금 7만원(?)을 주고 ms에서나온 키보드를 구매해버렸다. --;;

물런 랩탑을 가지고 다녀도 집에서나 고정된 장소에는 키보드를 사용한다.
오랫동안 이 키보드를 사용하면서 나의 어깨를 장시간 노동속에서도 덜 피곤하게 해준다는것이다.
마우스도 마찬가지고 말이다.

가격차이에 비하면 나와 같은 개발자들은 하루중에서 절대적으로 많이 사용하는 기기이다.
물런, 모니터와, 헤드폰도 그 중 하나겠지만..

의자도 그렇고... 끙.. 회사에서는 의자도 집에서 사용하는 듀오로 바꿔야 할까도 싶다(???)

수요일, 11월 05, 2008

토비님의(http://toby.epril.com/?p=475)
글을 읽다가 올해도 어김없이 SpringOn을 한다는걸 느꼈다. 세삼. 느꼇다. 연말이구나.

2년전에 내년에는 꼭 저길 사비로라도 가야지 했는데..
작년에 못갔고, 올해도 가긴.. 아무래도 힘들겟지...

이젠 웹을 안한지도 시간은 점점 흐르고 있고..
2년전이나 지금이나 별반 틀려지지 않는 나의 언어수준 또한 문제이다.

반성해야겟다.

엉엉엉~~~~~~

우분투와 전쟁중.........

어제 한바탕 show한 이야기를 해야겟다.

우분투가 8.04인스톨 되어 있는데, 8.10이 새롭게 나왔단다.
그래서 호기롭게 재깍 인스톨했다. 꿀꺽....

인스톨까지는 아주 나이수하게 되었다.

문제는 vmware를 시작하자마자.. vmware가 몬가 새로 설치해야한다고 메시지 자동으로 뿌려준다.
그래 설치해.. 명령내리고.. 설치도 잘 끝났다고, 친절(?)하게 메시지를 보여주고..
vmware를 기동시켰다. 설치된 2003 server도 잘 시작된다. Ctrl+Alt+Del을 눌러서 로그인 패지를 띄우란다. 아싸.. 조쿠나~~하면서.. 열나게 버튼을 때려갈겻다. --;; 로그인 다이얼로그가 안뜬다.
으씨~ 먼가 불안하다. 아뜨... 맨 오른쪽 숫자키패트의 Del을 누르니 그때야 다이얼로그가 뜬다.
로그인해서 들어가서는 방향키와 del키등 그쪽 줄의 버튼이 먹질 않는다. 아뜨~~ x됐구나~~~

쉬발쉬발 거리면서.. 속으로, 우분투까는데.. 한 20분이면 되는데...
다시깔지 이런 생각이 들었다. 몇일전에 죽어라 드라이버도 잡아보고 했으니.. 별이상있겠나 싶어서..... 이런 똥깨 8.10은 버리고 8.04로 살아야지 하면서...

자자..

우분투 8.04인스톨 시작...
인스톨끝... 아싸.. 이거 인스톨하면서 나를 애간장 태우는 넘 하나는 그래픽카드 드라이버 인스톨하는 거였는데(ati hd 3850).....

홈피에 가보니 8-10 버전으로 드라이버가 새로 나왔다.
잽싸게 받아서 평소에 보던데로 드라이버를 설치하고 잡았다.
물런 그래픽가속모드어쩌니하는부분도 예전(?) 처럼 설정하는데..
무슨 파일을 바꾼다고하길래... 이건 몽미 이러면서.. 다 바꿔줫다. 착하기도하지..

설치후 리붓은 필수이므로 리붓...

리붓은 됏는데.. 젠장... 화면이 사정없이 깨진다. 하얗게 흰둥이 나오기도 하고....
으뜨발....... 꿀꺽.............

이젠 으짜지...

다시 우분투부터 설치...
다시 그래픽카드 부분....
다시 그래픽 드라이버 설치...
몬가 글픽가속기 요넘이 찜찜했던 터라... 요거 설정안하고 리부팅...
아뵤... 잘된다. 멀쩡하다. 드라이버 잘 올라오고... 아싸..
가속모드 설정하려고 화면 열었는데.... --;; 설정 다 되어 있다. --;;
몽미. 새로나온 글픽드라이버 설치됨서 가속모드설정도 알아서 해준거????

젠장 .............

이단 날라차기로...

월요일, 11월 03, 2008

cvs와 local 자원, 운용서버의 동기화

Naver Eclipse Plug-in/Rcp 카페에 적은 글.

혹시라도 이런 생각도 해봣는데요.

예전에 형상관리 서버에 있는 소스와 실제 리얼서버에 있는 소스가 같은지 확언할수 없을 경우도 많이 있을 겁니다.
그런걸 같다라고 동기화 해주는 프로젝트도 생각해 봤습니다.
물런 이건 시간좀 걸리고 몇가지(?) 문제가 있긴 합니다만...

이런 프로젝트 해보실분은 없나요?


나중에라도 여유가 생긴다면.. 시작해 볼지도 모른다.

일요일, 11월 02, 2008

회사 컴퓨터 ubuntu desktop 8.0.4 64 bit설치했다.

회사에서 사용하는 컴퓨터를 ubuntu로 바꾸었다.
아래 포스트에도있지만, 골수 원도맨이라 리눅스는 먼나라 사람들이 사용하는 서버용 시스템이었으나, shell과 관련되면서 os를 바꾸게 되었다. 물런 맥으로 바꾸려는 시도가 상당히 있었지만...

거의 3일(?) 동안 작업했다. -..-;;; 아움아라~
이것저것 찾아보고, 물어보고, 도움도 받고 하여 설정은 끝낸듯하다.
거의 원도우와 같아져 버린 우분투 이다.

우선 그놈 커맨더, 카이로 독, vmware를 기초로 작업환경을 꾸몄고,
vmware에는 두개의 window 2003서버를 인스톨하여 개발환경을 만들었다.
물런, eclipse 3.4로 우분투와 운도서버에 다 인스톨 하였다.
아 메일은 우분투를 인스톨하면 설치되어 있는 에볼루션이 익스체인지 서버의 메일도 가져다 주어서, 별 문제는 없었다.(처음에는 오동작 하는지 알았으나, 메일의 갯수가 수천개에 달하니, 그거 싱크하느라.. 삽질은 좀했으나.. 몇시간 놔두니..)
메일이 오면 알려주기도 하고..
항상 사용하는 mindmanager 는 리눅스용이 없어서, 모든 os를 지원하는 freemind를 사용해 봐야겟다. 우분투에서는 화면이 좀 깨졌는데.. 맥용은 어떨지 모르겠다.
자바로 만들어져서.. 모든 os호환인지도 모르겟다.


자, 그럼..
집에서는 맥북이 있으므로 os는 당연히 레오파트 형님이 되겟고,
회사에서는 우분투고 은행이나 activex가 필요한 곳에서는 vmware를 통해 원도가 설정되어 있다.

토요일, 11월 01, 2008

shell을 자바로 바꾸기 나의 결론

shell로 된 프로그램을 자바로 바꾸는 나의 결론은 부정적이다.

shell과 자바가 언어의 지향하는 바가 틀리기 때문에 그렇기도 하다.
예를 들어서
L_ROLE=`echo "$L_INFO"|$LKBIN/cut -d' ' -f2 2>NUL:

이 명령은 우리가 아는 데로 변수 L_INFO의 값을 ''으로 분리해서 2번째 결과 L_ROLE로 넣어라는 명령이다. 또한 에러는 무시하고 말이다.

그럼 자바로 바꾸면 대략 다음과 같다.
String L_ROLE = L_INFO.split(" ")[1];

이렇게 바꾸게 된다.

흠. 위의 둘다 암호 같기는 일반이지만, 자바 프로그램을 저렇게 짜야 하는지가 의문 스럽다.
또한 전체 수백줄 되는 코드를 저렇게 만들면 코드는 거의 암호 수준이 되고...

태생이 틀리고, 쓰임새가 다른 두 코드를 바꾸려고 했던 것 자체가 문제인듯 싶다.

월요일, 10월 27, 2008

사랑이가 태어나고 오랫(?)만에 회사에 출근했다.

잠온다.
잠온다.
잠온다.
잠온다.

마지막 퇴근할때 만들다 프로그램은 암호 비스므리하고..
별 의욕또한 들지 않는데...

잠온다.

월요일, 10월 20, 2008

Eclipse 3.4 JAVA Export Wizard

Eclipse 3.4 JAVA Export Wizard에 아래와 같은 기능이 추가 되었다.

java main이 있는 클래스를 executable jar로 만들어주고, executable jar로 만들어주는 ant파일도 생성해 주는 wizard이다.
써보니 상당히 편리하고, 더군다나, ant파일도 만들어주니, 내가 원하는대로 수정해서 사용할수 있어서 아주... 좋다.

저런 위자드 비스므리 한것을 ant로 만들어 썼는데....
만들기는 어렵진 않지만, 일단 만들어진 것이 있으니, 유익하다는...
이런면이 Eclipse의 매력이 아닐까싶다.

일요일, 10월 19, 2008

shell 프로그램을 자바로 옮겨 보려고 한다는 글을 적었습니다.
지금까지 shell 프로그램을 해본적이 없고, 인스톨 할일이 있으면 가끔씩 봐온것이 다 입니다.

그 상태에서 프로그램을 옮긴다고 했으니, 얼마나 무모한 도전이었는지....

제로배우는 UNIX SHELLS 유닉스 쉘 바이블: 유닉스∙리눅스 쉘 프로그래밍 완성
의 콘쉘 부분을 보고 있습니다.
아아아, 머리 깨지겠습니다.

한참부족한 저의 무모함에 조의를.....
쉘프로그래머들에게 존경을 표현해야겠습니다.

월요일, 10월 13, 2008

겸사 겸사 GMF, GEF, EMF 요런넘을 다시 보고있다.
헤헤, 작년부터 구라쳐온 Vocabulary plug-in에 게임 비스므리한것을 넣어볼까도 싶다.

물런 구라로 끝날지도 모르고.... --;;;;

몬가 만들어 볼래도, 마땅한 아이템이 딱히 없다는 것이 문제라면 문제이다.
아이폰 출시도 내년으로 미뤄진다고 하고, m480을 사볼생각이다.

일요일, 10월 12, 2008

shell 프로그램을 자바로 바꾸려고 시도하는 중입니다.
이 시도가 옮은(?) 것인지 모르겠습니다.

흠흠..
지금까지 shell을 왜 적극 사용하지 않았는지 살짝 억울 하네요.

금요일, 10월 10, 2008

이번주에는 새벽 3시쯤에서 잠을 자서인지.. 회사에서 너무 피곤하다.

예전(?)에는 3시에 자던 4시에 자던 시간은 그리중요하지 않았(?)는데....

나이를 먹어감이 확실한듯..
아님, 긴장이 풀겻나...

전자에 조금더 마음이간다는...
Suse 10.4와 Ubuntu 8.04를 vmware에 인스톨 해보았다.
사실은 골수 window사용자 이므로 나의 이런 시도는 대단히 이상한것이기도하다.

어느정도 맥킨토시의 영향이라면 영향이다.

좀 특이한것은 맥킨토시보다 위의 두개가 더 편하다. --;;
더 빠르다(?). 좀더 다양하다. ????

그러면서 iPhone의 위력에 놀랏는데,
결국은, 내가 맥킨토시를 구입하게 된 배경은 iPhone 이었고...

맥과 리눅스 중에 기업을 상대로 파급력이 있는 것은 무엇인가?
맥과 리눅스 중에 일반인을 상대로 파급력이 있는 것은 무엇인가?

어느것이 생각에 더 가망성이 있어 보이는가?

앞으로 맥이 일반인 사용자 층을 넓혀가겟다고 나름 예상을 해보았는데..
(이건 순전히 iPhone때문에..)
생각을 고쳐먹어야할지도 모르겟다. 마켓팅을 고려한다면야.. 맥이 짱일지도..

목요일, 10월 09, 2008

요 몇일 모좀한다고, 좀 늦게 잠을 잣더니만,.........................
늦게 자는 동안은 무척 즐거웠는데......................

회사에서 열나 피곤하네?
아마 다른 사람이 내 얼굴을 보면 눈이 감겨 있지 않을까? -_-;;;

짱남....
이런거 슬슬해도 금방 하는 넘들에게 무지짱나고..
꼬치님이 말했던 것처럼 돈 많아서 딱히 고민안해도 되는 넘들에게는 더 짱남.

화요일, 10월 07, 2008

휴, 아침 황금시간에, 딴짖 아닌 딴짖을 하고 돌아다녓다.
주변의 눈치에 아랑곳 하지 않고, 즐겨 찾기를 해놓은 블로거들을 찾아다녓다는...

솔직히 일도 잘 안되고, 그래서 모...

요사이 회사에 비치된 각종 교양서들을 읽기 시작했는데..
어제도 '화(angry)'라는 책을 읽다가, 환율이 미친듯이 1300을 돌파하는것을 보면서, 나 또한 패닉 상태...

크게는 이 나라가 어캐 갈려나 싶고, 나는 어캐 반응해야 하나 싶었다.

몇 개월전 경제전망시 환율이 950원대를 하고 있었으니, 대략 1달러에 350이 오른것.
'유로화'를 구매하세요. 라는 분명한 글이 달린 아주 논리정연한 글을 읽고 넘어가 버렷다.
그리고 그 글을 읽고 난 다음에 '예금'과 '적금'을 들어 버렷으니...

아주 작은 기회라면 기회인데.. 바보 같은 짖을...
이 나라는 어떻게 될까?

금요일, 10월 03, 2008



어제 드뎌, SMT Elysium Boot White 를 사버렷다.

프레임은 헴머 1004
훨은 인라인 버스
베어링은 아벡7 트윈캠 NTN 일본 수입품




요정도다.

첫날은 아주 대판 넘어지고. --;; 처음 부터 과욕이 화를 부른것이고.
둘째날 타는데 뒤굼치가 까졋다.

두시간 넘개 타서.. 이것도 욕심이 과한것이다.

목요일, 10월 02, 2008

네이트온으로 친구 신청이 들어왔다.
학생이시고, 질문이 있으시다며, 친구 신청하신다.

메신저로 이런 저런 이야기하다, 질문하러 찾아온다고 하신다.
설마하면서, 배짱으로 오시라. 오시기전에 연락하고 오시면 언제든지 오케이다.
꽁짜는 없으니, 각오하고 오셔야 한다고 단단히 협박했다.

설마 설마했는데... 찾아오신댄다. -..-;;;;;;;;;

그리고 진짜로 책과 노트북 들고 왔다. 0_0;;;

저녁도 거른채 질문과 답변이....
10시30분에 편의점에서 라면으로 저녁을 먹었다. 적당히 끊고 저녁을 사드려야 했는데...
흠흠.. 욕먹을 간지..

허덥한 나에게 이렇게 라도 오시니 작은 도움이 되셨음 좋겠다는..

그리고 뇽님의 그 열정이라면 무슨일 무슨 선택을 해도 다 잘될거라 생각해 봅니다.

일요일, 9월 28, 2008

요새 맥킨토시라는 아이랑 놀고 있습니다.

아직은 낫설고 어설프지만, 나름 재미를 느끼고 있지요.
무언가 배우고 알아갈때, 즐기는 것이 얼마나 중요한것인지요.

사실 iPhone에 무언가 생각하고 있는것을 심어볼 요량으로 시작 했습니다만 맥킨토시를 알아가는 재미가 솔솔합니다.

iPhone에 코딩을 하거나 그러기 이전에 맥킨토시와 충분히 친해지는 시기를 가져야 할 필요성이 더 느껴 집니다.
맥킨토시, 혹은 아이폰이 지향하는 지점이 어디인지, 사용자의 습관은 무엇인지, 혹은 일반적인 구성이 무엇인지등등 거의 모든것이 새롭기만 합니다.

아마 지금 개발해버리면 분명 지금까지 가지고 있는 선에서 개발을 시작할것입니다.
자바베이스인 환경설정과 사용자 ui등등이 되겟지요. 그것이 틀린것이 아니라 맥킨토시 입장에서는 맞지 않은 옷이 될것 입니다.

새로운 곳에 둥지를 옮겨도 마찬가지 인듯합니다. 이전 나의 둥지가 어떠하든, 새로운 둥지에 맞는 나의 역활과 반응, 기존의 질서를 헤치지 않은 선에서의 개혁등이 필요하겟지요.

토요일, 9월 27, 2008

나에게 필요가 없는 부품이나 것들을 팔거나 주거나 버리거나

나에게 필요가 없는 부품이나 것들을 팔거나 주거나 버리거나 하고있다.

얼마전 중고로 판 x61t용 고장난 키보드나 어댑터도 그렇구요.
마우스도 그렇지요.

이번주에 카페를 통해 3분이 질문을 하셨습니다.
질문의 요지는 답은 모냐? 이었습니다. 사실 답을 아무에게도 해주지 않았습니다.
제가 답을 내줄 정도의(?) 내공도 없을 뿐더러 답이 그분들에게 장기적으로 결코 도움이 되지 않기에 그렇습니다.

어느 책에 '올바른 질문을 하는것이 답을 아는 것보다 중요합니다.'(?, 이건 책에 써진대로 보고 고쳐놔야겟어요., 고쳐짐) 라는 글귀가 있었습니다.
질문 하신 분들중에는 아무도 올바른 질문을 하지 않았습니다.

그러면서 생각 올바른 질문이 중요하구나, 하고 생각해 보게 됩니다.

지금 하고 있는 것들에 올바른 질문을 하고 있나, 생각해 봅니다.

화요일, 9월 23, 2008

한 달간 게임을 금한다.

읽고싶은 책도 많고, 하고 싶은것도 너무 많아서..
매일 새벽에서야 잠을 자는데...

잠을 좀더 자고싶고, 하고 싶은것도 더하고 싶어서...
하나를 포기하기로 했다.

그 중에서 첫번째 대상은 게임.

Company Of Heroes 야 좀 기다려줘.....

토요일, 9월 20, 2008

MacBook을 사용하기 시작한지 일주일쯤 되는듯 하다.

처음에는 한영키도 바꾸지 못했고, 회사의 파일서버에도 들어가지 못했으며, 음악이나 영화도 듣지 못했고 이클립스도 사용하지 못는데...

모든 것이 불편했는데, 사용하면서 mac의 매력에 점점 빠져 드는듯 하다.
Space나 iTunes도 그렇다. Eclipse의 몇몇은 원도우용에도 똑같이 적용해 주었으면 좋겟다.
xcode, Interface Builder도 나름 .... 겨우 몇시간 보고 평가 하긴 이르지만...
objective c도 그렇고...

토요일 강남 토즈의 오프 모임 후에 집에 오면서 생각하였다.
내가 비오는 이 토요일, 가족과 함께 즐거운 시간을 보내도 부족하고 아까운 시간을 여기와서 이것을 들어야 할까 생각해본다.

금요일, 9월 19, 2008

http://www.toadsoft.com/

토드 공짜 제품 목록이다.
이런걸 이제야 알다니 억울할 뿐


Toad for Oracle Freeware
Toad for Oracle Freeware Update

Toad for DB2 Freeware

Toad for MySQL Freeware

Toad for SQL Server Freeware

목요일, 9월 18, 2008

Eclipse 3.3에서 만들고있는 제품을3.4로 포팅하였다.

우선 몇가지 문제가 생겼는데, 첫번째는 상수가 몇개 없어졌다. --;;;;;;;
그냥 deprecated된것도 아니고, 없어졋다. --;;;;;
ㅋㅋㅋㅋㅋㅋ 아직은 이클립스 좀더 성숙해야할 듯하다.

두번째 희안한것은 도움말을 이클립스에서 실행하면 잘 나오지만, product로 배포했을 경우에 jetty 클래스가 없다고 나온다. 결론은 jetty plug-in을 정의하고 배포한 후에야 정상 동작한다.

좀 당황스럽다는

Eclipse Ganymede(3.4)의 소스

Eclipse Ganymede(3.4)의 소스를 다운 받았다.

모두 1.41GB에 180,805개의 파일, 56,351폴더로 구성.

크긴크다.

화요일, 9월 16, 2008

한비야님의 중국견문록을 읽다가 얼마나 무식하게 책을 봐 왓는지...

그래서,... 급 수정을 해야겟다.
영어공부 -
1) 하루에 정해진 분량(?)을 큰소리로 두번 읽고 해석해보고, 모르는 단어는 외운다.
2) RE START ENGLISH를 읽고 따라해본다.
3) 정해진 분량을 꼭 외운다.

외운것은 외워서 이 Blog에 적어본다.

요정도를 실천 사항으로 둬야지...

오늘 빌려온 책은 김석철님의 '20세기 건축' 책을 읽으면서, 전문으로 글쓰시는 분이 아닌듯한 초보 냄세가 난다. 그 부분이 오히려 순수하고 멋져보인다는...

사실 글의 깊이는 잘 모르겟다.
건축을 전혀 모르니까...

들어가는 글 중에 내가 살고 있는 서울에 대해 얼마나 모르는지... 실감한다.
내가 살고 있는 한국에 대해 모르는 것 처럼...

월요일, 9월 15, 2008

매킨토시를 집에 가지고 와서 os 설치를 마쳣다.

원도우와 달라 영 불편하다. 나의 몸에 맥이 맞춰주기를 바랄뿐이지만.. 어림도 없는 것이고...

맥 친구야, 앞으로 잘 지내 보자.

일요일, 9월 14, 2008

나의 사랑스러운 노트북을 판매하기로 하였다.
음냐 X61T 7764CTO - 타블렛 모델에 1400까지 나오는 괴물급 노트북인데..

회사를 옮기고 회사에서 사용하는 괴물급 데탑이 존재하므로, 괴물급 노트북이 필요없게 된것이다.

사실 필요없게되서 판매한다기 보다, IPhone용 응용 프로그램으로 장난 쳐보 싶은 생각이 살짝 들었다.
서브 노트북도 필요하기도 하고. 이런용도로 괴물을 놀개 할수도 없으니.. 좋은 주인 만나기만 바라야지

메냐 중고 장터에 올려 놓으니, 금방 팔렸다(가격을 너무 후려 친건지... -_-;;)

구입시 220만원 + 슬레이브을 125만원에 판매하게 되었다.
끙, 거의 60% 수준의 중고 가격 형성이다. 타블렛이 이런 저런 사연이 많은것 치곤, 잘 받은거라고 생각해 본다.

새롭게 구입할 맥은 MB061KH/B 이며 사양은 다음과 같다.
Core2Duo 2Ghz / 2.5GB / 80G / GMA X3100 / 블투 / DVD 콤보 / 박스셋 / 사용감있고 새것같지는 않습니다.

지금 사용하는 노트북보다 사양이 살짝 위인 모델이다. 물런 타블렛이 안되지만...
예전 부터 조금씩 알고 지낸분이 계셨다.
상당히 앞서 나가시는 분이라 생각되서 자주 가까이 하고 싶었던 분이었어요.

토스트가개를 하고 계시는 분이었는데, 어제 아이가 그 가개에서 복숭아티를 먹고 싶다고 졸라서, 겸사겸사 놀러 갔더랬습니다.

인사를 하고, 아이의 복숭하 티를 가져오시면서, 저의 아이스 커피도 덤으로 주셨습니다.

그러면서, 조갑제가 지은 '거짖의 촛불을 끄자!', 라는 책과 '라마단 30일....' 책을 주셨습니다.

순간 뒤통수를 얻어맞는 느낌에 정신이 하나도 없어졌습니다.

배신감에 몸서리 치고 있습니다. 그분과의 관계를 어떻게 가져갈 것도 의문입니다.

ksb의 어느 노PD가 방송이 권력의 주구 노릇을 하고 있다고 어느 시상식에서 일갈을 했습니다.
kbs는 힘이 약해서 어쩔수 없이 주구 노릇을 하고 있다면, 이 시대의 교회는 주구를 자청하는거 아닌가 합니다.

어제 부터 오늘도 내내 못내 씁쓸하고 어렵고 안타갑고.. 미안스럽기 이루 말할수 없네요.

ps) 그렇다고 내 자신이 그렇게 정직하거나 깨끗하거나하지 않습니다.

금요일, 9월 12, 2008

추석 때 집에 가지 못하는 관계로 퇴근하면서, 회사에서 책을 몇권 빌려왔습니다.

한비야님의 중국견문록,
존 맥스웰 생각의 법칙 10+1 입니다.

중국 견문록을 읽다보니, 몇년째 지리하게 하는것도 아니고 안하는것도 아닌 나의 영어에 다시 도전하고 픈 열망이 드는군요.

다시 계획을 만들어서 지켜보고, 2009년 까지는 중등 수준의 영어 실력을 가져봐야겠습니다.

오늘 인라인을 타면서, 주변에서 아이들의 웃음소리에 흐뭇한 미소가 넘치네요.
순간 죽을때가 됐는지 싶었습니다.

인생의 재미인지요. 아이와 함께 하는 이시간이 행복입니다.

Cola: Real-Time Shared Editing

http://www.vimeo.com/1195398?pg=embed&sec=1195398

나도 이걸 해보고 싶다고....

흠흠.

extends TestCase

TestCase를 작성해서 프로그램을 하는것이 어느정도 버릇처럼 되었는데, 이걸 실제로 사용하는것은 좀.. --;;

단순히 main 메소드를 만들기 귀차나서 하는 작업이 아닌가 싶을 정도로 생각하는 나인지도 모르겠습니다.

TestCase를 사용해야하는 좀더 근본적인 접근을 못한채, 아주 초보적인 수준에 머물렀네요. --;;

만들어논 몇개의 TestCase가 오동작하는 걸보면서.. 조쿰 회의가 드네욤

수요일, 9월 10, 2008

localization 작업의 불편함이란...

작업을 해 놓으면 한글이 ISO-8859-1로 바뀐다.
바뀐면 일단 한글이 깨져 보이게된다. 디폴트로는 MS949 를 쓰기때문에...

한글을 검색하려고해도 검색안되고 불편함에.. 편법을 동원하곤하는데.. 으아암...
짜증난다는...

그래서 이클립스 검색을 수정하였다.


더 플러그인 다운로드와 자세한 정보는(http://cafe.naver.com/eclipseplugin/2605)
를 참고.

끙... 이클립스 만드는 팀에 영어가 아닌 로컬 개발자들이 좀 있었으면 신경썼을텐데.. 아쉽다.
이런코드 기여를....
가끔 아니, 사실 아주 자주, 나 자신이 얼마나 초라한지 느낀다.
그러기에 내가 더 신에대해 부인할수 없는가 보다.

주변에 있는 그 천재 같은 많은 사람들은 도대체 그 열정과 지혜는 어디서 나는 것일까?

목요일, 9월 04, 2008

몇일째 회사에서 판매하고 있는 제품군에 대한 교육을 받고있습니다.

특정부분 제품만도 너무나 많고 많습니다.
어떻게 구현했을지도 짐작이 안가는엄청난 기능들과 스펙들하며....

제품을 만드는 사람 입장에서 같은 종류의 다른회사 제품 설명을 들으면서, 살짝 기가 죽는지도 모르겠습니다. 그리고 너무 재미있습니다.

오전 오후 교육후에 저녁시간 남아서 밀린코딩(?)을 하느라.. 애고 좀 피곤하네요.

금요일, 8월 29, 2008

1-2일 정도 beanshell 에디터를 찾았다.
다른 오픈소스에디터도 보았고...

찾다가 오늘 느낀점은..
1주일이 남았으니.. 그냥 만들어보자는.. 이렇게 쉬운 결론을 왜 못 냈는지...
그러다 안되면.. 모... 가져다 쓰던지.. 아님 에디팅 기능이 없는걸로 오픈하던지... 일정을 잡으면 되니까능.

일주일동안 에디터 만들기 시작...

목요일, 8월 28, 2008

인라인을 미친듯이 타다 2틀 연속 못타고있다.
사실 안타고 있는지도 모른다.

주변에 개념없는 사람들과 싸움을 하는 통에.. 시들해 졌는지도 모르지.

몇일전엔는 상대방에게 이 명박같은 사람이라는 말까지 했을정도다.
주먹만 안휘둘럿지.. --;;

개념을 밥말아먹은 인간이 왜 이리 많은건지..
남자건 여자건 늙거나 젊거나....

자기자식만 안다치면 남이야 어찌됐건, 인듯 싶다.
이 개념없는 작자들 얼굴을 외워버렸다.

같은 동네사는 사람인데.. 이리 싸워야 하나.. 내가 좀 불편하면 괸찮치 않을까 싶다가도..
사람이 다치는 문제이고, 내 아이가 다칠수도 있기에.. 좀 민감한듯도 싶다.

함께 타는 아저씨는 자건거와 부딫혀 4일간 입원도 하셨으니.. 남의 이야기도 아니고..

손해보고 말고가 아니라, 다치고 다치지 않고의 문제이다.
조심해서 타면 되지 않겟냐고.. 혹은 인라인을 밖에서 타라고... 말하는 개념들도 존재하는데..
이건 막장인듯싶고...

담에는 막장인 분들의 신상을 조사해 보고 통계를 내 보고 싶기까지 하다.

화요일, 8월 26, 2008

요사이 본의 아니고 다른 사람이 만든 코드를 따라해보거나 분석하거나 답습(license, esf)하는 일들을 반복하고 있습니다. 그래봐야 기껏 몇일(?)이지만...

내가 아닌 다른 사람이 만들어논 코드를 이해하고 타이핑 하면서 많은 것들을 배우게 됩니다.

다른 사람이 만들어 놓은 소스를 분석하고, 코드를 타이핑 해보면서..
실망보단 나름 얻는것들이 더 많습니다. 타이핑하면서 내가 만들었던 코드를 수정하기도하고...
(이런 글쓰는 제주 없어라.)

코드의 사상과 철학등을 이해하게 됩니다.
아주 경험이 많은 사람이 만든 것이라던지...
자바 문법, 패턴은 훌륭한데 실무 경험이 없다든지...
코드에서 조금씩 냄세가 나기도 하지요.

물런, 개인적인 판단이기때문에.....

나의 코드에서는 어떤 냄세가 날까요?

아고.. 그냥 속으로만 판단해주세요. 내게 말해주지는 마세요.

금요일, 8월 22, 2008

눈물나와~




위의기사를 본 뒤에 머리에서 기사내용이 가시질 않습니다.
죽어버린 어머니, 익히지 않는 옥수수로 연명하며 엄마를 깨웠을 아이들.

휴~

상상만 하여도 끔찍하고 끔찍하고, 눈물납니다.
올림픽 야구중계로 한창인 지금, 주변에 힘들고 어려운 이들이 없었음 좋겠습니다.
일을 할라치면 위의 내용이 생각나서 자꾸자꾸 삼천포로 빠지네요.

어제 DSDP의 client 설정을 보았으니, 오늘은 efs(?)를 살펴보고 찾아봐야겠습니다.

목요일, 8월 21, 2008

요새 아저씨와 늙은 사람이라고 이클립스 채널에서 놀림을 받곤한다. -_-;;;

이 용어에 익숙치 않는데.. 흠흠..

요즘 eclipse ecf, eclipse dsdp, tm and rse, efs등등에 살짝 발을 담그는 중이다.
흠냐~ 무슨용어나?

기존 rcp, plug-in개발자들도 어려워할듯한..
새로운 개념은 아니지만서도, 각종 용어와 약어들이 벅차다.

수요일, 8월 20, 2008

곰털쓴 한금이

RES에서 기존에 있던 client정보를 수정하고 연결하면 안돼네..
지우고 연결해야 정상적으로 접속되고 사용되네...

일종의 버그인데.. 세션때문에 그런가?

이번주는 버그와의 전쟁을 선태해야할듯~

화요일, 8월 19, 2008

아 버그 투성이 EclipseShell~~

잘 돌아가던 beanshell script를 에디팅하기 불편하기도 해서 eclipseShell plug-in 을 통해 해볼 요량으로 가져왔따.

한두번은 잘 돌아가더니 계속 아래와 같은 에러가 난다.

Sourced file: sample.bshi Token Parsing Error: Lexical error at line 84, column 2. Encountered: "\uacc4" (44228), after : "":

at bsh.Interpreter.eval(Unknown Source)
at bsh.Interpreter.source(Unknown Source)
at bsh.Interpreter.source(Unknown Source)
at CallScript1.main(CallScript1.java:33)

끙 도대체 몬소리 인가 싶었다..

한참을 본 뒤에야.. script파일을 울트라에디트로 열어보고서야 원인을 알수 있었다.

eclipseShell이 interpreter(정확히 말하면 beanshell이나, jruby)하면서 아래와 같은 주석을 추가하는데 그 주석이 깨져서 나는 에러 였다는....

/* BEANSHELL REGION DELIMITER */

/* BEANSHELL REGION DELIMITER */


/* BEANSHELL REGION DELIMITER */
/*
/* BEANSHELL REGION DELIMITER */
BEANSHE
/* BEANSHELL REGION DELIMITER */

/* BEANSHELL REGION DELIMITER */

/* BEANSHELL REGION DELIMITER */

아웅~~ 좀...
노트북 X61T가 as기간이 만료 되고 있다.

물런 사용하는데 조금은 불편하지만, 미산이라 수리 받기가 워낙 힘들어서 미뤄두고있었는데..
더이상 미루기도 힘들다.

일본으로 보내 as받기 이런게 있었는데.. 아우 힘들어서...

놋북에게도 미안스럽고...

흠흠...
역시나 다른 사람과 의사 소통은 무척 중요 한듯 하다.
혹은, 다른 사람의 생각을 보고, 나를 보는 것도 무척 중요 한듯 하다.

무언가 알았다고 생각할때, 다른 사람의 의견을 듣는 지혜가 필요하겟다.

그만 놀고 다시 책속에 묻혀야 할때인가도 싶고..
주재를 파악해야 하는 때인가도 싶다.

그것도 아니면, 색소와 곤봉 견찰이 있는 곳으로 가야할때인지도 모르고....

목요일, 8월 14, 2008

아고 울아버지..

가족들끼리 감자탕을 먹고(지가 쐇습니다 ㅋㅋ), 돌아오는 길에 아버지와 폐지를 주으러 다녔습니다.
다닌다는 표현은 정확하지 않지만, 저녁밥을 먹고 돌아 오는 길에 어머니의 만류에도 불구하고 폐지를 주으셨습니다.
아버지 나이가 나이신데, 폐지를 주으시면 흡사... -_-;;;

자식된 도리로 죄송하고, 부끄러울만 한데.. 저도 아버지를 거들어 주웠 습니다. -_-;;;
와으프와 자식도 있고 어머니도 계신데 온 가족이 폐지를 -_-;;;

그냥 말없이 폐지 주으면 따라 다니는데, 아버지 그때서야 이유를 말씀해 주십니다.
앞집에 사시는 70대 할머니가 폐지를 모으신다고, 이거라도 주워 드려야 한다고 하십니다.
남편은 교통사고, 자식 둘은 정신병원을 6개월 주기로 반복 하신다며,
영세민도 안되고, 진짜 불쌍하시다며.. 도와주셔야 한다고요.
부끄러운줄도 모르시고 주으시네요.

집에 도착해서 폐지를 그 할머니 집에 드리고, 왼지 모를 뿌듯함이 있었습니다.

아버지 자랑 스럽습니다.
고맙습니다.

월요일, 8월 11, 2008

오랫만에 다시 웹 프로젝트를 진행 해야할지도 모르겟다.

Spring 2.5가 나온지 한참됫것만, 지식은 1.2에서 머무리고 있고,
더군다나 웹프로젝트를 하지 않는지 거의 2년(?)이나 흘러 버린듯하다.

흠흠...

http://static.springframework.org/spring/docs/2.5.x/spring-reference.pdf
요 자료를 보고 있는데...

eclipse irc 정보

서버는 irc.freenode.net 이라고한다.
http://wiki.eclipse.org/index.php/IRC

These are the main channels we maintain:

#eclipse - questions from plug-in developers and users log
#eclipse-bugs - official channel for Eclipse Bug Day
#eclipse-commits - lists all commits as they come in (See CIA)
#eclipse-dev - Eclipse committer discussion and socializing - a good rule of thumb is this channel is for the development of org.eclipse.* plug-ins
#eclipse-soc - official channel for Eclipse Summer of Code
Project Channels
There are also more project specific channels:

#eclipse-de - German localized version of #eclipse
#eclipse-ecf - the discussion channel for the Eclipse Communication Framework
#equinox-dev - the committer/contributor discussion channel for the Equinox Project
#eclipse-modeling - the discussion channel for the Eclipse Modeling Project
#higgins - the discussion channel for the Higgins project
#eclipse-stp - the discussion channel for the SOATools project
#eclipse-e4 - official channel for E4 discussions log
#pdt - official channel for the PDT project
Related Channels
#osgi - OSGi related channel


한국은 irc.hanirc.net
#eclipse

수요일, 8월 06, 2008

코드

요새 라이선스 관리 프로그램을 만드는 중이다.
물런 예전에 허덥하게 나마 만들었던 경험이 있었으나..

다른 상용 제품에 있는 라이선스는 어떻게 만드는지 궁금했고, 살짝 흉내내고픈 욕심이 생겨서, 오픈소스 라이선스 프로그램을 가져다 분석해 보고, 따라 코딩해 보았다.

음 대략 20개 미만의 클래스와 그리 많지 않다는.. 보고 있는 오픈소스가 허덥한건지... 별거 없네.

코드를 거의 복습해가며 따라해 보았다.
아, 인터페이스 난발이다.. 나중에 분명 아주 웃긴 코드가 나올거야.. 등등의 상상을 해보았다.
================================================================================
요기까지..

저번에 만들었던 데몬 쓰레드가 몇개인 것 요넘도 대략 20개 클래스 미만에...
업무 분석이 잘 못되서 중요 로직을 고쳐야 한다.
동적으로 바뀌어야 할 부분에 어덥터 패턴을 써서 구현했고, 어느 정도 분리되어 있다고 느꼈것만..

결과적으로 클래스 2개를 바꿔야 한다.

커플링된 소스가 존재하는것이고..

초딩 한금이~~ -_-;;;
========================================================================

위에 오픈소스 라이선스관련 코드가 잘됏다는생각이 드는 건 몰까?
코드의 품질을 평가의 기준은 무엇일까?

아뜨.. 코드 보는 안목이 짧은 한탱이~~

요새 인라인 탄다고 미쳐있더니, 바닥보이는거야?
그래도 인라인... '라이트닝10' 사려고 준비중

화요일, 8월 05, 2008

GEF3D

GEF3D라는 넘이 나왔단다.

GEF3D라 음..

http://mea-bloga.blogspot.com/2008/07/gef3d.html 올라왔다.

음.. 2D GEF가 3D로 바뀐다라... 어떤 모습일지.. 사뭇 궁금한데요.
Chris Aniszczyk가 알려준 사이트에 들어가 보려고해도 들어가지지도 않고..
어떻게 바꼇는지 구경하고싶은데..

Eclipse Zone에는 다음과 같은 글이 이미 떠 있네요.
Gef3D goes public, or: GEF goes 3D
At 7:31 AM on Jul 16, 2008, Jens v.P. wrote:
Hi all,

I'm proud to announce the first public release of Gef3D:

Gef3D is an Eclipse GEF extension bringing 3D to diagram editing. That
is with Gef3D you can create 3D diagrams, 2D diagrams and combine 3D
with 2D diagrams. It is made public under the Eclipse Public License.
Gef3D extends GEF by providing 3D enabled draw and controller classes.
Instead of drawing 2D figures, you can now draw 3D figures. Existing
GEF-based 2D editors can be embedded into 3D editors with minimal
effort. This is achieved by projecting the output of the embedded
editors onto 3D planes and bridging the gap between 2D and 3D content:
3D objects can transparently access 2D content and vice versa.
Additionally, multi-diagram editors can be created by combining several
single diagram editors. For example multiple 2D diagrams can be
displayed and edited simultaneously on different planes and 3D elements
can be used to display inter-model connections. Fully 3D graph based
editors can be implemented with little or no knowledge of 3D
programming since the framework is used exactly the same way as the
original 2D framework. All 3D related problems are hidden from the
programmer (more or less ). [description copied from
http://gef3d.org

As the version number 0.8 indicates, not everything is working at this
time. A feature list as well as current limitations, screenshots (and
screencasts) and other information can be found at Gef3D's website:

금요일, 8월 01, 2008

글로 적어 놓고, 실행하지 못할까봐 염려 스럽지만...

요 몇일 보고있는 ECF(Eclipse Communication Framework) 셈플을 만들어 봐야겠습니다.
상당히 흥미있는 넘이네요.

목요일, 7월 31, 2008

OSGI, EQUNOX의 대단함이란....

회사에서 작업은 Eclipse 3.3을 사용하여 rcp 어플리케이션을 만들고 있다.
모델링할일이 있어서 Rational Software Architect 7.0.0.7 버전으로 프로젝트를 가져와서 모델링을 해야했다. RSA는 Eclipse 3.2기반이므로 3.3과는 많이 다른 그런 것이다.

흠냐리, 가져오니 당연히 에러 나고 빨간불(?) 투성이.. -_-;;;

Target Platform을 만들어서 3.3에서 사용하는 모든 플러그인을 넣고 동작시키니, 에러가 없어진다.
-_-;;; 당연한건가? 당연하다고 생각하면... 우울하므로, 당연하지 않다고, 대단하다고 생각해 주기 바란다. 이게 다 osgi 형의 마술이라는 사실에...

참고로, 일반 자바 프로젝트를 가져오면 프로젝트는 성공적으로 가져오나, 프로젝트가 깨진다. -_-;;;;
방법을 찾아 봐야 하는데 말이지.

화요일, 7월 29, 2008

허덥 코딩

나의 자바개발 버전은 1.2에서 머물러 있는 듯 하다.
시작을 1.2부터 하였으니, 그때로 머물러 있는 것이다.
1.3, 1.4, 1.5, 1.6이 넘어 오고 버전을 바꾸어 오고 있지만, 여전히 자바 문법은 1.2에 머물러 사용하고 있다. -..-;;;

어제 정말 몇 년만에 RMI로 간단한 서버를 만들어야 할일이 있었는데, 세상에 1.5부터는 _stud, _skel을 안만들어도 된단다. 허걱.. 이런... 엄청난 변화가... 무식한 한금이.. 무식하고, 촌스러운 한금이다. 그리고, 결국은 RMI보다는 socket이 편하다는.. 참.. 살짝 어처구니 없었다. ㅋㅋ socket이 rmi보다 더 편하다는....

오늘은 어제 만든 결과물이 완료되어 보여주었다. 보여주는 중에 콘솔 프로그램이라, 시스템 트레이 아이콘으로 보여주면, 좋겟다는 의견이 나왔다. 해서, 언젠가 스쳐본 swing의 tray icon생각이 났다..
근데, 정작 rcp에 있는 tray icon기능을 쓰고 싶은거다. swing tray, rcp tray.. 당연하지만, swing tray가 힘이 덜 들겟다는..
사실 쓰고 싶다기 보다는 내게 익숙한 rcp의 기능을 쓰고 싶은 것이지..
이런 생각이 들자 내가 참 어처구니 없더라는...

그렇게까지 생각이 들었는데, rcp기능을 쓰겟나..
swing의
TrayIcon ti = new TrayIcon(image, "Alert System Tray", menu);
을 사용해서 만드는 중이다.

그리고 생각이 멈춰있던 코드를 수정하였다. enum..... 등등 1.5,1.6문법에 맞게 리펙토링하였다.
휴~~ 나이를 먹는건가? 아직 넘 어린데..

금요일, 7월 25, 2008

오늘은 월급날. $,.$ 날인거다.

오늘은 키보드, 마우스 이야기를 해야겟다.
쓰는 것은 (무선 Natural Ergonomic Desktop 7000 정품)인데.. 흠냐리 대략 조타.

개발자들은.. 특히 키보드는 좀 짱이게 조타는.

<28일 글을 보니, 알지롱거가 된 느낌이다> --;;
ㅋㅋㅋ

월요일, 7월 21, 2008

서울시교육감 선거

7월30일은 서울시교육감 선거가 있는 날이다.

중앙선거관리위원회(http://www.nec.go.kr:7070/edextern/index.html)

투표시간은 오전 6시부터 오후 8시까지 14시간동안 실시된다.

저는 기호 6번 주경복 후보를 지지합니다.
한금이를 아는 분은 6번 주경복 후보의 면면을 살펴봐주십시오.
(http://omentie.tistory.com/284?srchid=BR1http%3A%2F%2Fomentie.tistory.com%2F284)

아이들의 미래와 민족의 미래를 살피신다면, 우리가 들고있는 촛불이 옳다고 생각하신다면 더 고민해주십시오.


[성명]조선일보의 주경복 후보 공격, 좌시않겠다!

일요일, 7월 20, 2008

memory leak

저번주에서 만들고 있는 서버 모듈에서 memory leak이 나는걸 확인할 수 있었습니다.
오늘에 이르기까지 장장 10일 정도 이 문제로 고민하고 있는데, 이제야 해결의 실마리(?)를 찾은듯 합니다.
사실 단서는 발견한 초기에 진단툴을 통해 확인하였고, 경험상 해결의 결론도 알았습니다.
다만, 문제는 소스 전반을 모르고 있어서 실마리를 제대로 확인하지 못한것이 실수였습니다.

그 실수를 이후로 거의 일주일을 삽질을 해야 했습니다. 물런 그 일주일에 여러개의 다른일과 병행하여서 제대로 집중한것은 3-4일이지만...

우선 문제는 server모듈이 몇시간을 실행시켜두면 메모리를 조금씩 갈가 먹다가 죽는 경우가 생겨서 시작하게 되었고, 이것을 확인할때는 JProfiler 5, Oracle JRockit Mission Control 3.0.3로 확인하였습니다.

저의 시스템 환경은 대략 이렇습니다.
hsqldb(memory only), dbcp정도입니다.

우선 JRockit으로 떠본 클래스 Trace입니다.

위와같이 상황이 발생하고 close가 계속 증가했습니다. 자, 그럼 추측해 볼수있습니다.
어디서 close가 안돼는구나~ 좀더 범위를 좁혀 상상해 보자면, resultSet이 close가 안돼는 구나 이렇게요. jrocket이 지적해준 소스를 일일이 쫒아 다녀봣습니다. 그리고 본의아니게(?) hsqldb 소스를 뒤져보게 되었지요.

집에 가야겠어요. 2부는 ....

목요일, 7월 17, 2008

오늘 연차를 내고 와이프 산부인과를 따라갔다.
일신조산원이라는 곳으로 와이프가 임신하고 난 후 가는 곳인데, 집에서 버스 -> 지하철 2호선 -> 5호선 -> 버스 이렇게 1시간30분을 가야하는 곳이다.

와이프가 첫 째를 출산할때 여자로서 너무 수치 스러웠단다.
그래서 가는 찾은 곳이고, 병원장(?)이신 선생님과 함께 도움을 주고 계신 선생님들의 면면이 다른 곳과 사뭇 틀리게 부드러웠다.

오늘은 와이프 출산할때 남편들이 어떻게 부인을 도울 것인지 교육한다기에 따라갔다.
산달이 되어서 부인들이 행동해야할 것들, 남편들이 도와야 할것들, 세상에 태어나는 아기들의 지혜(?)등을 알게 되었는데.. 여튼 신기하고도 신기하다는... 출산 비디오를 보면서 생명의 경이로움과 창조의 위대함을 느끼네요.
...

따라갔다 집에서 오면서 만삭이된 와이프보다 내가 훨씬 힘들게 느껴지니...

다녀 와서 2주째 미치도록 타고있는 인라인도 못 타러 가고.. 끙... 말만하고 못했던 가칭 bcel plug-in이나 진행해 봐야겠네요.

수요일, 7월 16, 2008

Eclipse Io(?)

Eclipse Ganymede가 나온지 얼마 되지 않았지만, 다른 한편에서는 Eclipse Io(?)를 준비하는 사람들도 있네요.

빠르고 빠르기도 하지요? 위에 언급한 개발자는 어캐 사나 모르겟네요.

블로그 글에서도 체력을 말하는걸 보면, 슬슬 지치는듯 한데요.
일의 재미와 보람 혹은 그밖에 다른 어떤것과의 괴리일듯도 하네요.

월요일, 7월 14, 2008

행복한 삶

일주일 전부터 인라인 스케이트를 타고있습니다.

몸 전체가 아프다고 소리지릅니다.
안쓰던 근육들이 머리에게 무리했으니 좀 쉬어라고 이야기 하지요.

그래도 멈추고나 쉴수 없습니다.
인라인을 타니 오랫만에 몸에서 땀이라는게 나오네요.
땀흘리니 기분이 좋습니다.

생각합니다. 나는 무엇을 해야 즐거운 인생인건지.
부동산에 붙여진 2층 방3개전세 1억7천마넌 이라는 표맛 앞에 기가 잔뜩 죽습니다.
가정을 책임지는 가장 역할을 하면서 나의 인생 또한 즐겁게 살고싶습니다.

이런거 하면서 즐겁게 살수 있는 걸 이제부터 고민해 보렵니다.
생각해 보건데, 지금까지는 나 혼자 재밌는 삶을 살려고 노력했던듯 합니다.

수요일, 7월 02, 2008

c군과 오프후기

어제 c군과 오랫만에 보았습니다.
예전에 기술서적 추천해 달래서 스티브맥코널의 'Professional 소프트웨어 개발' 책을 추천해주었 습다.

c군의 느낌은 왠지 자기가 읽으면 안되고 회사의 사장이 읽어야 할 것 같다고 이야기 합니다.
오호, 너무 잘 읽었다고, 동감한다고 박수쳐 주었습니다. 잘했어 c군.

사실 개발은 개발자가 코딩을 하게 되자만,
코딩이 잘 나오려면 그 프로젝트를 메니지하는 사람의 전체 플랜이 훨씬 중요하지요.
그래서, 그 책은 사장이 더 읽어야 할 책인듯 싶습니다.

피엠을 메니지하는 사람은 사장이므로.

개발자의 역할은 무엇일까요?
아마도 사장이, 피엠을 어떤 결정을 할때, 현재의 상황과 환경을 올바로 보고 결정할수 있또록 정보를 주는건 아닐까요? 좆선,쭝앙,똥아가 주는 정보를 읽는 대통령은 또한 안습인 것처럼요.

토요일, 6월 28, 2008

나는 별볼일 없는 개발자이고, 아직은 개발이 재미있다.

내가 개발하는 것들을 소위 말하는 SI성 개발을 많이 해왓다.
제품개발, 사실 아직 변변한 제품 만들어 본적없고, 만들라고 하면 할 수나 있을런지 의문이다.

그렇지.. 변변한건 못 만들어 보았지만, 흉내는 여러번 내 보았다.

자, 제품이라는 걸 만들라 치면.. 보통은 내가 만들려고하는 그런것이 세상에 나와있는지 조사하게 되지요. 모 그런거지, BCEL outline plug-in을 요새 기획중인데, 사실 이넘의 의도는 ASM outline plug-in인 거고.... 자 좋다. 이런 저런 해서 몬가 만들어 질것을 결정했다고 치자.

그럼, 그 다음 몰 해야하는가?
그럼, 그 만들려고 하는것을 현재 상황에서 만들수 있는지 자신을 검사(?) 해야한다.
현재상황에서 한라산을 올라가고 싶은데, 제주도에 갈수 있는 방법이 없을수도 있으므로..
고로, 자신의 현재 상황에서 현실적으로 적당한지, 회사의 정치적, 경제적인 상황, 개발팀의 기술 수준 및 의지는 충분한지 봐야한다.

자 일단 이것도 만들려고하는것에 충분하다 치자.

그래서 여차 저차 산 건너고 물 건너서, 원하는 걸 베타버전 만들었다고 하자.
그래서 정식으로 베포했다고 합니다.

그 다음 행동이 회사의 개발 성숙도를 평가하는 좋은 방법인듯합니다.
이 제품을 어떻게 관리 할 것이지요. 이 제품이 이제 막 태어난 아기지요.
아기에게 모유수유를 할 것인지, 분유를 먹일것인 지요?

임신해서 태어나는 것 까지가 제품이 이제 출시 되었다라고 비유를 하고 싶네요.
태어난 아기가 자라서 대학교까지 가는 것까지 부모의 역할 이라고 한다면...
사실 20년은 부모의 관리가 필요한 것입니다. 임신해서 출산까지 10개월1년 이라고 생각해도 무려 20배의 넘는 배려가 필요한 법입니다.
자식이 있는 부모라면 어느정도 이해하실지 모르겠네요.

여튼 제품이 만들어 지고 나면, 그 제품을 어떻게 관리 할 것인지 고민해 보아야합니다.

제품 개발 한다고하는 몇몇 회사 몇몇 개발팀을 돌아다녀 보았지만, 사실 별거 없습니다.
si에 비해 별 특별하고 특별한게 없다고 말하고 싶습니다.
좀 특별하다면, 제품 만들면서 생기는 제품에 대한 지식이 특별하겠지요.
이것은 희소성의 원리 때문에 특별한거지요. 마치 금의 가격이 석탄의 가격보다 높은 것 처럼요.
사실, 일반 서민이 실제로 필요한 것은 금보다 석탄일 확률이 무지 하게 높습니다.

그리고, 대개의 경우 제품개발팀이 si개발팀보다 일반적인 소프트웨어 개발능력은 떨어지지 않을까 싶습니다. 좀 역설적이 겠습니다만, 저는 그렇게 생각 합니다.

몇몇 제품 개발한다고, 자기는 절대 si 안한다고 하시는 분들... 반성하세요. 김군아 반성해라.
... 하기야 김군 너의 상황을 조금 들은 나는 이해할만도 하겟다만...

아웅, 어제 잠을 좀 빨리 잣더디, 새벽4시에 일어났고..

오늘은 어머니 환갑이신데, 올만에 엄마 보러 집에가야겟네요.
못난 자식 키워주신 엄마에게로 ...

화요일, 6월 24, 2008

컴퓨터를 새롭게 받았다 사양은



새롭게 데스크 탑 컴퓨터를 받았다.

살펴봐야할것은
1) 기존에 즐겨 쓰던 키보드 마우스(무선 Natural Ergonomic Desktop 7000 정품)를 살수 있었던것이고,
2) 22인치 듀얼 모니터(L227WT-PF) 이며
3) 메모리가 8기가 라는 것이다.

개발자가 가질수 있는 최상의 컴퓨터일 듯하다.

우리의 맥 형님이 개발자의 개발환경에 대해 가끔씩 언급하였던바와 같이
장비보다 장소,
장소보다 사람 일 텐데.

수요일, 6월 18, 2008



뉴롸이트 라는데요.
진교수님 '하는 짖을 보면 다 국익을 배반하는 거에요.'
마지막 말이 왜 그리 무섭게 다가오는지요

토요일, 6월 14, 2008

기술동향

정보의 홍수라 누군가 표현했는데, 나와 같은 직업을 가진 사람들은 홍수가 아니라 쓰나미 속에 사는 듯 하다.

가끔씩 오는 기술편지(The Service.com, InfoQ ...)만 봐도 얼마나 많은 기술과 방법들이 나오는지 말이다. 그것 뿐인가 얼마나 다양한 spec이 새로 나오는지 감당이 안된지 사실 오래됫다.

일례로 보통 현업에서는 Java 1.4, 1.5를 주로 사용한다. 개인적으로 현업에서 1.6을 사용한곳은 아직 보지 못했다.(?, 너무 느린가? 개인적으로는 1.6을사용한다.)

Sun에서는 1.7 b28(오늘 28이네요) 이야기가 한창이다. 새롭게 추가된 api, 각 종 진단 툴과 관련 기술들 대략 입벌이지는 것들이다.



Eclipse에서는 Eclipse 3.4 RC3(Ganymede) 이야기로 한창이다. 24일에 릴리즈 예정이라고 한다.
좀 유명한 plugin은 3.4용으로 이미 나와 있으며, Eclipse rcp 커미터들의 블로그에서는 3.4에 추가된 api등을 소개하며 방향을 소개한다. 교육 사이트에는 3.4 Toturial을 소개하기도한다.


Spring은 어떤가? 3.0 소식과 함께 Osgi등의 너무 많은 이슈가 있지 않은가?
<별로 상관 없을수도 있지만 Rod Johnson Discusses Spring, OSGi, Tomcat and the Future of Enterprise Java > --;; 오해의 소지가 있으므로, 저는 들어도 거의 못 알아먹습니다. --;;; Rod Johnson의 눈이 좀 안습이네요. 잠을 많이 못 잔듯해요.

JSR-286로 그디어 release되었네요.(Java Portlet)- 지금 하는 일과 멀어져 버렸지만요. 그디어 를 넣고 싶다.

사실, 자바 진영의 문제는 너무 빠르게 발전하는것이 문제가 아닌가 싶다.
현업 개발자들 발전의 속도를 따라가지 못하고, 앞서 나가는 자와 뒤따라 가는 자의 괴리는 나날이 깊어 가는듯 하다.

인프라가 부족한 이런 발전이 It 업계에 좋은 현상인가?
더군다나 한국적인 현상, 특히 영어의 괴리로 더 깊이는 더욱 깊어 지는 듯 하다.

우리는 어떤식으로, 우리회사는 어떤식으로 대처 하고 있을까?

금요일, 6월 13, 2008

BCEL plug-in 시작

사실, 저에게 고민이 있습니다. 대중적인 툴을 좀 만들어 보고 싶은 욕심이 있습니다.
제가 그리 개발능력이 뛰어(?) 나진 않지만요.

예전에 bcel을 사용하여 메소드 내용삭제 를 하면서 사람들에게 좀 쓸모있는 것을 만들어 보기로 했는데, 아직까지 실행에 옮겨지지 못하고 있네요.

ASM에는 참 편리하고도 유용한, plug-in인 Bytecode Outline이 있습니다.

하지만 BECL은 마땅한 plug-in이 없습니다.
혹시 아시는 분 있으시면 코멘트 부탁드려요~
그래서 시간이 날때마다, Bycode Outline 과 용도가 같은 그렇지만, BCEL용을 만들어 봐야겟다 싶습니다.
작업해 보신 분은 알겠지만, BCEL로 이작업을 하는게 얼마나 괴로운지 아실만한 분은 다 아실거라 생각이 드는군요.
기존 class 분석 -> bcel 작업 -> 실행 혹은 *.class 디컴파일 로 확인
이런식의 반복잡업을 계속 하게 됩니다. 물런 어느 프로그램이나 동일 하겠지만, 이 작업은 한번은 더 거쳐야 합니다.(사실 저는 이작업보다 더 힘든게, 전체 구조를 이해 하는 부분이 힘들었습니다만)
여튼 이 플러그인을 만들어 보면 좋겟다는 생각이 들었습니다.

근데요. 저 위에 있는 고민이 해결되지 않네요. BCEL이 참 유용한 LIB이지만, 아무래도 아주 부분적으로만 사용하는 요소 기술 일 뿐이라 말입니다. 그리고, 이 플러그인은 얼마나 걸릴지 지금은 감이 잡히지 않네요. 내가 생각한 기간에 + 알파를 하면 대략 기간이 나오는데.. 안나오니 대략 힘드네요.
할수나 있는건지.. 검토를 좀더 해봐야겠네요.

좀더 대중을 대상으로 할수 있는 프로그램을 만들고 싶네요.

당분간 BCEL plug-in 만들기를 시작해보겠습니다.

ps)
GWT Designer가 ASM을사용하였네요. 어쩐지 빠르다 이렇게 표현해야 맞는건지~ 여튼 설명은 그것 때문에 빠르다. 끙~

수요일, 6월 11, 2008

요새 업자다 보니 아고라에서 많이 노는데..
한줄 답변에 아래와 같은 글이 있다.
순간 웃겨서 죽는 줄 알았다는....

[명박퇴진][농심불매][개중동폐간][시중퇴진][인초니퇴진][개또라이또 퇴진][개나라당퇴진]꼭 이루시길...▄█▀█● ●█▀█▄.아이고 일도 아니죠

블로그 오른쪽에 있는 이클립스플러그인 카페 링크를 지웠다. 개이버이니~~
개이버 탈퇴해야하는데.. 흠..

오늘 숙제는 SKT다. SKT에 전화했으~~
광고계속 함 끊을거라고..
상담원분 친절하게 받아주시네...

화요일, 6월 10, 2008

부정적인 결론이 났다.

결론의 중요함은 결론으로써 막을 내리는 것일 거다.

됐다 여기까지 기다리고 인내한것도 대단하다.

그나저나, 몇 사람과 한 약속을 지키지 못해 미안할 따름..

미안해

RCP 각 파트 들 간에 통신

RCP를 만들다 보면 각 파트들간에 통신(?)해야할 필요가 있다.
예를 들어, 왼쪽 트리를 클릭하면 오른쪽 뷰가 바뀌고, 아래에 있는 프로퍼티뷰가 바뀐다거나요.
혹은 오른쪽 뷰가 닫히면 함께 연결된 아래 프로퍼티가 닫혀야 하거나요.

이럴때 어떻게 개발해야 할까요?
이클립스 RCP책 252쪽 파트들을 함께 연결하기를 정리해보는 선으로 하겠습니다.

- 선택사항 이벤트(ISelectionEvent) 사용 : 이벤트 등록
- 파트 리스너(IPartListener) : 파트가 닫히고, 열리고, 숨겨졌을 때 발생하는 이벤트 등록
- 직접 통신 : 선택 또는 파트 서비스가 임으의 파트들끼리 직접 제어

위의 방법들이 있다고 합니다.
직접 통신은 자재해야 할 방법이겟고~

일요일, 6월 08, 2008

소프트웨어를 분석할때면, 항상 RSA(Rational Software Architect)가 그리워진다.
그렇다고 RSA를 아주 잘 사용하거나, RSA 개념에 맞게 사용하는지는 자신이 없지만, 무엇인가 없으면 불편하다.
UML 모델러 때문인가도 싶기도하고... 한글화 된 풍부한 문서 때문인가 싶다.

오늘 다시 인스톨 해야겟다.

몇몇 부분의 분석기를 올리고 있는데, 있으면 좀더 속도가 날 듯 싶다.

RSA HOME

이런게 있으면 내가 이해하는데,
http://hangumkj.blogspot.com/2008/03/java-collection.html
도움이 되는 도구니.. 인스톨 해야지..

7.0.0.6 업데이트가 나왓네요~

Take time to thinking: eclipse에서 font 사용 및 분석기

Take time to thinking: eclipse에서 font 사용 및 분석기

위의 link 그림 rcp 화면처럼 하려면, display를 수정해줘야 합니다.
아래처럼 display를 가져오게 되는데, 그 display 객체를 수정해주어야 겠습니다.

혹은
org.eclipse.ui.internal.Workbench의
/**
* Creates the Display to be used by the workbench.
*
* @return the display
*/
public static Display createDisplay() {
// setup the application name used by SWT to lookup resources on some
// platforms
String applicationName = WorkbenchPlugin.getDefault().getAppName();
if (applicationName != null) {
Display.setAppName(applicationName);
}

// create the display
Display newDisplay = Display.getCurrent();
if(newDisplay == null) {
if (Policy.DEBUG_SWT_GRAPHICS || Policy.DEBUG_SWT_DEBUG) {
DeviceData data = new DeviceData();
if (Policy.DEBUG_SWT_GRAPHICS) {
data.tracking = true;
}
if (Policy.DEBUG_SWT_DEBUG) {
data.debug = true;
}
newDisplay = new Display(data);
} else {
newDisplay = new Display();
}
}

// workaround for 1GEZ9UR and 1GF07HN
newDisplay.setWarnings(false);

// Set the priority higher than normal so as to be higher
// than the JobManager.
Thread.currentThread().setPriority(
Math.min(Thread.MAX_PRIORITY, Thread.NORM_PRIORITY + 1));

initializeImages();

return newDisplay;
}
클래스를 손봐주어야한다.

Take time to thinking: InstallFactory를 이용한 배포

Take time to thinking: InstallFactory를 이용한 배포

아참 내보내기해서 생기 exe파일 예를 들어 a.exe라고 내보내기했을경우 a.ini파일을 만들어 내보낼수 있는데요.
여기에 -vm 옵션을 주어서 jre의 위치를 지정할수 있습니다.

토요일, 6월 07, 2008

eclipse에서 font 사용 및 분석기

요 몇일 폰트 문제로 머리가 좀 아팟습니다.
폰트는 다들 아시겠지만 시스템에있는 폰트를 사용해야하고, 리소스를 많이 잡아먹는 대표적인 것들이라 신중하기도 합니다.

SWT에서 폰트는 대략 이렇게 처리합니다. Display(물런 Device에서 최종적으로 가져오게 되는것이죠. 그것의 더 최종은 Font구요)에 systemFont(defaultFont)가져오는 부분이 있습니다. 그래서 eclipse나 우리가 만든 application이 동작하면, systemFont로 만들어 지게 됩니다.
label, button, text등의 각종 widget들도 사용자가 지정하지 않으면, default로 systemFont를 적용하게 됩니다.

폰트는 뭐 아래와 같이 정의 되어 있습니다.
public Font getSystemFont () {
checkDevice ();
if (systemFont != null) return systemFont;
int hFont = 0;
if (!OS.IsWinCE) {
NONCLIENTMETRICS info = OS.IsUnicode ? (NONCLIENTMETRICS) new NONCLIENTMETRICSW () : new NONCLIENTMETRICSA ();
info.cbSize = NONCLIENTMETRICS.sizeof;
if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, info, 0)) {
LOGFONT logFont = OS.IsUnicode ? (LOGFONT) ((NONCLIENTMETRICSW)info).lfMessageFont : ((NONCLIENTMETRICSA)info).lfMessageFont;
hFont = OS.CreateFontIndirect (logFont);
lfSystemFont = hFont != 0 ? logFont : null;
}
}
if (hFont == 0) hFont = OS.GetStockObject (OS.DEFAULT_GUI_FONT);
if (hFont == 0) hFont = OS.GetStockObject (OS.SYSTEM_FONT);
return systemFont = Font.win32_new (this, hFont);
}

시스템에서 사용하는 폰트는 대략 hFont에 정의된 값이라 할수 있겠습니다.
SWT에서 화면에 출력해주는 기본 폰트라 하겠습니다.(당연히 RCP도 마찬가지겟지요)

자 일단 이걸 기본 지식으로 하겠습니다.

그럼 두번째로,
이클립스에서 Preferences -> Window -> General -> Apperence -> Colors and Font에 정의 되어 있는 폰트와 크기등이 어떻게 결정 될까요?

그것은 org.eclipse.jface 프로젝트에서 관리합니다.
주요한 클래스로는 FontRegistry, JFaceResource를 들수 있겠습니다.
관련 파일로는 jfacefonts.properties, jfacefonts_xxx.properties(대표적인 os마다 파일이 존재합니다.) 그리고 각 부분에 따른 폰트와 크기 타입이 FontDescription 형태로 정의되어 있습니다.
대표적인 jfacefonts.properties 파일을 보도록 하겠습니다.###############################################################################
# Generic NLS font file for JFace
# *.0 is Windows font
# *.1 is Unix font
#############################################################
org.eclipse.jface.bannerfont.0=MS Sans Serif-bold-10
org.eclipse.jface.bannerfont.1=b&h-lucidabright-regular-10

org.eclipse.jface.headerfont.0=MS Sans Serif-bold-12
org.eclipse.jface.headerfont.1=b&h-lucidabright-regular-12

org.eclipse.jface.textfont.0=Courier New-regular-10
org.eclipse.jface.textfont.1=Courier-regular-10
org.eclipse.jface.textfont.2=b&h-lucidabright-regular-9


이클립스처럼 환경을 정의(Colors and Font)해서 사용해야할 경우라면 FontRegistry를 이용하면 되겠습니다. 국제화에 맞게 시스템을 만들 것이라면 위의 방식을 모방하면, 멋지게 이부분은 만들 수 있겠다 생각이 들었습니다.

저기에는 font만 정의하는것이 아니라 ColorRegistry, ResourceRegistry 등도 존재하고, 이것을 유저가 사용할수 있도록 JFaceResource를 내어놓았습니다. 그리고 한번 설정되면 두번은 바뀌지 않도록 되어 있어서 public static final String DEFAULT_FONT = "org.eclipse.jface.defaultfont"; //$NON-NLS-1$ 를 사용하여 재 정의도 못하게 되어 있습니다.
그럼, 어캐 이것을 바꾸지 하시는 분들이 있을텐데요. 위에 정의한 프로퍼티 파일을 바꾸시면 되겟지요.


<이것은 rcp의 초기 폰트와 크기를 바꾸어 보았습니다.>

수요일, 6월 04, 2008

월,화 집에서 계속 잠으로 때웠네요.
올만에 집 청소도 하고, 가구도 옮기고요.

오늘은 새로 태어날 아기 침대가 왔는데.. 우오왕~ 신기했습니다.
몇년 전에 어느분께 빌려드린 유모차도 다시 우리에게 돌아왔구요.
덤으로 아기 물품 몇 가지와 다른 유모차 한대, 침대등 이었습니다.
나눌수록 커지는건 사실인가 봅니다.

첫째 희찬이가 태어날때 준비하지 못했던 것들을, 둘째 '사랑'이가 태어나면서는 같이 준비하게 되네요.
철이 좀 든거지요.

예전에 학교 다닐때 '가난한 마음'이 무엇일까 고민고민 할때가 있었습니다.
가난한 마음을 가질수 있으면 좋을텐데.. 그걸 가지면 무엇을 얻게 된다고는 있는데.. 어떻게 가질수 있다는 이야기는 없습니다.
그게 몰까? 어떻게 가질수 있을까? 고민고민했지만.. 결국은 찾지 못했습니다.

요새 한 몇년 삽질을 계속 하면서, 그 가난한 마음이 무엇인지 아주 조금이지만 알수 있는듯 합니다.
(무슨 일을 하던간에 안되고 안되는 나를 보면서 살짝 절망했습니다. 지금도 그리 좋은 상황은 아니지요.)

아주 작은 것에 기뻐하고 감사하고 만족하는게 아닐까 싶습니다.
주변에 일어 나는 작은 사건에 감사하고, 민감하게 반응하는 것 말이지요.

달라진 저의 행동이라면,
사무실에서 보이는 쓰레기 줍기(항상 그런건 아닙니다만..)
세수나 이 닦고 물 남은거 세탁기에 붙기
청소 빨래 설걷이등 할수 있으면 하기 등을 들수 있겠습니다.

내일은 광화문에 나가볼까 싶습니다.
와이프가 고개 절로 흔들면서 못가게 하는데.. 그래도 가봐야지요.
아니면 5일-6일에 가족 나들이를 가볼까 싶습니다.

아이들에게 정의와 민주 함께하는것들을 말해주고 싶고 그렇게 살도록 교육해야지요.


<아이야 무럭무럭 자라렴. 보고싶구나>

월요일, 6월 02, 2008

RCP, plug-in 개발은 얼마나 걸릴것 같으세요?

오늘 문득 RCP, plug-in은 얼마나 공부하면 할수 있는지 물었던것이 생각난다.
한 두사람이 물은것도 아니고, 많은 사람들, 그것도 다양한 부류들이 그렇게 묻는다.

사실 물으시는 대부분이 RCP가 무엇인지도 모릅니다. 개발자건 관리자건 말입니다.
PLUG-IN을 어떻게 개발하는것인지도 모릅니다. 사실 사용하는 지도 모르는 분도 있습니다.
개발자분들 중에서요.

저는 '혹시, 얼마나 생각하시느냐구요. ' 물어봅니다.
'보름, 한달정도?'

또 어떤 분들은 이렇게 말합니다.
비지니스 로직이 중요하니 앞단 UI개발은 대충 해도 되는거 아니냐구요?
비지니스 로직 잘 만들고 앞단 화면 잘 만들면 되는거 아니냐구요?
RCP/plug-in에 대해 기반기술이 없는 분들이 그렇게 말하고 시작하시곤 합니다.

오~ 매우 끔찍한 접근입니다.

물런, 제가하는 코딩 개발이 옳다는거 아닙니다.
저와 생각이 틀릴수도 있고, 실제로 저의 생각이 틀린적도 많고, 코딩도 허접한게 많이있을수 있습니다.
(물런 항상 책 보고 공부하기때문에 실제로 허접할지라도 개인 자부심은 있지요)

새롭게 RCP/plug-in을 만들어서 무언가 해보실 계획이 있으시다면.. 시간 넉넉히 가지십시요.

swt가 몬지,
그림들어가고 그럴려면 draw2d가 몬지,
rcp와 plug-in차이는 몬지
osgi, equinox, bundle, plug-in은 몬지
요걸 이클립스에서 gef로 그림 어캐 표현하는지
데이터의 답답함은 emf로 어캐 표현하는지,
그림과 데이터 합치는 gmf는 어캐 표현하는지,
코드 자동화는 jet로 어캐 표현하는지 알아야 합니다.

위의 것은 해당 사항을 사용할때 가장 기본적으로 알아야하는 기술 들일 뿐입니다.

여기에 rcp <-> db의 데이터 연동은 어떻게 하실건가요?
위의 주제부터가 응용이 되겟네요. 괸찮은 프레임웍 가지고 삽질하면 안돼잖아요.
socket으로 연결하고 서버에서 디비로 연결하는 3티어를 만들건지,
아니면 바로 디비로 연결할건지,
위와 같은 단들을 직접 만들것인지, 아니면 springframework을 사용할것인지요?

파일럿은 한번 해보고 해야하지 안겟어요?

위에 있는것 뿐만아니라, 응용은 어떻게 할것인데요?
아효~ 많네요. 쓰다보니 많아요. 너무 많아서.. -_-;;

상대적으로 좋고 발전된 기술이고, 점점 더 보편화 되어 가는 기술인데, 한국과의 괴리는 상당히 깊어 보이네요.

금요일, 5월 30, 2008

6시가 되기 6분전.

개발했던 마지막 코드를 살펴본다.

Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//business code
}
});

목요일, 5월 29, 2008

어제 문득, 나도 발전하고 있는 구나.. 이런생각이 들었습니다.
아무리 노력해도 발전, 성장하지 않는듯 보였는데요.

어제 왜 그런 생각이 들었는지 모르겟지만, '나도 조금씩은 발전 하는구나' 하는 생각이 들었지요.

내일이면 이 사람들, 프로젝트,...... 떠나야할 시간입니다.
여기에서 나도 발전한다는 생각이 든 것만도 많은 소득이 있는 프로젝트 였습니다.

별볼일 없는 나를 별볼일 있는 사람 처럼 대해준 이곳이 생각날 것 같습니다.

프로젝트 관리, 개발등 문제, 사건이 많았지만(없으면 이상하죠???) 사람이 이런 생각이 들게 해준 것은 아주 좋은(?) 점이 아닐까요?

고래도 춤추게 한다는 것이 이런것 아닐까 잠시나마 생각해 보게 됩니다.

앞으로 사람을 대할때 정직하게 몸에 배이게 만들어야 겠습니다.

RCP 세째 날 교육

세번째날 오전은 jFreeChart라이브 러리를 rcp에 붙여 보고 작은 셈플을 만들어 보는 것으로 하였다.



위와 같은 것을 오전 셈플로 만들어 보았다.
이유는 현재 개발중인 부분에 jfreechart를 사용하여 chart를 및 보고서 화면을 추가 하겟다는 것이고
외부 플러그인 추가 하는 방법등을 익히기 위해서다.

오후에는 몇일전 GS인증을 요청한 TTA에서 결함리포트가 왔다.
36개 항목이 리포팅 됐으며, 그 중에 나에게 할당된 에러 항목을 함께 수정해 보았다.
(항상 TTA의 결함 리포트는 마음에 들지 않는다.... -..-;;)

화요일, 5월 27, 2008

RCP 둘째 날 교육 자료 및 진행

둘쨋날 RCP 교육을 해야한다.

PT는 Jeff McAffer가 작성한 http://kambing.ui.edu/eclipse/technology/phoenix/talks/Eclipse-RCP-3.2.6.pdf 를 사용하였습니다.

앞부분은 일반적인 이야기 이고 뒷 부분의 Equenox는 설명 해야할 것들이.. -..-;;

설명후에 어제처럼 바로 실습을 했습니다.
어제의 SWT예제를 VIEW로 만들어 보는 것으로 하였습니다.

실습환경은 3.3에 swt designer로 하였지요.

중간 중간 PT에서 언급한 부분과 실제 plug-in.xml과 이클립스로 부연 설명을 하였구요.
실행할때 실행하는 방법을 설명했습니다.

시작은 rcp view예제를 가지고 시작했습니다.
view가 다 만들어지고, 실행되고 난 다음에는 Application으로 시작하는 클래스와 Activator에 대해 설명을 하였습니다.

사실 너무 많은 것들이 존재하지요. product, fuature, update, 확장하는것도 가지 가지이지요.

이런 부분이 존재하고 사용해야 한다 정도로 마무리를 하였습니다.

내일은 좀더 어려운 예제를 하나 만들고, 이것 저것을 해보는 것으로 마무리 해야할까 봅니다.

gef, emf, gmf나 좀더 다양한 것들을 교육해보는것도 좋겠습니다만.. 아쉽다면 아쉽네요.
(사실 이런 부분은 제가 교육을 받아야겟다도 싶습니다 -_-;; ㅋㅋ)

월요일, 5월 26, 2008

SWT 첫날 교육 자료 및 진행

아래 게시물처럼 1주일동안 교육을 해야한다.

월 : SWT 기본
참여인원 3명

PT 자료는
http://www.zikal.com/swt/SWT_TUTORIAL.ppt과 ,
위젯 설명은
http://www.eclipse.org/swt/widgets/
를 사용하여 2시간 정도 기본 이론교육을 하였다.

교육 후에 곧바로 실습.

위와 같은 기본 검색 화면 후 상세 조회화면을 만들어보는 예제를 만들어 보도록 하였다.

회사에서 현재 사용하는 Eclipse 3.3, 3.2를 사용하였고, SWT Designer, VE를 사용하여 개발하도록 하였다.

중간 중간 예제 http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm과 현재 개발된 코드를 보여주었고, layout등은 틈틈히 설명하였다.

위의 예제 소스는 5시간 정도니 마무리 까지 될수 있었다.

마지막에 전체 Widget을 살펴보는 의미로다가 http://www.ibm.com/developerworks/kr/library/os-swingswt/index.html 를 보려고했으니..

내일은 RCP를 교육을 해야하는데, 사실 좀 난감..

어디서 부터 bundle부터 해야하나 싶기도하고...

하루종일 말했더니, 진이 빠진듯한 느낌이 든다. 역시 말하는 건 너무 힘들다는...

일요일, 5월 25, 2008

SWT -> RCP PPT만들기

이번주 부터 자바는 알지만, RCP, SWT, PLUG-IN 등을 전혀 모르는 분과 1주일을 보내야합니다.

위의 기술은 어느정도 정리해 주는것을 목표로 하고, 더 나가서 몇개정도의 VIEW를 만들어 보는 것을 목표로 해야겠습니다.

어느 분은 rcp개발을 한 달 동안 마스터 하시겟다는 분 혹은 팀 회사도 있다고 들었는데..
개인적으로는 사실상 무리 일듯해요.
좋은 강사가와서 사내교육 및 파일럿을 한달동안 하고 그 개인이 노력하여 해맨 다음에 가능하겠지요.
이렇게 시작한 프로젝트가, 보통 설계가 엉망인 경우를 종종 봐 왔습니다.
차라리 한달 더 시간을 갖고 준비하여 제품을 개바해야하지 않을까 싶습니다.

예전 부터 자바를 해 왔더라도(보통 WEB 프로그램) SWT, RCP등을 해오지 않았으면, 처음부터 새롭게 시작한다는 생각으로 개발해야 할 것입니다. 보통 classpath잡는 것부터 전혀 틀리지요.
차라리, 이렇게 한달잡고 시작한 자바 개발자보다 c나 다른언어를 개발했던 개발자들의 배움의 속도 밎 성숙도가 높지 않을까'라고 조심스럽게 짐작합니다. 이렇게 보통 자바 개발과는 좀 많이 다르다는 것 이지요. 적어도 RCP, plug-in은 말입니다.

서버와 데이터를 주고 받는 메커니즘이 근본적으로 틀리고, 프로그램하는 근본 메커니즘을 이해하고 프로그램을 하는 분들이 많지 않는것도 또 다른 이유라 하겠습니다. 간단한 http protocol을 구현해서 서블릿 컨테이너 파일럿정도는 구현할수 있어야하는데, 이렇게 구현할수 있는 사람이 얼마나 될까 싶습니다... 사담이 너무 길었네요...

SWT나 PLUG-IN, RCP 기본 피티 자료를 만들어야 하는데.. 만들기는 사실 늦었고, 다른 분이 많들어 놓은 좋은 자료로, 진행을 해야 할까 봅니다.

SWT Home
대부분 가장 양,질에 가장 좋은 자료는 사이트 홈인듯합니다.
http://www.eclipse.org/swt/docs.php
역시나 ibm의 자료가 눈에 띄구요.
아래쪽에 보면 Getting Started with Eclipse and SWT 다음과 같은 자료도 있네요.

Eclipse RCP 자료
http://wiki.eclipse.org/index.php/Rich_Client_Platform
역시나 PPT 자료는 너무 잘 만들듯 하네요.

기존에 SWING, AWT를 했던 분이 SWT와 비교해 놓은 자료도 발견 했지요.
http://www.ibm.com/developerworks/kr/library/os-swingswt/index.html
(사실 저도 잘 몰랐는데, 위의 자료를 보니 정리가 되는 느낌이에요)

목요일, 5월 22, 2008

오랫만(?)에 집에서 쉬고있네요. ^^

이리저리 기사를 보다, 노전 대통령의 소고기 수입에대한 입장을 보게 되었는데요.
http://blog.naver.com/beachboys7/140051610483

그 분의 소신과 입장에 존경을 표하고 싶어지네요.

이명박 대통령이 이끌고 있는 이 나라에서 적어도
소고기, 대운하, 의료보험 민영화, 각종 민영화, 부동산 버블등의 일들이
더 이상 일어나지 않았으면 좋겟어요.

요새는 부동산 하나 없는 저도, 살 엄음판 걷는 기분이에요

저도, 그분이 그립네요.

수요일, 5월 21, 2008

Development Conventions and Guidelines

Eclipse에는 Development Conventions and Guidelines라인이 있다
(http://wiki.eclipse.org/Development_Conventions_and_Guidelines)

종류로는
.Naming Conventions - How to name things like packages, classes, and methods
.Coding Conventions - How to make Java code readable
.Javadoc - How to write documentation comments, especially for API
.User Interface Guidelines - How to achieve user interface consistency
.Version Numbering - How to evolve plug-in version numbers

나머지는 일반적인 개발환경에서 흔히 보는 것들이겟다.
Version Numbering도 좀 특이한가?????

흔히 디자이너의 영역이기도 한 User Interface Guidelines 는 개발자 입장에서 좀 살펴 보아야 한다.

----------------------
오늘 디자인 업체와 이야기 하는 중 User Interface Guidelines 문서를 알려주는데, 오버인가도 싶고....

RCP, plug-in 개발자라면 그냥 슬쩍 지나가게라도 읽어볼만 하지 않을까?


화요일, 5월 20, 2008

Vocabulary plug 1.1.0 빌드




아래 있는 것 처럼 하지 않았지만,
크게 신규단어 추가와 export 기능을 추가해서 빌드 했습니다.

--;;

안본지 몇달 지낫으니.. 또 힘드러지네요.

다운로드 <http://cafe.naver.com/eclipseplugin/2323>

Vocabulary plug 1.1.0 오늘 완성 목표



아래 게시글을 보다 보니.. 역시나... 예전에 만들었던 Vocabulary plug-in(http://cafe.naver.com/ArticleRead.nhn?clubid=11492512&page=1&menuid=28&boardtype=L&articleid=1809) 이 아쉽다.
추가하겟다고 한 기능을 추가해서 오늘은 완성해야겟다. 1.1.0은 사실 한시간이면 충분히 나올 기능들인데.. --;;

기존 모델을 EMF로 변경하는 작업은 다음번 기회로.. 해야할듯

Why so downcast

이러다 GEF, EMF, JET등 기존에 알았던(?) 것 다 잊어버릴듯해서
http://www.vogella.de/articles/EclipseEMF/article.html
자료를 보고있다.


이어폰에서 들려오는 노래가 흥미롭다.
Why so downcast oh my soul
Put you hope in God

월요일, 5월 19, 2008

오늘 그디어 GS인증 받으러 TTA로 출발했습니다.
황금기 5월 휴일을 거의 쉬지 못했는데..

결과가 잘 나왔으면....
좀 쉬었으면....

개발하는 것도 중요하고, 개발하는 것 만큼 유지 및 관리하는것도 중요한데요.
사뭇 앞으로의 일들이 기대가 되는군요.

그나 저나 오늘 이 무력감은 어떡할거야? 아 피곤하고 잠오고 ...

집에 가기 2시간 30분전~~~~~~~~

일요일, 5월 18, 2008

민이와 이야기 중에 나에 대한 몇가지 오해가 있는 듯하고 해서 2년반정도 나의 회사 이야기를 해보고자 한다.

지난 2년 반 동안 회사, 프리, 알바를 대략 지금까지 6군데 정도 다닌듯 합니다.
그 6곳중 월급 밀린 곳이 3군데 정도 이며, 아직도 2군데서는 월급을 못 받았습니다.
노동부에도 찾아가서 받았던 경험이 있으니, 또 가야할지도 모릅니다.

2년 반동안 6곳이나 옮겼으면, 좀 심하게 많이 옮긴건 사실인듯 합니다.

회사를 옮길라 치면, 이런 저의 경력이 문제가 됩니다. -..-;;

그러면 사람들은 묻습니다.
'나름 회사를 옮길때 조심하지 않았냐고 묻습니다.'
흐흠.. 흐흠.. 이지요.

이런 나를 사람을 뽑는 입장이라면 문제라면 문제가 되겠지요.
나라도 사람을 뽑을라 치면, 색안경을 쓸수 밖에 없는듯 합니다.

그리고, 나는 상상해보게 됩니다. 혹은, 직업을 바꿔 볼까도 생각해 봅니다.
몇몇 친한 분들과 하던 농담 처럼, 신발가게나 차려야 하는 거 아니냐구요.

왠지, 나름의 이유가 많음에도 불구하고, 나에대한 색안경이 부담스럽고 싫습니다.

강한넘이 이기는 세상이 아니라, 살아가기(?) 때문에 이기는 세상이 되었으면 좋겠습니다.

'민아 알바일 있음 줘라. 점때 말했던 것보다 많이 깍아도 된다야~ 내가 밥은 사꾸마!~
'



ps)
1) 사실 진즉에 이런글을 쓰고 싶었지만, 쪽팔려서 못썼는데..
이런것도 나의 기록이고, 허접한 인스톨이니, resource bundle이런 것보다 좋은듯..
2) 외국에 가서 일할 만 곳 있음 연락좀 주세요.(물런 영어 못하고, 가족과 함께 가야 합니다) - 많이 힘들겠지요.

토요일, 5월 17, 2008

ResourceBundle 정의하기



언어별로 제품을 팩킹하려다 보니 각 언어별로 파일을 만들어서 작업해야한다.

그럼, 각 언어별로 번역하는것은 문제가 안되겟지만(사실 이것도 좀... -..-;;)

예를 들어서, window vista를 '창 조망'이라고 원도우 시작때 보여진다면, 대략.. -;;
물런 보는 시각에 따라 다르겟지만,

그래서 몇 가지 규칙을 만들었다.
1) 레이블 이름, 텍스트 이름, 제품 이름등의 용어에 관련된 부분은 다 영어로 통일 한다.
레이블 이름이 모두 영어로 하더라도 properties 파일로 빼도록 한다.

한국어는 어색하지만, 중국어나 다른언어는 더 좋아할수도 있으므로....
2) tooltip, alert 메시지, 도움말등은 각 언어로 만들도록 한다.

다 알겠지만, product 만들때는 eclipse에서 정의하는 방식이 있으므로 그것을 기준으로 따라 가도록 한다



사용하는 플러그인은 : ResourceBundle Editor Plug-in 0.75 버전을 사용중이다

목요일, 5월 15, 2008

오늘 마로에게 메시지가왓다.
스승의 날이라 '만수무강하라는' 비슷한 메시지가 왓다...

여튼 마로야 고마워...

마로가 나중에 만나서 맛있는걸 사주겟다는걸..
언제 만날지 어캐 아냐고 내가 우겨서 기프트콘으로 '빨간모카' 한잔을 사게 만들었다.
ㅎㅎ 마로 팔 비틀어서 커피 선물 받으니 기분 캡짱 좋다니...

마로야 다음에 만나면 칙힌사줘... 누가, 소녀시대가 광고하는 칙힌있다네.. ^..^


흠냐~~ 여러 선생님들 고마워요.

자바 응용어플리 케이션 만들기

요사이 나는 Eclipse RCP로 응용 application 을 만들고 있다.

자바로 응용 application을 만드는 방법에는(모바일쪽은 모르므로 패스)
전통적으로 sun에서 만들수 있도록한 swing, NetBean 으로는 NetBean RCP등으로 만들수 있다.

<요건 swing으로 만든 모습이다. 좀 투박하고...>

sun 이외의 다른 진영에서는 Eclipse에서는 SWT, Eclipse RCP로 응용 어플리케이션을 만들수 잇겠다.

<요건 Eclipse 모습이다. 이쁘고 멋지고.. >

그래서 어떤걸 요새 더 많이 쓰냐고 묻는다면, sun의 표준 스펙 swing을 무시할수 없으므로 아직까지는 swing으로 만들어진 응용 어플리케이션이 많다.
물런 일부 선입관을 가지신 분들의 부정적인 시각이 많기는 하지만, 생각하는 것만큼 부정적이지 않다고 나는 단언하고 싶다.(jdk 1.6인 지금 시점에서는 더욱 더)

요새 새로운 주류는 Eclipse에서 나온 SWT나 RCP가 되겟다.
적어도 우리나라에서는 rcp나 swt가 좀더 인기를 끄는건 분명하고, 만드는것도 rcp나 swt의 빈도가 높은듯 하다
.
swt는 swing을 개발했던 사람이라면 거의 거부감없이 적응할수 있을것이고(JFace, Draw2D...가 있긴하지만..)
Eclipse rcp, plug-in은 swt를 알고 있는 상태에서 이 기술을 배우는 시간이 적어도 2개월정도는 되야 할듯하다.
물런 GEF, EMF, GMF, JET 요런건 빼고다. 다들 프레임웍이므로 사용하는 법을 알아야 한다.

더 주저리 써야할 말이 많은데.. 음

여튼 이렇게 개발하면 배포는 주로 java web start를 사용해서 배포하게 된다.
물런 안그럴수도 있겠지만...

swing인 경우는 update도 web start를 통해 진행해주면 되겟고, rcp나 plug-in인 경우는 update site(???)를 만들면 되겟다.

아효, 이 날림 글.. 다음은 web쪽 개발을.. 더..

토요일, 5월 10, 2008

burn out

엇그제 bong bong 이에게 burn out에 대해 이야기를 들었다
주변에 몇명이 그런 이야기를 하고 있으며, 나도 역시나 그런 기미가 오래 전부터 보였기에...
별로 새삼 스럽진 않지만, 봉봉이는 아직 학생이고..
좋은 프로그래머가 될수 있다는 생각이었는데.. 벌써 부터 그런생각을 하다니 아쉽거나..
혼나야 하는 그런 시기인데...

혼나긴 보다, 개발의 아푼 상황을 격고 있기에 모라 변명을 못하겟다.

분석 설계하고 코딩하고 테스트하고 이런 일련의 작업은 재미있다.

타버리기 전까지 만 일하고 회복할수 있는 직업이 되었으면...

금요일, 5월 09, 2008

InstallFactory를 이용한 배포




자바로 개발한 어플리케이션을 배포하려면 보통 java webstart를 이용하거나
혹은 InstallFactory로 인스톨 본을 만들어서 배포한다.

InstallFactory로 배포판을 만들어서 배포하려면 JRE를 함께 배포해야하는데,
여기서 몇가지 문제가 발생한다.
jre를 시스템 패스에 걸어주어야 하는 부담이 존재한다. InstallFactory에는 이 기능이 미약해서, 위와 같이 jre를 인스톨할수있도록 첨부했다.

끙.. 누군가 코멘트 해주지 않으므로 올바른 것인지도 잘 모르겟다는...

테스터들의 의견은 괸찮은듯 하니.. =고고싱...

수요일, 5월 07, 2008

Visual Editor, SWT Designer사용시.. 팁



Eclipse RCP로 view나 edit만들때 혹은 기타 에디터를 사용하여 개발할때 팁입니다.
(참고로 현재는 SWT Designer로 작업중입니다)

디자인을 도와주는 툴이 고마운건 직관적이고 빠르게 디자인 가능하게 해준다는 겁니다. 그래서 사용하구요.

근데, 원래 AView.java가 view라고 가정하고 코딩하다 보면, view이외의 업무가 붙으면서 지저분 해지기 마련입니다.

이런 저런 덕지 덕지 코드 붙고, 그러다 보면 어느 순간 위에서 디자인했던 ve와 코드 싱크가 맞지 않아서 더이상 디자이너의 도움을 받지 못할때가 있습니다. 흠..


여기서 쓰는 방법인데..



디자인은 일단 정상적인 방법으로 디자인합니다. 그리고 업무코드가 들어가는 부분은

public class AViewExtends extend AView {

...

}

이런 식으로 사용하는 겁니다.
이런 단순한 상속과 재활용을 생각 안하다니... aop이런걸알면 모한~~~~
초짜 한금씨~~

흠.. 정봉씨가 사용하는 방법인데.. 나름 view와 control을 어느정도 분리하여서 좋고 ve도 싱크 맞아서 좋구요.

괸찮은 방법가틉니다.
개인적으로 2000년 부터 계속 거의 자바를 사용해서 일을 해왔다.
물런 중간에 딱한번 c#으로 개발을 했지만, 그때도 swing도 함께 개발하며 병행했어야 했다.
물런, 내가 java가 최고이고 최강이다라고 이야기하는것도 아니고 밥먹고 살아야할 어쩔수 없는 선택이었다. -.0;;

이런 내가 visual basic, crystal report로 나의 모양을 바꾸어야 할 일이 발생할지도 모르겟다.

그러면서, 개발이라는 것은 똑같지만, 언어가 바뀌고 플렛폼이 바뀌게 된다.
그래서 ms의 개발 방향 흐름을 알고 싶어졌으나.... 어디를 어캐 찾아봐야 할지 모르겟다.
물런 zdnet이나 기타 매채를 통해 접근 할수 있지만, 가끔 그것은 꿈에 가까운 이야기 이기 때문에.. 나는 현업에서 잘 사용하는 그런 정보를 얻고 싶은 것이다.

그래서, 그동안 자바(?) 진영에 있으면서 내가 개발했던 환경을 틈틈히 써보고자 한다.
누군가는 도움이 될지도 모르니....

난 2002년부터는 계속 eclipse라는 걸 써왔다. web programing을 하던, stand application을 만들던.. 자바로 무슨 짖을 하던 eclipse을 사용했다.

to be continue...

금요일, 5월 02, 2008

헉, 내 블로그를 구경 오는 사람들은 누굴까? 궁금해지는데..
도대체 누구세요? 들..

하루에 70번이나 누군가 다녀갔는데..

물런 내가 나의 블로그를 몇명에게 알려주긴했지만.. 그래도 상당히 오버된 숫자다.
??????????????????????????????????????????????
??????????????????????????????????????????????
??????????????????????????????????????????????
??????????????????????????????????????????????
??????????????????????????????????????????????

여튼 쌩큐.. 합니다.

아 bcel의 sample은 ClassLoader을 약간 수정하고, 동적으로 호출된 클래스 목록을 뽑아보고 실행 시켜 보는 것으로 예제를 마무리 해야하지 않을까 싶습니다.

아니면, 더 좋은 아이디가 있으시면 그걸로...
아니면, 좀더 그럴싸한 제품 내지는 보시는 분의 모시기가 있으면 그걸로 만들어 보도록 하겠습니다.
얼마 살지 못했지만, 살아가면서 어떤일에 대해 간절히 이루어 지기를 원할때가 있다.

나는
아주 아주 몇일 몇주째 고민하는 몇 줄안되는 코드가... 잘 돌아가주기를 바랄때,
혹은 프로젝트 오픈을 앞두고, 내가 만든 코드 혹은 나의 팀 시스템이 잘 돌아가기를 바랄때...

잘 되기를 소망해 본다.

와 한국에서는 좋은결과 -> 다시 미국의 결과를 기다려야 한다.
좋은결과 있기를 기대해 본다

월요일, 4월 28, 2008

개발 추억 되집기

(http://hangumkj.blogspot.com/2005/10/blog-post_18.html)

오늘 다른 일로 위의 날자에 개발한 은행 담당자와 전화 통화를 했습니다.
아직도 같은 팀에 있었으며, 팀원이었으나 팀장이 되어 있었습니다.

그때 개발한 결과물을 잘 사용하고 있냐고 조심 스럽게 물었습니다.




혹여 삽질해서 내가 개발한 프레임웍을 엎어 버렸으면....
혹은 항상 에러에 문제로 고민거리 산출물이면 어떨까 싶어서.. 내심 걱정스럽게...

담당자와 통화 하였고, 그때 내가 개발한 결과물에 더해, 그때 보다 두배가 넘는 보고서를 출력하고 있으며, 유지보수 계약도 안맺고 직접 수정하고 있다 하였습니다.
(사실 동적으로 보고서를 추가삭제하고, 동적으로 모시기 해주는 기능이 많은 아이라, 사용법이 복잡해 내심 걱정했습니다.)
거기다 사용해보니 아주 잘된 프레임웍이라고 아주 고맙다고 아주 잘 쓰고 있다고 합니다.
(물런, 상투적일수도 있겠습니다만)

내심 걱정하고 전화했는데.. '고맙다'는 이야기를 들으니..
ㅎㅎ

라이센스, 제품에 대하여...

개발이 거의 마무리 되어 제품의 '라이센스', '제품에대하여'를 작성해야 합니다.
그러다 이런 이야기에 대해 잼이있게 읽었던 알탱이 알집의 제품에 대하여를 읽고 있습니다.
몇년전에 읽었을때는 그냥 재미있기만 했는데, 지금은 몬가 느껴지는 듯 합니다.
베타버전에 대하여도 그렇고, 무료 라이센스에 대한 이야기도 그렇습니다.

사용자가 원하는 제품을 빌드하는 것은 어렵긴 어려운 모양 입니다.

이런 일을 할때마다 좀더 노력해야지 하지만, 천천히 편안함을 추구하고 싶습니다.
사실 경제적인 부분과 어느정도 나의 시간이 보장된다면 다시한번 힘을 내보고 싶기는 합니다.

살짝만요.

화요일, 4월 22, 2008

bcel을 사용하여 메소드 내용삭제

/**
* 이번 3번째 예제에서는 클래스 메소드 삭제를 해보도록 하겠습니다.
*
* 이번 예제에서는 TestAppendMethodBuild에서 만들었던 TestAppend 클래스의 메소드 private static void
* appendMethod(String str)의 내용을 삭제하는 예제를 만들어 보도록 하겠다.
*
* 3번재 예제에서야 조금 bcel의 면목을 보는듯 하다.
* 사실 위의 예제도 상속을 사용하면 정상적으로 수정가능하겠으나, 지금까지는 예제를 만들고 있으므로 이해해주시기를....
*
* 그럼, 본격적인 예제를 만들어보도록 하자.
*
* 프로그램을 실행하고 난 다음에는 다음과 같은 결과를 예상할 수 있다.
*
* public class TestAppend {
* private static void appendMethod(String str) {
* }
*
* public static void main(String[] args) {
* System.out.println("BCEL Start..."); String str = "..test bcel...";
*
* System.out.println("Str Value " + str);
* appendMethod(str);
* }
* }
*
* 이 예제가 끝나면 TestAppend 예제의 main 메소드를 수정하는 예제를 만들어 보도록 하겠다.



package com.test;

import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.Instruction;
import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.MethodGen;

/**
* 이번 3번째 예제에서는 클래스 메소드 삭제를 해보도록 하겠습니다.
*
* 이번 예제에서는 TestAppendMethodBuild에서 만들었던 TestAppend 클래스의 메소드 private static void
* appendMethod(String str)의 내용을 삭제하는 예제를 만들어 보도록 하겠다.
*
* 3번재 예제에서야 조금 bcel의 면목을 보는듯 하다.
* 사실 위의 예제도 상속을 사용하면 정상적으로 수정가능하겠으나, 지금까지는 예제를 만들고 있으므로 이해해주시기를....
*
* 그럼, 본격적인 예제를 만들어보도록 하자.
*
* 프로그램을 실행하고 난 다음에는 다음과 같은 결과를 예상할 수 있다.
*
public class TestAppend {
* private static void appendMethod(String str) {
* }
*
* public static void main(String[] args) {
* System.out.println("BCEL Start..."); String str = "..test bcel...";
*
* System.out.println("Str Value " + str);
* appendMethod(str);
* }
* }

* 이 예제가 끝나면 TestAppend 예제의 main 메소드를 수정하는 예제를 만들어 보도록 하겠다.
*
* @author hangum
*
*/
public class TestDeleteMethodBuilder {
static String orgClassName = "build/TestAppend.class";

/**
* @param args
*/
public static void main(String[] args) {
// 해당 클래스를 불러온다.
JavaClass classz = null;
try {
classz = new ClassParser(orgClassName).parse();
} catch (Exception e) {
System.out.println(orgClassName + "가 존재 하지 않습니다.");
System.exit(0);
}

Method[] methods = classz.getMethods();
ConstantPoolGen cp = new ConstantPoolGen(classz.getConstantPool());

for (int i = 0; i < methods.length; i++) {
MethodGen mg = new MethodGen(methods[i], classz.getClassName(), cp);

// appendMethod delete
if("appendMethod".equals(methods[i].getName())) {

System.out.println(" ### [작업 method name] " + mg.getName() + " [Signature] " + methods[i].getSignature());

InstructionList il = mg.getInstructionList();
InstructionHandle[] ih = il.getInstructionHandles();

for(int j=0; j < ih.length; j++) {
Instruction inst = ih[j].getInstruction();

try {
if(!"return".equals(inst.getName())) il.delete(inst);
} catch(Exception e) {
System.out.println("==> error rise on [name] " + inst.getName() + " [message] " + e.getMessage());
e.printStackTrace();
}
}

methods[i] = mg.getMethod();
il.dispose();
}
} // end for

/*
* Dump the class to "class name"_.class
*/
String dumpClassName = "c:/temp/" + classz.getClassName() + ".class";
try {
classz.setConstantPool(cp.getFinalConstantPool());
classz.dump(dumpClassName);
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("== 종료했습니다.");
}
}

bcel을 사용하여 메소드 내용삭제

/**
* 이번 3번째 예제에서는 클래스 메소드 삭제를 해보도록 하겠습니다.
*
* 이번 예제에서는 TestAppendMethodBuild에서 만들었던 TestAppend 클래스의 메소드 private static void
* appendMethod(String str)의 내용을 삭제하는 예제를 만들어 보도록 하겠다.
*
* 3번재 예제에서야 조금 bcel의 면목을 보는듯 하다.
* 사실 위의 예제도 상속을 사용하면 정상적으로 수정가능하겠으나, 지금까지는 예제를 만들고 있으므로 이해해주시기를....
*
* 그럼, 본격적인 예제를 만들어보도록 하자.
*
* 프로그램을 실행하고 난 다음에는 다음과 같은 결과를 예상할 수 있다.
*
* public class TestAppend {
* private static void appendMethod(String str) {
* }
*
* public static void main(String[] args) {
* System.out.println("BCEL Start..."); String str = "..test bcel...";
*
* System.out.println("Str Value " + str);
* appendMethod(str);
* }
* }
*
* 이 예제가 끝나면 TestAppend 예제의 main 메소드를 수정하는 예제를 만들어 보도록 하겠다.



package com.test;

import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.Instruction;
import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.MethodGen;

/**
* 이번 3번째 예제에서는 클래스 메소드 삭제를 해보도록 하겠습니다.
*
* 이번 예제에서는 TestAppendMethodBuild에서 만들었던 TestAppend 클래스의 메소드 private static void
* appendMethod(String str)의 내용을 삭제하는 예제를 만들어 보도록 하겠다.
*
* 3번재 예제에서야 조금 bcel의 면목을 보는듯 하다.
* 사실 위의 예제도 상속을 사용하면 정상적으로 수정가능하겠으나, 지금까지는 예제를 만들고 있으므로 이해해주시기를....
*
* 그럼, 본격적인 예제를 만들어보도록 하자.
*
* 프로그램을 실행하고 난 다음에는 다음과 같은 결과를 예상할 수 있다.
*
* public class TestAppend {
* private static void appendMethod(String str) {
* }
*
* public static void main(String[] args) {
* System.out.println("BCEL Start..."); String str = "..test bcel...";
*
* System.out.println("Str Value " + str);
* appendMethod(str);
* }
* }
*
* 이 예제가 끝나면 TestAppend 예제의 main 메소드를 수정하는 예제를 만들어 보도록 하겠다.
*
* @author hangum
*
*/
public class TestDeleteMethodBuilder {
static String orgClassName = "build/TestAppend.class";

/**
* @param args
*/
public static void main(String[] args) {
// 해당 클래스를 불러온다.
JavaClass classz = null;
try {
classz = new ClassParser(orgClassName).parse();
} catch (Exception e) {
System.out.println(orgClassName + "가 존재 하지 않습니다.");
System.exit(0);
}

Method[] methods = classz.getMethods();
ConstantPoolGen cp = new ConstantPoolGen(classz.getConstantPool());

for (int i = 0; i < methods.length; i++) {
MethodGen mg = new MethodGen(methods[i], classz.getClassName(), cp);

// appendMethod delete
if("appendMethod".equals(methods[i].getName())) {

System.out.println(" ### [작업 method name] " + mg.getName() + " [Signature] " + methods[i].getSignature());

InstructionList il = mg.getInstructionList();
InstructionHandle[] ih = il.getInstructionHandles();

for(int j=0; j < ih.length; j++) {
Instruction inst = ih[j].getInstruction();

try {
if(!"return".equals(inst.getName())) il.delete(inst);
} catch(Exception e) {
System.out.println("==> error rise on [name] " + inst.getName() + " [message] " + e.getMessage());
e.printStackTrace();
}
}

methods[i] = mg.getMethod();
il.dispose();
}
} // end for

/*
* Dump the class to "class name"_.class
*/
String dumpClassName = "c:/temp/" + classz.getClassName() + ".class";
try {
classz.setConstantPool(cp.getFinalConstantPool());
classz.dump(dumpClassName);
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("== 종료했습니다.");
}
}

일요일, 4월 20, 2008

bcel 셈플을 만들어서 블로그에 공개하고 있는데, 흠 사실 예제야 모 어찌 저찌 해서 고생하면 다 만들수 있는 문제일수도 있다.

사실은 bcel을 사용하여 jvm의 기본 원리 및 구조를 파악하는 것이 먼저 이겠으나, 흠냐리 봐야할거 좀 많다. jvm spec을 어느정도는 알고 있어야 가능하겠다.

SUN 공식 JVM SPEC 책
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

JVM SPEC 책
http://www.artima.com/insidejvm/ed2/jvm.html

BCEL 홈
http://jakarta.apache.org/bcel/manual.html

ASM 홈
http://asm.objectweb.org/

BCEL을 어느정도 보신 분이라면 알겠지만, 자료가 너무 부족하다. 나는 약간 미완성인듯한 느낌까지 받았다.

ASM 경우는 ECLIPSE PLUG-IN이 있는데, 이것도 많이 유용하다 하겠습니다.
이름은 Bytecode Outline이고 http://andrei.gmxhome.de/bytecode/index.html입니다.

이런거 저런거 귀찮다면 자바에디터로 eclipse를 사용하실텐데 f3를 눌러보시면 된다.
물런 이런 코드를 처음에는 보기 어렵겠지만, 위의 문서를 어느정도 본다면 눈에 차차 들어 올테니.. 도움이 될것이다.

셈플 만드는 작업이 끝나면 어떤 모양으로든 다른 분들에게 도움이 되는 것을 만들어보도록 하겠습니다.
좋은 아이디어 있는 분 말씀해주세요

bcel 두번째 sample

미력하나마 두번째 예제 소스 입니다.

처음 예제는 bcel을 사용하여 기본 Test코드를 생성 하였다면 두번째 예제는
그 예제에 간단한 메소드 하나를 추가하는 것으로 예제를 만들어 보도록 하겠습니다.
아래 보시면 알겠지만 appendMethod(str)을 추가한것이고 private static 으로 시작하는 메소드가 추가 되어 있습니다.

참고로 sun jdk 1.6을 사용했고, apache에 있는 bcel 5.2와 같은 것으로 생각됩니다

* public class TestAppend {
* public static void main(String[] args) {
* System.out.println("BCEL Start...");
*
* String str = "..test bcel..."; *
* System.out.println("Str Value " + str);
*
* appendMethod(str);
* }
*
* private static void appendMethod(String str) {
* System.out.println("appendMethod value is " + str);
* }
* }


bcel로 다음과 같은 소스를 만들어 보겠습니다.

package com.test;

import java.io.IOException;

import org.apache.bcel.verifier.structurals.LocalVariables;

import com.sun.org.apache.bcel.internal.Constants;
import com.sun.org.apache.bcel.internal.generic.ALOAD;
import com.sun.org.apache.bcel.internal.generic.ASTORE;
import com.sun.org.apache.bcel.internal.generic.ArrayType;
import com.sun.org.apache.bcel.internal.generic.ClassGen;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC;
import com.sun.org.apache.bcel.internal.generic.InstructionConstants;
import com.sun.org.apache.bcel.internal.generic.InstructionFactory;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
import com.sun.org.apache.bcel.internal.generic.MethodGen;
import com.sun.org.apache.bcel.internal.generic.ObjectType;
import com.sun.org.apache.bcel.internal.generic.PUSH;
import com.sun.org.apache.bcel.internal.generic.Type;

/**
* jdk 1.6에 있는 것으로..
*
* 이번 것은 메소드를 추가한다.
*
* public class Test {
* public static void main(String[] args) {
* System.out.println("BCEL Start...");
*
* String str = "..test bcel..."; *
* System.out.println("Str Value " + str);
*
* appendMethod(str);
* }
*
* private static void appendMethod(String str) {
* System.out.println("appendMethod value is " + str);
* }
* }
*
* @author hangum
*
*/
public class TestAppendMethodBuilder {
/**
* method를 추가한다
*
* @param cg ClassGen
* @param msg mag index
*/
public static void appendMethod(ClassGen cg) {
InstructionList il = new InstructionList();

MethodGen mg = new MethodGen(
Constants.ACC_STATIC | Constants.ACC_PRIVATE,
Type.VOID,
new Type[]{ Type.STRING },
new String[]{ "str" },
"appendMethod",
"TestAppend",
il,
cg.getConstantPool()
);

InstructionFactory factory = new InstructionFactory(cg);

il.append(
factory.createFieldAccess(
"java.lang.System",
"out",
new ObjectType("java.io.PrintStream"),
Constants.GETSTATIC)
);

// variable setting
LocalVariableGen[] arLvg = mg.getLocalVariables();
il.append(new ALOAD(arLvg[0].getIndex()));

il.append(factory.createInvoke("java.io.PrintStream", "println",
Type.VOID, new Type[] { Type.STRING },
Constants.INVOKEVIRTUAL));

il.append(InstructionConstants.RETURN);

mg.setMaxStack();
cg.addMethod(mg.getMethod());
}

/**
*
* @param args
*/
public static void main(String[] args) {
System.out.println("== 작업을 시작했습니다. ");

ClassGen cg = new ClassGen("TestAppend", // class name
"java.lang.Object", // super class
"",
Constants.ACC_PUBLIC | Constants.ACC_SUPER,
null);

ConstantPoolGen cp = cg.getConstantPool();
InstructionList il = new InstructionList();

// method 생성
MethodGen mg = new MethodGen(
Constants.ACC_STATIC | Constants.ACC_PUBLIC,
Type.VOID,
new Type[] {
new ArrayType(Type.STRING, 1)
},
new String[] { "args" },
"main",
"TestAppend",
il,
cp);

InstructionFactory factory = new InstructionFactory(cg);

ObjectType p_stream = new ObjectType("java.io.PrintStream");

il.append(factory.createFieldAccess("java.lang.System", "out",
p_stream, Constants.GETSTATIC));
il.append(new PUSH(cp, "BCEL Start..."));
il.append(factory.createInvoke("java.io.PrintStream", "println",
Type.VOID, new Type[] { Type.STRING },
Constants.INVOKEVIRTUAL));

// 변수 str 생성
LocalVariableGen lvgStr = mg.addLocalVariable("str", Type.STRING, null,
null);
int str = lvgStr.getIndex();
il.append(new PUSH(cp, "..test bcel..."));
lvgStr.setStart(il.append(new ASTORE(str)));

// str Value + str
il.append(factory.createFieldAccess("java.lang.System", "out",
p_stream, Constants.GETSTATIC));
il.append(factory.createNew(Type.STRINGBUFFER));
il.append(InstructionConstants.DUP);
il.append(new PUSH(cp, "Str Value, "));
il.append(factory.createInvoke("java.lang.StringBuffer",
"", Type.VOID, new Type[] { Type.STRING },
Constants.INVOKESPECIAL));
il.append(new ALOAD(str));
il.append(factory.createInvoke("java.lang.StringBuffer", "append",
Type.STRINGBUFFER, new Type[] { Type.STRING },
Constants.INVOKEVIRTUAL));
il.append(factory.createInvoke("java.lang.StringBuffer", "toString",
Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));

il.append(factory.createInvoke("java.io.PrintStream", "println",
Type.VOID, new Type[] { Type.STRING },
Constants.INVOKEVIRTUAL));

// method 추가하고 호출하는 코드를 삽입한다
appendMethod(cg);

il.append(new ALOAD(str));
int appendMethod = cp.addMethodref("TestAppend", "appendMethod", "(Ljava/lang/String;)V");
il.append(new INVOKESTATIC(appendMethod));

// return void
il.append(InstructionConstants.RETURN);

mg.setMaxStack();
cg.addMethod(mg.getMethod());

il.dispose();

// construct
cg.addEmptyConstructor(Constants.ACC_PUBLIC);

// 파일생성
try {
cg.getJavaClass().dump("build/TestAppend.class");
} catch (IOException ioe) {
ioe.printStackTrace();
}

System.out.println("== 작업을 끝냈습니다.");
}
}