2006년 7월 28일 금요일

자카트(zakāt)


요약 :

이슬람법에서의 구빈세

  본문:
자카(zakā)라고도 한다. 마호메트의 메카시대에는 희사(喜捨)·자선(慈善)의 뜻으로 사용되었다. 메디나시대로 들어서자 자발적 희사로는 사다카(sadaqa)라는 말이 쓰이게 되었고, 자카트는 구빈세의 뜻으로 변하였다. 곡물·과실·가축·금은·상품 등에 과세되었는데, 세율은 이익의 2.5∼10%였다. 마호메트 사후 제1대 칼리프 아부 바크르(572?∼634)에 의하여 법제화되어 이슬람 국가의 주요 재원이 되었다.

  출처:
네이버 백과사전 자카트 항목
이미지 출처 : http://www.ezsoftech.com

※ 기독교의 십일조에 해당하는 헌금으로, 일반적인 세율은 2.5%라고 합니다.

2006년 7월 25일 화요일

[강변] 민속 손 국시



반찬으로 나오는 김치, 보통수준의 맛




같이가신분 : 한대리님, 용희씨
평가대상 : 콩국수
음식의 물리적(?) 구성: 콩국수 + 김치
총평 : 찾아다니면서 먹을만하지는 않은데.. 이 부근에서 먹은 콩국수중 가장 나은듯하다는 평가
찾아가는 길: 어부네 농부네 다음에 있는 건널목을 건너면 엠마빵집이 나오는데 그 쪽 골목 끝에 있슴

2006년 7월 23일 일요일

낙타표기법 완성(CamelCase completion)

예를 들어, "LongJavaName"과 같은 긴 이름을 가진 식별자를 입력한 경우는없는가?
"LJN"으로 입력하고 Ctrl + Space를 누르면 이클립스는 무엇을 의미하는지 알 수 있다.

이를"낙타표기법 완성(CamelCase completion)"이라 부른다.

사용자 삽입 이미지


출처: 한빛 네트워크의 자바 개발 툴 이클립스 3.2의 새로운 기능

P.S. Auto Completion은 입력중인 단어를 분석하여 현재 문맥상에 들어올 수 있는 선택가능한 단어들을 골라서 보여주는 기능입니다. 여기에 낙타표기법(CamelCase)를 합해서 보여주는게 CamelCase Completion입니다.

Webkit




Webkit은 사파리의 오픈소스 웹 브라우저 엔진입니다. 아직은 nitly build로서 정식버전을 나오지는 않았습니다.


Webkit을 다운로드 받을 때 함께 딸려오는 놈 중에 Drosera라는 Safrai with Webkit 디버거가 함께 포함되어 있습니다. Safari에서 모두 지원되는 줄 알았는데 Webkit용도라고 나와있네요.

P.S. 1:
Webkit을 기반으로 한 윈도우즈 기반의 웹브라우저

P.S. 2:
Drosera를 사용하려고 여러 삽질을 했습니다. [-_-;;  생각해보면 참 아둔하다는 생각도 드네요.]
Nightly build를 사용하는 경우(소스 다운 받아서 하는 것은 저도 모릅니다. ^^;;)
defaults write com.apple.Safari WebKitScriptDebuggerEnabled -bool true
를 먼저 Terminal에서 실행시킵니다. 그리고 Drosera를 실행시키고 Webkit을 순서대로 실행시키면 Drosera의 Attatch창에 Webkit항목이 나오는데요. 그냥 Attatch 버튼을 눌러주면 Drosera가 디버거로 변신(?)을 하게 됩니다. ^^;;

User inserted image

Attatch창에 Webkit 항목이 나온 모습


User inserted image

Drosera의 변신한 모습!!

저처럼 Webkit을 실행시킨 다음 Drosera를 실행시키고 안된다고 한탄하시면 안됩니다. ^^;;

출처:

Javascript에서 XML 로딩

