<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>(´ﾟдﾟ`)ﾝﾏｯ!! </title>
    <description>Ruby,JavaScriptについての備忘録として書きます。自分用です。</description>
    <link>http://nma.omaww.net/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>HTML5のcanvasで、変換マトリックスを初期化する</title>
      <description>html5のcanvasで、変換マトリックスを設定する関数の説明はたくさんあるのに、&lt;br /&gt;
それを初期化する関数がなかった。&lt;br /&gt;
rotateとかtransform,translateしたあとその変換マトリックスを初期化（つまりなにも変換しなくなる）する方法をメモ。&lt;br /&gt;
&lt;br /&gt;
まず、変換マトリックスの実体は行列である。&lt;br /&gt;
変換する際、その行列を掛けて座標を計算していると考えられるので、単に単位行列を指定すればよい。&lt;br /&gt;
&lt;br /&gt;
変換マトリックスを設定する関数はsetTransformなので、&lt;br /&gt;
その仕様に従って単位行列を作ると&lt;br /&gt;
setTransform(1,0,0,1,0,0)&lt;br /&gt;
こうなる。&lt;br /&gt;
&lt;br /&gt;
つまり、context.setTransform(1,0,0,1,0,0)を実行すれば変換マトリックスは初期化され、なにも変換しなくなる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
参考&lt;br /&gt;
&lt;a href=&quot;http://www.html5.jp/canvas/ref/method/setTransform.html&quot; target=&quot;_blank&quot;&gt;http://www.html5.jp/canvas/ref/method/setTransform.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.html5.jp/canvas/ref/method/transform.html&quot; target=&quot;_blank&quot;&gt;http://www.html5.jp/canvas/ref/method/transform.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://himaxoff.blog111.fc2.com/blog-entry-85.html&quot; target=&quot;_blank&quot;&gt;http://himaxoff.blog111.fc2.com/blog-entry-85.html&lt;/a&gt;</description> 
      <link>http://nma.omaww.net/javascript/html5%E3%81%AEcanvas%E3%81%A7%E3%80%81%E5%A4%89%E6%8F%9B%E3%83%9E%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>リンクのhrefにjavascript:void(0)とする理由（javascript:hoge()としてはいけないのか？）</title>
      <description>よく、ハイパーリンクにjavascriptをくわえる場合、&lt;br&gt;
href=&quot;#&quot;としたりhref=&quot;javascript:void(0);&quot;としたり、または代替リンク先を指定してonclickにreturn false;を付けたりもする。&lt;br&gt;
&lt;br&gt;
例１
&lt;pre class=&quot;brush:xml&quot;&gt;
&lt;a href=&quot;#&quot; onclick=&quot;hoge()&quot;&gt;リンク&lt;/a&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;hoge()&quot;&gt;リンク&lt;/a&gt;
// JavaScriptが無効になっていればhoge.htmlにアクセス。有効ならばhoge()を実行。
&lt;a href=&quot;hoge.html&quot; onclick=&quot;hoge(); return false;&quot;&gt;リンク&lt;/a&gt;
&lt;/pre&gt;
&lt;br&gt;
しかし、これを単に次のようにしてはいけないのだろうか。&lt;br&gt;
&lt;br&gt;
例２
&lt;pre class=&quot;brush:xml&quot;&gt;
&lt;a href=&quot;javascript:hoge()&quot;&gt;リンク&lt;/a&gt;
&lt;/pre&gt;
&lt;br&gt;
これなら例１の1つ目と2つ目と同じ動作をするはずだ。&lt;br&gt;
代替リンクを設定する場合や複雑なJavaScritpを処理したい場合は例で良いと思うが、一般的に例２はあまり使われていない。&lt;br&gt;
何か理由があるのだろうか？&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
ご存じの方がおられたら、コメントで教えてほしい。</description> 
      <link>http://nma.omaww.net/html/%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AEhref%E3%81%ABjavascript-void-0-%E3%81%A8%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1%EF%BC%88javascript-hoge--%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%EF%BC%9F%EF%BC%89</link> 
    </item>
    <item>
      <title>JavaScriptでHEXをRGBに変換する（速度比較）</title>
      <description>JavaScriptでカラーコードをHEXからRGBにしたり、その逆を行ったりすることは良くあると思います。&lt;br&gt;
その際に&quot;#&quot;を削除したりと、何度か文字列処理を行います。&lt;br&gt;
文字列処理は比較的重い処理なので、出来れば高速なメソッドを使用したいものです。&lt;br&gt;
&lt;br&gt;
そこで、今回はどの方法が一番早いかを検証してみました。&lt;br&gt;
今回検証したのは&lt;br&gt;
・substrを使う方法&lt;br&gt;
・replaceを使う方法&lt;br&gt;
・split,joinを使う方法&lt;br&gt;
です。&lt;br&gt;
&lt;br&gt;
検証は、以下のプログラムで行いました。
&lt;pre class=&quot;brush:jscript&quot;&gt;
t = &quot;#ff8000&quot;;
c = 1000000;

function fnc1(){
	var h = t.substr(1,6);
	return parseInt(&quot;0x&quot;+h);
}
function fnc2(){
	return parseInt(t.replace(&quot;#&quot;,&quot;0x&quot;));
}
function fnc3(){
	return parseInt(t.split(&quot;#&quot;).join(&quot;0x&quot;));
}

var st = (new Date()).getTime();
for(var n=0;n&amp;lt;c;n++){
	fnc1();
}
console.log(&quot;1: &quot;+String((new Date()).getTime() - st));

var st = (new Date()).getTime();
for(var n=0;n&amp;lt;c;n++){
	fnc2();
}
console.log(&quot;2: &quot;+String((new Date()).getTime() - st));

var st = (new Date()).getTime();
for(var n=0;n&amp;lt;c;n++){
	fnc3();
}
console.log(&quot;3: &quot;+ String((new Date()).getTime() - st));
&lt;/pre&gt;

全体的にやっつけ感満載ですが、お許しを。&lt;br&gt;
&lt;br&gt;
結果&lt;br&gt;
1: 4426&lt;br&gt;
2: 5347&lt;br&gt;
3: 6324&lt;br&gt;
となりました。&lt;br&gt;
単位は全てms。&lt;br&gt;
&lt;br&gt;
１が一番早いということで、&lt;br&gt;
substrが一番高速だと言うことになりました。意外ですね。&lt;br&gt;
&lt;br&gt;
もっともポピュラーなreplaceは2位。&lt;br&gt;
全置換以外使い道がないと思われるsplit,jpinは3位でした。</description> 
      <link>http://nma.omaww.net/javascript/javascript%E3%81%A7hex%E3%82%92rgb%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%EF%BC%88%E9%80%9F%E5%BA%A6%E6%AF%94%E8%BC%83%EF%BC%89</link> 
    </item>
    <item>
      <title>コマンドラインで同じ行に何度も出力(print)する</title>
      <description>よくインストーラ、gemとか使ってるとコマンドラインの文字が動的に変化しますよね。&lt;br /&gt;
Installing...(10%)の10%のところです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
printしたら横に流れるし、\nしたら次の行行くだけだし...&lt;br /&gt;
これが何故変化するかわからなかったので、気になって調べました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
答えは簡単。\nじゃなくて\rを使えばよかった。&lt;br /&gt;
そういえば\r\nは、タイプライター時代に\rで行頭に戻って、\nで次行へ移動。みたいな感じだったという話を聞いたことがあった（かもしれない）。&lt;br /&gt;
&lt;br /&gt;
ということで、\rで先頭に戻って上書きすればおｋでした。&lt;br /&gt;
&lt;br /&gt;
\rする前の文字列より、\rしてからprintする文字列が短いと前の文字列が消えずに見えるので注意です。</description> 
      <link>http://nma.omaww.net/%E8%B1%86%E7%9F%A5%E8%AD%98%E7%9A%84%E3%81%AA/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E5%90%8C%E3%81%98%E8%A1%8C%E3%81%AB%E4%BD%95%E5%BA%A6%E3%82%82%E5%87%BA%E5%8A%9B-print-%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>JavaScriptで配列をそれぞれ処理する(forEach)</title>
      <description>JavaやRubyには、配列を操作し、それぞれの要素を個別に処理するfor-each文がある。&lt;br&gt;
Javaは詳しく知らないが、Rubyではa.each{}で使える。&lt;br&gt;
そこで、JavaScriptにもないかと探していたところ、あまり情報がないようだがforEachというものがあった。
&lt;pre class=&quot;brush:jscript&quot;&gt;
t = 0;
a = [1,2,1,2,1,2,1,1,1,3,10];
a.forEach(function(e){ t+=e;});
alert(t); // 25
&lt;/pre&gt;
使い方は簡単。&lt;br&gt;
配列のforEachというメソッドを、処理する関数を引数にして呼びだすだけ。&lt;br&gt;
&lt;br&gt;
しかし、ある一定の条件のとき処理をスキップしたい時がある。&lt;br&gt;
その時は当然forのようにcontinueだろう・・・と思ったら違った。&lt;br&gt;
正しくはreturn。&lt;br&gt;
関数を抜けるのだから当然と言われれば当然だが、forという先入観でcontinueにしてしまった。
&lt;pre class=&quot;brush:jscript&quot;&gt;
t = 0;
a = [1,2,1,2,1,2,1,1,1,3,10];
a.forEach(function(e){ if(e==2)return; t+=e;});
alert(t); // 19
&lt;/pre&gt;
</description> 
      <link>http://nma.omaww.net/javascript/javascript%E3%81%A7%E9%85%8D%E5%88%97%E3%82%92%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B-foreach-</link> 
    </item>
    <item>
      <title>JavaScriptのクラスでのthis</title>
      <description>いままでなんとなくクラスのメンバ（インスタンス変数）を定義するときに&lt;br&gt;
&lt;pre class=&quot;brush:jscript&quot;&gt;
var Test = function(){
  this.hello = unk;
};
var a = new Test();
alert(a.hello);
&lt;/pre&gt;
としてきた。&lt;br&gt;
これで問題ない。&lt;br&gt;
&lt;br&gt;
でも、このthisの意味をあまり理解して無くて、今日なにげに&lt;br&gt;
&lt;pre class=&quot;brush:jscript&quot;&gt;
var Test = function(){
  var hello = unk;
};
var a = new Test();
alert(a.hello);
&lt;/pre&gt;
こう書いていた。&lt;br&gt;
undefinedとアラートされるからなんでかなーっておもったけど、&lt;br&gt;
やっぱりthisには意味があったんだと改めて思った。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
という備忘録。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
まとめれば、&lt;br&gt;
var　は　一時的に使うプライベート変数　で、&lt;br&gt;
this　を付ければ　メンバ変数（インスタンス変数）　にできる。&lt;br&gt;
ということだった。&lt;br&gt;</description> 
      <link>http://nma.omaww.net/javascript/javascript%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7%E3%81%AEthis</link> 
    </item>
    <item>
      <title>JavaScriptでArrayかHashか判定する</title>
      <description>JavaScriptには、変数の方を取得するための手段として、typeofが準備されていますが、&lt;br&gt;
こいつが不便で配列も連想配列(hash)もどちらも&quot;object&quot;と判定します。&lt;br&gt;
配列か連想配列かの判定はできないのです。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
ということで、配列ならarray,連想配列ならhash,その他ならそのままtypeofの値を戻す関数を作りました。&lt;br&gt;
&lt;br&gt;
classOf: &lt;br&gt;
&lt;pre class=&quot;brush:jscript&quot;&gt;
function classOf(obj){
	if((typeof obj)==&quot;object&quot;){
		if(obj.length!=undefined)return &quot;array&quot;;
		else{for(t in obj){
			if(obj[t]!=undefined)return &quot;hash&quot;;
			else return &quot;object&quot;;
		}}
	}else return (typeof obj);
}
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
これを定義してから、次のように実行してみてください。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Sample: &lt;br&gt;
&lt;pre class=&quot;brush:jscript&quot;&gt;
a = [0,1,2,3,4,5];
document.write(typeof a);// object
document.write(classOf(a));// array

b = {&quot;a&quot;:&quot;A&quot;, &quot;b&quot;:&quot;B&quot;};
document.write(typeof b);// object
document.write(classOf(b));// hash
&lt;/pre&gt;</description> 
      <link>http://nma.omaww.net/javascript/javascript%E3%81%A7array%E3%81%8Bhash%E3%81%8B%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>RubyにもろもろのDLLを簡単にインストールする（まとめ）</title>
      <description>Rubyをインストールし、使っていると、&lt;br /&gt;
&lt;div style=&quot;background-color:#ffffdf;border:solid 1px #222222;padding:10px;margin:5px 0;&quot;&gt;zlib.dll が見つからなかったため、このアプリケーションを開始出来ませんでした。&lt;br /&gt;
アプリケーションをインストールし直すとこの問題は解決される場合があります。&lt;/div&gt;&lt;br /&gt;
のようなエラーに出くわすことがあります。&lt;br /&gt;
そしてよく躓きます。のでメモ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
zlib.dll、gdbm.dll、pdcurses.dll、readline.dll&lt;br /&gt;
&lt;a href=&quot;http://file.nma.omaww.net/dlls.zip&quot; target=&quot;_blank&quot;&gt;http://file.nma.omaww.net/dlls.zip&lt;/a&gt;&lt;br /&gt;
にアクセスし、ダウンロードして解凍。&lt;br /&gt;
すると中に4つフォルダがあるので、それぞれのフォルダの中のbinフォルダにある「.dll」とつくものを&lt;br /&gt;
Rubyのインストールフォルダにあるbinフォルダにコピーします。&lt;br /&gt;
Rubyを「C:\ruby」にインストールしていれば「C:\ruby\bin\」にコピーします。&lt;br /&gt;
これで、zlib.dll、gdbm.dll、pdcurses.dll、readline.dllの4つのDLLがインストールできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このほかにも、iconv.dll,opensll.dllも合った方が安心かも知れません。&lt;br /&gt;
&lt;br /&gt;
iconv.dll&lt;br /&gt;
&lt;a href=&quot;http://www.meadowy.org/meadow/dists/snapshot/old/iconv-1.8.win32.zip&quot; target=&quot;_blank&quot;&gt;http://www.meadowy.org/meadow/dists/snapshot/old/iconv-1.8.win32.zip&lt;/a&gt;&lt;br /&gt;
にアクセスしてダウンロード。&lt;br /&gt;
それを解凍して、そのフォルダの中のlibフォルダにある「iconv.dll」を先ほどと同じRubyのbinフォルダにコピーします。&lt;br /&gt;
&lt;br /&gt;
openssl.dll&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8e_WIN32.zip&amp;can=2&amp;q=&quot; target=&quot;_blank&quot;&gt;http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8e_WIN32.zip&amp;can=2&amp;q=&lt;/a&gt;&lt;br /&gt;
にアクセスし、&lt;br /&gt;
「openssl-0.9.8e_WIN32.zip」と表示されているリンクをクリック、ダウンロード。&lt;br /&gt;
ダウンロードされたファイルを解凍し、そのフォルダの中のbinフォルダにある「libeay32.dll」と「ssleay32.dll」を先ほどと同じRubyのbinフォルダにコピーします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これでもうあのエラーには出会わずに済むと思います。</description> 
      <link>http://nma.omaww.net/ruby/ruby%E3%81%AB%E3%82%82%E3%82%8D%E3%82%82%E3%82%8D%E3%81%AEdll%E3%82%92%E7%B0%A1%E5%8D%98%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%EF%BC%88%E3%81%BE%E3%81%A8%E3%82%81%EF%BC%89</link> 
    </item>
    <item>
      <title>facebookのいいねボタンの高さを指定する</title>
      <description>facebookのいいねボタン、設置方法やタグの作り方はｇｇればいくらでも記事が出てきて、その通りにやれば作れてしまったのですが、&lt;br&gt;
１つだけ問題が発生しました。&lt;br&gt;
その問題は、『facebookのいいねボタンの高さを指定できない』ということです。&lt;br&gt;
&lt;br&gt;
参考にしたブログ記事などでは、作成されるタグがiframeとなっているのですが、&lt;br&gt;
実際作成してみるとdivタグとscriptタグの組み合わせでした。&lt;br&gt;
&lt;br&gt;
ま、そんな細かいこと関係ないか、と普通に設置してみたのですが、&lt;br&gt;
他のボタンと横一列に並べてみると、あれ、facebookのボタンだけ低い・・・。&lt;br&gt;
理由は簡単。facebookのボタンがあるiframeに、高さ(height)がCSSによって指定されていたのです。 &lt;br&gt;
&lt;br&gt;
古いタグだとiframeタグのstyle属性にheightがあるのでそれを編集すればよいのですが、&lt;br&gt;
今回作成した新しいタグにはclass属性がありません。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
ということで、無理矢理変更する方法です。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
そう、styleタグで無理矢理整えちゃえばいいのです。&lt;br&gt;
でも、普通にやるとタグに直接指定されたstyle属性が優先されheightを変更できません。&lt;br&gt;
&lt;br&gt;
そこで、&amp;quot;!important&amp;quot;の出番です。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
以下のタグをfacebookのいいねボタンのすぐ下に設置するとできました。
&lt;pre class=&quot;brush:css;&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;.fb_ltr{ height: auto !important;}&lt;/style&gt;
&lt;/pre&gt;
&lt;br&gt;
&lt;strong&gt;*2011/10/19 facebook側のHTMLタグの仕様が変わっているようなので追記します。&lt;/strong&gt;&lt;br&gt;
上記のタグではなく、以下のものに変更すればちゃんと動きました。
&lt;pre class=&quot;brush:css;&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
	.fb_iframe_widget span { display: inline-block; height: 20px;}
	.fb_iframe_widget iframe { position: absolute;}
&lt;/style&gt;
&lt;/pre&gt;</description> 
      <link>http://nma.omaww.net/_css/facebook%E3%81%AE%E3%81%84%E3%81%84%E3%81%AD%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E9%AB%98%E3%81%95%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>YouTubeとニコニコで聞いてる曲の歌詞を検索するブックマークレット作った</title>
      <description>今日は台風15号の影響で学校休み。&lt;br&gt;
時間があったから音楽聞いてたんだけど、歌詞検索って毎回めんどいなーって思った。&lt;br&gt;
ということで、一発で歌詞検索できるブックマークレット作った。&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
洋楽の歌詞が検索出来ないのが欠点。&lt;br&gt;
いや、出来ないものが多い、かな。&lt;br&gt;
Lyricsとか付加すればいいんだろうけど、そもそも今聞いてるのが洋楽かどうか判断するのがすごい難しそうなので諦めることにした。&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;(function(u){var t;/* YouTube */if(u.match(/^http\:\/\/www.youtube.com\//)){t=encodeURI(document.title.replace(/^YouTube - /,'').replace(/ - YouTube$/,''));/* NicoNico */}else if(u.match(/^http\:\/\/www.nicovideo.jp\//)){t=encodeURI(document.title.replace(/ - ニコニコ動画\(.*?\)$/,''));}t=t.replace(/【.+?】/,'').replace('高音質','').replace('PV','').replace('MV','');window.open('http://www.google.co.jp/search?q=%E6%AD%8C%E8%A9%9E goo '+t);})(location.href);&quot;&gt;歌詞検索&lt;/a&gt;
&lt;pre class=&quot;brush:jscript;&quot;&gt;
javascript:(function(u){
var t;

/* YouTube */
if(u.match(/^http\:\/\/www.youtube.com\//)){
 t=encodeURI(document.title.replace(/^YouTube - /,'').replace(/ - YouTube$/,''));

/* NicoNico */
}else if(u.match(/^http\:\/\/www.nicovideo.jp\//)){
 t=encodeURI(document.title.replace(/ - ニコニコ動画\(.*?\)$/,''));
}

t=t.replace(/【.+?】/,'').replace('高音質','').replace('PV','').replace('MV','');
window.open('http://www.google.co.jp/search?q=%E6%AD%8C%E8%A9%9E goo '+t);
})(location.href);
&lt;/pre&gt;
そういえば意外に毎日更新できてるな。&lt;br&gt;
ブログとか2日ともたないのに…。&lt;br&gt;
備忘録とブログは違うって事か</description> 
      <link>http://nma.omaww.net/javascript/youtube%E3%81%A8%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E3%81%A7%E8%81%9E%E3%81%84%E3%81%A6%E3%82%8B%E6%9B%B2%E3%81%AE%E6%AD%8C%E8%A9%9E%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E4%BD%9C%E3%81%A3%E3%81%9F</link> 
    </item>

  </channel>
</rss>