http://offree.net/3366

chrome://view-http-cache/

크롬이 캐싱한 모든 url 정보가 표시됨. url 복사해서 받거나, 스트리밍 같은 경우엔 넷트랜스포드 같은 프로그램 사용.
FF의 grease monkey에서 Anti-Disabler for Naver 유저스크립트 쓰기


            out = new FileOutputStream(file);
            XMLOutputter serializer = new XMLOutputter();

            // jdom output format
            Format f = Format.getPrettyFormat(); // output 출력 포맷 - pretty format : whitespace beautification with 2-space indents, uses the UTF-8 encoding 등
            serializer.setFormat(f);

            serializer.output(xmlDoc, out);
            out.flush();


http://www.jdom.org/docs/apidocs/index.html

[Tool] 토드 폰트 변경하기

프로그래밍/DB 2010. 11. 19. 17:51 Posted by galad
http://dev.messfilm.com/87

View - Toad Options - Editor - Behavior - Languages - Edit - Highlighting - Customer Font

'프로그래밍 > DB' 카테고리의 다른 글

[oracle] Windows 7 과 oracle, Toad  (0) 2011.03.09
[oracle] SELECT 를 사용한 UPDATE 3  (0) 2010.09.14
[oracle] select 문을 이용한 update 2  (0) 2010.08.16
[SQLite] Command Line Shell For SQLite  (0) 2010.05.24
[SQLite] Quick Start  (1) 2010.05.24
브라이언 트레이시 강연
- 갖고 싶은 목록 작성, 하고 싶은 목록 작성
- 좋아하는 일을 선택하고, 그 안에서 상위 10% 내에 들도록 노력하기
- 5~7년은 인내하며 노력하기
- 자기가 잘 할 수 있는 분야를 알아내기 : 자신만의 재능과 능력. 뭘 잘 할 수 있나?
- 자신을 회사의 주인이라 생각하기 : 책임감. 스스로를 위해 일한다고 생각하기.
- 목표지향적이 되기 : 인생에서 무엇을 원하는지 알아내기.
- 성공을 위해 적어놓고 계획을 세우고 노력하기

- 향후 1년간 이루고 싶은 것 10가지 쓰기. 맨 위에 날짜를 쓰기.
- 이 목표 중 한 가지를 하루만에 이룰 수 있다면, 어떤 목표가 내 삶이 긍정적인 영향을 미칠까? 를 선택한 후
 동그라미를 치고 언제까지 이룰 것인가 날짜를 설정하고 계획을 세우고 노력하기

- 실패를 두려워하지 않기. 실패가 문제가 아니라 실패에 대한 두려움이 문제다.
- 실패 하리라는 생각을 하지 않기.
- 일이 잘 안되었다면 피드백을 얻었다고 생각하기
- 실패와 피드백을 반복하며 현명해지는 것
- 이미 벌어진 일에 대해 원망이나 후회하지 말고 무언가를 얻기

- 나아지지 않으면 나빠질 것. 계속해서 배우지 않으면 뒤쳐진다.
- 매일 30분에서 1시간은 자기 분야에 대한 글/책을 읽기
- 가능한한 모든 강의와 강좌를 듣기. 전문가가 수년동안 연구한, 검증된 강좌를 듣기.

- 최고가 되려고 노력할 수록 스스로를 존경하고 더욱 높은 목표를 갖게된다.

- 일중독이 되어야 한다. 경쟁사회에서 이기려면 남들보다 더 노력해야 한다.
- 40+ 공식 : 1주일에 40시간 일하면 살아남을 수 있다. 40시간 이상 노력해야 발전할 수 있다.
- 자수성가한 백만장자의 일주일간 평균 근무시간 : 59시간

- 일을 할 때는 일만 하기.
- 업무시간에 끝내지 못한 일로 인하여 문제가 발생. 스트레스, 잔업...

- 필요한 사람과 만나기
- 인간은 어울리는 사람과 닮아간다.
- 인생의 행복과 불행의 85%는 인간관계가 좌우한다.
- 서로 좋아하고 존중하는 사람들과 인간관계를 맺자.