자바스크립트에서 XML로딩하는 방법으로는 두가지 정도가 있을 것 같습니다. (Ajax로 전송하는 것은 제외)
  1. 스트링을 받아서 로딩하는 방법,
  2. 파일을 로딩하는 방법.

먼저, IE를 살펴봅시다. IE에서 XML 로딩하려면, Microsoft.XMLDOM이라는 ActiveXObject를 사용하면 됩니다. 사용방법은 다음과 같습니다.
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlString);
   or
xmlDoc.load(xmlFile);

위의 코드를 호출하고나면 xml(파일 또는 스트링)을 document의 object처럼 호출이 가능해집니다. async= false로 주는 이유는 xml파일 또는 스트링이 다 로딩된 후 다음 코드를 실행하기위해서 사용됩니다.
ActiveXObject를 사용하는 방법 외에도 CreateObject등을 사용하는 방법도 존재합니다.


Firefox에서는 document.implementation.createDocument을 통하여 XML로딩이 지원이 됩니다.
var xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.load(xmlFile);

createDocument의 첫번째 파라미터는 namespace를, 두번째 파라미터는 XML 파일에 있는 XML root element를 세번째 파라미터는 아직 구현이 되어 있지 않기 때문에 null을 넣어주면 됩니다.


※ 여기까지의 내용은 Mozilla의 Develper Center에서 본게 아니라 w3schools.com의 내용에서 가지고 왔습니다. MDC에서는 createDocument에 관한 내용 자체가 없더군요. (XUL section에서는 몇 개 있구요. 코드상에서 호출되는 것 뿐이지만)

그리고, Firefox에서 스트링으로 XML을 로딩하는 방법은 DOMParser를 이용하는 방법입니다. DOMParser는 표준이 아니기 때문에 모질라 플랫폼에서만 사용이 가능합니다.
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml");

PS.1 위의 결과로 xmlDoc을 생성한 값을 읽는 방법에도 여러가지가 있습니다만 다음의 방법으로 읽을 수 있습니다.
  1. 해당하는 xml 태그를 읽어온 다음에 tag.text(IE) 또는 tag.textContent(IE이외)를 사용하여 읽는 방법
  2. 해당하는 xml태그를 읽어온 다음에 tag로 감싸진 TextNode를 읽어들여서 해당하는 nodeValue로 읽는 방법
코드로 구현한다면 다음과 같이 될 것 같습니다.
// xmlDoc의 xml의 구성 <result>sample</result>
var resultTag = xmlDoc.getElementsByTagName("result")[0];
var resultText = (resultTag.text)? resultTag.text: resultTag.textContent;
   or
var resultText = resultTag.childNodes[0].nodeValue;

PS.2 MSN Browser에서 XML파싱할 때 발생하는 문제점

MSN Browser에서도 당연히 XMLDOM을 사용해서 파싱이 가능합니다만, 문제점이 있더군요. XML 선언문에서 encoding이 들어간 경우 에러가 발생합니다.
<?xml version='1.0' encoding='UTF-8' ?>
...

encoding을 삭제하는 경우에는 정상적으로 동작합니다.


출처 :
http://www.w3schools.com/dom/dom_parser.asp
http://developer.mozilla.org/en/docs/DOMParser

"AJAX Programming" 온라인 강좌 (10주 과정)

썬마이크로시스템즈 자바 에반젤리스트인 신상철씨가 진행하는 "AJAX Programming 강좌"로서 10주간 진행됩니다. AJAX의 기본부터 다양한 AJAX 프레임웍과 툴킷의 사용법까지 다룬다고 합니다. 일반 대학교 강좌처럼 진행되며, 매주 강좌자료와 숙제까지 제공된다고 합니다.

강좌 진행은 영어로 진행된다고 합니다.
강좌 링크 : http://www.javapassion.com/ajaxcodecamp/

같이 들으실 분은 연락 주세요 ^^

