<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title>メモログ</title>
    <link rel="alternate" type="text/html" href="http://memolog.org/" />
    
    <id>tag:memolog.org,2010-01-30://1</id>
    <updated>2013-05-06T05:41:23Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.2.3</generator>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jp/memolog" /><feedburner:info uri="jp/memolog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>matchdepを使ってgrunt.loadNpmTasksする</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/QuoJ5CS9yFY/grunt_loadnpmtasks_with_matchdep.php" />
    <id>tag:memolog.org,2013://1.547</id>

    <published>2013-05-06T05:38:00Z</published>
    <updated>2013-05-06T05:41:23Z</updated>

    <summary type="html">matchdepを使用してgrunt.loadNpmTasksを毎回記述しないで済むようにするという話</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="grunt" label="grunt" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
matchdepを使用してgrunt.loadNpmTasksを毎回記述しないで済むようにするという話。npm install --save-dev でインストールしたgrunt pluginをGruntで使用する場合、Gruntfile.jsで&lt;a href="http://gruntjs.com/api/grunt#grunt.loadnpmtasks"&gt;grunt.loadNpmTasks&lt;/a&gt;を使ってタスクのloadをする必要があります。
&lt;/p&gt;
&lt;p&gt;
しかし、grunt pluginを追加するたびにgrunt.loadNpmTasksをGruntfileに追加するのはわずらわしいし、お試しで追加したpluginとか使わなくなったpluginを削除するときにloadNpmTasksをいちいち除かないといけないのもまた面倒くさい。
&lt;/p&gt;
&lt;p&gt;
ので、&lt;a href="https://npmjs.org/package/matchdep"&gt;matchdep&lt;/a&gt;を使用する。matchdepについては&lt;a href="http://nantokaworks.com/?p=955"&gt;matchdepを使ってGrunt.jsのプラグインを自動ロードする | Re* Programming&lt;/a&gt;で簡潔に解説されています。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
&lt;/pre&gt;
&lt;p&gt;
上記のように設定すると、package.jsonのdevDependenciesから、マッチングした対象の名前を返してくれます。そしてforEachでgrunt.loadNpmTasksに渡すと。devDependenciesにgrunt pluginを追加すれば、loadNpmTasksをGruntfileに記述しなくても、taskをloadしてくれるようになります。
&lt;/p&gt;
&lt;p&gt;
ただ、&lt;a href="https://github.com/jsoverson/grunt-template-jasmine-requirejs"&gt;grunt-template-jasmine-requirejs&lt;/a&gt;のように、taskのないgrunt pluginをインストールしていると、
&lt;p&gt;
&lt;pre class="prettyprint"&gt;
&amp;gt;&amp;gt; Local Npm module "grunt-template-jasmine-requirejs" not found. Is it installed?
&lt;/pre&gt;
&lt;p&gt;
というwarningが発生するので、個人的には
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
require('matchdep').filterDev('grunt-*').forEach(function (name) {
  if (!/template/.test(name)) {
    grunt.loadNpmTasks(name);
  }
});
&lt;/pre&gt;
&lt;p&gt;
という感じで、名前にtemplateがある場合は、taskはないだろうということにして、loadNpmTasksの対象から外すようにしています。もっと良い方法があるかもしれませんけど、今のところはこれで。
&lt;/p&gt;

        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/QuoJ5CS9yFY" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/05/grunt_loadnpmtasks_with_matchdep.php</feedburner:origLink></entry>

<entry>
    <title>Grunt事始め</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/90lFtK0qNyc/grunt_getting_started.php" />
    <id>tag:memolog.org,2013://1.546</id>

    <published>2013-04-28T04:25:00Z</published>
    <updated>2013-04-28T04:33:06Z</updated>

    <summary type="html">はじめてGruntを利用するときに行うこと。詳しくはGetting started - Grunt: The JavaScript Task Runnerを参照。
</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="grunt" label="grunt" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
はじめてGruntを利用するときに行うこと。詳しくは&lt;a href="http://gruntjs.com/getting-started"&gt;Getting started - Grunt: The JavaScript Task Runner&lt;/a&gt;を参照。
&lt;/p&gt;
&lt;h2&gt;Gruntについて&lt;/h2&gt;
&lt;p&gt;
Gruntはnodeで動作するJavascriptのTask Runnerで、JSHintとかディレクトリのクリーンアップとか、開発中に発生するタスクを簡単に実行できるように整備することができます。
&lt;/p&gt;
&lt;p&gt;
Gruntのinstallにはnpm（Node.jsのパッケージマネージャー）を使用します。Nodeのinstallは、&lt;a href="http://nodejs.org/download/"&gt;node.js&lt;/a&gt;からインストーラーをダウンロードするか、&lt;a href="http://mxcl.github.io/homebrew/"&gt;homebrew&lt;/a&gt;でインストールする。sudoが必要な場合はsudoする。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
[sudo] npm install -g grunt-cli
&lt;/pre&gt;
&lt;h2&gt;設定ファイルの用意&lt;/h2&gt;
&lt;p&gt;
Gruntを使うにあたって、package.jsonと、Gruntfile.jsの二つのファイルを用意します。package.jsonはGruntで使用するplugins(task)をインストールするためのファイル（npm経由でインストールする）で、Gruntfile.jsはtaskを実行するための設定ファイル。
&lt;/p&gt;
&lt;p&gt;
これらのファイルを手作業で作成することもできますが、&lt;a href="http://gruntjs.com/project-scaffolding"&gt;grunt-init&lt;/a&gt;で用意しているtemplateで生成して、生成したファイルから不要な箇所を差し引く方が簡単（と思う）。
&lt;/p&gt;
&lt;p&gt;
grunt-initのインストールは下記のような感じ
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
[sudo] npm install -g grunt-init
&lt;/pre&gt;
&lt;p&gt;
grunt-init用のtemplateは&lt;a href="http://gruntjs.com/project-scaffolding#installing-templates"&gt;Installing templates&lt;/a&gt;にいくつか用意されていて、用途にあったものを使用する。Gruntfile.jsを生成するだけなら、&lt;a href="https://github.com/gruntjs/grunt-init-gruntfile"&gt;grunt-init-gruntfile&lt;/a&gt;が良くて、Grunt pluginを作成するなら&lt;a href="https://github.com/gruntjs/grunt-init-gruntplugin"&gt;grunt-init-gruntplugin&lt;/a&gt;が良さそう。package.jsonも一緒に作成するならとりあえず&lt;a href="https://github.com/gruntjs/grunt-init-commonjs"&gt;grunt-init-commonjs&lt;/a&gt;が良いかもしれない。いずれにせよあとで編集すれば良いだけなので、どれでも良いと言えばどれでも良い。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://github.com/gruntjs/grunt-init-commonjs"&gt;grunt-init-commonjs&lt;/a&gt;で例にすると
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
git clone git@github.com:gruntjs/grunt-init-commonjs.git ~/.grunt-init/commonjs
&lt;/pre&gt;
&lt;p&gt;
で、templateをダウンロードしてきて（grunt-initで使用するテンプレートは、~/.grunt-init/に入れる）、grunt-initを実行する。grunt-initは、gruntのタスクを実行したいプロジェクトのルートで行う。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd ~/Desktop
mkdir my-project
cd my-project
grunt-init commonjs
&lt;/pre&gt;
&lt;p&gt;
すると、作成時の設定をいろいろ聞かれるので、いろいろ答える。全部デフォルトでもあとで変更すれば良いので大丈夫。一緒にpackage.jsonも作成されます。
&lt;/p&gt;
&lt;p&gt;
grunt-init-gruntfileを使った場合など、package.jsonを別途作成する場合は
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd ~/Desktop/my-project
npm init
&lt;/pre&gt;
&lt;p&gt;
すれば簡単に作成することができる。
&lt;/p&gt;
&lt;p&gt;
あとは、Gruntfile.jsとpackage.jsonを開いて、不要そうなものを適当に削る。すぐに削除しても後から削除しても良い。そして
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd ~/Desktop/my-project
npm install
&lt;/pre&gt;
&lt;p&gt;
すると、package.jsonに記述されているdevDependenciesなpluginが、node_modulesディレクトリにインストールされます。
&lt;/p&gt;
&lt;h2&gt;Grunt taskの実行&lt;/h2&gt;
&lt;p&gt;
これで
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd ~/Desktop/my-project
grunt jshint
&lt;/pre&gt;
&lt;p&gt;
と実行すると、Gruntfile.jsに記述されているjshintのタスクが実行されるようになります。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/90lFtK0qNyc" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/04/grunt_getting_started.php</feedburner:origLink></entry>