- 인생은 결코 쉽지 않다.
- 좋을 때가 있으면 나쁠 때도 있다.
- 중요한 것은 인생의 방향. 성공한 사람들은 2보 전진에 포커스를 맞추며 1보 후퇴할 때가 있다는 것을 인정한다.

- 어려움, 잘못된 것을 인정하고 거기서 추스리고 일어나야 한다.
- 인생은 문제와 위기의 반복이다. 모든 사람이 위기와 문제에 직면해 있는 것.
- 위기 대처 능력, 문제 해결 능력, 좌절하지 않고 해결책을 찾는다. 걱정하지 말고 무엇이 문제인지 찾아보자.

- 인생에 영향을 줄 하나의 커다란 목표를 정했다면 다음과 같이 해보기
- 예를 들어 연봉을 2배로 올리기 위해서는 어떻게 해야 하나? 라는 질문을 적고 그에 대한 답을 20개 이상 적기.
- 일찍 출근하기, 늦게 퇴근하기 등
- 구체적으로 적을수록 좋다.

- 흔들림 없는 낙천주의자가 되기
- 가장 원하는 것을 생각하고 말하기

- 많은 사람들이 처음 정했던 목표와 다른 분야에서 성공한다.

- 성공에 대한 가장 큰 장애물은 실패에 대한 두려움
- 시작에 대한 두려움 극복하기. 시도하고 교휸을 얻기
- 지속에 대한 두려움 극복하기. 포기란 있을 수 없다. 지쳐 쓰러져도 포기는 없다.

- 자기 통제 능력.
- 좋던 싫던 해야할 일을 하도록 함.

- 일단 결심하면 목표를 이룰때까지 멈출 수 없다.

=> 감상
일중독 이런 건 빼더라도 더 나은 삶, 발전하는 삶을 위해서는 지켜야할 기본적인 것들.
하지만 누구나 지킬 수 있는 건 아닌 것들.
지키려 노력하자.
목표 목록 설정 -> 중요 목표 선택 -> 이루기 위해 어떻게 해야 하나 적는 건 좋아보임.

'감상문' 카테고리의 다른 글

[Book] Chasing Cool  (0) 2010.12.11
[book] 브리다 - 파울로 코엘료  (0) 2010.12.01
[book] 당신의 뇌를 믿지마라 (Carved in Sand)  (0) 2010.07.23
[article] 개방(open)의 의미  (0) 2010.01.22
[book] UML Distilled  (0) 2010.01.21

[방법론] Agile

프로그래밍/Development 2010. 11. 15. 16:51 Posted by galad
http://www.ciobiz.co.kr/news/articleView.html?idxno=4054
http://kwangshin.pe.kr/blog/2010/11/08/%EC%99%9C-%EC%95%A0%EC%9E%90%EC%9D%BCagile-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B8%B0-%ED%9E%98%EB%93%A4%EA%B9%8C/
http://mckdh.net/353 <-- 이거 많이 좋은 듯?
http://blog.openmaru.com/80


기민한 이라는 말뜻처럼 사용자(고객)의 요구에 기민하게 대응하기 위한 개발 방법론인 듯

기본 개념은 이런 듯?


TDD와 마찬가지로 안드로이드 개발하면서 적용해보자~

1. 기본 개념 알아보기
2. 어떻게 적용하는가?
  -> 책 볼 것. 그리고 위의 산골 블로그 님의 글 참고하기

'프로그래밍 > Development' 카테고리의 다른 글

[방법론] TDD  (0) 2010.11.15

[방법론] TDD

프로그래밍/Development 2010. 11. 15. 16:41 Posted by galad
http://www.javajigi.net/display/OSS/TDD#TDD-TDD%EB%94%B0%EB%9D%BC%ED%95%B4%EB%B3%B4%EA%B8%B0
http://www.java2go.net/blog/62

TDD...
책도 읽어봤고 무엇인지 어느 정도 알고 있다고는 생각하나 실제로 제대로 실천해 본 적은 없다...
안드로이드 개발하면서 해보자~

1. 안드로이드 개발 시 테스트는 어떤 식으로 하는가?
  -> 안드로이드 프로젝트 생성 시 테스트 프로젝트도 같이 생성가능

2. 테스트 가능한 영역은?
  -> 아무리 그래도 Activity도 없이 테스트가 가능하려나?

