<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko"><title type="text">Firejune Blog</title><link rel="alternate" type="text/html" href="http://firejune.com/" /><subtitle type="html">The Web is still changing.</subtitle><logo>http://firejune.com/attach/image/441618.jpg</logo><updated>1970-01-01T00:00:00+00:00</updated><generator>Tatter Tools Hybrid</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><title type="text">IE6이 주는 고통을 고찰해 보는 시간</title><link rel="alternate" type="text/html" href="http://firejune.com/1448" /><category term="웹개발" /><category term="자료" /><category term="IE6" /><category term="고통" /><category term="업그레이드" /><category term="이봐요! 업그레이드 좀 하세요!" /><author><name>파이어준</name></author><updated>2009-07-14T13:48:22-07:00</updated><id>http://firejune.com/1448</id><content type="html">&lt;div class="image-align left"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0715/090715043924638356/452899.gif" width="178" height="175" alt="http://firejune.cdn2.cafe24.com/attach/0715/090715043924638356/452899.gif" class=" hasborder"/&gt;&lt;/div&gt; Digg가 IE6 브라우저 사용자를 대상으로 &lt;a href="http://blog.digg.com/?p=878"&gt;매우 흥미로운 조사&lt;/a&gt;를 펼쳤습니다. 왜 아직도 IE6을 사용하고 계신가요?(You are currently using Internet Explorer 6. Why?)라는 질문에 &lt;strong style="color:#6FA55A;"&gt;●&lt;/strong&gt;37%의 응답자가  "자신의 PC에 관리권한이 없기 때문(I can’t upgrade because I don’t have administrator access on my computer.)"으로 응답했으며, &lt;strong style="color:#EEB04D;"&gt;●&lt;/strong&gt;33%가  "주위에서 업그레이드하지 말라고 해서?(I can’t upgrade because someone at work says I can’t.)", &lt;strong style="color:#C9423E;"&gt;●&lt;/strong&gt;17%가  "업그레이드의 필요성을 느끼지 못했기 때문(I don’t feel a need to upgrade.)", &lt;strong style="color:#3C6C9D;"&gt;●&lt;/strong&gt;7%가 "자신의 PC가 구형이라서(I can’t upgrade because my computer runs an old version of Windows.)", 그리고 &lt;strong style="color:#864F92;"&gt;●&lt;/strong&gt;7%가 "IE6을 선호하기 때문(I prefer IE6 to other browsers.)"으로 응답한 것으로 조사되었습니다.&lt;br /&gt;
&lt;br /&gt;
Digg는 IE6 브라우저에 대한 지원을 중단하기 위해 이와 같은 조사를 실시하였으며, 정상적으로 페이지를 볼 수는 있을 것이라고 합니다. 이밖에도 IE6 의 기능별 사용 분포, 회사/집 사용 빈도 등에 대한 조사자료를 함께 공개했습니다. 주위에서 IE6 사용자를 발견하면 "이봐요! 업그레이드 좀 하세요!"라고 전해 달랍니다. &lt;a href="http://bklove.info/983"&gt;한국의 실정&lt;/a&gt;과는 많이 다르겠지만, "IE6을 선호하기 때문"이라는 응답은 조금 놀랍군요.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1448#p1448"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1448#p1448"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1448"&gt;Hits(276)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wwqlI0wlNZACa1wTn6Dsx3rKvkM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wwqlI0wlNZACa1wTn6Dsx3rKvkM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wwqlI0wlNZACa1wTn6Dsx3rKvkM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wwqlI0wlNZACa1wTn6Dsx3rKvkM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">자바스크립트 멀티스레드 프로그래밍 - DOM Workers</title><link rel="alternate" type="text/html" href="http://firejune.com/1447" /><category term="웹개발" /><category term="자료" /><category term="파이어폭스" /><category term="Worker" /><category term="멀티스레드" /><category term="자바스크립트" /><category term="뻘짓" /><category term="v8 짱!" /><author><name>파이어준</name></author><updated>2009-07-12T12:08:36-07:00</updated><id>http://firejune.com/1447</id><content type="html">파이어폭스 3.5에 추가된 기능인 &lt;a href="https://developer.mozilla.org/En/Using_web_workers"&gt;DOM Workers&lt;/a&gt;를 테스트 해 보았습니다. 자바스크립트로 멀티스레드(multi-thread)를 구현할 수 있다길레 솔깃해서 살펴보았습니다. 'Worker'로 새 인스턴스를 만들어서 'onmessage', 'onerror', 'postMessage' 메서드로 변수를 전달하고 결과물을 돌려받을 수 있는 실행구조를 가지고 있었습니다. 인스턴스를 생성할 때에는 자바스크립트 파일을 로드하여 이루어지며, 여기에 사용되는 자바스크립트는 DOM에 직접 액세스 할 수 없고 네임스페이스 역시 공유하지 않습니다. 즉, 연산만을 죽어라 수행하도록 디자인 된 것입니다. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;function fibonacci(n) {
  return (n &amp;lt; 1) ? -1 : (n &amp;gt; 2) ? fibonacci(n - 1) + fibonacci(n - 2) : 1;
}

