2010년 11월 7일 일요일

parseInt 에 대한 새로이 알게된 내용

내가 좋아하는 javascriptkit.com
자주 들어가면서도 사실 정독은 하지 않는다. 그때그때 찾아보기만 할뿐..ㅋ

해서 잘 모르던걸 오늘에야 알았다.

예약 문자 보내기 개발 하는데 입력박스에는 08일 이라고 되어있는걸
parseInt 함수를 써서 썼더니 결과가 글쎄 0 이란다. 큭..

// szBookedDate = "2010-11-08";
var arrDate = szBookedDate.split( "-");

var bookedDate = new Date();

var nBookedYear = parseInt( arrDate[ 0]);
var nBookedMonth = parseInt( arrDate[ 1]);
var nBookedDate = parseInt( arrDate[ 2]);

alert( nBookedDate);


결과는 0


발췌를 해보니 아래와 같다.

parseInt(x, [radix])
parseInt() supports an optional 2nd "radix" parameter to specify the base of the number to be parsed (valid range is 2-36). Entering "10" would parse the number in the familiar decimal system, while "16" would be hexadecimal. Without this parameter present, parseInt() assumes
any number that begins with "0x" to be radix 16, "0" to be radix 8, and any other number to be radix 10.



 뭐 내용은 대충 이렇다. 두번째 인자로 radix  를 지원한다는게 이게 뜻하는게 우리 왜 2진수, 8진수, 12진수 이거라는거다. 만약에 앞에 숫자가 0으로 들어오면 그건 8진수란다. 내가 넣은 값은..

그래..'08' 이다..죽어라고 넣어봐야 8진수로 이놈이 바꿔준거다. 그랬더니 0이 나온다더라.
뭐..사실 왜 0이 나오는지는 잘 모르겠다만, 내가 원하는것은 10진수이니 아래처럼 코드를 바꿨더니
제대로 나오더라..ㅠㅠ

// szBookedDate = "2010-11-08";
var arrDate = szBookedDate.split( "-");

var bookedDate = new Date();

var nBookedYear = parseInt( arrDate[ 0]);
var nBookedMonth = parseInt( arrDate[ 1], 10);
var nBookedDate = parseInt( arrDate[ 2], 10);

alert( nBookedDate);


머리가 나쁘면 수족이 고생이라고 했던가..이참에 영어공부도 열씨미 해야겠다..
바보 돌군..ㅠㅠ


2010년 5월 30일 일요일

RC 버전, RTM 버전

줄곳 난 이 두용어가 무엇인지 잘 몰랐다. 모르는데도 잘 써왔다.

이제사 다시 찾아보고 아 그랬더랬지 하고 또 기억한다.

잊어버릴까 다시 써본다.


RC( Release Candidate)
 출시 예비자 정도로 직역 할수 있을것 같다. 즉 출시하기 전의 버젼이지만 모든 출시준비가 끝났다는 의미로 더 사용될수 있다. 즉 그러니 사용해도 된다는 뜻이다. 물론 RC2, RC3 이런식으로 개선해 나가는것도 보이는듯 하다..ㅋ 과연 안정적인가는 나오는 버젼을 보면 알겠지만 아마도 정식 버젼을 내놓기 전이라 조금 조심스런 버젼을 내노아야 한다는 뜻에서 나온것이 아닌가 싶다.

RTM( Release to manufacture)
 아마 윈도우 계열에서 사용되는 명친듯 하다. 생산된 첫 버젼을 뜻한다고 하는데 이는 Wiki 를 찾아봤더니 아래와 같았다.

"처음 완성된 정식 프로그램을 뜻하는 용어다. 프로그램 제작사에서 사용하는 데 기능(또는 기간)의 제약을 두기 때문에 업데이트를 권고 한다. 보통 RTM은 OEM 회사로부터 먼저 배포되는 경우가 대부분이며, MS 에서는 MSDN / TechNet 구독자에게 RTM을 배포하고 있다."