2006년 7월 21일 금요일

우석이 이야기

"생명나눔재단은 희귀병인‘크루존증후군’으로 고통받고 있는 최우석(5세 · 김해 · 내동)군의 치료비 마련을 위해「개구쟁이 우석이는 친구가 필요합니다.」라는 슬로건으로 ‘우석이 지키기 캠페인’을 김해YMCA, 김해YWCA, CJ케이블넷 가야방송, 내외동 봉사단체, 김해지역 시민,사회단체, 지역기업 등과 함께 약 1개월간  김해를 중심으로 캠페인을 펼치려 합니다.

우석이는 생후 7개월 때, '크루존 증후군’확진을 받고 뇌압을 감소시키는 두개골 성형수술을 서울대병원에서 하였고 현재까지 치료를 유지해 오고 있습니다. 우석이가 앓고 있는 우리나라에서도 몇 되지 않는 병으로 선천성 기형의 일종으로 두개골의 앞부분과 안면골의 윗부분 즉 아래턱을 제외한 안면부분의 성장이 되지 않는 기본적인 증세를 보입니다.

우석이는 눈이 튀어 나와있고 밤에도 눈을 감지 못한 영향으로 오른쪽 눈은 실명 상태이며, 남은 한쪽 눈의 시력상태 또한 기능이 급속도로 약화되고 있습니다.
 

우석이는 병증의 증세가 심하게 나타나는 케이스로 뇌압이 증가하여 뇌에 물이 차 뇌수종으로 발전하여, 머리뒤쪽에 기계(션트삽입술)를 넣어 등쪽으로 물을  빼고 있습니다. 병증이 심회됨에 따라 환아 스스로 호흡을 하기 어려워 목에 구멍을 내어 튜브를 꽂아 놓은 상태이고, 오른족 팔과 손 등이 마비되어 가는 등  합병증이 확산되어가는 증세가 보이고 있습니다.

우석이는 당장이라도 안면성형수술과 목과 머리에 연결된 튜브관 교체수술, 상황이 호전된 후에 팔을 펴는 수술을 받아야 하는 등 여러차례 큰 수술을  받아야 합니다. 치료가 제대로 이루어지지 않을 경우 극심한 통증이 유지되고 시력상실은 물론 전신마비 등 크게는 생명을 잃게 됩니다.

우석이의 가정은 엄마와 초등학교에 다니는 두명의 누나, 우석이를 포함해 네식구가 기초생활 수급자로 정부에서 매달 생활을 지원해 주는 보조금으로 어렵게 살아가고 있습니다. 매달 우석이에게 들어가는 치료비와 치료를 받기위해 서울로 움직이는 비용을 쓰고나면 누나들이 필요한 학용품조차도 구입 할수 없는 딱한 처지에 놓여있습니다. 최근까지 무상으로 살고 있었던 한칸 쪽방마저 집이  매매되어 당장 집을 비워줘야 해서 우여곡절 끝에 임시로 귀거할 곳을 겨우 찾긴 했지만  이곳 조차도 머지않아 비워줘야 할 안타까운 상황 입니다.

우석이는 밤이면 수면중에 눈이 튀어나와 고통을 다스리지 못해 두눈을 잡고 팔짝팔짝 뛰며, ‘엄마, 어떻게좀 해줘’‘너무 아파’하며 고통을 호소하고 있습니다. 밤이면 1시간에 한번이상 수 차례 고통을 반복하는 일이 생활화 되어 있습니다. 하루에도 수십번 눈을 밀어넣는 등 다섯 살 배기 어린 아이가 고통을  감당 하기에는 너무나 가혹한 생활을 하고 있습니다.

