<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OTCHY.NET &#187; Development</title>
	<atom:link href="http://www.otchy.net/category/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.otchy.net</link>
	<description>Otchy の技術ネタ。JavaScript 率と Twitter 率がやや高く、他にも PHP/Java/Perl などなど。共通点は Web。</description>
	<lastBuildDate>Wed, 01 Feb 2012 14:39:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>日本語をタイピングして変換しているようにアニメーションできる jQuery プラグイン jaTicker をリリース！</title>
		<link>http://www.otchy.net/20111208/jaticker-released/</link>
		<comments>http://www.otchy.net/20111208/jaticker-released/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 03:59:46 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1740</guid>
		<description><![CDATA[


jquery.jaticker.js はjquery.jaticker.js は日本語のにほんごの変換アニメーションにへんかんあにめーしょんに対応した、たいおうした、ティッカーのてぃっかーの jQuery プラグイ [...]]]></description>
			<content:encoded><![CDATA[<p><script src="/js/jaticker/jquery.jaticker.js"></script></p>
<link rel="stylesheet" href="/js/jaticker/jquery.jaticker.css" type="text/css">
<pre id="jaticker-intro" style="white-space:normal">
<ruby>jquery.jaticker.js は<rt>jquery.jaticker.js は</rt></ruby><ruby>日本語の<rt>にほんごの</rt></ruby><ruby>変換アニメーションに<rt>へんかんあにめーしょんに</rt></ruby><ruby>対応した、<rt>たいおうした、</rt></ruby><ruby>ティッカーの<rt>てぃっかーの</rt></ruby> jQuery <ruby>プラグインです。<rt>ぷらぐいんです。</rt></ruby><ruby>文字列を<rt>もじれつを</rt></ruby><ruby>タイプしている風に<rt>たいぷしているふうに</rt></ruby><ruby>順に表示する事が<rt>じゅんにひょうじすることが</rt></ruby><ruby>出来ます。<rt>できます。</rt></ruby>
</pre>
<p><script>
$(function() {
  $('#jaticker-intro').jaticker();
});
</script></p>
<p><a href="http://phpspot.org/blog/archives/2011/11/jqueryjticker.html" target="_blank">画面上で誰かがタイピングしているようにアニメーションできるjQueryプラグイン「jticker」:phpspot開発日誌</a> で紹介されていた <a href="http://webdev.stephband.info/jticker/" target="_blank">jticker</a> を見た時に、</p>
<p>「カッコイイ！…けど、違う。おれたちの使ってる日本語は漢字仮名交じりの文章なんだ。変換もアニメーションしてなんぼでしょ？日本語の変換アニメーションを採用した CM とかクールじゃない？」</p>
<p>…と思ったので、かなり時間がかかってしまいましたが <a href="http://webdev.stephband.info/jticker/" target="_blank">jticker</a> の日本語対応版とも言える、<a href="/javascript/jaticker/">jaTicker</a> を作りました！</p>
<p>色々とオプションも用意してあるので、使いやすいんじゃないかと思います。<br />
詳しくは、<a href="/javascript/jaticker/">jaTicker</a> を参照して下さい！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111208/jaticker-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gmail 新デザインのフォントサイズを小さくするスクリプト</title>
		<link>http://www.otchy.net/20111207/gsmall/</link>
		<comments>http://www.otchy.net/20111207/gsmall/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 06:48:32 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[greasemonkey]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1755</guid>
		<description><![CDATA[カッとなって書いた。後悔はしていない。
ブックマークレット版
Gsmall

javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet'; [...]]]></description>
			<content:encoded><![CDATA[<p>カッとなって書いた。後悔はしていない。</p>
<p>ブックマークレット版<br />
<a href="javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet';s.type='text/css';s.href='data:text/css;base64,LnB3LC5mTiwuQmt7Zm9udC1zaXplOjkwJX0uQWssLnhZLC5uTSwudkJ7Zm9udC1zaXplOjgwJX0uV3IsLlQtSSwuSi1NLC5ha2h7Zm9udC1zaXplOjEycHh9';d.body.appendChild(s)})(document.getElementById('canvas_frame').contentWindow.document);">Gsmall</a></p>
<pre>
javascript:(function(d,s){s=d.createElement('link');s.rel='stylesheet';s.type='text/css';s.href='data:text/css;base64,LnB3LC5mTiwuQmt7Zm9udC1zaXplOjkwJX0uQWssLnhZLC5uTSwudkJ7Zm9udC1zaXplOjgwJX0uV3IsLlQtSSwuSi1NLC5ha2h7Zm9udC1zaXplOjEycHh9';d.body.appendChild(s)})(document.getElementById('canvas_frame').contentWindow.document);
</pre>
<h4>2011-12-14 追記</h4>
<p>Greasemonkey 版が上手く動いたり上手く動かなかったり、多分タイミングの問題とかあって対応が面倒なので取り下げます。<br />
個人的には Gmail 画面は一回開いたら開きっぱなしなので、ブックマークレット版だけで十分だったりするのです。<br />
それと、ブックマークレット版は CSS の短縮化と適用範囲の拡大を行いました。</p>
<p><del>Greasemonkey 版<br />
<a href="/gm/gsmall.user.js">インストール</a></del></p>
<pre><del>
// ==UserScript==
// @name           Gsmall
// @namespace      http://www.otchy.net/
// @include        https://mail.google.com/mail/*
// @version        1.0.0
// ==/UserScript==

(function (d, func) {
	var h = d.getElementsByTagName('head')[0];
	var s = d.createElement("script");
	s.textContent = '(' + func.toString() + ')(document);';
	h.appendChild(s);
})(document, function(d) {
	var d = d.getElementById('canvas_frame').contentWindow.document;
	var s = d.createElement('link');
	s.rel = 'stylesheet';
	s.type = 'text/css';
	s.href = 'data:text/css;base64,LnB3e2ZvbnQtc2l6ZTo5MCV9LnhZe2ZvbnQtc2l6ZTo4MCV9Lm5Ne2ZvbnQtc2l6ZTo4MCV9LnZCe2ZvbnQtc2l6ZTo4MCV9Lldye2ZvbnQtc2l6ZToxMnB4fS5ULUl7Zm9udC1zaXplOjEycHh9LkotTXtmb250LXNpemU6MTJweH0uYWtoe2ZvbnQtc2l6ZToxMnB4fQ==';
	d.getElementsByTagName('head')[0].appendChild(s);
});
</del></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111207/gsmall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>設定項目とアイコンテーマを追加した 1 Click Config Ver 2.2.0 リリース</title>
		<link>http://www.otchy.net/20111206/1cc-v220/</link>
		<comments>http://www.otchy.net/20111206/1cc-v220/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 05:42:39 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1714</guid>
		<description><![CDATA[最近、iOS設定アプリショートカットアイコンサイトのまとめ : akiyan.com で取り上げて頂いたりして、また少し注目を浴びている 1 Click Config ですが、要望の多かった設定項目 8 つを新たに追加し [...]]]></description>
			<content:encoded><![CDATA[<p>最近、<a href="http://www.akiyan.com/blog/archives/2011/12/ios-shortcut-icon-sites.html" target="_blank">iOS設定アプリショートカットアイコンサイトのまとめ : akiyan.com</a> で取り上げて頂いたりして、また少し注目を浴びている 1 Click Config ですが、要望の多かった設定項目 8 つを新たに追加しました。<br />
特に「機内モード」「Wi-Fi 同期」辺りは希望が多かったので、活用してもらえるのではないかと思っています。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/12/1cc-newicon.png"><img src="http://www.otchy.net/wp-content/uploads/2011/12/1cc-newicon-200x300.png" alt="" title="1cc-newicon" width="200" height="300" class="aligncenter size-medium wp-image-1715" /></a></p>
<p>そして今回、さらにアイコンテーマ D が追加されました。<br />
これは、色合い的には C と似たデザインであるものの、デフォルトの「設定」アイコンと似せたテーマのため、「設定」アイコンと並べても全く違和感がない仕上がりになっています。<br />
<a href="http://twitter.com/matsumura/" target="_blank">@matsumura</a> さんの力作です。あわせてお試し下さい。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/12/1cc-icon-theme-d.png"><img src="http://www.otchy.net/wp-content/uploads/2011/12/1cc-icon-theme-d-200x300.png" alt="" title="1cc-icon-theme-d" width="200" height="300" class="aligncenter size-medium wp-image-1717" /></a></p>
<p>1 Click Config の利用は、<a href="/1cc/" target="_blank">http://www.otchy.net/1cc/</a> を iPhone 上の Safari で開いて行います。</p>
<p>QR コードはこちら。<br />
<img src="/1cc/qr.png" width="132" height="132" /></p>
<p>すでに 1 Click Config を利用済みの方は「設定」画面から「最新版を確認する」ボタンを押して下さい。ローカルキャッシュを破棄して最新版に更新します。<br />
これから利用される方は最初から Ver 2.2.0 になるので特に何もしなくて構いません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111206/1cc-v220/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>プロファイルのインストールに対応した 1 Click Config Ver 2.1.0 リリース</title>
		<link>http://www.otchy.net/20111128/1cc-v210/</link>
		<comments>http://www.otchy.net/20111128/1cc-v210/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 08:30:49 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1656</guid>
		<description><![CDATA[
iPhoneの設定アプリのショートカットは「プロファイル登録」が最強だ！ ガジェットさん家って記事を読んで、そんな方法があったのか！
…と感銘を受けたので、1 Click Config をバージョンアップさせて、プロフ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc-ver2.1.0.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-ver2.1.0-200x300.png" alt="" title="1cc-ver2.1.0" width="200" height="300" class="alignright size-medium wp-image-1657" /></a><br />
<a href="http://gajethouse.blog3.fc2.com/blog-entry-778.html" target="_blank">iPhoneの設定アプリのショートカットは「プロファイル登録」が最強だ！ ガジェットさん家</a>って記事を読んで、そんな方法があったのか！<br />
…と感銘を受けたので、1 Click Config をバージョンアップさせて、プロファイルのインストールに対応しました。</p>
<p><a href="/1cc/" target="_blank">http://www.otchy.net/1cc/</a> を iPhone で開いてご利用下さい。</p>
<p>QR コードはこちら。<br />
<img src="/1cc/qr.png" width="132" height="132" /></p>
<p>すでに 1 Click Config を利用済みの方は「設定」画面から「最新版を確認する」ボタンを押して下さい。ローカルキャッシュを破棄して最新版に更新します。<br />
これから利用される方は最初から Ver 2.1.0 になるので特に何もしなくて構いません。</p>
<p>従来の方法だとどんなに頑張っても設定画面の起動時にある程度のもたつきが発生していたのですが、プロファイルのインストールによる方法だと、かなり改善していて満足です。</p>
<p>ただ、未署名のプロファイルをインストールしないといけないので、OTCHY.NET が信頼出来ない人は実行しないで下さいね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111128/1cc-v210/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google リーダー公式機能だけで簡単はてブ連携</title>
		<link>http://www.otchy.net/20111124/google-reader-to-hatebu/</link>
		<comments>http://www.otchy.net/20111124/google-reader-to-hatebu/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 01:35:29 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hatebu]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1630</guid>
		<description><![CDATA[退化したGoogleリーダー周辺事情を見直してみました♪ &#124; 普通のサラリーマンのiPhone日記 をフムフムと読んでいて、Google リーダーの「送信先」機能なるものがいい感じに使えそうというのが分かったのですが、残 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://iphone-diary.com/?p=10403" target="_blank">退化したGoogleリーダー周辺事情を見直してみました♪ | 普通のサラリーマンのiPhone日記</a> をフムフムと読んでいて、Google リーダーの「送信先」機能なるものがいい感じに使えそうというのが分かったのですが、残念ながら自分の場合、Twitter を起点とするのではなく、はてブを起点として Twitter に連携したかったので、そのままでは使えませんでした。</p>
<p>そもそも Web 上の情報ははてブに集約していて、Twitter に投稿するかどうかは内容によって振り分けたりしたいのです。<br />
しかもはてブ起点の場合は他にも色々な利点があります。</p>
<ul>
<li>htn.to の URL が付与されて簡易的な解析が有効になる</li>
<li>Twitter 140 文字、はてブ 100 文字なのでコメントの後ろが切れる心配がない (逆連携の時は長すぎると切れる)</li>
<li>状況に応じて Facebook / mixi 投稿も選択可能</li>
<li>タグの分の文字列が 100 文字制限にカウントされない</li>
</ul>
<p>というわけで、はてブを起点とする設定でやってみました。</p>
<p>最初に Google リーダーの設定で送信先のカスタムリンクを作成するところまでは一緒です。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/step01.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/step01-290x300.png" alt="" title="step01" width="290" height="300" class="aligncenter size-medium wp-image-1631" /></a></p>
<p>ここで、名前「はてブ」(任意)、URL「http://b.hatena.ne.jp/add?mode=confirm&#038;is_bm=1&#038;title=${title}&#038;url=${url}」、アイコンのURL「http://b.hatena.ne.jp/favicon.ico」と入力して保存します。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/step02.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/step02-300x85.png" alt="" title="step02" width="300" height="85" class="aligncenter size-medium wp-image-1632" /></a></p>
<p>そうすると、はてブに送信出来るようになります。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/step03.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/step03-300x172.png" alt="" title="step03" width="300" height="172" class="aligncenter size-medium wp-image-1633" /></a></p>
<p>こんな感じ！</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/step04.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/step04-300x270.png" alt="" title="step04" width="300" height="270" class="aligncenter size-medium wp-image-1634" /></a></p>
<p>これまでもプラグイン等使いながら同じ事をやってましたが、1 クリックで済むのと、公式機能だけで実現するのがいいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111124/google-reader-to-hatebu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 で作る iPhone ローカル Web アプリ入門</title>
		<link>http://www.otchy.net/20111122/html5-iphone-local-webapp/</link>
		<comments>http://www.otchy.net/20111122/html5-iphone-local-webapp/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 04:38:33 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1581</guid>
		<description><![CDATA[さて、まず「ローカル Web アプリ」ってなんぞっていう話ですが、Web ベースの技術で作られブラウザからサーバにアクセスして利用するものの、いったんロードが完了したら、それ以降はネットワーク接続不要で動作する Web  [...]]]></description>
			<content:encoded><![CDATA[<p>さて、まず「ローカル Web アプリ」ってなんぞっていう話ですが、Web ベースの技術で作られブラウザからサーバにアクセスして利用するものの、いったんロードが完了したら、それ以降はネットワーク接続不要で動作する Web アプリ、といった概念を表した造語です。<br />
iPhone の App Store を経由することなく配布が可能なので、アプリの内容について一切の制限がなく、また、最近のライブラリの進歩やモバイルパフォーマンスの向上により、ものによってはネイティブアプリと遜色ないレベルのものも作れるようになってきました。</p>
<p>先日、<a href="/1cc/" target="_blank">1 Click Config</a> (<a href="/20111116/1cc-v2/">解説記事</a>) を作って公開しましたが、これがまさにローカル Web アプリとして動作しています。<br />
ここで使われている技術の各論についてはそれぞれ詳しく書いたサイトがあるのですが、これらの技術をひとまとめに紹介しているサイトが見当たらなかったので、入門記事として使いやすいよう配慮しています。</p>
<p>当記事では iPhone を対象として扱っていますが、ローカル Web アプリは、うまく配慮して作成することで 1 ソース、マルチプラットフォームで動かすことが可能です。<br />
モバイルの iPhone / iPad / Android でも、デスクトップの Chrome / Firefox / Safari / (IE10+) でも、全く同じソースで動かせるというのが魅力です。<br />
今後さらに広まっていく技術だと思っています。</p>
<h4 id="index">目次</h4>
<ul>
<li><a href="#jqm">jQuery Mobile</a></li>
<li><a href="#ls">localStorage</a></li>
<li><a href="#ac">アプリケーションキャッシュ</a></li>
<li><a href="#ds">data スキーム</a></li>
<li><a href="#wc">Web クリップ</a></li>
<li><a href="#debug">デバッグ方法</a></li>
<li><a href="#source">1 Click Config ソース</a></li>
<li><a href="#ending">終わりに</a></li>
</ul>
<h4 id="jqm">jQuery Mobile</h4>
<p><a href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a> は長いβ期間を経て最近 Ver.1 がリリースされたライブラリです。<br />
<a href="http://jquery.com/" target="_blank">jQuery</a> ベースで各種モバイル環境向けのサイトを作成するためのフレームワークといった感じです。</p>
<p>HTML5 で追加された data-* 属性を多用していて、それゆえにシンプルに記述することができます。<br />
data-* 属性はアプリケーションの都合で任意の名前を使用して良い属性です。値をどのように使うかはアプリケーション次第です。</p>
<p>例えば jQuery Mobile では data-role=&#8221;page&#8221; を指定した div 要素が 1 ページの単位になり、ページの中に data-role=&#8221;header&#8221; を指定した div 要素があれば、それがヘッダになるといった具合です。data-role で要素の役割を決めたら、data-theme=&#8221;a&#8221; でテーマ A のデザインになり、data-theme=&#8221;b&#8221; ではテーマ B のデザインになります。data-* 属性のお陰で、class 属性一つでいろんな意味を持たせる旧来のライブラリに比べ、シンプルに分かりやすく記述することができます。</p>
<p>jQuery Mobile が秀逸なのは、このように jQuery Mobile で決められた仕様に沿って HTML を記述するだけで、ネイティブアプリの UI に似せた Web の UI をプログラミング不要で実現できるところにあります。</p>
<p>jQuery Mobile の弱点は、情報がまだ十分に見つからないという点が一番大きいです。特に日本語情報は少ないです。</p>
<dl>
<dt>◎<a href="http://jquerymobile.com/demos/1.0/" target="_blank">jQuery Mobile: Demos and Documentation</a></dt>
<dd>公式ドキュメントです。当然ながら一番情報が正確ですが、英文なので日本語情報を求めている人には辛いかも知れません。ただ現状で jQuery Mobile を使うのであれば、公式ドキュメントは必須かと思います。</dd>
<dt>△<a href="http://dev.screw-axis.com/doc/jquery_mobile/" target="_blank">jQuery Mobile 1.0b1 日本語リファレンス</a></dt>
<dd>公式ドキュメントの翻訳ですが、バージョンが古いです。β版になった後なので、通用する部分も多いですが、うまく動かないときにドキュメントが古いのか、書き方が間違っているのか判断がつかないので、結局公式ドキュメントが必要になります。</dd>
<dt>×<a href="http://ascii.jp/elem/000/000/607/607366/" target="_blank">ASCII.jp：西畑一馬のjQuery Mobileデザイン入門</a></dt>
<dd>読み物としては面白く、jQuery Mobile の思想を知るためであれば利用できます。対象としているバージョンがα版で、その後仕様が大きく変わった部分もあるため、実装のための情報としては全く使えない情報になってしまっています。<a href="http://blog.webcreativepark.net/" target="_blank">西畑一馬さん</a>の記事は読みやすく情報も正確なので、正式版を対象とした記事を書いてくれると嬉しいところなのですが。</dd>
<dt><a href="http://www.google.co.jp/search?q=jquery+mobile" target="_blank">その他</a></dt>
<dd>色々な Tips や入門記事などが他にもたくさん公開されています。それらの記事を参照するときは対象としているバージョンが何かを見て、そのバージョンでの API が正式版でも同様の使い方かを公式ドキュメントで確認する、といった使い方になるかと思います。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="ls">localStorage</h4>
<p>localStorage は HTML5 で追加されたブラウザ自体に任意の情報を保存できる KVS (キーバリューストア) です。ドメイン単位に情報を保存しクロスドメインでアクセスすることが出来なかったり、保存できる情報は全て文字列として保存されるという辺り、Cookie と似たような位置づけの技術になります。ですが、利用可能な容量が Cookie に比べて多く、また使い方もいたってシンプルなので、使いやすいという特徴があります。</p>
<pre>
//localStorege に値を保存する。
localStorage['name'] = 'value';

// localStorage から値を取得する。
alert(localStorage['name']);
</pre>
<p>なんとこれだけでとりあえず使うことができます。これだけの記述で、同一ドメイン上のスクリプトからは同じ値が取れるし、次にブラウザを開いた時も同じ値が取れます。<br />
1 Click Config では、オプション値の保存や、最終更新確認日時など、クライアントごとに異なる値を保持するために使っています。</p>
<p>将来的に www.otchy.net ドメインで 1 Click Config 以外のアプリを作った時、キー名が重複しないようにしたかったのと、初めて値を取得するときにデフォルト値を指定したりしたかったので、以下のラッパを書いて利用しました。</p>
<pre>
var ls = {
	get: function(name, defValue) {
		var val = localStorage['1cc-' + name];
		if (val == undefined) {
			return defValue != undefined ? defValue : '';
		}
		return val;
	},
	set: function(name, value) {
		localStorage['1cc-' + name] = value;
	}
};
</pre>
<dl>
<dt>◎<a href="http://perutago.seesaa.net/article/206013819.html" target="_blank">localStorageはいい感じ: ぺるたごブログ</a></dt>
<dd>詳細な使い方、イベントハンドリングなどについても解説されています。</dd>
<dt>◯<a href="http://www.atmarkit.co.jp/fsmart/articles/iphoneweb04/01.html" target="_blank">HTML5のlocalStorageでiPhone用Webアプリを高速化 &#8211; ＠IT</a></dt>
<dd>localStorage を利用してサーバの応答をキャッシュすることで、Web アプリを高速化する方法について解説しています。localStorage の効果的な利用方法です。後述の data スキームを利用することでバイナリファイルをキャッシュすることも可能になるので、今後の Web アプリにおいては高速化のための一般的な手法になっていくと思います。</dd>
<dt>◯<a href="http://d.hatena.ne.jp/Jxck/20100821/1282412125" target="_blank">localStorageの挙動と簡単なラッパー &#8211; Block Rockin’ Codes</a></dt>
<dd>ブラウザ環境によって挙動が異なる点について記事にしてくれています。新しい規格ゆえに、環境によって実装に差が出るのは避けられないので、複数の環境をターゲットにして開発する場合、こういった情報があると助かります。</dd>
<dt>△<a href="http://www.ninxit.com/blog/2010/01/31/localstorage-%E3%81%A7%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A%E3%81%AE%E7%AE%A1%E7%90%86/" target="_blank">localStorage でオプション設定の管理 | ninxit.blog</a></dt>
<dd>localStorage に文字列以外の情報を保持させるための方法として eval を使ったやり方が紹介されていますが、eval はパフォーマンス面よりもセキュリティ面で問題を起こすことが多いので推奨されません。JSON.parse が使える環境ではそれを使い、そうでない環境では JSON パーサライブラリを使用するのが望ましいです。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="ac">アプリケーションキャッシュ</h4>
<p>localStorage と並んで、ローカル Web アプリを実現するための肝になる機能がこのアプリケーションキャッシュです。<br />
通常のウェブサイトを閲覧している際も、ブラウザは動作を高速化させるためにローカルにキャッシュファイルを持ちますが、「どのファイルをキャッシュして、どのファイルをキャッシュしないか」を明示するのが、このアプリケーションキャッシュです。</p>
<p>アプリケーションキャッシュを利用するためには、キャッシュマニフェストと呼ばれるファイルでキャッシュすべきファイルを指定します。</p>
<p>キャッシュマニフェストの指定がない従来のキャッシュの場合は、どのタイミングでキャッシュが破棄されるかがブラウザ任せですし、キャッシュを保持している場合であっても、ページを開くたびに、キャッシュしているファイルがその後更新されていないかの確認のため、サーバへのアクセスが発生します。</p>
<p>一方、キャッシュマニフェストで指定したキャッシュファイルに関しては、明示的なキャッシュの削除操作を行うまではキャッシュが破棄される事がないですし、「キャッシュマニフェストが」更新されない限りは、キャッシュ自体も更新されないため、サーバへのアクセスがいっさい発生しません。</p>
<p>キャッシュマニフェスト自体の使い方はとても簡単です。</p>
<p>HTML の指定</p>
<pre>
&lt;html manifest="cache.manifest"&gt;
</pre>
<p>html 要素の manifest 属性で、キャッシュマニフェストファイルを指定します。慣例的に拡張子として .manifest を使用します。</p>
<p>キャッシュマニフェスト</p>
<pre>
CACHE MANIFEST
# Ver 1

CACHE:
css/style.css
js/script.js

NETWORK:
list.php
update.php
</pre>
<p>ファイルの１行目は &#8220;CACHE MANIFEST&#8221; で固定、# 以降改行までがコメント、CACHE: 行以降がローカルにキャッシュするファイル、NETWORK: 以降が必ずサーバを参照するファイル、という意味になります。</p>
<p>キャッシュマニフェストが更新されているかの判断は、ファイルが 1 バイトでも変わっているか、という事で判断されます。<br />
キャッシュに含まれるファイルに更新があっても、キャッシュマニフェストが更新されない場合、ブラウザはいつまでもキャッシュされたファイルを参照し続けます。</p>
<p>このままだといつまでたってもファイルを更新できないので、キャッシュマニフェストの内容自体に変化がない場合でも、ブラウザに対してキャッシュマニフェストの更新を通知するため、バージョンを表すコメントを冒頭に記入する事が一般的に行われています。</p>
<p>最後に .manifest ファイルの MIME タイプが &#8220;text/cache-manifest&#8221; となるようにします。<br />
apache の .htaccess ファイルや httpd.conf ファイルであれば以下のような指定です。この部分だけミドルウェアの知識が必要になるので、少しハードルが高くなるかもしれません。</p>
<pre>
AddType text/cache-manifest .manifest
</pre>
<p>さて、キャッシュマニフェストを書いている時にまず最初にやりたくなるのがワイルドカードの利用です。<br />
css/*.css のような記述が可能であれば嬉しいところですが、それは出来ません。<br />
というのも、キャッシュマニフェストでキャッシュに指定したファイルについては、プリフェッチが有効になるためです。このプリフェッチがあるからこそ、「ネットワークがなくても動作する」という事が実現します。</p>
<p>ワイルドカードでは保持すべきファイルの名前が実際にリクエストされるまでわからず、その大前提が崩れてしまう事になります。<br />
1 Click Config でもそのようにしていますが、ファイルの内容が変化する前提の場合、マニフェストファイル自体を動的に生成するのが良いでしょう。</p>
<dl>
<dt>◎<a href="http://www.atmarkit.co.jp/fsmart/articles/iphoneweb05/01.html" target="_blank">HTML5でiPhone用Webアプリをオフライン対応に &#8211; ＠IT</a></dt>
<dd>アプリケーションキャッシュの基本的な使い方から、iPhone で明示的にキャッシュを更新する方法までが書かれています。Mobile Safari の場合、JavaScript から明示的に指定しない限り、キャッシュマニフェストそのものの更新チェックも行われません。バージョンアップを想定する場合、キャッシュマニフェストの更新チェックを行う実装は必須になります。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="ds">data スキーム</h4>
<p>data スキーム自体は HTML5 の仕様に含まれるものではありませんが、時期を同じくして普及がはじまった事、data スキームを扱う API が HTML5 で追加されたことなどから考えて、実質的には HTML5 の要素技術と考えて差し支えない感じです。例えば HTML5 の File API では、data スキームを直接扱う事が出来ます。</p>
<p>a 要素の href 属性に &#8220;http:&#8230;&#8221; と書く代わりに、&#8221;mailto:&#8230;&#8221; とか、&#8221;javascript:&#8230;&#8221; などと書くと、それぞれ異なった動きをする事はよく知られていると思います。こういったものを URL スキームと言い、その中の一つが data スキームです。<br />
ちなみに、1 Click Config も iOS5 で追加された prefs スキームを使う事によって設定画面を呼び出しています。</p>
<p>data スキームは、その名の通り任意の「データ」を扱う事ができるスキームです。構造は以下のようになっています。</p>
<pre>
data:[&lt;MIME タイプ&gt;][;&lt;エンコード方式&gt;],&lt;エンコード済みデータ&gt;
</pre>
<p>仕様上、MIME タイプとエンコード方式は省略可能な事になっていますが、MIME タイプを省略した際のブラウザの挙動が不安ですし、エンコード方式は base64 のみが利用可能と考えてほぼ差し支えないので、いずれも実質的には必須項目です。</p>
<p>この data スキームは例えば以下のようなシーンで使えます。</p>
<pre>
&lt;-- 任意のファイルをダウンロード --&gt;
&lt;a href="data:application/excel;base64,XXXXXXXX..."&gt;Excel ファイルをダウンロード&lt;/a&gt;

&lt;-- 画像ファイルを表示 --&gt;
&lt;img src="data:image/gif;base64,XXXXXXXX..." class="animation-icon" /&gt;

&lt;-- 背景画像を表示 --&gt;
&lt;div style="background-image: url(data:image/png;base64,XXXXXXXX...)"&gt;&lt;/div&gt;
</pre>
<p>base64 エンコードは、バイナリデータを文字列化するエンコード方式の中では比較的効率が高い方式ですが、それでも元のバイナリデータに比べて容量が増加するのは避けられません。<br />
単純にダウンロードするファイルサイズだけで言えば、data スキームを使わない方が容量は少ない事になります。</p>
<p>ですが、大量のアイコン画像など容量の小さいファイルが多くある場合、それぞれを別々のバイナリファイルとしてサーバから取得しようとすると、一つ一つに HTTP のオーバーヘッドが発生しますし、HTTP のコネクションを同時に張れる数 (通常は 2) にも制限があって並列ダウンロードは出来ません。<br />
こういった時に、画像をバイナリファイルではなく data スキームで扱うと、全てのアイコンを同時に一括ダウンロードしたのと同じ効果になるので、結果として動作が高速になります。これはモバイルの 3G 回線のような環境で特に顕著です。</p>
<p>ところで、base64 エンコードのやり方についてですが、各種プログラミング言語の実装/ライブラリを利用したり、リンク先として紹介しているウェブサービスを利用する方法などがあります。</p>
<p>PHP であれば極端な話、以下のような記述だけでも data スキームを使う事が出来ます。<br />
(表示の度に base64 エンコードの処理が走るので実際にやってはいけません。)</p>
<pre>
&lt;img src="img/icon.png" width="16" height="16" alt="" /&gt;
↓のように修正
&lt;img src="data:image/png;base64,&lt;?php echo base64_encode(file_get_contents('img/icon.png')); ?&gt;" width="16" height="16" alt="" /&gt;
</pre>
<p>前述のように、アプリケーションキャッシュは静的なファイルをローカルにキャッシュするにはとても適した方法です。ですが、動的に追加されるファイルをキャッシュしようとすると、マニフェストファイルを変更する手間があったり、更新の手順が回りくどかったり、あまりいい事がありません。</p>
<p>こういった場合、キャッシュさせたいファイルを base64 エンコードした状態でサーバからブラウザに渡し、それを localStorage に置いておく事で、いつでもローカルから呼び出す事が可能になります。<br />
ユーザごとに異なるユーザアイコン画像などを、ローカルキャッシュに置いておくような用途に使えますね。</p>
<dl>
<dt>◯<a href="http://tokkono.cute.coocan.jp/blog/slow/index.php/xhtmlcss/reduce-http-requests-using-data-uris/" target="_blank">Data URIによるHTTPリクエストの削減とYSlowスコア | ゆっくりと…</a></dt>
<dd>より詳細な data スキームの使い方についての解説です。</dd>
<dt>◯<a href="http://pgmon.heteml.jp/n/dsg/" target="_blank">dataスキーム生成</a></dt>
<dd>オンラインで base64 エンコードが出来るサイトです。シンプルなツールながら、ローカルからファイルをアップしてエンコード出来て、エンコード結果のプレビューもそのまま出るので使い勝手がいいです。</dd>
<dt>△<a href="http://www.kawa.net/works/js/data-scheme/base64.html" target="_blank">[JavaScript] dataスキームURI生成（画像データのBase64変換）</a></dt>
<dd>オンラインで base64 エンコードが出来るサイトですが、元々アップされていて URL があるファイルしかエンコード出来ません。</dd>
<dt>◯<a href="http://tech.kayac.com/archive/html5-canvas-slideshow.html" target="_blank">JavaScriptで画像のオフラインキャッシュを実装する | tech.kayac.com &#8211; KAYAC engineers&apos; blog</a></dt>
<dd>文中で触れた localStorage にキャッシュを保存するアイディアと、CANVAS 連携のアイディアなどが紹介されています。実装については触れられていませんが、こういった考え方は今後重要だと思います。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="wc">Web クリップ</h4>
<p>Web クリップは HTML5 とは特に関連しない話ですが、iPhone 上でネイティブっぽい Web アプリを作る上で、必須の知識になるので触れておきます。<br />
Mobile Safari で任意のサイトを開いて、メニューから「ホーム画面に追加」すると、ホーム画面にそのサイトへのショートカットが作成されます。これが Web クリップと呼ばれています。</p>
<p>Web クリップを適切に使う事で、Safari を経由せず直接任意のサイトを開く事が出来るようになるので、iPhone 上でネイティブアプリ風に使いたいローカル Web アプリは、Web クリップの利用が前提になるかと思います。</p>
<p>Web クリップに限った話、さらに言えば iOS に限った話でもないですが、まずモバイル環境での HTML レンダリングについて viewport を定義して、不意に拡大されたり縮小されたりする事を防ぎます。デバイスの幅に合わせてレンダリングをし、拡大・縮小を許可しない記述は以下のようになります。</p>
<pre>
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" /&gt;
</pre>
<p>iOS において、Web クリップからサイトを開いた時に、Safari ではなくフルスクリーンで専用のビューを開くには apple-mobile-web-app-capable を指定します。この値が &#8220;yes&#8221; の時に Web クリップを作成すると、それ以降 Web クリップから起動した時にフルスクリーンで表示されます。</p>
<p>HTML の初期ロード時の値ではなく、動的に変更された後の値も有効なので、1 Click Config では、フルスクリーンの有無を切り替えられる実装にしました。<br />
なお、フルスクリーンで起動すると、ネイティブアプリと同様マルチタスクにアイコンが残るので、そこからも Web アプリが起動出来るようになります。</p>
<pre>
&lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;
</pre>
<p>iOS において、Web クリップを作った時にホーム画面に追加されるアイコンを指定するには、apple-touch-icon を設定します。画像フォーマットは PNG で、画像サイズは 114 x 114 が望ましいです。それ以外のサイズは自動的に拡大・縮小されます。(3GS 時代までは 57 x 57 でした。)</p>
<p>アイコンには角丸処理がなされ、上部に半円のハイライトが自動的に付与されます。ハイライトが入ると、適当なデザインでもそれなりに見栄えがしますが、やはりそれなりです。ちゃんとデザインされたアイコンが用意出来て、自動のハイライトが不要な場合は、apple-touch-icon の代わりに apple-touch-icon-precomposed を指定します。</p>
<pre>
&lt;-- ハイライト自動付与 --&gt;
&lt;link rel="apple-touch-icon" href="data:image/png;base64,XXXXX" &gt;

&lt;-- ハイライト付与なし --&gt;
&lt;link rel="apple-touch-icon-precomposed" href="data:image/png;base64,XXXXX" &gt;
</pre>
<p>ここで、link 要素の href 属性には任意のファイルのパスを記述するのが一般的ですが、あえて data スキームを使うのには高速化の他にも理由があります。<br />
iPhone 上で Web クリップを作る時、いったんプレビュー画面が表示されるのですが、そこに表示されるアイコンは、ローカルにキャッシュファイルがあっても、再度ネットワーク上から取りなおすような動きをしているためです。</p>
<p>このためせっかくローカルにキャッシュがあってもアイコンが上手く表示されなかったり、3G 回線ではアイコンの表示が遅れたり、といった事が起こります。<br />
data スキームであればそもそもネットワークを参照に行かないので、高速・確実に表示されます。</p>
<p>なお余談ですが、アイコンの指定が無いような普通のサイトを Web クリップする時は、そのサイトのサムネイル画像がアイコンとして使われます。このサムネイル画像は最後にサイトを開いていた時の状態から作られるので、サイト上の特徴的な部分を拡大した状態で Web クリップを作ると、幾分見やすくなります。</p>
<dl>
<dt>◎<a href="http://symple.jp/93.html" target="_blank">iPhone向けSafari、HTML拡張属性を使いこなす | 株式会社シンメトリック公式ブログ</a></dt>
<dd>Web クリップで適用される様々な meta 要素の指定の他、Mobile Safari で有効な各種の拡張などについても詳しく解説されています。超お勧めです。</dd>
<dt>◎<a href="http://blog.fonland.net/2011/06/iphone-android-apple-touch-icon.html" target="_blank">iPhone と Android の apple-touch-icon の違い &#8211; Fonland</a></dt>
<dd>Android も含めてアイコンの詳細な仕様について解説されています。サイズごとに異なる指定の仕方もあるので、3/3GS 用、4/4S 用、iPad 用それぞれに別の画像を指定する方法が分かります。</dd>
<dt>◯<a href="http://ipn3g.com/web/study3.html" target="_blank">Viewport [iPhone生活]</a></dt>
<dd>viewport についての詳しい解説です。jQuery Mobile を使ったサイトであれば、拡大縮小させないケースが多いと思うので「◯」評価ですが、PC 向けサイトを含めて考える場合は必読です。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="debug">デバッグ方法</h4>
<p>最後にデバッグ方法にも触れておきます。<br />
Web アプリで色々と動的な操作を行おうと思った場合、プログラミング言語は事実上 JavaScript 一択 です。別の言語で記述して JavaScript に変換する事も出来ますが、最終的に実行されるのが JavaScript である以上、JavaScript のデバッグが効率的に行えないと、アプリ開発の効率は上がりません。</p>
<p>iOS 実機でも、設定で「デバッグコンソール」を有効にする事である程度のデバッグが可能ですが、サーバへアップする手間 (あるいは開発用マシンに接続出来るようにする手間) を考えると面倒ですし、そもそも情報量が足りません。<br />
シミュレータを使った開発ではだいぶ改善されますが、Mac オンリーになります。</p>
<p>実際の所 Mobile Safari は Webkit ベースのフルブラウザでもあるので、ピンチイン・アウトのイベントを使ったり、加速度センサ使うようなアプリでも作らない限りは、Safari / Chrome など、Webkit ベースのデスクトップ向けブラウザで、実機とほとんど変わらない動作確認が可能です。特に Webkit ベースのブラウザには優秀なデベロッパーツールが標準添付されているので、css の調整や JavaScript のバグ修正に非常に役立ちます。</p>
<p>ですので、モバイル向けの Web アプリ開発でも、デバッグ環境としてはデスクトップ上のブラウザがお勧めです。<br />
1 Click Config についても、動作の大半を PC 上の Chrome で作り込んで、どうしても実機の確認が必要な時だけ、実機で確認していました。</p>
<dl>
<dt>◯<a href="http://css-eblog.com/tools/weinre.html" target="_blank">スマホの開発が超絶楽に！ weinreでスマートフォンをPCでリモートデバッグ！ | CSS-EBLOG</a></dt>
<dd>どうしても実機の動きを詳しくデバッグする必要がある場合、こういった環境を準備すると最強です。最大の問題点は、面倒でなかなかやる気が起きない点です。それでも、実機ならではの機能を使い倒すアプリを作る場合は、必須の環境になるかと思います。</dd>
</dl>
<p><a href="#index">↑目次</a></p>
<h4 id="source">1 Click Config ソース</h4>
<p>これらを全部含んで実装した 1 Click Config のソースをまとめて zip で公開しようかと思いましたが、そもそも HTML / JavaScript / CSS なんて全然隠されてないので、必要に応じて <a href="/1cc/" target="_blank">1 Click Config</a> の中身をみてみて下さい。<br />
それこそ、Chrome のデベロッパーツールを使えば簡単に解析出来るはずです。</p>
<p>1 Click Config 自体は静的なファイルのみで構成されていますが、キャッシュマニフェストの更新や data スキームの生成自体はサーバ側で動的に生成しているので、必要なファイルだけを抽出して zip 化するのが面倒、という事情もあります。<br />
zip の提供はリクエストが多ければ検討します。</p>
<p><a href="#index">↑目次</a></p>
<h4 id="ending">終わりに</h4>
<p>冒頭にも書きましたが、この「ローカル Web アプリ」という手法は、今後どんどん増えていくだろうと思っています。これまでネットワーク前提でしか使えなかったような知識が、ネットワーク無しでも動くようになるのはとても面白いです。<br />
キャッシングの仕組みなどは、ネットワーク前提の普通の Web アプリであっても、動作を高速化させる手法として定着していく事と思います。</p>
<p>この記事が、そういった機能に期待し、面白いアプリを作ってくれる未来の開発者の助けになれば幸いです。</p>
<p><a href="#index">↑目次</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111122/html5-iphone-local-webapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1 Click Config Ver 2.0.0 リリース</title>
		<link>http://www.otchy.net/20111116/1cc-v2/</link>
		<comments>http://www.otchy.net/20111116/1cc-v2/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 21:55:07 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1543</guid>
		<description><![CDATA[
Ver 2.0.1 緊急リリース
ローカルキャッシュが正常に動作しない問題があり、それを修正したバージョンを公開しました。すでに利用済みの方は「設定」画面から「最新版を確認する」ボタンを押して下さい。ショートカットの再 [...]]]></description>
			<content:encoded><![CDATA[<div style="border: solid 1px red; padding: 10px;">
<strong>Ver 2.0.1 緊急リリース</strong><br />
ローカルキャッシュが正常に動作しない問題があり、それを修正したバージョンを公開しました。すでに利用済みの方は「設定」画面から「最新版を確認する」ボタンを押して下さい。ショートカットの再作成は不要です。<br />
これから利用される方は最初から Ver 2.0.1 になるので特に何もしなくて構いません。
</div>
<p>例の、<a href="/20111109/1cc-v1/">iPhone の設定画面へのショートカットを無料で簡単に作成するサービス</a>をバージョンアップして Ver 2.0.0 としました。<br />
なんだか冗長なので、サービス名称から &#8220;for iOS&#8221; も取っちゃいました。</p>
<p>前の Ver.1 はいわばβ版で、本バージョンからが実質的な正式版になります。<br />
URL も正式版らしくなりました。<br />
<a href="/1cc/" target="_blank">http://www.otchy.net/1cc/</a> を iPhone で開いてご利用下さい。</p>
<p>QR コードはこちら。<br />
<img src="/1cc/qr.png" width="132" height="132" /></p>
<p>使っているところはこんな感じになります。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc-usage.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-usage-200x300.png" alt="" title="1cc-usage" width="200" height="300" class="aligncenter size-medium wp-image-1572" /></a></p>
<h4>機能紹介</h4>
<p>ショートカットには「標準」と「Safari」があります。<br />
「標準」はフルスクリーン起動してから URL スキーマを実行するのでマルチタスクの所にアイコンが残ります。マルチタスクのメニューからも実行できます。</p>
<p>マルチタスクのアイコンが気になる人は「Safari」を選択して下さい。これは旧バージョンと同様 Safari 上で URL スキーマを実行します。何種類実行しても、マルチタスクの所には Safari しか残りません。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc-shortcut-type.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-shortcut-type-200x300.png" alt="" title="1cc-shortcut-type" width="200" height="300" class="aligncenter size-medium wp-image-1550" /></a></p>
<p>アイコンが綺麗になりました。全部で 3 つのテーマから選べます。<br />
(アイコンデザイン <a href="http://twitter.com/matsumura/" target="_blank">@matsumura</a>)</p>
<div style="padding: 0 60px;">
<img src="http://www.otchy.net/wp-content/uploads/2011/11/wifi.png" alt="" title="wifi" width="114" height="114" class="alignnone size-full wp-image-1555" /> <img src="http://www.otchy.net/wp-content/uploads/2011/11/wifi1.png" alt="" title="wifi" width="114" height="114" class="alignnone size-full wp-image-1556" /> <img src="http://www.otchy.net/wp-content/uploads/2011/11/wifi2.png" alt="" title="wifi" width="114" height="114" class="alignnone size-full wp-image-1557" /><br />
<img src="http://www.otchy.net/wp-content/uploads/2011/11/network.png" alt="" title="network" width="114" height="114" class="alignnone size-full wp-image-1558" /> <img src="http://www.otchy.net/wp-content/uploads/2011/11/network1.png" alt="" title="network" width="114" height="114" class="alignnone size-full wp-image-1559" /> <img src="http://www.otchy.net/wp-content/uploads/2011/11/network2.png" alt="" title="network" width="114" height="114" class="alignnone size-full wp-image-1560" />
</div>
<p>従来通り、完全ローカルで動作するように作ってあるので、初回以降はネットワークに接続する必要がありません。<br />
ただそのままだと、バージョンアップを行う事が出来ないので、任意のタイミングで明示的に更新出来る機能も付けました。これにより、今後のバージョンアップにおいても URL は変わりません。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc-updates.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-updates-200x300.png" alt="" title="1cc-updates" width="200" height="300" class="aligncenter size-medium wp-image-1562" /></a></p>
<p>旧バージョンでは正しく動いていなかった iPad にも対応した…はずです。<br />
検証環境が無いので、どなたか試して結果を報告してもらえると助かります。</p>
<div style="border: solid 1px #999; padding: 10px;">
<strong>追記</strong><br />
iPad2 での動作報告をいただきました。ありがとうございます！
</div>
<h4>次バージョン構想</h4>
<p>ひと通りのアプリケーションの体裁が整ったので、次バージョンでは設定可能な項目の追加を行おうと思っています。<br />
URL スキーマが判明していない項目には対応のしようがないのですが、要望が多くて、URL スキーマの判明している項目から順に対応を進めていくつもりです。</p>
<p>希望についてはこの記事のコメントか、<a href="http://twitter.com/intent/tweet?source=webclient&amp;text=%40otchy+" target="_blank">@otchy</a> までお送り下さい。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111116/1cc-v2/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>iPhone の設定画面へのショートカットを無料で簡単に作成するサービス</title>
		<link>http://www.otchy.net/20111109/1cc-v1/</link>
		<comments>http://www.otchy.net/20111109/1cc-v1/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 12:39:25 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1529</guid>
		<description><![CDATA[
2011-11-16 追記全面的に書きなおした Ver 2.0.0 を公開しています。
追加して欲しい設定項目も募集中です。
詳しくは &#8220;1 Click Config Ver 2.0.0 リリース&#822 [...]]]></description>
			<content:encoded><![CDATA[<div style="border: solid 1px #999; padding: 10px;">
<strong>2011-11-16 追記</strong><br /><span style="color:red;">全面的に書きなおした Ver 2.0.0 を公開しています。</span><br />
追加して欲しい設定項目も募集中です。<br />
詳しくは &#8220;<a href="/20111116/1cc-v2/">1 Click Config Ver 2.0.0 リリース</a>&#8221; を参照して下さい。</p>
<p><strong>2011-11-11 追記</strong><br />元ネタを読んだあとの 4 時間で一気に作ってしまったウェブサービスでしたが、その後色々な事が判明したので Ver.2 を計画してます。
<ul>
<li>ショートカット作成項目の追加</li>
<li>アイコンのクオリティ向上</li>
<li>設定画面を開く動作の高速化</li>
<li>iPad 対応</li>
</ul>
<p>などが目標です。全て一度に完了するか分かりませんので、Ver.3 / Ver.4 と続くかも知れませんが、いずれの場合もバージョンアップ告知は、このブログ並びに <a href="https://twitter.com/otchy" target="_blank">Twitter</a> で行います。
</div>
<p><a href="http://daisukeblog.com/?p=1705" target="_blank">iPhoneの設定画面をサクッと開く方法 -『Touch Icon Creator』でURLスキーマ対応アイコンを簡単に作る</a> とか、<a href="http://d.hatena.ne.jp/gorokuma/20111107/1320689925" target="_blank">iPhoneの設定画面を[当社比２倍以上]素早く開く方法 (iOS5限定)</a> とか読んでいて、これはアプリなんか使わなくてもタダでいけるんじゃないか？</p>
<p>と思ったので専用のウェブサービス作りました。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc-capture.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-capture-200x300.png" alt="" title="1cc-capture" width="200" height="300" class="aligncenter size-medium wp-image-1537" /></a></p>
<p><a href="/1cc/v1.html" target="_blank">1 Click Config for iOS</a> を iPhone で開くと、それっぽい感じになってます。<br />
QR コードはこちら。<br />
<img src="/1cc/v1.png" width="148" height="148" /></p>
<p>ローカルに全てキャッシュするような作りになっているので、ネットワークがない状態でも大丈夫です。<br />
注意点としては、ショートカットを作った後、Safari に戻って元の画面を閉じないと、正しく動作しないという点です。</p>
<p>使ってる様子はこんな感じになります。</p>
<p><a href="http://www.otchy.net/wp-content/uploads/2011/11/1cc.png"><img src="http://www.otchy.net/wp-content/uploads/2011/11/1cc-200x300.png" alt="" title="1cc" width="200" height="300" class="aligncenter size-medium wp-image-1531" /></a></p>
<p>えぇえぇ。iPhone 上にあんまりしょっぼいアイコン載せたくなかったので、全部手作りしましたよ。もっと綺麗なアイコンを提供してくれる人がいたら大歓迎です。</p>
<p>ちなみに URL が v1 になっているのはその内もしかしたら汎用性を高めた v2 を作るかも知れないという含みなので、応援の声などあれば検討します。</p>
<p>最後になりましたが、もちろん利用は自己責任でお願いしますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111109/1cc-v1/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>画像まとめページを自動でサムネイル・スライドショー化するブックマークレット</title>
		<link>http://www.otchy.net/20111004/imageview-bookmarklet/</link>
		<comments>http://www.otchy.net/20111004/imageview-bookmarklet/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 08:16:52 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[bookmarklet]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1491</guid>
		<description><![CDATA[縦に長く画像のリンクが大量にあるようなページで、ページに含まれている画像を全てサムネイル一覧にまとめて、そのサムネイルの内容をスライドショーのように表示する事が出来るブックマークレットです。
下のリンクをブックマークバー [...]]]></description>
			<content:encoded><![CDATA[<p>縦に長く画像のリンクが大量にあるようなページで、ページに含まれている画像を全てサムネイル一覧にまとめて、そのサムネイルの内容をスライドショーのように表示する事が出来るブックマークレットです。<br />
下のリンクをブックマークバー等にドラッグしてクリックすると利用出来ます。</p>
<p>とりあえずこのページで試してみる場合は、そのまま &#8220;imageview&#8221; をクリックしてみて下さい。</p>
<p><a href="javascript:(function(d){var%20s=d.createElement('script');s.src='http://www.otchy.net/js/imageview.js';d.getElementsByTagName('head')[0].appendChild(s);})(document);">imageview</a></p>
<pre>
javascript:(function(d){var%20s=d.createElement('script');s.src='http://www.otchy.net/js/imageview.js';d.getElementsByTagName('head')[0].appendChild(s);})(document);
</pre>
<h4>動作</h4>
<p>下記のように、サムネイル画像の img 要素があってそれに大きい画像がリンクしているような部分をページ上から抜き出して、サムネイル一覧を生成します。<br />
&lt;a href=&#8221;***.jpg&#8221;&gt;&lt;img src=&#8221;***_mini.jpg&#8221; /&gt;&lt;/a&gt;<br />
HTML のロードが完了していない時は、HTML のロードが完了するまで待ってから動作します。</p>
<p>サムネイル一覧を作成する時、いったんページの最下部まで自動的にスクロールする事で、<a href="http://gigazine.net/" target="_blank">GIGAZINE</a> のように、画像が遅延ロードされるページでも全ての画像を取得出来るように配慮しています。</p>
<p>サムネイル一覧から任意の画像をクリックすると、その場で大きな画像が開きます。<br />
画像の上でクリックしたり、矢印キーの左右で、画像を切り替える事が出来ます。</p>
<h4>画面キャプチャ</h4>
<p>こういう感じの画像まとめ、よくありますよね。<br />
<a href="http://www.otchy.net/wp-content/uploads/2011/10/imageview01.png"><img src="http://www.otchy.net/wp-content/uploads/2011/10/imageview01-300x252.png" alt="" title="imageview01" width="300" height="252" class="aligncenter size-medium wp-image-1501" /></a></p>
<p>ここでブックマークレットを実行すると読み込みが始まり、読み込みが完了するとサムネイル一覧が作成されます。<br />
<a href="http://www.otchy.net/wp-content/uploads/2011/10/imageview03.png"><img src="http://www.otchy.net/wp-content/uploads/2011/10/imageview03-300x252.png" alt="" title="imageview03" width="300" height="252" class="aligncenter size-medium wp-image-1503" /></a></p>
<p>サムネイルから画像を選択すると、その場で拡大表示されます。<br />
<a href="http://www.otchy.net/wp-content/uploads/2011/10/imageview04.png"><img src="http://www.otchy.net/wp-content/uploads/2011/10/imageview04-300x252.png" alt="" title="imageview04" width="300" height="252" class="aligncenter size-medium wp-image-1504" /></a></p>
<h4>対象ブラウザ</h4>
<p>Google Chrome 14 と、Firefox 3.6 で動作確認しています。恐らく、Firefox 4+ と Safari 4+ あたりでは動作すると思われます。<br />
IE に関してはほとんど未確認ですが、IE6 は動作しません。IE7、IE8 もたぶん動作しません。IE9 はもしかしたら動作するかも知れません。</p>
<p>(追記)<br />
利用者の方から Firefox 7 と IE9 で正常動作するとの報告をいただきました。ありがとうございます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111004/imageview-bookmarklet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>複数のバージョンの jQuery を共存させる方法</title>
		<link>http://www.otchy.net/20111004/multiple-versions-of-jquery/</link>
		<comments>http://www.otchy.net/20111004/multiple-versions-of-jquery/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 02:19:14 +0000</pubDate>
		<dc:creator>Otchy</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.otchy.net/?p=1459</guid>
		<description><![CDATA[古いアプリをメンテしてて、元々の jQuery のバージョンが 1.0 だの 1.1 だのだとすごく残念な気持ちになりますね。やっぱり、最新の jQuery でサクサク書きたいものです。
バージョンを上げてしまえればいい [...]]]></description>
			<content:encoded><![CDATA[<p>古いアプリをメンテしてて、元々の jQuery のバージョンが 1.0 だの 1.1 だのだとすごく残念な気持ちになりますね。やっぱり、最新の jQuery でサクサク書きたいものです。<br />
バージョンを上げてしまえればいいんですが、動作確認の手間まで考えると、そこまでやる時間もない。いま、ちょっとこの画面だけ手直し出来ればいいんだけど…という場合は、複数のバージョンの jQuery を共存させてしまいましょう。</p>
<p>jQuery には $ の競合を避けるための jQuery.noConflict という function が用意されていますが、これに引数で true を渡すと、window.jQuery オブジェクトの競合も避けるように動作します。</p>
<p>ですので以下のように書けば、複数のバージョンの jQuery が共存出来ます。<br />
現実的にやる事はないと思いますが、onload を追加する事で、3つでも 4 つでも共存可能という事です。</p>
<pre>
&lt;script&gt;
$(function() {
    var func = function() {
        <span style="color:green">// 実際に動作させたい部分</span>
        var $16 = jQuery.noConflict(<span style="color:blue">true</span>);
        alert($.fn.jquery);  <span style="color:green">// old version</span>
        alert($16.fn.jquery);  <span style="color:green">// ver 1.6</span>
    }
    <span style="color:green">// 使いたいバージョンの jQuery を用意し、load イベントを設定</span>
    var s = $('&lt;script&gt;').attr('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js').load(func).get(0);
    <span style="color:green">// IE の場合は script の onload が発生しないので onreadystatechange で検知</span>
    s.onreadystatechange = function() {
        if (this.readyState == 'loaded' || this.readyState == 'complete') {
            func();
        }
    }
    <span style="color:green">// jQuery.append だと load イベントが発生しない(？)ようなので、生 DOM で head に script を追加</span>
    $('head').get(0).appendChild(s);
});
&lt;/script&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.otchy.net/20111004/multiple-versions-of-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

