<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:lang="ja">
<channel>
<title>ハブろぐ - havelog.ayumusato.com</title>
<link>http://havelog.ayumusato.com/</link>
<atom:link href="http://havelog.ayumusato.com/rss2.xml" rel="self" type="application/rss+xml" />
<description>ahomuのブログ。PHP, JavaScript, HTML5, a-blog cmsなどWeb開発系のトピック。あと、酒と食べ物。</description>
<language>ja</language>
<copyright>Copyright (C) 2009 ハブろぐ - havelog.ayumusato.com All rights reserved.</copyright>
<lastBuildDate>Wed, 25 Jan 2012 09:38:34 +0900</lastBuildDate>
<generator>a-blog cms</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<item>
<dc:creator>あほむ</dc:creator>
<title>SlimでIE条件付コメント的なHTML要素を出力</title>
<link>http://havelog.ayumusato.com/develop/ruby/e318-slim_ie_conditional.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>Rubyしてます！</h2>
<p>SlimはRubyのテンプレートエンジンです．</p>
<ul>
<li><a href="http://slim-lang.com/index.html" title="Slim A Fast, Lightweight Template Engine for Ruby">Slim - A Fast, Lightweight Template Engine for Ruby</a></li>
<li><a href="https://github.com/stonean/slim" title="stonean/slim GitHub">stonean/slim - GitHub</a></li>
</ul>
<p><a href="http://www.padrinorb.com/" title="The Elegant Ruby Web Framework - Padrino Ruby Web Framework">Padrino</a>が対応していたので使ってみている．<a href="http://www.jetbrains.com/ruby/" title="Ruby on Rails IDE :: JetBrains RubyMine">RubyMine</a>が対応していないのが惜しいので，<a href="http://youtrack.jetbrains.net/issue/RUBY-6967" title="add slim templating support : RUBY-6967">add slim templating support : RUBY-6967</a>にvoteしておいた．</p>
<p>んで，冒頭のタイトル通りIE条件付コメントなHTMLを，なんとか出力できたのでスニペットのシェアを兼ねてメモエントリ．以下の例示はHTMLの冒頭部分のみです．</p>
<h3>Slimテンプレート</h3>
<p>以下のようにSlimテンプレートに記述しました．</p>
<pre class="brush:plain">
doctype 5
/![if lt IE 7]><html class="no-js ie6 oldIE" lang="ja"><![endif]
/![if IE 7]><html class="no-js ie7 oldIE" lang="ja"><![endif]
/![if IE 8]><html class="no-js ie8 oldIE" lang="ja"><![endif]
/![if gt IE 8]><!
html class="no-js" lang="ja"
  /!<![endif]
  head
</pre>
<p>素直にSlimの<a href="http://slim-lang.com/docs.html#html-conditional-comments" title="Slim - Docs">html-conditional-comments</a>を使うと，その場でhtml要素が閉じられてしまうので，普通のhtmlコメントの記法を利用しています．</p>
<h3>出力の結果</h3>
<p>こうやって出力されました．</p>
<pre class="brush:html">
<!DOCTYPE html><!--[if lt IE 7]><html class="no-js ie6 oldIE" lang="ja"><![endif]--><!--[if IE 7]><html class="no-js ie7 oldIE" lang="ja"><![endif]--><!--[if IE 8]><html class="no-js ie8 oldIE" lang="ja"><![endif]-->
<html class="no-js" lang="ja">
  <!--<![endif]-->
  <head>
</pre>
<p>なんか気持ち悪いけどできた〜．</p>
<p>もうちょっとスマートに書ければいいのだけど難しそう．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>Ruby</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/ruby/e318-slim_ie_conditional.html</guid>
<pubDate>Wed, 25 Jan 2012 09:42:22 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>JavaScriptの初見で読みづらいシンタックス＆パターン9種</title>
<link>http://havelog.ayumusato.com/develop/javascript/e316-javascript_evil_syntax.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>JavaScriptの暗部を感じるカオス</h2>
<p>JavaScriptのライブラリを読み解いていると，<strong>「お前は何を言っているんだ状態」</strong>に陥ることがよくあります．難解なコードを通り越して黒魔術になるとついていけません…．</p>
<p>そんなコードリーディングをする中で，初見では意味が分からなかったり，分かりづらかったりした記法をまとめてみます．コードリーディングの一助になりますれば幸い．</p>
<h2>eachな感じのループ×2</h2>
<p>比較的簡単な類ですが，定石パターンなので一応．色々あると思いますが，自分がよく使う2パターンだけ紹介します．</p>
<pre class="brush:javascript">
var elms = [1, 2, 3],
    e,
    i = 0, 