'프로그래밍 > Development' 카테고리의 다른 글

[방법론] Agile  (0) 2010.11.15

[Mac] spotlight와 eclipse 자동완성 충돌

Apple 2010. 11. 14. 10:56 Posted by galad
둘 다 기본 단축키가 컨트롤+스페이스라서 이클립스서 자동완성 실행하면 spot light가 실행된다.
다음과 같이 하자.

http://okjsp.tistory.com/1165643369

맥 -> 환경설정 -> 스팟라이트 에서 단축키 설정 변경하기

'Apple' 카테고리의 다른 글

[hackintosh] 한성 SLX110R에 OSX 10.6.3 설치하기  (0) 2011.01.22
[iPhone] 테더링 사용하기  (0) 2010.12.30
[Mac] home, end key  (0) 2010.11.14
[apple] iAd...  (0) 2010.04.13
[hackintosh] dell m1210 에 10.6.2 hazard 설치  (0) 2010.01.31

[Mac] home, end key

Apple 2010. 11. 14. 10:54 Posted by galad
맥의 home, end키는 윈도우와 다르게 문서의 처음, 끝으로 보낸다.
윈도우 처럼 문장의 처음, 끝으로 보내는 형태로 변경하기는 다음을 참조

http://lasel.kr/blog/22?TSSESSIONlaselkrblog=587ffba228741c991e2968844444b324

근데 원래대로는 어떻게 되돌리지? ㅋ

'Apple' 카테고리의 다른 글

[iPhone] 테더링 사용하기  (0) 2010.12.30
[Mac] spotlight와 eclipse 자동완성 충돌  (0) 2010.11.14
[apple] iAd...  (0) 2010.04.13
[hackintosh] dell m1210 에 10.6.2 hazard 설치  (0) 2010.01.31
[Mac] 멀티부팅 - boot think  (0) 2010.01.29
http://kin.naver.com/knowhow/detail.nhn?docId=527939


현재 일하는 업무 상 String의 Code page를 변환해야 하는 작업이 많다.

 

하지만 이에 관한 자료들이 매우 미흡하며 잘못된 지식을 전달하는 블로그나 웹도 많이 보아왔다.

(처음에 그것이 잘못된 것인지도 몰랐지만)

 

그리고 믿고 사용했지만 여전히 깨져버리는 한글을 보며 고민하기도 했다.

 

사실 DB모니터링 툴 개발 업무를 하다보니 Character Set을 직접 변환해야 하는 작업들이 꽤 많았다.

 

Java에선 과연 어떤 형태로 변환작업을 수행할 수 있으면 읽을 수 있을까 고민도 했다.

 

이 글이 조금은 어려울 수도 있지만 천천히 읽어본다면 충분히 이해할 수 있고 명확하게 java의

 

캐릭터 셋에 대해 알 수 있을 것이다.

 

 영문은 대부분의 캐릭터셋이 1바이트기 때문에 변환작업에서 깨질일이 거의 없다고 할 수 있지만

 

한글은 utf-8의 경우 1에서 4바이트까지의 가변형으로 저장되기 때문에 1글자의 바이트 길이가 달라

 

명시적인 변환이 요구된다.

 

여기저기 자료도 많이 찾아봤지만 역시나 테스트 하는 것이 가장 빠르게 이해할 수 있었다.

 

결론 부터 언급하면 String 객체내 바이트 배열이 어떤 캐릭터셋으로 저장될 것이라는 생각이 오해를 불러왔고

 

잘못된 사고를 하게 했다. String이 실제 메모리 상에 어떠한 캐릭터셋의 바이트 배열로 저장되어 있는지

 

사용자들은 고민할 필요도 없이 자바는 잘 되어 있었다.

 

Jdk 1.4를 기준으로 내 머리의 이해를 도와봤다.

 

내 이름 한민호라는 세자를 utf-8로 byte 배열에 저장해보았다.

 

막무가내로 시작했지만 getBytes라는 함수가 어떻게 이용되는지 알 수 있었다.

 

byte [] bytes = new String("한민호").getBytes("utf-8");

 