그 이외에도 Retail 버젼도 있다. 이것은 완전이 배포된 포장된 버젼을 뜻하며 역시 MS 라인업 용어이다.

MS 를 좋아하진 않지만 그래도 그들이 쓰는 용어를 알아야 대화도 되고 소통도 할수 있을듯 하니 이렇게 적어본다. RC 는 여러분야에서 많이 사용하는 언어이니 꼭 알아야 할듯 하다.

2010년 3월 22일 월요일

Iterator 패턴

첫째로 Iterator 의 패턴은 순차 루프일 경우 인덱스가 무엇인지 알필요가 없다는 개념을 전제로
인덱스를 캡슐화 하는데 첫번째 의미가 있다고 본다.

두번째는 순차루프는 루프로서의 기능을 수행하기 위해서 사용되는 객체의 타입을 느슨히 한다.
즉, 어떤 타입의 객체로 루프를 돌릴수 있게 하는데 또한 의미가 있다.

코딩 컨벤션, 반드시 필요하다고 생각된다.

난 코딩 컨벤션이 반드시 필요하다고 생각된다.
헝가리안 표기법을 쓰네마네 이야기들이 있을수 있다.

헝가리안 표기법 자체는 그대로 가져다 쓰에는 분명히 문제가 있을수 있으나, 그를 이용한 내지는 조금 비슷한, 그래서 어떤 코딩 컨벤션이 나오는것은 정말 좋은 점이라고 본다.

나는 개발하면서 느낀부분이지만, 혹자는 툴이 좋아서 뭐 그럴필요 있냐고 한다.
난 이렇게 반발하고 싶다. 우리가 눈으로 0.5초도 안되는 시간에 말로 읽을수 없는 글자를 눈으로
다 읽어내는것과 같은 현상에 대해서 설명하라고 말이다.

툴이 쓰는순간, 보는 순간 알수 있게 해준다면 정말 좋을 것이다.
0.5초도 안되는 순간에 판단할 수 있게 해주는 툴은 난 아직 본적이 없다.

그러나 그걸 가능하게 해주는것이 코딩건벤션인듯 싶다.
문장을 '잘' 쓴것과 '맛깔' 나게 쓴 글을 비교하면 알수 있지 않을까 한다.

맛깔이 무슨뜻인지 나도 잘 설명할 자신은 없다.
그러나 '잘' 과 '맛깔' 은 분명 차이가 있다. '맛깔'나게 쓴 글이 훨신 빠르게 이해되며 집중도 더 잘된다고 본다.

아직은, 개발을 한지 오래되진 않았지만 아직은 필요하다고 본다.

코딩컨벤션.

2010년 3월 21일 일요일

서블릿을 이용한 초기화 작업


서블릿은 WAS 에서만 작동한다. 그렇기 때문에 WAS 에 제한적으로 초기화 할 수 밖에 없다.
그렇지만 제한적이라는 표현을 쓰기에는 역시나 많은 방법이 있을수 있다.

지금 말해보고자 하는건 서블릿이 수행되는 init( ServletConfig config) 함수를 이용한 초기화 방법이다.

말하지 않아도 작업을 좀 해본 사람이라면 기본적인 방법은 다 알고 있다.


1. web.xml 에 init-param 에 환경 설정에 해당하는 변수를 설정한다.
2. init( ServletConfig config) 함수를 오버라이딩 하여 config 객체로부터 그 값을 가져와 사용한다.


큰 맥락은 너무 나도 간단하다. 그렇지만 여기서 읽어들인 값들을 어떻게 보관할건인지 고민을 하게 된다.
그리고 모든 초기화 속성 값을 web.xml 에 전부 나열할 것인지도 고민해봐야 한다.

결론부터 이야기 하자면, 당연히 web.xml 에는 나열하지 않는다는 것이다.
물론 설정해야 할 초기변수가 양이 작다면 나열해도 되지만 대부분의 개발에서 환경값은 그리 적지 않은게
사실이다.