while (e = elms[i++]) {
    // おぅふ
    // i -> 1
}
</pre>
<p>単純に配列から1個ずつ取り出すだけなら上記のような感じです．</p>
<pre class="brush:javascript">
var elms = [1, 2, 3],
    e,
    i = 0,
    iz = elms.length;

for (; i＜iz; i++) {
    e = elms[i];
    // おぅふおぅふ
    // i -> 0
}
</pre>
<p><code>i</code>が大事ならforを使います．whileの例だと，ループ回るたびにすぐに<code>i</code>がインクリメントされますが，forの例ならブロック内の<code>i</code>はインクリメントされずに残るので．</p>
<p><small>たとえば<code>i++</code>と<code>++i</code>を使い分け始めると，それだけでも結構カオスですよね．基本的にはバッドパターンかもしれんのですが，自分しか手を入れないブツなら使ってしまう感じ．</small></p>
<h2>文字列で呼び出すメソッド・プロパティを指定</h2>
<p>これは結構，知った当初は目から鱗でした．理解するとまあ確かにというトコですが．</p>
<p>PHPだと<code>$this-&gt;$method()</code>とかやるようなアレと同じですね．</p>
<pre class="brush:javascript">
var obj = {};
obj.someFunc = function() { alert('func!'); };

var method = 'someFunc';
obj[method](); // 'func!'
</pre>
<p>プロパティなら後ろの () を無くすだけです．</p>
<p><small>この例でメソッド・プロパティという呼び方が常に正しい感じはしませんが，便宜上で．</small></p>
<h2>AND的に〜〜であれば，〜〜する</h2>
<p>制御構文使わない分，ちょっとは速いのかな？</p>
<pre class="javascript">
var ok = true,
    obj = {};

ok && (obj.prop = 'okらしいから代入するね');
</pre>
<h2>OR的に〜〜でなければ，〜〜する</h2>
<p>個人的にはコレのほうがよく使うかも．あるプロパティが未定義であれば，ホニャララを入れるよ，とか．</p>
<pre class="javascript">
var obj = {};

