넷빈즈 플랫폼(Netbeans Platform) 개발시, 리펙토링 후 발생하는 익셉션의 원인과 해결방법.

넷빈즈에는 스윙으로 윈도우즈 어플리케이션 개발을 편하게 할 수 있도록 도와주는
넷빈즈 플랫폼(Netbeans Platform)이 내장되어있다.
넷빈즈 플랫폼은, 간단히 말해 넷빈즈IDE를 어플리케이션 구동 환경으로 사용하여 그위에 필요한 어플리케이션을 플러그인
개념으로 개발하여, 넷빈즈위에 뚝딱뚝딱 얹기만해서 하나의 완성된 위도우즈 어플리케이션을 완성하도록하는 기능이다.

넷빈즈 플랫폼으로 작성된 다양한 상용/비상용 어플리케이션 스크린 샷은 여기서 볼 수 있다.

넷빈즈 플랫폼 으로 스윙어플 개발 시 다른 개발자의 모듈을 CVS에서 체크아웃 받거나 리펙토링 기능으로 패키지 리팩토링 후
프로젝트를 실행하면 아래 그림과 같은 익셉션 발생 하는 경우가 발생한다.


넷빈즈 플랫폼 익셉션

넷빈즈 플랫폼 익셉션

< 패키지 리팩토링 후 프로젝트 실행 시 익셉션 발생 화면 >

 
넷빈즈 5.0 플랫폼으로 스윙어플 작성시 패키지를 리펙토링을 수행하면
소스, layer.xml, mainfast 파일을 자동으로 수정 해 주지만 리펙토링 해 주는 부분을
잘 확인 해 보면 몇몇 부분은 자동으로 리펙토링 해 주지 않는 부분이 있음을확인 할 수 있다.
 
예를 들면 소스내에 패키지 명을 String 문자열로 기록 해 둔 부분이라든지
소스 생성 시 layer.xml등에서 auto generation 해 준 코드 부분이 있다.
 
좀 더 구체적인 예를 들면 넷빈즈 5.0 플랫폼으로 스윙어플을 작성하면
메뉴바를 구성하는  ***Action.java 클래스를 생성하는데
여기에 메뉴바에 표시할 아이콘 정보를
 
protected String iconResource() {
   return "com/prompt/csont/mokrokstatus/Connect.png";
}

와 같은 메소드로 표현 하고 있다.
 
 ***Action.java 소스에 기술해 둔 아이콘 경로값은 String 문자열이기 때문에 리펙토링 대상이 되지 않는 상태에서
패키지 리펙토링이 이루어지고 나면 실제 수행시 아이콘 이미지 파일을 칮을 수 없어 위 와 같은 익셉션 발생한다.

아직까지 이런 부분은 수작업으로 교정 해 주는 수 밖에 없다.
 

2007/08/10 18:48 2007/08/10 18:48
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

RFID 리더 에뮬레이터 :: RFID Reader Emulator

본 프로그램은 직장에서 제가 속한 팀이 제작하고 있는 RFID Middleware 개발에 따른 부산물입니다.
소스를 공개하기가 부끄러운 수준 이지만, RFID관련 하여 공부를 하신다거나 현장에서 개발을 하시는 분들께
이 코드가 또다른 영감을 줄 수 있다면 그걸로도 보람은 있으리라 생각 됩니다.

2007년 8월 현재 Thingmagic社의 Mercury 5 리더Intermec社의 IF5 리더 에뮬레이션이 준비되어 있습니다.
솔직히 현재 버전은 리더 에뮬레이터라기보다는 미들웨어에 부하를 주기위한 태그 데이터 발생기/더미 리더 성향이 강합니다.
저도 이런 저런 기능을 구현 해 보고 싶은 충동은 느끼나 이 코드는 RFID Middleware 개발에 따른 부산물로
여기에 정신을 쏟을 여력이 부족함을 안타깝게 생각 합니다.