onmessage = function(event) {
  return postMessage(fibonacci(event.data));
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
위 코드는 테스트에 사용된 '&lt;a href="http://firejune.com/public/fibonacci.js"&gt;/public/fibonacci.js&lt;/a&gt;' 파일의 내용입니다. 한줄짜리 피보나치(fibonacci) 함수를 호출하고 그 결과를 반환합니다. 이 worker용 자바스크립트 파일은 아래와 같이 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;var worker = new Worker("/public/fibonacci.js");
worker.onmessage = function(event) {
  alert(event.data);
};
worker.postMessage(10);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
실제로 작업 수행이 병렬로 이루어지는지 확인하기 위하여 동일한 피보나치 함수가 worker를 사용하여 실행되는 것과 일반 자바스크립트로 실행한 것을 복합적으로 테스트하고 수행 시간을 측정했습니다. worker가 결과를 응답하는 시간이 매우 불규칙적이고 브라우저가 무작위로 죽어싸서 신빙성 있는 테스트는 어려워 보이네요. 성능 모니터(perfmon.exe)를 토글해서 스레드를 직접 확인해 보세요. 스레드가 급증했다가 줄어들고 그럽디다. 속도도 구린것이 그닥 유용해 보이지는 않군요. 구글 크롬 v8 엔진처럼 자바스크립트 자체를 멀티스레드 처리하는 쪽이 훨씬 현실적이어 보입니다. 이걸 어디다 써먹어나요. 에이~ 완전 뻘짓했네요. DOM Workers는 파이어폭스 부가기능 제작용으로나 적합해 보입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;DOM workers Test&lt;/h3&gt;
&lt;div id="result" style="text-align:center;font-size:11px;"&gt;&lt;/div&gt;
&lt;div style="clear: both;"&gt;
  &lt;input id="value" value="10"/&gt; x
  &lt;button onclick="return test($('value').value, '1')"&gt;worker, native&lt;/button&gt;
  &lt;button onclick="return test($('value').value, '2')"&gt;native, native&lt;/button&gt;
  &lt;button onclick="return test($('value').value, '3')"&gt;worker, worker&lt;/button&gt;
&lt;/div&gt;

&lt;br /&gt;
덧. 테스트가 공정하지 못했네요. worker 인스턴스를 지속해서 생성하지 않고 참조하게 했더니 속도가 크게 개선되긴 했습니다만, DOM 스크립트만 못한 것은 사실이네요. 백그라운드에서 도는 프로그램에 사용하면 좋겠다는 생각을 했습니다.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1447#p1447"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1447#p1447"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1447"&gt;Hits(389)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EzVtzI8NHK2ghrc6DwgTEFkTDm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EzVtzI8NHK2ghrc6DwgTEFkTDm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EzVtzI8NHK2ghrc6DwgTEFkTDm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EzVtzI8NHK2ghrc6DwgTEFkTDm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">넷북을 위한 구글 크롬 OS가 나온답니다.</title><link rel="alternate" type="text/html" href="http://firejune.com/1446" /><category term="웹개발" /><category term="자료" /><category term="크롬OS" /><category term="구글" /><category term="넷북" /><category term="오픈소스" /><author><name>파이어준</name></author><updated>2009-07-09T22:24:14-07:00</updated><id>http://firejune.com/1446</id><content type="html">&lt;div style="clear:both;" class="textbox1"&gt;구글 크롬OS는 오픈 소스로 개발되었으며, 넷북을 겨냥한 가벼운 OS입니다. 저희는 올해 말 코드를 공개하고, 구글 크롬OS를 기반으로 하는 넷북이 2010년 하반기 시판될 수 있도록 할 계획입니다. 이 프로젝트와 관련해 이미 파트너들과 협의를 진행시키고 있으며, 조만간 오픈 소스 진영과 실무논의에 들어갈 것입니다. 저희는 언제나 많은 사람들과 구글의 비전을 공유하고자 노력해 왔기 때문에, 모두들 저희가 이루고자 하는 바를 잘 이해하고 있습니다.&lt;br /&gt;
&lt;br /&gt;
구글 크롬OS의 핵심은 스피드, 단순함, 그리고 안전성입니다. 이를 위해 저희는 사용자들이 수 초 내에 웹에 빠르게 연결될 수 있도록 하는 빠르고 가벼운 OS를 디자인하고 있습니다. 사용자 인터페이스(UI)의 경우, 사용자에게 방해를 줄 수 있는 것은 최소한으로 제한하고, 대부분의 사용자 경험이 웹 상에서 일어나도록 했습니다. 구글 크롬 브라우저를 만들었을 때와 마찬가지로 저희는 기본에 충실하고자 OS의 근본적인 보안 아키텍처부터 완전히 다시 설계하고 있습니다. 이를 통해 사용자는 바이러스나 멀웨어, 보안 업데이트 등에 신경을 쓰지 않아도 될 것입니다. 이 모든 것이 OS 상에서 자동적으로 해결이 될 것입니다.&lt;br /&gt;
&lt;br /&gt;
구글 크롬OS는 ARM 칩은 물론 x86에서 모두 구동 될 것입니다. 또 내년에는 다양한 넷북이 출시될 수 있도록 다수의 OEM 업체들과 논의 중에 있습니다. 소프트웨어 아키텍처는 간단합니다 — 구글 크롬이 리눅스 커널 외에 새로운 윈도윙 시스템(windowing system)에서도 구동되게 하는 것입니다. 애플리케이션 개발자에게 웹은 하나의 플랫폼입니다. 따라서 모든 웹 기반 애플리케이션은 자동으로 구동 되며 새로운 애플리케이션은 사용자가 원하는 웹 기술을 통해 만들어질 수 있습니다. 애플리케이션은 물론 구글 크롬OS 뿐만 아니라, 윈도, 맥, 리눅스에서 구동 되는 다른 표준형 OS에서도 구동 될 것입니다. 따라서 개발자들은 어떤 플랫폼이든 최대의 사용자 기반을 확보하게 될 것입니다.&lt;br /&gt;
&lt;br /&gt;
- &lt;a href="http://googlekoreablog.blogspot.com/2009/07/os.html"&gt;구글 공식 블로그 인용&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
구글이 사전에 공식 발표를 하기도 하는군요. 어찌됐건 매우 흥미로운 프로젝트입니다. Acer, Adobe, ASUS, Freescale, Hewlett-Packard, Lenovo, Qualcomm, Texas Instruments, 그리고 Toshiba 업체와 합작한다고 합니다. 즐거운 상상을 하며 2010년을 맞이할 수 있겠네요.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1446#p1446"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1446#p1446"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1446"&gt;Hits(379)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/o5WiuRJ2XrHeQPCRiRZS_iyhgsI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5WiuRJ2XrHeQPCRiRZS_iyhgsI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/o5WiuRJ2XrHeQPCRiRZS_iyhgsI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/o5WiuRJ2XrHeQPCRiRZS_iyhgsI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">localStorage - 클라이언트 로컬에 데이터 저장하기</title><link rel="alternate" type="text/html" href="http://firejune.com/1445" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="localStorage" /><category term="Prototype" /><category term="globalStorage" /><category term="JSON" /><category term="HTML5" /><category term="캐시" /><category term="프로젝트" /><category term="cometd" /><author><name>파이어준</name></author><updated>2009-07-08T00:03:32-07:00</updated><id>http://firejune.com/1445</id><content type="html">HTML 5에 명시된 '&lt;a href="http://www.w3.org/TR/webstorage/#dom-localstorage"&gt;localStorage&lt;/a&gt;'는 클라이언트 로컬에 데이터를 저장하기 위한 전역 함수입니다. 여기에 저장된 데이터는 장시간 영구적으로 보관할 수 있으며, 오프라인인 경우에도 호출이 가능하다는 특징 때문에 Ajax 응답 결과물 또는 무리한 연산 결과물 등을 캐싱하거나 오프라인 환경을 고려한 데이터베이스 동기화 등 웹 애플리케이션의 성능 향상을 꾀하기 위한 목적으로 사용될 수 있습니다. 부가적으로 서버측 로드는 줄고 트래픽이 절감하는 효과도 발생합니다. 그래서 아래와 같은 스토리지 도우미를 작성했습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;/* Local Storage Helper Class */
var Storage = Class.create({
  initialize: function(name, options) {
    this.options = Object.extend({
      clearable: true, // automatically clear data if an error occurred
      delay: 2000, // save data to localStorage after the allotted time
      maximum: 5 // the maximum size in magabytes
    }, options);
    if (typeof localStorage == "undefined" &amp;amp;&amp;amp; typeof globalStorage != "undefined")
      localStorage = globalStorage[location.hostname];
    // undefined localStorage if it doesn't already exist
    if (!window.localStorage) localStorage = {
        getItem: function(name) {
          this.data = window.name ? window.name.evalJSON() : {};
          return $H(this.data[name] || (this.data[name] = {})).toJSON();
        }, setItem: function(name, data) {
          this.data[name] = data.evalJSON();
          window.name = $H(this.data).toJSON();
        }, removeItem: function(name) {
          delete this.data[name];
          window.name = $H(this.data).toJSON();
        }
      };
    this.name = name || 'unnamed';
    this.data = this.get();
  },
  // get item from localStorage
  get: function() {
    try { return (localStorage.getItem(this.name) || '{}').toString().evalJSON(); }
    catch(e) { this.options.clearable &amp;amp;&amp;amp; this.set({}); }
  },
  // set item to localStorage
  set: function(data) {
    if (data) this.data = data;
    this.timer &amp;amp;&amp;amp; clearTimeout(this.timer);
    this.timer = setTimeout(function() {
      if (this.size(true) &amp;gt; this.options.maximum * 1048576) return;
      try { localStorage.setItem(this.name, $H(this.data).toJSON()); }
      catch(e) { this.options.clearable &amp;amp;&amp;amp; this.set({}); }
    }.bind(this), this.options.delay)
  },
  // remove item
  remove: function(name) {
    localStorage.removeItem(name || this.name);
  },
  // remove all items
  clear: function() {
    if (!localStorage.length) window.name = '{}';
    else for (i = 0; i &amp;lt; localStorage.length; i++) this.remove(localStorage.key(i));
  },
  // size of localStorage
  size: function(bytes) {
    var data = $H(this.data).toJSON().length;
    return bytes ? data : data &amp;gt; 1024 ? (function() {
      data = (data / 1024).round().toString();
      var reg = /(^[+-]?\d+)(\d{3})/;
      while (reg.test(data)) data = data.replace(reg, '$1' + ',' + '$2');
      return data  + 'kb';
    })() : data + 'bytes';
  }
});

/* Usage */
var MyStorage = new Storage('MyStorage'); // Create the helper instance
var MyData = MyStorage.data; // Read data from localStorage(JSON Object)
MyData['firejune'] = { name: 'Junho, Kyung', age: 33 }; // Update a single data
MyStorage.set(MyData); // Write the data to localStorage
MyStorage.size(); // =&amp;gt; '49bytes'&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
위 코드는 이 블로그의 &lt;a href="http://firejune.com/1444"&gt;이미지 프로세싱 결과&lt;/a&gt;와 &lt;a href="http://firejune.com/1073"&gt;동적인 자바스크립트 호출&lt;/a&gt; 결과에 실제로 반영되어 사용되고 있습니다. JSON 자료형으로 입/출력하며, JSON을 문자로 변환 보관&lt;del&gt;하기 위해 &lt;a href="http://www.json.org/js.html"&gt;json2.js&lt;/a&gt; 라이브러리를 필요로 합니다.(브라우저가 Native JSON을 지원하지 않는 경우)&lt;/del&gt;합니다. localStorage를 사용할 수 없는 브라우저인 경우에는 단기적으로 자료 보존이 가능한 &lt;a href="http://ajaxian.com/archives/quipt-caching-js-in-windowname"&gt;'window.name' 프로퍼티에 저장&lt;/a&gt;하는 트릭을 사용합니다. 그리고 불필요한(비효율적인, 반복적인) 저장 호출들을 무시하기 위해 타이머(기본 2초)가 적용되어 있으며 옵션으로 타이머 시간값을 변경할 수 있습니다. 신기하게도 'localStorage.setItem'메서드로 자료가 입력되는 동시에 하드디스크를 '드르륵' 긁더라구요.&lt;br /&gt;
&lt;br /&gt;
덧1. 문득 떠오른 뻘아이디어: 이렇게 모인 캐시들을 &lt;a href="http://cometd.vox.com/"&gt;cometd&lt;/a&gt;를 이용해서 접속중인 모든 클라이언트에 전송하고  머지해 버리면 어떤 현상이 발생할까요? 이름하여 '미러링 캐시 이펙트'? ㅎㅎㅎ&lt;br /&gt;
덧2. 도메인당 최대 자료 저장량이 브라우저에 따라 다르므로 초기화가 자동으로 이루어질 수 있도록 옵션으로 제공 함(Firefox의 최대 저장량 5 MB)&lt;br /&gt;
덧3. window.name을 스토리지로 사용하는 경우에도 인스턴스 단위로 구분하여 저장 함&lt;br /&gt;
덧4. 해당 인스턴스의 스토리지 사용량을 반환하는 size() 메서드 추가&lt;br /&gt;
덧5. window.name을 스토리지로 사용하는 경우 지속적으로 초기화 되던 버그 수정&lt;br /&gt;
덧6. 인스턴스당 최대 저장량을 설정할 수 있도록 함(자동으로 초기화하지 않음)
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1445#p1445"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1445#p1445"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1445"&gt;Hits(444)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fud3EdfTRiolUito7PyQvrZfuzw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fud3EdfTRiolUito7PyQvrZfuzw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fud3EdfTRiolUito7PyQvrZfuzw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fud3EdfTRiolUito7PyQvrZfuzw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">이미지 프로세싱 - 흑백 이미지로 변환하기</title><link rel="alternate" type="text/html" href="http://firejune.com/1444" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="이미지" /><category term="프로세싱" /><category term="Canvas" /><category term="DataURL" /><category term="Prototype" /><category term="프로젝트" /><author><name>파이어준</name></author><updated>2009-07-07T08:41:45-07:00</updated><id>http://firejune.com/1444</id><content type="html">마우스 이벤트에 의해 컬러 이미지와 그레이 스케일(흑백) 이미지가 교차되면서 포커싱되는 효과는 시선을 집중시키는 효율적인 방법중 하나입니다. IE의 경우 특정 이미지를 흑백으로 변환하려면 'filter:gray' 스타일 속성을 사용하여 쉽게 해결할 수 있지만 비표준입니다. 비 IE계열 브라우저들은 이에 상응하는 CSS 프로퍼티를 제공하지 않기 때문에 아래와 같은 자바스크립트를 이용하여 이미지를 흑백으로 변환할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;function grayscale(img) {
  var width = img.getWidth(), height =  img.getHeight();

  // You'll get some string error if you fail to specify the dimensions
  var canvas = new Element("canvas", {width: width, height: height});
  var context = canvas.getContext("2d");
  context.drawImage(img, 0, 0);

  // This function cannot be called if the image is not rom the same domain.
  // You'll get security error if you do.
  var imgData = context.getImageData(0, 0, width, height); 

  // This loop gets every pixels on the image
  for (var x = 0, i; x &amp;lt; width; x++)
    for (var y = 0; y &amp;lt; height; y++)
      imgData.data[(i=x*4+y*4*width)] = imgData.data[i+1] = imgData.data[i+2] =
        (imgData.data[i] + imgData.data[i+1] + imgData.data[i+2]) / 3;

  context.putImageData(imgData, 0, 0, 0, 0, width, height);
  return canvas.toDataURL();
}