이때에 대부분 환경설정값을 properties 파일이나 xml 에 별도로 보관하고자 한다.
그리하여 결국 web.xml 에 정의하는 초기변수는 그 환경 변수값이 들어있는 파일의 경로를 설정하고,
설정된 파일 경로를 이용해 그 파일의 환경 변수값을 읽어들이게 된다.


<servlet>
<servlet-name>ConfigLoader</servlet-name>
<servlet-class>com.dnt.common.webs.ServerConfig</servlet-class>
<init-param>
<param-name>config_path</param-name>
<param-value>d:/workspace/conf/DntWebServer.properties</param-value>
       </init-param>
<load-on-startup>1</load-on-startup>
</servlet>


위와 같은 정도가 될 것이다. 이또한 너무 많이들 알고 있는 아주 평이한 방법이다.
그럼 더 깊은 곳을 알아보도록 하자.

서블릿은 WAS 에서 작동한다. 초기화된 변수는 어떻게 들고 보관해야 할까.
내가 들어 알고 있는 방벙 중 하나는 static 한 pool 을 이용하여 각 속성값을 가지고 있게 하는 것이다.

그럼 static 하게 가지고 있다는건 static 변수를 가지고 있다는 뜻이 될 것이다.
HashTable 이나 HashMap 등, Map이나 List 등에 담아둔다는 것인데.
이녀석들을 초기화하는 방법에 영 떠오르지 않는다.
(어디까지나 난 초보이기 때문에..;)

static 하게 만드는 이유는 속성값이니 한번 로딩된 값을 계속 가지고 있게 하기 위함이다.
그리고 이제는 어떤 static 클래스에 getProperty 라는 함수를 이용하여 어디서든 가져오게 하고싶다.

그런데 그렇게 하자니 클래스만 알면 어디서든 접근이 가능하므로 파일을 읽기도 전에 getProperty 를 가져다
쓸수 있게 된다. 개발자가 잘 쓰면 문제가 없지만 잘못쓰면 큰 낭패다.

그럼 환경변수는 static 하게 담아야 하고 그걸 이용하는 getProperty 는 일반 멤버함수로 사용하게
하려면 어떻게 해야 할까.

다시 말하면 순서를 착각하지 않도록 객체를 생성하는 과정에서 반드시 처음에는 파일을 읽게 하고 그다음에야 함수를 쓰게 하려면 어떻게 해야 할지를 고민해야 한다는 것이다.

하지만 결국 결심한것은 어차피 서블릿은 라이프 사이클이 있기에 로딩시 초기화하면 되므로 순서상 문제가 없으니 정적인 핸들러를 이용하기로 한다.

그냥 파일 읽어서 어디서나 쓰게 하려는의도가 은연중에 들어가버린건데 할게 많아진다.

어찌보면 굵게 마크한 부분을 강조하고자 이글을 썼는지 모르겠다.
'객체를 생성하는 시점에 파일을 읽을수 있도록 한다' 별생각없이 객체를 만들어내던 나에게 생각의 전환을 가져다준 아이디어이다.

2009년 6월 26일 금요일

처음에 건물에 릴리(LILLY) 라도 되어야 하는데 이가 빠졌는지 스펠링이 하나 없는걸 보고..우린른 호텔을 구할까 고민했었다..그런데 한국에 있는 지금..니가 다시 보고싶어진다..카페트에 먼지가 자욱하여 잠도 이룰수 없었던..그 호텔이..

2009년 6월 24일 수요일

노무현의 리더십 이야기 (행정가와 CEO를 위한 8가지 리더십의 원리)

이제 읽기 시작했다.
설렌다.
사실 몇장 읽었다.
재미있다.
조금 감동적이기까지 하다.

난 사실 리더는 될수 없을것 같다. 그렇지만 그 마인드는 깊이 간직하고 싶다.
이유는 잘 모르겠다. 그렇지만 필요할 것 같다.