처음 이 코드를 작성하고 "한민호"라는 객체는 어떤 캐릭터 셋의 바이트 배열로 저장되어 있을까 생각했지만

 

그것을 생각하면서 이미 정상적인 사고를 하기가 어려웠다. 자바에선 String 객체로 생성되었다면 어떠한 종류의

 

캐릭터 셋의 바이트 배열이든 리턴이 가능하기 때문이다.

 

단 한글로 생성했는데 한글을 지원하지 않는 캐릭터셋이라면 리턴한 바이트 배열의 값이 깨지게 된다.

 

 getBytes라는 메소드에 대해 전혀 알지 못했을 땐 String을 생성할 때 지정한 즉 메모리 상에 저장된

 

"한민호"라는 객체의 바이트 배열의 캐릭터 셋을 지정해줘야 되는 줄 알았다.

 

그러나 이 메소드가 내가 상상했던거 보다 훨씬 대단하다는 것을 알게 되었다.

 

 이 메소드는 현재 저장된 String값이 어떠한 캐릭터 셋으로 저장되든 상관없이

 

바이트 배열과 바이트 배열에 맞는 캐릭터 셋으로 생성만 했다면

 

java에서 한글을 지원(영문만 지원하는 캐릭터 셋은 깨지게 된다.) 하는

 

어떠한 캐릭터 셋으로든 변환하여 변환된 바이트 배열로 리턴한다.

 

 여기서 핵심은 정상적인 String 객체의 생성이라는 것이다. 아래서 정상적인 String 객체의 생성에 대해 알아보겠다.

 

 위에서 생성한 바이트 배열을 다시 String 객체로 변환해 보겠다.

 

String name = new String(bytes, "utf-8");

 

이런 식으로 변환이 가능하다. 간혹 String의 두 번째 파라메터로 넣는 캐릭터 셋을 바이트 배열의 캐릭터 셋이 아닌 다른

 

캐릭터셋을 넣어 변환하겠다는 코드를 많이 봤다. 이건 잘못된 것이다. 이 자린 바이트 배열에 저장된 바이트들의 캐릭터 셋을

 

설정하는 곳이다.

 

잘못된 변환의 사용예를 한가지 들어보겠다.

 

잘못된 변환

String convert = new String(message.getBytes("euc-kr"), "utf-8");

 

소스를 보면 message String에 저장된 문자를 getBytes를 이용하여 euc-kr라는 캐릭터셋 바이트 배열로 얻고있다.

 

분명 이것을 작성한 사람은 위 코드에서 new String(스트링배열, "euc-kr")라고 String 개체를 생성했을 것이다.

 

간단히 설명하면 euck-kr라는 캐릭터 셋으로 바이트 배열을 읽어들인 

 

다음 utf-8이라는 새로운 캐릭터셋으로 변환(?)을 시도하겠다는 것이다.

 

이것은 두 번째 파라메터에 대해 잘못된 이해를 하고 있기에 이런 코드가 가능한 것이다.

 

때문에 이렇게 변환을 하게 되면 한글이 저장된 경우 같은 계열(변환가능한)의 캐릭터 셋이 아니라면 100프로 깨지게 된다.

 

이러한 변환은 자바에서 지원을 안하는 사항이다.

 

또 문제는 다시 String 객체로 생성을 한다는 것이다. 이 때 String생성 시 잘못된 캐릭터 셋을 주었기 때문에 깨진

 

바이트 배열로 저장이 되게 된다. 때문에 이러한 경우 getBytes() 메소드를 통해 어떠한 캐릭터 셋으로 읽든

 

읽을 수가 없게 된다.

 

 그렇다면 이제까지의 사항들에 대해 테스트를 통해 명확히 알아보겠다.

 

아래는 테스트에 자주 사용될 byte 배열을 16진수로 보여주는 함수다.

 

public static String BinToHex(byte [] buf) {
  String res = "";
  String token = "";
  for (int ix=0; ix<buf.length; ix++) {
   token = Integer.toHexString(buf[ix]);
//   CommonUtil.println("[" + ix + "] token value : " + token + " len : " + token.length());
   if (token.length() >= 2)
    token = token.substring(token.length()-2);
   else {
    for(int jx=0; jx<2-token.length();jx++)
     token = "0" + token;
   }     
   res += " " + token;
  }
  
  return res.toUpperCase();
 }

 