// Usages
var img = $('my-image');
img.src = grayscale(img);

img.writeAttribute('src', '/images/smail.gif').observe('load', function() {
  img.stopObserve('load').src = grayscale(img);
});
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
canvas 요소를 이용한 이미지 프로세싱으로 모든 픽셀을 흑백 데이터로 전환하고 DataURL을 얻는 방법입니다. 위 'grayscale'함수를 사용할 때 세가지 주의해야 할 점이 있습니다. 첫 번째는 이미지의 높이와 너비 값을 얻지 못하는 경우 오류가 발생합니다. 두 번째는 이미지가 완전히 로드된 상태여야합니다. 그렇지 않은 경우 onload 이벤트를 이용하여 호출할 수 있습니다. 그리고 세 번째는 이미지 요소의 'src'속성이 참조하는 경로가 현재 도메인과 일치하지 않는 경우 보안 오류가 발생합니다.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1444#p1444"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1444#p1444"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1444"&gt;Hits(396)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ubi84tcbmnj5acoQRilkikJK7V0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ubi84tcbmnj5acoQRilkikJK7V0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ubi84tcbmnj5acoQRilkikJK7V0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ubi84tcbmnj5acoQRilkikJK7V0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">HTML 5 치트 시트(Cheat Sheet) PDF</title><link rel="alternate" type="text/html" href="http://firejune.com/1443" /><category term="웹개발" /><category term="자료" /><category term="HTML5" /><category term="치트 시트" /><category term="PDF" /><category term="레퍼런스" /><category term="일목요연" /><author><name>파이어준</name></author><updated>2009-07-06T09:15:10-07:00</updated><id>http://firejune.com/1443</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://firejune.cdn2.cafe24.com/attach/0707/090707010526648812/987633.gif" onclick="Zooming(this, 1113, 1400); return false;" title=""&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0707/090707010526648812/987633.gif" width="650" height="818" alt="http://firejune.cdn2.cafe24.com/attach/0707/090707010526648812/987633.gif" class="centered null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://www.veign.com/"&gt;Veign.com&lt;/a&gt;에서 &lt;a href="http://www.smashingmagazine.com/2009/07/06/html-5-cheat-sheet-pdf/"&gt;HTML 5 레퍼런스(Reference)&lt;/a&gt;를 일목요연하게 참조할 수 있도록 한 페이지에 정리한 &lt;a href="http://media1.smashingmagazine.com/wp-content/uploads/images/html5-cheat-sheet/html5-cheat-sheet.pdf"&gt;PDF&lt;/a&gt; 파일을 공개했습니다. 변동사항이 생기면 문서의 지속적인 업데이트까지 약속했습니다. 멋지네요!
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1443#p1443"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1443#p1443"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1443"&gt;Hits(424)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j4X5Oh6lfYcDnGPUyhMvkFrrnYk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4X5Oh6lfYcDnGPUyhMvkFrrnYk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j4X5Oh6lfYcDnGPUyhMvkFrrnYk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4X5Oh6lfYcDnGPUyhMvkFrrnYk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">헉! 배스가 제 손을 물었어요!</title><link rel="alternate" type="text/html" href="http://firejune.com/1442" /><category term="낚시" /><category term="일상" /><category term="배스" /><category term="낚시" /><category term="연출" /><category term="죄송" /><category term="꾸벅" /><category term="헉!" /><category term="신갈지" /><category term="3짜" /><category term="비린내" /><category term="손" /><category term="다운샷 리그" /><category term="인간낚시" /><author><name>파이어준</name></author><updated>2009-07-06T07:54:42-07:00</updated><id>http://firejune.com/1442</id><content type="html">&lt;div class="image-align center"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0707/090707002930607519/839593.gif" width="640" height="427" alt="http://firejune.cdn2.cafe24.com/attach/0707/090707002930607519/839593.gif" class="reflect hasborder"/&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="center"&gt;&lt;img src="http://firejune.com/images/qms.gif" alt="" /&gt; 낚이셨습니다. 연출이였어요; &lt;img src='http://firejune.com/images/e/032.gif' alt='' /&gt;&lt;img src="http://firejune.com/images/qme.gif" alt="" /&gt;&lt;/div&gt;
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1442#p1442"&gt;Comments(1)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1442#p1442"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1442"&gt;Hits(440)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ci7ZQv0NcxWaB9kt0mhA_LrleHI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ci7ZQv0NcxWaB9kt0mhA_LrleHI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ci7ZQv0NcxWaB9kt0mhA_LrleHI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ci7ZQv0NcxWaB9kt0mhA_LrleHI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">스트리트 파이터 4 PC판 다운로드</title><link rel="alternate" type="text/html" href="http://firejune.com/1441" /><category term="게임/오락" /><category term="문화" /><category term="격투" /><category term="스트리트 파이터" /><category term="PC판" /><category term="다운로드" /><category term="지름" /><category term="3만9천원" /><author><name>파이어준</name></author><updated>2009-07-04T08:06:30-07:00</updated><id>http://firejune.com/1441</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://firejune.cdn2.cafe24.com/attach/0704/090704232842953546/402882.jpg" onclick="Zooming(this, 1024, 640); return false;" title=""&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0704/090704232842953546/402882.jpg" width="650" height="406" alt="http://firejune.cdn2.cafe24.com/attach/0704/090704232842953546/402882.jpg" class="centered null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
제가 사용하는 유료 스토리지 서비스에 "거리의 싸움꾼 4"라는 것이 올라와 있길래 살펴보니 그저께 발매한 &lt;a href="http://www.capcom.co.jp/sf4/index.html"&gt;스트리트 파이터 4&lt;/a&gt; PC판이더군요. &lt;a href="http://www.ggemguide.com/mynews_view.htm?uid=6401&amp;amp;page=1&amp;amp;key=&amp;amp;searchword=&amp;amp;no=4202"&gt;발매 당일 크래킹&lt;/a&gt;되었다고 합니다. 게임에 불감한 요즘 한판하고 지우려는 생각으로 다운로드하고 설치하여 한시간 정도 싱글플레이를 즐겼습니다. 유년시절을 함께한 스트리트 파이터의 향수에 젖어드는 것도 잠시, 정말 잘 만들어진 게임이라는 생각이 들기까지는 그리 오랜 시간이 필요하지 않았습니다. 느닷없이 온라인 대전이 하고 싶어서 덜컥 정품을 구입했습니다. 이제부터 세계의 플레이어들과 대전입니다. 한동안 집구석에 돌아오면 맥주마시고 멍때리는 일은 없겠네요. ㅎㅎ
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1441#p1441"&gt;Comments(3)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1441#p1441"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1441"&gt;Hits(1054)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IzwT2ye_vlGjHIVWKRkyn_ydDSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IzwT2ye_vlGjHIVWKRkyn_ydDSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IzwT2ye_vlGjHIVWKRkyn_ydDSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IzwT2ye_vlGjHIVWKRkyn_ydDSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">XHTML에서 HTML5로 옮겨타기</title><link rel="alternate" type="text/html" href="http://firejune.com/1440" /><category term="웹개발" /><category term="자료" /><category term="HTML5" /><category term="XHTML" /><category term="웹표준" /><category term="HTML" /><category term="자바스크립트" /><category term="프로젝트" /><author><name>파이어준</name></author><updated>2009-07-03T22:51:35-07:00</updated><id>http://firejune.com/1440</id><content type="html">HTML이 새로운 기능들을 가지고 한 세기를 넘어서 되돌아 왔습니다. XHTML과 달리 HTML 5의 장점은 매우 유연하다는 것입니다. HTML 5를 지원하지 않는 브라우저에서도 컨텐츠가 무리없이 출력되도록 설계되었습니다. HTML4에 기반하고 네임스페이스나 스키마가 없기 때문에 요소(Element)의 끝을 정확히 닫지 않거나 따옴표를 생략해도 괜찮습니다. 그리고 호환성이 고려된 추가적인 새 요소들이 대거 추가되었습니다. 구조 요소는 header, footer, nav, aside, figure, section이 있으며 인라인 요소로는 time, meter, progress가 있고 내장 요소로는 video와 audio가 있으며 대화형 요소로는 details, datagrid, command가 바로 새로운 요소들 입니다. 이 세로운 요소들에 대한 이해를 돕기 위해 요소의 역할을 간략하게 메모해 보았습니다.&lt;br /&gt;
&lt;br /&gt;

