Clean Code that Works.

스윙 app 그리는 중.

은근 귀찮은 gui 화면 구성 -ㅅ-

JavaDB

프로젝트2009. 4. 16. 15:22

프로젝트에 javadb를 사용해야 해서 요 몇일 보구 있다.

구글링을 해보니 원래는 아파치 산하 derby 라는 프로젝트였는데 sun에서 같이 물고 올라간다는.. 주절 주절.
여튼 derby = javadb

swing app 개발인데 javadb를 물고 올라가야 한다는..

관련 문서가 죄다 영어라서 조금 진행이 어렵기는 하지만 나름 진도가 나가고 있다.

=ㅅ=..

NetworkServerControl server = new NetworkServerControl(InetAddress.getByName("localhost"),1527);
server.start( null);

위 소스 코드를 메인함수에 추가 하면 애플리케이션이 올라 가면서 javadb를 물고 올라간다.
server.start( new PrinterWriter( System.out)); 으로 바꾸어 주면
간단한 로그가 찍히고.
좀더 자세히 알고 싶으면
server.getSysinfo() 하게 되면 javadb 정보를 확인 할 수 있다.

연결 하는 방법은
 String nsURL="jdbc:derby://localhost/D:/DBFile/Derby/ADMIN;create=true";
 java.util.Properties props = new java.util.Properties();
 props.setProperty("user","admin");

 Class.forName("org.apache.derby.jdbc.ClientDriver");
 Connection conn = DriverManager.getConnection(nsURL);

요렇게 하면 커넥션이 만들어 진다.

관련 파일들은 D:/DBFile/Derby/ADMIN URL에 자동으로 생성 되게 된다.

이렇게 연결해서 사용하기 위해서는 admin 유저에 따른 스키마를 생성 해야 하고,
각각 테이블을 생성 하면 된다.

문서 보기 : Click me!

문서화는 잘 되어 있는데 죄다 영어라는게 문제다. =ㅅ=;;

열심히 구글링 하면서 개발 해야겠다능.

=========================================================================================================

따로 스키마를 생성 하지 않으면 디폴트로 APP란 스키마를 사용 하게 된다.

String nsURL="jdbc:derby://localhost/D:/DBFile/Derby/ADMIN;create=true";
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection conn = DriverManager.getConnection(nsURL);

이렇게 연결 해서 테이블을 만들어 보면 APP 스키마 아래에 테이블이 생성된 것을 확인 할 수 있다.

작년에 패턴책을 보긴 봤는데
기억은 한개도 나지 않는다 -_-..

이건 뭐 적용을 해 봤어야.

그래서 이번 상반기에 꼭 익숙해 져야할 패턴 4가지를 정했다.
  • Factory pattern
  • Composite pattern
  • Decorator pattern
  • Singleton pattern

이 4가지에 대하여 꼭 익숙해 지도록 하자.

자료는 위키 백과에 많다 -ㅅ-;;

한글 위키 백과 보다는 영문 위키 백과
UML 및 더 자세한 설명, 자바 샘플이 있기 때문에 영어 공부도 할 겸해서
영문 위키를 참고 하여 공부할 것을 목표로 하고
번역하고 다시 정리해서 블로그에 올리는 것을 목표로 하자.

이번주 목표는 팩토리 패턴.

디자인 패턴에 관한 소개.
아직 안읽어봄 ;

Design pattern (computer science)




모바일 용으로 개발 하고 싶은 프로그램이 생각났다!!!!
근데 -_-..

안드로이드는 아직 나올려면.......(안드로이드로 가는 기분)
애플 앱스토어 용으로 개발 할려면....
아이팟 + 맥 .. ㄳ. ㅠ_ㅠ

이건 뭐...

가장 만만한게 윈도우 모바일 용으로 하는 거구나. -ㅁ-
집에 비주얼 스튜디오를 설치해서 한번 해볼까..

아.. 재미 있을꺼 같아 ㅋㅋ

하지만 모바일용 프로그램 경험은 C# 으로 pda제품 개발 밖에 없다는거~


ExtJs

매력적인 자바스크립트 프레임워크.
가장 큰 장점은.
다른 자바 스크립트 프레임워크와 달리 지원하는 모듈이 많다는 것이다.

몇일 사용해본 경험으로는 마치 플렉스를 사용하는것 같은 느낌이었다.
지금은 2.2.1 버전이지만
곧 3.0으로 올라 선다고 한다.
메이저 버전이 올라간다는거 보면 새로운 모듈이 대거 추가 되는거 같다.

자세한건.. 나오면.. -ㅅ-..

ExtJs 클래스 다이어 그램 보기

라이센스는 일단 무료(아.. 아닌가 -_- ;)고
개발자 숫자와 지원 방법에 따라 요금이 틀리다.(이메일 지원, 기타 지원등)