obj.prop || (obj.prop = 'undefinedっぽいから代入するね');
</pre>
<br class="clearHidden" />
</div>
<p class="continueBtn"><a href="http://havelog.ayumusato.com/develop/javascript/e316-javascript_evil_syntax.html">「JavaScriptの初見で読みづらいシンタックス＆パターン9種」の続きを読む</a></p>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e316-javascript_evil_syntax.html</guid>
<pubDate>Tue, 10 Jan 2012 11:36:17 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>2012年あけましておめでとうひつまぶし</title>
<link>http://havelog.ayumusato.com/food/e315-new_year_hitsumabushi.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>あけましておめでとうございます</h2>
<p>あけましておめでとうござますということで，初詣とひつまぶし初めの写真をば．</p>
<p>どうでもよいですが，新年初のショックは，<code>Deffered</code>と<code>Deferred</code>のスペルを間違えていたことでした．後者が正解... lol</p>
<p>Deferredについては，<a href="http://wiki.commonjs.org/wiki/Promises/A" title="Promises/A - CommonJS Spec Wiki">Promises/A</a>とか<a href="http://hamalog.tumblr.com/post/5159447047/jquery-deferred" title="jQuery.Deferredって何">jQuery.Deferredって何 - Takazudo hamalog</a>とかを見ていたのですが，実装と期待される動作を整理するので結構四苦八苦してるところです</p>
<h2>熱田神宮</h2>
<p>名古屋在住ですので，熱田神宮です．わりと毎年行ってるんですが，たびたびすげー人混みを並んで五円玉を投げ込むんですよね....</p>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7003/6659018261_ae3359fc18_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7003/6659018261_ae3359fc18_z.jpg" alt="熱田神宮の購買？" width="540" height="359" />
</a>
<p class="caption">あー，すごい人･･･</p>
</div>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7150/6659041953_e8e267389f_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7150/6659041953_e8e267389f_z.jpg" alt="割ときれいな建物" width="540" height="359" />
</a>
<p class="caption">なんだろうこの建物？</p>
</div>
<h2>ひつまぶし初め</h2>
<p>蓬莱軒行ったら，<em>2時間半待ち</em>という耐えがたい屈辱を味わったので諦めて，駅前の他のお店に流れました．十分おいしゅうございました．</p>
<p>同居人の分まで奢ることになっておりましたが，思わず<strong>特上ひつまぶし</strong>二人前という漢らしいオーダーを通してしまいました．</p>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7022/6659085103_cfcc71ea92_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7022/6659085103_cfcc71ea92_z.jpg" alt="肝吸いまでついてます" width="540" height="359" />
</a>
<p class="caption">肝吸いまでついてます</p>
</div>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7148/6659082171_4a90924c29_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7148/6659082171_4a90924c29_z.jpg" alt="特上ひつまぶしの輝き" width="540" height="359" />
</a>
<p class="caption">特上ひつまぶしの輝き</p>
</div>
<p>ひつまぶしは，そのまま食べたり，薬味をあえたり，だし茶漬けにしたり，色々な食べ方をします．特上ひつまぶしはノーマルの1.5倍量のうなぎが乗っています．だからこそ，一杯一杯を贅沢にうなぎが乗った状態で頂けて幸せです．</p>
<p><small>贅沢するときはケチっちゃだめ</small></p>
<h2>本年もよろしくお願い致します</h2>
<p>今年はGitHubを充実させていきたい気もしつつ，よろしくお願い致しまする．去年の暮れからJS機運を高まらせまくったので，次はRubyしたい欲･･･．</p>
<ul>
<li><a href="https://github.com/ahomu" title="ahomu's Profile - GitHub">ahomu's Profile - GitHub</a></li>
<li><a href="https://github.com/ahomu/Ah" title="ahomu/Ah - GitHub">ahomu/Ah - GitHub</a></li>
<li><a href="https://github.com/ahomu/Clayworks" title="ahomu/Clayworks - GitHub">ahomu/Clayworks - GitHub</a></li>
<li><a href="https://github.com/ahomu/Hayate" title="ahomu/Hayate - GitHub">ahomu/Hayate - GitHub</a></li>
</ul>
<br class="clearHidden" />
</div>
]]></description>
<category>食べもの</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/food/e315-new_year_hitsumabushi.html</guid>
<pubDate>Sun, 08 Jan 2012 23:37:01 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>年末年始でセレクタエンジンHayate.jsを書いてみた</title>
<link>http://havelog.ayumusato.com/develop/javascript/e314-selector_engine.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>年末年始の課題</h2>
<p>年末年始の合間を縫いつつセレクタエンジンを書いてみました．・・・なんか大仰な響きだけはしますね．例によってコンセプトの足りてない<em>習作系の再発明品</em>です．</p>
<p>いくつかのpseudoについて真剣に解決が見つからなかったり，サボったりしていますが，とりあえず<a href="http://mootools.net/slickspeed/" title="SlickSpeed Selectors Test">SlickSpeed Selectors Test</a>のデフォルトセットは通るようにしている（はず）です．</p>
<h2>Hayate.js</h2>
<ul>
<li><a href="https://github.com/ahomu/Hayate" title="ahomu/Hayate - GitHub">ahomu/Hayate - GitHub</a></li>
<li><a href="https://github.com/ahomu/Hayate/blob/master/hayate.js" title="hayate.js at master from ahomu/Hayate - GitHub">hayate.js at master from ahomu/Hayate - GitHub</a></li>
</ul>
<p><small>バンダイチャンネルで某アニメを見ながら書き始めたので，こんな名前がついていますが，より多く作業中に見たアニメは<a href="http://www.tbs.co.jp/anime/haganai/" title="僕は友達が少ない 公式ホームページ｜TBSテレビ">僕は友達が少ない</a>でした．ついついラノベ原作のほうも買ってしまいましたよHAHAHA...</small></p>
<h3>振り返ると</h3>
<p>学びとしては...</p>
<ul>
<li>CSSでも普段つかっていなかったセレクタを振り返れた</li>
<li>だってCSS3のセレクタとかあんまり使いませんよね...</li>
<li>処理速度のシビアなチューニングを垣間見た</li>
<li>やり方ひとつで，1msになったり300msになったりおもしろい</li>
<li>正規表現のコストと向き合えた</li>
<li>ブラウザ間のCSSセレクタのサポート差違を調べられた</li>
<li>高速化を突き詰める深淵クラスタすごいと思えた</li>
</ul>
<p>ぱっと見で，他の国産ライブラリと比べても精度・対応範囲に対してコード全体の行数がかさんでしまっているので，実用性についてはアレな感じですね．速度面で極端に劣ることはないようにしているつもり．</p>
<p>あとは，Sizzleみたいに独自pseudoとか，<a href="http://dev.w3.org/csswg/selectors4/" title="Selectors Level 4">Selectors Level 4</a>に対応したら面白いかな〜と思いつつコツコツ手を入れていく予定です．</p>
<h2>大変なモンですね...</h2>
<p>セレクタエンジンの再発明とか，暇人も甚だしい上に，このロジックの勘所を押さえたところで，滅び行く技術＆レガシーIEも消え去る運命っちゃ運命ですが...なかなか勉強になったとおもいます．</p>
<h3>年末年始を楽しみつつですね</h3>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7012/6606249583_1009d15ff0_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7012/6606249583_1009d15ff0_z.jpg" alt="いせえび姿造り" width="540" height="359" />
</a>
<p class="caption">伊勢エビ惨殺したりとか</p>
</div>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7141/6606388571_445000031e_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7141/6606388571_445000031e_z.jpg" alt="年越し蕎麦" width="540" height="359" />
</a>
<p class="caption">年を越すための必死そば</p>
</div>
<div class="column-eximage-center">
<a href="http://farm8.staticflickr.com/7151/6612472945_ac2114172f_b.jpg"rel="prettyPhoto">
<img class="columnImage" src="http://farm8.staticflickr.com/7151/6612472945_ac2114172f_z.jpg" alt="おせち" width="540" height="359" />
</a>
<p class="caption">お取り寄せ系のおせち</p>
</div>
<p>海老をむさぼったり，そばをすすったり，おせち食べたり，雑煮つくったり，色々する中の時間で書いてました．</p>
<p>つきましては，明けましておめでとうございました m(_ _)m</p>
<br class="clearHidden" />
</div>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e314-selector_engine.html</guid>
<pubDate>Thu, 05 Jan 2012 11:43:56 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>車輪の再発明について 〜 オレオレライブラリとかフレームワークとか</title>
<link>http://havelog.ayumusato.com/develop/e311-reinventing_the_wheel.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>今年をしめくくる勢い</h2>
<p>個人的に，今年はオレオレPHPフレームワークとオレオレJSライブラリの年として終わりそうなので，（たぶん）本年最後のブログとして少々つらつらと．</p>
<ul>
<li>再発明の目的は？</li>
<li>仕事で使うの？</li>
<li>趣味で使うの？</li>
<li>実用に耐えるの？</li>
</ul>
<p>とか色々と，<strong>オレオレ</strong>と<strong>車輪の再発明</strong>については諸々の議論もありますし，個々のポリシーもあると思います．そのへんはさておき，今回は主に自分自身が感じたメリットなんかを振り返ってみます．</p>
<h3>仕入れた知識を蓄積できる</h3>
<p>実はこれが一番大きくて，思わぬ効用だったのですが．</p>
<p>初めて知った仕様を試しに実装してみてノウハウを定着させたり，一般的問題のスマートな解決法を仕入れたらそれを反映させたり，<strong>今までの経験と知識のコレクション</strong>として役割を果たしてくれました．（そういう視点で見られちゃうとむしろ恥ずかしいんですが）</p>
<p>以前は新しい情報もブックマークするぐらいで，手を動かす動作にはなかなか繋がりませんでしたが，オレオレプロダクトが実践のハケ口になってくれるようになってからは，実際のコードに落とし込む機会が増えました．</p>
<h3>色々しらべるキッカケになる</h3>
<p>オレオレとは言えども，フレームワークやライブラリの体裁を成してみようと思うと，余所のプロダクトの設計・実装は気になるものです．</p>
<p>これが普段なかなか触れる機会(気合)のなかった，<strong>他のプロダクトのコードリーディング</strong>に繋がります．コードリーディングの重要性は余所でも説かれていますが，ここでは読めば何かしら勉強になるよね，という端的なメリットとして挙げます．</p>
<h3>他のプロダクトを理解しやすくなる</h3>
<p>前項からつながる話ですが，色々な実装やら一般的問題について検証する過程と，実際に自分なりに考えてみる過程で，いろいろな経験を得られます．</p>
<p>この経験があると，他のプロダクトを使ったときにも<strong>実装の意図を読みやすくなる</strong>ので，使いこなしレベルが幾らか向上します．少なくともブラックボックス状態（ハマったらハマりっぱなし状態）を脱することは容易になるでしょう．</p>
<h3>インプットとアウトプットのサイクル</h3>
<p>総じて，オレオレライブラリとかフレームワークというのが，自分にとっては<strong>インプットとアウトプットの軸</strong>になってくれました．</p>
<p>実業務で使ったり，自作サービスを作ったりをしていないので，実用性については机上のなんちゃら系ではありますが，一定の学習効果は得られたのかなぁと思います．</p>
<p>サービス考えるより，オレオレのおもちゃを地味にいじくり回すのが好きという性癖に依るところもあるので向き不向きもですね．</p>
<p><small>とはいえ，来年は他のプロダクト使ったりして，何か形になるものを作る気運を高めたいな〜と考えてます．</small></p>
<h2>Ah</h2>
<p>MVCになれなかった，オレオレフレームワークの発端．</p>
<ul>
<li><a href="https://github.com/ahomu/Ah" title="ahomu/Ah - GitHub">ahomu/Ah - GitHub</a></li>
</ul>
<p><strong>世間のMVCなフレームワークを（いまだに）マトモに使ったことがないから，自分で習作してみよう</strong>という変な試みから生まれて，結局MVCでないナニカになりました．</p>
<p>すべてのActionをWebAPIみたいに，<strong>リクエストパス</strong>・<strong>メソッド</strong>・<strong>パラメーター</strong>の3セットを伴ってやり取りする設計です．Actionは処理単位と考えてもらったらOKです．詳しくはGitHubのほうへ．</p>
<p>データプロバイダーとして，リクエストを受けてデータを返すことを専業にするつもりで作られています．フロントエンド側で画面遷移とかビューを制御して，データだけサーバーに取りに行く感じ．</p>
<p>全体としては，単純なリクエスト制御（ルーティングというほど賢くないかも）と処理単位の設計を提供してるだけなので，フレームワークというには随分ゆるい．データベースやテンプレートエンジン周りのドライバ，セッション機構などは用意してないので，かなり薄っぺらい作りです．</p>
<p><small>というか，そこまで手を回す前に熱が引いてしまっただけなんですが…PHPTALのドライバと薄っぺらいPDOラッパーでも書けばいいかなと思ってます．</small></p>
<h2>Clayworks</h2>
<p>jQueryしか書けなかったので，オレオレライブラリでJS覚えよう作戦．</p>
<ul>
<li><a href="https://github.com/ahomu/Clayworks" title="ahomu/Clayworks - GitHub">ahomu/Clayworks - GitHub</a></li>
</ul>
<p>特にユースケースを考えずにつくってしまった無鉄砲なライブラリですが，目標は<strong>世間のライブラリが平然とやっていることを自分で実装して勉強してみる</strong>ことです．</p>
<p>で，現状は一般的な機能のクロスブラウザ実装と，jQueryっぽくなるかならないかの境界で迷走していて特に特徴づけされていません．強いて言うなら「黒魔術感がないと思うのでJavaScript詳しくないひとでも幾らかコードリーディングしやすいんじゃないかな〜？」というぐらい．</p>
<p>今後は前述のAhとの兼ね合いを考えて，Clayworks側にウィジェット（画面構成物）単位のテンプレート管理だとかサーバーコミュニケーションの機構を充実させていけたらなぁ，とかぼんやりと考えています．</p>
<p>AhとClayworksの2つを組み合わせることでWebアプリ向けソリューションになる…かもしれない．まあ，きっと1人だと完成しないんですけどｗ　何かない限りは今後も一人遊びです．</p>
<p><small>あと，サブパッケージでCSS4(!)までの対応を目標に，セレクタエンジンを再発明してみようかな…とか．</small></p>
<h2>そんなかんじで</h2>
<p>今年を振り返ってみるとこんな感じですね．jQueryMobile特需が...笑</p>
<dl>
<dt>1〜3月</dt>
<dd>開発全般への熱が高まる・Ahを作り始めた頃</dd>
<dt>4〜6月</dt>
<dd>Node, Titanium熱が高まる・ブログが元気</dd>
<dt>7〜9月</dt>
<dd>jQueryMobile・ブログ更新頻度が減退（業務量と反比例）</dd>
<dt>10〜12月</dt>
<dd>続jQueryMobile・続ブログ減退・Clayworksに手を付けたところ</dd>
</dl>
<p>年度末にはいつぞや立てた言語別学習方針の振り返りでもしてみましょうかね．</p>
<p>とりま，来年もよろしくお願いします．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>開発</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/e311-reinventing_the_wheel.html</guid>
<pubDate>Tue, 27 Dec 2011 13:32:43 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>Firefox3.6あたりで取得したinnerHTMLにxmlnsが付いてきた</title>
<link>http://havelog.ayumusato.com/develop/javascript/e313-firefox_inner-html_addxmlns.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>サンプル</h2>
<p>タイトルの通りです．Firefox3.6あたりで実行すると現象を確認できると思います．<em>3.6あたり</em>という曖昧な表現なのはそんな正確に調査してないからです．X-(</p>
<iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/ahomu/AsPQw/2/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
<p>あるインライン要素の中に，テキストを伴うブロック要素をinnerHTMLで突っ込むと，テキスト部分が自動でxmlnsつきのインライン要素でラップされるみたい．</p>
<p>どうやら<code>appendChild</code>なら発生しないようなので，<code>innerHTML</code>に値をセットしたときに処理が入ってるんでしょうかね．</p>
<h3>今回確認した出力結果</h3>
<p>それぞれ，インライン要素に対してブロック要素を<code>innerHTML</code>で足した場合と，<code>appendChild</code>で足した場合です．</p>
<pre class="brush:html">

インライン1号 innnerHTMLで足す<div><a xmlns="http://www.w3.org/1999/xhtml">の中にブロック要素を入れてみる</a></div>


インライン2号 appendChildで足す<div>appendChildしてみる</div>
</pre>
<p>インライン要素といってもspan要素はセーフで，a要素とかstrong要素とかem要素は一通り再現したのでよく分からない感じ...ひとまず備忘録ということで．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e313-firefox_inner-html_addxmlns.html</guid>
<pubDate>Tue, 27 Dec 2011 13:18:38 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>JSでフォームの入力値をobjectにして取得するよ</title>
<link>http://havelog.ayumusato.com/develop/javascript/e312-func_form_data2object.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>ちょっちメモ的に</h2>
<p>軽い気持ちで書いてたら，思ったよりぐんにょりした仕様が多かったのでメモ的にエントリ．てきとーにgistで貼り付けてみたり．</p>
<script src="https://gist.github.com/1520561.js?file=util.form.data.js"></script>
<h3>form.elementsにINPUT[type='image']な要素が含まれない</h3>
<ul>
<li><a href="http://d.hatena.ne.jp/rikuba/20100916/1284569774" title="HTMLFormElement#elementsにはtype=&quot;image&quot;のinput要素は含まれない - rikubaの日記">HTMLFormElement#elementsにはtype="image"のinput要素は含まれない - rikubaの日記</a></li>
</ul>
<p>oh…歴史的な理由て．</p>
<h3>form.elementsにFIELDSET要素が含まれる</h3>
<p>今回は判定しないので単純に無視してます．さらに<code>fieldset.elements</code>にはFIELDSET要素以下の子要素が含まれます．まとめてコントロールするときには何か使えるかも．</p>
<h3>multiple属性のついたSELECT要素の扱い</h3>
<p>multiple属性が有効であっても，name属性が<code>vars[]</code>のようになっていなければ，一番最後のselectedな要素の値を送信します．</p>
<p>よって，他と同様に<code>isAry</code>のときだけmultipleとして扱って，子のOPTION要素を走査しています．</p>
<h3>valueなしのOPTION要素の扱い</h3>
<p>option要素にvalue属性が指定されていないとき，中のテキストがデータとして扱われるはず．</p>
<pre class="brush:html">
<select>
<option value="valueあり" selected="selected">あるよ</option>
</select>
→ select.value === 'valueあり'

<select>
<option selected="selected">ないよ</option>
</select>
→ select.value === 'ないよ'
</pre>
<p>上記のような感じですね．しかし，IE6〜8では<code>select.value</code>から値を取得できず，IE6〜7では<code>option.value</code>でも取得できません．</p>
<pre class="brush:html">
<option value="">ラベル</option>
　と
<option>ラベル</option>
</pre>
<p>これらの区別が付きづらそうだったので，とりあえず対応しないことにしてます．スマートに判別できるのかな…</p>
<h3>おまけ.fieldset要素のdisabled属性</h3>
<ul>
<li><a href="http://dev.w3.org/html5/spec/Overview.html#the-fieldset-element" title="HTML5">HTML5 - The fieldset element</a></li>
</ul>
<p>上記を見ると，fieldsetのdisabled属性がtrueの場合に，中に入ったコントロール類はすべて無効になるとされていますが今回は仕様外としています．</p>
<dl>
<dt>有効</dt>
<dd>Firefox 8 (Mac), Opera 11.6 (Mac)</dd>
<dt>無効</dt>
<dd>InternetExplorer 9, Safari 5.1 (Mac), Chrome16 (Mac)</dd>
</dl>
<p>手元でさらっと見てみた感じだと，上記のような対応状況でした．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e312-func_form_data2object.html</guid>
<pubDate>Mon, 26 Dec 2011 20:03:41 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>背景色をrgbaとrgbで2重指定するときのIE地雷</title>
<link>http://havelog.ayumusato.com/develop/css/e310-rgba_oldie_bug.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>はじめに結論</h2>
<p>CSSで背景に透過色を指定する際に，本来の<code>rgba</code>とIE6-8用の<code>rgb</code>を2重で書いたりしますが，うっかりハマるポイントがあるので紹介．</p>
<p>結論から言うと<strong>背景プロパティは，<code>background-color</code>ではなく，<code>background</code>を利用しましょう</strong>，ということになります．</p>
<h3>Goodパーツ</h3>
<p>こう書くことを鉄の掟としておけば，特にハマることはないとおもいます．きっと．</p>
<pre class="brush:css">
.someClass {
  background: rgb(128,128,128); /* または background-color: rgb(128,128,128); */
  background: rgba(128,128,128,0.8);
}
</pre>
<p>両方ともbackground指定にしておけば覚えやすくて安全ですが，rgb側はbackground-colorでも大丈夫です．</p>
<h3>Badパーツ</h3>
<p>こうやるとIE6-8で背景色がうまく適用されずに撃沈します．</p>
<pre class="brush:css">
.someClass {
  background-color: rgb(128,128,128);
  background-color: rgba(128,128,128,0.8);
}
</pre>
<p><strong>両方ともbackground-colorにすると，IE6-8で背景色が設定されていない状態</strong>になります．</p>
<p>IE6-8でrgbaが解釈できないときに，前のrgbの指定も壊してしまうんでしょうかね．とどのつまりお馴染みのIE地雷なので，そういうものだと割り切りましょう．</p>
<h2>新発見でした</h2>
<p>個人的にbackgroundプロパティばっか書いていたので，この細かいところは気づいてませんでした(;´-`)　今回は仕事案件でIEが悲鳴をあげていたので気づいた次第．</p>
<p><small>余談: この地雷がIE8では修正されてるというような<a href="http://css-tricks.com/ie-background-rgb-bug/" title="IE Background RGB Bug | CSS-Tricks">情報</a>もあったのですが，手元のWin7+IE8(v8.0.7601.17514)では同様の症状が再現されました．IE8にも影響すると思っておいたほうが安全そうです．</small></p>
<br class="clearHidden" />
</div>
]]></description>
<category>CSS</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/css/e310-rgba_oldie_bug.html</guid>
<pubDate>Wed, 21 Dec 2011 11:21:06 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>jasmine-jqueryというかloadFixturesが便利</title>
<link>http://havelog.ayumusato.com/develop/javascript/e309-jasmine_jquery_fixtures.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>beforeEach内でDOMをちまちまやるのが面倒</h2>
<p>なんですよ．例えばですが乱暴にゴチャゴチャと書くと...</p>
<pre class="brush:javascript">
describe('Some test case....', function() {
    var testDiv, testList, attrTest, insertTest;

    beforeEach(function() {
        testDiv = document.createElement('div');
        testDiv.innerHTML = '<a id="attrTest" data-test="hogehoge" target="_blank" href="#">test</a>';
        document.body.appendChild(testDiv);

        testList = document.createElement('div');
        testList.innerHTML = '<ul id="insertTest"><li>BASELINE</li></ul>';
        document.body.appendChild(testList);
    });

    it("insertTest parent is testList", function() {
        expect(insertTest.parentNode).toBe(testList);
    });
});
</pre>
<p>こんな風に<code>createElement</code>とかして要素を作って下ごしらえすると，どうにも見栄えがよくなくなりがちです．というか整理しづらい...</p>
<h3>たまたま見つけたjasmine-jquery</h3>
<p>Railsの話だったのですが，たまたま見つけたページに，なんだかステキな記述を発見</p>
<blockquote>
<p>Jasmine-jqueryは、名前が示す通りJasmineのjQuery用機能拡張です。これがfixtureサポートを提供しているので、シンプルなHTML句に対してJavaScriptをテストすることができます。<cite><a href="http://railscasts.com/episodes/261-testing-javascript-with-jasmine?language=ja&amp;view=asciicast" title="#261 Testing JavaScript with Jasmine - RailsCasts">#261 Testing JavaScript with Jasmine - RailsCasts</a></cite></p>
</blockquote>
<p>あらステキ．</p>
<ul>
<li><a href="https://github.com/velesin/jasmine-jquery" title="velesin/jasmine-jquery - GitHub">velesin/jasmine-jquery - GitHub</a></li>
</ul>
<p>ここから取得して組み込みます．<a href="https://github.com/velesin/jasmine-jquery/downloads" title="Downloads for velesin's jasmine-jquery - GitHub">Downloads for velesin's jasmine-jquery</a>から，<em>jasmine-jquery-1.3.1.js</em>を取得，そしてjquery本体も1.6.4を取得しおいて，SpecRunner.htmlに読み込みます．</p>
<h3>loadFixturesで，別途用意したHTMLを対象にできる</h3>
<p>HTMLと･･･</p>
<pre class="brush:html">
<html>
<head>
  <title>element.html</title>
</head>
<body>
<div id="testDiv">
    <a id="attrTest" data-test="hogehoge" target="_blank" href="#">test</a>
</div>
<div id="testList">
    <ul id="insertTest"><li>BASELINE</li></ul>
</div>
</body>
</html>
</pre>
<p>JSが･･･</p>
<pre class="brush:javascript">
describe('Some test case....', function() {
    var testDiv, testList, attrTest, insertTest;

    beforeEach(function() {
        loadFixtures('element.html');
        testDiv    = document.getElementById('testDiv');
        testList   = document.getElementById('testList');
    });

    it("insertTest parent is testList", function() {
        expect(insertTest.parentNode).toBe(testList);
    });
});
</pre>
<p>分離されます．やってみると当たり前な感じもする使い勝手です．</p>
<p>これだけ見ると，jQueryの必要すらあんまりない気もしますが，他にもmetchersが拡張されているので何かと便利な感じの拡張です．テスト対象のコードもjQueryを使ってるともっと相性いいのかも．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e309-jasmine_jquery_fixtures.html</guid>
<pubDate>Fri, 16 Dec 2011 09:54:13 +0900</pubDate>
</item>
<item>
<dc:creator>あほむ</dc:creator>
<title>constructorのおなまえとprototype拡張でうっかり</title>
<link>http://havelog.ayumusato.com/develop/javascript/e308-constructor_and_prototype.html</link>
<description><![CDATA[
<div class="newsTextBox">
<h2>prototype拡張時のうっかり</h2>
<p>今まであまり意識していなかったこともあり，最初？？？な挙動だったので念のためメモ．</p>
<p>なんでコイツはnewしたあとに，constructor.nameがObjectになってしまうのかしら，という疑問が発端．</p>
<h3>protototypeに直接オブジェクトを代入していた</h3>
<p>わりと自然にミスしてました．</p>
<pre class="brush:javascript">
function Hogehoge() {
    // some logic
}

Hogehoge.prototype = {
    prop      : 123,
    method : function() {}
};

console.log(new Hogehoge().constructor.name);
// -> Object
</pre>
<p><strong>prototypeにObjectをガッツリ代入してました</strong>…prototypeがconstructorになるんですね．</p>
<p>実際は<var>Hogehoge.prototype</var>にObjectを代入してもHogehoge自体は元の関数なせいか，newできますし，その中のロジック＋prototypeに突っ込まれた分のメソッドも問題なく動作します．</p>
<p>パッと見で普通に動作してしまったので，constructorだけなぜObjectなのか気づくの遅れました･･･</p>
<h3>正しくはこう</h3>
<p>ですね．</p>
<pre class="brush:javascript">
function Hogehoge() {
    // some logic
}

Hogehoge.prototype.prop = 123;
Hogehoge.prototype.method : function() {};

console.log(new Hogehoge().constructor.name);
// -> Hogehoge
</pre>
<p>ばっちりです．</p>
<h2>オブジェクト合成的なアレ</h2>
<p><code>Hogehoge.prototype.XXX = YYY</code>を繰り返すのは記述的にアレなので，下記のように消極的なオブジェクト合成的なアレを挟みます．</p>
<pre class="brush:javascript">
function fill(base, ext) {
    var k;
    for (k in ext) {
        if (ext.hasOwnProperty(k)) {
            k in base || (base[k] = ext[k]);
        }
    }
}

function Hogehoge() { }

fill(Hogehoge.prototype, {
    prop   : 123,
    method : function() {}
});

console.log(new Hogehoge().constructor.name);
// -> Hogehoge
</pre>
<p>見栄えもすっきり〜．</p>
<br class="clearHidden" />
</div>
]]></description>
<category>JavaScirpt</category>
<guid isPermaLink="true">http://havelog.ayumusato.com/develop/javascript/e308-constructor_and_prototype.html</guid>
<pubDate>Fri, 16 Dec 2011 09:54:06 +0900</pubDate>
</item>
</channel>
</rss>