&lt;h3&gt;구조 요소&lt;/h3&gt;
&lt;ul class="square"&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;section&amp;gt;&lt;/strong&gt;: 문서의 특정 영역을 구분&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;header&amp;gt;&lt;/strong&gt;: 문서 또는 영역의 머리말에 해당하는 내용 구분&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;footer&amp;gt;&lt;/strong&gt;: 문서 또는 영역의 꼬리말에 해당하는 내용 구분&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;nav&amp;gt;&lt;/strong&gt;: 다른 페이지를 가리키는 링크들의 모음(네비게이션) 구분&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;article&amp;gt;&lt;/strong&gt;: 하나의 글 또는 기사(본문)의 단위 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3&gt;블럭 요소&lt;/h3&gt;
&lt;ul class="square"&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;aside&amp;gt;&lt;/strong&gt;: 본문의 흐름에서 벗어나는 내용 구분(참고, 팁, 사이드바, 인용)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;figure&amp;gt;&lt;/strong&gt;: 이미지, 비디오 등에 자막(캡션) 표현&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;dialog&amp;gt;&lt;/strong&gt;: 사람 간에 일어난 대화 영역 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3&gt;인라인 요소&lt;/h3&gt;
&lt;ul class="square"&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;mark&amp;gt;&lt;/strong&gt;: 강조할 필요까진 없으나 주목해야 할 문구를 표현(형광펜)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;meter&amp;gt;&lt;/strong&gt;: 특정한 범위에 속하는 숫자 값을 표현(월급, 득표율, 테스트 점수 등)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;time&amp;gt;&lt;/strong&gt;: 특정한 시각을 표현&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;progress&amp;gt;&lt;/strong&gt;: 현재 진행 중인 상태를 표현(다운로드 완료율)&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3&gt;미디어 요소&lt;/h3&gt;
&lt;ul class="square"&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;video&amp;gt;&lt;/strong&gt;: 별도의 플러그인 설치를 필요로 하지 않는 동영상 자료를 표시(UI API 제공)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;audio&amp;gt;&lt;/strong&gt;: 별도의 플러그인 설치를 필요로 하지 않는 음원 자료를 표시(UI API 제공)&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3&gt;상호작용 요소&lt;/h3&gt;
&lt;ul class="square"&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;details&amp;gt;&lt;/strong&gt;: 추가적인 상세정보를 담고있는 영역(툴팁의 내용)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;datagrid&amp;gt;&lt;/strong&gt;: 동적인 데이터를 효과적으로 표현(트리, 목록, 표)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&amp;lt;menu&amp;gt;, &amp;lt;command&amp;gt;&lt;/strong&gt;: menu는 command 요소를 포함하여 즉각적인 동작 발생(콘텍스트 메뉴)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
HTML 5에서 사라진 요소는 acronym, applet, basefont, big, center, dir, font, frame, frameset, isindex, noframes, noscript, s, strike, tt, u입니다. 더욱 자세한 HTML 5의 변동사항은 channy님이 번역한 &lt;a href="http://channy.creation.net/project/html5/html4-differences/Overview_ko.html"&gt;HTML 4와 HTML 5의 차이점&lt;/a&gt; 문서를 참고하세요. 지금까지 부적절하게 사용해왔던 div와 span지옥에서 벋어날 수 있다는 사실을 인지했다면 당신은 이미 HTML 5를 사용할 준비가 된 것입니다. 이제 더 이상 div에 의존하여 class 속성으로 역할을 구분할 필요가 없어진 것이죠. XHTML에서 HTML 5로 옮겨타는 것은 그리 어려운 일이 아닙니다. 그러나 늘 그랬듯이 문제는 IE에서 발생합니다. IE를 제외한 메이저급 브라우저들이 모두 HTML 5를 수용한 상태이지만 IE에서는 HTML 5의 세로운 요소들을 인지하지 못합니다. 이 문제는 아래와 같은 자바스크립트를 상위에서 실행하는 편법으로 해결할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;!!(window.attachEvent &amp;amp;&amp;amp; navigator.userAgent.indexOf('Opera') === -1) &amp;amp;&amp;amp; (function() {
    for (var i = 0; i &amp;lt; arguments.length; i++) document.createElement(arguments[i]); 
  })('header', 'footer', 'aside', 'nav', 'article', 'section', 'time');&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
