Jun 132012
 

코딩을 하다보면, 테스트를 해야 할 부분, 주석을 더 달아야 할 부분, 기능개선을 해야 할 부분 등 코드의 각 부분마다 제각기 할 일이 있다.
그런데 이 모든 것을 기록하기도 쉽지 않고, 그 위치를 기억하기는 더더욱 어렵다.

이럴 때 유용한 것이 Task Tag다.
말 그대로 소스의 특정 부분을 태그를 달고, 태그별로, 우선순위별로 보고, 완료 여부도 기록할 수 있다.
일단  Java 코딩용으로 사용하는 방법을 알아보자.
환경설정에서 C, C++, PHP, Javascript 등에 Task Tag 항목이 있다면 동일하게 사용할 수 있다.

 

[개발환경]
Mac OS X 10.6.8, Snow Leopard
Eclipse 3.7 Indigo version

1.Task Tag 추가 및 변경
환경설정 > Java > compiler > task tags
기존 Tag(FIXME, TODO, XXX)에서 XXX를 제거한다.
도대체 XXX는 무슨 의미인지 모르겠다. ㅠ.ㅠ
XXX 대신에 NOTE라는 Tag를 Low 우선순위로 생성한다.

각 태그는 다음과 같은 용도로 사용하면 될 듯 하다.

FIXME : 높은 우선순위, 버그 발생 부분, 시급한 수정을 필요로 한 부분에 대한 표시용으로 사용
TODO : 중간 우선순위, 테스트 필요, 주석 작성 필요 부분에 대한 표시용으로 사용
NOTE :  낮은 우선순위, 기능 개선 등이 필요한 부분, 기타 기록용

추가 할 때는 line number 공간에 오른쪽 마우스 클릭 후 Add Task하면 추가 가능

Show View > Task 선택 후 Task Tag를 우선순위 등에 목록으로 보고, 바로 이동가능
완료된 경우 목록 선택 후 오른쪽 마우스 클릭 후 Mark as completed를 하면 됨

종류별로 보고 싶으면 Task View 창의 오른쪽 상단의 역삼각형 클릭해서 Configure Contents 클릭해서 설정 가능
TODO만 보기, 완료되지 않은 것만 보기 등등의 세부 설정이 가능

Jun 122012
 

이전 Posting에서는 키보드 관련한 설정을 해봤고, 이제는 여기 저기 다른 환경에서 코딩하는 사람을 위해 탭, 공백, 들여쓰기 관련한 설정을 살펴보려고 합니다.

참고한 url : http://yatoyato.tistory.com/26

다음은 탭 대신에 공백으로 대체하고, 요즘의 추세에 맞춰서 편집 폭을 좀 늘려주는 것에 관련된 설정들이다.

 

[개발환경]
Mac OS X 10.6.8, Snow Leopard
Eclipse 3.7 Indigo version

1. General > Editor > Text Editors
Displayed tab width : 4
insert spaces for tabs 체크
show line number 체크

2. java > code style > formatter > active profile에서 Eclipse[built-in] 선택 후 edit
(1)indentation 탭에서
tap policy: spaces only
indentation size : 4
tab size: 4

(2)Line Wrapping 탭에서
maximum line width: 120

==> Profile 이름을 다르게 지정해서 저장

3.xml > xml files > editor
Line Width : 120
split multiple attributes each on a new line 체크
indent using spaces 선택

이 정도면 될듯 하다.

Jun 112012
 

iPhone 어플 개발"도" 해볼까 하고, 2년전에 구입한 맥북 화이트 2010를 가지고 스타2만 하다가, 이제 심심해서 ㅠ.ㅠ 슬슬 "코딩"도 해볼까 워밍업 중이다.
천천히 준비중이라서, 맥 환경에서 이클립스와 유용한 플러그인 쓰는 방법을 열심히 공부하고 있다.
한동안 그 결과물들을 정리해 나갈 예정인데, 이번은 그 처음으로 키보드 설정이다.

개발자 혹은 코더 관점에서 애플 키보드를 쓰면서 견디기 정말 힘든건 -.-a Home, End, Page Up, Page Down키가 없다는 거다.
물론 Fn이나 Command 키를 조합해서 쓰면 되는 걸 알고는 있지만,
습관이란 것은 쉽게 바뀌지 않아서 습관인거고,
한 손으로 누르던 것을 다른 손과 함께 눌러야 하는 게 불편한 것은 부인하기 어렵다.
게다가 맥북에다 일반 윈도우 PC용 키보드를 물려 쓰고 있고(애플 키보드 비싸다 ㅠ.ㅠ) 앞으로도 그럴 예정이라서,
적어도 이클립스 쓰면서는 편하게 살고자 방법을 2년만에, 이제서야 찾아 보았다.

[개발환경]
Mac OS X 10.6.8, Snow Leopard
Eclipse 3.7 Indigo version

