ä»ããï¼åã§ï¼HTML5ã®ãã©ãã°ï¼ããããAPI㨠File APIãç¿å¾ãããï¼JSã®å®è£ ãµã³ãã«ä»ãï¼
ä»ããï¼åã§ï¼HTML5ã® JavaScript API ã®ä½¿ãæ¹ãï¼ã¤è¦ãããã
- ï¼ï¼ãã©ãã°ï¼ããããAPI
- ç»é¢ä¸ã®è¦ç´ ãã
- ç»é¢å¤ããã
- ï¼ï¼File API
- èªã¿è¾¼ã¿ã
- æ¸ãè¾¼ã¿ãâ»ããã¯è¦ããå¿ è¦ã¯ãªãã
ã·ã³ãã«ãªãµã³ãã«ã³ã¼ãä»ãã§ï¼ãããã®å®è£ ã®æ¹æ³ãç´ æ©ãå¦ç¿ããã
â»ãµã³ãã«ã¯ï¼IE8ã®ãããªHTML5æªãµãã¼ãã®å¤ããã©ã¦ã¶ã§ã¯åããªãã®ã§æ³¨æãFirefoxãChromeã使ããã¨ã
ã§ã¯ï¼ããããï¼åã®æéã®ã«ã¦ã³ããéå§ãéä¸ãã¦èªããã
ï¼0ï¼00ãååã®ï¼ååï¼ç»é¢å ã§ã®ãã©ãã°ã»ãããã
ã¾ãï¼åä½ä¾ãè¦ã¦ã¿ããããªã³ã´ãããã¹ã±ããã«ãããããã¦ã¿ã¦ã»ããã
åä½ãµã³ãã«ï¼
http://name-of-this-site.org/coding/h...
ä¸é¨ã«ããï¼è¦ç´ ãï¼ä¸é¨ã«ãã©ãã°ã»ããããã§ããã
å®è¡æã«ã¯ï¼ãã¦ã¹ã§ã¤ããã è¦ç´ ã®æ å ±ãã¢ã©ã¼ãã§è¡¨ç¤ºãããã
ãã©ããªè¦ç´ ãï¼ã©ãã«ãããããããï¼ããåããã®ã§
- ãã«ã¼ãã»ãã¹ã±ãã
- ååã®ã·ã§ããã³ã°ã«ã¼ã
- ã²ã¼ã ã®é§ã®ç§»å
ãªã©ãå®è£ ã§ããã
ã³ã¼ãã¨ãã¦ã¯ï¼ä»¥ä¸ã®è¦ç´ ãããã°å®ç¾ã§ããã
- ï¼ï¼ï¼ãã©ãã°ã§ããè¦ç´ ã
- draggable="true" ã®å±æ§ãæå®ã
- ondragstartã¤ãã³ãã§ï¼ãã©ãã°ãããã¼ã¿ã®ä¿ç®¡ã
- ï¼ï¼ï¼ããããã§ããè¦ç´ ã
- ondragoverã¤ãã³ãã§ï¼ããããã®è¨±å¯ã
- ondropã¤ãã³ãã§ï¼ããããæã®ãã¼ã¿åãåºãã
ãã®ï¼è¦ç´ ã»ï¼é ç®ãããã°ããã
ä¸è¨ã®è¦ç¹ãè¸ã¾ãã¤ã¤ï¼å ·ä½çãªã³ã¼ããã¡ãã£ã¨çºãã¦ã¿ãããããã¯çå£ã«èªã¾ãï¼ã¡ãã£ã¨ã§ãããã³ã¡ã³ãã«æ³¨ç®ãããã
<!DOCTYPE html> <meta charset="utf-8"> <title>HTML5ã»ãã©ãã°ï¼ããããã®ãµã³ãã«ï¼</title> <style> div { border : solid 1px black; margin : 10px; padding : 10px; background-color : yellow; } </style> <h3>HTML5ã®ãã©ãã°ããããã®ãµã³ãã«ï¼</h3> <!-- ãã©ãã°ã§ããè¦ç´ --> <div draggable="true" ondragstart="f1(event)">ãªã³ã´</div> <div draggable="true" ondragstart="f1(event)">ããã</div> <div draggable="true" ondragstart="f1(event)">ã¿ãã</div> â <!-- ããããã§ããè¦ç´ --> <div ondragover="f2(event);" ondrop="f3(event)"> ãã«ã¼ããã¹ã±ãã<br> ï¼æç©ãããããã§ãã¾ãï¼ </div> <script> // ãã©ãã°éå§æã®ã¤ãã³ã function f1( event ) { // ãã©ãã°è¦ç´ ã®ä¸èº«ã®æååãåå¾ var s = event.target.innerHTML; // ãã©ãã°ã¤ãã³ãã«æååãæ ¼ç´ event.dataTransfer.setData("text/plain", s); } // ããããåãä»ãå¤å® function f2( event ) { // ãããããåãä»ãã // ï¼ã¤ãã³ãã®ããã©ã«ãåä½ã§ããããããã®æå¦ãè¡ãªããªãï¼ event.preventDefault(); // ãããç¡ãã¨ããããä¸å¯è½ã«ãªãã } // ããããå¦ç function f3(event) { // ãã¼ã¸ã®é·ç§»ãé²æ¢ //ï¼ããããªãã¨ãã©ãã°å 容ã®æååã¸ãã©ã¦ã¶ãé·ç§»ããï¼ event.preventDefault(); // ã¤ãã³ãã«æ ¼ç´ãããæååãã¼ã¿ãåãåºã var s = event.dataTransfer.getData("text/plain"); // 表示 alert(s); } </script>
ããã ãã
é¢æ°ï¼ã¤ãã³ãï¼ãï¼ã¤ã¨ï¼draggable="true" ã®å±æ§æå®ã§OKã
ç»é¢å ã§ã®ãã©ãã°ã»ãããã APIã®å©ç¨ã¯ä»¥ä¸ã
ï¼å¾åã®1ï¼30ã3ï¼00ï¼ç»é¢å¤ããã®ãã©ãã°ã»ãããã
ãã©ã¦ã¶ã®å¤ãããã©ãã°ã»ããããããããã¡ã¤ã«ãï¼File APIã§èªã¿åãã
åä½ä¾ã¯ãã¡ãã
åä½ãµã³ãã«ï¼
http://name-of-this-site.org/coding/h...
ãããã«å°ããªãã¡ã¤ã«ããããããã¦ã¿ããã
ä½ã§ããããã·ã§ã¼ãã«ããããããããã¦ãOKã
ãããããããã¡ã¤ã«ã®æ å ±ãï¼ã¢ã©ã¼ãã§è¡¨ç¤ºãããã
ãã®ã³ã¼ããï¼ï¼ã¤ã®è¦ç´ ãããªãã
- ï¼ï¼ï¼ããããããè¦ç´ ã
- ï¼ï¼ï¼ããããæã®ã¤ãã³ãã
- ãããããããã¡ã¤ã«ã FileReader ã¨ãããªãã¸ã§ã¯ãã§èªã¿åãã
å ·ä½çãªã³ã¼ãã¯ä¸è¨ããã©ãã¨ã ãè¦ã¦ã¿ããã
<!DOCTYPE html> <meta charset="utf-8"> <title>HTML5ã»ãã©ãã°ï¼ããããã®ãµã³ãã«ï¼</title> <style> div { border : solid 1px black; padding : 10px; background-color : yellow; } </style> <h3>HTML5ã®ãã©ãã°ããããã®ãµã³ãã«ï¼</h3> <div ondragover="f1(event);" ondrop="f2(event)"> ããã«ãã¡ã¤ã«ããããããã¦ã </div> <script> // ããããåãä»ãå¤å® function f1( event ) { // ãããããåãä»ãã event.preventDefault(); } // ããããå¦ç function f2(event) { // ãã¼ã¸ã®é·ç§»ãé²æ¢ //ï¼ããããªãã¨ãã©ãã°å 容ã®æååã¸ãã©ã¦ã¶ãé·ç§»ããï¼ event.preventDefault(); // ã¤ãã³ãã«æ ¼ç´ããããã¡ã¤ã«ãåãåºã var f = event.dataTransfer.files[0]; // ãã¡ã¤ã«æ å ±ã表示 alert( "ãã¡ã¤ã«åï¼" + f.name + "\nãã¡ã¤ã«ã®åï¼" + f.type + "\nãã¡ã¤ã«ãµã¤ãºï¼" + f.size / 1000 + " KB " + "\næçµæ´æ°æ¥æï¼" + f.lastModifiedDate ); // ãã¡ã¤ã«å 容ã®èªã¿åã var reader = new FileReader(); // ãã¡ã¤ã«ãèªã¿åããªãã¸ã§ã¯ã reader.onloadend = function(){ alert("ãã¡ã¤ã«ã®å 容ï¼" + reader.result); }; reader.readAsDataURL( f ); } </script>
- ondragoverã§ãããããã®åãä»ã許å¯ã
- ondropã§ãå®éã«ããããããæã®å¦çã
ã¨ããï¼ã¤ã®ã¤ãã³ãããããã¨ãè¦ãã¦ãããã
File APIã§ãã¡ã¤ã«æ å ±ãèªã¿åããã®ã¯
- ãã¡ã¤ã«ãè¦ç´ ã«ããããããæ
- ãã¡ã¤ã«é¸æãã¤ã¢ãã°ã§ãã¡ã¤ã«ãé¸ãã æ
ãªã©ã
å©ç¨ä¾ã¨ãã¦ã¯ï¼
- èªã¿åã£ãæ å ±ãããã«Ajaxã§ãµã¼ãéä¿¡ããã°ï¼ããããããã ãã®ä½¿ããããã¢ãããã¼ããã§ããã
- ãããã¯ï¼èªã¿åã£ãæ å ±ãããã«ç»é¢è¡¨ç¤ºããã°ï¼ã¢ããç¨ã®ãµã ãã¤ã«è¡¨ç¤ºãï¼ç¢ºèªãã©ã¼ã ãå®ç¾ã§ããã
ããã File API ã§ããã
ããã¾ã§ã§ï¼åã
HTML5ã® Drag & Drop API ã¨ï¼File API ã®ä½¿ãæ¹ãè¦ããã
ä»å¾ï¼ãããã®APIã使ãããæã«ã¯ï¼åºç¤ãè¸ã¾ãã¦èªåã§å®è£ ãããã¨ãã§ããã
åèè³æ
ããã«è©³ããç¥ãããã®ãã¼ã¸ã
ãã©ãã°ã»ããããã®åºç¤ï¼
ãã©ãã°ï¼ããããâHTML5ã®APIãããã³ãé¢é£ä»æ§
http://www.htmq.com/dnd/
- ãã©ãã°ï¼ãããããç解ããã«ã¯ããã©ãã°æä½ã¨ããããæä½ãåãã¦èããã¨ç解ãããã
- ãã©ãã°æä½ã¯è¦ç´ ãªã©ã®ãã¼ã¿ããã¦ã¹ã§ã¤ããã§å¼ãããããã«åãããã¨
- ããããæä½ã¯ãã®åããããã¼ã¿ãããããå ã®è¦ç´ å ã«é ç½®ãããã¨
Drag and Drop - Drag and Dropã®ãµã³ãã« - HTML5 JavaScript APIå ¥é
http://javascript-api.sophia-it.com/r...
- ãã©ã¦ã¶å¤ã¨ã®ãã¼ã¿ã®ããåããå¯è½ã§ããã©ãã°ããããã¼ã«ã«ãã¡ã¤ã«ã®ä¸èº«ãFile APIã使ã£ã¦åç §ãããã¨ãã§ãã¾ãã
ãã©ãã°ï¼ãããããããï¼(1/5):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=377001
- ãã©ãã°ããã ããªãå±æ§ï¼ã¤
ãã©ãã°ï¼ãããããããï¼(2/5):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=377...
- ããããå¯è½ã«ãã
ãã©ãã°ï¼ãããããããï¼(3/5):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=377...
- ãã©ãã°ãåãä»ãã
ãã©ãã°ï¼ãããããããï¼(4/5):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=377...
- ãã©ãã°ï¼ããããã§ãã¼ã¿ãåã渡ãå¦ç
ãã©ãã°ï¼ãããããããï¼(5/5):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=377...
- ãã©ãã°ï¼ããããã§ãã¡ã¤ã«ãèªã¿è¾¼ã
ãã©ãã°ã»ããããã®è©³ç´°ï¼
詳解! HTML 5ã¨é¢é£APIã®ææ°åå - æ°ã¿ã°&APIç·¨ (7) ãã©ãã°&ããããAPI | ãã¤ãããã¥ã¼ã¹
http://news.mynavi.jp/special/2009/ht...
- ãdraggable="true"ãã¨ããå±æ§å¤ãã»ãããããããã«ããã対象ã®è¦ç´ ããã©ãã°å¯è½ã¨ãªã
- ã¡ãªã¿ã«ãimgè¦ç´ ãaè¦ç´ (hrefã®æå®ãå¿ è¦)ã¯ããã©ã«ãã§ãã©ãã°å¯è½
- ãããããåãä»ããè¦ç´ ã«å¯¾ãã¦ã¯ãdragoverã¤ãã³ãå ã§ãã¤ãã³ããªãã¸ã§ã¯ã.preventDefault()ããå¼ã³åºãå¿ è¦ãããã
- dragoverã¤ãã³ãã®ããã©ã«ãåä½ããããããæå¦ãã«ãªã£ã¦ããããããã®ããã©ã«ãåä½ãåæ¢ããªãã¨ããããããåãä»ãããã¨ãã§ããªãã
JavaScriptããã°ã©ãã³ã°è¬åº§ããã©ãã°ã¢ã³ãããããã«ã¤ãã¦ã
http://hakuhin.jp/js/drag_drop.html
- ããã©ã«ãã®ããããã«ã¤ãã¦ãã¨ã¬ã¡ã³ãã®ç¨®é¡ã«ãã£ã¦ã¯ããã¦ã¹ã§ããããæä½ãè¡ãã¨ãããã©ã«ãã§åãåããçºçãä¾ãã°ãINPUT è¦ç´ ã«ãã©ãã°ããå ´åãæååã®åãåããçºç
javascript - html5 drag/drop e.stopPropagation(); - Stack Overflow
http://stackoverflow.com/questions/20...
- ondrop
- e.stopPropagation(); // Stops parent elements from receiving event.
- e.preventDefault(); // Stops some browsers from redirecting.
ãã©ãã°ã»ããããAPIã®ä½¿ãéã«ã¤ãã¦ã
ãå¤é¨ãã¡ã¤ã«ã®èªã¿è¾¼ã¿ãã¯ï¼Gmailã®ãããªã¡ã¼ã©ã¼ã®æ·»ä»ãã¡ã¤ã«ä½æå¦çã§å½¹ç«ã¤ã
ãããHTAãªã©ã«çµã¿è¾¼ã¿ï¼WSHã®FileSystemObjectã¨åããã¦æ´»ç¨ãã¦ãããã
ãã¤ãã£ã HTML5 ãã©ãã°ï¼ãããã - HTML5 Rocks
http://www.html5rocks.com/ja/tutorial...
- DnD ãå©ç¨ããå¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãDnD ã使ç¨ããªãã¨æä½æ§ãããããã¾ããã
- ãã¨ãã°ããã§ã¹ ã²ã¼ã ã®é§
Gmailããã©ãã°ï¼ããããã§ãã¡ã¤ã«æ·»ä»å¯è½ã« -INTERNET Watch
http://internet.watch.impress.co.jp/d...
- ãã¡ã¤ã«ãé¸æããGmailã®ãã©ã¦ã¶ã¼ã¦ã£ã³ãã¦ã®ä¸ã«ãã©ãã°ãã¦ããã¨ã件åãå ¥åãããã£ã¼ã«ãä»è¿ã«ãããã«ãã¡ã¤ã«ããããããã¨ãã大ããªã¡ãã»ã¼ã¸ã表示ãããã-ããã«ãã¡ã¤ã«ããããããããã¨ã§æ·»ä»ã§ããã
HTML5&CSS&JSã§Windows 7ãVistaåãã®ã¢ããªãä½ãæ¹æ³ » blueskisã®ããã°
http://blueskis.wktk.so/blog/2012/09/...
- HTML5ã¨CSS3ã§Windowsã¢ããªãéçºããæ¹æ³(9xç³»~8ã¾ã§å¯¾å¿)
- ãã®HTML5&CSS3&JavaScriptã§éçºã§ããæè¡ã¯HTA
- HTML5ãCSS3ãJSã§ã¢ãã¤ã«ã¢ããªéçºãã½ããéçºã主æµã«ãªã£ã¦ãã¦ããç¾ä»£ãHTAã注ç®ããã¦ãããã¯ã
ããããï¼ãªã¹ããã½ã¼ãããUIã¯ï¼Drag Drop APIã ãã§ã¯å®ç¾ã§ããªãã
å¤é¨ã©ã¤ãã©ãªã使ãã
ã¾ãï¼onmouseoverãªã©ã®å¤ãAPIã®ã»ãã便å©ãªå ´åãããï¼æ°ããAPIãæªãè¨ãå ´åãããã
HTML5ãã©ãã°ï¼ããããAPIãå©ç¨ããè¶ è»½éã®ä¸¦ã³æ¿ãç¨jQueryãã©ã°ã¤ã³ãHTML5 Sortableã | Chrome Life
http://www.chrome-life.com/html5/5528/
- HTML5ãã©ãã°ï¼ããããAPIãå©ç¨ããè¶ è»½éã®ä¸¦ã³æ¿ãç¨jQueryãã©ã°ã¤ã³ãHTML5 Sortableãã¯ããã¤ãã£ãHTML5ã®ãã©ãã°ï¼ããããAPIã使ç¨ãã¦æ§ç¯ããã¦ããã®ã§è¶ 軽éã§ãã
æ¬ã®è«: QuirksBlog: HTML5ã®ãã©ãã°ï¼ããããã¯NG
http://cpplover.blogspot.jp/2009/09/q...
- Webéçºè ã¯ãHTML5ã®ãã©ãã°ï¼ããããã使ããªã絶対使ããªãRFC2119ã§è¦å®ããã¦ããMUST NOTã®æå³ã§ä½¿ããªã使ãããããå¾æ¥éãã®ã¹ã¯ãªããã§å®è£ ããã
File APIã«ã¤ãã¦ï¼
é£è¼ï¼äººæ°é ã«èª¬æããåãã¦ã®HTML5éçºï¼JavaScriptã§ãã¡ã¤ã«æä½ï¼ï¼ File APIã使ãããªãã (1/2) - ï¼ IT
http://www.atmarkit.co.jp/ait/article...
- "ãã¡ã¤ã«å :" + f.name + "ãã¡ã¤ã«ã®å:" + f.type + "ãã¡ã¤ã«ãµã¤ãº:" + f.size / 1000 + " KB "
HTML5ã®File APIã§ãã¼ã«ã«ãã¡ã¤ã«æ å ±åå¾ãã¦ããã!!! | ã¨ãã©ãWEB
http://tokidoki-web.com/2013/08/file-...
- 'æçµæ´æ°æ¥æï¼' + fileVal.lastModifiedDate
File APIã«ãããã¡ã¤ã«ã¢ã¯ã»ã¹(2/4):JavaScriptã«ããHTML5ããã°ã©ãã³ã°å ¥é
http://libro.tuyano.com/index3?id=384...
- æçµä¿®æ£æ¥ã¯modifyã§ã¯ãªããlastModifiedDateã«ãªã£ã¦ããããã¾ãã
» HTML5 ã® File API ã§ãã©ãã°ï¼ãããããã TECHSCORE BLOG
http://www.techscore.com/blog/2012/11...
- fileReader.onload:ãevent.target.result ã«èªã¿è¾¼ãã ãã¡ã¤ã«ã®å 容ãå ¥ã£ã¦ãã¾ã.
- ãã©ãã°ï¼ããããã§ãã¡ã¤ã«ã¢ãããã¼ãããå ´å㯠result ã®å 容ã Ajax ã§ãµã¼ãã«éä¿¡ãã¾ããã!
y.okano blog: HTML5 ãã©ãã°&ããããã§ãã¡ã¤ã«ãã¢ãããã¼ã
http://yokano-jp.blogspot.jp/2013/07/...
- ã¤ãã³ããªãã¸ã§ã¯ãã® dataTransfer ãããã¡ã¤ã«ãåå¾ãã FormData ãä½æãã¦ãã¡ã¤ã«ã追å ãã Ajax ã§ãã¡ã¤ã«ãéä¿¡ãã
ãã©ãã°&ããããã§ã¤ã¡ã¼ã¸ãã¡ã¤ã«ãã¢ãããã¼ãã§ãããHTML5 File Uploadã | DesignDevelop
http://design-develop.net/web-design/...
- ãã¡ã¤ã«ããã¼ã«ã«ããé¸æãã¦ã¢ãããã¼ãããã¨ããã®ã¯ç´æçã§ã¯ãªãããªãã©ã·ã¼ãä½ã層ã«ã¯éå£ã«ããªããã¾ã
- ãã¡ã¤ã«ã®ã¢ãããã¼ããç°¡åã«ãã¦ãããããã©ãã°&ããããã§ã¤ã¡ã¼ã¸ãã¡ã¤ã«ãã¢ãããã¼ãã§ãããHTML5 File Uploadãã¨ããã©ã¤ãã©ãª
IE8ã§ã¯HTML5ãå ¨ãåããªããï¼Windows XPã§ã¯IEã®ãã¼ã¸ã§ã³ã8ã¾ã§ããã¤ã³ã¹ãã¼ã«ã§ããªã件ã«ã¤ãã¦ï¼
HTML5ãCSS3ã«IE8以åã®å¤ããã©ã¦ã¶ã対å¿ãããæ¹æ³ : åå¿è ã«ããããã°ã®åå¼·ã®ããã®ããã°
http://blog.livedoor.jp/kamikaze_cycl...
- IE 8ã¯ãã¾ã£ããHTML5ã®ã¿ã°ã«ã¯å¯¾å¿ãã¦ããããIE 8ãããããåã®ãã¼ã¸ã§ã³ã§ã¯ãHTML5ãCSS3ãå©ç¨ããä¸ã§ã¯åé¡ã¨ãªãã¾ãã
- ç¹ã«ãWindows XPã¯2014å¹´ã®4æã«ãµãã¼ããåãã¾ãããXPã§ã¯IEã¯8ã¾ã§ãã使ç¨ã§ãã¾ããã
CSS3ã»HTML5ã®ä¸»è¦ãã©ã¦ã¶å¯¾å¿ç¶æ³ä¸è¦§ ï½ HTML5 – CSS3 mag
http://html5-css3.jp/useful/css3-html...
ãªãï¼ãµã³ãã«ä¸ã®HTML5ã§ã¯ï¼htmlã¿ã°ãbodyã¿ã°ãçç¥ããã
html5:çç¥ã§ããè¦ç´ : ã¾ããã«Webå¶ä½
http://artmo.cocolog-nifty.com/blog/2...
- ï¼!DOCTYPE htmlï¼ ï¼meta charset="utf-8"ï¼ ï¼titleï¼ã°ã©ãã¼ã·ã§ã³ï¼/titleï¼
é¢é£ããè¨äºï¼
ä»ããï¼åã§ï¼Smartyã®ä½¿ãæ¹ãè¦ããããï¼PHPãã³ãã¬ã¼ãã¨ã³ã¸ã³ã®å
¥éï¼
http://language-and-engineering.hatenablog.jp/entry/20130107/SmartyPHPTemplat...
ä»ããï¼åã§ï¼viã³ãã³ãã®ä½¿ãæ¹ãè¦ãã¦ãããããã®ãã¼ã¸
http://language-and-engineering.hatenablog.jp/entry/20121207/p1
ãªãã¨ãªãCSSã使ã£ã¦ãã人ãï¼CSSä¸ç´è
ã«ãªãããã«ãï¼ãå´©ããªãã¬ã¤ã¢ã¦ããã®ã»ãªãªã¼ï¼
http://language-and-engineering.hatenablog.jp/entry/20110216/p1
ãã¦ã¹ã§ã½ã¼ãã§ãããªã¹ããä½ãããã®JavaScriptã©ã¤ãã©ãªï¼è¡è¿½å ã»åé¤ã»åºå®è¡ã®è¨å®ãå¯è½ï¼
http://language-and-engineering.hatenablog.jp/entry/20090902/p1