HTML은 십수년동안 사람과 컴퓨터간 소통할 수 있는 가장 쉬운 언어로 인식되고 즐겨 사용되어 왔습니다. 그리고 HTML 5로 인하여 문서의 용도와 목적 등을 조금더 분명하게 구분하고 표현할 수 있게 되었습니다. 컴퓨터가 이를 체계적으로 이해하면 생각치도 못했던 놀라운 세상이 펼쳐질 것이며, 웹 애플리케이션이 진보하는 밑거름이 될 것이라 믿어 의심치 않습니다.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1440#p1440"&gt;Comments(1)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1440#p1440"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1440"&gt;Hits(614)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5c11RFC43bfMKsqIomvzmpubtck/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5c11RFC43bfMKsqIomvzmpubtck/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5c11RFC43bfMKsqIomvzmpubtck/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5c11RFC43bfMKsqIomvzmpubtck/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">더욱 빨라진 파이어폭스 3.5 출시</title><link rel="alternate" type="text/html" href="http://firejune.com/1439" /><category term="웹개발" /><category term="자료" /><category term="파이어폭스" /><category term="릴리즈" /><category term="자바스크립트" /><category term="성능" /><category term="HTML5" /><category term="Monad" /><category term="TaskSpeed" /><category term="벤치마크" /><author><name>파이어준</name></author><updated>2009-06-30T20:00:08-07:00</updated><id>http://firejune.com/1439</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://firejune.cdn2.cafe24.com/attach/0701/090701095354024927/423980.gif" onclick="Zooming(this, 845, 248); return false;" title=""&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0701/090701095354024927/423980.gif" width="650" height="191" alt="http://firejune.cdn2.cafe24.com/attach/0701/090701095354024927/423980.gif" class="centered null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
새 자바스크립트 엔진인 &lt;a href="https://wiki.mozilla.org/JavaScript:TraceMonkey"&gt;TraceMonkey&lt;/a&gt;가 탑재된 &lt;a href="http://www.mozilla.or.kr/ko/"&gt;파이어폭스 3.5가 출시&lt;/a&gt;되었습니다. 기존의 &lt;a href="https://developer.mozilla.org/en/SpiderMonkey"&gt;SpiderMonkey&lt;/a&gt; 엔진보다 약 3배 빠르다고 합니다. 위 그래프는 개인적으로 수집한 &lt;a href="http://firejune.com/1395"&gt;TaskSpeed&lt;/a&gt;의 &lt;a href="http://taskspeed.firejune.com/report/charts.html"&gt;결과&lt;/a&gt;입니다. 재미있게도 &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;를 제외한 나머지 자바스크립트 라이브러리들은 모두 속도가 향상 되었습니다. 특히, &lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt;의 속도가 크게 개선된 것으로 기록되었습니다. 원인이 무엇일까요? &lt;a href="http://en.wikipedia.org/wiki/Monad_%28functional_programming%29"&gt;Monad&lt;/a&gt;(펑셔널 프로그래밍)는 &lt;a href="http://en.wikipedia.org/wiki/Just-in-time_compilation"&gt;JIT 컴파일러&lt;/a&gt;에 적합하지 않기 때문일까요? 이와 같은 양상은 최근에 출시된 브라우저들에서 두드러지게 나타납니다.&lt;br /&gt;
&lt;br /&gt;
&lt;img style="float: right; margin-left: 6px;" src="http://chart.apis.google.com/chart?cht=bhg&amp;amp;chs=360x120&amp;amp;chd=s:x,W,V&amp;amp;chdl=TraceMonkey(FF3.5)|Nitro(Safari4)|V8(Chrome3)&amp;amp;chco=FFCC00,FF6600,acc4e8&amp;amp;chxt=x&amp;amp;chxs=0,000000,8,-1&amp;amp;chxr=0,0,2000&amp;amp;chf=bg,lg,90,FFFFFF,0,FFFFFF,1|c,lg,43,FFFFFF,0,FFFFFF,1&amp;amp;chbh=a&amp;amp;chts=000000,12&amp;amp;max=2000" width="360" height="120" alt=""/&gt; 우측 그림은 &lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"&gt;SunSpider&lt;/a&gt; 벤치마크를 이용하여 한딱가리(?) 하고있는 브라우저들의 자바스크립트 엔진성능을 측정 하고 최종집계 시간을 비교한 그래프입니다. &lt;a href="http://code.google.com/p/v8/"&gt;V8&lt;/a&gt;이나 &lt;a href="http://webkit.org/blog/214/introducing-squirrelfish-extreme/"&gt;Nitro(SquirrelFish)&lt;/a&gt;의 속도를 따라 잡지는 못했더군요.&lt;br /&gt;
&lt;br /&gt;
어찌됐든 파이어폭스 3.5의 출시는 환영할 일입니다. HTML5 공식 지원을 포함한 오픈 비디오 및 오디오, 새로운 CSS 속성들, Cross-site access XMLHttpRequest, DOM workers, Native JSON 등 다양한 &lt;a href="https://developer.mozilla.org/ko/Firefox_3.5_for_developers"&gt;새로운 기술들&lt;/a&gt;을 이용할 수 있기 때문이죠.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1439#p1439"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1439#p1439"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1439"&gt;Hits(708)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t3qP_0jIjHDhS1VnXpoyH3vrkPQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t3qP_0jIjHDhS1VnXpoyH3vrkPQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t3qP_0jIjHDhS1VnXpoyH3vrkPQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t3qP_0jIjHDhS1VnXpoyH3vrkPQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">text-shadow를 이용한 텍스트 그림자 효과</title><link rel="alternate" type="text/html" href="http://firejune.com/1438" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="CSS" /><category term="텍스트" /><category term="그림자" /><category term="text-shadow" /><author><name>파이어준</name></author><updated>2009-06-30T09:04:27-07:00</updated><id>http://firejune.com/1438</id><content type="html">&lt;div style="background: #000; text-align: center;"&gt;&lt;a href="http://www.zachstronaut.com/posts/2009/06/22/css-text-shadow-lighting-demo.html"&gt;&lt;img src="http://firejune.com/attach/0630/090630150806547993/736467.png" width="598" height="406" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://www.zachstronaut.com"&gt;Zach Johnson&lt;/a&gt;씨는 CSS와 자바스크립트를 사용하여 마우스 움직임에 반응하는 &lt;a href="http://www.zachstronaut.com/posts/2009/06/22/css-text-shadow-lighting-demo.htm"&gt;텍스트에 그림자가 비치는 효과&lt;/a&gt;를 절묘하게 표현했습니다. 이 데모는 아래의 짧막한 코드로 작동됩니다. 그러나 &lt;a href="http://www.w3.org/Style/Examples/007/text-shadow"&gt;text-shadow&lt;/a&gt; CSS 프로퍼티를 지원하는  Safari, Firefox 3.5, Opera, Chrome 브라우저에서만 제대로 보인다는 점을 유념하세요.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;var text;
var spot;

window.onload = function () {
    document.getElementById('text-shadow-box').onmousemove = onMouseMove;
    text = document.getElementById('tsb-text');
    spot = document.getElementById('tsb-spot')
}