<entry>
    <title>xxhdpiの準備とdpiとdpについて</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/slkOh-dmOHA/preparation_for_xxhdpi.php" />
    <id>tag:memolog.org,2013://1.545</id>

    <published>2013-04-21T15:00:00Z</published>
    <updated>2013-04-21T15:06:20Z</updated>

    <summary type="html">List of displays by pixel density - Wikipedia, the free encyclopedia を見ていて気がついたのですけど、Galaxy S4はSupporting Multiple Screens | Android Developersで言うところの「xxhdpi」という枠に入るらしい。Android Developersには記載がないのですけど、Nick Butcher - Google+ - Nexus 10 launcher icons The gorgeous screen on the Nexus...に、（Nexus 10はxhdpiの範囲を超えてくるので）xxhdpiかdrawable-480dpiフォルダーを用意する必要がある、というような記述がある（Nexus 10は300ppiと仕様には書かれていますけど、事実関係は未調査）。</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density"&gt;List of displays by pixel density - Wikipedia, the free encyclopedia&lt;/a&gt; を見ていて気がついたのですけど、Galaxy S4は&lt;a href="http://developer.android.com/guide/practices/screens_support.html"&gt;Supporting Multiple Screens | Android Developers&lt;/a&gt;で言うところの「xxhdpi」という枠に入るらしい。Android Developersには記載がないのですけど、&lt;a href="https://plus.google.com/+NickButcher/posts/ePQya3KsTjW"&gt;Nick Butcher - Google+ - Nexus 10 launcher icons The gorgeous screen on the Nexus...&lt;/a&gt;に、（Nexus 10はxhdpiの範囲を超えてくるので）xxhdpiかdrawable-480dpiフォルダーを用意する必要がある、というような記述がある（Nexus 10は300ppiと仕様には書かれていますけど、事実関係は未調査）。
&lt;/p&gt;
&lt;p&gt;
Androidの画面のサイズで出てくる単位としては、dpiとdpがあり、&lt;a href="http://developer.android.com/guide/practices/screens_support.html"&gt;Supporting Multiple Screens | Android Developers&lt;/a&gt;に用語の説明が書かれています。
&lt;/p&gt;
&lt;p&gt;
dpiは、dots per inchのことで、1インチの中に含まれるdotの数を表しますと（&lt;a href="http://ja.wikipedia.org/wiki/Dpi"&gt;dpi - Wikipedia&lt;/a&gt;）。ピクセルとドットが1対1の関係であれば、&lt;a href="http://ja.wikipedia.org/wiki/Ppi"&gt;ppi - Wikipedia&lt;/a&gt;の計算式で算出できます。
&lt;/p&gt;
&lt;p&gt;
dpは、density-independent pixelのことだそうで、px = dp * (dpi / 160)という計算式で算出するそうです。dpi = 240 の場合、px = 1.5dp になるので、dp=1なら、pxは1.5になる。つまり、dpは、1dpあたりのpixel数が、dpiによって増減するので、画面の密度とは独立して扱うことができると。160dpiでも、240dpiでも、1インチあたりのdpは160になる。ピクセルの数に影響されずに画面のサイズを特定することができる。
&lt;/p&gt;
&lt;p&gt;
アイコンとかの画像は通常ピクセルで用意するので、dpiに応じた大きさを用意しないいけない。そこでdrawable-ldpiみたいな、dpiのグループごとに画像を用意する。&lt;br/&gt;
&lt;img src="http://developer.android.com/images/screens_support/screens-ranges.png" class="photo" /&gt;
&lt;/p&gt;
&lt;p&gt;
たいていの端末はxhdpiで設定されている値（〜320dpi）に収まるわけですが、Galaxy S4は、約5インチのディスプレイで「1080×1920」という解像度を持っていて、そのdpiは計算すると（&lt;a href="https://www.google.co.jp/search?q=sqr%281080^2%2B1920^2%29%2F4.99"&gt;sqr(1080^2+1920^2)/4.99&lt;/a&gt;）、約441dpiとなり（&lt;a href="http://www.apple.com/jp/iphone/specs.html"&gt;iphone 5 は326 ppi&lt;/a&gt;）、xhdpiを大きく超えるdpiとなる。
&lt;/p&gt;
&lt;p&gt;
それでxxhdpiというフォルダを作って画像を用意する必要がある、という話になると。Android Developersにxxhdpiの記載が見つからないので、ちゃんと適用されるのか微妙に不安ではありますけど（&lt;a href="http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_XXHIGH"&gt;DisplayMetrics | Android Developers&lt;/a&gt;の実装がそれにあたるみたいだそうですけど）、xxhdpiは〜480dpiまでという前提で言うと、480/160ということで、mdpiから3倍の大きさの画像を用意する感じになる。
&lt;/p&gt;
&lt;p&gt;
アイコンだと、&lt;a href="http://developer.android.com/guide/practices/screens_support.html#DesigningResources"&gt;Supporting Multiple Screens | Android Developers&lt;/a&gt;の話を参考にすると、144x144で、スプラッシュスクリーンは、normal sizeなスクリーンの場合は少なくとも960x1410 (470dp*3, 320dp*3)という感じになるんですけど、実際に登場するGalaxy S4が1080×1920なので、1080×1920で用意しておくのがとりあえず無難かなと思う次第であります。
&lt;/p&gt;
&lt;p&gt;
というメモ
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/slkOh-dmOHA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/04/preparation_for_xxhdpi.php</feedburner:origLink></entry>

<entry>
    <title>Sublime Text 2 で JSHint</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/MUvEdGimjTE/sublime_text_2_jshint.php" />
    <id>tag:memolog.org,2013://1.544</id>

    <published>2013-04-13T14:50:00Z</published>
    <updated>2013-04-13T14:50:20Z</updated>

    <summary type="html">Sublime Text 2 の JSLint から node がみつからない - メモログと関連して、少しの間JSLintを使用していたのですが、jQueryなどglobalに定義されている変数があるとそこで定義されていないと言われたりなどしてしまい、若干使い勝手が悪い。それでJSHintを使い始めてみている。
</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://memolog.org/2013/02/node_not_found_with_jsLint.php"&gt;Sublime Text 2 の JSLint から node がみつからない - メモログ&lt;/a&gt;と関連して、少しの間JSLintを使用していたのですが、jQueryなどglobalに定義されている変数があるとそこで定義されていないと言われたりなどしてしまい、若干使い勝手が悪い。
&lt;/p&gt;
&lt;p&gt;
それでJSHintを使い始めてみている。JSHintについては&lt;a href="http://www.jshint.com/about/"&gt;About -- JSHint&lt;/a&gt;を参照。
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
JSHint is a fork of &lt;a href="http://jslint.com/"&gt;JSLint&lt;/a&gt;, the tool written and maintained by Douglas Crockford. The project originally &lt;a href="http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to-jshint/"&gt;started&lt;/a&gt; as an effort to make a more configurable version of JSLint-the one that doesn't enforce one particular coding style on its users-but then transformed into a separate static analysis tool with its own goals and ideals.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
JSLintのチェックをいろいろ設定可能な状態にするところからスタートして、いまは静的コード解析までしてくれるらしい。
&lt;/p&gt;
&lt;p&gt;
Sublime Text 2へのJSHintのインストールは下記のような感じ。
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;nodeが入っていなかったらnodeをインストール（homebrewが入っていたらbrew install nodeでインストールできる。&lt;a href="http://memolog.org/2012/09/rvm_jewelrybox_homebrew.php"&gt;RVM / JewelryBox / Homebrew をインストール - メモログ&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;[sudo] npm install -g jshint で、nodeからJSHintをインストール&lt;/li&gt;
&lt;li&gt;メニューのTools - Command Paletteを開いて、「Package Controll: Install Package」を選択して、JSHintを選択&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Sublime Text 2のJSHintの設定は、~/Library/Application Support/Sublime Text 2/Packages/JSHint/.jshintrc にあります。デフォルトの設定を変更したい場合は、これをUserのディレクトリにコピーして、それを編集します。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd ~/Library/Application Support/Sublime Text 2/Packages/
cp JSHint/.jshintrc User/JSHint.jshintrc
&lt;/pre&gt;
&lt;p&gt;
設定は&lt;a href="http://www.jshint.com/docs/"&gt;Documentation -- JSHint&lt;/a&gt;を参照。Enforcing optionsは書き方を制限する系の設定で、Relaxing optionsは逆に制限を緩める（warningなどを出さないように抑制する）系の設定で、Environmentsは環境関連。jquery: trueにすると、JQueryや$などはどこかでglobal変数に定義されているものとして扱ってくれます。
&lt;/p&gt;
&lt;p&gt;
Environmentsで用意されていないものについては、"globals": {"define":false,"require":false}のような感じで、globalsで設定すると同じことができます。
&lt;/p&gt;
&lt;p&gt;
設定の中で「maxcomplexity」の設定は興味深くて、 &lt;a href="http://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B%91%E5%BA%A6"&gt;Cyclomatic complexity&lt;/a&gt;を計算して、complexityを設定した値で制限してくれるみたいです。&lt;a href="http://www.amazon.co.jp/gp/product/B00B1WLE92/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B00B1WLE92&amp;linkCode=as2&amp;tag=yutakayamaguc-22"&gt;Testable JavaScript&lt;/a&gt;&lt;img src="http://www.assoc-amazon.jp/e/ir?t=yutakayamaguc-22&amp;l=as2&amp;o=9&amp;a=B00B1WLE92" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;に書かれていた内容によると、Thomas J. McCabeは、すべてのメソッドはCyclomatic complexityを10以下にすべしとしているそうです。&lt;a href="http://www.enerjy.com/blog/?p=198"&gt;Software Integrity Blog  &amp;raquo; Blog Archive   &amp;raquo; McCabe Cyclomatic Complexity: the proof in the pudding&lt;/a&gt;の調査では25くらいまではバグとの相関関係あまり変わらないみたいですけど、&lt;a href="http://www.aivosto.com/project/help/pm-complexity.html"&gt;Project Metrics Help - Complexity metrics&lt;/a&gt;の話だとCyclomatic complexityが上がってくると、Bad fix probabilityも上がると。やはり10くらいが妥当だという話で、とりあえず10に設定してみました。
&lt;/p&gt;
&lt;p&gt;
そしてそして、Sublime Text 2で保存したときにJSHintを自動的に実行したい場合は、&lt;a href="https://github.com/alexnj/SublimeOnSaveBuild"&gt;SublimeOnSaveBuild&lt;/a&gt;を別途インストールします。インストールは、メニューのTools - Command Paletteを開いて、「Package Controll: Install Package」を選択して、「SublimeOnSaveBuild」を選びます。インストールするだけで特に設定は必要ありません。
&lt;/p&gt;

        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/MUvEdGimjTE" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/04/sublime_text_2_jshint.php</feedburner:origLink></entry>