1.KeyRemap4Macbook http://pqrs.org/macosx/keyremap4macbook/

필수 어플(?)이라고 하는데, 난 2년만에야 구글의 도움으로 찾게 되었다.
여러 기능이 있지만, 오로지 목표에만 집중하자.

2.Eclipse에서 환경설정

환경설정 > General > Keys 에서 다음을 찾아서 맵핑을 변경

Line Start : Home
Line End : End
Page Up : PgUp
Page Down : PgDn
Quick Fix : Ctrl + 1
Content Asistant : Ctrl + Space
Select Line Start : Shift + Home
Select Line End : Shift + End
Select Page Up : Shift + PgUp
Select Page Down : Shift + PgDn

이제 Home, End, Page Up, Page Down과 함께 Shift 누르고 Home, End, Page Up, Page Down 사용이 가능해진다.
아~ 행복하다 ^^

Jun 012011
 

출처 : http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

SO-RCVBUF, SO-SNDBUF:
These parameters allow setting the high water mark for the Send and the Receive Socket.
They can be adjusted for flow control management.
The size of the received buffer is the maximum size advertised window for that connection.
 Socket buffer sizes must be increased in order to increase performances .
Nevertheless these values must be smaller than internal driver resources in order to close the TCP window before exhausting internal driver resources. 
The received buffer size depends on the TCP Windows size, the TCP Maximum segment size and the time needed to absorb the incoming frames.
With a Maximum Segment Size of 300 bytes (a MODBUS request needs a maximum of 256 bytes + the MBAP header size), if we need 3 frames buffering, the socket buffer size value can be adjusted to 900 bytes.
For biggest needs and best-scheduled time, the size of the TCP window may be increased. 
[요약] 주고 받는 최대 패킷 크기보다 송신 버퍼, 수신버퍼를 크게 잡아야 한다

TCP-NODELAY:
Small packets (called tinygrams) are normally not a problem on LANs, since most LANs are not congested, but these tinygrams can lead to congestion on wide area networks.
A simple solution, called the "NAGLE algorithm", is to collect small amounts of data and sends them in a single segment when TCP acknowledgments of previous packets arrive. 
In order to have better real-time behavior it  is recommended to send small amounts of data directly without trying to gather them in a single segment.
That is why it is recommended to force the TCP-NODELAY option that disables the "NAGLE algorithm" on client and server connections. 
[요약] 좀 더 빠르게 데이타를 주고 받고 싶다면 TCP-NODELAY 옵션을 True로 해라

 
SO-REUSEADDR:
When a MODBUS server closes a TCP connection initialized by a remote client, the local port number used for this connection cannot be reused for a new opening while that connection stays in the "Time-wait" state (during two MSL : Maximum Segment
Lifetime).
It is recommended specifying the SO-REUSEADDR option for each client and server connection to bypass this restriction.
This option allows the process to assign itself a port number that is part of a connection that is in the 2MSL wait for client and listening socket.
[요약] 클라이언트 접속시 할당되는 Port를 기다림없이 재활용하고 싶다면 SO-REUSEADDR 옵션을 True로 해라

SO-KEEPALIVE:
By default on TCP/IP protocol no data are sent across an idle TCP connection.
Therefore if no process at the ends of a TCP connection is sending data to the other, nothing is exchanged between the two TCP modules.
This assumes that either the client application or the server application uses timers to detect inactivity in order to close a connection.
It is recommended to enable the KEEPALIVE option on both client and server connection in order to poll the other end to know if the distant has either crashed and is down or crashed and rebooted.
Nevertheless we must keep on mind that enabling KEEPALIVE can cause perfectly good connections to be dropped during transient failures, that it consumes unnecessary bandwidth on the network if the keep alive timer is too short.
[요약] 서버, 클라이언트 양쪽 모두를 위해 SO-KEEPALIVE 옵션을 True로 하는 게 좋다

Apr 072011
 

일반적으로 이클립스를 윈도우7 작업표시줄에 고정해보려고 하니 잘 안되었다.
해본 사람은 알겠지만, 이상하게 안되었다. 자꾸 고정시킨 녀석 말고 다른 데에 다시 실행중 아이콘이 생긴다 ㅠ.ㅠ
 

작업 표시줄에 고정해서 쓰는게 너무 편한데, 그렇다고 포기할 내가 아니었다.
구글神에게 여쭤보니 답을 내려주셨다.
http://thoughtfulcode.wordpress.com/2010/07/15/pin-eclipse-helios-to-windows-7-taskbar/

하는 방법
1.eclipse.ini에 다음 옵션을 추가(설치한 jdk의 bin 디렉토리를 직접 지정해주는 과정)
-vm
C:\Program Files\Java\jdk1.6.0_24\bin <– 자기가 설치한 jdk 위치로 지정함

2.eclipse 실행