짬짬히 다른 더미 리더도 구현 해 보고 싶지만 RFID 미들웨어가 회사 주력 솔루션도 아니고, 더욱이
실제 리더 없이 스펙문서만으로 구현하기 까다로운 면이 있어서 다른 리더에 대한 구현은 어찌 될 지 모르겠습니다.
자바 서버-소켓프로그램 경험이 있으시다면 소스와 각 리더의 스펙문서를 참조하여 해당 리더에뮬레이터 구현은  쉽게 되리라 생각합니다.

리더 에뮬레이션 소스를 보시면 아시겠지만 리더 에뮬레이터는 의외로 단순한 서버소켓으로 작동 하고 있습니다.
클라이언트에서 각 리더에 데이터 요청 신호를 보냈다는 가정하에 리더 에뮬레이터는 몇개의 태그 데이타를 수신한것 처럼 동작하게 됩니다.
리더에뮬레이터에서 발생하는 태그 데이터를 보기 위해서는 클라이언트 소켓 프로그래밍을 하실 필요가 있습니다.
소켓프로그래밍을 해 보셨다면 클라이언트를 쉽게 구현 하실 수 있을 겁니다.

매뉴얼 펼치기..



class diagram
클래스 다이어그램


본 프로그램의 구동 환경은 다음과 같습니다.
 JRE 1.4 이상. ( 소스 빌드시 JDK 5.0 이상 )
 MS Windows 혹은 Linux/Unix의 X-Window나 그에 준하는 GUI환경.

본 프로그램의 코드에는 다음과 같은 기법이 이용 되었습니다.
ServerSocket
Swing
Thread
JAVA Interface
Timer/TimerTask

마지막으로, 코드 수정과 개인적인 사용은 가능하지만 재배포와 상업적 이용은 허락하지 않습니다.

다운로드
리더 에뮬레이터 자체는 수백 kbyte수준이지만 JDK를 포함하고 있어
용량이 30mb 정도 됩니다.
파일을 다운로드 받으신 후 적당한 디렉토리에 압축을 해제 하시면
실행 프로그램과 소스, 매뉴얼을 보실 수 있습니다.
2007/08/10 13:48 2007/08/10 13:48
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

EPC 의 표준 URI 표현 :: EPC 데이터 형식

EPC 데이터 형식
EPC(Electronic Product Code, 전자 제품 코드 ) 는 일반 바코드 기술인 UPC(Universal Product Code) 와 비슷한 기능을 수행합니다 .
EPC 는 RFID(Radio Frequency Identification, 무선 주파수 식별 ) 태그와 다른 방법을 통해 물리적 객체를 보편적으로
식별할 수 있는 식별 체계입니다 . 표준화된 EPC 데이터 형식은 개별 객체를 고유하게 식별하는 EPC( 또는 EPC 식별자 ) 로 구성되며
EPC 태그를 효과적이고 효율적으로 읽을 수 있도록 선택적 필터 값을 포함할 수도 있습니다 .
RFID 태그에 인코딩된 EPC 는 제조업체 , 제품 , 버전 및 일련 번호를 식별할 수 있고 고유 항목을 식별하기 위한 추가 숫자 집합도 제공합니다 .
EPC 데이터 필드의 주요 부분은 객체를 고유하게 식별하는 EPC 식별자입니다 . EPC식별자에 있는 선택적 필터 값 필드는
기본 EPC 태그 읽기를 보완할 수 있습니다 . EPC버전 1.1 표준은 다양한 응용 프로그램이나 산업에 대해 다음 코딩 체계를 지정합니다.
    ■ GID(General Identifier, 일반 식별자 )
    ■ 일련화 버전의 EAN.UCC GTIN®(Global Trade Item Number)
    ■ EAN.UCC SSCC®(Serial Shipping Container Code)
    ■ EAN.UCC GLN®(Global Location Number)
    ■ EAN.UCC GRAI®(Global Returnable Asset Identifier)
    ■ EAN.UCC GIAI®(Global Individual Asset Identifier)
EPC 데이터 형식으로 지정된 RFID 엔티티의 경우 헤더 필드의 항목은 적용할 수 있는 이름 공간이나 코딩 체계를 나타냅니다

