<?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>Dabits</title>
	<atom:link href="http://www.dabits.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dabits.net</link>
	<description>あったらいいな をカタチにする</description>
	<lastBuildDate>Sun, 04 Jul 2010 17:02:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>手動でACPIマルチプロセッサのHALをいれなおす</title>
		<link>http://www.dabits.net/archives/148</link>
		<comments>http://www.dabits.net/archives/148#comments</comments>
		<pubDate>Sun, 04 Jul 2010 17:02:21 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.dabits.net/?p=148</guid>
		<description><![CDATA[ネットブックのデュアルブート化の際、誤ってHALを削除してしまうという大失態を犯し、
以降通常のhal.dllでしか起動しなくなってしまいました。
Atomはマルチプロセッサとして動作するので、そのようにHALを入れなお [...]]]></description>
			<content:encoded><![CDATA[<p>ネットブックのデュアルブート化の際、誤ってHALを削除してしまうという大失態を犯し、<br />
以降通常のhal.dllでしか起動しなくなってしまいました。<br />
Atomはマルチプロセッサとして動作するので、そのようにHALを入れなおす必要があります。<br />
今回はその修復メモ。<br />
<span id="more-148"></span></p>
<h3>##前提環境</h3>
<p>WindowsXP Home Edition SP3<br />
ディスクブートなOS(Knoppixなど)</p>
<h3>##修復方法</h3>
<h4>・使用されていたHALを探す</h4>
<p>まずセットアップのログを見て、どのようなHALがインストールされていたのかアタリをつけます。<br />
C:\WINDOWS\repair\setup.log をhal.dllで検索すると、下記のようにヒットするはずです。</p>
<blockquote><p>\WINDOWS\system32\hal.dll = &#8220;halmacpi.dll&#8221;,&#8221;2812c&#8221;<br />
\WINDOWS\system32\ntkrnlpa.exe = &#8220;ntkrpamp.exe&#8221;,&#8221;1f1bd2&#8243;<br />
\WINDOWS\system32\ntoskrnl.exe = &#8220;ntkrnlmp.exe&#8221;,&#8221;217c37&#8243;</p></blockquote>
<p>私の環境では、halmacpi.dllが使われている模様でした。<br />
続いて、ntkrnlpa.exeやntoskrnl.exeの欄も見ておきます。<br />
マルチプロセッサだとこのファイルが変わるためです。これらのファイル名をメモっておきます。</p>
<h4>・サービスパックのパッケージからファイルを抽出する</h4>
<p>上記でメモしたファイルを、サービスパックのパッケージから抽出します。<br />
SP3を改めて導入してしまった場合、下記のファイルにhalが入っている模様です。<br />
C:\WINDOWS\Driver Cache\i386\sp3.cab<br />
このファイルを展開し、メモしたファイルたちを探し出して適当なフォルダに入れておきます。<br />
ファイル名はsetup.logに書かれていたように変更しておきます。<br />
たとえば、halmacpi.dllならhal.dllのようにしておきます。</p>
<h4>・システムファイルを置換する</h4>
<p>マシンを再起動し、ディスクブートなOSで適当に起動します。<br />
あとはhal.dllたちを入れ替えるだけです。C:\Windows\system32の中に入っているので、<br />
hal.dll、ntkrnlpa.exe、ntoskrnl.exeのバックアップをとり、ファイルを置換します。</p>
<p>&#8212;<br />
こんな感じで修復できました！よかった！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/148/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS 4 を redsn0wでごにょごにょするとMMSが使えなくなる</title>
		<link>http://www.dabits.net/archives/144</link>
		<comments>http://www.dabits.net/archives/144#comments</comments>
		<pubDate>Sat, 26 Jun 2010 08:34:29 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[TiPS!]]></category>

		<guid isPermaLink="false">http://www.dabits.net/?p=144</guid>
		<description><![CDATA[iOS 4アップデートが来た！でも3Gユーザはマルチタスクとか使えずにしょぼーんですね。
ということでredsn0wを導入すると、どういうわけかMMSが使えなくなる、という問題。
情報を探してると以下の投稿を見つけました [...]]]></description>
			<content:encoded><![CDATA[<p>iOS 4アップデートが来た！でも3Gユーザはマルチタスクとか使えずにしょぼーんですね。<br />
ということでredsn0wを導入すると、どういうわけかMMSが使えなくなる、という問題。</p>
<p>情報を探してると以下の投稿を見つけました。<br />
<a href="http://blog.iphone-dev.org/post/722633863/all-four-one#IDComment82275368">http://blog.iphone-dev.org/post/722633863/all-four-one#IDComment82275368</a></p>
<blockquote><p>Think have found the SOLUTION!<br />
- Install clean copy of OS4<br />
- Jailbreak w/0.9.5b5-3<br />
- Jailbreak w/0.9.5b5-4 (But deselect Cydia)</p>
<p>Still have MMS + iBooks + everything works!<br />
Had trouble with clean install + 0.9.5b5-4, but this method seems to fix problems with MMS/Tethering/Visual voicemail.</p>
<p>Awesome!</p></blockquote>
<p>ということで、以下の手順だとMMSが使えるみたいです。</p>
<ol>
<li>iOS4を普通にインストール</li>
<li>redsn0w 0.9.5b5-3でごにょごにょ</li>
<li>redsn0w 0.9.5b5-4でごにょごにょ、ただしCydiaはインストールしない</li>
</ol>
<p>というわけで、こうするとCydiaが前バージョンのものがインストールされるので、MMSが送れなくなる問題が起こらない、という夢でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/144/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android on iPhone3G 3.1.3の夢</title>
		<link>http://www.dabits.net/archives/115</link>
		<comments>http://www.dabits.net/archives/115#comments</comments>
		<pubDate>Mon, 07 Jun 2010 11:22:04 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.dabits.net/?p=115</guid>
		<description><![CDATA[ちまたでは3.1.3ではAndroid化できないとの情報が流れてましたが、
ちょこっと方法を変えるだけで難なく出来たのでメモ。
・今回の環境
- PwangeTool で jailbreak化したiPhone3.1.3
 [...]]]></description>
			<content:encoded><![CDATA[<p>ちまたでは3.1.3ではAndroid化できないとの情報が流れてましたが、<br />
ちょこっと方法を変えるだけで難なく出来たのでメモ。</p>
<p>・今回の環境<br />
- PwangeTool で jailbreak化したiPhone3.1.3<br />
- Ubuntu Linux</p>
<p>・方法</p>
<p>殆どのやり方は下記のサイトで書かれている事と同じです。<br />
<a href="http://www.pcworld.com/article/196595/how_to_install_android_on_your_iphone.html">How to Install Android on Your iPhone &#8211; PCWorld</a><br />
<a href="http://syobon-tech.com/blog/?p=19">iPhone３GにAndroidをインストールする方法 » Syobon Tech Blog</a></p>
<p>ただし、VFDecrypt keyを下記サイトから入手します。<br />
<a href="http://theiphonewiki.com/wiki/index.php?title=SUNorthstarTwo_7E18_%28iPhone_3G%29">SUNorthstarTwo 7E18 (iPhone 3G) &#8211; The iPhone Wiki</a></p>
<p>以上です。ね、カンタンでしょ？<br />
・・・という夢を見ました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/115/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>開発コンテスト 24に参加、シンプルなToDoリストツール、「パッとToDo！」をリリースしました！</title>
		<link>http://www.dabits.net/archives/104</link>
		<comments>http://www.dabits.net/archives/104#comments</comments>
		<pubDate>Sat, 24 Apr 2010 12:31:36 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[リリース]]></category>

		<guid isPermaLink="false">http://www.dabits.net/?p=104</guid>
		<description><![CDATA[
この度、クックバッド主催の開発コンテスト 24に参加し、
その製作物としてパッとToDo！を製作しました。
##機能紹介
パッとToDo！は、編集機能をもたない簡易ToDoサイトで、
まるで付箋のようにさっとメモ書きす [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-medium wp-image-106" title="patodo01" src="http://www.dabits.net/wp-content/uploads/patodo01-300x269.png" alt="" width="300" height="269" /><br />
この度、クックバッド主催の<a href="http://info.cookpad.com/24contest">開発コンテスト 24</a>に参加し、<br />
その製作物として<a href="http://patodo.dabits.net">パッとToDo！</a>を製作しました。<span id="more-104"></span></p>
<h3>##機能紹介</h3>
<p><a href="http://patodo.dabits.net">パッとToDo！</a>は、編集機能をもたない簡易ToDoサイトで、<br />
まるで付箋のようにさっとメモ書きする感覚で使えます。<br />
また、作者自身がiPhone持ちなので、iPhoneでも使えるよう画面をレイアウトしています。</p>
<p>使い方はカンタン。<br />
まずやりたい事を箇条書きに書き出していきます。</p>
<p><a href="http://www.dabits.net/wp-content/uploads/patodo01.png"><img class="alignnone size-medium wp-image-106" title="patodo01" src="http://www.dabits.net/wp-content/uploads/patodo01-300x269.png" alt="" width="300" height="269" /></a></p>
<p>「やりはじめる！」ボタンを押すと、ToDoリストが生成されるので、ひとつひとつやることをこなしていきます。こなし終えたら[こなした！]ボタンを押してやることを消していきます。</p>
<p><a href="http://www.dabits.net/wp-content/uploads/patodo02.png"><img class="alignnone size-medium wp-image-107" title="patodo02" src="http://www.dabits.net/wp-content/uploads/patodo02-300x296.png" alt="" width="300" height="296" /></a></p>
<p>すべてやりおえたら「おめでとう！」のメッセージとともにゴミ箱が現れるので、ToDoリストをゴミ箱に捨ててしまいましょう。</p>
<p><a href="http://www.dabits.net/wp-content/uploads/patodo03.png"><img class="alignnone size-medium wp-image-105" title="patodo03" src="http://www.dabits.net/wp-content/uploads/patodo03-300x296.png" alt="" width="300" height="296" /></a></p>
<h3>##使用用途</h3>
<p>・毎日の買い物リストに<br />
・打ち合わせに行く人リストに<br />
・ToDoリストを共有して仲間と仕事するときに<br />
などなど。</p>
<p>個人的には毎朝電車に乗っているときに<br />
iPhoneのメモ帳でToDoリストをよく書くので、その代わりに使います。</p>
<h3>##24contestの感想</h3>
<p>・テーマが発表されてから発想まで、意外と長かった。<br />
・そもそも洗濯したりぐだぐだしたりで無駄に開発時間を削ってしまった。<br />
・３時間で作ったのでデザインに手が回らず、フレームワーク付属のデザインのまんまになってしまった。くそう。<br />
・バグもあるっぽいけど気にしない。<br />
・24時間という制限の中一つのプロダクトを作るのは結構刺激的。まるで技能五輪。<br />
・入賞できるかは全く自信がないが、この機会で自分にとって使える物ができたので満足。<br />
・時間を見つけて携帯でも見れるようにして、本格的に使っていきたい。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/104/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android版ニコニコ動画プレーヤ &#8220;nicoPlayer for Android(仮)&#8221;の中間報告とソースコード公開</title>
		<link>http://www.dabits.net/archives/96</link>
		<comments>http://www.dabits.net/archives/96#comments</comments>
		<pubDate>Sun, 18 Apr 2010 23:40:42 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[Android版ニコニコ動画計画]]></category>

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

最近忙しくてが言い訳になっている自分が嫌、かつはやくみんなでニコニコしたい！！
ということでどんだけ忙しくても現状報告とソースの公開はできるだろう、ということでまとめてみました。


##ソースコードはこちら

ni [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dabits.net/wp-content/uploads/nico_player.png"><img src="http://www.dabits.net/wp-content/uploads/nico_player.png" alt="" title="nico_player" width="264" height="230" class="alignnone size-full wp-image-60" /></a></p>
<p>
最近忙しくてが言い訳になっている自分が嫌、かつはやくみんなでニコニコしたい！！<br />
ということでどんだけ忙しくても現状報告とソースの公開はできるだろう、ということでまとめてみました。
</p>
<p><span id="more-96"></span></p>
<h3>##ソースコードはこちら</h3>
<p>
<a href='http://www.dabits.net/wp-content/uploads/nicoplayer_20100419.zip'>nicoplayer_20100419.zip</a>
</p>
<h3>##当面の目標</h3>
<p>
・最低限smile側でH264形式にて格納している動画を再生できるようにする<br />
・H264形式の動画はそのまま再生できるっぽいので、変換サーバを噛まさない<br />
・初期の動画リストは、H264タグのリストのみ<br />
・vp6,swfはそれが実装できた後<br />
・もちろんコメントもないとニコニコできないよね。ニコニコしたい！
</p>
<h3>##実装済みの機能</h3>
<p>
・ニコニコ動画のログイン<br />
・ランキングページのrss取得、整形表示<br />
・動画のコメント取得、準備<br />
・テストで準備された動画の再生
</p>
<h3>##作成途中</h3>
<p>
・vp6動画→H264の変換サーバ<br />
→当初はこちらが用意する予定だったけど、著作権的にNGなので<br />
　ユーザ一人ひとりのパソコンで動かす形式に仕様変更、<br />
　リアルタイムエンコードを追求してみたけどffserverのあたりで頭がフリーズ。<br />
　実装してたけど役に立たないゴミだけが残った。。<br />
　ので、この辺は後回し、あるいはノウハウがある人がいたらお願いしたい限り。</p>
<p>・タグ検索、ランキング/マイリスト一覧<br />
→ほとんどがrssなので応用がカンタン、その気になればすぐできそう<br />
　でも重要度低め
</p>
<h3>##詰まっているところ</h3>
<p>
・動画再生にストリーミング再生の出来るVideoViewを使っているが<br />
　smile側から動画をダウンロードする際にcookieのセットが必要、<br />
　でもVideoViewにcookieをセットしてストリーミングする方法が見つからない<br />
→httpclientで一旦ダウンロードしてから、ローカルのファイルを再生するしかないのか<br />
　また、それ以外に最適な手段はあるのかどうか
</p>
<h3>##まだノータッチ</h3>
<p>
・コメント<br />
→必須機能、はやく実装したい
</p>
<h3>##参考にしてるサイト</h3>
<p>
・<a href="http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBapi">ニコニコ動画APIとは (ニコニコドウガエーピーアイとは) &#8211; ニコニコ大百科</a><br />
→ニコニコ動画のAPI関連はほとんどここに載ってる、大変便利<br />
・<a href="http://www.adakoda.com/adakoda/2009/01/android-httpdefaulthttpclienthttphosthttpgethttpresponsehttpentity.html">[Android] HTTP（DefaultHttpClient/HttpHost/HttpGet/HttpResponse/HttpEntity） &#8211; adakoda</a><br />
→adakodaさんとこ。詳しいとこまで書いてあってかゆい所に手が届く！<br />
・そのた<a href="http://b.hatena.ne.jp/dabits/nicoPlayer/">はてぶにまとめ</a>つつ。
</p>
<h3>##スマートフォンでの実装事例</h3>
<p>
・<a href="http://neet-and-cat.com/exstreamnico/">NeetAndCat | ニコニコ動画 iPhone アプリ eXstreamNico</a><br />
→iPhoneで実装してる人。主にローカルでの使用を目的としたアプリ。<br />
　キモとなる動画変換部分についてまとめたwikiがあるので非常にありがたい。<br />
　変換サーバもrubyで書かれているのでソースコードを読むことができる。本当にありがたい。
</p>
<h3>##いまandroidでニコニコできるのに近い、もしくはニコニコしてる人</h3>
<p>
・<a href="http://feather.cocolog-nifty.com/weblog/2010/01/coroidnicoroid-.html">coroid-server  Android(HT-03A)でニコニコ動画を視聴する: 雪羽の発火後忘失</a><br />
→雪羽さん。すでにニコニコできてる！すごい。試してみたい。<br />
　ライトユーザの方が使うのにはちょっと大変かも。</p>
<p>・<a href="http://com.nicovideo.jp/community/co34566">ニコ生技術開発部 [NicoLiveDevelopClub] </a><br />
→こっちはニコ生の実装。<br />
　<a href="http://twitter.com/toriimiyukki/status/12395540105">ニコ生のrtspを別窓再生できるようになった</a>ようなので、完成間近かも。期待！
</p>
<h3>##当面のスタンス</h3>
<p>
・ひとにはひとの、自分には自分のやれる範囲がある。<br />
　自分の技術なんてとても人にかなうものじゃないし、実機だってまだもってないけど、<br />
　画面つくったりコメント実装したり位はできるはずだから、そこからやってく。<br />
　他技術不足で実現が難しいところは、どこかにそれに詳しいエロいひとがいるはず、<br />
　そういう人にアドバイスもらったり、お願いしたりしていきたい。</p>
<p>　ひとりでじゃなくて、みんなでニコニコしたいじゃん！
</p>
<h3>##なぜこの段階で、未完成のソースコード公開？</h3>
<p>
・一人であーだこーだ言いながらやるより、<br />
公開した方が完成が早くなりそうだと感じたからです。</p>
<p>現状手が回らない状態の自分だけにソースコードがある状態より、<br />
もっといろんな人に見てもらった方が、活用されるし、有意義なんじゃないかなと感じました。参考になるかどうか分かりませんが、使ってやってください。<br />
もし、「Androidでニコニコしてる！！」って人がいたらぜひ教えてください！！<br />
ブログとついったーを介して全力で告知します！
</p>
<p>
・・ということで、現状こんな感じです。<br />
ソースコード公開といっても、開発停止するわけじゃなく、自分なりにまったりやっていきます。<br />
Desire買えたら意欲も上がりそうな気が。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/96/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Redmineのアカウントを使って、Subversionの認証を行う on debian lenny</title>
		<link>http://www.dabits.net/archives/87</link>
		<comments>http://www.dabits.net/archives/87#comments</comments>
		<pubDate>Tue, 30 Mar 2010 02:15:57 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[Apache関連]]></category>

		<guid isPermaLink="false">http://www.dabits.net/?p=87</guid>
		<description><![CDATA[むちゃくちゃつまづきどころが多かったのでメモ。
mod_auth_mysqlのインストール
普通にコマンド入力してインストールします
www@admin:~$ sudo apt-get install libapache [...]]]></description>
			<content:encoded><![CDATA[<p>むちゃくちゃつまづきどころが多かったのでメモ。</p>
<p>mod_auth_mysqlのインストール</p>
<p>普通にコマンド入力してインストールします<br />
<code>www@admin:~$ sudo apt-get install libapache2-mod-auth-mysql</code></p>
<p>問題が、mod_auth_mysql.so が mod_auth_basic.so より先に読み込めないと、以下のエラーが出ちゃいます。</p>
<blockquote><p>pcfg_openfile() called with NULL filename</p></blockquote>
<p>ということで名前を変えて先に起動するようにセット<br />
<code>www@admin:~$ sudo cp /etc/apache2/mods-available/auth_mysql.load /etc/apache2/mods-available/auth_00mysql.load</code></p>
<p>各種モジュール有効化<br />
<code>www@admin:~$ sudo a2enmod auth_00mysql auth_basic auth_digest</code><br />
で、設定したいsvnのconfに以下のように記述<br />
<code><br />
&lt;Location "/svn"&gt;<br />
DAV svn<br />
SVNParentPath /var/www/svn<br />
     &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;<br />
       Auth_MySQL                      On<br />
       Auth_MySQL_Socket               /var/run/mysqld/mysqld.sock<br />
       Auth_MySQL_Host                 localhost<br />
       Auth_MySQL_User                 [redmineのデータベースユーザ名]<br />
       Auth_MySQL_Password             [redmineのデータベースパスワード]<br />
       Auth_MySQL_DB                   [redmineのデータベース名]<br />
       Auth_MySQL_Password_Table       users<br />
       Auth_MySQL_Username_Field       login<br />
       Auth_MySQL_Password_Field       hashed_password<br />
       Auth_MySQL_Encryption_Types     SHA1Sum<br />
       Auth_MySQL_Empty_Passwords      Off<br />
       AuthType Basic<br />
       AuthName "Authorization Realm"<br />
       Require valid-user<br />
     &lt;/LimitExcept&gt;<br />
&lt;/Location&gt;<br />
</code></p>
<p>AuthMySQLのパラメータ名が違うのと、Encryption_TypesがSHA1Sumなのがコツ。<br />
なんでsha1じゃねーんだ。。ヽ(`Д´)ﾉウワーン</p>
<p>パラメータ違うと、</p>
<blockquote><p>Invalid command &#8216;AuthMySQLEnable&#8217;, perhaps misspelled or defined by a module not included in the server configuration</p></blockquote>
<p>って出るし、SHA1Sumじゃないと</p>
<blockquote><p>Unsupported encryption type: sha1</p></blockquote>
<p>って出る。分かるかい！ヽ(`Д´)ﾉウワーン</p>
<p>ということで、<br />
<code>www@admin:~$ sudo /etc/init.d/apache2 reload</code><br />
して無事にsvnが動くのでした。。疲れた。。</p>
<p>参考サイト：<br />
<a href="http://d.hatena.ne.jp/ksaito11/20090924">Subversion+Apache からredmineの認証を使う</a><br />
<a href="http://www.nognog.com/techmemo/Apache2_MySQL_Auth_HOWTO.php">うにっくすさんの覚え書き &#8211; Apache2 &#8211; MySQL認証</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/87/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第1回名古屋Android勉強会 でインターンについて発表してきた</title>
		<link>http://www.dabits.net/archives/47</link>
		<comments>http://www.dabits.net/archives/47#comments</comments>
		<pubDate>Sat, 24 Oct 2009 16:38:21 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[レポート]]></category>

		<guid isPermaLink="false">http://tips.dabits.net/?p=47</guid>
		<description><![CDATA[10月24日土曜日、名古屋市立大学で第1回の名古屋Android勉強会が開催されました。
そこで「Androidニコニコプレーヤ開発の経緯と概要」として30分ほどお話させていただきました。


意外と名古屋でAndroi [...]]]></description>
			<content:encoded><![CDATA[<p>10月24日土曜日、名古屋市立大学で第1回の名古屋Android勉強会が開催されました。<br />
そこで「Androidニコニコプレーヤ開発の経緯と概要」として30分ほどお話させていただきました。<br />
<iframe src="http://docs.google.com/present/embed?id=dfhss6n_17g8tz8pf2" frameborder="0" width="410" height="342"></iframe><br />
<span id="more-47"></span><br />
意外と名古屋でAndroidに興味がある方が多く、それに驚いたとともに、<br />
世間って結構狭いもんだなぁと思ったりしました。</p>
<p>とりあえずjava-jaについては、@yamashiroから託されてきたらしいです。<br />
eclipseのショートカットのお話をたくさん聞きました。</p>
<p>ハンズオンについては、あれだけの人数の中、導入からインテントまで進めたのは奇跡だと思ってますｗ</p>
<p>あとはLT。<br />
@androidzaurus の人がNetWalkerにAndroid突っ込んでニヤニヤしてたり、<br />
山本さんが自作でAndroid端末作ってニヤニヤしてたり、<br />
名古屋って変態さん(ほめ言葉)がおおいなぁと改めて感じました。</p>
<p>懇親会も結構な刺激を受けたので、はやく今やってる事を終わらせて、<br />
俺もAndroidでニヤニヤしたいなーと思う勉強会でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/47/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ドワンゴインターンで作ったもの</title>
		<link>http://www.dabits.net/archives/32</link>
		<comments>http://www.dabits.net/archives/32#comments</comments>
		<pubDate>Sat, 24 Oct 2009 16:13:22 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[レポート]]></category>

		<guid isPermaLink="false">http://tips.dabits.net/?p=32</guid>
		<description><![CDATA[<h2>■作ったもの</h2>
Android版ニコニコ動画プレーヤです。
<h2>■実装した機能</h2>
<ul>
	<li>ログイン(初回はアカウント設定へ)</li>
	<li>ランキング</li>
	<li>動画検索</li>
	<li>マイリスト</li>
	<li>アカウント設定</li>
	<li>動画再生</li>
</ul>]]></description>
			<content:encoded><![CDATA[<h2>■実装するためには？</h2>
<ul>
<li>AndroidはH.264動画が再生可能、ニコ動はflv
<ul>
<li>→変換サーバが必要</li>
</ul>
</li>
<li>ランキング取得には裏でしか使えないAPIを叩かなければならない
<ul>
<li>→API中継が必要</li>
</ul>
</li>
<li>マイリスト取得にはuser_idが必要だが、クライアントには保存されてない
<ul>
<li>→独自のセッション管理が必要</li>
</ul>
</li>
</ul>
<h2>■バックエンド</h2>
<h3>●サーバ構成</h3>
<p>サーバは以下の4台構成としました。<br />
これはiPhone版ニコニコプレーヤの仕組みを参考にしています。</p>
<li>infoサーバ：裏APIとの中継サーバ、ログイン管理</li>
<li>manageサーバ：ログイン情報、動画キュー情報管理DB</li>
<li>frontサーバ：動画エンコード情報取得、エンコードされた動画のキャッシュ</li>
<li>convサーバ：キュー処理による動画のエンコード</li>
<p>以下、各サーバの解説をしていきます。</p>
<h3>●infoサーバ</h3>
<p>動画以外の情報を入出力するためのサーバです。<br />
ログイン情報はニコニコ動画本家のログイン管理加え、<br />
マイリスト等取得用に独自でセッション管理しています(Memcache使用)。<br />
それ以外の、たとえばランキングや、動画情報の取得については、<br />
内側でのみ使えるAPIをそのまま中継して使用しています。</p>
<h3>●manageサーバ</h3>
<p>ログイン情報用のMemcache、動画エンコード管理用のキューDBを<br />
ストアしておくためのサーバです。実運用においては、セキュリティを確保するために<br />
LAN内からのみアクセス可能としておきます。<br />
本来、ログイン情報、キュー情報を管理するためのコンソールが必要ですが、<br />
今回は開発時間が足りなかったため実装できませんでした。</p>
<h3>●frontサーバ</h3>
<p>エンコード済みの動画をAndroid本体に送信するためのサーバです。<br />
動画リクエストを受けた際に、動画のエンコード状態をチェックし、<br />
既にキャッシュ済みであれば、その動画のurlを返しダウンロードさせます。<br />
未エンコードで、かつキューがない場合は、キューを作成して、クライアントにWAIT命令を出します。<br />
エンコード済みであれば、convサーバからhttpで動画をロードして、<br />
自urlをクライアントに返します。</p>
<h3>●convサーバ</h3>
<p>キューにたまっている動画をエンコードするサーバです。<br />
処理は単純で、延々とキューを読み出し、愚直にエンコードしてゆくだけです。<br />
エンコードが完了したらhtdocsに保存し、DBにエンコード完了フラグをセットします。</p>
<h2>■バックエンド動作構造</h2>
<p><a href="http://tips.dabits.net/wp-content/60f3234b7f03778e199077bdd2be6dc1.jpg"><img src="http://tips.dabits.net/wp-content/60f3234b7f03778e199077bdd2be6dc1-300x184.jpg" alt="" style="float:none;" /></a><br />
※発表資料まんまなんで、気が向いたら修正しますｗ</p>
<h2>■Androidソフトウェア部分の実装</h2>
<h3>●実装すべきもの</h3>
<ul>
<li>各画面UI</li>
<li>http通信、xmlパース</li>
<li>設定保存</li>
<li>動画描画</li>
<li>コメント描画</li>
</ul>
<h3>●動作フロー</h3>
<ol>
<li>ログイン(未ログインの場合は設定画面へ)</li>
<li>各種動画一覧/設定
<ul>
<li>ランキング</li>
<li>動画検索</li>
<li>マイリスト</li>
<li>設定</li>
</ul>
</li>
<li>動画選択</li>
<li>エンコード状態取得
<ul>
<li>WAIT→一定周期ごとに再アクセス</li>
<li>READY→付随URLを元に動画再生スタート</li>
</ul>
</li>
<li>動画再生
<ul>
<li>コメント情報取得</li>
<li>動画のストリーミングはAndroidが勝手にやってくれる(VideoView)</li>
<li>コメント描画</li>
</ul>
</li>
</ol>
<h3>●ログイン</h3>
<ul>
<li>愚直に設定からアカウントを読み出し、httpsで投げるだけ</li>
<li>アカウントはPreferenceに保存(Windowsでいうレジストリ)、自ソフトのみ読み出し可</li>
<li>アカウントが保存されてないorログイン失敗なら設定画面へ飛ばす</li>
</ul>
<h3>●各種動画一覧取得(ランキング/検索/マイリスト)</h3>
<ul>
<li>中継サーバを使ってxmlで動画リストを取得</li>
<li>サムネ取得&amp;描画が遅いので、ハンドラを使って遅延描画</li>
<li>マイリストは、セッションを渡して取得</li>
</ul>
<h3>●動画状態取得</h3>
<ul>
<li>イライラさせないために「エンコーディングなう」の画像を真っ先に表示</li>
<li>あとはStatus=READYの返答がくるまで、ひたすら繰り返し定期アクセス</li>
</ul>
<h3>●動画再生</h3>
<ul>
<li>コメントのxmlをコメントサーバから取得(中継なし)</li>
<li>動画はVideoViewにURLを渡すだけで、勝手にストリーミングしてくれる。便利。</li>
<li>タイマーを使って定期的に動画の再生位置を取得し、そこにあるべくコメントを表示</li>
<li>コメントオブジェクトは使いまわし(当初はガベコレ)</li>
<li>衝突判定とかいろいろめんどくさい処理があるが、俺は担当してなかったのでわかんない。ふじこお疲れ。</li>
</ul>
<h2>■Androidソフトウェア開発のキモ</h2>
<ul>
<li>１ページ単位にActivityを作る</li>
<li>ページ間をまたぐデータを送受信しあうためにIntentを使う</li>
<li>UIはレイヤーのように重ねることができる
<ul>
<li> (ニコ動プレーヤでは、下から動画、コメント、透明ボタン、制御ボタンの順にレイヤーを重ねた)</li>
</ul>
</li>
<li>VideoViewは便利、ストリーミングを扱うならこれだけでいい。</li>
<li>データのストア方法は、1.Preferenceか2.ファイルか3.SQLite。用途によって使い分ける。</li>
<li>処理が重くなる作業は、全て「Task」を使う
<ul>
<li> (画面描画→タスク開始→タスク実行中でもUI触れる→完了後反映)</li>
</ul>
</li>
<li>TaskなりHandlerなりを使わないと、フリーズしたように見えてかっこ悪い</li>
</ul>
<h2>■反省点</h2>
<ul>
<li>エンコード時間が遅い。めっちゃ遅い。動画時間と同じくらいかかって使い物にならない。
<ul>
<li>→動画エンコード中に、すでにストリーミングで配信することができないだろうか?</li>
<li>→現状構成では使用的にムリ(エンコード後に丸投げする構成)なため、仕組みを考え直す必要がある</li>
</ul>
</li>
<li>動画のダウンロードの際、認証するのを忘れた。
<ul>
<li>→最終発表の際に指摘されたが、このままでは動画がぶっこぬけてしまう。</li>
<li>→DLキーを付加するなどの対処が必要。</li>
</ul>
</li>
<li>XMLパースの効率が悪すぎ
<ul>
<li>→軽いXMLパーサを使おうとするとfor文でぶん回すナンセンスなコードになってしまうし、高度なXMLパーサを使うと、メモリ不足になってしまう。</li>
<li>→XMLを使わない構成が必要。JSONを使うといいらしい。</li>
</ul>
</li>
</ul>
<h2>■感想</h2>
<p>Androidのソフトウェア開発はとてもしやすく、技術者に優しいなと思いました。<br />
というか、作っていて楽しかったので、機会があればリベンジしたいです。</p>
<h2>その他リンク</h2>
<ul>
<li><a href="http://tips.dabits.net/archives/24">TIPS&gt;&gt;ドワンゴインターンシップに行ってきた！</a></li>
<li><a href="http://d.hatena.ne.jp/marimofire/20090914/1252949002">ドワンゴインターンシップ2009レポート＠9月11日 &#8211; まりもころがし</a></li>
<li><a href="http://d.hatena.ne.jp/limitusus/20090915/1253027126">ドワンゴインターン2008/2009 &#8211; Limitの日記</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/32/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ドワンゴインターンシップに行ってきた！</title>
		<link>http://www.dabits.net/archives/24</link>
		<comments>http://www.dabits.net/archives/24#comments</comments>
		<pubDate>Mon, 12 Oct 2009 09:18:39 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[レポート]]></category>

		<guid isPermaLink="false">http://tips.dabits.net/?p=24</guid>
		<description><![CDATA[8月17日～9月11日までドワンゴのインターンシップに行ってきました！
・・・書くこと多すぎてマトマンネ(&#8216;A`)
というわけで、帰ってきて一ヶ月も経ってしまったので、
いいところでまとめておきます。。
とり [...]]]></description>
			<content:encoded><![CDATA[<p>8月17日～9月11日までドワンゴのインターンシップに行ってきました！</p>
<p>・・・書くこと多すぎてマトマンネ(&#8216;A`)<br />
というわけで、帰ってきて一ヶ月も経ってしまったので、<br />
いいところでまとめておきます。。</p>
<p>とりあえず社内について中心にまとめてみました。<br />
製作物については、10/24日の「第1回日本Androidの会名古屋支部勉強会」で<br />
発表する予定なので、その資料の作成時にまとめて、ブログに流します。<br />
<span id="more-24"></span><br />
■メニューてきなもの</p>
<ul>
<li><a href="#a1">応募～面談</a></li>
<li><a href="#a2">面談通過～インターン開始</a></li>
<li><a href="#a3">インターン初日！</a></li>
<li><a href="#a4">デスク広い！</a></li>
<li><a href="#a5">社内LT！</a></li>
<li><a href="#a6">開発したもの：Androidニコニコプレーヤ</a></li>
<li><a href="#a7">社内irc！</a></li>
<li><a href="#a8">リフレッシュルームカオスｗ</a></li>
<li><a href="#a9">おやつ神社</a></li>
<li><a href="#a10">なかのひとたち</a></li>
<li><a href="#a11">去年のインターン生</a></li>
<li><a href="#a12">まとめ</a></li>
</ul>
<p><a name="a1"><br />
<h2>○応募～面談</h2>
<p></a><br />
応募は希望理由＋技術アピールでした。<br />
希望理由はすぐにかけましたが、技術アピールの提出に悩みました。<br />
たいていの方は自作ソフトとかあったんだと思いますが、私は中学以来作っていないので、<br />
とりあえず最近作ったWebサービスの思いのたけを綴った文章を送りつけてみました。</p>
<p>・・・するとなぜか書類通過ｗ<br />
今年は特に応募者が多かったので通知も遅れましたが、<br />
その連絡が来た時点で「もうムリだな」と思ってたので、意外でした。</p>
<p>その2日後に面談。新幹線で東京へ。<br />
一人では初めての東京&amp;大きい会社という事で、すげードキドキしました。<br />
面談前に事務手続きがあったんですが、その時点でもう緊張MAX。</p>
<p>・・・が、いざ面談に入ると、自分の好きな世界なので、夢中で話しました。<br />
それだけじゃなく面談自体が楽しくて、去年のインターンの話題からダーツバーの話題に行ったりして<br />
「受かったらダーツ行きましょう！」なんてゆってましたｗ<br />
あんな楽しい面接なら何度受けてもいいと思いました。</p>
<p><a name="a2"><br />
<h2>○面談通過～インターン開始</h2>
<p></a><br />
面談に受かってからは結構大変でした。<br />
インターン開始まで2週間ほどしかなく、しかもお盆を挟む為、<br />
めちゃめちゃ早く下宿する部屋を決める必要がありました。<br />
友達の@hypersonicsの手伝いも受け、なんとか安い物件を確保。<br />
マンスリーでコミコミ月10万はすげー安いなと思いました。</p>
<p>今になって振り返ると、安さだけでなく場所も選ぶべきでした。<br />
自分が住んだところはめちゃめちゃ治安が悪く、その辺を歩いただけで薬を売られたりと中々カオスな場所でした。<br />
まぁ、それもそれで楽しかったんですがｗ</p>
<p>東京に住むんだとしたら、もうちょい治安のいいところがいいです。</p>
<p><a name="a3"><br />
<h2>○インターン初日！</h2>
<p></a><br />
早め早めに東京へ行き、下宿先へ荷物を置いたらいざドワンゴへ！<br />
先にもう一人のインターン生、@ssashir06がいたので話しかけてみる・・・と！<br />
なんと、俺がネットで尊敬していた@binzumeさんの後輩らしく！<br />
さらに@binzumeさんはここに勤めてるとのことで驚きの出会いでした。</p>
<p>その後事務手続きのため会議室で書類を書いたんですが、<br />
そこで出会ったのが@mimitannでした。<br />
パッと見まじめな雰囲気で、そのときは強力なキャラクターとも知らず・・ｗ</p>
<p><a name="a4"><br />
<h2>○デスク広い！</h2>
<p></a><br />
その後社内を一通り見学、自分のデスクへ。広い！<br />
机が広々としてて、デュアルディスプレイ、さらにかなりスペックのいいパソコンが用意されてました。</p>
<p>開発者がこれだけ優遇されているのはここぐらい、と後に聞かされました。<br />
某社にインターンに行った人のお話では、スペックが低すぎて仕事にならないとか。。。</p>
<p><a name="a5"><br />
<h2>○社内LT！</h2>
<p></a><br />
社内で初めに目がキラキラしたのは、社内LTがあることでした。<br />
毎週お昼ごろにやってるらしく、丁度初日がLTの日でした。</p>
<p>毎週LTって刺激的ですよね！<br />
発表する出番は定期的に周ってくるし、毎週刺激的な話が聞けるし！<br />
これは色んなところでどんどん広まるべき、と思いました。</p>
<p>初回、LTの時間が余ったので、急遽LTを任されました！<br />
テーマは<a href="http://www.styleshare.jp/">StyleShare</a>について。元々バイト先の<a href="http://www.jamboree.jp/">TOYOSYSTEM</a>でやってた事だったんですが、<br />
開発がほぼ自分だったので、さりげなく技術アピールに入れてたモノ。</p>
<p>マゾな俺はここぞとばかりにチャンスだと思い、サイトを見せながらやれる限りやってみました。<br />
質問が結構来て、レスポンスも結構あったのですごく嬉しかったです。</p>
<p>合計4回LTを見に行きましたが、ちょいちょいネタを織り交ぜる人たちがいてカオスでしたｗ<br />
ネタで一番印象に残ってたのはコーヒーメーカー、<br />
技術的に一番印象に残ってたのは「力技」でした。</p>
<p>そのネタっぷりを見て「俺もカオスになりたい！」と思い、<br />
次週のLTでインターンについて発表したんですが、あえなく撃沈。。。<br />
やっぱ慣れないとやるもんじゃないですねｗ</p>
<p><a name="a6"><br />
<h2>○開発したもの：Androidニコニコプレーヤ</h2>
<p></a><br />
インターンの4週間で開発したものは、Androidのニコニコプレーヤでした。<br />
とはいってもプロトタイプみたいなもので実用化はされないんですが。。。</p>
<p>ドワンゴ社内の開発は、SVN+Trac+wikiで行われていました。<br />
各開発部門ごとにwikiがあって、そこに技術情報を書き込んでいく、という形です。</p>
<p>全てのwikiにアクセスできるので、たとえば他サービスと組み合わせたい！なんてときに<br />
とても役に立ちそうな構成でした。</p>
<p>また、Androidのプレーヤを開発する際に、<br />
かなりニコモバとiPhone版プレーヤの中身を参考にしましたｗ</p>
<p>今回開発したもので、技術的なお話はまたどこか別のエントリで。</p>
<p><a name="a7"><br />
<h2>○社内irc！</h2>
<p></a><br />
社内ircも印象的でした。<br />
開発部門ごとに部屋が設けられているのはもちろんのこと、<br />
「うんこ部屋」なるゆるい感じのお部屋もあり、毎日カオスな話題が繰り広げられていましたｗ<br />
あのゆるさがたまらんです。</p>
<p>ちなみにうんこ部屋以外のirc部屋は、しっかり会話がログに残るので、<br />
下手な事がしゃべれなかったり、休んだときに何を話してたか確認する事ができます。</p>
<p><a name="a8"><br />
<h2>○リフレッシュルームカオスｗ</h2>
<p></a><br />
社内にはリフレッシュルームなるお部屋がありました。<br />
その名の通り、休憩する場所なんですが、なぜかPCダーツがおいてあったり、<br />
いろんな人が持ち込んだであろうゲームや本たちが所狭しと置いてあったのが印象的でした。<br />
インターン期間中もたまに来て、ダーツやったり、ドラクエやったりしてました。</p>
<p>去年まではビリヤード台もあったらしいですが、撤去されたみたいです。<br />
id:itkzさんが嘆いてるらしいです。</p>
<p><a name="a9"><br />
<h2>○おやつ神社</h2>
<p></a><br />
おやつ神社なるものもありました。<br />
各部屋におやつ広場を展開する事で、お茶の間的に社内コミュニケーションが円滑になるらしいです。</p>
<p>よし体感してみよう！ということで、自分の席から近いおやつ神社に潜入！<br />
そこは支店らしいんですが、神社型の貯金箱にゆっくりが奉ってありましたｗ<br />
おやつは一括で購入するらしく、おやつを持ってくときにお金を入れてね！という感じです。</p>
<p>でも中々黒字にならないらしい。。。ｗ<br />
・・・っていう話をしていたら、周りの人たちとも話してて、気が付けばかなりおやつ神社に居座っていました。<br />
恐るべし、おやつ神社。</p>
<p><a name="a10"><br />
<h2>○なかのひとたち</h2>
<p></a><br />
ホントいろんな人たちがいました。破滅的な人もいれば、普通の人もいたり。<br />
しかしながら中々絡む事が出来なかったのが残念！<br />
せっかくの機会なんだからもっとガシガシ行かんとなーと、終わってから感じました。</p>
<p>今回インターンの担当だったmatsuoaさんと、人事の方(名前出していいのかわかんない＞＜)が<br />
お二方ともとてもいい人で、とても素敵なインターンを過ごす事ができました。<br />
matsuoaさんには内外関わらずいろいろなところに連れて行っていただき、<br />
人事の方にはインターン中の励ましはもとより、インターンの最後の最後までお世話になり、<br />
本当に感謝です！</p>
<p>なんか惚れる人たちで、あんな大人たちになりたいなぁと思いました。</p>
<p><a name="a11"><br />
<h2>○去年のインターン生</h2>
<p></a><br />
matsuoaさんの粋な計らいで、去年のインターン生の人たちにも会う事ができました。<br />
正直去年のインターン生、レベルタカスクリニック状態です。話しててビビリました。</p>
<p>でも、「インターンでダーツがうまくなった」とブログに書いてあったのに、<br />
自分がダーツに勝ってしまったのも驚きましたｗ<br />
来年再戦しましょうｗ</p>
<p><a name="a12"><br />
<h2>○まとめ</h2>
<p></a><br />
・なんでもやってみるのが一番。<br />
・短期間とはいえ住む所の治安は大事。<br />
・仕事環境も大事。<br />
・ドワンゴはのびのび開発ができる！<br />
・LTとか刺激を受けるのも大事。<br />
・チーム開発は妥協も必要。<br />
・できなかった悔しさを次につなげよう！</p>
<p>・そもそも、「社内のふいんき(ryが知りたいぞー！」って事で参加してみたインターンでしたが、<br />
それ以上に、大切なものを得ました。</p>
<p><strong>笑いの要素って大事ですね！！！<br />
お笑いセンスを磨いて、次は採用面接に行きます！！！</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/24/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>cakephp1.2流のエレメントキャッシュ</title>
		<link>http://www.dabits.net/archives/12</link>
		<comments>http://www.dabits.net/archives/12#comments</comments>
		<pubDate>Sat, 02 May 2009 11:33:22 +0000</pubDate>
		<dc:creator>hiroki</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://tips.dabits.net/?p=11</guid>
		<description><![CDATA[サイドメニューなど、エレメントの部分だけキャッシュしたかったので、
マニュアルの3.9.3.2 エレメントをキャッシュするを見て、実装したのですが、
コントローラ側からCache::read();としても反応なし。
・・ [...]]]></description>
			<content:encoded><![CDATA[<p>サイドメニューなど、エレメントの部分だけキャッシュしたかったので、<br />
マニュアルの<a href="http://book.cakephp.org/ja/view/561/Caching-Elements">3.9.3.2 エレメントをキャッシュする</a>を見て、実装したのですが、<br />
コントローラ側からCache::read();としても反応なし。<br />
・・・？と思いながらview.phpを眺めていると、以下の記述が。。。</p>
<div class="igBar"><span id="lphp-5"><a href="#" onclick="javascript:showPlainTxt('php-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-5">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$expires</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$cacheFile</span> = <span style="color:#FF0000;">'element_'</span> . <span style="color:#0000FF;">$key</span> . <span style="color:#FF0000;">'_'</span> . <span style="color:#0000FF;">$plugin</span> . Inflector::<span style="color:#006600;">slug</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$name</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$cache</span> = cache<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'views'</span> . DS . <span style="color:#0000FF;">$cacheFile</span>, <span style="color:#000000; font-weight:bold;">null</span>, <span style="color:#0000FF;">$expires</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/is_string"><span style="color:#000066;">is_string</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$cache</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#616100;">return</span> <span style="color:#0000FF;">$cache</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>あれ、cache();って1.1のやつだから非推奨のはずじゃぁ。。。<br />
ってことで、cakephp1.2流のelementキャッシュを考えてみた。</p>
<p>●view側</p>
<div class="igBar"><span id="lphp-6"><a href="#" onclick="javascript:showPlainTxt('php-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-6">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">&lt;?php</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#0000FF;">$this</span>-&gt;;element<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'left_menu'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">?&gt;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
の代わりに以下を挿入</p>
<div class="igBar"><span id="lphp-7"><a href="#" onclick="javascript:showPlainTxt('php-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-7">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">&lt;?php</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$element</span> = Cache::<span style="color:#006600;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'left_menu'</span>, <span style="color:#FF0000;">'element'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> === <span style="color:#000000; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$element</span> = <span style="color:#0000FF;">$this</span>-&amp;gt;element<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'left_menu'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; Cache::<span style="color:#006600;">write</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'left_menu'</span>, <span style="color:#0000FF;">$element</span>, <span style="color:#FF0000;">'element'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#0000FF;">$element</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">?&gt;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>●コントローラ側<br />
beforeFilterなどでエレメントキャッシュを定義し、<br />
キャッシュが存在しない場合に限り、クエリを発行する。</p>
<div class="igBar"><span id="lphp-8"><a href="#" onclick="javascript:showPlainTxt('php-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-8">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$config</span> = <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#FF0000;">'engine'</span> =&amp;gt; <span style="color:#FF0000;">'File'</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#FF0000;">'duration'</span>=&amp;gt; <span style="color:#FF0000;">'+5 min'</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#FF0000;">'path'</span> =&amp;gt; CACHE . <span style="color:#FF0000;">'views'</span> . DS,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#FF0000;">'prefix'</span> =&amp;gt; <span style="color:#FF0000;">'element_'</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Cache::<span style="color:#006600;">config</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'element'</span>, <span style="color:#0000FF;">$config</span><span style="color:#006600; font-weight:bold;">&#41;</span>;&lt;/code&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span> Cache::<span style="color:#006600;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'left_menu'</span>, <span style="color:#FF0000;">'element'</span><span style="color:#006600; font-weight:bold;">&#41;</span> === <span style="color:#000000; font-weight:bold;">false</span> <span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$areas</span> = <span style="color:#0000FF;">$this</span>-&amp;gt;Area-&amp;gt;find<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'menu'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$categories</span> = <span style="color:#0000FF;">$this</span>-&amp;gt;Category-&amp;gt;find<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'menu'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#0000FF;">$this</span>-&amp;gt;set<span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/compact"><span style="color:#000066;">compact</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'areas'</span>, <span style="color:#FF0000;">'categories'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>これで劇早&amp;1.2流のキャッシュができましたー！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dabits.net/archives/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
