<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>ogaoga.org</title>
	<atom:link href="http://www.ogaoga.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ogaoga.org</link>
	<description>iPhone apps, Web apps, etc...</description>
	<lastBuildDate>Tue, 30 Apr 2013 15:56:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/" />
		<item>
		<title>PictTweet / PictTweet Plus! リリース（新 Twitter API 対応）</title>
		<link>http://www.ogaoga.org/?p=729</link>
		<comments>http://www.ogaoga.org/?p=729#comments</comments>
		<pubDate>Mon, 25 Feb 2013 22:16:28 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PictTweet]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=729</guid>
		<description><![CDATA[先ほど（2013/02/26）、PictTweet / PictTweet Pl &#8230; <a href="http://www.ogaoga.org/?p=729">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img src="https://pbs.twimg.com/media/BD-xB2vCIAAsoBI.jpg:large" alt="PictTweet / PictTweet Plus! updated" width="320" height="460" /></p>
<p>先ほど（2013/02/26）、PictTweet / PictTweet Plus!（v5.1）をリリースしました。今回のアップデートは、3/5 に切り替えられる新 Twitter API への対応です。旧バージョンは 3/5 で利用できなくなるため、お早めにアップデートしてください！</p>
<p>このアプリ、<a href="http://www.ogaoga.org/?p=127">最初のバージョンは 2009年</a>で、当時はまだ Twitter もこれほどまで流行っていなかったのと、Twitter アプリもそれほど無かったので斬新だったと思いますが、今となってはアプリの１機能ぐらいのものになってしまいました。新 API への対応も簡単ではなかったので AppStore から取り下げようとも思ったのですが、それでも、このアプリからツイートしてくれているユーザーが毎日何人かいらっしゃったので、なんとか対応してみました。ぜひお試しください！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=729</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=729" />
	</item>
		<item>
		<title>iScroll を使ってスマートフォンで Parallax Scrolling #html5j</title>
		<link>http://www.ogaoga.org/?p=694</link>
		<comments>http://www.ogaoga.org/?p=694#comments</comments>
		<pubDate>Mon, 17 Dec 2012 14:44:39 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iScroll]]></category>
		<category><![CDATA[Parallax]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=694</guid>
		<description><![CDATA[この記事は HTML5 Advent Calendar 2012 の18日目の記 &#8230; <a href="http://www.ogaoga.org/?p=694">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>この記事は <a href="http://www.adventar.org/calendars/27" target="_blank">HTML5 Advent Calendar 2012</a> の18日目の記事です。</p>
<h2>パララック・ススクロールとは？</h2>
<p>2012 年の Web デザインで流行ったのは、「パララックス（視差）スクロール」（Parallax Scrolling）たったと思います。企業のイベントページなどで積極的に使われていました。パララックス・スクロールがどんなものかは文章で説明するよりも<a href="http://kachibito.net/web-design/parallax-scroll-inspiration.html" target="_blank">実際に見てもらえば</a>すぐにわかるかと思います。</p>
<p>ただし、それは PC のサイトばかりで、スマートフォンではあまり無かったと思います。海外では <a href="http://www.nike.com/jumpman23/aj2012/" target="_blank">Nike</a>、日本では <a href="http://www.camobile.com/" target="_blank">CA モバイルのページ</a>ぐらいでしょうか。ちゃんと動くライブラリもなく、CA モバイルのページを手がけられた html5j.org 主宰の白石さんは <a href="https://github.com/camobile/ScrollTween.js" target="_blank">独自のライブラリ</a>を開発されてました。</p>
<h2>なぜスマートフォンだと難しいのか？</h2>
<p>パララックス・スクロールは、ページのスクロール量に応じて各部品のパラメータを変化させてアニメーションを実現するのですが、タッチデバイスの場合、指を離してから一定時間スクロールが継続する「慣性スクロール」の間、スクロール量を取得できるイベント（&#8217;onscroll&#8217;）が発行されず、その間、部品のパラメータを変化させることができません。</p>
<p>前述のサイトでは自前で慣性スクロールを実装し、その間のスクロール量を取得できるようにして、パララックス・スクロールを実現しています。</p>
<h2>iScroll とは？</h2>
<p><a href="http://cubiq.org/iscroll-4" target="_blank">iScroll</a> は、CSS の position: fixed; が使えないスマートフォンのためのライブラリで、ヘッダ／フッタを固定してスクロールできるようにします。このライブラリも、ブラウザが持つ慣性スクロールではなく、独自に慣性スクロールを実装しています。</p>
<p>仕事でスマートフォン向けページを制作する際に iScroll を使うことになりコードを見ていたら、慣性スクロール中にスクロールバーの描画をしており、そこで座標を取得できそうだったので、試してみたところ意外と簡単にできてしまいました。</p>
<h2>iScroll の修正</h2>
<p>iScroll からページのスクロール量（座標）を取得するために、独自のイベントを発行する処理を追加して座標を渡すようにしました。その処理で <a href="http://jquery.com/" target="_blank">jQuery</a> を使っているため、iscroll.js の読み込み前に jQuery を読み込んでおく必要があります。</p>
<p>次に座標の取得ですが、iScroll のソースコードの下記の箇所に、独自のイベントを発行する処理を追加します（iScroll v4.2.5 の 287行目〜312行目）。</p>
<p><a href="https://github.com/ogaoga/iscroll/blob/master/src/iscroll.js" target="_blank">iscroll/src/iscroll.js</a></p>
<pre style="white-space: pre-wrap; word-wrap: break-word; overflow: auto;">_pos: function (x, y) {
  if (this.zoomed) return;

  x = this.hScroll ? x : 0;
  y = this.vScroll ? y : 0;

  if (this.options.useTransform) {
    this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ;
  } else {
    x = m.round(x);
    y = m.round(y);
    this.scroller.style.left = x + 'px';
    this.scroller.style.top = y + 'px';
  }

  // ================================================
  // send event 
  $(document).trigger('iscroll', {'x':x, 'y':-y});
  // ================================================

  this.x = x;
  this.y = y;

  this._scrollbarPos('h');
  this._scrollbarPos('v');
},</pre>
<p>iScroll 側の修正は、304行目の１行を追加するだけです。</p>
<h2>パララックス処理の実装</h2>
<p>表現したい内容によって実装方法は異なってきますが、基本的にはページのスクロール量をもとに、各種パラメータを変更することになります。</p>
<p>作ったサンプルはこんな感じです。サンプルコードは <a href="https://github.com/ogaoga/iscroll/tree/master/examples/parallax" target="_blank">GitHub で公開</a>しています。（iPhone でしか確認していません。）</p>
<div><script type="text/javascript" src="http://jsdo.it/blogparts/cMDC/js?width=300&#038;height=400&#038;view=play"></script></div>
<p>まず、先ほど iscroll.js に追加したイベントを、コンテンツ側のスクリプトで捕捉して座標を取得します。 <a href="https://github.com/ogaoga/iscroll/blob/master/examples/parallax/script.js" target="_blank">iscroll/examples/parallax/script.js</a></p>
<pre id="LC28" style="white-space: pre-wrap; word-wrap: break-word; overflow: auto;">$(document).bind('iscroll', function(e, pos){
  // pos.y にスクロール量が格納されているので、
  // その値を使って、各要素のパラメータを変更する。
});</pre>
<p>取得した座標をもとに各要素の位置や色を変更しています。詳しくは、<a href="https://github.com/ogaoga/iscroll/blob/master/examples/parallax/script.js" target="_blank">GitHub にアップしたサンプルコード</a>をご覧ください。</p>
<h2>最後に</h2>
<p>世にあるパララックス・スクロール用のライブラリでは、もっと簡単に要素を制御できるような仕組みが提供されていますが、今回はそこまでたどり着けませんでした。ただ、スマートフォンでも Parallax Scrolling を実現できることと、基本的な考え方は示せたのかなと思います。参考になれば幸いです。</p>
<h2>リンク</h2>
<ul>
<li><a href="http://cubiq.org/iscroll-4" target="_blank">iScroll</a></li>
<li><a href="https://github.com/ogaoga/iscroll" target="_blank">ogaoga / iScroll</a> [GitHub]</li>
<li><a href="http://jsdo.it/ogaoga/cMDC" target="_blank">スマートフォンで Parallax Scrolling するやーつ（iScroll を使って）</a> [jsdo.it]</li>
</ul>
<div><script type="text/javascript">// <![CDATA[
google_ad_client = "ca-pub-8657633193530659"; /* blog-inline */ google_ad_slot = "6286742938"; google_ad_width = 300; google_ad_height = 250;
// ]]&gt;</script><br />
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">// <![CDATA[</p>
<p>// ]]&gt;</script></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=694</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=694" />
	</item>
		<item>
		<title>twtr2src をご利用いただきありがとうございました</title>
		<link>http://www.ogaoga.org/?p=689</link>
		<comments>http://www.ogaoga.org/?p=689#comments</comments>
		<pubDate>Wed, 05 Dec 2012 15:08:11 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[Evernote]]></category>
		<category><![CDATA[twtr2src]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=689</guid>
		<description><![CDATA[先日お伝えした通り、twtr2src の配信サービスを終了しました。また先ほど、 &#8230; <a href="http://www.ogaoga.org/?p=689">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>先日お伝えした通り、twtr2src の配信サービスを終了しました。また先ほど、データベース内のユーザーデータの削除も完了しました。もし念のため twtr2src と Twitter アカウントの連携を解除したい場合は、<a href="https://support.twitter.com/articles/252401" target="_blank">アプリケーションを取り消すまたは削除する方法</a> を参照して Twitter で解除を行ってください。</p>
<p>思い起こせば３年前、<a href="https://twitter.com/nobi" target="_blank">@nobi</a> さんの <a href="http://nobi.cocolog-nifty.com/nobilog2/2009/02/090207twitter-f.html" target="_blank">このブログ</a> がきっかけで、ツイートをブログに転載するツールを作ったのが始まりでした。Twitter が流行りはじめの頃だったと思います。</p>
<p>その後メールでの配信に対応し、自分のツイートをブログに載せる「ライフログ」のツールとして多くの方に使っていただくようになりました。しかも、<a href="http://kazuyomugi.cocolog-nifty.com/private/2009/10/twitter10-e4b8.html" target="_blank">勝間和代さんに紹介いただいたり</a>、<a href="https://twitter.com/takapon_jp/status/7952459332" target="_blank">ホリエモンに使ってもらったり</a>と、有名になっていくことにとても驚きました（ホリエモンは<a href="http://blog.livedoor.jp/takapon_jp-dvd/" target="_blank">このブログ</a>でどんだけ儲けたんだろう&#8230;）。</p>
<p>その後 Evernote が流行りだしてきたので、直接投稿できるように対応。ライフハッカー系の方に支持いただき、有名なブログや書籍等で紹介いただいたり、<a href="http://blog.evernote.com/jp/2011/04/14/2584" target="_blank">Evernote の日本語版公式ブログでも紹介</a>していただきました。</p>
<p>そんなこんなで気づいたら、配信ユーザーが 10000 人を超え、<a href="http://b.hatena.ne.jp/entry/twtr2src.ogaoga.org/" target="_blank">はてブも 1000 を超え</a>るようなサービスに成長していました。その頃から、配信遅延の対応や Twitter API 制限の回避、サーバ負荷の分散などに追われてしんどい時期もありました。</p>
<p>しかし、多くの方から寄付を頂き、サーバの増強だけでなく、モチベーションを維持することができました。寄付いただいた皆様には、改めてお礼申し上げます。</p>
<p>しかし、プログラムがユーザー数増大に対してスケールしない構造で、チューニングもやりつくし、個人が片手間にサービスするものとしては限界に達してしまい、新規ユーザー受付を中止することにしました。そして、Twitter API の変更がアナウンスされ、サービス終了の決断を下しました。</p>
<p><a href="http://www.ogaoga.org/?p=683" target="_blank">終了のお知らせ</a>をしてから多くの方に感謝のツイートを頂き、大変ありがたく思っています。これまでご利用、ご支援いただきありがとうございました。この場を借りてお礼申し上げます。</p>
<p>ogaoga.org では、<a href="http://icotile.ogaoga.org/" target="_blank">icotile</a> や <a href="http://www.ogaoga.org/?page_id=85" target="_blank">PictTweet</a> といった Twitter 連携サービス／アプリをリリースしていますが、新 API の対応についてはまだ未定です。ただ、この２つについては継続してサポートしたいと思っています。</p>
<p>また、現在、iPhone アプリを開発中です。来年の春ぐらいにはリリースできるかなと思っています。このブログや<a href="https://twitter.com/twtr2src" target="_blank">ツイッターアカウント</a>でお知らせしますので、ご利用いただければ幸いです。引き続き ogaoga.org をよろしくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=689</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=689" />
	</item>
		<item>
		<title>twtr2src のサービスを終了します</title>
		<link>http://www.ogaoga.org/?p=683</link>
		<comments>http://www.ogaoga.org/?p=683#comments</comments>
		<pubDate>Thu, 08 Nov 2012 16:05:05 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[twtr2src]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=683</guid>
		<description><![CDATA[いつも twtr2src をご利用いただきありがとうございます。 このたび、tw &#8230; <a href="http://www.ogaoga.org/?p=683">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>いつも twtr2src をご利用いただきありがとうございます。</p>
<p>このたび、twtr2src のサービスを終了することにしました。</p>
<p>Twitter が日本で流行しはじめた <a href="http://www.ogaoga.org/blog/2009/02/twtr2src.php">2009年にスタート</a>し、これまで延べ 15000人の方に毎日ツイートをお届けしてまいりました。</p>
<p>今回、<a href="https://dev.twitter.com/blog/changes-coming-to-twitter-api" target="_blank">Twitter の API 変更</a>により大きな修正が必要であることがわかり、対応すべきか検討しましたが、金銭面やモチベーション維持の点で継続は困難であると判断しました。これまでご利用いただいた方、ご支援いただいた方には大変申し訳ないのですが、ご理解いただければ幸いです。</p>
<p>今後のスケジュールですが、</p>
<ul>
<li>11/21（水）配信停止、ログイン停止。</li>
<li>11/30（金）までに、DB に登録された会員情報を削除。</li>
<li>以降、順次 Web ページの内容を停止。</li>
</ul>
<p>となります。</p>
<p>同様のサービスを利用したい方は、下記のサービスがあります。</p>
<ul>
<li><a href="http://twieve.net/" target="_blank">ツイエバ</a></li>
<li><a href="http://hatenadiary.g.hatena.ne.jp/keyword/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC%E3%81%A8Twitter%E3%82%92%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B" target="_blank">はてなダイアリー</a></li>
<li><a href="http://twilog.org/" target="_blank">Twilog</a></li>
</ul>
<p>また、ogaoga.org でリリースしている下記の Twitter 関連アプリ／サービスについては、別途このブログ、Twitter アカウントにてお知らせします。</p>
<ul>
<li><a href="/picttweet.html">PictTweet / PictTweet Plus!</a> （<a href="https://twitter.com/picttweet" target="_blank">@PictTweet</a>）</li>
<li><a href="http://icotile.ogaoga.org/">icotile</a> （<a href="https://twitter.com/icotile" target="_blank">@icotile</a>）</li>
</ul>
<p>これまでご利用いただいた方、またご支援いただいた方、この場を借りてお礼申し上げます。ありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=683</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=683" />
	</item>
		<item>
		<title>iOS アプリのリンクバナーを簡単に設置できる「Smart App Banners」機能</title>
		<link>http://www.ogaoga.org/?p=673</link>
		<comments>http://www.ogaoga.org/?p=673#comments</comments>
		<pubDate>Thu, 20 Sep 2012 02:40:42 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=673</guid>
		<description><![CDATA[iOS6 の Safari に「Smart App Banners」という機能が &#8230; <a href="http://www.ogaoga.org/?p=673">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>iOS6 の Safari に「<a href="https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6-SW1" target="_blank">Smart App Banners</a>」という機能が追加されました。</p>
<p>iOS アプリの紹介 Web ページにたった１行追加するだけで、ページの上部にアプリのバナーが表示されます。</p>
<p><a href="http://www.ogaoga.org/wp/wp-content/uploads/2012/09/photo.png"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2012/09/photo-200x300.png" alt="Smart App Banners 表示例" title="Smart App Banners 表示例" width="200" height="300" class="aligncenter size-medium wp-image-674" /></a></p>
<p>設置方法は、表示したいページ内に、下記の一行を追加するだけです。</p>
<pre style="white-space: pre-wrap; word-wrap: break-word;">&lt;meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL"&gt;</pre>
<p>&lt;meta&gt; タグなので、&lt;head&gt; 内に記述しないといけないかと思ったのですが、本文内でも表示されました。WordPress などの CMS でコンテンツを編集している場合で、特定のページのみ表示したい場合は、その本文に記述すれば OK です。</p>
<p>&#8220;myAppStoreID&#8221; にはアプリの ID を入力するのですが、<a href="http://itunes.apple.com/linkmaker/" target="_blank">”Link Maker” というページ</a>でアプリを検索して、結果の右側に表示されるリンクの URL に含まれる &#8220;id&#8221; 以降の９桁の数字を入力します。それ以外のパラメータは任意で、詳しくは<a href="https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6-SW1" target="_blank">ドキュメント</a>を参照してください。</p>
<p>バナーのボタンをタップすると、そのアプリがインストールされている場合はそのアプリを起動して、インストールされていない場合は、AppStore アプリを起動し、そのアプリのページを表示します。</p>
<p>ちなみに、<a href="http://www.ogaoga.org/picttweet.html" target="_blank">自分がリリースしているアプリのページ</a>に設置してみました。iOS6 で表示すると上部にバナーが表示されます。</p>
<p>iOS6 の Safari だけでしか表示されませんが、設置が簡単で、他のブラウザで表示する場合にもコンテンツに影響を与えないので、手軽にアプリをダウンロードしてもらいたい場合に便利かなと思います（ちょっと読み込みに時間がかかるので、気づかないことも多そうですが&#8230;）。</p>
<ul>
<li><a href="https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6-SW1" target="_blank">Promoting Apps with Smart App Banners (Safari Developer Library)</a></li>
<li><a href="http://itunes.apple.com/linkmaker/" target="_blank">Link Maker</a></li>
<li><a href="http://www.ogaoga.org/picttweet.html" target="_blank">PictTweet / PictTweet Plus!</a> （設置したページ）</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=673</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=673" />
	</item>
		<item>
		<title>PictTweet / PictTweet Plus! v5.0 リリース</title>
		<link>http://www.ogaoga.org/?p=625</link>
		<comments>http://www.ogaoga.org/?p=625#comments</comments>
		<pubDate>Fri, 24 Feb 2012 00:24:10 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[PictTweet]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=625</guid>
		<description><![CDATA[手書きの絵や文字を簡単にツイートできる iPhone/iPad アプリ、Pict &#8230; <a href="http://www.ogaoga.org/?p=625">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>手書きの絵や文字を簡単にツイートできる iPhone/iPad アプリ、PictTweet をバージョンアップしました（v5.0）。</p>
<p><img src="http://www.ogaoga.org/wp/wp-content/uploads/2009/05/iphone_ipad2.png" alt="PictTweet / PictTweet Plus! on iPhone and iPad" title="PictTweet / PictTweet Plus! on iPhone and iPad" width="500" height="418" class="aligncenter" /></p>
<h3 style="padding-left: 60px;">ダウンロード</h3>
<p style="padding-left: 60px; margin: -12px 0 6px 0;"><a href="http://click.linksynergy.com/fs-bin/stat?id=AlxiteDKtQU&amp;offerid=94348&amp;type=3&amp;subid=0&amp;tmpid=2192&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252FWebObjects%252FMZStore.woa%252Fwa%252FviewSoftware%253Fid%253D316165186%2526mt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2009/05/picttweet3-150x150.png" alt="PictTweet" title="PictTweet" width="75" height="75" align="center" class="alignnone" style="width: 75px; height: 75px; vertical-align: middle;" />無料版の PictTweet (iPhone/iPod touch)</a></p>
<p style="padding-left: 60px;"><a href="http://click.linksynergy.com/fs-bin/stat?id=AlxiteDKtQU&amp;offerid=94348&amp;type=3&amp;subid=0&amp;tmpid=2192&amp;RD_PARM1=http%253A%252F%252Fitunes.apple.com%252FWebObjects%252FMZStore.woa%252Fwa%252FviewSoftware%253Fid%253D322298870%2526mt%253D8%2526uo%253D6%2526partnerId%253D30" target="_blank"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2009/05/picttweetplus-150x150.png" alt="PictTweet Plus!" title="PictTweet Plus!" width="75" height="75" align="center" class="alignnone" style="width: 75px; height: 75px; vertical-align: middle;" />画像を取り込める PictTweet Plus! (iPhone/iPad/iPod touch)</a></p>
<p style="text-align: left;">iOS5 になったぐらいから画像がアップロードできないという問題が発生していて、そのバグフィックスがメインですが、Twitter 自身が画像のアップロードに対応したこともあり、アップロード先の変更も行いました。多少、アップロード時間が早くなったかと思います。</p>
<p>また、マルチタスク対応にして、それにあわせて UI もシンプルにしました。以前よりもお手軽にお絵描きをツイートできます。ぜひお試しください。</p>
<p>１年半ぶりにソースコードを見て理解に時間かかったり、Xcode の進化に追いつけなかったり大変でしたが、やっぱり iOS アプリを開発するのは楽しいです。早く、次のアプリをリリースできるようにしたいなーと。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=625</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=625" />
	</item>
		<item>
		<title>twitter.com にリスト登録数を表示する Chrome 機能拡張</title>
		<link>http://www.ogaoga.org/?p=618</link>
		<comments>http://www.ogaoga.org/?p=618#comments</comments>
		<pubDate>Wed, 28 Dec 2011 05:51:30 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=618</guid>
		<description><![CDATA[ちょっと前に作っておきながらずっと寝かしていた Chrome 機能拡張をリリース &#8230; <a href="http://www.ogaoga.org/?p=618">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>ちょっと前に作っておきながらずっと寝かしていた Chrome 機能拡張をリリースしました。</p>
<p><a href="https://chrome.google.com/webstore/detail/pjicjmldolmnicobfohflkcdnjfjblhm" target="_blank">Listed link on twitter.com</a></p>
<p><a href="https://chrome.google.com/webstore/detail/pjicjmldolmnicobfohflkcdnjfjblhm"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2011/12/tile.png" alt="Listed link on twitter.com" title="Listed link on twitter.com" width="440" height="280" class="aligncenter size-full wp-image-619" /></a></p>
<p>新しい Twitter UI に変わってから、自分や他のユーザーがどれぐらいリストに登録されているのかがわからなくなったので作ってみました。まだ、表示されないタイミングとかありますが、ひとまず公開という事で。</p>
<p><a href="https://github.com/ogaoga/ListedLink" target="_blank">ソースコードは GitHub で公開しています</a>ので、ご自由にご利用ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=618</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=618" />
	</item>
		<item>
		<title>UI のレスポンスを向上させる Web Storage の使い方 #html5j</title>
		<link>http://www.ogaoga.org/?p=582</link>
		<comments>http://www.ogaoga.org/?p=582#comments</comments>
		<pubDate>Thu, 15 Dec 2011 16:16:03 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[icotile]]></category>
		<category><![CDATA[#html5j]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=582</guid>
		<description><![CDATA[HTML5 Advent Calendar の 16 15日目を担当させていただ &#8230; <a href="http://www.ogaoga.org/?p=582">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://atnd.org/events/21987" target="_blank">HTML5 Advent Calendar</a> の <del>16</del> 15日目を担当させていただく ogaoga です。 今年のはじめ頃に、html5j.org 主催の「<a href="http://googledevjp.blogspot.com/2011/01/0-html5.html" target="_blank">第０回 HTML5 プログラミング＆クリエイティブ・コンテスト</a>」が開催され、応募した「<a href="http://icotile.ogaoga.org/" target="_blank">icotile</a>」が<a href="http://komachu.sakura.ne.jp/0thgallery/" target="_blank">自由課題部門で優秀作品賞</a>を頂きました。 そのお礼もかねて、icotile で活用した HTML5 の機能の一つである「<a href="http://www.w3.org/TR/2011/WD-webstorage-20110208/" target="_blank">Web Storage</a>」について書きたいと思います。なお、Web Storage の詳細については言及しませんので、<a href="#ref-links">参考文献</a>をご覧頂ければと思います。また、文中のソースコードは擬似的なもので、初期化やエラー処理などは省略しています。</p>
<h2>icotile と Web Storage</h2>
<p>icotile は、Twitter のフォロワーを iTunes のような UI で管理するための Web アプリケーションです。画面中央部にフォロワーのアイコンをすべて並べて、選択するとそのユーザーの詳細情報が表示されたり、ドラッグ＆ドロップでリスト編集ができます。（Twitter を使っている方はぜひお試しください。）</p>
<div class="wp-caption aligncenter" style="width: 610px"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2011/02/whole.png" alt="icotile main view" title="icotile main view" width="600" height="329" style="height: auto; width: 400px;" /><p class="wp-caption-text">icotile のメイン画面</p></div>
<p>今回 icotile の開発では「デスクトップアプリケーションのような操作感」を目指しました。そのためには、ユーザーの操作に対して素早く反応することが重要です。これまでの Web アプリケーションの様に、操作の度にサーバにデータを取りにいくようだと、どうしてもユーザーを待たせてしまいます。 このような場合にはよく「キャッシュ」という手法を使うのですが、HTML5 以前にはブラウザ側でキャッシュするための保存領域がありませんでした。HTML5 になってからは、ブラウザにデータを保存する仕組みがいくつかあり、icotile では「Web Storage」という仕組みを使って、ユーザーの情報をキャッシュしています。これにより、起動後すぐにアイコンが表示されたり、アイコンをクリックしてすぐに詳細情報が表示されたりと、レスポンスの早い UI を実現しています。 ちなみに、<a href="http://www.w3.org/TR/2011/WD-webstorage-20110208/" target="_blank">Web Storage</a> の他にも <a href="http://www.w3.org/TR/webdatabase/" target="_blank">Web SQL Database</a> や <a href="http://www.w3.org/TR/IndexedDB/" target="_blank">Indexed Database</a>という技術もありますが、手軽に実装でき、幅広いブラウザに対応している Web Storage を採用しました。</p>
<h2>Web Storage の使い方</h2>
<p>Web Storage は key と value という組み合わせを１レコードとするストレージで、下記のような JavaScript のコードでデータの保存、取得が可能です。</p>
<pre class="brush: jscript; title: ; notranslate">
// 保存と取得
// この例では、twitterUserId が key で、userDataJson が value

// 保存
localStorage.setItem(twitterUserId, userDataJson);
// 取得
var userDataJson = localStorage.getItem(twitterUserId);
</pre>
<p>icotile では、Twitter の API で取得できるユーザーの情報を localStorage にキャッシュとして格納しています（Web Storage には２種類のストレージがあり、localStorage は永続的にデータを保存できる領域です）。 key にはユーザーを一意に示すユーザーの id、value には Twitter API で取得したユーザーの情報を、JSON 形式そのままで格納しています。 ユーザーの情報を利用する際、最初に localStorage を参照して、データが存在していたときにはそのデータを利用します。初回起動時など、localStorage にデータがない場合にはサーバからユーザーの情報を取得します。取得したデータは localStorage に保存します。いわゆる一般的なキャッシュの仕組みと同じです。 icotile では、ユーザーがアイコンをクリックすると、そのアイコンのユーザーの詳細情報が右側に表示されますが、このときに下記のような処理を行っています。</p>
<pre class="brush: jscript; title: ; notranslate">
// 最初にキャッシュ（localStorage）にアクセス
var userDataJson = localStorage.getItem(twitterUserId);

// JSON をオブジェクトに変換
var userData = JSON.parse(userDataJson);

if ( userData ) {
  // データが存在しているので、詳細を表示。
  drawUserDetail(userData);
}
else {
  // データが存在していなかったので、サーバから取得
  // 第２引数は、取得後に呼び出されるコールバック関数
  requestUserDataFromTwitter(twitterUserId, function(userDataJson) {
    // JSON をオブジェクトに変換
    var userData = JSON.parse(userDataJson);

    // サーバから取得したデータを表示。
    drawUserDetail(userData);

    // キャッシュに保存
    localStorage.setItem(userData.id, userDataJson);
  });
}
</pre>
<h2>容量の上限</h2>
<p>Web Storage は記録できる容量に上限があります。ブラウザの実装にもよりますが、Chrome の場合、ドメインあたり 5MB です。Twitter のユーザーのデータ（JSON）は、人にもよりますがだいたい 2KB 程度なので、2500 人分ぐらいは localStorage に保存することが可能です。データにはアイコン画像そのものは含まれていないので、アイコンの表示のスピードはブラウザのキャッシュに依存します。 キャッシュが上限に達した場合には、localStorage.setItem() 実行時に例外が発生します。この場合には、新しい情報を追加できるように古い情報を削除します。icotile では、上限に達した場合には 100件削除した後に保存しています。本来なら保存した日時を記録して古い順から削除するのがよいのですが、Web Storage は日時情報を保存したり、その値でソートすることが出来ないので、単純に取得した 100件を削除しています。</p>
<pre class="brush: jscript; title: ; notranslate">
try {
  // データの保存。上限に達している場合には例外が発生する。
  localStorage.setItem(twitterUserId, userDataJson);
} catch (e) {
  if ( e == QUOTA_EXCEEDED_ERR ) { // 上限に達していた場合
    var i = 0;
    for ( var key in localStorage ) {
      // データの削除
      localStorage.removeItem(key);
      if ( i++ &gt; 100 ) {
        break;
      }
    }
    // データの保存
    localStorage.setItem(twitterUserId, userDataJson);
  }
}
</pre>
<h2>プライバシーの考慮</h2>
<p>localStorage のデータは明示的に削除しない限り保存されたままになるため、ブラウザを終了して再度アクセスしたときにも、残っているデータは素早く表示することが出来ます。そのため、プライバシー保護の観点でキャッシュを全クリアする機能をユーザー提供した方がよいでしょう。また icotile ではログイン時にユーザーをチェックして、違うユーザーでログインした場合にはキャッシュをクリアしています。データが永続的に残るので、うっかりアクセスできてしまうことも考慮に入れる必要があります。 また、localStorage の中身はブラウザの機能で見ることが可能です。開発時はデバッグ等で使えますが、ユーザーが除き見ることも出来るため、パスワードのような情報を保存することは避けた方が無難です。</p>
<div id="attachment_599" class="wp-caption aligncenter" style="width: 610px"><img src="http://www.ogaoga.org/wp/wp-content/uploads/2011/12/debug.png" alt="localStorage の中身（Chrome）" title="localStorage の中身（Chrome）" width="600" height="407" class="size-full wp-image-599 " /><p class="wp-caption-text">Chrome のローカルストレージのブラウザ</p></div>
<h2>応答性能と情報の鮮度</h2>
<p>このように、Web Storage を使ってデータをキャッシュして、ユーザーの操作に対して素早く情報を提供することが出来ますが、キャッシュをするということは情報の鮮度が劣化している可能性があります。ユーザーのプロフィールのように頻繁に更新されない場合にはあまり影響はありませんが、リアルタイムに更新される情報を扱う場合にはキャッシュしない、もしくは定期的に更新したほうがよいかもしれません。応答性能と情報の鮮度のバランスをどう取るかは、ユーザビリティ上重要で、かつ難しいポイントかと思います。この辺りは、実際にコーディングしていいバランスポイントを見つけ出すしかないかなと思います。</p>
<hr />
<p>と、簡単ですが Web Storage の使い方と考慮のポイントをまとめてみました。「データベース」というとちょっと身構えてしまいますが、キーバリュー型で簡単に扱うことができるため、いろいろ場面で活用することが出来ると思います（ちょっと容量が少ないですが&#8230;）。ぜひお試しくださいませ。</p>
<h3 id="ref-links">参考文献</h3>
<ul>
<li><a href="http://www.w3.org/TR/2011/WD-webstorage-20110208/" target="_blank">W3C &#8211; Web Storage</a></li>
<li><a href="http://www.html5.jp/trans/w3c_webstorage.html" target="_blank">W3C &#8211; 『Web Storage』日本語訳</a></li>
<li><a href="http://www.htmq.com/webstorage/" target="_blank">Web Storage / HTML クイックリファレンス</a></li>
<li><a href="http://d.hatena.ne.jp/pikotea/20101224/1293197750" target="_blank">Web Storage について &#8211; へっぽこプログラマーの日記</a></li>
<li><a href="http://www.ogaoga.org/?p=512" target="_blank">icotile のどのあたりが HTML5 なのか？</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=582</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=582" />
	</item>
		<item>
		<title>twtr2src での Evernote 再認証のお願い</title>
		<link>http://www.ogaoga.org/?p=576</link>
		<comments>http://www.ogaoga.org/?p=576#comments</comments>
		<pubDate>Tue, 11 Oct 2011 00:32:54 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[twtr2src]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=576</guid>
		<description><![CDATA[twtr2src のご利用ありがとうございます。 このところ、配信遅延や配信エラ &#8230; <a href="http://www.ogaoga.org/?p=576">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>twtr2src のご利用ありがとうございます。</p>
<p>このところ、配信遅延や配信エラーが多く発生している状況でご迷惑おかけしております。というのも、Twitter API のエラーレートが非常に高い状況が続いているためです。原因はわからないのですが、こちら側ではどうにも対処できないため、困っている状況です。近いうちに、今後のサービスをどうしていくか決断を下そうと思っています。決まり次第、改めて報告したいと思います。</p>
<p>さて、<a href="http://www.ogaoga.org/?p=393" target="_blank">Evernote への直接投稿機能をリリースしてからもうすぐ１年が経ちます</a>。１年も前なので既に覚えていないと思いますが、設定時に Evernote で認証をしたときに、認証の期限が 365日と表示されたかと思います。すなわち、１年前に設定された方はもうすぐ期限が切れて、自動投稿が出来なくなってしまいます。</p>
<p>サービスが不安定な状況ですが、もし継続してご利用いただけるのでしたら、下記の手順で再認証を行っていただく必要があります。（メール投稿の方はこれらの作業は不要です。）</p>
<ul>
<li><a href="http://twtr2src.ogaoga.org/" target="_blank">http://twtr2src.ogaoga.org/</a> にアクセスして、右上の「Sign in with Twitter」からサインイン。</li>
<li>サインイン後、右上の「設定」をクリックし、「自動投稿」タブを選択。</li>
<li>「1. 認証」の「サインアウト」をクリック。</li>
<li>「Evernote にサインイン」のフォームで Evernote のアカウントでサインイン。</li>
<li>「承認する」ボタンを押す。</li>
</ul>
<p>お手数おかけしますが、よろしくお願いします。</p>
<p>さて、先日「<a href="http://www.ogaoga.org/?p=546" target="_blank">twtr2src 自動投稿の新規登録終了と開発縮小のお知らせ</a>」にてお伝えしたとおり、twtr2src の積極的な開発は中止しております。また冒頭でも書いたとおり、サービスは不安定な状況が続いております。なので、他のサービスに乗り換えていただきたく、「<a href="http://www.ogaoga.org/?p=568" target="_blank">twtr2src からの乗り換えのご案内</a>」にて、同様のサービスをご紹介していますので、ぜひ乗り換えもご検討ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=576</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=576" />
	</item>
		<item>
		<title>twtr2src からの乗り換えのご案内</title>
		<link>http://www.ogaoga.org/?p=568</link>
		<comments>http://www.ogaoga.org/?p=568#comments</comments>
		<pubDate>Mon, 10 Oct 2011 14:33:20 +0000</pubDate>
		<dc:creator>ogaoga</dc:creator>
				<category><![CDATA[Evernote]]></category>
		<category><![CDATA[twtr2src]]></category>

		<guid isPermaLink="false">http://www.ogaoga.org/?p=568</guid>
		<description><![CDATA[さて、先日「twtr2src 自動投稿の新規登録終了と開発縮小のお知らせ」にてお &#8230; <a href="http://www.ogaoga.org/?p=568">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>さて、先日「<a href="http://www.ogaoga.org/?p=546" target="_blank">twtr2src 自動投稿の新規登録終了と開発縮小のお知らせ</a>」にてお伝えしたとおり、twtr2src の積極的な開発は中止しております。また、最近サービスが不安定な状況が続いているので、他のサービスに乗り換えを検討していただきたいと思っています。twtr2src よりもいいサービスありますので、是非ご検討いただければ。</p>
<h3><a href="http://twieve.net/" target="_blank">ツイエバ</a></h3>
<p>ツイートだけでなく、ダイレクトメッセージ、お気に入り、リツイートなどをまとめて Evernote に配送してくれるサービスです。メールを使用しているため、上記のような再認証も不要です。私も利用していますが、安定して配信されています。投稿も見やすく、フォロワー数の増減などの情報もありオススメのサービスです。</p>
<h3><a href="http://www.tweet-mail.jp/" target="_blank">ツイートメール</a></h3>
<p>自分だけではなく、他の人のツイートもメールで配信してくれるサービスです。また、キーワードウォッチ、人気つぶやきウォッチなどの機能もあるようです。実際に使った事は無いので、安定度などはわかりません。</p>
<h3><a href="http://twilog.org/" target="_blank">twilog</a></h3>
<p>ご存知 twilog ですが、実はツイートを RSS でも出力しているため、RSS リーダーが保存機能を持っていれば、そこで保存することが可能です。</p>
<p>URL は http://twilog.org/rss-feed/&lt;twitterユーザー名&gt; になります。</p>
<h3>ブログ系サービス</h3>
<p>いくつかのブログ系のサービスが、同等の機能を提供しています。どれも実際に使った事はありません。</p>
<h4><a href="http://d.hatena.ne.jp/" target="_blank">はてなダイアリー</a></h4>
<p>→ <a href="http://hatenadiary.g.hatena.ne.jp/keyword/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC%E3%81%A8Twitter%E3%82%92%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B" target="_blank">はてなダイアリーとTwitterを連携する</a></p>
<h4><a href="http://blog.goo.ne.jp/" target="_blank">goo ブログ</a></h4>
<p>→ <a href="http://blog.goo.ne.jp/how_to/e/49534a42082c6c8c6ace35e8dcca3c27" target="_blank">Twitter（ツイッター）連携</a></p>
<h4><a href="http://blog.livedoor.com/" target="_blank">livedoor ブログ</a></h4>
<p>→ <a href="http://blog.blogpark.jp/archives/1614993.html" target="_blank">Twitterのつぶやきをブログでまとめる機能を実装しました</a></p>
<h4><a href="http://www.yaplog.jp/" target="_blank">yaplog</a></h4>
<p>→ <a href="http://help.yaplog.jp/manual/setting/twitter/1010" target="_blank">ブログをTwitter（ツイッター）とつなげよう！（Twitter連携）</a></p>
<h4><a href="http://blog.fc2.com/" target="_blank">FC2 ブログ</a></h4>
<p>→ <a href="http://blog.fc2.com/info/blog-entry-606.html" target="_blank">【ブログ】Twitter連携を強化！ ツイートをブログに自動投稿</a></p>
<hr />
<p>と、以前よりも選択肢が増えていますので、twtr2src 以外のサービスもご利用いただければと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ogaoga.org/?feed=rss2&#038;p=568</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ogaoga.org/?p=568" />
	</item>
	</channel>
</rss>
