2011年9月24日土曜日

URL を QR コードに変換する Bookmarklet + CSS3 animation.

今開いているページの URL を QR コードに変換したものを
そのページ内に画像として挿入するブックマークレットを作成しました。
挿入時のアニメーションに CSS3 を使っています。
chrome 14.0.835.186, firefox 6.0.2, safari 5.1 で動作確認。
ブックマークバーなんかに登録して使うと使いやすいかと思います。

QR! <- これをブックマークに登録

  1. (function(){  
  2.   var size=150;  
  3.   var t0=50;  
  4.   var t1=32;  
  5.   var img=document.createElement('img');  
  6.   img.src='http://chart.apis.google.com/chart?cht=qr&chs='+size+'x'+size+'&choe=UTF-8&chld=H&chl='+encodeURIComponent(location.href);  
  7.   var s=img.style;  
  8.   s.opacity=0;  
  9.   s.position='absolute';  
  10.   s.top=''+(pageYOffset+t1)+'px';  
  11.   s.left=''+(-t0)+'px';  
  12.   s.zIndex=9999;  
  13.   s.boxShadow='1px 1px 5px black';  
  14.   s.borderRadius='0 15px 15px 0';  
  15.   s.webkitTransition='0.3s linear';  
  16.   s.MozTransition='0.3s linear';  
  17.   img.onclick=function(){  
  18.     s.opacity=0;  
  19.     s.left=''+(-t0)+'px';  
  20.     setTimeout(function(){  
  21.       document.body.removeChild(img);  
  22.     },1000);  
  23.   };  
  24.   document.body.appendChild(img);  
  25.   setTimeout(function(){  
  26.     s.left='0px';  
  27.     s.opacity=0.9;  
  28.   },30);  
  29. })();  
やっている事としては、<img /> タグの dom を作って、
src に google chart api の
QR の api のアドレスを代入して、まず画像を作ります。
それのスタイルをいろいろ設定した後、
body に appendChild します。
body に append した後で、left と opacity を再度代入する事で、
CSS3 transition が効くので animation して img が出現します。
img の onclick に逆のスタイル変更を設定しおけば、消えるときは逆の
アニメーションで消えていきます。
アニメーションで消えた後、ちょっと間をおいて、
body から removeChild する事で、GC 対象になるように
しています。
size とか t1 変数の値を変更する事で、見た目のサイズとか、出現位置を変更できます。
size = QRコードのサイズ
t1 = 画像の出現位置、画面の上からの距離 (px単位)

2011年9月12日月曜日

SQLite 日本語を含む文字列の長さとバイト数の出し方

文字列としての長さを出したい場合は、単純に length 関数
  1. select length('あいう');  
  2. => 3  


エンコーディングされた上でのバイト数を出したい時は、
hex で16進数表記にしてからlength をとって、2 で割る。
  1. select length(hex('あいう')) / 2;  
  2. => 9  

HTML5 Web Sql Database に使われている Sqlite のバージョンを調べるワンライナー

  1. openDatabase(1,1,1,1).transaction(function(t){t.executeSql("select sqlite_version()a",[],function(t,r){alert(r.rows.item(0).a);})});  


たとえば、Google Chrome 13.0.782.220 m というバージョンだと、Sqlite は 3.7.6.3 というバージョンらしい・・・