우석이는 통증이 덜한 낮시간에 놀고있는 모습을 보면 여느 아이들과 다를것 없는 아이 입니다. 실명된 한쪽눈 눈꺼풀을 끌어내리고 다~다~다 쏜살같이 뛰어 다닙니다. 누나들이 학교에서 마치고 돌아올 시간이 되면 좁은 골목길 앞에서  누나들이 오지 않을까? 하는 생각에 골목어귀에서 집앞을 오가며 애타게 기다리는 모습이 여느 아이들과 똑같은 다섯 살 배기 개구쟁이 입니다.

친구 될 만한 동네 아이들이 있어도 우석이 스스로 자기 모습을 의식 하다보니  또래 친구들과 어울리지 못합니다. 골목길 가까이 또래 아이들이 어울려 놀고  있어도 우석이는 다가서지 못합니다. 우석이가 엄마에게 힘 없이 묻는 말 ‘엄마, 나는 왜 친구가 없어? 그러한 우석이 에게는 누나들이 우석이의 유일한 친구 입니다.

생명나눔재단은 7월 19일 부터 약 1개월간 우석이 치료비를 마련키 위해 김해지역 시민,사회단체와 지역 봉사단체, 기업등과 연계하여「개구쟁이 우석이는 친구가 필요 합니다.」슬로건을 걸고 캠페인을 펼치고자 합니다.

남편 없이 세 아이들을 엄마 혼자서 아이들을 힘들게 양육하고 있으며, 우석이를 비롯해서 일가족 모두 힘들게 하루하루 살아가고 있습니다. 경제적 이유로  치료를 제대로 받지 못하고 있는 우석이와 우석이 가정을 우리사회가 작은 힘이  되어 준다면 우석이 가정은 여느 가정처럼 행복하게 살아갈 수 있을것 입니다.

우석이 가정을 사회가 보듬어 낼 수 있도록 시민 여러분의 관심 부탁 드립니다."

생명나눔재단 : http://www.lifeshare.co.kr/

위의 글의 출처 : 생명나눔재단, 생방송 오늘 아침
※ MBC에서 봤는데 방송목록에는 없더군요.  21일자 방송이니 한번 보세요.
오늘 아침 TV를 보다 우석이 이야기를 봤습니다. 한번 들어들가서 보세요.

2006년 7월 19일 수요일

웹페이지에서 선택된 element들을 알아내려면?

IE에서는 document의 selection을 이용합니다.
1. selection을 얻어옵니다.
var sel = document.selection;
2. selection으로부터 Range를 생성해 냅니다. createRangeCollection 메소드는 현재 선택된 selection으로부터 TextRange collection을 생성해냅니다.
var range = sel.createRangeCollection();

3. [selection이 하나라고 가정하고...] htmlText를 이용해서 html을 읽어냅니다.
var txt = range[0].htmlText;


Firefox에서는 window의 selection을 이용합니다.
1. selection을 얻어옵니다.
var sel = window.getSelction();
2. selection으로부터 시작노드 anchorNode와 마지막노드 focusNode를 얻어올 수 있습니다.
var start = sel.anchorNode;
var end = sel.focusNode;

※ IE처럼 FF에서도 selection으로부터 Range 객체를 가지고 올수 있습니다. Range객체의 개수는 sel의 rangeCount를 사용합니다. ^^;; FF에서는 따로 테스트는 안해봤어요~

관련자료 : Finding textarea selection

자바스크립트에서 이벤트 취소와 전달 취소

자바스크립트에서 키 이벤트를 처리할 때 'Tab'이나 'Backspace'를 직접처리하려면 몇 가지 문제가 있습니다. Tab이나 Backspace 모두 브라우저에서 디폴트로 사용되는 키이므로 Tab이 눌렸을 때는 Tab index에 따라 HTML의 element를 순회하고, Backspace가 눌렸을 때는 이전 페이지로 돌아가는 문제가 발생하게 됩니다.