function onMouseMove(e) {
    var xm = e.clientX - 300;
    var ym = e.clientY - 175;
    var d = Math.sqrt(xm*xm + ym*ym);
    text.style.textShadow = -xm + 'px ' + -ym + 'px ' + (d / 5 + 10) + 'px black';
    
    xm = e.clientX - 600;
    ym = e.clientY - 450;
    spot.style.backgroundPosition = xm + 'px ' + ym + 'px';
}&lt;/code&gt;&lt;/pre&gt;
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1438#p1438"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1438#p1438"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1438"&gt;Hits(531)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ANBH3SL4qkwV226V8rMsQwgAU7c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANBH3SL4qkwV226V8rMsQwgAU7c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ANBH3SL4qkwV226V8rMsQwgAU7c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANBH3SL4qkwV226V8rMsQwgAU7c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">자바스크립트로 만든 3D 큐브 메뉴 - CubeMenu</title><link rel="alternate" type="text/html" href="http://firejune.com/1437" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="MooTools" /><category term="3D" /><category term="메뉴" /><category term="CubeMenu" /><author><name>파이어준</name></author><updated>2009-06-29T21:52:36-07:00</updated><id>http://firejune.com/1437</id><content type="html">&lt;div class="image-align left"&gt;&lt;a href="http://demos.conquex.com/cube/"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0629/090629114314261025/631693.png" width="320" height="212" alt="http://firejune.cdn2.cafe24.com/attach/0629/090629114314261025/631693.png" class=" hasborder"/&gt;&lt;/a&gt;&lt;/div&gt; &lt;a href="http://demos.conquex.com/cube/"&gt;3D 큐브 메뉴&lt;/a&gt;는 &lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt; 자바스크립트 라이브러리를 이용하여 만들어진 색다른 3차원 메뉴입니다. 그러나 실제로 사용해 보면 비주얼은 뛰어난 반면 사용성이 떨어지는 것을 경험할 수 있습니다. 마우스 휠로 확대/축소하는 기능 보다는 &lt;a href="http://www.roytanck.com/2008/03/15/wp-cumulus-released/"&gt;WordPress의 Cumulus 플러그인&lt;/a&gt;처럼 마우스 위치에 반응하게 하여 원하는 위치로 이동하는 기능과 큐브 뿐만아니라 다른 형태로도 변하게 하는 옵션을 추가로 제공하면 더욱 다양한 시도들을 기대할 수도 있었을텐데 말예요. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;var myCubeMenu = new CubeMenu({
  items: [
    ['Charts', 'data/0.png', function(){ Message.show('Chars clicked..'); }],
    ['Games', 'data/1.png', function(){ Message.show('Games clicked..'); }],
    ['Sounds', 'data/2.png', function(){ Message.show('Sounds clicked..'); }],
    ['Internet', 'data/3.png', function(){ Message.show('Internet clicked..'); }],
    ['Calendar', 'data/4.png', function(){ Message.show('Calendar clicked..'); }],
    ['Users', 'data/5.png', function(){ Message.show('Users clicked..'); }],
    ['Palette', 'data/6.png', function(){ Message.show('Palette clicked..'); }],
    ['Monitor', 'data/7.png', function(){ Message.show('Monitor clicked..'); }],
    ['Mail', 'data/8.png', function(){ Message.show('Mail clicked..'); }],
    ['Acrobat', 'data/9.png', function(){ Message.show('Acrobat clicked..'); }],
    ['Flash', 'data/10.png', function(){ Message.show('Flash clicked..'); }],
    ['RecycleBin', 'data/11.png', function(){ Message.show('RecycleBin clicked..'); }],
    ['Connections', 'data/12.png', function(){ Message.show('RecycleBin clicked..'); }],
    ['', 'data/13.png', $empty ],
    ['Blocks', 'data/14.png', function(){ Message.show('Blocks clicked..'); }],
    ['Chess', 'data/15.png', function(){ Message.show('Chess clicked..'); }],
    ['Languages', 'data/16.png', function(){ Message.show('Languages clicked..'); }],
    ['Board', 'data/17.png', function(){ Message.show('Board clicked..'); }],
    ['Battery', 'data/18.png', function(){ Message.show('Battery clicked..'); }],
    ['Newspaper', 'data/19.png', function(){ Message.show('Newspaper clicked..'); }],
    ['Clock', 'data/20.png', function(){ Message.show('Clock clicked..'); }],
    ['MSN', 'data/21.png', function(){ Message.show('MSN clicked..'); }],
    ['Printer', 'data/22.png', function(){ Message.show('Printer clicked..'); }],
    ['Database', 'data/23.png', function(){ Message.show('Database clicked..'); }],
    ['Shutdown', 'data/24.png', function(){ Message.show('Shutdown clicked..'); }],
    ['Reload', 'data/25.png', function(){ Message.show('Reload clicked..'); }],
    ['Camcorder', 'data/26.png', function(){ Message.show('Camcorder clicked..'); }]
  ]
});&lt;/code&gt;&lt;/pre&gt;
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1437#p1437"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1437#p1437"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1437"&gt;Hits(557)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2_74eMUwnR62BIsn2FsygkG_wU0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2_74eMUwnR62BIsn2FsygkG_wU0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2_74eMUwnR62BIsn2FsygkG_wU0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2_74eMUwnR62BIsn2FsygkG_wU0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">마침내 3짜 배스를 낚아 올렸습니다.</title><link rel="alternate" type="text/html" href="http://firejune.com/1436" /><category term="낚시" /><category term="일상" /><category term="루어" /><category term="배스" /><category term="3짜" /><category term="낚시" /><category term="네꼬리그" /><category term="신갈낚시터" /><category term="베이트릴" /><category term="스피닝릴" /><category term="로드" /><author><name>파이어준</name></author><updated>2009-06-28T18:29:22-07:00</updated><id>http://firejune.com/1436</id><content type="html">&lt;div class="image-align left"&gt;&lt;a href="http://firejune.cdn2.cafe24.com/attach/0629/090629102358200456/859481.jpg" onclick="Zooming(this, 427, 640); return false;" title=""&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0629/090629102358200456/859481.jpg" width="257" height="385" alt="http://firejune.cdn2.cafe24.com/attach/0629/090629102358200456/859481.jpg" class="centered hasborder"/&gt;&lt;/a&gt;&lt;/div&gt;지난 4월 말, &lt;a href="http://firejune.com/1406"&gt;블루길을 처음으로 낚은&lt;/a&gt; 이후 흥분한 가슴을 가라앉히지 못하고 매주 일요일 비만 안오면 출조갑니다. 낚시도 여러 종류가 있으며 그 중에도 배스 루어 낚시가 대세라는 소문을 듣고 이 것을 배우기로 마음을 굳혔습니다.&lt;br /&gt;
잡다한 정보를 습득하여 채비를 구비하기 시작했는데, 고가의 베이트릴을 덥석 구매해서 스피닝릴 로드(낚시대)에 장착해 쓰다가 베이트릴 로드가 별도로 있다는 사실을 뒤늦게 알고 추가로 구입하기도 했습니다.(숙련자용이라는 것도 뒤늦게 알았습니다.) 그렇게 짧은 지식으로 하나 둘 모인 채비들은 로드만 벌써 4대(L x 1, ML x 2, MH x 1) 째이고 배스 낚시관련 방송을 보고 따라했다가 백래시(줄엉킴) 지옥을 경험했으며, 짬만 나면 집앞 한강에 나가서 손바닥에 물집이 잡히도록 캐스팅(던지기) 연습도 했습니다.&lt;br /&gt;
주로 용인과 광주 주변의 저수지로 출조했으며, 회마다 새끼 배스는 몇 수씩 낚았더랬습니다. 물론, 허탕치는 날도 많았죠. 배스 루어 낚시 경력 2개월 되던 날 목표로 삼았던 3짜리 배스를 낚았습니다. 큰놈을 낚으려면 큰놈이 올라오는 곳으로 가야하더군요;
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1436#p1436"&gt;Comments(5)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1436#p1436"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1436"&gt;Hits(658)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XCzXO44KMJMimLoFx1oYneZ9vls/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XCzXO44KMJMimLoFx1oYneZ9vls/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XCzXO44KMJMimLoFx1oYneZ9vls/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XCzXO44KMJMimLoFx1oYneZ9vls/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">두각을 드러낸 Scriptaculous 2.0 - Scripty2</title><link rel="alternate" type="text/html" href="http://firejune.com/1435" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="Prototype" /><category term="Scriptaculous" /><category term="Scripty2" /><category term="Thomas Fuchs" /><category term="프로젝트" /><author><name>파이어준</name></author><updated>2009-06-26T09:31:42-07:00</updated><id>http://firejune.com/1435</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://scripty2.com/"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0627/090627004544290007/867845.png" width="650" height="309" alt="http://firejune.cdn2.cafe24.com/attach/0627/090627004544290007/867845.png" class="reflect hasborder"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://script.aculo.us/thomas/"&gt;Thomas Fuchs&lt;/a&gt;씨는 &lt;a href="http://firejune.com/1204"&gt;2007년에 2.0버전&lt;/a&gt;을 만든다고 큰소리 치고는 잠적하여 &lt;a href="http://firejune.com/1357"&gt;목놓아 기다리게 만들더니&lt;/a&gt;, 약 20개월이 지난 오늘에서야 드디어 두각을 드러냈습니다. "보다 맛좋은 웹을 위하여"라는 부제의 "&lt;a href="http://scripty2.com/"&gt;scripty2&lt;/a&gt;"라는 이름으로 오픈한 사이트는 &lt;a href="http://scripty2.com/doc/"&gt;API 문서&lt;/a&gt;와  &lt;a href="http://scripty2.com/demos/cards/"&gt;흥미로운 데모&lt;/a&gt; 등으로 이루어져 있으며, &lt;a href="http://github.com/madrobby/scripty2/tree/master"&gt;소스 리포지토리(Git)&lt;/a&gt;도 함께 공개했습니다. "scripty2"로 리네임한 것은 종전의 이름(&lt;a href="http://script.aculo.us/"&gt;script.aculo.us&lt;/a&gt;)이 철자와 도메인에서 혼란이 빚어지기 때문이며 프로젝트를 그대로 이어가는 것이라고 &lt;a href="http://mir.aculo.us/"&gt;자신의 블로그&lt;/a&gt;에 밝혔습니다. 알파 딱지를 달고 시작하는 scripty2는 처음부터 완전히 새롭게 작성되었으며, 수년을 effect engine개발에 소진했다고 합니다.  &lt;a href="http://prototypejs.org/"&gt;Prototype&lt;/a&gt;의 팬으로서 scriptaculous와의 호환성이 완전히 배제되어 있는 것이 가장 아쉬운 점이긴 합니다만, 데모에서 보여준 막강한 애니메이션 &lt;a href="http://scripty2.com/doc/scripty2%20fx/s2/fx/transitions.html"&gt;변화(s2.fx.Transitions)&lt;/a&gt; 처리는 매혹 그 자체입니다. 새 장난감이 생겼네요. &lt;a href="http://pledgie.com/campaigns/5015"&gt;Thomas Fuchs씨에게 고맙다고 맥주 한 잔 사줬어요.&lt;/a&gt;
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1435#p1435"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1435#p1435"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1435"&gt;Hits(666)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8_jsx8IwHLJPivBRdYfORMFRDZI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8_jsx8IwHLJPivBRdYfORMFRDZI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8_jsx8IwHLJPivBRdYfORMFRDZI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8_jsx8IwHLJPivBRdYfORMFRDZI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">높이가 다른 float 요소를 벽돌처럼 정렬 - jQuery Masonry</title><link rel="alternate" type="text/html" href="http://firejune.com/1430" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="Masonry" /><category term="jQuery" /><category term="라이브러리" /><category term="CSS" /><category term="float" /><category term="벽돌" /><category term="그리드" /><category term="레이아웃" /><author><name>파이어준</name></author><updated>2009-06-26T00:03:20-07:00</updated><id>http://firejune.com/1430</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://desandro.com/resources/jquery-masonry"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0620/090620023431515159/495466.gif" width="648" height="369" alt="http://firejune.cdn2.cafe24.com/attach/0620/090620023431515159/495466.gif" class="reflect null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
CSS에서 float 속성을 이용하여 그리드 레이아웃을 꾸미려면 모든 요소들의 높이가 일치해야는 환경이 필요했습니다. 하지만 &lt;a href="http://desandro.com/resources/jquery-masonry"&gt;jQuery Masonry&lt;/a&gt;를 사용하면 높이가 서로 다른 요소들에 적용하여도 문제가 되지 않습니다. 요소를 수평으로 정렬한 후 수직을 다시 계산하여 벽돌을 끼워 맞춘듯 보기좋게 정렬해 주기 때문입니다. 이와 같은 그리드 레이아웃이 적용된 &lt;a href="http://typeneu.com/"&gt;typeneu.com&lt;/a&gt;과 &lt;a href="http://silnt.com/v4/"&gt;silnt.com&lt;/a&gt;에서 색다른 느낌을 만끽해보세요.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1430#p1430"&gt;Comments(5)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1430#p1430"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1430"&gt;Hits(614)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IWUpN3oAH8ANfwKVjsSUs5BEMU8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWUpN3oAH8ANfwKVjsSUs5BEMU8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IWUpN3oAH8ANfwKVjsSUs5BEMU8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWUpN3oAH8ANfwKVjsSUs5BEMU8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">자바스크립트로 구현한 문자인식 제스처 - FancyGestures</title><link rel="alternate" type="text/html" href="http://firejune.com/1429" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="제스처" /><category term="마우스" /><category term="jQuery" /><category term="FancyGestures" /><author><name>파이어준</name></author><updated>2009-06-24T10:02:55-07:00</updated><id>http://firejune.com/1429</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://anantgarg.com/fancygestures/"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0620/090620023342395443/791467.gif" width="561" height="302" alt="http://firejune.cdn2.cafe24.com/attach/0620/090620023342395443/791467.gif" class="reflect null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="image-align left"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0620/090620023342395443/124926.gif" width="162" height="152" alt="http://firejune.cdn2.cafe24.com/attach/0620/090620023342395443/124926.gif" class=" null"/&gt;&lt;/div&gt;&lt;a href="http://anantgarg.com/2009/05/21/jquery-fancy-gestures/"&gt;Fancy Gestures&lt;/a&gt;는 마우스 커서를 일정한 방향으로 드래그하여 특정한 이벤트를 발생시킬 수 있게하는 &lt;a href="http://jquery.com"&gt;jQuery&lt;/a&gt;용 플러그인으로 만들어진 자바스크립트 마우스 제스처 라이브러리 입니다. 위 화면은 이 플러그인의 데모로서 기본으로 내장되어 있는 문자인식 제스처를 사용하는 모습입니다. 초기 팜파일럿의 문자인식 제스처를 연상시키네요. 제스처를 설정하는 방법은 간단합니다. 좌측 그림을 참고하여 마우스 커서의 위치를 중심으로 여덟방향에 해당하는 번호  0부터 7사이의 숫자를 진행순서대로 나열하고 "jquery.fancygestures.js" 파일에 정의하면 숫자조합에 제스처를 대조하여 지정한 이벤트를 발생시키게 됩니다. '616'과 같은 페턴은 영문 'N'을 출력하는 것이죠. 소스를 까보니 이동경로를 페턴과 매치 시키려고  복잡스러운 수학 계산식을 수행하더군요.&lt;br /&gt;
&lt;br /&gt;
jquery.fancygestures.js 파일을 열어 사용자 정의를 추가한 후&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;    gestures[" "] = "0";
    gestures["?"] = "6701232";
    gestures["Back"] = "4" // added by firejune
    .
    .&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