RFID 태그나 바코드와 같은 기본 물리적 매체와는 관계 없이 순수 아이디는 추상 형식 의 고유한 엔티티를 나타냅니다 .
EPC 표준은 " 순수 아이디 -- RF 태그 , 바코드 또는 데이터베이스 필드와 같은 특정 인코딩 수단과 관계 없이 특정 물리, 또는
논리 엔티티와 연결된 아이디 "
와 같은 정의를 제공합니다 . 또한 " 아이디 URI -- 순수 아이디를 URI(Uniform Resource Identifier)
로 표현한 것이며 URI 는 대형 시스템의 소프트웨어 구성 요소 간 아이디 데이터 교환에 공통적으로 사용되는 문자열 표현입니다 ."

라고 정의합니다 .

EPC 의 표준 URI 표현에는 다음과 같은 네 가지 범주가 있습니다 .
    1. 물리적 객체를 식별하는 EPC 필드만 포함하는 순수 아이디의 URI( 정규적 양식이라
       고도 함 ). 예를 들어 , GID 의 순수 아이디 URI 는 "urn:epc:id:gid:10.1002.2", GRAI
       의 URI 는 "urn:epc:id:grai:0652642.12345.1234" 가 될 수 있습니다 .
    2. 태그 인코딩을 나타내는 EPC 태그의 URI. 이러한 URI 는 태그를 쓰기 위한 응용 프
       로그램 소프트웨어에서 사용할 수 있습니다 . 일련화된 GTIN 64 비트 인코딩의 예는
       "urn:epc:tag:sgtin-64:3.0652642. 800031.400" 이 될 수 있습니다 .
    3. 잘못된 비트 수준 패턴을 단일 십진수로 나타내는 원시 비트 문자열의 URI. 예를 들
        어 , "urn:epc:raw:64.20018283527919" 입니다 .
    4. EPC 패턴의 URI. 각 패턴 URI 는 EPC 필터링 용도로 EPC 집합을 참조합니다 . 예를
       들어 , urn:epc:pat:sgtin-64:3.0652642.[1024-2047].* 패턴은 필터 값이
       있는 SGTIN 식별자 64 비트 태그가 3 이고 , 회사 접두어는 0652642 이며 , 항목 참
       조가 1024-2047 범위인 모든 일련 번호를 참조합니다 .

인코딩 아이디 계층은 필터 값 같은 추가 정보와 함께 순수 아이디를 구성하고 특정 구문 ( 일반적으로 특정 크기의 값 필드로 구성 )
으로 렌더링하여 개념화할 수 있습니다 .
지정된 순수 아이디에는 바코드 인코딩 , 다양한 태그 인코딩 및 다양한 URI 인코딩과 같이 가능한 인코딩이 많이 있습니다 .
또한 인코딩은 아이디 외에 추가 데이터 ( 예 : 일부 인코딩에 사용된 필터 값 ) 를 포함할 수 있습니다 .
이 경우 인코딩 체계는 자신이 가 질 수 있는 추가 데이터를 지정합니다 .
마지막으로 인코딩 ( 특정 시스템에서 읽을 수 있는 형식 ( 예 : 특정 RF 태그 또는 특정 데이터베이스 필드 ) 에 맞게 구체적 구현으로 렌더링된 인코딩 )
의 물리적 실현은 하위 계층으로 간주할 수 있으며 스택 아래쪽에 물리적 엔티티의 모델링이 있는 ISO 의 개방형 시스템 상호 연결 방식과 유사합니다 .

2007/08/06 10:53 2007/08/06 10:53
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

넷빈즈의 루비 단축키 :: Ruby Shortcuts in Netbeans

Keybindings

This is not a complete list of keyboard shortcuts applicable to Ruby development in NetBeans; it is instead a list of some of the most important ones. For a complete set, consult KeymapProfileFor60. A handy but perhaps not as accurate PDF table is here.