3.작업표시줄에 실행된 eclipse 아이콘에 대고 오른쪽 마우스 클릭 후 작업표시줄에 고정

4.마지막 결과물 – 잘 고정된다 ^^

Dec 222010
 

JEXL(Java Expression Language)

소개
수식, 함수 호출 등을 Dynamic 하게 할 수 있도록 지원해주는 Apache Common 프로젝트의 하위 프로젝트
사이트 : http://commons.apache.org/jexl/index.html
아이디어에 따라 많은 활용이 가능하다.
 

사용예제
"a1 + (a2 * 0.2) / a3" -> a1, a2 a3의 값을 db에서 읽어와서 동적으로 결과를 얻는게 가능함
"foo.bar()" -> foo라는 클래스를 생성해서 foo클래스의 bar()라는 메쏘드 호출하고 결과를 얻는게 가능함

static한 메쏘드 호출이 필요한 경우
public class MyClass {
    …
    public static String check(int intParam) {
    }
    …
    public static void main(String args) {
        …
        JexlEngine jexl = new JexlEngine();
        String jexlExp = "MyClass.check(intParam)";
        Expression e = jexl.createExpression(jexlExp);
        JexlContext jc = new MapContext();
        //static하게 호출해야 하므로 클래스명.class로 설정해줌
        //동적생성되는 객체의 경우는 new 클래스명()으로 설정해서 동적생성하면 됨
        jc.set("MyClass", MyClass.class);
        jc.set("intParam", 10);
        Object ojbResult = e.evaluate(jc);
    }
}

 

2011-07-27에 추가한 내용
수식 평가시에도 JexlContext를 이용해야 제대로 수식이 평가됨
예1) "8129391220 * 1" => 수식 만들어서 바로 평가하면 오류 발생
예2) "VAR * 1"로 수식 생성, VAR에 대해 JexlContext 생성 후 set하면 제대로 수식 평가됨
 

Dec 152010
 

구글이 제공해주는 고마운 API다 ^^*
http://code.google.com/intl/ko/apis/maps/documentation/geocoding/index.html#Geocoding

 

참고로 두 좌표간 거리 계산은 다음을 참조하면 됨
http://yc0345.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%91%90-%EC%A2%8C%ED%91%9C%EA%B0%84-%EA%B1%B0%EB%A6%AC-%EA%B5%AC%ED%95%98%EA%B8%B0

Aug 182010
 

실행할 프로세스를 직접 실행시키지 않고 별도의 매니지먼트용 프로세스를 두어서 매니지먼트 프로세스에서 실행 대상 프로세스를 실행하도록 함

매니지먼트 프로세스에서는 다음의 작업을 주기적으로 수행한다
업데이트 서버에서 xml 형식의 jar 파일 목록을 얻어와서 현재 jar 파일 상황과 비교
업데이트된 (version 혹은 갱신일자) jar 파일이 있으면 실행 대상 프로세스 종료->종료된 이후 갱신된 파일을 다운로드->다운로드 완료되면 실행 대상 프로세스를 재기동
db 내용 중 갱신시 재기동이 필요한 table에 변경이 있는 지 비교->실행대상 프로세스 종료 및 재기동
설정파일 중 갱신시 재기동이 필요한 설정파일이 변경되었는지 점검->실행대상 프로세스 종료 및 재기동

xml 구성
<jar>

    <file_name>abc.jar</file_name>
    <version>1.1.2</version>
    <update_time>1279086036</update_time>
</jar>
<jar>
    <file_name>def.jar</file_name>
    <version>1.1.2</version>
    <update_time>1279086036</update_time>
</jar>

table 내용 변경 여부 체크
SHOW TABLE STATUS에서 Update_time 체크

프로세스 실행 처리
ProcessBuilder 이용(jdk 1.5 이후 지원됨)
 

import java.io.*;
import java.util.*;
public class DoProcessBuilder {
    public static void main(String args[]) throws IOException {
        if (args.length <= 0) {
            System.err.println("Need command to run");
            System.exit(-1);
        }
        Process process = new ProcessBuilder(args).start();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.printf("Output of running %s is:", Arrays.toString(args));
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }
}

또 다른 힌트 : http://forums.sun.com/thread.jspa?threadID=5423139
Jul 302010
 

iText example

http://itextpdf.com/examples/index.php?page=chapters

http://www.1t3xt.info/examples/itext-in-action.php

http://itextpdf.com/examples/index.php?page=toc&id=5

 

iText를 활용하는 방법에 대한 간략한 소개 기사(한글)이다. 

http://www.ibm.com/developerworks/kr/library/os-javapdf/

결과물 : PDFTest.pdf download

 

필수적인 사항에 대한 tutorial(영문)이다. 내용 안보고 그냥 코드만 봐도 무방하다.

http://www.roseindia.net/java/itext/index.shtml

1 2 3 »