가장 좋은 점은 포럼이 활성화 되어 있어
왼만한 질문들은 거의 다 답변이 되어 있다는 것이다.
물론 죄다 영어이고 영어로 검색해야 하지만.

지금 테스크탑 윈도우 형태로 grid를 사용한 게시판을 만들고 있는데.
전체적인 json 표기법에 대한 이해와 자바스크립트 클래스에 대한 사용 방법만 잘 기억하면
편하게 사용할 수 있을것 같다.(나는 아직 부족해! ;ㅁ;)

3.0에 맞추어 번역서가 나와줬으면 하는 바램이 있다.

주말에 해야할 포스팅.

ExtJs에 JSON 형태의 값을 리턴하기 위하여
SpringMVC에서 어떻게 값을 만들어서 리턴 해야 하는지.

필요 lib :
  • json-lib-2.2.3-jdk15.jar
  • commons-lang
  • commons-collections
  • commons-beanutils
환경
  • eclipse 3.4
  • spring 2.5
  • IE 7

컥.. 0,.0
주말에 머했지!
그냥 슝 지나갔네.. ㅠ_ㅠ

내일 점심 때 포스팅 합시다.



스스로를 설명 하는 코드.
여러분이 작성한 프로그램을 유지 보수하는 사람이 여러분의 연락처를 알고 있는 난폭한 정신병자라는 가정 하에 코드를 작성 하라.
                                                                                                                      - 익명 -

http://docs.jquery.com/Tutorials:Using_Ext_With_jQuery

구글 그룹에 답변 : 바로 가기

a) jquery.js
b) dimensions-plugin
c) other possible jquery-plugins you might want to use
d) the Ext jQuery Adapter script. This is in your ext-directory which you
just uncompressed earlier, at ext-1.0\adapter\jquery\ext-jquery-adapter.js
e) Include the main Ext javascript-file, ext-1.0\ext-all.js

6) Include the necessary css-eye-candy
Please note that the Ext css-files reference images inside the ext-folder,
so I wouldn't carelessly move them around.
a) The ext base css from: ext-1.0/resources/css/ext-all.css
b) Pick a theme, for Dark Vista: ext-1.0\resources\css\ytheme-vista.css
(there is also ytheme-aero.css and ytheme-gray.css, didn't try em out yet).

7) Like all l33ts just skip the tutorials and jump right into mixing jQuery
with Ext:

내일 회사 가면 해보자.

오.. 신기해.. =ㅁ=

Jquery 공부한지도 얼마 안됬는데 .... OTL.

extjs 도 번역서좀 굽신.


아. 먼가 기술적인 내용이..
포스팅이 안되고 있다 -ㅅ-..

기술적인 내용은 사이트 개발 들어가면서 포스팅 해 봅시다..
그럼 시작!

일반적인 프로젝트는 거의 100% 계획된 일정을 넘긴다. 여러분이 일정을 넘겼을 때, 시간의 양을 늘리는 것이 반드시 필요하다. 그런 경우에는 그렇게 하고, 만약 그렇게 할 수 없다면 다음과 같은 다른 해결책을 시도해 볼 수 있다.

일정에 맞출 수 있다는 희망을 가져라.
 - 희망적인 낙관론은 프로젝트가 일정을 넘겼을 때 보이는 일반적인 반응이다. 전형적인 합리화는 다음과 같다. "요구 사항이 우리가 예상했던 것보다 조금 더 오랜 시간이 걸렸지만, 더 이상 변하기 않기 때문에 나중에 시간을 절약할 수 있을 것이다. 그리고 코드 작성과 테스트 시에 부족한 부분을 보충할 것이다." 하지만 이런 경우는 좀처럼 일어나지 않는다. 300개의 소프트웨어 프로젝트를 대상으로 한 조사에서는 일정을 늦추거나 초과하는 것이 일반적으로 프로젝트의 마무리 단계에서 증가한다는 결론을 내렸다. 프로젝트는 나중에 잃어버린 시간을 보충하지 않는다. 결국 더욱 늦춰질 뿐이다.