다음 처럼 적용합니다.&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;  $(document.body).fancygestures(function (data) {
    if (data == "Back") history.back();
  });&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
참고로, 함께 사용되는 wz_jsgraphics.js는 커서의 진행 방향을 출력하기 위한 것으로 없어도 무방합니다.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1429#p1429"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1429#p1429"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1429"&gt;Hits(619)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/09FK4bBl8zT-QQ2mc2sr5GMvE0g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/09FK4bBl8zT-QQ2mc2sr5GMvE0g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/09FK4bBl8zT-QQ2mc2sr5GMvE0g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/09FK4bBl8zT-QQ2mc2sr5GMvE0g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">이미지 프로세싱 자바스크립트 라이브러리 - Phototype</title><link rel="alternate" type="text/html" href="http://firejune.com/1434" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="이미지" /><category term="Phototype" /><category term="Prototype" /><category term="PHP" /><category term="GD" /><category term="척 노리스" /><author><name>파이어준</name></author><updated>2009-06-24T08:19:05-07:00</updated><id>http://firejune.com/1434</id><content type="html">&lt;a href="http://ajaxorized.com/phototype-image-manipulation-with-javascript/"&gt;Phototype&lt;/a&gt;은 PHP의 GD라이브러리와 &lt;a href="http://www.prototypejs.org/"&gt;Prototype&lt;/a&gt; 자바스크립트 라이브러리를 이용하여 이미지 프로세싱을 할 수 있는 흥미로운 자바스크립트 라이브러리입니다. 이미지의 리사이즈, 회전, 플립, 드랍쉐도, 캡션, 각종 필터 효과  등을 메서드 체인 형식의 코딩으로 적용할 수 있습니다. 아래처럼 말이죠.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="javascript"&gt;&lt;code class="javascript"&gt;l_oPhoto = new Photo().load("test.jpg").dropShadow().flipH().makeSketchy();
document.body.appendChild(l_oPhoto.fetch());&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Phototype은 이 코드를 서버로 전송하여 렌더링 된 이미지를 수신하고 디스플레이 합니다. 아래 사진은 직접 설치하여 테스트한 것입니다. 640 x 427 (Quality 70%) 정도의 이미지를 처리하는데 약 0.2초 미만으로 수신합니다. 거의 실시간이네요. 외부 이미지를 로드하거나 경로를 인식하지 못하고, 설정값을 세밀하게 조작할 수 없다는 것이 아쉽기는 하지만 약간만 손보면 매우 쓸만한 이미지 효과를 만들어 낼 수 있을 것으로 보입니다. 재미있게도 "addChuckNorris" 메서드를 사용하면 &lt;a href="http://uwtb.egloos.com/1265888"&gt;척 노리스&lt;/a&gt;씨가 사진에 오버랩 됩니다. ㅋㅋ&lt;br /&gt;
&lt;br /&gt;
&lt;div id="fish"&gt;&lt;img src="/0622/090622130727689295/462453.jpg" width="650" height="433" alt="" /&gt;&lt;/div&gt;

 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1434#p1434"&gt;Comments(1)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1434#p1434"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1434"&gt;Hits(601)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kQGw_NfY9SxVSMPR3yACY1N5Vs4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kQGw_NfY9SxVSMPR3yACY1N5Vs4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kQGw_NfY9SxVSMPR3yACY1N5Vs4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kQGw_NfY9SxVSMPR3yACY1N5Vs4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">인터랙티브 데이터 비주얼라이제이션 - InfoVis</title><link rel="alternate" type="text/html" href="http://firejune.com/1428" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="시각화" /><category term="InfoVis" /><author><name>파이어준</name></author><updated>2009-06-19T09:41:09-07:00</updated><id>http://firejune.com/1428</id><content type="html">&lt;div id="infovis" style="width: 660px; height: 360px; background: #191919  url(/attach/0619/090619100853677269/565826.gif); overflow: hidden;"&gt;&lt;/div&gt;