Action Shortcut Mac Shortcut
Show code completion alternatives Ctrl-Space Ctrl-Space
Show documentation for the method, class or field under the caret. (Doesn't always work given Ruby's dynamic nature.) Ctrl-Shift-Space Command-Shift-Space
Show name of current parameter (when editing an argument list for a method call). (Doesn't always work given Ruby's dynamic nature.) Ctrl-P Command-P
Select applicable quickfix (when a lightbulb is showing next to the current line) Alt-Enter Alt-Enter
Jump between a Rails action (a method in a controller file) and its corresponding view (a .rhtml or .erb file). Ctrl-Shift-A Command-Shift-A
Jump between a test file and its tested file. Ctrl-Shift-T Command-Shift-T
Select the next enclosing block (hit repeatedly to select the surrounding statement, if block, method block, class, etc.) Alt-Shift-. (dot) Ctrl-Shift-.
Opposite of Ctrl-Shift-. in that it selects progressively smaller blocks around the caret. Alt-Shift-, (comma) Ctrl-Shift-,
Rename the symbol under the caret Ctrl-R Command-R
Go to the declaration of the symbol under the caret Ctrl-B Command-B
Comment or uncomment (toggle comments) for the selected lines or the line containing the caret Ctrl-/ (slash) Command-/
Reformat the code (selection or full file) Alt-Shift-F Ctrl-Shift-F
Indent or Outdent the selected lines Tab/Shift-Tab Tab/Shift-Tab
Go to line (by line number) Ctrl-G Ctrl-G
Toggle Breakpoint on current line Ctrl-F8 Command-F8
Hippie-expand / complete the current word by inserting the next matching word from open buffers. (Hit repeatedly to cycle through matches). Ctrl-K Command-K
Open Type (go to a class in open projects or in the Ruby libraries) Ctrl-O Command-O
Open File by name prefix (not path) Alt-Shift-O Ctrl-Shift-O
Run the current file. In a Rails project, this will open up the browser on the URL relevant to the file (unless it's a rakefile or a test file.) Shift-F6 Shift-F6
Test File (runs the unit test associated with the given file, or if not found the file itself as a test) Ctrl-F6 Command-F6



Snippets

See the RubyCodeTemplates document for more details.

There's a large number of code templates bundled with NetBeans. The following brief list just summarizes a few you might find convenient. To use, type the abbreviation in the editor and then hit Tab. Use the Tab key or Enter to finish each "section" in the template (if there are multiple). Shift-Tab will cycle backwards. The current editing section is shown in a blue highlight.

Abbreviation Description
: Insert a hash entry of the form :key => "value"
l Insert =>
doc Insert a do block with an unused block iterator variable
r In an RHTML file: Insert <% %>
re In an RHTML file, insert a Ruby Expression: <%= %>
jc For JRuby, require java and import a class by fully qualified name
ife If-else block
begin Begin-rescue-end block



Other Tips

  • There is a command for reformatting/word wrapping comments. You can go into the options dialog, locate the keymap and in the "Other" category, locate the "Reformat Paragraph" action and bind it to whatever you want. The word wrapping algorithm knows about rdoc conventions and will treat lists (bulleted, numbered, and labelled) specially, will leave preformatted content alone, etc.
  • You can also enable automatic word wrapping in comments by running the IDE with -J-Druby.autowrap.comments=true (which you can also add to your netbeans.conf or nbrubyide.conf file.
  • Pressing "#" inside a double quoted string will insert #{ } with the caret in the middle
  • Pressing "#" in a string when there is a text selection will surround the text selection with #{ }.
  • Similarly, pressing left parenthesis, left bracket, left brace, single quote or double quote when there is a text selection in Ruby code will surround the text selection with the opposite character (e.g. insert right parenthesis, right bracket, ... etc on the opposite end as well.
  • Pressing ", + or _ in a comment when there is a selected word will surround the word with the same character (useful for rdoc formatting).
2007/08/05 19:25 2007/08/05 19:25
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

몇가지 사소한 넷빈즈 팁

Did you know that Control-K automatically completes any previously typed strings from within the same editor? Similarly, Control-L completes previously typed strings found after the insertion point. Press either shortcut repeatedly to cycle through all possible completions.

Use shortcuts to speed up your work: Typing a colon and then hiting the tabkey inserts a hash entry of the form :key => "value". Pressing # inside a double quoted string will insert #{} with the caret in the middle. See the lost of all Ruby keyboard shortcuts in NetBeans IDE.

Did you know that you can open files that are not part of a project in the Favorites window? Select Windows > Favorites for a customizable file browser. You can also choose Navigate > Go to File or Go to Type from the menu to search for files and resources in your projects.
2007/08/05 19:24 2007/08/05 19:24
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

ANT 를 이용한 RMI 컴파일 ( rmic 로 stub 생성하기 )

2007/08/03 11:36

서비 JAVA , ,

Ant를 이용하여 RMI 빌드를 위한 스크립트 이다.

(Language : xml)
<!-- RMI 생성 -->
<target name="rmi" description="RMI Stub 생성" depends="make">
<echo message="* rmic 실행  *"></echo>
 <rmic base="./bin/classes" classname="com.prompt.rfid.rmi.CallableFunctionImpl" classpath="./bin/classes" stubversion="1.2">
   <classpath>
     <fileset dir="${jar.dir}">
      <include name="**/*.jar" />
     </fileset>
     <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
       </fileset>
     <fileset dir="${classes.dir}">
      <include name="**/*.class" />
     </fileset>
   </classpath>
 </rmic>
</target>

다른부분은 특별히 언급 할 필요는 없을 듯 하다.
<rmic .. > 태그의 속성만 설명 하자면
base : rmic로 컴파일된 skel 과 stub이 위치할 경로 지정
classname : rmic 로 stub을 생성할 원격 객체를 지정
                 ( 소스를 지정하는게 아니라 javac에 의해 컴파일된 class 파일을 지정 한다. )
classpath : classname에 지정한 원격 객체 class파일이 위치하고 있는 경로
stubversion : 1.1 과 1.2 중 하나를 선택 할 수 있다. ( http://www.yunsobi.com/blog/61 참조 )
                   1.1을 지정하면 jre 1.3 이전의 방식대로 skel 과 stub 을 모두 생성 한다.
                   1.2를 지정하면 jre 1.4 이후 방식으로 sutb 만 생성한다.
2007/08/03 11:36 2007/08/03 11:36
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

기이한 세가지 이야기 :: 기담 ( 奇談 )

 
-- 스포일러 없음 --
영화 기담 포스터


영화 기담 포스터



'화려한 휴가'와 'D-WAR' 사이에서 조용히 개봉한 독특한 공포이야기 '기담'
지난 주말 '화려한 휴가'를 보고 오늘은 퇴근 후 기어이 혼자서 '기담'을 관람했다.
'화려한 휴가'를 같이 본 친구를 꼬득여 볼까도 했지만 공포/스릴러라면 치를 떠는 친구인지라
도저히 같이 보잔 말을 할 수 없었다. ( 사무실 사람들도 D-War 보러가자고 난리인 판국에
이름도 못들어본 '기담'이라는 영화에 관심이나 가겠는가.. )

사실 '기담'에 대한 이야기는 두어달 전 쯤에 소개로 만난이가 기담 제작에 참여 했던 사람이어서 몇몇
재미있는 이야기를 들을 수 있었고 그 때부터 개봉일만 기다리고 있었던 영화였기에 개봉일인 오늘 보지
않을 수 없었다.
영화판 이야기로는 기담도 꽤나 많은 우여곡절-제작 중단과 재개-을 겪으며 꽤 오랜기간의 촬영 끝에
간판을 거는 영화라고 한다. 그 친구와 이야기 할 땐 '화려한 휴가'가 가장 큰 라이벌이 될 것 같다고
하더니 'D-War'라는 복병이 숨어 있었을 줄이야..


보고난 소감은 , 딱 잘라 공포 나 스릴러라는 장르에 넣기 모호한 면이 있지만,  well-made 공포 영화라고
생각 한다. 일본의 끈적끈적한 공포 영화와도 다르고 그간 한국 공포영화에서 버여 주던 '깜짝 놀래키기'나
'비명 질러대기' 로 이야기를 끌어가지도 않는다.
화면과 이야기는 잘 다듬어져 있고 배우들의 연기도 안정적이다. 보는 동안은 긴장을 하지만 영화가
끝나고 난 후엔 공포 보단 드라마가 기억에 남는 그런 독특한 영화이다.

사진이 취미인지라 영화나 영상물을 보면 화면의 프레임과 빛을 유심히 보게 되는데 '기담'은 빛을 꽤나
잘 다루고 있으며 표준이나 약간 망원 계열의 렌즈로 촬영 했는지 화면은 시종일관 안정적인 구도를
유지하고 있다. - 그런데도 시각적인 지루함이 덜 한걸 보면 편집에 대단히 신경을 썼기 때문이리라 -
이건 개인적인 생각인데.. 기담에는 인물의 클로즈업이나 바스트씬에 유난히 많은 시간을 할애 하고
있다. 큰 덩어리가 주는 존재감도 공포를 느끼게 하는 요소로 사용한게 아닐까..?

각설하고, 영화 '기담'은 근자에 본 공포영화 중에 손에 꼽을만한 수작임에는 틀림 없다.
공포영화를 좋아하거나 색다른 귀신 이야기에 관심이 있는 이라면 챙겨 볼 만한 영화라고 생각한다.

시놉시스 열기..

2007/08/02 09:49 2007/08/02 09:49
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 2007/08/03 22:37
    [기담]-기이한 이야기의 끝 Tracked from 뱀과 베아트리체
  2. 2008/03/19 21:58
    BPF후 Tracked from ego + ing
  1. 음..이거 네이버 평점이 의외로 좋더라구요.
    원래 공포물 못 보는데 상당히 끌리는 중입니다.
    오늘 화려한 휴가 보러갈거긴 한데, 조만간 라따뚜이랑 디워랑 기담도 봐야겠어요. 혼자라도 보러가야할 듯;;

  2. 아미료님. 올여름 극장가 영화를 다 섭렵하실 모양입니다.
    저도 영화 보고 난 후 영화평을 찾아보기 시작 했는데요.
    의외로 배경 음악쪽엔 후한 점수를 주지 않고 있더라구요..
    배경음이 영화와 언매치 라거나 영화 감상을 방해하거나 하진 않지만
    영화 싸이코에서 들었을 법한 효과음이 몇번 나오는데 그 때문인 듯
    싶습니다.

  3. '기담'으로 검색하다가 좋은 포스팅 보고 찾아왔습니다^^

    기담 장기 상영을 위한 네티즌 서명을 받고 있는데
    관심 있으시다면 도와주세요^^

    청원문 전문 :

    http://agoraplaza.media.daum.net/petition/petition.do?action=view&no=30536&cateNo=244&boardNo=30536


    영화 제작사, 배급사가 영화를 제공하는 게 아니라 소비자가 보고 싶어하는 영화를 요구하고 볼 수 있길 바랍니다.

    영화 기담은 올해 공포 영화의 수작으로 호평 받으며
    적은 상영극장 수에도 불구하고 관객들의 사랑을 받고 있습니다.

    그런데 여러 블록버스터 영화들의 틈에 끼어서
    8월 1일에 개봉했음에도 불구하고
    애초에 200여개의 극장, 그것도 소규모 극장으로 개봉했는데
    벌써부터 극장 수가 줄고,
    그나마 상영하는 극장도 단관개봉, 교차상영하는 경우가 많습니다.

    제작사와 배급사의 알력과 배분에 의해
    극장에 걸리는 영화가 결정되고 관객이 보고 싶어하는 영화가 있음에도 불구하고 멀티상영관이 한 두 어개 블록버스터 영화로만 채워졌습니다.

    기담을 보고 싶어하는 관객이 많음에도 불구하고
    상영 극장이 너무 적습니다.
    좋은 공포 영화 기담을 보고 싶어하는 영화 소비자의 요구를 받아주세요

  4. raim님 다녀가 주셔서 감사합니다.
    벌써 간판을 내린다고 하니.. 저도 조금 안타깝습니다.
    큰 영화 사이에서 선전하고 있다고 생각 했는데..
    말씀하셨던 부분이 장르영화의 어려운점이 아닌가 합니다.