팀을 확장하라
 - Fred Brooks의 법치에 따르면, 늦어진 소프트웨어 프로젝트에 사람을 추가하는 것은 프로젝트의 일정을 더 늦춘다고 한다(Brooks 1995). 이는 마치 불난 데 기름을 붓는 것과 같다. Brooks의 설명은 설득력이 있다. 새로운 사람은 무언가를 생산할 수 있기 전에 프로젝트에 익숙해주기 위한 시간이 필요하기 때문이다. 그들의 훈련은 이미 훈련은 받은 사람들의 시간을 빼앗게 된다. 그리고 단순히 사람의 수를 늘리는 것은 프로젝트의 복잡성과 의사 소통의 양을 증가 시킨다. Brooks는 한 여성이 9개월만에 한 아이를 낳을 수 있다고 해서 9명의 여성이 한 달에 한 아이를 낳을 수 있는 것은 아니라는 사실을 지적하였다.
  당연히 여러분은 Brook의 법칙에 있는 경고를 훨씬 자주 주의해야 한다. 프로젝트에 사람을 투입하면, 그들이 프로젝트를 제 시간에 완성시킬 것이라고 기대하기 쉽다. 하지만 경영진들은 소프트웨어 개발이 금속 박판에 못을 박는 일과는 다르다는 것을 이해할 필요가 있다. 더 많은 사람들이 작업을 한다고 해서 반드시 더 많은 작업이 수행된다는 것을 의미하지는 않는다.
  하지만 늦어진 프로젝트에 사람을 추가하는 것이 프로젝트를 더 늦춘다는 단순한 문장은, 어떤 환경에서는 새로운 사람을 추가하여 프로젝트의 속도를 높일 수 있는 가능성을 있다는 사실을 감추고 있다. Brooks가 그의 관점에서 지적했듯이, 독립적으로 나누어져서 수행될 수 없는 소프트웨어 프로젝트에 새로운 사람을 추가하는 것은 도움이 안 된다. 하지만 만약 프로젝트의 작업이 나뉠 수 있다면, 프로젝트의 일정이 늦어졌다고 하더라도 프로젝트를 나누어 서로 다른 사람들에게 일을 할당할 수 있다. 다른 연구자들은 프로젝트의 일정을 늦추지 않고 늦어진 프로젝트에 사람을 추가할 수 있는 환경을 공식적으로 규명하였다.

프로젝트의 범위를 축소하라
 - 프로젝트의 범위를 축소하는 가장 강력한 기법이 종종 간과된다. 만약 어떤 기능을 제거하면, 설계와 코드 작성, 디버깅, 테스트, 그리고 해당 기능에 대한 문서를 제거할 수 있다. 또한, 다른 기능에 대한 해당 기능의 인터페이스도 제거할 수 있다.
  여러분이 제품을 초기에 계획할 때, 제품의 능력을 "반드시 갖추어야 할 것", "가지면 좋은 것", 그리고 "선택적인 것"으로 분류한다. 만약 일정이 늦어지게 되면, "선택적인 것"과 "가지면 좋은 것"에 대한 우선순위를 매겨서 가장 덜 중요한 것을 뺀다.
  어떠한 기능을 완전히 제거할 수 없다면, 같은 기능을 수행하는 보다 값싼 버전을 제공할 수 있다. 아마도 일정에 맞추기는 했지만 성능을 위해서 최적화는 되지 않는 버전을 제공할 것이다. 그리고 최소한의 중요한 기능만이 미숙하게 구현된 버전을 제공할 것이다.
  또한, 느린 버전을 제공하는 것이 훨씬 쉽기 때문에 속도에 대한 요구 사항을 무시하기로 결정할 것이다. 그리고 메모리 집약적인 버전을 제공하는 것이 쉽기 때문에 공간에 대한 요구 사항도 무시할 것이다.
  최소한의 중요한 기능에 대한 개발 시간을 재측정하라. 어떤 기능을 두 시간이나 이틀, 또는 2주 내에 제공할 수 있는가? 이틀 버전 대신 2주 버전, 또는 두 시간 버전 대신 이틀 버전을 작성하여 얻는 것이 무엇인가?


머..
요구사항 분석이랄꺼 까지는 없구

요구사항을 확인해 보자.

주요 기능
  1. 이미지 검색 : 입력한 이미지를 가지고 기존 이미지와 검색
  2. 키워드 검색 : 입력한 키워드를 가지고 병해충 정보에서 검색하여 결과 이미지 표시
  3. 구조 검색 : XML 파일로 만들어져있는 데이터 파일의 구조 검색.

확장 기능

  • 사용자 기능 추가 하여 사용자 이미지 업로드 가능 하게 할 것(댓글, 개인 페이지)
  • 매일 새벽에 크론 돌면서 사용자가 업로드한 이미지까지 인덱싱 작업 할 것(이미지가 많아질 경우 매일 작업을 매주 작업으로 변경)


개발 환경

  • java(1.5), oracle(공부좀 허자)
  • spring 2.5, spring MVC, ibatis
  • JQuery, Flex
  • IE 8, FF 3

개발 방법

  • TTD 생각 하면서 할 것
  • CBD 생각 하면서 할 것
  • 읽기 쉽게 개발할 것
  • CLEAN CODE THAT WORKS.

대충 이정도로 해서 개발.

음.. 기존에 만들어 놓은게 있으니 -ㅅ-..

일단 요구사항에 대한 분석을 조금 더 해보자

이번주 목표
요구사항 정리!