Java 사용자 정의 Component 만들기

이전 포스팅에서 총 3개의 Java Panel 만들고 Panel 자체를 이미지로 출력해서 Google Maps API에서 사용할 Custom Map Tile에 사용하기로 했다.

문제는 Sense Panel과 AntiSense Panel에 Genome 정보(SNP, CNV, Exon, Intron 등등등등)를 어떻게 표시할것인가?에 대한 것이다. 그전에 그러면 Bioinformatics에서 위의 정보들을 보여주기 위해서 사용하는 그래픽은 어떠한 것들이 있는지 간단히 살펴보자.

glyph_showcase
BioRuby의 다양한 생물 정보 표시 그래프??

위의 그림들은 흔히 우리가 Genome Browser에서 보는 표시형식들이다. box, line, line with handles, directed, directed box, triangle, spliced, direct spliced, composite features, transcripts들을 통해서 생물학 정보를 보여주고 있다. (출처 : Bio-Ruby의 Bio::Graphics http://bio-graphics.rubyforge.org/)

이러한 여러 모양의 그래프는 첫째 이뻐야 한다. 그래야 나중에 논문에 삽입하거나 할때 좀 뽀다구가 나게 된다. 둘째는 만들기 쉬워야 한다. 이 두가지를 만족하도록 위의 그래프??들을 Java를 통해서 만들어 보도록 하자.

우선, 둘째 부분을 만족하기 위해서는 각 모양을 컴포넌트로 만들어서 두고 두고 사용하면 된다. Java의 Component 객체를 상속받아서 자신만의 custom component를 만들어 두면 된다. 이때 각 컴포넌트는 서로 컴포넌트들이 겹치더라도 컴포넌트가 반투명화 되어 있어 서로 겹쳐도 상관없도록 만들었다.

그럼 차근차근 이쁘고 반투명한 나만의 Bioinformatics 정보를 표현하기 위한 컴포넌트를 만들어보자. ^^;;  결과부터 보면 다음과 같다. 이 컴포넌트는 상단에 텍스트가 들어가는 반투명의 그라데이션이 적용된 컴포넌트이다. 아직 이렇게 생긴걸 더 많이 만들어야 되기 때문에 시간이 좀걸린다. 위의 BioRuby 패키지에서 만들어주는 그래프보단 이쁘지 않은가??? ^^;;;

customcomponent
크기도 제각각, 겹쳐도 반투명이라 다 보이고 ^^;; (가장 기본적인 generic, box, line에 사용될 컴포넌트 예시)

만드는 방법은 JComponent를 상속받는 클래스를 하나 작성하고, 여기의 paintComponent() 메소드를 작성한다. paintComponent()에다가 Graphics2D를 이용해서 선도 긋고, setComposite를 이용해서 투명도도 설정해주고, GradientPaint를 이용해서 그라데이션 효과를 주고, 물론 디자인적인(동물적인) 감각을 활용해서 최대한 이쁘게 ^^;; 만들어서 일반 JButton이나 JLable처럼 Panel에 붙이면 된다.

Posted by hongiiv

2008/02/16 02:05 2008/02/16 02:05

real

이제 해야 할 일은 이미지를 만드는 작업이다. 지금 만들 Genome Browser의 경우 위의 그림처럼 3개의 부분으로 나누어 생각해 볼 수 있다. 2번 부분은 chromosome의 위치를 보여주는 눈금자가 위치할 부분이고 이 눈금자(2번, Scale)를 기준으로 윗부분(1번, Sense)과 아랫부분(3번, Antisense)에 실제 유용한 정보들(SNP정보 등등)이 보여지게 된다.

여기에서는 Java를 이용하여 그림파일을 생성할 것이다. Java에서 이미지를 생성하고 이를 파일로 얻는 방법은 다음과 같다.

1. BufferedImage를 생성한다.
2. 위의 생성된 버퍼로 부터 Graphics 객체를 얻는다.
3. Graphics 객체에다가 마구 마구 그린다. drawLine(), fillRect() 등등 ^^
4. ImageIO.write()를 이용하여 버퍼에 들어 있는 내용을 그림 파일로 출력한다.

===============예제 코드 시작 ===============
int width = 256;
int height = 256;
//이미지 버퍼를 생성한다.
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//버퍼로 부터 그래픽 객체를 얻는다.
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
//그래픽 객체를 흰색으로 채운다.
g.setPaint(Color.white);
g.fillRect(0, 0, 256, 256);

try {
           //버퍼 이미지를 파일로 출력한다.
            File outFile = new File("c:\\tiles\\test.jpg");
            ImageIO.write(bufferedImage, "jpg", outFile);
} catch (Exception e) {
            System.out.println(e.getMessage());
}

===============예제 코드 끝===============

위의 방법은 그냥 무턱대고 Graphics 객체에 그림을 그리는 방법인데, 위에서 말한 세부분에 대해서 정확하고 이쁜^^ 그림을 그리기 위해 조금 다른 방법을 사용한다.

1. JPanel을 3개 만든다. (Sense Panel, Scale Panel, Antisense Panel) 그리고 이 JPanel들이 올려질 커다란 Base Panel까지 총 4개의 JPanel을 생성한다.
2. 각각의 패널을 정보로 꽉 채운다.
3. JPanel(Base Panel)을 이미지 버퍼에 넣고 출력해 버린다.

이렇게 하면 JPanel에 있는 모습이 그대로 이미지를 만들 수가 있다. 따라서 좀더 다양하고 유연하게 정보들(SNP정보등등)을 표현할 수가 있다. 왜냐면 JPanel 자체를 그림파일로 출력해 버리니깐...(^  ^)/ 그럼 다시 작업 시작하러 이만... 요즘 이거 때문에 블로그에 글도 못쓰고,,, 그냥 지금까지 작업한 내용을 작업일지 형식으로....ㅎㅎㅎ

basepanel

출력된 Panel의 이미지는 다음과 같다.

test

Posted by hongiiv

2008/02/14 11:12 2008/02/14 11:12
, , , , , , ,
Response
No Trackback , 2 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/315

mashup

작년에 이어서 대한민국 매쉬업 경진대회를 진행한다고 합니다. 네이버와 다음은 이렇게 공동으로 서로의 살길을 찾아가고 있는데요 ^^;; 어디 오픈 API를 통해서 바이오관련 매쉬업 아이디어 없을까요? ㅋㅋㅋ 외국에서는 질병에 관련된 정보를 구글맵을 통해서 보여주는 매쉬업도 있던데...

그냥 매쉬업이 아니라 대한민국이네요 두 회사가 주최하면 바로 대한민국이 되어버리는군요!!! KISTI와 KOBIC도 같이 주최하면 바로 대한민국 바이오 워크플로우 경진대회가 되어버리겠죠 ^^;;

바이오 워크플로우에서도 이런 움직임이 있었으면 하네요 ^^;; 어차피 이러한 워크플로우로 만든 것들도 매쉬업의 한 형태 아니겠습니까??

Posted by hongiiv

2007/11/08 15:22 2007/11/08 15:22
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/255

Daum의 문맥 키워드 API

Daum DevDay때 언급 되었던 문맥 키워드 API가 드디어 공개되었다. 특정 문서에서 중요한 키워드를 자동으로 찾아주는 서비스로 활용할 여지가 꽤 많은 API인것 같다. 어떠한 알고리즘으로 키워드를 추출합니까? 라는 질문에 그건 회사 비밀이니 말할수 없다는 대답으로 웃음지게 만들었던 ^^;; 이놈을 어디다 쓸지는 대충 생각했는데, 이제 공개되었으니 슬슬한번 붙여봐야겠다.

이 글은 스프링노트에서 작성되었습니다.

Posted by hongiiv

2007/09/27 09:41 2007/09/27 09:41
, , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/238

전세계적으로 발병되는 질병에 대한 정보를 구글맵을 통해서 보여주는 Mashup서비스인 Healthmap

사용자 삽입 이미지


ProMED Mail, World Health Orgnization, EuroSurveillance, Google News로 부터 얻은 정보를 구글맵을 통해 보여주는 서비스이다.

국내외 성범죄자들의 주거지를 구글맵을 통해 공개한다면.... ^^;;; 사진과 함께...

Posted by hongiiv

2007/05/28 20:09 2007/05/28 20:09
, , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/193

인간의 약 30억개(base)가 되는 염기서열을 해석한다는 것은 , 30억 베이스 중에서 어느 특정부분이 어떻게 단백질로 되어서, 세포내외에서 특정 역할을 어떻게 수행하는지를 밝히는 것이다.

이러한 해석 과정을 연구하기 위한 수많은 연구 분야가 있다. 간단하게 이러한 연구를 수많은 연구를 분야를 통틀어 Bioinformatics라고 한다면, 주로 바이오 데이터를 이용한 분석보다는 이러한 분석에 대한 연구를 진행하는데에 있어 기초적인 자료를 제공하는 바이오데이터 즉, 염기서열 정보, 유전자 해석정보등을 제공하는 바이오 데이터베이스와 Web 2.0과의 결합(?), 접목(?)에 대해서 논하고자 한다.

위에서 언급한 바이오데이터는 Genome Browser 형태로 제공되는데 바이오 데이터에 대한 정보는 상당히 복잡하게 얽혀 있기 때문에 이러한 정보를 한눈에 볼 수 있는 Genome Browser는 연구자들에게 많은 편의를 제공하고 있으며, 생물학 연구에 있어서 중요한 기초 요소중의 하나이다.

현재 연구자들이 많이 사용하고 있는 바이오 데이터베이스(이 안에 Genome Browser를 포함)는 NCBI, Ensembl, UCSC등이 있으며, 모두 사용자의 시각적 편의를 위해 데이터베이스를 Genome Browser 형태로 제공하고 있다. 인터넷상의 정보들이 HTML이라는 마크업 언어를 통해 서버에 저장되어 있다. 이러한 HTML은 인터넷익스플로러등의 웹 브라우저를 통해 볼 때 그림이나 문자를 통해 사용자들의 볼 수 있다. 바이오 데이터가 HTML이라면 Genome Browser는 인터넷익스플로러쯤...^^;

각각의 Genome Browser는 바이오 데이터를 시각적으로 표현한다는 공통점을 가지고 있지만, 나름대로의 특징을 가지고 있다. 많은 전문적인 나름대로의 특징이 존재하지만 가장 큰 특징은 NCBI와 Ensemble은 생물학자가, UCSC genome browser는 전산학자가 설계했다는 특징이 있다. 그래서인지 데이터베이스의 설계 효율성이나 시스템 스루풋 등은 UCSC가 다소 앞서지만, 시각적인 것은 NCBI, Ensemble이 다소 앞선 느낌이다.


각설하고 지금 말하고자 하는것은 이러한 Genome Browser를 만들어 보겠다는 것이다. 왜 이미 존재하는 것을 또 만들까? 라고 생각할 수 있겠지만, 어디 야후있다고 네이버나 구글이 생기지 않았더란 말이냐!!

그럼 어떻게 만들거냐? 답은 간단하게 like a Google!! 구글처럼, 구글맵 API처럼 사용자가 입맛대로 Genome Browser를 만들 수 있도록 API를 만들어 공개하는 거다.

그럼 뭐가 좋단 말인가? 어디 이를 통해 얻어지는 것이 한두개겠는가??
<시나리오 a>
나는 소프트웨어 개발회사의 개발자입니다. 요번 프로젝트는 제약회사에서 수주한 프로젝트인데, 쥐의 유전자 정보를 가공1 and 가공2 and 가공3 해서 이렇게 해서 보여주는 프로그램을 만들라고 합니다. 가공1, 가공2,가공3은 생물학을 전공한 연구자들이 알고리즘을 내고 제 동료가 프로그래밍합니다. 저는 이 결과를 시각적으로 보여줘야하는데 ㅜㅜ

네, 이런때 사용해도 될테고....

<시나리오 b>
나는 실험을 하는 연구자입니다. 프로그래밍은 조금 배웠는데... HTML ^^;;;; 제가 실험한 데이터와 공개된 바이오데이터와 비교하고 싶은데 모눈종이에다 일일이 그려가면서 하려고 하니 너무 시간이 오래걸리네요....

네, HTML만 안다고요. 좀 힘들겠지만. 이런때 사용해도 되겠죠 ^^;;

이상 혼자 생각이었습니다.

Posted by hongiiv

2007/05/10 10:43 2007/05/10 10:43
, , , , , , , ,
Response
No Trackback , 2 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/190

맥에서 .DS_Store 자동으로 지우기

이거 자동으로 생기는데 꽤 불편할때도 있군요. 구글링해서 찾은 .DS_Store 파일을 자동으로 지우는 스크립트 ^^

Posted by hongiiv

2007/03/19 18:52 2007/03/19 18:52
,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/181

cron과 같이 동작하는 java 프로그램

유닉스의 cron과 같이 특정한 시간에 어떠한 일을 할 수 있도록해주는 java 프로그램입니다. 이걸 가지고 1분 또는 10분마다 생성된 이미지를 Flickr에 올리면 끝!!

Posted by hongiiv

2007/03/09 16:29 2007/03/09 16:29
, , , ,
Response
No Trackback , 2 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/177

Flickr API를 통한 인증 샘플

Open API등 다양한 형태로 공개도니 웹 플랫폼들을 유기적으로 섞어 새로운 개념의 융합 서비스를 만들어내는 Mashup, Mashup의 기본이 되는 Open API들이 많은 기업들이 공개를 하고 있다.

어제부터 Flickr에 꽂혀서 블로그에도 붙이고 여러가지 생쑈를 하면서 놀고 있다가 저번에 jachin님이 말씀하신 24시간동안의 라이프로그를 1분단위로 기록해주는 Lifelog를 통해 생성된 이미지를 Flickr API를 통해서 Flickr에 업로드하고 이를 블로그에 슬라이드쇼로 보여주도록하는 것이다. ㅋㅋㅋ 첫단계로 FlickrJ를 통해 인증하고 코드를 첨부한다. ㅋㅋㅋ
 

인증을 위한 apiKey와 secret은 setup.properties 파일에 별도로 기록해둔다.

Posted by hongiiv

2007/03/09 16:15 2007/03/09 16:15
, , ,
Response
A trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/176

소스코드를 블로그에서 보여주기

언제부턴가 내생활의 일부가 되어버린 블로그 어제는 flickr badge를 붙였고, 오늘은 소스코드를 보기 좋게 하기 위한 dp.SyntaxHighlighter를 설치했다. 다운로드 받아서 css 스타일파일, 자바스크립트파일, 템플릿파일을 적당한 위치에 놓고 스킨에서 링크만 걸어주면 끝. 바로 이렇게 멋진 코드를 볼 수 있다.

Posted by hongiiv

2007/03/08 11:20 2007/03/08 11:20
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/167

스택과 힙에 대한 kldp의 글타래

http://kldp.org/node/199

Posted by hongiiv

2006/07/26 22:27 2006/07/26 22:27
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/135

프로그램의 실행시 그 프로그램의 수행시간을 체크해본다는 것은 크게 보아서 프로그램의 성능을 튜닝한다는 목표 아래 중요한 하나의 지표가 될 수도 있지만 단지 fun 재미로 해보는 것도 그닥 나쁘지 않다고 생각한다. 일목요연하게 한번 프로그램의 수행시간을 체크하는 방법들을 나열 해 보면 다음과 같다.

스톱워치
주변에서 간단하게 구할 수 있는 아이템이다. 실험실에서 훔쳐 온다던가 ㅋㄷㅋㄷ 수행하기전 버튼을 누르고 끝나면 다시 한번 눌러주면 되니 간단한 방법이다.

date 명령어
시스템에서 제공하는 클럭을 사용하는 방법으로 프로그램 시작전에 한번 끝나고 한번
[quote]$ date && 수행할프로그램 && date[/quote]
time 명령어
세가지 시간결과 real, user, sys를 보여준다. real은 총수행시간이고, user는 cpu가 사용자 영역에서 보낸시간, sys는 시스템 호출 실행에 걸린 시간을 의미한다.
[quote]$ time 수행할프로그램[/quote]
clock() 함수
프로그램의 일부를 실행하는데 걸리는 시간을 측정하는 함수를 이용하는 방법이다.

gettimeofday() 함수
현재 시스템 클럭시간을 반환하는 함수로 1970년 1월 1일 이후 경과한 초 수로 unix epoch라고 부른다.

Posted by hongiiv

2006/07/26 20:52 2006/07/26 20:52
, , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/133

패치 파일 만들기 - diff and patch

뭐 별로 그다지 프로그래램을 많이 짜는 편이 아니라 하지만 프로그램을 많이 설치하다 보니 diff와 patch를 자주 사용하게 됩니다.

패치 파일 만들기
패치 적용하기 가장 간단하고 내가 많이 쓰는 방법

Posted by hongiiv

2006/07/26 13:13 2006/07/26 13:13
,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/132

trac, svn, tattertools, moniwiki

trac

Wiki와 Web log(blog)는 웹에 큰 영향을 주고 있지만 엔터프라이즈에도 유용하게 쓰일 수 있다. 커뮤니티는 프로젝트 팀이나 이익 집단처럼 공통적인 관심사, 목표, 책임들을 갖고 있는 사람들의 모임이다. Wiki와 블로그를 기존 협업 툴과 결합하면 엔터프라이즈 팀의 생산성과 효과를 높일 수 있다.


이상으로 프로젝트를 체계적으로 관리할 수 있게 되었다. ^^;;

Posted by hongiiv

2006/06/15 21:46 2006/06/15 21:46
, , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/107

열차표예약 스크립트





당장 표가 없다고 무작정 새로고침을 누르다가 하나 생기면 예약하기를 몇번 겪다보니 짜증이 나서 파이썬으로 스크립트를 만들었다. 알아서 표가 생길때까지 ~~ 예약까지 해주니 음 이제 실전에서 효과를 거두는것만 남았다.

Posted by hongiiv

2006/02/24 11:41 2006/02/24 11:41
Response
No Trackback , 2 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/51

sax parser problem

parser has reached the entry expansion limit 64,000

기본적으로 jaxp 파서가 처리할 수 있는 element의 갯수(?)가 64,000개라고 한다.
5g짜리 xml 파일을 파싱하다가 알아버렸다.

그래서 다음과 같이 해결해 버렸다.

java -Xmx6000M -DentityExpansionLimit=200000 실행파일

참 그전에 자바에서 outofmemoryerror가 나서 Hospot VM의 메모리의 기본값(Heap memory)의 사이즈도 확 늘려줬다 :)

이어지는 내용

Posted by hongiiv

2006/02/09 20:57 2006/02/09 20:57
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/44



야후 블로그 벳지


Site Stats

Total hits:
291445
Today:
52
Yesterday:
166