이러한 문제를 해결하기 위해서는 어떻게 해야할까요? 전에 조사했던 바로는 setTimeout을 사용하는 편법을 사용하는 것이었습니다. 그러나, 이러한 방법을 사용하지 않는 방법도 존재합니다. ^^;; preventDefault와 cancelable을 사용하는 것입니다.
bool = event.cancelable;
or
event.preventDefault();
이 두개를 사용하게 되면, 브라우져의 디폴트 동작을 취소시킬 수 있게 됩니다. preventDefault를 사용할지 또는 cancelable을 사용할지는 event에 따라 달라지게 됩니다. (※ IE에서는 return false를 해주면 됩니다.)

그리고, 이벤트가 발생했을 때 상위의 element로 이벤트를 전달하고 싶지 않을 때는 위의 cancelable이나 preventDefault가 아니라 stopPropagation을 사용해주면 됩니다. (※ IE에서는 cancelBubble을 사용하면 됩니다.)
event.cancelBubble = true;       //for IE
if(event.stopPropagation){
  event.stopPropagation();
}

관련글: DOM 객체에 EventListener 등록

※ 그러면, Input Element에 대해서 keyDown, keyPress, keyUp 이벤트를 모두 사용할 때 cancelBubble 또는 stopPropagation이나 preventDefault를 호출하면 어떻게 될까요?

정답:

more..


2006년 7월 16일 일요일

비가 많이 오네요..


한강 강변 산책로(?)가 물에 잠겼네요..
비 조심들 하시기를..

[보고싶은 책]The Art of Project Management : 마음을 움직이는 프로젝트 관리

한빛미디어에서 'The Art of Project Management: 마음을 움직이는 프로젝트 관리'라는 책이 나왔다. 일단 제목부터 마음에든다. (므흣~)

dittabook에 소개된 주요 내용은 더 마음에 든다.
- 임무를 완수하는 방법
- 좋은 판단을 내리는 방법
- 명세와 요구 사항
- 아이디어와 아이디어를 다루는 방법
-" 사람 성질을 돋우지 않는 방법 "
- 리더십과 신뢰
- 일정 준수에 대한 진실
-. 프로젝트가 잘못될 때 해야 할 일


2006년 7월 15일 토요일

도저히 모르겠다..

"무엇을 생각하는지..."

아무 생각이 없는 것 같다. 사람 속마음을 들여다보는 망원경이라도 있었으면 좋겠다.

2006년 7월 12일 수요일

2006년 7월 11일 화요일

Know Ajax? Work from Home

구글에서 자바스크립트 검색하다 광고를 하나 발견했다.

조건은 상당히 괜찮다. 믿을만한지에 대해서는 의구심이 들지만.. ㅋㅋ

WORK FOR TOP U.S. FIRMS

oDesk lets you set your own hourly rates and work for top US firms.

Top oDesk programmers earn over $3,000 per month.


궁금하시면 여기로 클릭

2006년 7월 9일 일요일

MATSC + FDT + Eclipse

MATSC - Motion-Twin ActionScript 2 Compiler
FDT - Development Tool for Flash

네온박사 님의 블로그에 들어가 이것저것 기웃거리다 발견한 내용. 이클립스에서 Actionscript를 사용해서 flash 파일을 생성해내는 방법. 오~ 재밌을 것 같다.

출처:
네온박사 님의 '플래시 완벽 개발 환경'

가끔씩 일하다 보면..

 사장님 방과 이사님 방이 바로 앞에 있는 관계로 (고개를 들어 하늘을 보려면, 사장님과 눈을 마주쳐야 된다~) 듣고싶지 않은데도 불구하고 팀장회의 내용이 들린다. (문이 열렸을 때) 그런데.. 듣다보면.. 나한테 들으라고 하는 것 같다는 느낌이 강하게 온다. (--;;;;)

내가 소심한걸까~

제발 회의실 문닫고 하셨으면~



The ONE key thing to know about negotiation

In negotiation, the one thing that really strengthens your position is the ability to walk away from the deal.
Eric.Weblog()에 올라온 'The ONE key thing to know about negotiation'에 올라온 글입니다. 핵심은 하나 협상이 안된경우 협상을 포기할 수 있어야만 협상을 유리하게 이끌 수 있다는 얘기네요.



