<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<channel>

	<title><![CDATA[웹2.0 개발]]></title>
	<link>http://blog.dreamwiz.com/shchun74</link>
	<description><![CDATA[  ]]></description>
	<language>ko</language>
	<pubDate>Sun, 22 Nov 2009 05:39:38 +0900</pubDate>
	<image>
		<title><![CDATA[웹2.0 개발]]></title>
		<url>http://blog.dreamwiz.com/usrinfo/s/h/shchun74/shchun74_profile_20080123095430_0.jpg</url>
		<link>http://blog.dreamwiz.com/shchun74</link>
		<description><![CDATA[  ]]></description>
	</image>

				<item>
					<title><![CDATA[자바스크립트]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6611854</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/2/thbn_shchun74_20080418144258_6611854_1.jpg'  height=120 border=0 align='left'>요즘 자바스크립트를 다시 공부하고 있는데 가벼운 마음으로 보기에 좋은 책이 있어 소개합니다. 보통 문법에 대한 설명을 하는 책이 많은데 이 책을 보면서 다시 예전 Copy&amp;Paste 습관을 버려볼까 합니다.자바스크립트 for 웹2.0 셸리 파워즈 저/김태경,김대영 공역 | 한빛미디어 | 2007년 05월 &nbsp;1장 자바스크립트 소개 및 개요 자바스크립트를 소개하고 자그마한 웹페이지 응용프로그램을 처음으로 소개한다. 이 장에서는자바스크립트 사용에 관련된 여러가지 이슈들(통합개발환경, 보안, 접근성 등)을 다룬다. 2장. 자바스크립트 데이터 타입과 변수 이 장에서는 자바스크립트에서 사용하는 변수, 식별자, 문법, 기본 데이터 타입 등에 대해 개괄적으로 설명한다. 3장. 연산자와 구문 할당문, 조건문, 제어문 등의 자바스크립트 기본 구문과 이에 사용되는 연산자에 대해 다룬다. 4장. 자바스크립트 객체 자바스크립트에 내장된 객체인 Number, String, Boolean, D... <a href=' '>more...</a><!--요즘 자바스크립트를 다시 공부하고 있는데 가벼운 마음으로 보기에 좋은 책이 있어 소개합니다. 보통 문법에 대한 설명을 하는 책이 많은데 이 책을 보면서 다시 예전 Copy&amp;Paste 습관을 버려볼까 합니다.자바스크립트 for 웹2.0 셸리 파워즈 저/김태경,김대영 공역 | 한빛미디어 | 2007년 05월 &nbsp;1장 자바스크립트 소개 및 개요 자바스크립트를 소개하고 자그마한 웹페이지 응용프로그램을 처음으로 소개한다. 이 장에서는자바스크립트 사용에 관련된 여러가지 이슈들(통합개발환경, 보안, 접근성 등)을 다룬다. 2장. 자바스크립트 데이터 타입과 변수 이 장에서는 자바스크립트에서 사용하는 변수, 식별자, 문법, 기본 데이터 타입 등에 대해 개괄적으로 설명한다. 3장. 연산자와 구문 할당문, 조건문, 제어문 등의 자바스크립트 기본 구문과 이에 사용되는 연산자에 대해 다룬다. 4장. 자바스크립트 객체 자바스크립트에 내장된 객체인 Number, String, Boolean, Data, Math와 같은 객체를 소개한다. 그리고 정규표현식으로 패턴을 검사할 수 있는 RegExp 객체도 소개한다. 정규표현식은 폼 필드 값을 검사할 때 반드시 필요하다. 5장. 함수 자바스크립트에 내장된 객체 중 하나인 함수를 집중적으로 다룬다. 함수는 자바스크립트 코드를 묶어 놓은 것으로, 재사용이 가능하며, 사용자 정의 객체를 생성하는데 있어 중요한 역할을 한다. 자바스크립트 함수는 다른 언어의 함수에 비해 상대적으로 간단하지만, 어떤 면에서는 복잡할 수 있다. 이 장에서는 재귀 함수와 함수 클로저를 소개하고, 상세한 사항은 11장에서 다룬다. 6장. 이벤트 처리 이벤트 핸들링에 중점적으로 다룬다. 예전의 이벤트 핸들링 방법(아직까지 많은 프로그램에서 쓰이고 있다)과 새로운 DOM기반 이벤트 핸들링 방법을 모두 다룬다. 7장. 폼과 JiT 검사 폼과 폼 필드에서 자바스크립트를 사용하는 법을 소개한다. 여기에는 각 필드 타입(텍스트 입력 필드와 드롭다운 리스트와 같은 것들)에 접근하는 방법과 넘겨받은 데이터를 검사하는 것이 포함된다. 웹서버로 폼 데이터가 전송되기 전에 미리 유효성검사를 거치면, 데이터 전송에 따른 부하를 줄여 시간과 자원을 절약할 수 있다. 8장. 샌드박스, 쿠기, 연결성, 개인정보보호 스크립트 기반 쿠키에 대해 다룬다. 쿠키란 클라이언트측에 저장되는 조그마한 데이터 조각이다. 쿠키를 사용하면 사용자이름, 암호 등의 정보를 저장할 수 있고, 따라서 매번 정보를 입력해야하는 수고를 덜어준다. 쿠키에 대해 이야기하다보면 보안 문제를 짚고 넘어가지 않을 수 없다. 그래서 이 장에서는 자바스크립트 관련 보안 이슈에 대해서도 다룬다. 9장. 기본 브라우저 객체(BOM) 기본 브라우저 객체(window, document, form, history, location 등과 같은 객체를 담고 있다)를 시작으로, 자바스크립트에서 접근할 수 있는 객체 모델을 살펴본다. BOM을 사용하면, 윈도우를 열거나 웹페이지 안의 엘리먼트(폼, 링크, 이미지 같은 것들)에 접근할 수 있다. 그리고 간단한 동적 효과를 줄 수도 있다. 10장. 문서객체모델(DOM) 이 장에서는 DOM을 중점적으로 다룬다. DOM을 사용함으로써 문서(웹페이지)의 엘리먼트와 속성에 접근할 수 있다. 그리고 HTML뿐 아니라 XML이나 XHTML 기반 문서로의 접근도 가능하다. DOM은 이해하기 쉽고 직관적이다 하지만 처음 접하는 프로그래머에게 조금 어려울 수도 있다. 11장. 사용자 정의 객체 자바스크립트에서 사용자 정의 객체를 생성하는 방법과 구문에서 프로그래밍 언어 내에서 그러한 구조를 가능케하는 프로토타입 구조를 다룬다. 그리고 상속과 캡슐화 같은 프로그래밍 언어의 개념도 일부 다룬다. 하지만 독자가 이러한 개념을 반드시 알아야 하는 것은 아니다. 12장. 동적 웹페이지와 CSS 자주 사용되는 동적 HTML 효과(드래그-앤-드롭, 페이지 일부의 수축 및 확장, 가시도, 움직임과 같은 것들)에 대해 소개한다. 이를 위해서는 CSS를 알아야 한다. 13장. Ajax 이 장에서는 최근 인기를 끈 Ajax를 소개한다. Ajax는 복잡한 자바스크립트 프로그램으로 오해하는 경우가 있는데, 그렇지 않다. Ajax를 구성한다고 할 수 있는 여러가지 프레임워크(자바스크립트, DHTML, CSS, XML 등)에 대해 언급하고, Ajax가 유명해지는 데 가장 큰 역할을 한 "구글 맵스"에 대한 예제도 제공한다. 14장. 풍부한 라이브러리! 놀라운 웹 서비스! 재미있는 API! 를 소개합니다. 무료로 다운로드해서 사용할 수 있는 유명 라이브러리들에 대해 다룬다. 즉, Prototype, Sabre의 Rico, Dojo, MochiKit, 야후!의 UI, script.aculo.us와 같은 것들을 다룬다. 이러한 라이브러리와 책을 잘 활용하면 멋지고 유용한 웹 프로그램을 작성할 수 있을 것이다.--></td></tr></table>]]></description>
					<pubDate>Fri, 18 Apr 2008 14:40:40 +0900</pubDate>
					<category><![CDATA[Book]]></category>
				</item>

				<item>
					<title><![CDATA[브라우저의 리턴매치가 가능한가?]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6570497</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/5/thbn_shchun74_20080402103248_6570497_1.JPG'  height=120 border=0 align='left'>http://marketshare.hitslink.com/report.aspx?qprid=0&nbsp;2008년 3월 세계 웹 브라우저 시장점유율최근 넷애플리케이션 조사에 따르면 지난해 80% 전후를 유지해 온 익스플로러의 세계 시장 점유율은 올해 3월 74.80%까지 줄었다. 반면, 파이어폭스는 지난해 14.95%에서 올해 3월 17.83%로 상승세를 타고 있습니다. 파이어폭스는 2008년 1월달 보다 약 1%의 상승이 반전의 가능성이 더 크게 보이게 합니다. 사파리의 6% 점유율도 이제는 생각해 봐야 할 시점인듯 보입니다.이런 구도는 MS와 모질라의 이번 리턴매치를 더 흥미롭게 하고 있네요.물론 국내에는 아직 해당사항이 아니지만...</td></tr></table>]]></description>
					<pubDate>Wed, 02 Apr 2008 10:30:7 +0900</pubDate>
					<category><![CDATA[etc]]></category>
				</item>

				<item>
					<title><![CDATA[드롭다운(풀다운) 메뉴 설명]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6557216</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>&lt;!-- DHTML로 풀다운 메뉴 만들기 --&gt;&lt;html&gt;&lt;head&gt;&nbsp;&lt;style type="text/css"&gt;/* ① 메뉴바 만들기 : &lt;div id = "menubar"&gt; */#menuBar {&nbsp;&nbsp; /* #은 ID 셀렉터, 특정 태그의 ID 속성에서 참조할 스타일에 대한 정의 부분을 의미 */&nbsp; background-color: #C8FFFF;&nbsp; /* 배경색 */&nbsp; border: 2px solid;&nbsp;&nbsp; /* 외곽선, 2픽셀의 solid 스타일로 만들어 진다. */&nbsp; border-color: #f0f0f0 #808080 #808080 #f0f0f0;&nbsp; /*&nbsp; 외곽선 색상 : top, right, bottom, left 순서 */&nbsp; color: #000000; /* 문자색 */&nbsp; font-size: 1pt; /* 폰트... <a href='http://blog.dreamwiz.com/shchun74/6570497 '>more...</a><!--&lt;!-- DHTML로 풀다운 메뉴 만들기 --&gt;&lt;html&gt;&lt;head&gt;&nbsp;&lt;style type="text/css"&gt;/* ① 메뉴바 만들기 : &lt;div id = "menubar"&gt; */#menuBar {&nbsp;&nbsp; /* #은 ID 셀렉터, 특정 태그의 ID 속성에서 참조할 스타일에 대한 정의 부분을 의미 */&nbsp; background-color: #C8FFFF;&nbsp; /* 배경색 */&nbsp; border: 2px solid;&nbsp;&nbsp; /* 외곽선, 2픽셀의 solid 스타일로 만들어 진다. */&nbsp; border-color: #f0f0f0 #808080 #808080 #f0f0f0;&nbsp; /*&nbsp; 외곽선 색상 : top, right, bottom, left 순서 */&nbsp; color: #000000; /* 문자색 */&nbsp; font-size: 1pt; /* 폰트 크기 */&nbsp; padding: 4px 2px 4px 2px; /* 패딩 : top, right, bottom, left 순서 */&nbsp; text-align: left; /* 문서 정렬 */&nbsp; width: 90%;&nbsp; /* 박스 내용 영역의 너비, % 상대적인 비율로 표시할 때 많이 사용 */}&nbsp;/* ② 메뉴 버튼 만들기 : &lt;a class="menuButton" href="#"&gt;링크&lt;/a&gt; */ a.menuButton, a.menuButtonActive {&nbsp; background-color: transparent; /* transparent : 배경을 투명하게 설정 */&nbsp; border: 1px solid #C8FFFF;&nbsp; color: #000000;&nbsp; cursor: default;&nbsp; /* 커서 모양을 관리, 원래는 링크 위로 마우스를 올려 놓으면 디폴트로 커서 모양이 손 모양으로.. 드롭다운 메뉴에서는 마우스가 그 링크 위로 올라가도 커서 모양이 손모양으로 변하지 않고 디폴트 커서인 화살표를 유지하도록 하기 위해서 삽입 */&nbsp; font-family: "굴림";&nbsp; font-size: 9pt;&nbsp; font-style: normal; /* 글꼴의 표준, 이탤릭, 기울임 속성 */&nbsp; font-weight: normal; /* 글꼴의 굵기 */&nbsp; margin: 1px; /* 상하좌우의 각 여백읠 한번에 지정 */&nbsp; padding: 2px 6px 2px 6px; &nbsp; position: relative; /* 요소의 표시 위치를 결정하기 위한 속성, relative 이면 원래 위치해야할 위치에서 left, top, right, bottom 값을 이용하여 상대 위치로 옮긴다&nbsp; */&nbsp; left: 0px;&nbsp; top: 0px;&nbsp; text-decoration: none; /* 글자의 밑줄, 윗줄, 삭제선 등의 속성 표시 */}a.menuButton:hover {&nbsp; background-color: transparent;&nbsp; border-color: #f0f0f0 #808080 #808080 #f0f0f0;&nbsp; color: #000000;}&nbsp;/* ③ 메뉴버튼 활성화 : 클릭시 */ a.menuButtonActive, a.menuButtonActive:hover {&nbsp; background-color: #89F5FE;&nbsp; border-color: #808080 #f0f0f0 #f0f0f0 #808080;&nbsp; color: #ffffff;&nbsp; left: 1px;&nbsp; right: 1px;}/* ④ 메뉴, 하위메뉴 생성 */.menu { &nbsp; background-color: #C8FFFF;&nbsp; border: 2px solid;&nbsp; border-color: #f0f0f0 #808080 #808080 #f0f0f0;&nbsp; padding: 0px;&nbsp; position: absolute;&nbsp; text-align: left;&nbsp; visibility: hidden; /* 이 속성을 사용한 요소를 보이게 할지 숨기게 할지를 결정해 주는 속성, 사용할 수 있는 값 : visible, hidden */}&nbsp;a.menuItem {&nbsp; background-color: transparent;&nbsp; color: #000000;&nbsp; cursor: default;&nbsp; display: block;&nbsp; /* 지정된 요소를 어떻게 표시할지를 설정하는 속성, block : 내용을 감싸고 있는 박스를 배치시킬 때 수직으로 배치시키겠다는 의미 */&nbsp; font-family: "굴림";&nbsp; font-size: 9pt;&nbsp; font-style: normal;&nbsp; font-weight: normal;&nbsp; margin: 0px;&nbsp; padding: 2px 16px 2px 12px;&nbsp; text-decoration: none;&nbsp; white-space: nowrap;}&nbsp;a.menuItem:hover {&nbsp; background-color: #000080;&nbsp; color: #ffffff;}/* 그룹과 다른 그룹 사이의 경계를 표시하기 위한 구분선 */&nbsp; .menuItemSep {&nbsp; border-bottom: 1px solid #f0f0f0;&nbsp; border-top: 1px solid #808080;&nbsp; margin: 3px 4px 3px 4px;}&nbsp;&lt;/style&gt;&nbsp;&lt;!-- ⑤ 브라우저 감지 --&gt; &lt;script type="text/javascript"&gt;&nbsp;////////// 브라우저 종류와 버전 체크하는 객체 생성자 함수function objDetectBrowser() {&nbsp; var strUA, s, i;&nbsp; this.isIE = false;&nbsp; // 인터넷 익스플로러인지를 나타내는 속성&nbsp; this.isNS = false;&nbsp; // 파이어폭스를 나타내는 속성&nbsp; this.version = null; // 브라우저 버전을 나타내는 속성&nbsp; // Agent 정보를 담고 있는 문자열.&nbsp; strUA = navigator.userAgent; &nbsp; &nbsp; //alert(strUA);&nbsp;&nbsp; s = "MSIE";&nbsp; // Agent 문자열(strUA) "MSIE"란 문자열이 들어 있는지 체크&nbsp; if ((i = strUA.indexOf(s)) &gt;= 0) {&nbsp;&nbsp;&nbsp; this.isIE = true;&nbsp;&nbsp;&nbsp; // 변수 i에는 strUA 문자열 중 MSIE가 시작된 위치 값이 들어있고,&nbsp;&nbsp;&nbsp; // s.length는 MSIE의 길이 즉, 4가 들어 있다.&nbsp;&nbsp;&nbsp; // strUA.substr(i + s.length)를 하면 strUA 문자열 중 MSIE 다음에 &nbsp;&nbsp;&nbsp; // 나오는 문자열을 잘라온다.&nbsp;&nbsp;&nbsp; // 그 문자열을 parseFloat()로 변환하면 버전을 알아낼 수 있다.&nbsp;&nbsp;&nbsp; this.version = parseFloat(strUA.substr(i + s.length));&nbsp;&nbsp;&nbsp; return;&nbsp; }&nbsp;&nbsp; s = "Mozilla";&nbsp; if ((i = strUA.indexOf(s)) &gt;= 0) {&nbsp;&nbsp;&nbsp; this.isNS = true;&nbsp;&nbsp;&nbsp; this.version = parseFloat(strUA.substr(i + s.length));&nbsp;&nbsp;&nbsp; return;&nbsp; }&nbsp;&nbsp; // 다른 "Gecko" 브라우저는 파이어폭스로 취급.&nbsp;&nbsp; s = "Gecko";&nbsp; if ((i = strUA.indexOf(s)) &gt;= 0) {&nbsp;&nbsp;&nbsp; this.isNS = true;&nbsp;&nbsp;&nbsp; this.version = 2.0;&nbsp;&nbsp;&nbsp; return;&nbsp; }}&nbsp;&nbsp;var objDetectBrowser = new objDetectBrowser();&nbsp;&nbsp;&nbsp;// ⑥ 메뉴 버튼 활성화 처리 //////////&nbsp; 현재 활성화된 버튼을 추적하기 위한 전역 변수var gvActiveButton = null;&nbsp;// 버튼이 아닌 다른 곳에 마우스를 클릭하면 활성화된 버튼을 비활성화로 변경&nbsp;if (objDetectBrowser.isIE)&nbsp; document.onmousedown = mousedownPage;if (objDetectBrowser.isNS)&nbsp; document.addEventListener("mousedown", mousedownPage, true);&nbsp;function mousedownPage(event) {&nbsp;&nbsp; var objElement;&nbsp;&nbsp; // 활성화된 버튼이 없으면 밖으로 빠져 나감.&nbsp; if (!gvActiveButton)&nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp; // 현재 선택된 객체 요소를 얻어 옴.&nbsp; if (objDetectBrowser.isIE)&nbsp;&nbsp;&nbsp; objElement = window.event.srcElement;&nbsp; if (objDetectBrowser.isNS)&nbsp;&nbsp;&nbsp; objElement = (event.target.className ? event.target : event.target.parentNode);&nbsp;&nbsp; // 만일 현재 활성화된 버튼을 클릭했다면 그냥 밖으로 빠져 나감&nbsp; if (objElement == gvActiveButton)&nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp; // 만일 클릭한 요소가 메뉴 버튼, 메뉴 아이템 등이 아니면 활성화된 메뉴를 비활성화 시킴.&nbsp; if (objElement.className != "menuButton"&nbsp; &amp;&amp; objElement.className != "menuItem" &amp;&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objElement.className != "menuItemSep" &amp;&amp; objElement.className != "menu")&nbsp;&nbsp;&nbsp; resetButton(gvActiveButton);}&nbsp;function mouseoverButton(objMnuButton, strMenuName) {&nbsp;&nbsp; // 만일 다른 메뉴 버튼이 활성화되어 있다면 비활성화 시킨 후 현재 마우스 오버된 메뉴를 활성화&nbsp;&nbsp; if (gvActiveButton &amp;&amp; gvActiveButton != objMnuButton) {&nbsp;&nbsp;&nbsp; resetButton(gvActiveButton);&nbsp;&nbsp;&nbsp; &nbsp; if (strMenuName)&nbsp;&nbsp;&nbsp; clickButton(objMnuButton, strMenuName);&nbsp; }}&nbsp;function clickButton(objMnuButton, strMenuName) {&nbsp;//////////&nbsp; 링크 주변의 아웃라인을 없앰.&nbsp; objMnuButton.blur();&nbsp; &nbsp; &nbsp; // 이 메뉴 버튼에 하위 풀다운 메뉴 객체를 관장할&nbsp; // menu 란 이름의 객체 생성&nbsp; if (!objMnuButton.menu)&nbsp;&nbsp;&nbsp; objMnuButton.menu = document.getElementById(strMenuName);&nbsp;&nbsp;&nbsp; // 현재 활성화된 메뉴 버튼을 처음 상태로 되돌림.&nbsp; if (gvActiveButton &amp;&amp; gvActiveButton != objMnuButton)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resetButton(gvActiveButton);&nbsp;&nbsp; // 메뉴 버튼 활성화 여부에 따라 활성화/비활성화 토글&nbsp; if (gvActiveButton)&nbsp;&nbsp;&nbsp; resetButton(objMnuButton);&nbsp; else&nbsp;&nbsp;&nbsp; pulldownMenu(objMnuButton);&nbsp;&nbsp; return false;}&nbsp;&nbsp;function pulldownMenu(objMnuButton) {&nbsp;//////////&nbsp; 현재 선택된 객체의 클래스를 "활성화" 클래스로 변경&nbsp; objMnuButton.className = "menuButtonActive";&nbsp; &nbsp; if (objDetectBrowser.isIE &amp;&amp; !objMnuButton.menu.firstChild.style.width) {&nbsp;&nbsp;&nbsp; objMnuButton.menu.firstChild.style.width = objMnuButton.menu.firstChild.offsetWidth + "px";&nbsp; }&nbsp; &nbsp; // 브라우저마다 각자 환경에 맞는 드롭 다운 메뉴의 위치를 결정&nbsp; x = objMnuButton.offsetLeft;&nbsp; y = objMnuButton.offsetTop + objMnuButton.offsetHeight;&nbsp; if (objDetectBrowser.isIE) {&nbsp;&nbsp;&nbsp; x += 2;&nbsp;&nbsp;&nbsp; y += 2;&nbsp; }&nbsp; if (objDetectBrowser.isNS &amp;&amp; objDetectBrowser.version &lt; 6.1)&nbsp;&nbsp;&nbsp; y--;&nbsp;&nbsp; // 위치 결정 및 풀다운 메뉴를 보여줌&nbsp;&nbsp; objMnuButton.menu.style.left = x + "px";&nbsp; objMnuButton.menu.style.top&nbsp; = y + "px";&nbsp; objMnuButton.menu.style.visibility = "visible";&nbsp; &nbsp; // 현재 활성화된 메뉴 객체를 저장하는 전역변수 gvActiveButon에&nbsp; // 현재 선택된 메뉴 객체를 설정&nbsp; gvActiveButton = objMnuButton;}&nbsp;function resetButton(objMnuButton) {&nbsp;&nbsp; // 원래 스타일로 되돌림&nbsp; objMnuButton.className = "menuButton";&nbsp;&nbsp; // 펼쳐진 풀다운 메뉴를 감춰줌&nbsp; if (objMnuButton.menu) &nbsp;&nbsp;&nbsp; objMnuButton.menu.style.visibility = "hidden";&nbsp;&nbsp; // 현재 활성화된 메뉴 버튼이 없는 것으로 설정&nbsp; gvActiveButton = null;}&nbsp;&lt;/script&gt;&lt;/head&gt;&nbsp;&lt;body&gt;&lt;!-- 메뉴바에 들어갈 태그 정의, #으로 정의한 스타일 이름 / .으로 정의한 스타일 이름 &nbsp;여기서 a는 HTML의 기본 요소중 하나인 &lt;a&gt; 태그에 대한 셀렉터(selector)&nbsp;CSS에서 셀렉터 다음에 '#'이나, '.'을 사용할 수 있는데 여기서처럼 '.'을 사용하면 해당 태그 요소에서(여기서는 &lt;a&gt; 태그) class 속성을 통해 이 스타일에 접근할 수 있다.&nbsp;만일 '.' 대신 '#'을 사용하면 class 속성이 아닌 ID 속성으로 접근하겠다는 것을 의미&nbsp; --&gt;&nbsp;&lt;div id="menuBar"&gt;&nbsp; &nbsp;&lt;!-- newsMenu --&gt; &lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href="javascript:void(0)"&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'newsMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'newsMenu');"&gt;뉴스&lt;/a&gt;&lt;!-- eBizMenu --&gt;&lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href=""&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'eBizMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'eBizMenu');"&gt;e비즈니스&lt;/a&gt;&lt;!-- webMenu --&gt;&lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href=""&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'webMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'webMenu');"&gt;웹개발&lt;/a&gt;&lt;!-- techMenu --&gt;&lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href=""&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'techMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'techMenu');"&gt;테크&lt;/a&gt;&lt;!-- seminarMenu --&gt;&lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href=""&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'seminarMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'seminarMenu');"&gt;IT 세미나&lt;/a&gt;&lt;!-- kicMenu --&gt;&lt;a class="menuButton"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; href=""&nbsp;&nbsp;&nbsp; onclick="return clickButton(this, 'kicMenu');"&nbsp;&nbsp;&nbsp; onmouseover="mouseoverButton(this, 'kicMenu');"&gt;코리아인터넷닷컴&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;!-- 드롭 다운 메뉴에 대한 태그 정의 --&gt;&nbsp;&lt;div id="newsMenu" class="menu"&gt; &lt;!-- newsMenu --&gt;&lt;a class="menuItem" href="/channel/list.asp?cid=2&amp;zid=3"&gt;국제뉴스&lt;/a&gt;&lt;a class="menuItem" href="/channel/list.asp?cid=2&amp;zid=6"&gt;국내뉴스&lt;/a&gt;&lt;a class="menuItem" href="/channel/newslinx.asp?cid=2&amp;cid_level=1"&gt;뉴스링스&lt;/a&gt;&nbsp;&nbsp;&nbsp; &lt;div class="menuItemSep"&gt;&lt;/div&gt;&lt;a class="menuItem" href="/etc/bestnews/index.asp?cid=2"&nbsp;&nbsp; target="_blank"&nbsp; onclick="resetButton(gvActiveButton);return true;"&gt;베스트 뉴스 기사&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;div id="eBizMenu" class="menu"&gt; &lt;!-- eBizMenu --&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=66&amp;cid_level=2"&gt;e비즈니스 일반&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=324&amp;cid_level=2"&gt;인력관리&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=68&amp;cid_level=2"&gt;콘텐츠 &amp; 미디어&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=67&amp;cid_level=2"&gt;이메일 마케팅&lt;/a&gt;&nbsp;&nbsp;&nbsp; &lt;div class="menuItemSep"&gt;&lt;/div&gt;&lt;a class="menuItem" href="/etc/bestnews/index.asp?cid=3"&nbsp;&nbsp; target="_blank"&nbsp; onclick="resetButton(gvActiveButton);return true;"&gt;베스트 e비즈니스 기사&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;div id="webMenu" class="menu"&gt; &lt;!-- webMenu --&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=189&amp;cid_level=4"&gt;자바스크립트&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=187&amp;cid_level=4"&gt;HTML&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=185&amp;cid_level=4"&gt;ASP&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=193&amp;cid_level=4"&gt;XML&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=179"&gt;포토샵&lt;/a&gt;&nbsp;&nbsp;&nbsp; &lt;div class="menuItemSep"&gt;&lt;/div&gt;&lt;a class="menuItem" href="/etc/bestnews/index.asp?cid=4"&nbsp;&nbsp; target="_blank"&nbsp; onclick="resetButton(gvActiveButton);return true;"&gt;베스트 웹개발 기사&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;div id="techMenu" class="menu"&gt; &lt;!-- techMenu --&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=210&amp;cid_level=2"&gt;인터넷 파워유저&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=113&amp;cid_level=3"&gt;SQL 서버&lt;/a&gt;&lt;a class="menuItem" href="/channel/index.asp?cid=318"&gt;IT 칼럼&lt;/a&gt;&nbsp;&nbsp;&nbsp; &lt;div class="menuItemSep"&gt;&lt;/div&gt;&lt;a class="menuItem" href="/etc/bestnews/index.asp?cid=227"&nbsp;&nbsp; target="_blank"&nbsp; onclick="resetButton(gvActiveButton);return true;"&gt;베스트 테크 기사&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;div id="seminarMenu" class="menu"&gt;&nbsp; &lt;!-- seminarMenu --&gt;&lt;a class="menuItem" href="/etc/conference/index_domestic.asp"&gt;국내 세미나&lt;/a&gt;&lt;a class="menuItem" href="/etc/conference/index_global.asp"&gt;국제 세미나&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;div id="kicMenu" class="menu"&gt;&nbsp; &lt;!-- kicMenu --&gt;&lt;a class="menuItem" href="/etc/sitemap.asp"&gt;사이트맵&lt;/a&gt;&lt;a class="menuItem" href="/etc/guide/howtotips.asp"&gt;IT 활용팁/강좌&lt;/a&gt;&lt;a class="menuItem" href="/etc/guide/column.asp"&gt;e비즈니스 칼럼&lt;/a&gt;&lt;/div&gt;&nbsp;&lt;/body&gt;&lt;/html&gt;ps. 2단계 풀다운 메뉴는 4월 중순~하순경에&nbsp;올리도록 하겠습니다.--></td></tr></table>]]></description>
					<pubDate>Wed, 26 Mar 2008 15:55:42 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[[펌]순진한 개발자가 사내정치에서 살아남는 법]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6539199</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>개발자 K씨를 재회한 것은 8년만의 일이다. 그는 나와 함께 일했던 직장에서 이직한 이후에 4번이나 더 이직을 했는데, 현재는 실직 상태에서 직장을 구하고 있었다. 솔루션을 개발하는 회사에서는 비전이 없어 그만 두었고, 대기업 계열 SI업체를 들어갔으나 개발이 아닌 관리를 시켜서 그만두었고, 포털에 들어갔는데 할 일이 별로 없고 회사 상황이 정치적이어서 그만두었다고 했다. 그리고 마지막 회사는 소위 벤처기업이었는데, 6개월이나 임금을 받지 못한 상태에서 사장이 사실상 야반도주를 해서 회사가 망했다고 했다. K씨는 자바를 정말 잘 다루던 개발자였는데, 일반적인 기준에서 볼 때 성격이 좋다고 얘기하기는 힘든 사람이었지만 그 정도면 무난하다고 할 수 있었다. 다만 여느 개발자와 마찬가지로, 타인의 욕구에 관심을 가지거나 커뮤니케이션 스킬이 뛰어난 사람은 아니었다. 다음은 그가 한 얘기이다.“회사 경영은 나하고 상관이 없다고 생각했어요. 제가 경영이나 관리 같은 것은 잘 모르고요. 회사에서... <a href='http://blog.dreamwiz.com/shchun74/6557216 '>more...</a><!--개발자 K씨를 재회한 것은 8년만의 일이다. 그는 나와 함께 일했던 직장에서 이직한 이후에 4번이나 더 이직을 했는데, 현재는 실직 상태에서 직장을 구하고 있었다. 솔루션을 개발하는 회사에서는 비전이 없어 그만 두었고, 대기업 계열 SI업체를 들어갔으나 개발이 아닌 관리를 시켜서 그만두었고, 포털에 들어갔는데 할 일이 별로 없고 회사 상황이 정치적이어서 그만두었다고 했다. 그리고 마지막 회사는 소위 벤처기업이었는데, 6개월이나 임금을 받지 못한 상태에서 사장이 사실상 야반도주를 해서 회사가 망했다고 했다. K씨는 자바를 정말 잘 다루던 개발자였는데, 일반적인 기준에서 볼 때 성격이 좋다고 얘기하기는 힘든 사람이었지만 그 정도면 무난하다고 할 수 있었다. 다만 여느 개발자와 마찬가지로, 타인의 욕구에 관심을 가지거나 커뮤니케이션 스킬이 뛰어난 사람은 아니었다. 다음은 그가 한 얘기이다.“회사 경영은 나하고 상관이 없다고 생각했어요. 제가 경영이나 관리 같은 것은 잘 모르고요. 회사에서 벌어지는 정치 게임은 질색이에요. 저는 그저 개발만 하고 싶었어요. 그런데 개발에 집중할 수 있는 조직이 참 없더라고요. 이제 저는 어떻게 해야 할까요?”필자는 그날 K씨와 새벽까지 술을 마실 수 밖에 없었다. 개발자가 개발자답게 일하고 성장할 수 없는 것이 바로 한국의 현실이다. 성장을 하는 것이 아니라 사라져 가고 있다.개발자는 어떤 사람인가? 문제를 발견하고 문제를 해결하고, 스펙에 따라(또는 창조적으로) 무언가를 만들어 내고, 오랜 시간 동안 한 자리에 앉아서 화면만을 째려보며 몰입할 수 있기에 개발자다. 그것이 그들의 특징이며 그렇게 때문에 개발을 할 수 있는 것이다. 개발자에 대해 IT업계의 다른 직종들은 어떻게 생각하고 있을까? 단편적이지만 그들의 생각을 살펴보자. 어떤 영업맨은 “저한테 저렇게 열 시간 동안 앉아 있으라고 하면 절대 그러지 못할 거 같네요. 어떻게 저럴 수 있나요?”라고 필자에게 반문하기도 했다.어떤 마케터는 “그들은 쿠폰에 항상 도장을 찍더군요. 작은 것에 민감한 거 같아요. 시야가 좁고 자신들의 분야 외에는 거의 관심이 없는 거 같더군요. 게임이나 애니, 미드 같은 것을 좋아하고. 업계나 시장 돌아가는 상황에 대해서는 관심도 없고...”라고 얘기했다. 실제로 마케터들은 개발자와 함께 일하는 경우가 별로 없어서 그들을 잘 모른다. 원거리에서 그들을 바라볼 뿐이다.반면에 개발자와 함께 협업하는 경우가 많은 요구분석가, 웹기획자들 중 상당수는 다음과 같은 얘기를 했다. “그들은 커뮤니케이션 스킬이 없어요. 중요한 대화에는 제대로 응하지 않다가 자신들과 상관이 있는 이슈가 나오면 발끈해요. 무조건 안 된다고만 하죠. 도무지 협상이라고는 할 줄 모르는 사람들이에요.”혼자서 일하는 1인 개발자가 아닌 이상, 대부분의 개발자는 조직에서 협업을 해야 한다. 프로젝트 매니저와 대화해야 하고, 기획자/디자이너/동료 개발자와 협업을 해야 한다. 프로젝트에 따라서는 고객과 직접적인 커뮤니케이션을 해야 하는 경우도 있다. 그리고 사내정치를 피해갈 수 있는 개발자는 거의 없다. 직간접적으로 영향을 받을 수 밖에 없다.그런데 한국에서 사내정치는 중소기업에서 대기업, 인터넷기업까지 만연되어 있다. 많은 개발자들이 정치를 싫어한다. 정확히 표현하면 정치가 미치는 부정적인 영향을 싫어한다고 할 수 있을 것이다. 하지만 조직이라는 것은 그 안에 있는 수많은 조직구성원들이 지위 고하에 따라 자신의 목표와 이익을 추구하는 곳이다. 그리고 그들간의 이해관계는 상충될 수 밖에 없다. 그래서 누군가는 희생자가 된다. 안타깝게도 그 대상은 대부분 개발자이다.개발자는 현실적인 일정 하에서 보다 나은 기술을 이용하여 높은 품질의 소프트웨어를 만들고 싶어하지만, 어떤 사람들은 기술 자체나 품질은 전혀 상관없이 일자 또는 비용만이 그들의 관심사이다. 그렇다면 그것은 잘못된 것인가? 그럴 수도 있고 아닐 수도 있다. 상황에 따라 답이 다르다. 현실은 단순한 흑백논리로 설명되지는 않는다.패배하지 않기 위해 이것만은 기억하자사내정치에서 살아남기 위해서 개발자가 알고 있으면 유용할 세 가지 지침을 제시한다. 다음의 세가지 지침은 서로 연동된다.1. 나의 목표와 주변의 이해관계를 파악하고 있어야 한다. 자신이 원하는 것이 돈인지 명예인지 지위인지, 아니면 개발을 통한 자아실현인지, 개인생활의 추구인지 명확히 알고 있어야 한다. 또한 나의 목표를 실현하는데 있어 가장 큰 장애물이 무엇인지 알고서 그것을 관리해야 한다. 자신의 목표와 상충되는 목표를 가진 이해관계자의 욕구를 파악하고 그것과의 타협점을 찾아야 한다. 하지만 사실, 대부분의 경우 목표를 실현하는데 있어서 가장 큰 장애물은 자기자신의 성격이다. 그렇지만 성격을 수양하는 개발자가 과연 몇 %나 될까? 아는 것과 실천은 완전히 별개의 단계이다.2. “너와 나의 진실은 다르다”는 사실을 이해하고 있어야 한다. 자신이 믿는 것만이 정의이고 진실이라는 생각이 들 때, 숨을 세 번 크게 내쉬면서 상대편의 입장에서도 과연 그럴까 다시 한번 생각해 보기 바란다. 내가 알거나 느끼는 것을 쉽게 드러내서는 곤란하다. 대부분의 경우 그것은 설익은 판단이고 타이밍이 적절치 않은 경우가 많다. 하지만 자신의 감정을 주체하지 못하고 ‘욱’한 나머지, 준비도 안된 상태에서 회사를 그만 두어 버리고 경력을 망치는 개발자들이 많다. 퇴사 후 놀고 있는 당신을 사내정치인들은 비웃고 있다.3. “군자에게는 실수를 해도 소인배에게는 실수를 하지 말라”는 격언을 기억하기 바란다. 이 말은 필자가 회사 생활에서 곤란을 겪는 후배들에게 숱하게 해주었던 말이다. 이 말을 처음 들었을 때의 임팩트는 상당히 크다. 군자(君子)는 점잖고 덕이 있는 사람이다. 그래서 군자는 누가 실수를 해도 그 이유를 스스로 파악하여 너그럽게 이해해준다. 하지만 소인배는 조금만 불이익을 당하거나 무시를 당했다고 느끼면 바로 삐지며, 심할 경우 끝까지 따라다니며 괴롭힌다.그런데 사람이란 군자에게는 존경심을 갖고서 공손히 대하고 소인배는 무시한 나머지 함부로 대한다. 그것이 인지상정이다. 하지만 만일 그 소인배가 당신의 직장상사라면?사내정치는 어느 나라에나 존재한다. 한국뿐만 아니라 미국에도 일본에도 있다. 하지만 한국에서 더욱 사내정치가 심할 수 밖에 없는 이유가 있다. 한국은 아직까지 IT업계뿐만 아니라 사회의 여러 분야에서 전문가의 개념이 불분명한 나라이다. 제대로 된 전문가가 출현하고 그 가치를 인정받는 지식사회가 되기까지 앞으로도 꽤 많은 시간이 걸릴 것이다. 한국은 아직은 선진 지식사회가 아니다. 그러므로 고급지식을 가진 사람들이 별로 없을 뿐만 아니라, 설사 있다고 하더라도 그것을 인정하지 못하며, 설사 인정한다고 할 지라도 필요로 하지 않는다. 실력을 인정하는 기준이 없으니, 사내정치가 판을 친다.전문가를 필요로 하지 않는 사회, 자기계발이 살길 궤변으로 들릴 지 모르지만, 우리 업계에 전문가가 없는 것은 전문가를 필요로 하지 않기 때문이다. 조직 내에 사내정치인이 승진하고 인정받는 것은 조직의 상층부가 몰라서 그런 것이 아니라 그런 사람을 선호하기 때문이다. 성장은 커녕 생존을 이야기해야 하는 현실이 안타깝지만, 일단 생존해야 자기계발을 하고 경력관리를 하면서 기회를 노릴 것이 아닌가? 사내정치를 잘 할 필요는 없지만(그리고 개발자의 특성상 잘 하지도 못 할 것이다), 희생자가 되어서는 곤란하다. 이것이 바로 필자가 개발자 K씨에게 한 말이다.개발자는 자신의 개발력과 장점을 해치지 않는 선에서, 이해관계자를 파악하고 그들의 욕구를 다루는 능력을 갖추어야 한다. 자신의 목표를 분명히 해야 하며, 감정에 치우쳐서 일을 그르치지 말아야 한다. 그러지 못한다면 결국 희생자가 될 뿐이다.그러한 희생을 몇 번 당하다 보면, 개발업에 대한 애정이 식어버려 자기계발을 등한시하게 될 뿐만 아니라 성격까지 나빠져서 더욱 더 안 좋은 상태에 처하게 된다. 그렇게 사라져간 개발자들이 참 많다.이런 조언을 하는 것에 대해 한편으로는 미안하게 생각한다. 언젠가 개발력만으로도 인정받을 수 있는 사회가 오면(너무 낭만적인 표현이다), 사내정치 대신 좀 더 아름다운 세상에 대해 이야기하겠지만 지금은 아니다. 정신을 똑바로 차리고 이 난세에서 생존하기 바란다. 환경을 바꿀 수 없으면 자신을 바꾸어야 하며, 자신을 진화시킨 개발자에게는 반드시 기회가 올 것이다. 세상은 장기적으로 볼 때 스스로 혁신하는 사람의 편이니까 말이다--></td></tr></table>]]></description>
					<pubDate>Tue, 18 Mar 2008 18:17:6 +0900</pubDate>
					<category><![CDATA[etc]]></category>
				</item>

				<item>
					<title><![CDATA[한글 초성 추출 ]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6534080</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>키워드 : php, iconv, unicode, euc-kr&lt;?// 문자 입력받으면 유니코드로 바꿔서 유니코드 번호에 따라서 각각 초,중,종성으로 분리function jaso_split($string) {&nbsp;$cho_array = array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");&nbsp;$jung_array = array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅗㅏ", "ㅗㅐ", "ㅗㅣ", "ㅛ", "ㅜ", "ㅜㅓ", "ㅜㅔ", "ㅜㅣ", "ㅠ", "ㅡ", "ㅡㅣ", "ㅣ");&nbsp;$jong_array = array("", "ㄱ", "ㄱㄱ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ",... <a href='http://blog.dreamwiz.com/shchun74/6539199 '>more...</a><!--키워드 : php, iconv, unicode, euc-kr&lt;?// 문자 입력받으면 유니코드로 바꿔서 유니코드 번호에 따라서 각각 초,중,종성으로 분리function jaso_split($string) {&nbsp;$cho_array = array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");&nbsp;$jung_array = array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅗㅏ", "ㅗㅐ", "ㅗㅣ", "ㅛ", "ㅜ", "ㅜㅓ", "ㅜㅔ", "ㅜㅣ", "ㅠ", "ㅡ", "ㅡㅣ", "ㅣ");&nbsp;$jong_array = array("", "ㄱ", "ㄱㄱ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ", "ㅂㅅ", "ㅅ", "ㅅㅅ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");&nbsp;$str = iconv("CP949", "UTF-16LE", $string);&nbsp;//echo "초성 : "; &nbsp;&nbsp;for($i = 0; $i &lt; strlen($str); $i += 2) {&nbsp; $byte1 = "0".dechex(ord($str[$i + 1])); // 10진수를 16진수로 변환&nbsp; $byte2 = "0".dechex(ord($str[$i])); // 10진수를 16진수로 변환&nbsp; $code = hexdec(substr($byte1, strlen($byte1) - 2, 2).substr($byte2, strlen($byte2) - 2, 2)); // 16진수를 10진수로 변환&nbsp; &nbsp; if($code &gt;= 0xAC00 &amp;&amp; $code &lt;= 0xD7A3) {&nbsp;&nbsp; // 유니코드 0xAC00 : 가 0xD7A3 :힣&nbsp;&nbsp; $temp = $code - 0xAC00; //종성에서 0번째에 해당하는 것은 '없음'이므로 유니코드값에서 0xAC00을 뺀 후에 28로 나누어 떨어지는지 확인&nbsp;&nbsp; $jong = $temp % 28;&nbsp;&nbsp; $jung = (($temp - $jong) / 28) % 21;&nbsp;&nbsp; $cho = floor((($temp - $jong) / 28) / 21);&nbsp;&nbsp; //유니코드에서는 한글은 초성이 19개, 중성이 21개, 종성이 28개//초성 19개를 0...18까지 번호를 붙이고 중성도 0...20, 종성도 역시 0...27까지 번호를 붙인다면 원하는 코드는 0xAC00 + x*21*28 + y*28 + z (x=초성번호, y=중성번호, z=종성번호)로 만들 수 있습니다..&nbsp;$rtn_str .= iconv("EUC-KR", "UTF-8", $cho_array[$cho].$jung_array[$jung].$jong_array[$jong]); //iconv 문자변환&nbsp;&nbsp; //&nbsp; euc-kr은 euc encoding이고, cp949은 MS의 확장완성형, 이 경우 euc-kr을 포함&nbsp;&nbsp; //&nbsp; UTF-16LE 윈도우용 유니코드 &nbsp;&nbsp; //&nbsp; UTF-8은 글자에 따라 1, 2, 3, 4 바이트로 나타내는데 반해, UTF-16은 글자에 따라 2바이트 (Basicl Multilingual Plane이라고 불리우는 유니코드 첫 부분에 있는 약 65,536자 - 엄밀히 말하면 이보다 작습니다만-는 2바이트) 혹은 4바이트(나머지 약 100만 글자)로 나타냅니다.&nbsp; }&nbsp; else $rtn_str .= $str[$i].$str[$i + 1];&nbsp;}&nbsp;&nbsp;return iconv("UTF-8", "EUC-KR", $rtn_str);} // 문자 입력받으면 유니코드로 바꿔서 유니코드 번호에 따라서 초성만 분리function choseong($string2) {&nbsp;$cho_array2 = array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");&nbsp;$jung_array2 = array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅗㅏ", "ㅗㅐ", "ㅗㅣ", "ㅛ", "ㅜ", "ㅜㅓ", "ㅜㅔ", "ㅜㅣ", "ㅠ", "ㅡ", "ㅡㅣ", "ㅣ");&nbsp;$jong_array2 = array("", "ㄱ", "ㄱㄱ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ", "ㅂㅅ", "ㅅ", "ㅅㅅ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ");&nbsp;$str2 = iconv("CP949", "UTF-16LE", $string2);&nbsp;&nbsp;for($i2 = 0; $i2 &lt; strlen($str2); $i2 += 2) {&nbsp; $byte12 = "0".dechex(ord($str2[$i2 + 1])); // 10진수를 16진수로 변환&nbsp; $byte22 = "0".dechex(ord($str2[$i2])); // 10진수를 16진수로 변환&nbsp; $code2 = hexdec(substr($byte12, strlen($byte12) - 2, 2).substr($byte22, strlen($byte22) - 2, 2)); // 16진수를 10진수로 변환&nbsp; &nbsp; if($code2 &gt;= 0xAC00 &amp;&amp; $code &lt;= 0xD7A3) {&nbsp;&nbsp; // 유니코드 0xAC00 : 가 0xD7A3 :힣&nbsp;&nbsp; $temp2 = $code2 - 0xAC00; //종성에서 0번째에 해당하는 것은 '없음'이므로 유니코드값에서 0xAC00을 뺀 후에 28로 나누어 떨어지는지 확인&nbsp;&nbsp; $jong2 = $temp2 % 28;&nbsp;&nbsp; $jung2 = (($temp2 - $jong2) / 28) % 21;&nbsp;&nbsp; $cho2 = floor((($temp2 - $jong2) / 28) / 21);&nbsp;$rtn_str2 .= iconv("EUC-KR", "UTF-8", $cho_array2[$cho2]); //iconv 문자변환&nbsp; }&nbsp; else $rtn_str2 .= $str2[$i2].$str2[$i2 + 1];&nbsp;}&nbsp; &nbsp;return iconv("UTF-8", "EUC-KR", $rtn_str2);} $chs = choseong($inputtxt); $test = jaso_split($inputtxt); $phrase&nbsp; = "$test";$hangeul = array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ", "ㅏ", "ㅐ", "ㅑ", "ㅓ", "ㅔ", "ㅕ", "ㅗ", "ㅛ", "ㅜ", "ㅠ", "ㅡ", "ㅣ");$english = array("r", "R", "s", "e", "E", "f", "a", "q", "Q", "t", "T", "d", "w", "W", "c", "z", "x", "v", "g", "k", "o", "i", "j", "p", "u", "h", "y", "n", "b", "m", "l");$newphrase = str_replace($hangeul, $english, $phrase);echo "&lt;p&gt; 초성 : $chs &lt;/p&gt;";echo "&lt;p&gt; 초성 중성 종성 : $phrase &lt;/p&gt;";echo "&lt;p&gt;영타 : $newphrase &lt;/p&gt;";?&gt;--></td></tr></table>]]></description>
					<pubDate>Mon, 17 Mar 2008 09:45:46 +0900</pubDate>
					<category><![CDATA[Programming]]></category>
				</item>

				<item>
					<title><![CDATA[Ajax와 PHP를 이용한 로그인 개발]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6519376</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>비록 영어로 되어 있으나 번역이 쉬운 관계로 원문 내용 그래도 첨부합니다.로그인에 대한 쉽게 설명한 내용이라 보면서 바로 이해 되시리라 생각됩니다.In the previous lesson we have seen how to realize an user login using Ajax and Coldfusion. Today's lesson will explains how to realize the same action using Ajax and PHP. Download this tutorialIntroductionIn the site root we have to create these file, index.php,login.php, config.php and a folder AJAX with ajax_framework.js.The workflow is the same that I have explained in the previous lesson: the user submit an HT... <a href='http://blog.dreamwiz.com/shchun74/6534080 '>more...</a><!--비록 영어로 되어 있으나 번역이 쉬운 관계로 원문 내용 그래도 첨부합니다.로그인에 대한 쉽게 설명한 내용이라 보면서 바로 이해 되시리라 생각됩니다.In the previous lesson we have seen how to realize an user login using Ajax and Coldfusion. Today's lesson will explains how to realize the same action using Ajax and PHP. Download this tutorialIntroductionIn the site root we have to create these file, index.php,login.php, config.php and a folder AJAX with ajax_framework.js.The workflow is the same that I have explained in the previous lesson: the user submit an HTML form with the username (in this example is the email address) and password. The form action call a javascript function, login(), in the ajax_framework.js file. This function pass with URL variables the input data to login.php page that execute a query and verify if the user exist. If the user exist return the user name, else return 0. The function loginReply() take this value returned from login.php and show a message into a layer of index.php.Step 1: the Login HTML FormThe first step is to create the HTML form. How you can see, the code below is indipendent from the server-side scripting language and can be used for example with Coldfusion, PHP and other languages. In the first row we will include ajax_framework.js that contains javascript functions to enable ajax functionalities (XMLHttpRequest and other functions, in this example the login() function):&lt;!-- Include AJAX Framework --&gt;&lt;script src="ajax/ajax_framework.js" language="javascript"&gt;&lt;/script&gt;&lt;!-- Show Message for AJAX response --&gt;&lt;div id="login_response"&gt;&lt;/div&gt;&lt;!-- Form: the action="javascript:login()"call the javascript function "login" into ajax_framework.js --&gt;&lt;form action="javascript:login()" method="post"&gt;&lt;input name="emailLogin" type="text" id="emailLogin" value=""/&gt;&lt;input name="pswLogin" type="password" id="pswLogin" value=""/&gt;&lt;input type="submit" name="Submit" value="Login"/&gt;&lt;/form&gt;Step 2: the javascript function login()In this lesson we have see how enable the XMLHTTPRequest. In ajax_framework.js file we have added this code:/* ---------------------------- *//* XMLHTTPRequest Enable *//* ---------------------------- */function createObject() {var request_type;var browser = navigator.appName;if(browser == "Microsoft Internet Explorer"){request_type = new ActiveXObject("Microsoft.XMLHTTP");}else{request_type = new XMLHttpRequest();}return request_type;}var http = createObject();Now, in the same javascript file, we will add other lines of code for the function login():/* -------------------------- *//* LOGIN *//* -------------------------- *//* Required: var nocache is a random number to add to request. This value solve an Internet Explorer cache issue */var nocache = 0;function login() {// Optional: Show a waiting message in the layer with ID ajax_responsedocument.getElementById('login_response').innerHTML = "Loading..."// Required: verify that all fileds is not empty. Use encodeURI() to solve some issues about character encoding.var email = encodeURI(document.getElementById('emailLogin').value);var psw = encodeURI(document.getElementById('pswLogin').value);// Set te random number to add to URL requestnocache = Math.random();// Pass the login variables like URL variablehttp.open('get', 'login.php?email='+email+'&amp;psw='+psw+'&amp;nocache = '+nocache);http.onreadystatechange = loginReply;http.send(null);}function loginReply() {if(http.readyState == 4){ var response = http.responseText;if(response == 0){// if login failsdocument.getElementById('login_response').innerHTML = 'Login failed! Verify user and password';// else if login is ok show a message: "Welcome + the user name".} else {document.getElementById('login_response').innerHTML = 'Welcome'+response;}}}How you can see, the only change, respect to login() function of the previous tutorial with Coldfusion, is:http.open('get', 'login.php?email='+email+'&amp;psw='+psw+'&amp;nocache = '+nocache);...instead of:http.open('get', 'login.cfm?email='+email+'&amp;psw='+psw+'&amp;nocache = '+nocache);Step 3: login.phpIn the previous step we have see how the login() function pass two variable (email and psw) to the page login.php, to execute a query into our database and verify that the user exists. This is the login.cfm page code:&lt;!-- Include Database connections info. --&gt;&lt;?php include('config.php'); ?&gt;&lt;!-- Verify if user exists for login --&gt;&lt;?phpif(isset($_GET['email']) &amp;&amp; isset($_GET['psw'])){$email = $_GET['email'];$psw = $_GET['psw'];$getUser_sql = 'SELECT * FROM USER WHERE email="'. $email . '" AND psw = "' . $psw . '"';$getUser = mysql_query($getUser_sql);$getUser_result = mysql_fetch_assoc($getUser);$getUser_RecordCount = mysql_num_rows($getUser);if($getUser_RecordCount &lt; 1){ echo '0';} else { echo $getUser_result['nick'];}}The tutorial is now ready to be tested in localhost server!For info about PHP database connections and the file config.php included in the first row of login.php take a look to this post for other details.ps. http://woork.blogspot.com/2007/10/login-using-ajax-and-php.html--></td></tr></table>]]></description>
					<pubDate>Mon, 10 Mar 2008 13:36:20 +0900</pubDate>
					<category><![CDATA[Programming]]></category>
				</item>

				<item>
					<title><![CDATA[CSS 에서 박스 모델]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6519116</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/3/thbn_shchun74_20080310105415_6519116_1.gif'  width=160 border=0 align='left'>&nbsp;CSS 에 박스 모델이라는 게 있다. 쉽게 말해 웹상에 네모난 상자를 그리고 싶은데 어떻게 그려야 하고 폭이나 높이, 두께, 여백은 어떻게 정해야 하는 지를 정의해 놓은 것이다.이 박스 모델에 문제가 있는데 W3C 에서 정의한 박스 모델과 IE에서 구현한 박스 모델이 서로 다르다는 것이다.예를 들어보자.박스의 폭을 300, 선의 두께를 20, 안쪽 여백을 30이라고 하자.CSS 표준 모델에서는왼쪽 선 두께(20) + 왼쪽 여백(30) + 실제내용 폭(300) + 오른쪽 여백(30) + 오른쪽 선 두께(20) = 400IE 모델에서는왼쪽 선 두께(20) + 왼쪽 여백(30) + 실제내용 폭(200) + 오른쪽 여백(30) + 오른쪽 선 두께(20) = 300이렇게 되어 버린다.이런 불일치를 해결하기 위한 핵이 여러 개 있는데 그 중에 3개를 소개한다.두 개는 댄 씨더홈이 짓고 박 수만이 옮긴 "웹 표준"과 "방탄웹"에 나와 있고, 추천하는 마지막 하나는 웹 상에서 찾은 거다... <a href='http://blog.dreamwiz.com/shchun74/6519376 '>more...</a><!--&nbsp;CSS 에 박스 모델이라는 게 있다. 쉽게 말해 웹상에 네모난 상자를 그리고 싶은데 어떻게 그려야 하고 폭이나 높이, 두께, 여백은 어떻게 정해야 하는 지를 정의해 놓은 것이다.이 박스 모델에 문제가 있는데 W3C 에서 정의한 박스 모델과 IE에서 구현한 박스 모델이 서로 다르다는 것이다.예를 들어보자.박스의 폭을 300, 선의 두께를 20, 안쪽 여백을 30이라고 하자.CSS 표준 모델에서는왼쪽 선 두께(20) + 왼쪽 여백(30) + 실제내용 폭(300) + 오른쪽 여백(30) + 오른쪽 선 두께(20) = 400IE 모델에서는왼쪽 선 두께(20) + 왼쪽 여백(30) + 실제내용 폭(200) + 오른쪽 여백(30) + 오른쪽 선 두께(20) = 300이렇게 되어 버린다.이런 불일치를 해결하기 위한 핵이 여러 개 있는데 그 중에 3개를 소개한다.두 개는 댄 씨더홈이 짓고 박 수만이 옮긴 "웹 표준"과 "방탄웹"에 나와 있고, 추천하는 마지막 하나는 웹 상에서 찾은 거다.마지막을 추천하는 이유는 그게 더 합리적으로 보여서다. 보통 W3C 에서 제정한 CSS 박스 모델을 최고로 치고 M$에서 만든 IE의 박스 모델을 비표준이라고 폄하하는 이들이 많다. 나도 어느 정도 동조를 했었다. 그런데 마지막 링크의 글을 보고는 생각을 바꿨다.분명 표준에도 나름대로의 이유가 있지만, 디자이너나 전문 종사자가 아닌 일반인이 보기에는 IE 의 박스 모델이 맞는 것처럼 보인다. M$에서 만들었다고 무조건 내리누를 만큼 합리성이 없는 모델은 아니란 거다. 보통 박스의 크기를 잴 때 선 바깥쪽에서 바깥쪽까지 재지, 여백을 제외하고 실제 내용이 있는 폭만 재지는 않는 게 일반적인 박스의 개념이다. 이런 내용이 마지막 링크에 잘 설명되어 있고, 각각의 박스 모델을 선택할 수 있는 방법이 제시되어 있기에 마지막 링크를 추천한다.마지막 링크를 보면 어떤 박스 모델을 사용할 지 선언할 수 있다. content-box 인지 padding-box 인지 border-box 인지.(단, 이 선언은 IE 에서는 아직 안된다. IE 7에서는 될런지...)이 외에도 마지막 링크를 보면 쿽스 모드와 엄격 모드란 게 있다. doctype 선언으로 박스 모델을 제어할 수도 있다.탄텍 셀릭의 박스 모델 핵http://www.tantek.com/CSS/Examples/boxmodelhack.html에드워드슨 택의 단순화된 박스 모델 핵http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.htmlPeter-Paul Koch 의 박스 모델 트위킹(tweaking) : 추천http://www.quirksmode.org/css/box.html-moz-box-sizing: margin-box;&nbsp;box-sizing: margin-box;ps, M$는 합리성보다는 편리성으로 하는게 맞을듯 싶네요CSS HacksCSS를 짜다보면 어쩔수 없이 핵과 마주해야합니다. 그나마 있어줘서 고마운 핵... 하지만 우리는 그 이름조차 모르고 있지는 않나요? ( --; 무슨 공익광고인가...)그래서 이름과 용법 등을 정리해 보았습니다.박스모델 핵 (Box Model Hack)&lt;적용브라우저 : IE4, IE5, IE5.5, NS4&gt;voice-family:"\"}\"";voice-family:inherit;property:&lt;value&gt;;"웹2.0을 이끄는 방탄웹(왜 웹2.0을 방탄웹이 이끄는지는 미스테리)"에 보면 처음 나오는 핵입니다.IE5.x (IE5, IE5.5 등)에서 div로 지정된 박스의 넓이가 padding과 margin을 적용하면 해석하는 과정에서 큰 오차가 발생하는 관계로 이 부분의 오차를 미연에 방지하고자 적용하는 핵입니다. 하지만, 다른 IE5.x관련 값에도 적용되는 유용한 핵입니다.(제 경험으로는, DTD를 Strict로 맞춰주면 이 핵을 적용하지 않고도 별 이상없이 구현되었습니다.)간략화된 박스모델 핵(SMBH, Simplified Box Model Hack)&lt;적용브라우저 : IE4, IE5 ,IE5.5, NS4, OP5&gt;말뜻 그대로, 길어서 줄인 것입니다.* html &lt;selector&gt; {property:&lt;value&gt;; &nbsp; &nbsp; &lt;- IE5.x의 값p\roperty:&lt;value&gt;;&nbsp; &lt;- 그 외 브라우저의 값} 카이오 핵(Caio's Hack)&lt;적용브라우저 : NS4&gt;/*/*/property:value;/* */ 패브라이스 도치법(Fabrice's Inversion)&lt;적용 브라우저 : IE4, IE5, IE5.5, IE6, IE7, NS6, NS7, OP6, OP7, OP8, SF2&gt;/*/*//*/property:value;/* */오웬 핵(Owen's Hack)&lt;IE4, IE5, IE5.5, IE6, NS4, OP5, OP6&gt;head:first-child+body div자식 셀렉터(Child Selector)&lt;적용 브라우저 : IE4, IE5, IE6, NS4&gt;원래는 핵이 아닌데, IE 구버전에서 처리할 수 없는 셀렉터를 이용해 핵처럼 이용하는 방법입니다. 이런 핵이 몇개 있는데, 대부분 IE 구버전과 관련있습니다.body&gt;div속성 셀렉터(Attribute Selector)&lt;적용 브라우저 : IE4, IE5, IE6, NS4&gt;이것 또한 속성셀렉터를 구버전 IE에서 인식하지 못하는 점을 이용한 핵입니다.html[xmlns] div스타 HTML 버그(Star HTML Bug)&lt;적용 브라우저 : IE7, MO1, NS4, NS6, NS7, OP5, OP6, OP7, OP8, SF&gt;오페라 전용 핵처럼 생각되어질 정도군요.* html div넥스트 낫씽 핵(Next to Nothing Hack)&lt;적용 브라우저 : IE5.5, IE6, MO1, NS4&gt;*+html div인라인 하이패스 필터(Inline High Pass Filter)&lt;적용 브라우저 : IE4, IE5, IE5.5, NS4&gt;i{content:"\"/*"}div{property:value}스타7 핵(Star 7 Hack)&lt;적용 브라우저 : IE4, IE5, NS4, OP5, OP6, OP7, OP8, SF&gt;html*#test언더스코어 핵(Under Score Hack)&lt;적용 브라우저 : IE7, MO1, NS4, NS6, NS7, OP5, OP6, OP7, OP8, SF&gt;_property:valuehttp://centricle.com/ref/css/filters/의 내용을 참고하여, 윈도우용만 적용해 보았습니다.기타 잘 정리해 둔 내용...Netscape 4 배제하기&lt;link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /&gt;Netscape 는 media 속성이 screen 이 아닌 경우 외부 스타일시트를 읽지 못하는 버그가 존재함.Win IE 3~4, Mac IE 4~4.5, Netscape 4 배제하기@import url("/css/style.css")Win IE 4, Mac IE 4 는 인용부호가 "가 아니면 읽지 못하는 버그 존재. IE 3과 Netscape 4는 @import 지원하지 않음.Mac IE 5 배제하기H1 { /* \*/ color:red; /* */ }Holly 핵이라 하며, 주석 안의 내용이 적용되지 않음.Win IE 4~5 배제하기H1/**/ { color:red; }셀렉터 뒤에 /**/ 삽입.Win IE 4~5, Mac IE 4.5~5 배제하기H1 { color/* */:red; }속성과 속성값을 구분하는 콜론(:) 앞에 /* */ 삽입.Win IE 4~6, Mac IE 4, Netscape 4 배제하기html&gt;body H1 { color:red; }셀렉터 앞에 html&gt;body 삽입.Win IE 6 제외시키기H1 { color /**/:red; }속성과 속성값을 구분하는 콜론(:) 앞에 스페이스와 /**/ 삽입.언더스코어 핵 (_)H1 { _color:red; }Win IE 4~6 에 적용.닷핵 (.)H1 { .color:red; }속성 앞에 . 삽입. Win IE 6~7 에만 적용. 타 브라우저는 정확히 확인하지 못했습니다.이 핵에 대해선 계속 확인중인데 블로그스피어나 여타 서적에는 전혀 언급이 없는 이상한 핵(?)입니다.해시 핵(#)H1 { #color:red; }속성 앞에 # 삽입. Win IE 4~6, Mac IE 5, Opera 7, Mozilla계열, Firefox 에 적용.스타 핵*HTML H1 { color:red; }셀렉터 앞에 *html 삽입. Win IE 4~6, Mac IE 4~5 에 적용.스타7 핵HTML*H1 { color:red; }셀렉터 앞에 html* 삽입(공백없이). Win IE 5.5~6, Mac IE 5, Safari 에 적용.xmlns 속성 핵HTML[xmlns] H1 { color:red; }셀렉터 앞에 속성 선택자를 삽입. Mozilla, Firefox, Opera, Safari 등 속성 선택자를 지원하는 브라우저에 적용.:root 가상클래스 핵:root H1 { color:red; }셀렉터 앞에 :root 가상클래스 삽입. Mozilla, Firefox, Mac IE 5, Safari 등 가상클래스를 지원하는 브라우저에 적용.Tantek 박스모델 핵H1 {&nbsp; &nbsp; width:500px;&nbsp; &nbsp; voice-family: ""}""; &nbsp; &nbsp; voice-family:inherit;&nbsp; &nbsp; width:400px;}Tantek Celik&nbsp;이 고안한 유명한 박스모델 핵. Win IE 4~5, Mac IE 4, Netscape 4 에서는 voice-family 속성 이전의 스타일 적용. 그외의 브라우저는 뒤의 속성 적용.단순 박스모델 핵H1 {&nbsp; &nbsp; width:500px;&nbsp; &nbsp; w\idth:400px; //Win IE 6, Mac IE 5, Mozilla, Opera, Safari&nbsp; &nbsp; \width:450px; // only Win IE 5}속성의 첫번째, 두번째 글자 사이에 \를 삽입하면 Win IE 6, Mac IE 5, Mozilla, Opera, Safari 에 적용.추가로 속성의 앞에 \를 삽입하면 Win IE 5 에만 적용.IE 7, Opera 적용하기*+html body H1 { color:red; }셀렉터 앞에 *+html body 삽입. IE 7, Opera 8 이후 버전 적용. Opera를 배제한 IE7 전용으로 하고 싶을 때는 *+html&gt;/**/body 로 Opera 전용 속성 기술.IE 7 적용하기*:first-child+html H1 { color:red; }셀렉터 앞에 *:first-child+html 삽입. IE 7에만 적용되고, 이외의 브라우저는 앞에서 기술한 셀렉터의 속성 적용.Win IE 5 패스필터@media tty {i{content:"";/*" "*/}}; @import '/css/style.css'; {;}/*";}}/* */Win IE 5.5 패스필터@media tty {i{content:"";/*" "*/}}@m; @import '/css/style.css';/*";}}/* */Win IE 6 패스필터(?)&lt;!--[if IE 6]&gt;&lt;link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /&gt;&lt;![endif]--&gt;Win IE 7 패스필터(?)&lt;!--[if gte IE 7]&gt;&lt;link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /&gt;&lt;![endif]--&gt;모던브라우저 패스필터 (Win IE 5.5 이하, Mac IE 5, Opera 8 이하, Netscape 4 이하 제외)@import "null?"{";@import "/css/style.css";@import "null?"}";--></td></tr></table>]]></description>
					<pubDate>Mon, 10 Mar 2008 10:51:55 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[euc-kr에서 utf-8로 변환하기]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6512091</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>unix 명령어iconv -f euc-kr -t utf-8 inputfile &gt; outfilefind 명령어를 이용해 서브디렉토리까지 한번에 euc-kr 에서 utf-8로 변환해 주는 스크립트#!/bin/bashFROM=euc-krTO=utf-8ICONV="iconv -f $FROM -t $TO"# Convert ; *.php 대신 "*"를 주면 모든 확장자에 대해 변환 시도find dir/ -type f -name "*.php" | while read fn; do&nbsp; cp ${fn} ${fn}.bak&nbsp; $ICONV&nbsp;&lt; ${fn}.bak&nbsp;&gt; ${fn}&nbsp; rm ${fn}.bakdone작업을 하다 보면 문자열 변경하는 문제가 생겨서 변경해 봅니다..ps 서브드리게토리의 파일중 원하는 스트리 변경하기find . -type f -name "*"&nbsp; \-exec perl -pi -e "s/source/target/g" {} \... <a href='http://blog.dreamwiz.com/shchun74/6519116 '>more...</a><!--unix 명령어iconv -f euc-kr -t utf-8 inputfile &gt; outfilefind 명령어를 이용해 서브디렉토리까지 한번에 euc-kr 에서 utf-8로 변환해 주는 스크립트#!/bin/bashFROM=euc-krTO=utf-8ICONV="iconv -f $FROM -t $TO"# Convert ; *.php 대신 "*"를 주면 모든 확장자에 대해 변환 시도find dir/ -type f -name "*.php" | while read fn; do&nbsp; cp ${fn} ${fn}.bak&nbsp; $ICONV&nbsp;&lt; ${fn}.bak&nbsp;&gt; ${fn}&nbsp; rm ${fn}.bakdone작업을 하다 보면 문자열 변경하는 문제가 생겨서 변경해 봅니다..ps 서브드리게토리의 파일중 원하는 스트리 변경하기find . -type f -name "*"&nbsp; \-exec perl -pi -e "s/source/target/g" {} \;source : 바꾸고자 하는 문자열target : 대치될 문자열--></td></tr></table>]]></description>
					<pubDate>Thu, 06 Mar 2008 14:00:54 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[브라우저 오픈서치 추가 (IE7, FF2)]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6508682</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/1/thbn_shchun74_20080304174139_6508682_1.JPG'  width=160 border=0 align='left'>Open&nbsp; Search 개요&nbsp; 오픈서치(opensearch.org)는 검색결과를 공유하기 위한 간단한 포맷의 집합이다.&nbsp;RSS 및 기타 많은 프로그램들이 지원을 하며, 브라우저에서도 최근 지원을 하고 있다.&nbsp;오픈서치는 위 그림을 보듯이 브라우저 우측 상단에 있으며, 이 기능은 IE에서는 7버전부터 지원이 되며 Firefox는 2 버전부터 지원이 된다. 즉 최신버전만이 지원이 가능하다.&nbsp;Version오픈서치는 amazon.com 산하의 A9 이라는 곳에서 첫 버전이 나왔으며,&nbsp; 1.0 버전은 2005년 3월, 1.1 버전은 2005년 12월 발표가 되었다.현재 1.1 이 최신버전이다. (2008.03.03)&nbsp;&nbsp;ExtensionIE 7 과 Firefox 2 는 확장 측면에서 지원 방식이 약간 다르다.&nbsp;IE 7 : OpenSearch Referrer Extension (링크) FF 2: OpenSearch S... <a href='http://blog.dreamwiz.com/shchun74/6512091 '>more...</a><!--Open&nbsp; Search 개요&nbsp; 오픈서치(opensearch.org)는 검색결과를 공유하기 위한 간단한 포맷의 집합이다.&nbsp;RSS 및 기타 많은 프로그램들이 지원을 하며, 브라우저에서도 최근 지원을 하고 있다.&nbsp;오픈서치는 위 그림을 보듯이 브라우저 우측 상단에 있으며, 이 기능은 IE에서는 7버전부터 지원이 되며 Firefox는 2 버전부터 지원이 된다. 즉 최신버전만이 지원이 가능하다.&nbsp;Version오픈서치는 amazon.com 산하의 A9 이라는 곳에서 첫 버전이 나왔으며,&nbsp; 1.0 버전은 2005년 3월, 1.1 버전은 2005년 12월 발표가 되었다.현재 1.1 이 최신버전이다. (2008.03.03)&nbsp;&nbsp;ExtensionIE 7 과 Firefox 2 는 확장 측면에서 지원 방식이 약간 다르다.&nbsp;IE 7 : OpenSearch Referrer Extension (링크) FF 2: OpenSearch Suggestions Extension (링크)&nbsp;자동완성 기능확장지원 방식이 다름에 따라, FF만 자동완성 기능을 제공한다.&nbsp;&nbsp;엔진 자동표시 및 추가사용자가 사이트를 등록하지 않았다고 하더라도, &lt;LINK title="folk" rel="search" type="application/opensearchdescription+xml" href="http:// folk.kr/Provider.xml"&gt;위의 소스를 페이지에 넣으므로 해서, 검색엔진 목록에 자동으로 표시가 되며, 추가도 할 수 있다.Open&nbsp; Search 적용 방식&nbsp;&nbsp;&nbsp;표시 원칙&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 사용자가 첫 화면에 접속을 하면 표시를 한다.-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 오픈서치에 등록이 되어 있으면, 표시를 하지 않는다.-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Firefox는 등록여부를 확인할 길이 없으므로, 사이트 등록 시 쿠키를 생성하여, 접속 시 마다 쿠키를 체크하여 없으면 표시한다.&nbsp;&nbsp;&nbsp;&nbsp;쿠키 세팅 &nbsp;쿠키 이름 : opensearch쿠키 값 : 1&nbsp;Firefox 이면서, 등록했을 경우 : 30일‘다시 안보기’ 클릭했을 경우 : 7일‘닫기’버튼을 클릭했을 경우 : 페이지 로딩시마다 보임&nbsp;위의 쿠키 세팅은 변경 가능&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open&nbsp; Search 코드&nbsp;&nbsp;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"&gt;&lt;ShortName&gt;Folk&lt;/ShortName&gt;&lt;Description&gt;Folk Search&lt;/Description&gt;&lt;Image height="16" width="16" type="image/x-icon"&gt;http://folk.kr/js/folk.ico&lt;/Image&gt;&lt;Url type="text/html" template="http://search.folk.kr/BIN/folk.cgi?q={searchTerms}" /&gt;&lt;/OpenSearchDescription&gt;&nbsp;Provider.xml : 환경설정 파일&nbsp;&nbsp;&nbsp;&nbsp;검색엔진 등록 스크립트window.external.AddSearchProvider(surl_xml);&nbsp;surl_xml 은 환경설정 파일의 위치를 나타냄 : http://folk.kr/Provider.xml&nbsp;&nbsp;&nbsp;&nbsp;검색엔진 등록 여부 스크립트 (IE7만 지원)&nbsp;window.external.IsSearchProviderInstalled(surl)&nbsp;surl은 검색 주소를 가리킴 : http://search.folk.kr&nbsp;&nbsp;&nbsp;&nbsp;아이콘 지원 (Firefox만 지원)&nbsp;제한 : 16 * 16 사이즈&nbsp;--></td></tr></table>]]></description>
					<pubDate>Tue, 04 Mar 2008 17:39:53 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[prototype v1.5에서 1.6으로 업그레이드 도우미]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6489687</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>Deprecation.js는 Prototype의 1.5버전을 1.6으로 업그레이드 할 수 있도록 도와주는 자바스크립트 라이브러리입니다.주소는 아래와 같습니다.http://prototypejs.org/2008/2/12/deprecation-js-easing-the-1-5-1-6-transition다운로드 deprecation script : deprecation.js</td></tr></table>]]></description>
					<pubDate>Mon, 25 Feb 2008 17:32:14 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[크기 제한 없고 관리할 수 있는 븍마크릿 만들기]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6465046</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>북마크릿(Bookmarklet)은 브라우저의 연결 툴바에 추가돼 클릭됐을 때 브라우저가 어떤 사이트를 보고 있어도 특정한 기능을 수행하는 특별한 자바스크립트 조각입니다.북마크릿은 브라우저나 플랫폼에 따라 다르지만 크기에 제한이 있습니다. 또한 한 줄에 모든 자바스크립트가 표현돼야 하기 때문에 보다 정교한 스크립트를 적용하고 관리하기가 쉽지 않습니다.&lt;a href="function loadScript(scriptUrl) { var scriptElem = document.createElements 'SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptUrl); document.body.appendChild(scriptElem); }loadScript('helloworld.js');"&gt;크기 제한 없는 북마크릿 만들기&lt;/a&gt;이 코드의 핵심 아이디어... <a href='http://blog.dreamwiz.com/shchun74/6489687 '>more...</a><!--북마크릿(Bookmarklet)은 브라우저의 연결 툴바에 추가돼 클릭됐을 때 브라우저가 어떤 사이트를 보고 있어도 특정한 기능을 수행하는 특별한 자바스크립트 조각입니다.북마크릿은 브라우저나 플랫폼에 따라 다르지만 크기에 제한이 있습니다. 또한 한 줄에 모든 자바스크립트가 표현돼야 하기 때문에 보다 정교한 스크립트를 적용하고 관리하기가 쉽지 않습니다.&lt;a href="function loadScript(scriptUrl) { var scriptElem = document.createElements 'SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptUrl); document.body.appendChild(scriptElem); }loadScript('helloworld.js');"&gt;크기 제한 없는 북마크릿 만들기&lt;/a&gt;이 코드의 핵심 아이디어는 북마크릿을 통해 새로운 엘리먼트를 DOM에 동적으로 삽입하는 것입니다. 다음은 일기 쉽도록 라인을 분리해서 표현하엿습니다.function loadScript(scriptUrl) {&nbsp; var scriptElem = document.createElements('SCRIPT');&nbsp; scriptElem.setAttribute('language', 'JavaScript');&nbsp; scriptElem.setAttribute('src', scriptUrl);&nbsp; document.body.appendChild(scriptElem);}loadScript('helloworld.js');helloworld.js 내용alert("hello World!");[참조] http://www.bookmarklets.com--></td></tr></table>]]></description>
					<pubDate>Thu, 14 Feb 2008 16:35:2 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[자바스크립트에 변수 넘기는 방법]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6459683</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>자바스크립트에 변수 넘기는 방법&lt;script language='javascript' src='aa.js?id=aaa'&gt; &lt;/script&gt;이와 같이 호출해서 id의 값이 aaa값을 호출하는 방법에 대해서 기술해 보도록 하겠습니다.먼저 자바스크립트는 클라이언트 스크립트 입니다. 저런식으로 서버 사이드 스크립트(즉, 웹프로그램) 처럼 get 방식이나 post 방식으로 값을 주고 받지 못합니다. 따라서 ?id=aaa 은 무의미 합니다.그럼 포기하고 html 방식으로 처리하는 방법과 getElementsByTagName를 이용한 방법 2가지를 기술해 보도록 하겠습니다.1. html 방식으로 처리하는 방법자바스크립트에서 get방식으로 넘어온 값을 받을수 있습니다.test.htm에 &lt;script language="javascript" src="test.js"&gt;&lt;/script&gt;이부분을 추가하고 test.htm?id=aaa라고 입력하면 aaa라는 값을 출력... <a href='http://blog.dreamwiz.com/shchun74/6465046 '>more...</a><!--자바스크립트에 변수 넘기는 방법&lt;script language='javascript' src='aa.js?id=aaa'&gt; &lt;/script&gt;이와 같이 호출해서 id의 값이 aaa값을 호출하는 방법에 대해서 기술해 보도록 하겠습니다.먼저 자바스크립트는 클라이언트 스크립트 입니다. 저런식으로 서버 사이드 스크립트(즉, 웹프로그램) 처럼 get 방식이나 post 방식으로 값을 주고 받지 못합니다. 따라서 ?id=aaa 은 무의미 합니다.그럼 포기하고 html 방식으로 처리하는 방법과 getElementsByTagName를 이용한 방법 2가지를 기술해 보도록 하겠습니다.1. html 방식으로 처리하는 방법자바스크립트에서 get방식으로 넘어온 값을 받을수 있습니다.test.htm에 &lt;script language="javascript" src="test.js"&gt;&lt;/script&gt;이부분을 추가하고 test.htm?id=aaa라고 입력하면 aaa라는 값을 출력합니다.아래 fc_querystring(ars_name)함수는 get방식으로 넘어온 값을 return해주는함수입니다. 전 id값이 공백이 아니면 출력하는 제어를 했습니다./*' ------------------------------------------------------------------' Function&nbsp;&nbsp;&nbsp; : fc_querystring(ars_name)' Description : url의 querystring을 리턴 ' Argument&nbsp;&nbsp;&nbsp; : String 체크할 파라메타' Return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : String 파라메타의 값' ------------------------------------------------------------------*/function fc_querystring(ars_name){&nbsp;&nbsp; var lo_result&nbsp;&nbsp;&nbsp; = new Array;&nbsp;&nbsp; var ls_url_query = location.search; // url에서 ? 부터의 문자열&nbsp;&nbsp; var lo_array1&nbsp;&nbsp;&nbsp; = new Array; // &amp; 로 분리시킨 값이 들어갈배열&nbsp;&nbsp; var lo_array2&nbsp;&nbsp;&nbsp; = new Array; // = 로 분리시킨 값이 들어갈배열&nbsp;&nbsp; var i = 0;&nbsp;&nbsp; ls_url_query = ls_url_query.slice(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 첫문자 ?는 자르고&nbsp;&nbsp; lo_array1&nbsp;&nbsp;&nbsp; = ls_url_query.split("&amp;");&nbsp;&nbsp;&nbsp; // &amp; 배열로 나눈다.&nbsp;&nbsp; for(i=0; i&lt; lo_array1.length; i++)&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lo_array2 = lo_array1[i].split("=");&nbsp;&nbsp;&nbsp; // = 배열나누기&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lo_result[lo_array2[0] ] = lo_array2[1]; // 결과를 lo_result에 저장&nbsp;&nbsp; }&nbsp;&nbsp; &nbsp;&nbsp; if(lo_result[ars_name] != null)&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return lo_result[ars_name];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }&nbsp;&nbsp; else&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "";&nbsp;&nbsp; }}if(fc_querystring("id") != ""){&nbsp;&nbsp; alert(fc_querystring("id"));}2. getElementsByTagName 을 이용한 방법test.htm 파일&lt;html&gt;&lt;head&gt;&lt;script type='text/javascript' src='http://www.prototypejs.org/javascripts/prototype.js'&gt;&lt;/script&gt;&lt;script type='text/javascript' src='test.js?id=aaa'&gt;&lt;/script&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;test.js 파일var fetchQuerystring = {&nbsp; Version: '0.1',&nbsp; REQUIRED_PROTOTYPE: '1.5.0',&nbsp; load: function(js_name, ars_name) {&nbsp;&nbsp;&nbsp; function convertVersionString(versionString){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var r = versionString.split('.');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; if((typeof Prototype=='undefined') ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (typeof Element == 'undefined') ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (typeof Element.Methods=='undefined') ||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (convertVersionString(Prototype.Version) &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; convertVersionString(fetchQuerystring.REQUIRED_PROTOTYPE))) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw("This function requires the Prototype JavaScript framework &gt;= " +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetchQuerystring.REQUIRED_PROTOTYPE);&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; $A(document.getElementsByTagName("script")).findAll( function(s) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // test&nbsp;파일에 맞게 수정&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (s.src &amp;&amp; s.src.match(/test\.js(\?.*)?$/))&nbsp;&nbsp;&nbsp; }).each( function(s) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // id= 항목에 맞게 수정&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var includes = s.src.match(/\?.*id=([a-z,]*)/);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; // 2번재 항목 출력&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(includes[1]);&nbsp;&nbsp;&nbsp; });&nbsp; }}fetchQuerystring.load();ps. 1번 방식만 네이버 지식인에 나와있길래 1번은 참조하고 2번은 새로 만들어 봅니다.--></td></tr></table>]]></description>
					<pubDate>Tue, 12 Feb 2008 14:22:41 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[jQuery 소개 (prototype.js 상대 비교)]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6459043</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>요즘 뜨는 jQuery&nbsp;분석1. 배우기 싶다. (간단하고 직관적인 구성)prototype.js은 자바스크립트 클래스 개념으로 접근을 하고 있어 전문가가 아닌&nbsp;대부분의 개발자에게는 힘든점이 많다.jQuery는 DOM 선택에 있어서 id 아닌 CSS 이기 때문에 $ 함수 하나로 해결이 된다. 그리고, 리턴되는 것은 jQuery Object 다. 즉, 리턴되는 오브젝트에 원하는 기능을 넣거나 사용하면 된다. UI 접근과 효과를 빠르게 처리하고 싶은게 UI 툴킷의 용도라고 접근했을때 이런식의 Function 기반이 Prototype의 클래스 기반보다 편하다. 즉, 내가 원하는 DOM을 선택한 뒤 그 놈의 어떤 기능을 하게 한다든지 어떤 기능을 넣어주게 하겠다는 순서로 접근하는 방식이 훨씬 직관적이고 사용하기 편한하도 생각된다.예) 어는게 더 직관적인가?new Insertion.After('domElementID', 'wannabeTag'); // prototype.js$(... <a href='http://blog.dreamwiz.com/shchun74/6459683 '>more...</a><!--요즘 뜨는 jQuery&nbsp;분석1. 배우기 싶다. (간단하고 직관적인 구성)prototype.js은 자바스크립트 클래스 개념으로 접근을 하고 있어 전문가가 아닌&nbsp;대부분의 개발자에게는 힘든점이 많다.jQuery는 DOM 선택에 있어서 id 아닌 CSS 이기 때문에 $ 함수 하나로 해결이 된다. 그리고, 리턴되는 것은 jQuery Object 다. 즉, 리턴되는 오브젝트에 원하는 기능을 넣거나 사용하면 된다. UI 접근과 효과를 빠르게 처리하고 싶은게 UI 툴킷의 용도라고 접근했을때 이런식의 Function 기반이 Prototype의 클래스 기반보다 편하다. 즉, 내가 원하는 DOM을 선택한 뒤 그 놈의 어떤 기능을 하게 한다든지 어떤 기능을 넣어주게 하겠다는 순서로 접근하는 방식이 훨씬 직관적이고 사용하기 편한하도 생각된다.예) 어는게 더 직관적인가?new Insertion.After('domElementID', 'wannabeTag'); // prototype.js$('domElementID').InsertAfter('wannabeTag'); // jQuery2. 사이즈가 작다&nbsp;(jQuery의 압승)압축전prototype.js&nbsp;124.1 kbjQuery.js :&nbsp;94.5 kb버젼 : prototype.js 1.6.0.2, &nbsp;jQuery 1.2.33. 자체적으로 UI 효과를 지원prototype.js 는 UI 효과를 위해서 별도 Scriptaculous 을 사용한다.ps. jQuery의 데모를 많이 보았는데 심플하고 깜끌한 UI 지원하더군요. 추후 수정이 더 용이하겠죠?4. Plug-in을 통해 확장지원이 풍부하다. (찾기가 어려울수도 있다)prototype.js도 기존에 개발된 많은 자원이 존재한다.5. XPath를 지원한다예) $("/html/body//p")물론 단점도 존재한다. 먼저 국내에 관련된 책자(레퍼런스가 부족하다) prototype.js는 국내서적 1권이 존재하고 많은 사용자층에 의해 많은 정보들이 풍부하다. (국내 서적 1권 존재한다는 것도 장점이라고 설명하기는 좀 그렇지만...)참조. http://spaceufo.wordpress.com/tag/prototype/--></td></tr></table>]]></description>
					<pubDate>Tue, 12 Feb 2008 10:34:21 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[CSS에서 사용할수 있는 17가지 색 이름]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6456576</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>위키피디아 웹색상검정은색회색하양빨강고동색자주색자청색녹색라임색올리브색노랑주황파랑남색암청색옥색&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blacksilvergraywhiteredmaroonpurplefuchsiagreenlimeoliveyelloworangebluenavytealaqua</td></tr></table>]]></description>
					<pubDate>Mon, 11 Feb 2008 10:29:16 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[HTML에서 XHTML 1.0으로 가는 세가지 단계 (strict)]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6444965</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>1. DOCTYPE을 XHTML 1.0 Strict로 변경2. xmlns, lang 그리고 xml:lang 속성을 얼리먼트에 추가http://www.w3.org/1999/xhtml lang="en" xml:lang="en"&gt;3. 모든 빈 태그들은 "&gt;"이 아닌 "/&gt;"로 종료&lt;IMG ...&gt; =&gt; &lt;IMG ... /&gt;XHTML에 자세한 내용은 아래 URL를 참조하세요.http://trio.co.kr/webrefer/xhtml/overview.htmlps. 한글은 "ko"입니다.</td></tr></table>]]></description>
					<pubDate>Mon, 04 Feb 2008 16:48:6 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[HTML 문서정의타입 : DTD(Document Type Definitio) 분석]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6444851</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>&lt;!DOCTYPE html PUBLIC "-//W3//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;"작성되어 있는 페이지는 HTML 페이지 입니다. 이 페이지는 표준을 따르고 있습니다. 바로 HTML 4.01 이죠~" 이런 의미겠죠~하나 분석해 볼까요?1. 이것은 이 페이지의 문서 타입을 명시한 거라고 부라우저에 알려줍니다.2. 이것은 HTML 얼리먼트가 아니라는 것에 주의하시기 바랍니다. 맨 처엄 "&lt;" 다음에 "!"이 오면, 이것은 뭔가 다른 것이라는 점을 말해줍니다.3.&nbsp; html : 이것은 &lt;html&gt;이 페이지의 루트(첫번째) 얼러먼트라는 의미입니다.4. PUBLIC : HTML 4.01 표준이 공개적으로 사용 사용 가능하는 의미입니다.5. "-//W3//DTD HTML 4.01 Transitional//EN"&nbsp; :&nbsp; HTML 4.01 버전을... <a href='http://blog.dreamwiz.com/shchun74/6444965 '>more...</a><!--&lt;!DOCTYPE html PUBLIC "-//W3//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;"작성되어 있는 페이지는 HTML 페이지 입니다. 이 페이지는 표준을 따르고 있습니다. 바로 HTML 4.01 이죠~" 이런 의미겠죠~하나 분석해 볼까요?1. 이것은 이 페이지의 문서 타입을 명시한 거라고 부라우저에 알려줍니다.2. 이것은 HTML 얼리먼트가 아니라는 것에 주의하시기 바랍니다. 맨 처엄 "&lt;" 다음에 "!"이 오면, 이것은 뭔가 다른 것이라는 점을 말해줍니다.3.&nbsp; html : 이것은 &lt;html&gt;이 페이지의 루트(첫번째) 얼러먼트라는 의미입니다.4. PUBLIC : HTML 4.01 표준이 공개적으로 사용 사용 가능하는 의미입니다.5. "-//W3//DTD HTML 4.01 Transitional//EN"&nbsp; :&nbsp; HTML 4.01 버전을 사용하며, html 마크업이 영어로 작성되었다는 것을 말합니다.&nbsp;&nbsp;&nbsp; Transitional : "과도적인" 의미로 이전 버전의 HTML의 일부분을 허용합니다.&nbsp;&nbsp;&nbsp;&nbsp;Strict :" 엄격한" 의미로 지정한 표준을 엄격히 적용합니다.&nbsp;아래에 예가 있습니다. 밑줄이 대체되고 "Transitional"이 삭제 되었습니다.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 예) &lt;!DOCTYPE html PUBLIC "-//W3//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt; 6. http://www.w3.org/TR/html4/loose.dtd : 특정한 표준을 식별하는 파일을 가르킵니다.ps. DOCTYPE에 대해서 이해가 되시었나요? 예전에 그냥 뜨는 문구 문구 하나에 다 의미가 있는데 그냥 지나쳤지만.. 웹 표준에 따라 개발하다 보니 다시 새롭게 보이네요~DOCTYPE에 대해 선언만 하고 내용이 표준안에 맞춰서 제대로 작성 되었는지 어떻게 검사할까요?http://validator.w3.org : W3C 유효성 검사기(Validator)로 체크해 보시기 바랍니다.- css 유효성 검사기 : http://jigsaw.w3.org/css-validator--></td></tr></table>]]></description>
					<pubDate>Mon, 04 Feb 2008 15:28:46 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[HTML History]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6444817</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>HTML 1.0-2.01988, 1991년초창기에는 HTML에 관하여 알아야 모든 것을 말출 수 있었습니다. 페이지들은 근사해 보이지 않았지만.. 적어도 하이퍼텍스트는 사용할수 있었습니다. 아무도 표준하는 것에는 관심이 없었고 단지 웹에 있는 모든 이들이 자신들의 "홈페이지"를 가지는 것에 심혈을 기울였습니다. 심지어는 여러분 책상 위에 있는 연필, 종이 클릭, 포스트-잇 조차도 "웹 콘텐츠"로 여겨지기도 했습니다. (이런 시대가 있었나?)HTML 31995년"브라우저 전쟁"의 길고 암울한 시대였습니다. 네스케이프와 마이크로 소프트가 전세계를 손아귀에 넣기 위해 치고 받으며 싸우고 있었습니다. 결국, 브라우저를 정복하는 자가 전 우를 정복하는 것이니까요. (결국 MS가 이겼죠 --;;)그 전쟁의 예기치 않는 희생의 결과의 중심에는 웹 개발자가 있었습니다. 브라우저 전쟁중에, 각 브라우저 회사들은 선두 자리를 지키기 위해 자신만의 독점적인 확장자를 추가하는 군비 경쟁을 하게 되었습니다... <a href='http://blog.dreamwiz.com/shchun74/6444851 '>more...</a><!--HTML 1.0-2.01988, 1991년초창기에는 HTML에 관하여 알아야 모든 것을 말출 수 있었습니다. 페이지들은 근사해 보이지 않았지만.. 적어도 하이퍼텍스트는 사용할수 있었습니다. 아무도 표준하는 것에는 관심이 없었고 단지 웹에 있는 모든 이들이 자신들의 "홈페이지"를 가지는 것에 심혈을 기울였습니다. 심지어는 여러분 책상 위에 있는 연필, 종이 클릭, 포스트-잇 조차도 "웹 콘텐츠"로 여겨지기도 했습니다. (이런 시대가 있었나?)HTML 31995년"브라우저 전쟁"의 길고 암울한 시대였습니다. 네스케이프와 마이크로 소프트가 전세계를 손아귀에 넣기 위해 치고 받으며 싸우고 있었습니다. 결국, 브라우저를 정복하는 자가 전 우를 정복하는 것이니까요. (결국 MS가 이겼죠 --;;)그 전쟁의 예기치 않는 희생의 결과의 중심에는 웹 개발자가 있었습니다. 브라우저 전쟁중에, 각 브라우저 회사들은 선두 자리를 지키기 위해 자신만의 독점적인 확장자를 추가하는 군비 경쟁을 하게 되었습니다.그리고 비단 그 뿐만 아니라, 여러분이 그 시대로 돌아가면 종종 두 개의 분리된 웹 페이지를 작성해야만 했습니다. 하나는 넷스케이프 브라우저를 위해, 다흔 하나는 인터넷 익스플로러를 위해서요. HTML 41998년아! 브라우저 전쟁이 끝나고 우리의 구원자인 월드 와이드 웹 컨소시엄(W3라고 부릅니다.) 그들의 계획은 다른 모든 것을을 지배할 단 하나의 절대 HTML "표준"을 생성해서 우주에 질서를 가져오려 했습니다.그들 계획의 핵심은 무엇이었을까요? HTML의 구조와 표현 부분을 두 개의 언어(구조를 위한 언어는 HTML 4.0, 프레젠테이션을 위한 언어는 CSS)로 분리하고, 브라우저 개발 회사들은 가장 관심이 가는 표준들을 책책하도록 설득시키는 것이었습니다.그러나 과연 그들의 계획대로 되었을까요? 거의....HTML 4.011999년아! 평온한 세상이 찾아왔습니다.1999년에 HTLM 4.01이 무대 위로 등장했으며, 이는 가장 최근의 HTML 버전입니다. 많은 사람들이 4.0이 바로 그(구원자, the ONE)가 되길 희망하는 동안, 항상 여기저기에서 수정되어야 할 사건들이 발생했습니다. 이제 더 이상 중요한 것도 걱정할 것도 아무것도 없습니다.초기의 HTML과 비교해 보면(그 때 우리는 맨발로 6피트 깊이의 눈길을 오르락내리락 했었죠). 지금 우리는 부라우저가(적어도 누군가 관심을 가지는 한가지라도) 여러분의 콘텐츠를 아주 잘 보여주고 있다는 것을 알고 있기에 유유자적하게 HTML 4.01을 작성하며 마음 편히 밤에 잠을 푹 자게 되었습니다.XHTML 1.02000년그러나 우리가 모두 편하게 지내고 있을때, 새로운 기술들이 만들어 졌고 모든 것은 변했습니다. HTML과 XML이라는 또 다른 마크업 언어가 서로 합쳐지게 되었고, 얼마 지나지 않아 둘은 "중매 결혼"을 하게 되어 XHTML 1.0이 탄생하게 되었습니다. XHTML은 두 부모의 특성을 모두 물려 받았습니다. 대중성과 브라우저에 친숙한 것은 HTML부터 확장성과 견고함은 XML로부터 물려 받았습니다. 이것이 의미하는 것이 무엇일까요?&nbsp; 이것은 "확장 가능한 하이퍼텍스트 마크업 랭귀지(Extensible Hypertext Markup Language)"를 말할 수 있기전에 XHTML 웹 페이지를 만들게 될 것이기 때문입니다.ps. Head First HTML with CSS &amp; XHTML에서 발췌다들 어렵게 써 놓았는데 그냥 편하게 이해할수 있는 글이 있어서 옮겨 적습니다.미래에는 또 어떤 일이 일어날까요?--></td></tr></table>]]></description>
					<pubDate>Mon, 04 Feb 2008 15:02:8 +0900</pubDate>
					<category><![CDATA[CSS & HTML]]></category>
				</item>

				<item>
					<title><![CDATA[자바스크립트 라이브러리 비교]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6435577</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/1/thbn_shchun74_20080131154259_6435577_1.jpg'  height=120 border=0 align='left'>전 개인적으로 prototype.js 와 jQuery를 추천합니다.&nbsp;Prototype Dojo Mochikit Yahoo! Google JQuery Simple AJAX      Drag n Drop       Basic Visual Effects       Advanced Visual FX       Java integration &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Event handling       Back button support with Ajax &nbsp; &nbsp;&nbsp; &nbsp;Developer tools &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rated Features (0-4 stars) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Minimal Learning Curve       Ease of use (API)       Widget... <a href='http://blog.dreamwiz.com/shchun74/6444817 '>more...</a><!--전 개인적으로 prototype.js 와 jQuery를 추천합니다.&nbsp;Prototype Dojo Mochikit Yahoo! Google JQuery Simple AJAX      Drag n Drop       Basic Visual Effects       Advanced Visual FX       Java integration &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Event handling       Back button support with Ajax &nbsp; &nbsp;&nbsp; &nbsp;Developer tools &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rated Features (0-4 stars) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Minimal Learning Curve       Ease of use (API)       Widget Collection (useful or not)       Documentation       Developer Community       Refined UI effect examples       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filesize Range&nbsp;(KB) 46-137 18-276 5-113 2-300  10-44 Licensing MIT AFL / BSD MIT/AFL BSD Apache **MIT &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Demos http://script.aculo.ushttp://www.dojotoolkit.org/http://www.mochikit.com/demos.htmlhttp://developer.yahoo.com/yui/GWThttp://www.jquery.com/demosMore Info Prototype JS Library Dojo JS Toolkit Mochikit JS Toolkit Yahoo UI Library Google Web Toolkit JQuery JS Library &nbsp;참고 사이트 : http://www.sitepoint.com/article/javascript-library--></td></tr></table>]]></description>
					<pubDate>Thu, 31 Jan 2008 15:16:52 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[툴팁(풍선도움말) 개발]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6431354</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td><img src='http://blog.dreamwiz.com/thumbnail/s/h/shchun74/1/thbn_shchun74_20080130094757_6431354_1.jpg'  width=160 border=0 align='left'>예전 개발시에는 title 속성을 이용해 처리했는데 한계가 있더군요.그래서 신규 개발중이었으나... 프로토팁이라는 좋은 툴이 있어서 포기하고 이걸로 처리해서 처리중에 있습니다.포토토팁(Prototip)에 대해서 간단히 설명하자면...Prototip은 Prototype/Scriptaculous를 기반하여 만들어진 툴팁 컴포넌트입니다.표준을 따르는 HTML, CSS를 이용한 18가지 레이아웃 디자인과 출력효과를 내장하고 있어 단순히 메시지를 표시하는 것 이상의 표현이 가능합니다.특히, CSS를 이용해 디자인을 손쉽게 커스터마이즈 할 수 있게 한 점과 특정 타겟의 시야를 가리지 않도록 하는 9가지의 Hooking옵션은 사용자의 입장을 충분히 고려해 만든 모습이 역력합니다.URL Prototipps. FF에서 위치 정보가 다르게 나와 고생했는데..css 파일에 * { margin: 0px; padding: 0px; } 구문을 추가하면 해결됩니다.</td></tr></table>]]></description>
					<pubDate>Wed, 30 Jan 2008 09:46:17 +0900</pubDate>
					<category><![CDATA[JavaScript]]></category>
				</item>

				<item>
					<title><![CDATA[웹2.0 개발 추천 도서]]></title>
					<link>http://blog.dreamwiz.com/shchun74/6415009</link>
					<author><![CDATA[서쪽하늘]]></author>
					<description><![CDATA[<table><tr><td>첫째, Ajaxhttp://www.aladdin.co.kr/rss/new_all/14605둘째, XHTML and CSSHead First HTML Width CSS &amp; XHTML엘리자베스 프리먼,에릭 프리먼 공저/홍형경 역 | 한빛미디어 | 2006년 05월 웹 표준에 맞춰 웹 페이지를 만들 수 있도록 해주는 실용서! 이 책은 산업 표준에 맞는 웹 페이지들을 만들기 위해 필요로한 완벽한 학습 경험을 제공한다. 독자들은 때로는 게임을 하고, 퍼즐을 풀며, 미스터리에 빠져들면서 지금까지 전혀 상상해오지 못했던 웹 페이지들을 만들게 될 것이다. 또한 CSS와 함께 HTML이 동작하는 방법을 배우게 된다.YES24 구매하기 셋째, DOM‘DOM 스크립트’로 Javascript 다시 배우기‘DOM 스크립트‘는 기존의 자바스크립트 서적과는 확실히 다릅니다. 자바스크립트 문법을 알려주기 전에 ‘지금 구현하려고 하는 기능이 정말 사용자에게 유용한 것인가? 오히려 웹의 가치를 훼손하고 있지... <a href='http://blog.dreamwiz.com/shchun74/6431354 '>more...</a><!--첫째, Ajaxhttp://www.aladdin.co.kr/rss/new_all/14605둘째, XHTML and CSSHead First HTML Width CSS &amp; XHTML엘리자베스 프리먼,에릭 프리먼 공저/홍형경 역 | 한빛미디어 | 2006년 05월 웹 표준에 맞춰 웹 페이지를 만들 수 있도록 해주는 실용서! 이 책은 산업 표준에 맞는 웹 페이지들을 만들기 위해 필요로한 완벽한 학습 경험을 제공한다. 독자들은 때로는 게임을 하고, 퍼즐을 풀며, 미스터리에 빠져들면서 지금까지 전혀 상상해오지 못했던 웹 페이지들을 만들게 될 것이다. 또한 CSS와 함께 HTML이 동작하는 방법을 배우게 된다.YES24 구매하기 셋째, DOM‘DOM 스크립트’로 Javascript 다시 배우기‘DOM 스크립트‘는 기존의 자바스크립트 서적과는 확실히 다릅니다. 자바스크립트 문법을 알려주기 전에 ‘지금 구현하려고 하는 기능이 정말 사용자에게 유용한 것인가? 오히려 웹의 가치를 훼손하고 있지는 않은가?’ 라는 질문을 던져주고 사용성과 접근성을 해치지 않으면서도 웹 표준에 근거한 겸손한 코드를 작성할 수 있도록 개념을 새롭게 환기시켜 주는 책입니다. 웹의 접근성을 떨어뜨리지 않으면서 사용자 경험을 확장할 수 있는 방법으로 고민하고 있다면 이 책이 좋은 입문서가 될 것 같습니다. 특히, 이 책에서 소개하고 있는 ‘단계적 기능축소, 스크립트 분리’와 같은 개념들은 매우 중요하게 생각되는군요. 한국의 대표적인 웹 표준 전도사로 잘 알려진 다음 커뮤니케이션의 윤석찬님께서 번역하셨습니다.간단히 살펴보는 자바스크립트 역사자바스크립트 문법 익히기문서 객체 모델(DOM)이란?자바스크립트로 만드는 온라인 사진첩꼭 알아야 할 핵심 기본기사진첩 기능 개선하기실행 시에 마크업 코드 생성하기의미가 살도록 컨텐츠 개선하기CSS와 DOM 연동하기애니메이션 슬라이드쇼 만들기총정리 : 더블트랙 밴드 웹사이트 제작DOM 스크립트의 미래부록1 - 유용한 DOM 메소드와 프로퍼티부록2 - 웹 표준 기반의 멋진 DOM 스크립트 예제부록3 - 다이내믹한 웹사이트를 위한 고려 사항YES24에서 ‘DOM 스크립트’ 구매하기네째, DOM(Document Object Model)예제로 배우는 XSLT : XSLT QuicklyXML의 변환에 대한 요구가 증가하면서 XSLT의 필요성도 증가하고 있다. W3C 표준인 XSLT와 이를 지원하는 공개 소프트웨어들을 이용해 우리는 XML 문서를 다른 XML 문서로 변환하거나 또는 XML 문서가 아닌 HTML이나 RTF, flat 포맷의 문서를 변환할 수 있다. 이 책은 빠른 시간에 XSLT를 공부할 수 있게 튜토리얼 형식으로 구성되어 있으며, 간결하면서도 상세하게 설명되어 있고, XSLT로 최소한의 작업을 할 수 있도록 기본 개념을 충분히 이해할 수 있게 설명하였다. 또한 예제를 따라하면서 실제 XSLT로 할 수 있는 작업을 중심으로 구성되어 있다. XLST Quickly는 XSLT 개발자, 즉 웹 디자이너나 자바 개발자, 또는 최신의 XML 기술에 관심을 두고 있는 분들을 위해 쓰여진 책이다. Part 1 XSLT 시작하기 1. XSLT 살펴보기 Part 2 XSLT 사용자 가이드 2. XPath 3 요소와 속성 4. 고급 XML 태그 다루기 5. XSL 프로그래밍 6. 입출력의 모든 것&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YES24에서&nbsp;구매하기다섯째. XMLHttpRequest여섯째. JavaScript&nbsp;&nbsp;&nbsp; Ajax 프로토타입 완전 분석&nbsp;&nbsp;&nbsp; 지은이 : 김영보&nbsp;&nbsp;&nbsp; 출판사 : 위키북스&nbsp;&nbsp;&nbsp;&nbsp; YES24에서&nbsp;구매하기ps. 현재 공부중이라 추후 계속 추가토록 하겠습니다.--></td></tr></table>]]></description>
					<pubDate>Thu, 24 Jan 2008 18:10:47 +0900</pubDate>
					<category><![CDATA[Book]]></category>
				</item>

</channel>
</rss>