<entry>
    <title>-webkit-overflow-scrollingと慣性スクロール</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/FEeGso9h3iw/webkit-overflow-scrolling-touch.php" />
    <id>tag:memolog.org,2013://1.542</id>

    <published>2013-02-27T15:58:00Z</published>
    <updated>2013-05-15T02:05:14Z</updated>

    <summary type="html">コンテンツがオーバーフローしたときにスクロールバーを表示させる場合に、そのコンテンツのスクロールの仕方を設定する値として-webkit-overflow-scrollingというのがある。
詳細はSafari CSS Referenceの「-webkit-overflow-scrolling」を参照。値を「touch」にするとnativeアプリでスクロールしたときのような、いわゆる慣性スクロールの状態になる。
</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
コンテンツがオーバーフローしたときにスクロールバーを表示させる場合に、そのコンテンツのスクロールの仕方を設定する値として-webkit-overflow-scrollingというのがある。
詳細は&lt;a href="http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safaricssref/articles/standardcssproperties.html"&gt;Safari CSS Reference&lt;/a&gt;の「-webkit-overflow-scrolling」を参照。値を「touch」にするとnativeアプリでスクロールしたときのような、いわゆる慣性スクロールの状態になる。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
.foobar {
  position:absolute;
  width: 100%;
  height: 300px;
  overflow: scroll;
  -webkit-overflow-scrolling: touch;
}
&lt;/pre&gt;
&lt;p&gt;
値を「touch」にした場合は、そこにstacking contextが作成される。stacking contextが作られると、その要素の子要素たちは、そのstacking contextを基準にして、z-index順に重なるようになる（z軸上のz-indexにある親要素の平面で子要素が重なるイメージ）。なので、この指定によって、子要素のz軸上の配置が変わる可能性がある。詳細は&lt;a href="http://www.w3.org/TR/CSS21/zindex.html"&gt;Elaborate description of Stacking Contexts&lt;/a&gt;とか、&lt;a href="https://developer.mozilla.org/en-US/docs/CSS/Understanding_z-index/The_stacking_context?redirectlocale=en-US&amp;redirectslug=Understanding_CSS_z-index%2FThe_stacking_context"&gt;The stacking context - CSS | MDN&lt;/a&gt;とか、&lt;a href="http://hail2u.net/blog/webdesign/stacking-contexts-on-fixed-element.html"&gt;位置を固定した要素のすたっきんぐ・こんてきすと？ - Weblog - hail2u.net&lt;/a&gt;とか、&lt;a href="http://www.amazon.co.jp/gp/product/487311232X/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=487311232X&amp;linkCode=as2&amp;tag=yutakayamaguc-22"&gt;CSS完全ガイド 第2版&lt;/a&gt;&lt;img src="http://www.assoc-amazon.jp/e/ir?t=yutakayamaguc-22&amp;l=as2&amp;o=9&amp;a=487311232X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;の348ページあたりを参考。
&lt;/p&gt;
&lt;p&gt;
というメモ。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/FEeGso9h3iw" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/02/webkit-overflow-scrolling-touch.php</feedburner:origLink></entry>

<entry>
    <title>Sublime Text 2 の JSLint から node がみつからない</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/gcurTA0qEq8/node_not_found_with_jsLint.php" />
    <id>tag:memolog.org,2013://1.541</id>

    <published>2013-02-17T20:28:00Z</published>
    <updated>2013-02-18T16:54:15Z</updated>

    <summary type="html">Sublime Text 2にJSLintというpackageをインストールしているのですが、これが下記のようなno such file or directoryでエラーになる。</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="node" label="node" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sublimetext2" label="sublime text 2" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