&lt;div id="log" style="float: right"&gt;&lt;/div&gt;
&lt;div id="control" style="display:none;"&gt;
  &lt;input id="r-left" name="orientation" checked="checked" value="left" type="radio"/&gt;&lt;label for="r-left"&gt;left &lt;/label&gt;
  &lt;input id="r-top" name="orientation" value="top" type="radio"/&gt;&lt;label for="r-top"&gt;top &lt;/label&gt;
  &lt;input id="r-bottom" name="orientation" value="bottom" type="radio"/&gt;&lt;label for="r-bottom"&gt;bottom &lt;/label&gt;
  &lt;input id="r-right" name="orientation" value="right" type="radio"/&gt;&lt;label for="r-right"&gt;right &lt;/label&gt;
&lt;/div&gt;
&lt;!--[if IE]&gt;&lt;![endif]--&gt;



&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://thejit.org/"&gt;JavaScript InfoVis Tookit&lt;/a&gt;은 Nicolas Garcia Belmonte씨가 만든 자바스크립트로 만들어진 대화형 자료 시각화 도구입니다. 방대한 자료를 한정된(협소한) 화면에 출력하기에 안성맞춤인 이 자바스크립트 라이브러리는 각종 그래프, 가상공간형 또는 방사형 트리 등 독특하면서도 다양한 형식의 자료 시각화를 소화해 내도록 디자인된 솔루션 입니다. IE6+, FF2+, Safari3+, Opera9.5+ 브라우저에서 작동하며, BSD License를 따르고, 특정한 자바스크립트 라이브러리를 필요로 하지 않습니다.
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1428#p1428"&gt;Comments(2)&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1428#p1428"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1428"&gt;Hits(787)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/52B7HCgTR3idjIsxpMrl6gty9gI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/52B7HCgTR3idjIsxpMrl6gty9gI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/52B7HCgTR3idjIsxpMrl6gty9gI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/52B7HCgTR3idjIsxpMrl6gty9gI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">자바스크립트 호환성 테스트</title><link rel="alternate" type="text/html" href="http://firejune.com/1427" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="호환성" /><category term="테스트" /><category term="DOM Storage" /><category term="JSON" /><category term="Getter" /><category term="Setter" /><author><name>파이어준</name></author><updated>2009-06-19T09:10:32-07:00</updated><id>http://firejune.com/1427</id><content type="html">&lt;div class="image-align center"&gt;&lt;a href="http://robertnyman.com/javascript/"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0619/090619100741384863/514829.gif" width="645" height="230" alt="http://firejune.cdn2.cafe24.com/attach/0619/090619100741384863/514829.gif" class="reflect hasborder"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Robert Nyman씨는 &lt;a href="http://robertnyman.com/javascript/"&gt;자바스크립트 버전별 특징들에 대한 브라우저 단위 테스트를 시행하고 그 결과를 일목요연하게 정리하여 공개&lt;/a&gt;하였습니다. 자바스크립트 1.6부터 1.8.1로 버전이 오르면서 지원하는 여러 기능들 그리고 Getters, Setters, DOM Storage, Native JSON 등의 지원여부를 알아내는 예제 코드와 브라우저별 실행 결과를 알기 쉽게 작성했습니다. 멋지네요!
 &lt;br /&gt;&lt;br /&gt;
 &lt;a href="http://firejune.com/1427#p1427"&gt;Comments&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1427#p1427"&gt;Trackbacks&lt;/a&gt; | 
 &lt;a href="http://firejune.com/1427"&gt;Hits(811)&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yoci3OSo7f3QjMalrpsBo0QM99s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yoci3OSo7f3QjMalrpsBo0QM99s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yoci3OSo7f3QjMalrpsBo0QM99s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yoci3OSo7f3QjMalrpsBo0QM99s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title type="text">Prototype 1.6.1 RC3 배포 - Chrome, PDoc 지원</title><link rel="alternate" type="text/html" href="http://firejune.com/1426" /><category term="웹개발" /><category term="자료" /><category term="자바스크립트" /><category term="프레임웍" /><category term="Prototype" /><category term="라이브러리" /><category term="릴리즈" /><category term="PDoc" /><category term="업데이트" /><author><name>파이어준</name></author><updated>2009-06-18T17:59:45-07:00</updated><id>http://firejune.com/1426</id><content type="html">&lt;div class="image-align right"&gt;&lt;a href="http://prototypejs.org"&gt;&lt;img src="http://firejune.cdn2.cafe24.com/attach/0619/090619092127993280/223790.png" width="137" height="63" alt="http://firejune.cdn2.cafe24.com/attach/0619/090619092127993280/223790.png" class=" null"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://prototypejs.org"&gt;Prototype&lt;/a&gt; 1.6.1 RC3가 릴리즈 되었습니다. 늦은 감이 없지 않지만 RC3부터는 구글 크롬 브라우저를 공식으로 지원하게 되었습니다. 크롬만을 위한 코드가 존제하는 것은 아니고 rake test에 Chrome이 포함된 정도로 보입니다. 그리고 RC2 배포 이후에 보고된 이슈들이 처리되었는데 특히, Event#observe와 관련한 가증스런 버그들과 IE8과의 호환성 향상을 위한 개선항목들이 대표적입니다. 이 밖에 &lt;a href="http://pdoc.org/"&gt;PDoc&lt;/a&gt;을 이용하여 API문서를 빠르게 생성하는 특징이 추가되었다고 합니다. PDoc은 뭐하는 녀석일까요? (-.-a
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0jrzo2DbfJVp4r9XfHOxazvXRsE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0jrzo2DbfJVp4r9XfHOxazvXRsE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0jrzo2DbfJVp4r9XfHOxazvXRsE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0jrzo2DbfJVp4r9XfHOxazvXRsE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