< 테스트 소스 >

1   String name = new String("한민호");   
2   strs = name.getBytes();   
3   System.out.println("Length : " + strs.length);
4   System.out.println("Hex    : " + BinToHex(strs));
5   System.out.println("Value  : " + new String(strs));
6   System.out.println();   
7   strs = name.getBytes("utf-8");
8   System.out.println("Length : " + strs.length);
9   System.out.println("Hex    : " + BinToHex(strs));
10   System.out.println("Value  : " + new String(strs, "utf-8") );
11   System.out.println();   
12  name = new String(strs, "utf-8");
13   strs = name.getBytes();
14   System.out.println("Length : " + strs.length);
15   System.out.println("Hex    : " + BinToHex(strs));
16   System.out.println("Value  : " + name);   
17   System.out.println();   
18   String convert = new String(name.getBytes("euc-kr"), "utf-8");
19   System.out.println(convert);
20   strs = convert.getBytes();
21   System.out.println("Length : " + strs.length);
22   System.out.println("euc-kr Hex    : " + BinToHex(strs));
23   strs = convert.getBytes("utf-8");
24   System.out.println("Length : " + strs.length);
25   System.out.println("utf-8 Hex    : " + BinToHex(strs)); 
26   System.out.println();
27   System.out.println();

 

테스트 코드를 보며 이 결과들이 어떻게 나올것이라고 예측했는데 그것이 맞아떨어지지 않는다면

 

다시 글을 보면서 이해하면된다.

 

결과는 아래와 같다.

 

< 결과 >

Length : 6
Hex    :  C7 D1 B9 CE C8 A3
Value  : 한민호

Length : 9
Hex    :  ED 95 9C EB AF BC ED 98 B8
Value  : 한민호

Length : 6
Hex    :  C7 D1 B9 CE C8 A3
Value  : 한민호

????
Length : 4
euc-kr Hex    :  3F 3F 3F 3F
Length : 10
utf-8 Hex    :  EF BF BD D1 B9 EF BF BD C8 A3

 

1번 라인을 보면 한민호라는 String객체를 생성하고 있다

 

이 객체를 strs라는 바이트 배열에 getBytes()를 이용해서 받는다. getBytes에 아무 파라메터도 주지 않는다면

 

이것은 디폴트 캐릭터셋으로 바이트 배열이 리턴된다.

 

디폴트 캐릭터셋은 System.getProperty("file.encoding") 메소드를 통해 알수 있다.

 

이것을 utf-8로 저장하는 로직이 7번 라인이다. 단지 getBytes에 utf-8이란 파라메터를 주고 utf-8 캐릭터 셋의

 

바이트 배열을 받아 올 수 있다.

 

그리고 12번 라인은 이 utf-8로 저장된 바이트 배열을 다시 String객체로 파라메터 값으로 "utf-8"을 주고 생성한 것이다.

 

이때 파라메터를 주지 않거나(디폴트 파라메터가 지정됨) 다른 캐릭터셋을 준다면 깨지게 된다.

 

마지막으로 18번 라인은 잘못된 컨버팅 예이다. euc-kr을 utf-8로 변환하겠다는 건데

 

위에서 설명했듯 이러한 변환 때문에 바이트 배열이 깨져서 euc-kr이든 utf-8이든 어떠한 바이트 배열로 읽어오든

 

깨져있는 것을 확인할 수 있다. 이미 깨져서 생성된 String 객체의 바이트 배열은 어떻게든 복구가 불가능 하다.

 

<결론>

 이야기를 종합해보면 String 객체로 생성된 것을 다른 캐릭터 셋의 String 객체로 변환한다는 것은

 

어불성설인 것이다. 이러한 변환은 무지에서 나오는 것이며 String 객체에 이미 깨진 내용은 어떠한 변환이 있더라도

 

정상적인 출력이 불가능하다는 것이다. 캐릭터셋을 포함하여 관리하겠다면 철저하게 바이트 배열을 이용해야 한다.

 

그리고 String에 어떤 캐릭터 셋으로 저장되어 있는지에 대해 논하는 것은 애초부터 잘못된 것이다.