Sublime Text 2に&lt;a href="https://github.com/darrenderidder/Sublime-JSLint"&gt;JSLint&lt;/a&gt;というpackageをインストールしているのですが、これが下記のようなno such file or directoryでエラーになる。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
[Errno 2] No such file or directory
[cmd:  [u'node', u'/Users/.../Library/Application Support/
Sublime Text 2/Packages/JSLint/linter.js', u'--sloppy', 
u'--indent', u'2', u'--node', u'--nomen', u'--vars', 
u'--plusplus', u'--stupid', u'--todo', u'foobar.js']]
[dir:  /Users/...]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
[Finished]
&lt;/pre&gt;
&lt;p&gt;
どうやらhomebrewでインストールしたnodeが、/usr/local/bin/nodeに存在していて、/usr/bin:/bin:/usr/sbin:/sbinに存在していないためみたい。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://github.com/darrenderidder/Sublime-JSLint/issues/5"&gt;[Error 2] The system cannot find the file specified ? Issue #5 ? darrenderidder/Sublime-JSLint ? GitHub&lt;/a&gt;の話を参考に、JSLint.sublime-buildのcmdの「node」を「/usr/local/bin/node」に変更したら、動くようになりましたと..
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
{
	"cmd": [
	  "/usr/local/bin/node", 
	  "${packages}/JSLint/linter.js",
	  // tolerate missing 'use strict' pragma
	  "--sloppy",
	  // suggest an indent level of two spaces
	  "--indent", "2",
	  // assume node.js to predefine node globals
&lt;/pre&gt;
&lt;p&gt;
でも少し考えて、/usr/bin にsymlinkつけても良いかと思って、上の変更は止めて、symlinkをつける方向に。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
cd /usr/bin
sudo ln -s /usr/local/bin/node
&lt;/pre&gt;
&lt;p&gt;
というメモ。Sublime Text 2でコマンド実行したときに/usr/local/binも参照してくれれば良いのにとか思うのですけど、あ、symlinkじゃなくてPATHを通せば良いのか..（いや、PATHは通ってる雰囲気...）
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/gcurTA0qEq8" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/02/node_not_found_with_jsLint.php</feedburner:origLink></entry>

<entry>
    <title>weinreでAndroidのWebViewをInspectする</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/0JBxO2jO-AU/inspect_android_webview_with_weinre.php" />
    <id>tag:memolog.org,2013://1.540</id>

    <published>2013-02-02T13:52:00Z</published>
    <updated>2013-02-04T06:26:54Z</updated>

    <summary type="html">AndroidのWebViewをinspectするという話</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="node" label="node" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="phonegap" label="phonegap" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
AndroidのWebViewをinspectするという話。調べてたら&lt;a href="http://gihyo.jp/dev/serial/01/phonegap2/0003"&gt;第3回　weinreを使ったiOS／Androidアプリの動作検証：もっと使おうPhoneGap／Cordova 2.0.0｜gihyo.jp ... 技術評論社&lt;/a&gt;にすでに詳細に書いてあったのでそちらも参考に。&lt;a href="https://hacks.mozilla.org/2013/01/remote-debugging-firefox-os-with-weinre/"&gt;Remote Debugging Firefox OS with Weinre &amp;#10025;Mozilla Hacks &amp;#8211; the Web developer blog&lt;/a&gt;の話だと、Firefox OSでも同じようにinspectができるみたい。
&lt;/p&gt;
&lt;p&gt;
なお、iOSの場合は、&lt;a href="http://memolog.org/2012/11/inspect_uiwebview_with_safari.php"&gt;SafariからUIWebViewのHTMLをinspectする&lt;/a&gt;で紹介した方法で簡単にinspectをすることができます（アプリ内のUIWebViewをinspectする場合は、Xcodeでアプリをビルドしないとできません）。
&lt;/p&gt;
&lt;p&gt;
Androidの場合、標準的な方法としては、&lt;a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging"&gt;Remote Debugging&lt;/a&gt;があるのですが、これは携帯端末側のブラウザで開いているページを共有するような感じなので、アプリ内のページをinspectすることができない。あとUSBでの接続が必要。（ちなみにAndoridの4.2では開発者用のオプションは設定のAbout PhoneのBuild numberを7回タップしないと表示されないらしい。）
&lt;/p&gt;
&lt;p&gt;
もう一つの方法として、&lt;a href="http://html.adobe.com/jp/edge/inspect/"&gt;Adobe Edge Inspect&lt;/a&gt;を使用するという方法があります。Adobe Edge Inspectではweinreを使用してinspectするので、基本的な操作はweinreと同じですが、複数台の端末を同時に扱えるところが便利（無償版だと1台のみ）。あとweinreでは必要なscriptを埋め込む作業が必要ない。これもありがたい。なので、普通のWebページをinspectする場合はAdobe Edge Inspectがおすすめなのですが、Adobe Edge InspectはPC側のChromeで表示したページを携帯端末側に表示させるため、アプリ内のWebViewを表示することができない。
&lt;/p&gt;
&lt;p&gt;
それで最初の&lt;a href="http://gihyo.jp/dev/serial/01/phonegap2/0003"&gt;第3回　weinreを使ったiOS／Androidアプリの動作検証：もっと使おうPhoneGap／Cordova 2.0.0｜gihyo.jp ... 技術評論社&lt;/a&gt;に戻るのですが、Androidアプリ内のWebViewをinspectするには自分でweinreを起動してinspectするしかなさそう。
&lt;/p&gt;
&lt;p&gt;
weinreのインストール方法は下記のような感じ。Nodeが必要なのでHomebrewを使って一緒にインストール。Homebrewのインストールは&lt;a href="http://memolog.org/2012/09/rvm_jewelrybox_homebrew.php"&gt;RVM / JewelryBox / Homebrew をインストール&lt;/a&gt;を参考。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
brew install node
npm -g install weinre
&lt;/pre&gt;
&lt;p&gt;
HomebrewでインストールしたNode(npm)でweinreをインストールした場合、/usr/local/share/npm/bin/weinre にアプリケーションのエイリアスが作られるのですが、ここはパスが通っていないので、.bash_profileを開いて、PATHの設定を追加（PATH=$PATH:/usr/local/share/npm/bin）。なお、&lt;a href="http://nodejs.org/download/"&gt;Nodeのインストーラー&lt;/a&gt;でインストールした場合は、エイリアスが/usr/local/bin/weinreに作られるのでパスを通さなくても大丈夫。これで新しいターミナルを開いて「weinre」と入力するだけで、weinreが起動できます。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
weinre
&lt;/pre&gt;
&lt;p&gt;
weinreは、オプションなしだと&lt;a href="http://localhost:8080/"&gt;localhost:8080&lt;/a&gt;で動くので、そこにアクセスすると実際にweinreの画面が確認できます。
&lt;/p&gt;
&lt;p&gt;
しかしlocalhostで動かすと、あとで埋め込む予定のスクリプトに携帯端末からアクセスできなくなります。ので、Wifiで使用しているIPでアドレスを設定します。同じWifiで接続すれば、このIPで携帯端末からでもアクセスが可能になります。
&lt;/p&gt;
&lt;p&gt;
Macの場合、システム環境設定のネットワークの項目で、Wifiに接続済みの場合「状況」の箇所にIPが表示されます（もしくはアプリケーションフォルダのユーティリティから、ネットワークユーティリティを開いて、Wifiのインターフェース情報を確認する）。weinreのオプションについては&lt;a href="http://people.apache.org/~pmuellr/weinre/docs/latest/Running.html"&gt;weinre - Running&lt;/a&gt;などを参照。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
weinre --boundHost 192.168.0.1(WifiでMacに設定されているIP)
&lt;/pre&gt;
&lt;p&gt;
そして確認する画面のHTMLに次のようなスクリプトを埋め込む。PhoneGap(Cordova)の場合は、config.xmlに&amp;lt;access origin=&amp;quot;192.168.0.1&amp;quot; /&amp;gt;を加えて、スクリプトへのアクセスを許可する。そしてビルドしなおして端末にインストールする。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
&amp;lt;script src=&amp;quot;http://192.168.0.1:8080/target/target-script-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
これで、Android携帯でアプリ画面にアクセスすると、先ほどのweinreの画面で携帯からのアクセスがあったことが分かります。そこから「debug client user interface」のリンクをクリックすると、inspectのための画面(/client)が表示されます。
&lt;/p&gt;
&lt;p&gt;
という感じで、若干手間がかかるのですが、Node/weinreのインストール自体は簡単ですし、Androidの端末上でしか再現しない問題をinspectなしで解決する方がずっと大変なので、それよりはましかなと。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/0JBxO2jO-AU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/02/inspect_android_webview_with_weinre.php</feedburner:origLink></entry>

<entry>
    <title>main要素 と default implicit ARIA semantics</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/oWPCZAg5BoU/main_element_and_default_implicit_aria_semantics.php" />
    <id>tag:memolog.org,2013://1.539</id>

    <published>2013-01-31T17:00:00Z</published>
    <updated>2013-02-04T01:18:13Z</updated>

    <summary type="html">HTML5.1で追加されるmain要素についてと、意味情報としてのdefault implicit ARIA semanticsについて</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aria" label="aria" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="html" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="html5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="semantics" label="semantics" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://www.w3.org/QA/2013/01/openweb-weekly-02.html"&gt;Open Web Platform Weekly Summary - 2013-01-20 - 2013-01-27 - W3C Blog&lt;/a&gt;にて、HTML5.1で追加される&lt;a href="http://www.w3.org/html/wg/drafts/html/master/grouping-content.html#the-main-element"&gt;main要素&lt;/a&gt;がFirefoxのコードにお目見えしたという話が掲載されていました。&lt;a href="http://nightly.mozilla.org/"&gt;Firefox Nightly&lt;/a&gt;で確認してみたら、確かに入っている雰囲気（&lt;a href="http://codepen.io/memolog/pen/ozlGs"&gt;main要素確認用codepen&lt;/a&gt;でmain要素をinspectすると、main要素用にstyleが追加されているのが分かる）。&lt;a href="https://www.google.com/intl/ja/chrome/browser/canary.html"&gt;Chrome Canary&lt;/a&gt;でも対応している雰囲気。
&lt;/p&gt;
&lt;p&gt;
main要素は、ドキュメントの中で「メイン」にあたるコンテンツを囲う要素として定義されています（The main element represents the main content section of the body of a document or application. ）。sectioning contentは作らない。ドキュメントの中には一つしかおけず、article、aside、footer、header、nav要素の子要素としても含めることは禁止されている。main要素はメインコンテンツ全体を包含するのだからarticle要素の1コンテンツの子要素にはなりえないし、メインを補完するような要素のasideの中には含まれない、サイトのナビゲーションもメインの要素ではないと。main要素の導入に至る背景などを含めた詳細は&lt;a href="http://myakura.hatenablog.com/entry/2012/12/01/025158"&gt;HTMLに提案中のmain要素 - fragmentary&lt;/a&gt;に書かれています。
&lt;/p&gt;
&lt;p&gt;
また、main要素には&lt;a href="http://www.w3.org/html/wg/drafts/html/master/dom.html#wai-aria"&gt;WAI-ARIA&lt;/a&gt;の項目で、「Strong native semantics and default implicit ARIA semantics」としてmain roleが定義されています。main
要素は明示的にrole属性を付与しなくても、main roleの属性（をつけたのと同じ意味的情報）を持っている（仕様にはブラウザが実装的にそれをサポートするまでは、明示的にrole='main'を付与した方が良いとも書いてありますけど）。
&lt;/p&gt;
&lt;p&gt;
「default implicit ARIA semantics」の意味はWAI-ARIAの「&lt;a href="http://www.w3.org/TR/wai-aria/host_languages#implicit_semantics"&gt;implicit WAI-ARIA semantics&lt;/a&gt;」と同等の意味らしいのですが、そこには下記のように書かれてあります。
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
WAI-ARIA is designed to provide semantic information about objects when host languages lack native semantics for the object. WAI-ARIA is designed, however, to provide additional semantics for many host languages. Furthermore, host languages over time can evolve and provide new native features that correspond to WAI-ARIA features. Therefore, there are many situations in which WAI-ARIA semantics are redundant with host language semantics.
&lt;/p&gt;&lt;p&gt;
These host language features can be viewed as having "implicit WAI-ARIA semantics". User agent processing of features with implicit WAI-ARIA semantics would be similar to the processing for the WAI-ARIA feature. The processing might not be identical because of lexical differences between the host language feature and the WAI-ARIA feature, but generally the user agent would expose the same information to the accessibility API. Features with implicit WAI-ARIA semantics satisfy WAI-ARIA structural requirements such as required owned elements, required states and properties, etc. and do not require explicit WAI-ARIA semantics to be provided.
&lt;/p&gt;
&lt;p&gt;
For example, if an element with the functionality already exists, such as a checkbox or radio button, use the native semantics of the host language. WAI-ARIA markup is only intended to be used to enhance the native semantics (e.g., indicating that the element is required with aria-required), or to change the semantics to a different purpose form the standard functionality of the element.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
WAI-ARIAは、対象のオブジェクトとか機能が、本来的に持っている意味（native semantics）が不足している場合に、意味的な情報を提供するためにデザインされている。一方で、明示しなくてもWAI-ARIAが提供している意味的な情報を含有しているとみなせる機能もあり、それがその機能のimplicit WAI-ARIA semanticsという。たとえば、a要素で作られたリンクは&lt;a href="http://www.w3.org/TR/wai-aria/roles#link"&gt;linkのrole&lt;/a&gt;を意味的に含有していると見なせる。
&lt;/p&gt;
&lt;p&gt;
native semanticsとは、対象の機能が本来的に持っている意味的な情報で、たとえば、checkboxはcheckboxとしての意味をそもそも持っている、みたいな。その本来的に持っている意味情報が、WAI-ARIAの定義と重なっていれば、implicit WAI-ARIA semanticsを含有しているとも言える。その場合、たとえば「必須」のcheckboxみたいに、その機能が本来的に持っていない意味を追加したい場合だけ、area-requiredみたいな属性を追加すれば良い。または、その要素の標準的な使用方法と異なる意味で使うときに、意味的な情報をoverrideするためにWAI-ARIAを使用する（HTMLの場合、default implict ARIA semanticsの変更には、制約(Restriction)が定義されている）。
&lt;/p&gt;
&lt;p&gt;
Strong native semanticsについては、下記のように書かれています。
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Host languages MAY document features that cannot be overridden with WAI-ARIA (these are called &lt;strong&gt;"strong native semantics"&lt;/strong&gt;). These can be features that have implicit WAI-ARIA semantics, as well as features where the processing would be uncertain if the semantics were changed with WAI-ARIA. Conformance checkers MAY signal an error or warning when a WAI-ARIA role is used on elements with strong native semantics, but as described above, user agents MUST still use the value of the the semantic of the WAI-ARIA role when exposing the element to accessibility APIs.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
native semantics（とそれに付帯するimplicit ARIA semantics）は、意味的な情報を変更したければ変更することが許容される。たとえば、a要素のリンクを「link」という意味ではなく、「tab」型のナビゲーションのタブとしても使うこともできる。
&lt;/p&gt;
&lt;p&gt;
strong native semanticsの場合は、本来的な意味以外での使用を想定しなくて良いみたいな含意がある（と思う）。たとえば、nav要素はnavigation roleがstrong native semanticsなimplicit ARIA semanticsとして付与されている。nav要素はナビゲーション用途以外の使い方なんてないんだから、別途role属性がついていても、それを無視しても良いと（HTMLなどhost languageが）定義するかもしれないと（一方でaccessibility APIsを通して要素の情報を得る場合はrole属性の意味を使わないといけないとしている）。
&lt;/p&gt;
&lt;p&gt;
つまり、main要素は、HTMLの定義からも、WAI-ARIA semanticsな面からも「メインコンテンツを囲う」という、それだけの用途を持った要素と言えます。他の用途で使う余地がないという意味で、わかりやすいといえば分かりやすい。あえて新しい要素を定義しなくても良いような気もしますけど（div role='main'でも十分な感はある）、HTMLタグを適切に使用するだけで適切なWAI-ARIA semanticsも持たせることができるというのは意味のあることかなと思います。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/oWPCZAg5BoU" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/02/main_element_and_default_implicit_aria_semantics.php</feedburner:origLink></entry>

<entry>
    <title>Navigation TimingとDom processing phase</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/6GKF8N-g0LM/dom_processing_phase.php" />
    <id>tag:memolog.org,2013://1.535</id>

    <published>2013-01-28T22:00:00Z</published>
    <updated>2013-01-28T13:36:51Z</updated>

    <summary type="html">Navigation Timingの仕様では、ナビゲーションや要素にアクセスするタイミングの情報を得ることができる。このNavigation Timingの情報を表示するには、ブラウザのデベロッパーツールなどのコンソールで、window.performance.timingを実行する。現在のサポートブラウザはCan I use... Support tables for HTML5, CSS3, etcの通り。
</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="performance" label="performance" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://www.w3.org/TR/navigation-timing/"&gt;Navigation Timing&lt;/a&gt;の仕様では、ナビゲーションや要素にアクセスするタイミングの情報を得ることができる。このNavigation Timingの情報を表示するには、ブラウザのデベロッパーツールなどのコンソールで、&lt;a href="http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute"&gt;window.performance.timing&lt;/a&gt;を実行する。現在のサポートブラウザは&lt;a href="http://caniuse.com/#feat=nav-timing"&gt;Can I use... Support tables for HTML5, CSS3, etc&lt;/a&gt;の通り。
&lt;/p&gt;
&lt;p&gt;
取得できる情報は下の画像のグラフのような値。最初の値であるnavigationStartは、ひとつ前のDocumentをunloadする作業を開始した直後に発生する（前のDocumentがなければfetchStartと同じになる）。そして、リダイレクトが必要なリダイレクトの時間、新しいDocumentの取得をし始めたらfetchStart、domainのlookup、サーバーとの接続、リクエスト、レスポンス、そしてDOMの処理へと進みます。このあたりは&lt;a href="http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface"&gt;4.2 The PerformanceTiming interface&lt;/a&gt;に詳しく載っています。
&lt;img src="http://www.w3.org/TR/navigation-timing/timing-overview.png" class="photo"/&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.w3.org/TR/navigation-timing/#dom-performancetiming-domloading"&gt;domLoading&lt;/a&gt;には、current document readinessが"loading"の状態になる直前の時間が入る（This attribute must return the time immediately before the user agent sets the current document readiness to "loading"）。&lt;a href="http://www.w3.org/TR/html5/dom.html#current-document-readiness"&gt;current document readiness&lt;/a&gt;は、Documentオブジェクトの待ち受け状態で、Documentオブジェクトが新しく作成されると、そのDocumentのcurrent document readinessは「loading」の状態になる。つまり、domLoadingはDocumentオブジェクトが新しく作成されたタイミングで発生すると。
&lt;/p&gt;
&lt;p&gt;
上の画像ではすべての処理が直列に行われるようなイメージですが、実際の動きを確認した限りでは、DocumentはresponseStartの直後に新しく作成するようで、responseEndより若干先に始まる（並列で処理される）。Firebugでperformance.timingを実行すると、下の画像のようなグラフィカルな感じになって見やすいのですが、「Dom Processing」の項目がresponseEndからdomCompleteの間までのグラフになっているので、若干語弊があるように見えなくもない（domLoadingは「Recieving」の途中で発生している）。でもクリティカルパスの可視化という意味では間違いではないかもしれない（responseEndが終わらない限りはDom processingが終わることはない）。そのあたりの意図は不明...
&lt;img src="http://farm9.staticflickr.com/8055/8404329267_eeba922823_z.jpg" class="photo" /&gt;
&lt;/p&gt;
&lt;p&gt;
そしてdomLoadingの次はdomInteractive。これはcurrent document redinessが「interactive」の状態になる直前の時間で、&lt;a href="http://www.w3.org/TR/html5/syntax.html#the-end"&gt;interactive&lt;/a&gt;は、HTML parserがストップしたらそのように設定される。つまり、HTML(DOM)のパースと、Javascriptの実行（スクリプトの評価とかイベントハンドラの登録とか）などが含まれる。scriptタグにdefer属性がある場合は「interactive」よりも後に実行される（DOMContentLoadedのイベント発生より前）。CSSについては&lt;a href="http://memolog.org/2013/01/a_style_sheet_that_is_blocking_scripts_and_dom_content_loaded.php"&gt;a style sheet that is blocking scripts と DOMContentLoaded&lt;/a&gt;で記載した通り、Javascriptがパーサーをブロックするかどうかで異なるけれど、たいていはinteractiveの前にavailable to scriptな状態になっているはず。
&lt;/p&gt;
&lt;p&gt;
domInteractiveの後に、defer属性のついたscriptが処理されて、DOMContentLoadedのイベントが発生して、このイベントを待っている処理が実行される（DOMContentLoadedEventStart）。jQueryでready状態を待って処理を実行する場合は、DOMContentLoadedのイベントを待っているので、このタイミングで実行されることになる。
&lt;/p&gt;
&lt;p&gt;
そしてDOMContentLoadedで実行された処理が終わるとDOMContentLoadedEventEndとなり、HTMLパースしたときに見つけた画像の読み込みなど、load event前に終わらないといけないものが残っていたら、終わるのを待って、current document redinessが「complete」になる。そして(on)loadイベントが発生する。(on)loadでイベントを待っている処理がある場合はそこから実行される。
&lt;/p&gt;
&lt;p&gt;
という感じで、performance.timingでDom processingの流れをながめると、(1) domLoading -&gt; (2) domInteractive -&gt; (3) domContentLoadedEventStart -&gt; (4) domContentLoadedEventEnd) -&gt; (5) domComplete -&gt; (6) load(EventStart/EventEnd) という観測地点があることが分かる。(1)から(2)までは、HTMLのパース（とJavascriptの読み込みと実行、あとたいていの場合CSSのロード）の処理の長さが推測できる。(2)から(3)は主にdeferになったscriptの実行時間、(3)から(4)はdomContentLoadedのイベントで発生した処理の時間（主にjQueryでreadyにしていた処理が入ると思われる）、(4)から(5)は、パース時に取得した画像の読み込みなど、そのほかload前に終わられる処理の時間などが推測される（(5)から(6)はほぼ同時）。たぶん。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/6GKF8N-g0LM" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/01/dom_processing_phase.php</feedburner:origLink></entry>

<entry>
    <title>style要素のscoped属性</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/AXkql6cgsos/style_scoped.php" />
    <id>tag:memolog.org,2013://1.538</id>

    <published>2013-01-27T22:05:00Z</published>
    <updated>2013-01-27T22:05:02Z</updated>

    <summary type="html">Firefox Development Highlights - H.264 &amp;amp;amp; MP3 support on Windows, scoped stylesheets + more &amp;amp;#10025;Mozilla Hacks &amp;amp;#8211; the Web developer blog(日本語)にて、Firefoxのnightlyでstyle要素のscoped属性に対応したという話が出ていたので、試してみました。style scoped動作確認用のcodepen</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="html" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="https://hacks.mozilla.org/2013/01/firefox-development-highlights-h-264-mp3-support-on-windows-scoped-stylesheets-more/"&gt;Firefox Development Highlights - H.264 &amp;amp; MP3 support on Windows, scoped stylesheets + more &amp;#10025;Mozilla Hacks &amp;#8211; the Web developer blog&lt;/a&gt;（&lt;a href="https://dev.mozilla.jp/2013/01/firefox-development-highlights-h-264-mp3-support-on-windows-scoped-stylesheets-more/"&gt;日本語&lt;/a&gt;）にて、&lt;a href="http://nightly.mozilla.org/"&gt;Firefoxのnightly&lt;/a&gt;でstyle要素のscoped属性に対応したという話が出ていたので、試してみました。&lt;a href="http://codepen.io/memolog/pen/uedGg"&gt;style scoped動作確認用のcodepen&lt;/a&gt;。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.w3.org/TR/html5/document-metadata.html#attr-style-scoped"&gt;style scopeの仕様&lt;/a&gt;によると、sytle scoped要素の親要素をルートとして、その範囲のみにstyleを適用させるみたいな感じ。親要素の最初のノードとして配置する必要がある（コメントノードなどinter-element whitespaceを除く）。
&lt;/p&gt;
&lt;p&gt;
そして親要素のcontent modelは&lt;a href="http://www.w3.org/TR/html5/dom.html#transparent"&gt;transparent&lt;/a&gt;であってはいけないらしい。代表的なのは&lt;a href="http://www.w3.org/TR/html5/text-level-semantics.html#the-a-element"&gt;a要素&lt;/a&gt;（それ以外はinsとかmap要素がtransparentらしい）で、
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
&amp;lt;a&amp;gt;
&amp;lt;style scoped&amp;gt;
h1{ color:black }
&amp;lt;/style&amp;gt;
&amp;lt;h1&amp;gt;foobar&amp;lt;/h1&amp;gt;
&amp;lt;/a&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
ということはできないことになる。a要素の中にdivとか何かtransparnetでないものを入れないといけない。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
&amp;lt;a&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;style scoped&amp;gt;
h1{ color:black }
&amp;lt;/style&amp;gt;
&amp;lt;h1&amp;gt;foobar&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/a&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
あと、@global at-ruleが定義されていて、@globalで制限されたCSSは通常のstyle要素と同じようにDocument全体に適用されるらしい（まだブラウザ上では試せない）。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
&amp;lt;div&amp;gt;
&amp;lt;style scoped&amp;gt;
@global{ div{ color:blue } }
h1 { width:95%; }
&amp;lt;/style&amp;gt;
&amp;lt;h1&amp;gt;foobar&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;
blue
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
style scopedは、たとえば、この記事の中でだけ使いたいCSSなどを全体のCSSに配慮することなしに使うことができるという意味で便利。ドキュメント全体のCSSと連携するようなCSSが、個別の記事あるとメンテナンス大変だと思うけど。DOMとCSSの分離という点からもそもそもstyle属性は多用するものではないだろうけど、ウィジェット的な、独立分離が可能なパーツ的なものの場合には使いどころもあると思われる（iframe使えば良いかもしれないけど）。
&lt;/p&gt;
&lt;p&gt;
あと、style scopedではなくても、親要素にid属性つけてそれをCSSで指定すれば同じようなことはできなくもない（style要素でインラインでする必要もないけど）。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
&amp;lt;div id=&amp;quot;foobar&amp;quot;&amp;gt;
&amp;lt;style&amp;gt;
#foobar h1{ color:black }
&amp;lt;/style&amp;gt;
&amp;lt;h1&amp;gt;foobar&amp;lt;/h1&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
CSSのパフォーマンス的なところは不明ですが、scoped属性あるなしに関わらず、&lt;a href="http://www.w3.org/TR/html5/document-metadata.html#styling"&gt;W3CのStyleの仕様では&lt;/a&gt;、style要素で@importなどでリソースを参照しない場合は同期実行されるので、レンダリングは一時的にブロックされる、かもしれない。
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
When a style sheet is ready to be applied, its style sheet ready flag must be set. If the style sheet referenced no other resources (e.g. it was an internal style sheet given by a style element with no @import rules), then the style rules must be synchronously made available to script; otherwise, the style rules must only be made available to script once the event loop reaches its "update the rendering" step.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
多用するものではないと思いますけど、ここだというときに使えると、いいですね！
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/AXkql6cgsos" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/01/style_scoped.php</feedburner:origLink></entry>

<entry>
    <title>a style sheet that is blocking scripts と DOMContentLoaded</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/b5vp5MpLRZ0/a_style_sheet_that_is_blocking_scripts_and_dom_content_loaded.php" />
    <id>tag:memolog.org,2013://1.537</id>

    <published>2013-01-23T15:07:00Z</published>
    <updated>2013-01-23T15:09:40Z</updated>

    <summary type="html">DOMContentLoaded and stylesheets &amp;amp;middot; molily（via DOMContentLoaded - Mozilla event reference | MDN）にて、head内のスタイルシートとJavascriptの配置の違いで、DOMContentLoadedイベントが発生するタイミングが変わるという話がされています。スタイルシートのあとにJavascriptが入っていると、DOMContentLoadedはスタイルシートをロードしたあとに発生して、スタイルシートのあとにJavascriptがないと、スタイルシートのロードを待たずにDOMContentLoadedが発生する。</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="parsehtml" label="parsehtml" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://molily.de/weblog/domcontentloaded"&gt;DOMContentLoaded and stylesheets &amp;middot; molily&lt;/a&gt;（via &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/DOMContentLoaded_%28event%29"&gt;DOMContentLoaded - Mozilla event reference | MDN&lt;/a&gt;）にて、head内のスタイルシートとJavascriptの配置の違いで、DOMContentLoadedイベントが発生するタイミングが変わるという内容が掲載されています。スタイルシートのあとにJavascriptが入っていると、DOMContentLoadedはスタイルシートをロードしたあとに発生して、スタイルシートのあとにJavascriptがないと、スタイルシートのロードを待たずにDOMContentLoadedが発生する。
&lt;/p&gt;
&lt;p&gt;
これは&lt;a href="http://www.w3.org/TR/html5/syntax.html#parsing-main-incdata"&gt;Parsingの仕様&lt;/a&gt;によると、&lt;a href="http://www.w3.org/TR/html5/scripting-1.html#pending-parsing-blocking-script"&gt;pending parsing-blocking script&lt;/a&gt;の実行前に、Documentが
&lt;a href="http://www.w3.org/TR/html5/document-metadata.html#has-no-style-sheet-that-is-blocking-scripts"&gt;has no style sheet that is blocking scripts&lt;/a&gt;の状態になるまで、&lt;a href="http://www.w3.org/TR/html5/webappapis.html#spin-the-event-loop"&gt;event loopをspinさせる&lt;/a&gt;からということになるみたい。
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
If the parser's Document has a style sheet that is blocking scripts or the script's "ready to be parser-executed" flag is not set: spin the event loop until the parser's Document has no style sheet that is blocking scripts and the script's "ready to be parser-executed" flag is set.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
つまり、pending parsing-blocking script（HTMLパーサーがinsertしたscriptタグのうち、deferやasync属性がついていないもの）が実行前に、style sheet that is blocking scripts（HTMLパーサーが追加したスタイルシートのうち、ロードされていないもの（style sheet ready flag is not yet set））がある場合、ロードされるまで&lt;a href="http://www.w3.org/TR/html5/webappapis.html#processing-model-3"&gt;event loopをまわす&lt;/a&gt;。スタイルシートがロードされ、style sheet readyの状態になると、event loopの「update the rendering」のステップでscriptでの利用が可能な状態になり、他にロード待ちがなければscriptの実行に移ると。こうすることで、スタイルシートで指定しているフォントの色なんかの値を、scriptが適切に受け取ることができると。
&lt;/p&gt;
&lt;p&gt;
DOMContentLoadedのイベントは、&lt;a href="http://www.w3.org/TR/html5/syntax.html#the-end"&gt;8.2.6 The end&lt;/a&gt;に記載によれば、HTMLのパースが一通り完了して、defer属性がついたscriptなどを処理したあとに発生する。ので、スタイルシートの後にscriptがある場合、scriptがパーサーをブロックしつつスタイルシートのロードを待った上で実行されるため、DOMContentLoadedはスタイルシートがロードされるまで待つことになる。一方、スタイルシートの後にscriptがない場合は、パーサーをブロックしてロードを待つことがないため、ロードが完了していなくても、HTMLパースが完了してDOMContentLoadedのイベントが発生する。と、いうことになる。みたい。
&lt;/p&gt;
&lt;p&gt;
ただ、&lt;a href="http://molily.de/weblog/domcontentloaded"&gt;DOMContentLoaded and stylesheets &amp;middot; molily&lt;/a&gt;の&lt;a href="http://molily.de/assets/domcontentloaded/t2-link-external-script.html"&gt;Testcase #2&lt;/a&gt;で試した感じでは、Operaはscriptの実行前にスタイルシートのロードを待たない雰囲気。そのためDOMContentLoadedの実行がロードより早く、getComputedStyleで取得したフォントの色の値にスタイルシートで設定した色が反映できていない（他のブラウザはheadの部分でパーサーがブロックされるのでコンテンツが表示されるまでに時間がかかる）。
&lt;/p&gt;
&lt;p&gt;
Operaの動作の差異を気にしないとしても、scriptの実行時（ダウンロード時ではない）にスタイルシートがavailableな状態になっていないと、実行はブロックされた状態になるので、スタイルシートのロードをできるだけ先にして、javascriptはできるだけ後にする、というのが基本的には良いかもしれない。
&lt;/p&gt;
&lt;p&gt;
scriptで現在のスタイルの値をまったく参照しないみたいな、スタイルシートとscriptを独立できるのであれば、scriptを先に読み込むというのもありかもしれません（その方がロードによるブロックは発生しない）。ただ、Safari(6)とChrome(24)では、結局スタイルシートがロードし終わるまでコンテンツが表示されなかったですが...（Firefoxは表示される）
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/b5vp5MpLRZ0" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/01/a_style_sheet_that_is_blocking_scripts_and_dom_content_loaded.php</feedburner:origLink></entry>

<entry>
    <title>jQueryで要素を作成するときのパフォーマンス</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/DmqukcS-RqI/jquery_peformance_about_creating_element.php" />
    <id>tag:memolog.org,2013://1.534</id>

    <published>2013-01-15T16:15:00Z</published>
    <updated>2013-01-16T09:47:14Z</updated>

    <summary type="html">jQueryで要素を作成する場合、jQuery()のExampleを参考にすると、作り方としては下記の二通りの方法があります。それでどちらの方法が処理的に速いのかなと思って</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jquery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="performance" label="performance" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
jQueryで要素を作成する場合、&lt;a href="http://api.jquery.com/jQuery/#entry-examples-1"&gt;jQuery()のExample&lt;/a&gt;を参考にすると、作り方としては下記の二通りの方法があります。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
$( &amp;quot;&amp;lt;div&amp;gt;&amp;lt;p&amp;gt;Hello&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot; ).appendTo( &amp;quot;body&amp;quot; )
&lt;/pre&gt;
&lt;pre class="prettyprint"&gt;
$( &amp;quot;&amp;lt;div/&amp;gt;&amp;quot;, {
&amp;quot;class&amp;quot;: &amp;quot;test&amp;quot;,
text: &amp;quot;Click me!&amp;quot;,
click: function() {
$( this ).toggleClass( &amp;quot;test&amp;quot; );
}
}).appendTo( &amp;quot;body&amp;quot; );
&lt;/pre&gt;
&lt;p&gt;
処理としては、前者は最終的にdocumentFragmentにappendしたdiv要素のinnerHTMLを使って要素を作成して、後者はcreateElementで要素を作成した後に二番目の引数に指定したattributeをそれぞれ設定していく感じ。
&lt;/p&gt;
&lt;p&gt;
それでどちらの方法が処理的に速いのかなと思って、&lt;a href="http://jsperf.com/innerhtml-vs-addattribute-later"&gt;jsperfにテストを用意してみました&lt;/a&gt;。このテストでは、前者のinnerHTMLを使用する方が速かったです。後者の場合はattributeを一つずつ設定していくので、結果としてinnerHTMLより遅くなる雰囲気（たぶん）。設定するプロパティが増えてくると、innerHTMLとの差がより顕著に出るかもしれません。
&lt;/p&gt;
&lt;p&gt;
jsperfのテストでは、さらに下記のような素のJavaScriptで実行した場合の結果もつけてみました。素の方が当たり前ですが、色々何もしないので高速。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
var div = document.createElement('div');
div.setAttribute('class','foobar');
'textContent' in div ? div.textContent = 'foobar' : div.appendChild(document.createTextNode('foobar'));
var $div = $(div);
&lt;/pre&gt;
&lt;p&gt;
最後の行の「var $div = $(div);」のように、引数がDOMElementの場合はjQueryオブジェクトのcontextにその引数を設定するだけみたいなので、素のJavaScriptでDOMElementを生成して、それをjQueryオブジェクトとしてラップする方が速い雰囲気（buildFragmentの過程で生成されるキャッシュが有効に活用できる場合はjQueryで生成した方が総合的には速いのかもしれないけど未確認）。
&lt;/p&gt;
&lt;p&gt;
このテストの場合、&lt;a href="http://www.quirksmode.org/dom/w3c_html.html"&gt;IE8でtextContentが使用できない&lt;/a&gt;ので、そこだけ調整をしています（IE8まで対応したかった）。jQueryにはクロスブラウザを意識した細かい対応が随所にあるので、互換性が低い要素やその操作の場合にはやはりjQueryを使用するのが良さそう。
&lt;/p&gt;
&lt;p&gt;
（追記）&lt;a href="http://jsperf.com/innerhtml-vs-addattribute-later-with-jquery1-9"&gt;jQuery 1.9でも同様のテストをしてみました&lt;/a&gt;（上のテストは1.8.3）。createElementしたあとのattributeの設定が簡素化されたようで（&lt;a href="http://bugs.jquery.com/ticket/12840"&gt;#12840 (Remove (private) parameter "pass" from jQuery.attr and jQuery.access)&lt;/a&gt;）、innerHTMLと遜色なく動作する雰囲気。createElementした後でchainで個別にattributeを設定する方が少しだけ早い。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/DmqukcS-RqI" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2013/01/jquery_peformance_about_creating_element.php</feedburner:origLink></entry>

<entry>
    <title>Google Closure: compileしたjavascriptを複数同時に使う</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/xZDQGnPERDo/prevent_variables_collides_in_closure_compiled_scripts.php" />
    <id>tag:memolog.org,2012://1.533</id>

    <published>2012-12-29T22:00:00Z</published>
    <updated>2012-12-28T17:08:26Z</updated>

    <summary type="html">Closure CompilerのAdvanced modeでscriptをcompileした場合、Property RenamingとFlatteningがかかるので、global scope上にabとかBaとか短い名前のプロパティがたくさん作られるようになります。compileしたスクリプトが一つの場合は問題ありませんが、まったく別にcompileしたスクリプトを複数併用しようとすると、プロパティ名が衝突してしまって使うことができないという状態になります。その回避法</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="googleclosure" label="google-closure" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
Closure CompilerのAdvanced modeでscriptをcompileした場合、Property RenamingとFlatteningがかかるので、global scope上にabとかBaとか短い名前のプロパティがたくさん作られるようになります。compileしたスクリプトが一つの場合は問題ありませんが、まったく別にcompileしたスクリプトを複数併用しようとすると、プロパティ名が衝突してしまって使うことができないという状態になります。
&lt;/p&gt;
&lt;p&gt;
併用するスクリプトを全部まとめて1つのファイルにcompileすることで回避することもできますが、--output_wrapperというオプションでスクリプト全体を無名関数で囲われるかたちにすれば、複数のスクリプトを併用しつつ、global scope上でプロパティ名が衝突するのを回避することができます。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
java -jar compiler.jar --output_wrapper="(function(){%output%})();" ....
&lt;/pre&gt;
&lt;p&gt;
と、ブログに書く前にGoogleで検索したら&lt;a href="http://code.google.com/p/closure-compiler/wiki/FAQ#When_using_Advanced_Optimizations,_Closure_Compiler_adds_new_var"&gt;FAQ - closure-compiler - Frequently asked questions. - Closure Compiler (When using Advanced Optimizations, Closure Compiler adds new variables to the global scope. How do I make sure my variables don't collide with other scripts on the page?)&lt;/a&gt;にさらっと書いてありました。
&lt;/p&gt;
&lt;p&gt;
併用するスクリプトにおいて利用ライブラリがほぼ共通するような場合は、使用するスクリプトファイルをまとめてcompileしつつ、--moduleオプションで共有部分とそうでない部分のファイルを分割する、という方が良いかもしれません（試してないけど）。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/xZDQGnPERDo" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2012/12/prevent_variables_collides_in_closure_compiled_scripts.php</feedburner:origLink></entry>

<entry>
    <title>CSSのサポート状態で条件分岐をする @supports</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/8dJmSYwr_9k/css_supports_at-rule.php" />
    <id>tag:memolog.org,2012://1.532</id>

    <published>2012-12-28T16:12:00Z</published>
    <updated>2012-12-30T15:35:55Z</updated>

    <summary type="html">Native CSS feature detection via the @supports rule - Dev.OperaとOpera Developer News - Why use @supports instead of Modernizr?とFeature queries: the '@supports' ruleについての話。
</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css3" label="css3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://dev.opera.com/articles/view/native-css-feature-detection-via-the-supports-rule/"&gt;Native CSS feature detection via the @supports rule - Dev.Opera&lt;/a&gt;と&lt;a href="http://my.opera.com/ODIN/blog/why-use-supports-instead-of-modernizr"&gt;Opera Developer News - Why use @supports instead of Modernizr?&lt;/a&gt;と&lt;a href="http://www.w3.org/TR/css3-conditional/#at-supports"&gt;Feature queries: the '@supports' rule&lt;/a&gt;についての話。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
@supports (display:flex) {
  section { display: flex }
  ...
}
&lt;/pre&gt;
&lt;p&gt;
@supportsは、上記のような感じで「(property:value)」と指定して、そのプロパティと値をブラウザがサポートしている場合のみ、{}内のCSSが適用されるというもの。at-ruleなので、@supportsを使用できないブラウザでは、{}内は無視される（このへんの詳細は&lt;a href="http://memolog.org/2012/06/how_css_handles_errors.php"&gt;CSSのエラーの扱い方 - メモログ&lt;/a&gt;を参照）。サポート状況は&lt;a href="http://caniuse.com/css-featurequeries"&gt;Can I use CSS Feature Queries&lt;/a&gt;によると、現時点ではOpera（と&lt;a href="http://www.mozilla.jp/firefox/preview/"&gt;Firefox Aurora&lt;/a&gt;）のみなので、実用にはまだ時間がかかりそう。
&lt;/p&gt;
&lt;p&gt;
@supportsの指定では「and」と「or」を使って条件を複数指定することと、「not」を指定して否定の条件を指定することもできます。「else」のようなものはないので、特定の機能をサポートしている場合としていない場合でCSSを宣言したい場合は、@supportsのルールを二つ用意する必要がある。
&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
@supports (display:flex and color:red){ ... }
@supports (display:flex or display:none){ ... }
@supports not (display:flex){ ... }
&lt;/pre&gt;
&lt;p&gt;
CSSの場合は、基本的にサポートしていない値が指定されている場合はうまい感じに無視してくれるので、@supportsはあまり必要としませんが、flexboxのように特定の機能のサポートと関係の強いCSSの指定がたくさんあるような場合は便利。
&lt;/p&gt;
&lt;p&gt;
（参考までに&lt;a href="http://codepen.io/memolog/pen/mHjJy"&gt;閲覧中のブラウザが@supportsに対応している場合は、下の画面が黒くなるcodepen&lt;/a&gt;）
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://myakura.hatenablog.com/entry/2012/08/08/012516"&gt;@supports ― CSSのFeature Queries - fragmentary&lt;/a&gt;もあわせて。
&lt;/p&gt;
        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/8dJmSYwr_9k" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2012/12/css_supports_at-rule.php</feedburner:origLink></entry>

<entry>
    <title>Filter Effects / Adobe CSS FilterLab</title>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/memolog/~3/BxjphzJeqRA/adobe_css_filterlab.php" />
    <id>tag:memolog.org,2012://1.531</id>

    <published>2012-12-24T22:10:00Z</published>
    <updated>2012-12-24T22:11:27Z</updated>

    <summary type="html">Adobeが公開しているCSS FilterLabでは、Filter Functionを簡単に試すことができて便利。</summary>
    <author>
        <name>yamaguchi</name>
        <uri>http://memolog.org</uri>
    </author>
    
        <category term="web" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="css3" label="css3" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://memolog.org/">
        &lt;p&gt;
&lt;a href="http://www.w3.org/TR/filter-effects/"&gt;Filter Effects 1.0&lt;/a&gt;では、HTML上に配置した画像とかにグレースケールなどのフィルターをかけることができます。&lt;a href="http://www.html5rocks.com/en/tutorials/filters/understanding-css/"&gt;Understanding CSS Filter Effects - HTML5 Rocks&lt;/a&gt;にて詳しく紹介されていますが、HTMLの要素に適用できるようにSVGから取り入れられた仕様で、多くのFilter Functionは高速に動きます（手元で試している限りではblurも速い）。対応状況は、&lt;a href="http://caniuse.com/css-filters"&gt;Can I use CSS Filter Effects&lt;/a&gt;にて。今のところChromeとSafariでのみwebkitのプレフィックス付きで確認できます。
&lt;/p&gt;
&lt;p&gt;Adobeが公開している&lt;a href="http://html.adobe.com/webstandards/csscustomfilters/cssfilterlab/"&gt;CSS FilterLab&lt;/a&gt;では、Filter Functionを簡単に試すことができて便利。最新の&lt;a href="https://www.google.com/intl/en/chrome/browser/canary.html"&gt;Google Chrom Canary&lt;/a&gt;を使用すると、さらにCustom Filter (CSS Shade)も試すことができて、よくわからないけどすごい。最新のGoogle Chrome Canaryは、通常のGoogle Chromeとは別にインストールができるのでわりと気楽にインストールしても大丈夫（ chrome://flags/ を開いて、「CSS シェーダを有効にする」の項目を有効にする必要があります）。
&lt;img src="http://farm9.staticflickr.com/8502/8302332641_c32d560599_z.jpg" class="photo"/&gt;
&lt;/p&gt;
&lt;p&gt;
Custom Filterについては、&lt;a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html"&gt;CSS shaders: Cinematic effects for the web | Adobe Developer Connection&lt;/a&gt;に概要とサンプルがありますが、よくわかっておりません。動きとしては、HTMLの構成要素をvertex mesh状にして、vertex shader（vs）によってvertexを操作することで変形させて、ピクセルにレンダリングするときにfragment shader (fs)で設定している色でレンダリングしていくという感じみたい。&lt;a href="http://www.khronos.org/files/opengles_shading_language.pdf"&gt;OpenGL ES Shading Language (PDF)&lt;/a&gt;に詳細の仕様が書かれています。
&lt;/p&gt;

        
    &lt;img src="http://feeds.feedburner.com/~r/jp/memolog/~4/BxjphzJeqRA" height="1" width="1"/&gt;</content>
<feedburner:origLink>http://memolog.org/2012/12/adobe_css_filterlab.php</feedburner:origLink></entry>

</feed>