IE에서 DOM을 사용해서 colspan을 적용하려면?

 DOM을 사용해서 HTML을 생성해낼 때 가끔(아니, 자주일지도...) 안되는 경우가 있다. 가령, colpsan 같은 속성이 적용이 안되는 문제다.

생성할 HTML 코드는 다음의 형태를 갖고 있다.
<table style="font-family: verdana; font-size: 10px;" border="1">
   <tbody>
       <tr>
           <td>Test1</td>
           <td>Test2</td>
       </tr>
       <tr>
           <td colspan="2">Test3</td>
       </tr>
   </tbody>
</table>

위의 HTML을 생성할 코드를 대충 Javascript로 짜면 다음과 같이 만들 수 있겠다.
var tableElm = document.createElement('table')
tableElm.setAttribute('border', '1px')
tableElm.setAttribute('style', 'font-family:verdana;font-size:10px;')
wrapper.appendChild(tableElm);

var tbodyElm = document.createElement('tbody')
tbodyElm.setAttribute('style', 'font-family:verdana;font-size:10px')
tableElm.appendChild(tbodyElm)

var trElm = document.createElement('tr')
tbodyElm.appendChild(trElm)

var tdElm = document.createElement('td')
tdElm.innerHTML = 'Test1'
trElm.appendChild(tdElm)

tdElm = document.createElement('td')
tdElm.innerHTML = 'Test2'
trElm.appendChild(tdElm)

trElm = document.createElement('tr')
tbodyElm.appendChild(trElm)

tdElm = document.createElement('td')
tdElm.innerHTML = 'Test3'
tdElm.setAttribute('colspan', '2')           
trElm.appendChild(tdElm)

이렇게 생성하는 코드를 브라우저에 출력시키면 어떻게 될까?

firefox의 화면

ie의 화면


firefox에서 적용된 스타일과 colspan이 ie에서는 전혀 적용이 되지 않은것을 확인할 수 있다.
무엇이 문제인가? 몇일을 고민한 결과 원인을 알아냈다. (스타일은 아직 알아내지 못하였다.)

정답은 ie에서 DOM으로 attribute를 설정하는 경우 대소문자를 가린다는 것이다.
colspan을 colSpan으로 수정하면 정상적으로 코드가 적용된 것을 확인할 수 있다.

DevToolBar에서 colSpan을 확인한 모습


P.S:
   DevToolBar를 사용하면 속성을 실시간으로 바꿔서 적용할 수 있다.

CSS에서 element들을 한줄에 놓으려면?

1. DIV 태그를 써서 하나로 묶는다.
2. PRE 태그를 써서 하나로 묶는다.
3. 태그의 nowrap속성을 사용한다.
4. 'white-space' css 속성을 사용한다.

정답..


P.S:
<div></div><div></div>를 한줄에 놓을 수는 없다.  <span>을 쓰자 ~

2006년 7월 6일 목요일

Fajax - the fake alternative to ajax

blendTrans 메소드를 페이지 들어갈 때와 나갈 때 호출함으로서 페이지간에 부드럽게 전환되는 효과를 일명 Fajax라 부릅니다.
<meta http-equiv="Page-Exit"
    content="progid:DXImageTransform.Microsoft.Fade(duration=.5)" />

<META http-equiv="Page-Enter" content="blendTrans(Duration=0.2)">
<META http-equiv="Page-Exit" content="blendTrans(Duration=0.2)">

주의할 점은 다음과 같습니다. Dom Handling을 사용하는 페이지의 경우 절대 사용하지 말것!!
체험속도로 2~3배정도 느려지는 것 같네요.

출처:

Fjax도 있네요. Fjax는 XML 파싱을 플래시로 처리하는 것을 의미한다고 합니다.