<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
  <channel>
    <title>Shibu's Diary</title>
    <link>http://blog.shibu.jp/</link>
    <description>My blog about Software Development (Python, Sphinx, JavaScript, etc)</description>
    <language>ja</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <itunes:subtitle></itunes:subtitle>
    <itunes:summary>My blog about Software Development (Python, Sphinx, JavaScript, etc)</itunes:summary>
    <itunes:keywords></itunes:keywords>
    
    <itunes:author>@shibukawa</itunes:author>
    <itunes:owner>    
       <itunes:name></itunes:name>
       <itunes:email></itunes:email>
    </itunes:owner>
        <itunes:explicit>no</itunes:explicit>
        <item>
      <link>http://blog.shibu.jp/article/55729773.html</link>
      <title>Win/Mac/Linuxで圧縮テクスチャを作成する</title>
      <pubDate>Wed, 09 May 2012 03:42:20 +0900</pubDate>
      <description>圧縮テクスチャ。現代的なグラフィックス処理の大半はメモリ間転送ですよね。圧縮テクスチャはGPU内のメモリ使用量と転送量を削減してパフォーマンスもアップさせる魅惑のテクニックです。きっとスマートフォンのバッテリーの持ちも良くなることでしょう。iOSはPowerVRを一貫して使っているので、PVRフォーマットが標準です。Androidの方はいちおうETC1という共通フォーマットはあるのですが、アルファチャンネルが持てなかったりするのでデバイスごとの最適なフォーマットを使うのが普通..</description>
            <content:encoded><![CDATA[
<p>圧縮テクスチャ。現代的なグラフィックス処理の大半はメモリ間転送ですよね。圧縮テクスチャはGPU内のメモリ使用量と転送量を削減してパフォーマンスもアップさせる魅惑のテクニックです。きっとスマートフォンのバッテリーの持ちも良くなることでしょう。</p>

<p>iOSはPowerVRを一貫して使っているので、PVRフォーマットが標準です。Androidの方はいちおうETC1という共通フォーマットはあるのですが、アルファチャンネルが持てなかったりするのでデバイスごとの最適なフォーマットを使うのが普通みたいです。</p>

<ul>
<li>ATiTC: 元ATi(現AMD)のフォーマット。ATCとも呼ばれています。ATiのモバイル向けのプロセッサは現在Qualcommがリリースしています。よく使われていrます。アルファチャンネルの有無、アルファチャンネルの特性で3種類の内部フォーマットがあります。</li>
<li>DXTC: Direct X用共通フォーマットみたいです。nVidiaのTegra系が利用しています。これも、データの種類ごとに3〜4種類の内部フォーマットがあるらしい。
<li>PVR: iOS系と同じPowerVRを載せているデバイスで使います。圧縮率、アルファチャンネルの有無で2x2の4種類あります。
<li>ETC1: エリクソン社が作った標準フォーマットですが、ARM社自身が作っているMaliというGPUがこれのみをサポートしています。
</ul>

<p>そのうち、ETC2というアルファチャンネルをサポートしたフォーマットが共通で使えるようになるらしいです。このあたりは、<a href="http://wlog.flatlib.jp/">こちらのブログ</a>を上から下まで拝むように読みまくる方が正しい情報を得られると思います。</p>

<p>開発ツールのみであれば、WindowsかMacだけでもいいとは思うのですが、ビルドサーバとか考えるとLinuxサポートも欲しくなるかもしれないので、その観点でマルチプラットフォームで入手可能か？で調べています。全部の検証をしたわけではないです。あくまでもメモです。</p>

<h3>PVRフォーマット</h3>

<p>PowerVRをリリースしている、Imagination社のサイトにツールなりなんなりが色々あります。要ユーザ登録。<a href="http://www.imgtec.com/powervr/insider/powervr-pvrtextool.asp">PVRTexTool</a>が変換ツールです。GUIツールですが、コマンドラインからも使えるらしい。パッケージに、Windows 32/64, Linux 32/64, Mac 32の5バージョンが含まれています。Windows版だけはDXTCサポートみたい。ずるい。Apple限定でよければ、iOS用のSDKに変換ツールが付いてきます。</p>

<p><a href="http://www.imgtec.com/powervr/insider/powervr-pvrtexlib.asp">ライブラリ</a>としても提供されていますので、ツールチェーンに組み込んだりもしやすいかな、と思います。ただし、ビルド手順を見ると、SDKに含まれるライブラリとかヘッダも必要とか色々書かれていて、家の遅いネットでダウンロードするのが時間がかかりそうなので詳しくおいかけてません。SDKはOpen GL ES1.1と、ES 2.0用と分かれていリリースされています。</p>

<h3>DXTCフォーマット</h3>

<p>今回は僕の作業では特に必要はないので詳しくは調べていませんが、nVidia社が変換ツールのソースをMIT License！で公開しています。コメントを見ると、Linuxでも動くよ、と書かれています。Macは時々落ちるかも・・・と書かれています・・・。</p>

<a href="http://code.google.com/p/nvidia-texture-tools/">http://code.google.com/p/nvidia-texture-tools/</a>

<h3>ATiTC/ETCフォーマット</h3>

<p>なかなか調べにくかったのがこいつです。<a href="http://www.guildsoftware.com/papers/2012.Converting.DXTC.to.ATC.pdf">DXTCファイルから無理やり変換</a>も見つけましたが、1ビット情報を無理やり落としてしまっていたりとちょっとデザイナーさんから怒られそうな感じ。AMDはWindows向けのツールしか提供していませんし、Qualcommの<a href="https://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools-and-resources">AdrenoSDK</a>もzipファイルを展開すると.exeファイルががががが。</p>

<p>でも、あきらめずに.exeファイルでインストールすると、変換用のライブラリが手に入ります。Windows32/64用とMac用。それにWindowsMobile、webOS、Androidもサポートしているので実機上の変換もできそうです。Linuxは残念ながら対象外。</p>

<p>また、Windows専用ですが、QCompressというGUI/CUIのツールも付いてきます。@nakamura001の啓示に従い、wineで動かしてみようと思います。<p>

<pre>
$ sudo port install wine
: (待つ)
$ wine ~/Downloads/AdrenoSDK/AdrenoSDK.2.3.00.exe
</pre>

<p>ふつーにWindowsっぽいダイアログが出て、インストールが行われます。初回のwine起動時は環境作ったりで時間がかかるかも。ホームの.wine以下にWindowsっぽいディレクトリ構造ができます。<tt>/users/Public/Documents/</tt>にテスト用の画像を置いてみました。</p>

<pre>
$ cd ~/.wine/drive_c/AdrenoSDK/Tools/QCompress
$ wine QCompressCmd.exe c:\\users\\Public\\Documents\\test.png c:\\users\\Public\\Documents\\test.atc "ATC RGBA Explicit"
QCompessCmd v0.01.00 (c)2011 QUALCOMM Incorporated
</pre>

<p>フォルダを見てみると、<tt>test.atc</tt>が出来ています。やったね。</p>

<p>上記の例で使ったQCompressがETC1にも対応しています。以上終了。</p>

<h3>まとめ</h3>

<p>やっぱり、Windowsの方が細かいツール類は充実していますねー。一部無理やりなところもありましたが、ひと通り欲しいデータは得られそうです。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/54774201.html</link>
      <title>Pythonプロフェッショナルプログラミング</title>
      <pubDate>Mon, 02 Apr 2012 16:59:55 +0900</pubDate>
      <description>レビューにちょびっと参加した、Pythonプロフェッショナルプログラミングが無事発売されたようです。おめでとうございます！わざわざ、アメリカにまで献本を送って頂きました。ありがとうございます。ホントにアメリカなんだぜ、というのを証明するために、USのトイザらス限定のクラシック・ソニック10インチフィギュアと、日本未発売のアニメーターズ・コレクションのポカホンタス、サン・フランシスコのローカルなアイスのThree Twinsと一緒に写真撮ってみました。Amazonでも入荷待ちに..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/6891841802/" title="DSC_0937 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7245/6891841802_e2594bd689.jpg" width="500" height="333" alt="DSC_0937"></a>

<p>レビューにちょびっと参加した、<a href="http://www.amazon.co.jp/gp/product/4798032948/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4798032948">Pythonプロフェッショナルプログラミング</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4798032948" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />が無事発売されたようです。おめでとうございます！わざわざ、アメリカにまで献本を送って頂きました。ありがとうございます。ホントにアメリカなんだぜ、というのを証明するために、USのトイザらス限定のクラシック・ソニック10インチフィギュアと、日本未発売のアニメーターズ・コレクションのポカホンタス、サン・フランシスコのローカルなアイスのThree Twinsと一緒に写真撮ってみました。</p>

<p>Amazonでも入荷待ちになっていますね。Amazonで買えないときは、弊社の親会社(DeNA)が運営するビッダーズで検索すると、<a href="http://bidders.jp/item/170629720?l=true">見つかるかも</a>しれませんよ。ポイントも付くかも？</p>

<p>本のタイトル的には<a href="http://www.amazon.co.jp/gp/product/4048686291/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4048686291">エキスパートPythonプログラミング</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4048686291" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
とかぶっていますし、いくつか同じテーマを扱った章もあります。ですが、こちらはより実践的な、仕事で使えるような内容がより多くなっています。テーマが同じでも、より深堀してあったり(Sphinxのドキュメント)、より新しい内容を元に書かれていたり(パッケージ管理)、最近ではより広く使われているもの(Jenkins)を対象としていたり、エキスパートPythonプログラミングを持っている人でも、「おおっ」っと思える内容が多いです。まぁ、エキスパートPythonプログラミングの方は、Pythonという言語を深く深く取り扱っている本なので、当然両方そろえるべきですね【ステマ】</p>

<p>とくに実践的だな、と思えるのが想定環境です。最近のシステム開発だとウェブ上のシステムがかなりの割合を占めていると思いますが、仮想PCを使って、それの上で開発をすると説明されています。もしかしたら他のRailsとかの本もそうなっているのかもしれませんが(最近全然そちらは追いかけていない)、個人的には「なるほどー」と思いました。以前、大規模にPythonで開発していたときは、Windows XP上でコードを書き、Djangoで動作確認をしながら、本番環境(Windows Server 2003)にデプロイして・・・とかやっていました。細かい差であっても、結構デプロイ作業で手間暇がかかったりするんですよね。また、開発環境をシステム上に入れてしまうと、Pythonのバージョンなどで引きずられてしまったり・・・と。当時のPCは非力すぎて仮想PCは難しかったという事情もあったのですが、いろんな仕事を受託で引き受けて、ばっちり開発しているようなBeProudでは、そのあたりはしっかりとしているんだなぁ、と思いました。</p>

<p>かなりスキルの高い開発者を固めている印象のあるBeProudの、実践でつちかってきたノウハウがばっちり書かれた本に仕上がっています。Pythonと書かれていますが、半分ぐらいの章はPythonでなくても役に立つ話が書かれています。とても良い本です。ぜひ、みなさんお手にとって、レジまで運んでお金を払い、東京で毎月定期的に開催されているBPStudyという勉強会にも参加して、できるエンジニアの人たちのありがたいお話を聴きながら、本にサインをもらうと良いと思います。</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4798032948" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048686291" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/54695561.html</link>
      <title>MacPortsは生まれ変わった</title>
      <pubDate>Thu, 29 Mar 2012 05:54:40 +0900</pubDate>
      <description>by www.frontendeveloper.com under CC BY-SAあ、近況報告ですが、DeNAから子会社のngmocoに転籍となり、サン・フランシスコに引越しました。また暇見つけて詳しく書きます。MacのOSS関連のツールのインストールは昔からいろいろ歴史があります。最近の事件としては、MacPortsがほぼデファクトだったときに、Homebrewが出てきて一躍人気になり、MacPortsからの引越しネタが一時期の技術ブログでさかんに書かれたことですかね。で..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/alainpicard/4175214747/" title="Golden Gate in San Francisco, California by www.frontendeveloper.com, on Flickr"><img src="http://farm3.staticflickr.com/2797/4175214747_166c68eaf0.jpg" width="500" height="332" alt="Golden Gate in San Francisco, California"></a>
<br>by www.frontendeveloper.com under CC BY-SA
</p>

<p>あ、近況報告ですが、DeNAから子会社のngmocoに転籍となり、サン・フランシスコに引越しました。また暇見つけて詳しく書きます。</p>

<p>MacのOSS関連のツールのインストールは昔からいろいろ歴史があります。最近の事件としては、MacPortsがほぼデファクトだったときに、Homebrewが出てきて一躍人気になり、MacPortsからの引越しネタが一時期の技術ブログでさかんに書かれたことですかね。</p>

<p>で、僕もいろいろ使っていました。最近は、環境を作りなおす際に時間節約と思ってHomebrewを使っていたのですが、どうしてもBoostの最新版がインストールできず(手元のフォーミュラがupdateでも更新されず、手元のフォーミュラの参照しているアーカイブはすでにsourceforge上から削除)、困ってMacPortsに戻しました。そしたらびっくり！ビルド済みのバイナリパッケージを落としてくるようになってました。</p>

<p>依存関係がやたら多い(X11とかも含む)py27-pilをインストールしても、7分半(fontconfigのactivateに時間かかってた)。今までのように、ビルドをしかけてから、オヤスミなさいまた明日する必要はないです。あ、僕のマシンはHDDのCore 2世代のMacBook Proです。ディスク暗号化とかいろいろかかっていてかなり重いです。Windows 95を思い出すぐらい・・・</p>

<p>インストールの過程を見ても、必要なパッケージはだいたい自分のサイトのところに置いていて、サードパーティのサイトのリンク切れとかに悩まされられない安心感もいいですね。ビルドしないからSSDみたいな環境の人にいいと思います。スペースが余計に使われないので。また、ビルドしないので、HDDみたいな環境の人にいいと思います。ビルドの時間がかかりませんし。なにより、CPUパワーと時間が食われて熱となって消えていくわけですから、バイナリを使ったほうがエコですよね。gentoo好きみたいなビルド好き以外の人はMacPortsを選んでおけば間違いないと思います。作業のインフラとしては。</p>

<p>まぁ、比較してみると、ちょっとパッケージに収録されているバージョンが古かったり(node.jsは0.6.10。Homebrewは0.6.14)、というのはありますが、gitとか、安定している仕事のツールを揃えるにはいいんじゃないでしょうか？</p>

<p>今、Boostを+universalでインストールしていますが、基本バイナリで、見つからないやつだけソースコードからビルドしている模様。icuのuniversalバイナリはなかったか・・・でも、icuのソースはmacports.orgから取ってきていました。Boostのソースはsourceforgeでしたけど。</p>

<p>Homebrewさん、お世話になりました。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/54031385.html</link>
      <title>Sphinxへの感謝の気持ちをブログに書いてみる</title>
      <pubDate>Sat, 18 Feb 2012 03:40:29 +0900</pubDate>
      <description>僕はSphinx-Users.jpの創設者です。そんでもって、Sphinx-Users.jpの会長をやっていました。先月、次の代表に譲ったので今は違います。現在の会長は@tk0miyaさんです。通称、世界の小宮。副会長は前期からの引き続いて@shimizukawaさんと、新規の@shkumagaiさんです。できる人ほど忙しい、という法則の通り、みんな暇ではないのですが、きちんとビジョンを持った、良いメンバーだと思います。僕が代表を辞した理由は、転勤によるものです。今はベイスタ..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/6892085759/" title="sphinx02 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7192/6892085759_9641bfe7f3.jpg" width="500" height="414" alt="sphinx02"></a>

<p>僕は<a href="sphinx-users.jp">Sphinx-Users.jp</a>の創設者です。そんでもって、Sphinx-Users.jpの会長をやっていました。先月、次の代表に譲ったので今は違います。現在の会長は<a href="https://twitter.com/#!/tk0miya">@tk0miya</a>さんです。通称、世界の小宮。副会長は前期からの引き続いて<a href="https://twitter.com/#!/shimizukawa">@shimizukawa</a>さんと、新規の<a href="https://twitter.com/#!/shkumagai">@shkumagai</a>さんです。できる人ほど忙しい、という法則の通り、みんな暇ではないのですが、きちんとビジョンを持った、良いメンバーだと思います。</p>

<p>僕が代表を辞した理由は、転勤によるものです。今はベイスターズで有名な東京のDeNAで働いています。実は野球以外にソーシャルゲームをやっている会社でして、僕もそちらの仕事をしています。来月から、アメリカの子会社のngmoco:)に転勤になります。サンフランシスコです。日本でのコミュニティのマネジメントはできなくなってしまいます。ただ、大きな成長のチャンスを与えてくれたDeNAにはとても感謝しています。</p>

<p>Sphinx-Users.jpは変わったソフトウェアのコミュニティで、<a href="http://sphinx.pocoo.org/">Sphinx</a>と、一般的なドキュメンテーションを対象にしています。コミュニティのミッションは、Sphinxやドキュメンテーションに関する情報を集約し、発信していくことです。僕がSphinxに出会ったのは2009年。僕は大学のころから、SWIGやらC++のリファレンスやら、<a href="http://www.amazon.co.jp/gp/product/4894715899/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4894715899">アジャイルソフトウェア開発スクラム</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4894715899" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />やら、<a href="http://www.amazon.co.jp/gp/product/4901676628/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4901676628">実践eXtremeプログラミング</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4901676628" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />やらの翻訳をしたりしていました。Erlang Efficiency Guideというドキュメントを翻訳しているときに、<a href="https://twitter.com/#!/voluntas">@Voluntas</a>というとんでもない男にSphinxを教えてもらいました。どうとんでもないかというと、自分が読みたい英語の文章があったら、他の人に興味を持たせて、そいつに翻訳させてしまうという・・・ある意味人使いのうまい奴です。日本のPython界とErlang界を影で操っているのはこの男です。某トイプー使いのトイプーさばきとどちらが上か気になります。そんなこんなでSphinxに興味を持ち、リファレンスのドキュメントを日本語に翻訳したりしました。その後Sphinxのコミュニティを作りました。コミュニティの最初のイベントは単なる飲み会だったのですが、偶然その日にSphinx 1.0がリリースされて、偶然<a href="http://sphinx-users.jp/event/20100724_release_party.html">リリースパーティー(世界で唯一)</a>になってしまったのは良い思い出です。その後、Sphinxは僕の右腕として大活躍しました。本を5冊ほどSphinxで書きましたし(別の2冊が進行中)、<a href="https://developer.mobage.com/ja/resources/ngcore-encyclopedia">仕事のドキュメント</a>も書きました。僕の持つスキルの中でもかなりの重要度です。</p>

<a href="http://www.flickr.com/photos/shibukawa/6892085607/" title="sphinx01 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7061/6892085607_6248c06387.jpg" width="500" height="414" alt="sphinx01"></a>

<p>コミュニティイベントには、かなり熱心な人が多く集まりました。PHPのコミュニティのメンバーもいました。@tk0miyaさんもそのようなアクティブなメンバーの一人です。Pythonの勉強がてら、<a href="http://blockdiag.com/en/blockdiag/">Blockdiagシリーズ</a>を次々と作っては公開しました。去年の11月には<a href="http://pypi.python.org/pypi/sphinxjp.shibukawa">sphinxjp.shibukawa</a>という名前で誕生日プレゼントのモジュールを作ってプレゼントしてくれました。おかげで今週、DeNAの同僚から不具合の報告を受けることになったのですが・・・他のメンバーも同様です。@shimizukawaさんはSE向けの<a href="http://sphinx-users.jp/articles/business-document-sample/index.html">ドキュメントテンプレート</a>を作成したり、<a href="http://pypi.python.org/pypi/sphinxjp.themecore/0.1.3">HTMLのテーマを簡単にインストールする拡張</a>を公開したり、Windowsのインストーラも作成しています。@shkumagaiさんは、なかなか<a href="http://packages.python.org/sphinxjp.themes.impressjs/">刺激的なプレゼンテーションのテーマ</a>を作っていたりします。他のメンバーもいろいろな貢献がありました。全部おぼえきらないほどです。日本からの貢献をまとめて紹介するページをコミュニティページに足さなかったのは失敗でした。</p>

<p>Sphinx-Users.jpはすでにコラボレーションの仕組みを持っています。<a href="https://bitbucket.org/sphinxjp/website/">ウェブサイトのリポジトリ</a>に誰かがpushすると(もちろんソースはSphinx)、裏でサーバがpullして自動でビルドします。さくらの廉価な月500円プランなので、Jenkinsとかを使うことはできませんでしたので、cronを使って実装しています。オフラインの勉強会に参加できなくても、外からコミットはできます。新しいリーダーは多くのイベントを開催してくれそうです。ソフトウェア開発の速度がドキュメンテーションやコミュニケーションの速度を超えるまでは、ドキュメンテーションは重要なもので在り続けるでしょう。PythonやErlangなどのようなすばらしいシステムはすばらしいドキュメントを持っています。そういう意味で、Sphinxのスキルは、プログラマにとっての良い習慣になっていくでしょう。Sphinx-Users.jpの今後の発展を期待しています。</p>

<p>そうそう、Sphinx-Users.jpにはひとつ迷信があります。僕も@shimzukawaさんも、Sphinx-Users.jpの三役をしている時に、相手を見つけて結婚しました。@tk0miyaさんは、会長に就任して1ヶ月もたたずに、彼女ゲッツ宣言を出していました。Sphinxに関わる人は幸せになっちゃいますね！</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4894715899" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4901676628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477414259X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048686291" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00418546W" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048689525" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114950" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/54031249.html</link>
      <title>Thank you for Sphinx!!</title>
      <pubDate>Sat, 18 Feb 2012 03:11:38 +0900</pubDate>
      <description>I am a founder of Sphinx-Users.jp. And I was a leader of Sphinx-Users.jp. Generational change was done last month. Now the leader of community is @tk0miya (his byname is &quot;World Komiya&quot;). Sub leaders are @shimizukawa (he continued) and @shku..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/6892085759/" title="sphinx02 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7192/6892085759_9641bfe7f3.jpg" width="500" height="414" alt="sphinx02"></a>

<p>I am a founder of <a href="sphinx-users.jp">Sphinx-Users.jp</a>. And I was a leader of Sphinx-Users.jp. Generational change was done last month. Now the leader of community is <a href="https://twitter.com/#!/tk0miya">@tk0miya</a> (his byname is "World Komiya"). Sub leaders are <a href="https://twitter.com/#!/shimizukawa">@shimizukawa</a> (he continued) and <a href="https://twitter.com/#!/shkumagai">@shkumagai</a>. Basically they are all busy but they have clear vision and great members.</p>

<p>The reason of I have to resign the leader is job transfer to a affiliated company. I am working at DeNA Co.,Ltd, Tokyo, Japan. It is a social game company. And I will move to ngmoco:) LLC it is in San Francisco, USA. I won't be able to manage community in Japan. I would like to say thank you to DeNA for giving me chance to grow up. I am exciting.</p>

<p>Sphinx-Users.jp is a unique community. It deals not only <a href="http://sphinx.pocoo.org/">Sphinx</a> but also generic documentation topic. Its mission is gather and spread information about Sphinx and documentation. I met Sphinx in 2009. From my courage days, I translated many documents. SWIG, C++ reference, <a href="http://www.amazon.co.jp/gp/product/4894715899/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4894715899">Agile Software Development with Scrum</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4894715899" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, <a href="http://www.amazon.co.jp/gp/product/4901676628/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4901676628">Practical Guide to eXtreme Programming</a><img src="http://www.assoc-amazon.jp/e/ir?t=shibukawayosh-22&l=as2&o=9&a=4901676628" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> and so on. During translating Erlang Efficiency Guide, blamed guy <a href="https://twitter.com/#!/voluntas">@Voluntas</a> taught Sphinx to me. If he found any interesting topic in English, he made other guys translate in Japanese. He is the rule of Python and Erlang in Japan. I was interested in Sphinx and I translated the reference document into Japanese. After that, I made a community about Sphinx. First event of that community was just drinking party. But Sphinx 1.0 was released at the same day, so it became <a href="http://sphinx-users.jp/event/20100724_release_party.html">release party</a> by chance. It was a good memory. After that, I wrote many document on Sphinx. It includes 5 published books (and 2 are under writing) and <a href="https://developer.mobage.com/ja/resources/ngcore-encyclopedia">business work</a>. Now Sphinx is an one of most important my skill.</p>

<p>Many good members came to the community event. It includes PHP community members. @tk0miya is one of them. He start creating Sphinx extension, <a href="http://blockdiag.com/en/blockdiag/">Blockdiag series</a> with learning Python. L ast November, he gave me special birthday present. It was <a href="http://pypi.python.org/pypi/sphinxjp.shibukawa">sphinxjp.shibukawa</a>, it has my name in it. So I reported the bug of that extension this week from my coworker... Other guys too. @shimizukawa uses Sphinx in his work and opened his <a href="http://sphinx-users.jp/articles/business-document-sample/index.html">document template</a> for software consulting. And he created <a href="http://pypi.python.org/pypi/sphinxjp.themecore/0.1.3">HTML template extension</a> and Sphinx installer for Windows. @shkumagai created super impressive <a href="http://packages.python.org/sphinxjp.themes.impressjs/">presentation theme</a>. I can't remember all community member's commitment. I should have created show case page in Sphinx-Users.jp website.</p>

<p>Sphinx-Users.jp already made collaboration system. If I commit to the <a href="https://bitbucket.org/sphinxjp/website/">website's repository</a>(of course it uses Sphinx too!), hosting server pulls and build automatically. My cheap host server ($5/month, no transfer fee) doesn't use cool daemon system like Jenkins, so it is based on cron... super simple. So I can't attend offline event anymore, but I can commit from USA. And new leaders will hold many offline events. Documentation have been important until programming speed will overtake documentation(communication) speed. Good software have good document. Like Python and Erlang.The skill of Sphinx is good habit for all programmers. I am crossing my finger for continue growth of Sphinx-Users.jp.</p>

<p>Oh, I forget one more thing. I have to tell the rumor of Sphinx-Users.jp. When I and @shimizukawa were leader of Sphinx-Users.jp, we found partners and god married. And @tk0miya got girl friend within a month from becoming the leader. Sphinx gives us happy :)</p>

<a href="http://www.flickr.com/photos/shibukawa/6892085607/" title="sphinx01 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7061/6892085607_6248c06387.jpg" width="500" height="414" alt="sphinx01"></a>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4894715899" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4901676628" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477414259X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048686291" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00418546W" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048689525" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114950" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/52324054.html</link>
      <title>RPythonでスレッド-RPythonで何ができるかを知るには？-</title>
      <pubDate>Sat, 24 Dec 2011 16:33:06 +0900</pubDate>
      <description>by chooyutshing under CC BY-NC-SAさて、クリスマス・イブになりました。みなさまいかがお過ごしでしょうか？昨日のソニック・ジェネレーションズのイベントで、ハードロックアレンジのクリスマスソングを聞くまではクリスマスイブのことなどすっかり忘れていました。今日はまさかの三週目のPyPy アドベントカレンダーのエントリーを書いています。RPythonでスレッドを使ってみるPythonとほぼ互換のPyPyでは当然のスレッドをサポートしています。PyPyは..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/25802865@N08/6380083623/" title="Christmas Blooms in Singapore by chooyutshing, on Flickr"><img src="http://farm7.staticflickr.com/6035/6380083623_4fb708b62c.jpg" width="500" height="333" alt="Christmas Blooms in Singapore"></a><br>by chooyutshing under CC BY-NC-SA</p>

<p>さて、クリスマス・イブになりました。みなさまいかがお過ごしでしょうか？昨日のソニック・ジェネレーションズのイベントで、ハードロックアレンジのクリスマスソングを聞くまではクリスマスイブのことなどすっかり忘れていました。</p>

<p>今日はまさかの三週目の<a href="http://atnd.org/events/22078">PyPy アドベントカレンダー</a>のエントリーを書いています。</p>

<h3>RPythonでスレッドを使ってみる</h3>

<p>Pythonとほぼ互換のPyPyでは当然のスレッドをサポートしています。PyPyはRPythonで書かれていてtranslate.pyでビルドされています。つまり、RPythonで作る実行ファイル用のスレッドサポートがpypyのコードのどこかにあるはずです。ためしに<tt>grep -r &quot;thread&quot; *</tt>としてみると・・・いろいろわんさか引っかかりますね。その中でも、<tt>pypy/module/thread/</tt>以下のモジュールがあやしそうです。</p>

<p><tt>pypy/module</tt>以下のフォルダは、RPythonで処理されたり初期化されたりして、最終的にPyPyの組み込みライブラリとして使われるモジュール群になります。<tt>thread</tt>以外にも、<tt>bz2</tt>や<tt>zip</tt>などのファイルアーカイブ関連とか、<tt>_multiprocessing</tt>、<tt>pyexpat</tt>などもこの中にあります。</p>

<h3>オブジェクトスペース</h3>

<p>さて、この中のモジュールをそのままコピーすればいいのかというとそうではありません。<a href="http://blog.jbking.org/post/13916338823/pypy-advent-calendar-2011-what-is-objectspace">@jbking</a>さんのアドベントカレンダーのエントリーで説明されている通り、RPythonにはオブジェクトスペースという概念があります。言語の基本的な論理構造をインタフェースとして切り出したものです。<a href="http://pypy.readthedocs.org/en/latest/objspace.html">こちらに</a>オブジェクトスペースで提供しているインタフェースの数々があります。</p>

<p>たとえば、<tt>is_true</tt>を書き換えると、Rubyみたいに0を真として扱うような言語が作れますし、演算子を書き換えると、PerlやAWKのように、適当に文字列表現の数値を変換してから計算するような言語が作れるといった寸法です。<tt>call</tt>を書き換えて遅延評価やmemoizeを実装することも可能かもしれません。</p>

<p><tt>pypy/module/</tt>以下のライブラリは、このオブジェクトスペースが整備された、言語処理系のためのライブラリとして実装されています。<tt>pypy/module/thread/__init__.py</tt>を見ると、<tt>pypy/module/thread/os_thread.py</tt>から<tt>start_new_thread</tt>関数をインポートしていますが、こちらのコードを見ると、最初の引数に<tt>space</tt>とあります。</p>

<h3>我々にはオブジェクトスペースなど不要！</h3>

<p>ですが、RPythonを言語を作るためではなく、マゾっ子志向プログラミング言語(MOPL)として、あくまでも、ふつうのプログラムを作るための処理系として使う場合には、オブジェクトスペースを1から作るのは大げさです。そのため、このPyPy向けのモジュールを参考にしながら、実装していく必要があります。</p>

<p>逆に言語を作りたい人は、このあたりから勉強していくといいのかもしれません。基本的には、パーサを作って、オブジェクトスペースを操作するための命令列を作る、というのがRPython Toolchainを使った言語作りです(僕の理解では)。</p>

<p>さて、<tt>os_thread.py</tt>を見ると、<tt>ll_thread.py</tt>の関数を呼び出しています。ざっとこの2つのモジュールをコードリーディングしてみると、つぎのようなことが分かりました。</p>

<ul>
<li><tt>ll_thread.start_new_thread()</tt>を使えばスレッドが作れる。</li>
<li><tt>ll_thread.start_new_thread()</tt>にはパラメータを渡せない・・・</li>
<li><tt>os_thread</tt>では、グローバル変数？を使ってパラメータ渡しをエミュレートしている。</li>
<li><tt>os_thread</tt>ではパラメータ渡しでトラブルが置きないように、スレッド起動時にロックをかけている。</li>
<li>スレッドの最初では<tt>ll_thread.gc_thread_prepare()</tt>を呼ぶ必要がある</li>
</ul>

<p>このように、コードリーディングした結果を手で実装してみて、確認していきます。</p>

<h3>スレッドをためしてみた</h3>

<script type="text/javascript" src="http://www.smipple.net/embed/kmFSriRaFTY3iMSD"></script>

<p>できあがったのが上記のコードです。グローバル変数の読み書きのタイミングよりは、<tt>list.pop()</tt>の方がちょっとは安全かな？(要出展)ということで、スレッド分パラメータをあらかじめ作っておいて<tt>pop()</tt>していますが、まぁこれは実験コードですので、本番コードを作る場合にはPyPyの実装と同じく、ロックを使う実装にすべきです。スレッドごとに指定された時間分スリープしながら(重い仕事をしているイメージ)、終わったら、自分のIDをコンソールに出力しています。translateで実行ファイルを作ってみて、実行するとつぎのように表示されます。</p>

<blockquote><pre>$ ./testthread-c 
finish task:1
finish task:2
finish task:1
finish task:3
finish task:1
finish task:4
finish task:2
finish task:1
finish task:5
finish task:1
finish task:3
finish task:2
finish task:1
finish task:1
finish task:4
finish task:2
finish task:1
finish task:3
finish task:1
finish task:5
</pre></blockquote>

<p>どうやらきちんと実行できているようですね。ちなみに、translate.pyには--threadオプションがあるのですが、付けても付けなくても、普通に動きました。</p>

<h3>まとめ</h3>

<p>スレッドを題材に使いましたが、説明したかったのはつぎのようなことです。</p>

<ul>
<li>RPythonでできることを調べるなら、PyPyのコードが参考になる</li>
<li>言語を作らないなら、オブジェクトスペースに依存した部分を取り払って使う必要がある</li>
</ul>

<p>それでは最後になりました。つぎは@drillbitさん？</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/52187010.html</link>
      <title>RPythonを使ってechoサーバを作る</title>
      <pubDate>Wed, 21 Dec 2011 01:39:41 +0900</pubDate>
      <description>taken by brewbooks under CC BY-SAPyPy Advent Calenderの第二回目のバトンが回って来ました。こんかいは時間がないので、さらっと。RPython用のライブラリ、rlibを探る冒険その2rlibを探検してみるエントリーの第二弾です。アドベントカレンダーの中では、shomah4aさんがclibffiというモジュールを使って、Cで書かれたライブラリの関数を呼び出していました。初めての方もいるかもしれないので、軽く関連情報をおさらいして..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/brewbooks/270899110/" title="Echo Rock and Observation Rock by brewbooks, on Flickr"><img src="http://farm1.staticflickr.com/105/270899110_475492bfd5.jpg" width="500" height="375" alt="Echo Rock and Observation Rock"></a><br>taken by brewbooks under CC BY-SA</p>

<p><a href="http://atnd.org/events/22078">PyPy Advent Calender</a>の第二回目のバトンが回って来ました。こんかいは時間がないので、さらっと。</p>

<h3>RPython用のライブラリ、rlibを探る冒険その2</h3>

<p>rlibを探検してみるエントリーの第二弾です。アドベントカレンダーの中では、<a href="http://d.hatena.ne.jp/shomah4a/20111215/1323905847">shomah4a</a>さんがclibffiというモジュールを使って、Cで書かれたライブラリの関数を呼び出していました。</p>

<p>初めての方もいるかもしれないので、軽く関連情報をおさらいしてみましょう</p>

<ul>
<li>PyPyは、Pythonで書かれたPythonインタプリタである。</li>
<li>Pythonで書かれたといっても、CPythonの上で実行されるわけではなく、RPython Toolchainというツールを使ってCやllvm、Java、.netに翻訳されてバイナリが作られる。</li>
<li>このバイナリを作る用に機能を制限したPythonがRPythonである。</li>
<li>RPythonで書かれたプログラムはtranslate.pyで変換するか、Python上で実行できる</li>
<li>RPythonでCに変換すると、40倍ぐらい早くなっちゃったりする。</li>
<li>RPythonの制約はかなり厳しく、マゾっ子指向プログラミング言語(MOPL)である。</li>
</ul>

<p>詳しくは、アドベントカレンダーの他のエントリーも見ると良いと思います。</p>

<h3>rlibには何が含まれるの？</h3>

<p>rlibについては、<a href="http://readthedocs.org/docs/pypy/en/latest/rlib.html">PyPyのドキュメント</a>が参考になります。名前から何をやっているのか分かるものもあれば、わかりにくものもあります。僕もまだすべて試したわけではないので・・・ちなみに、pypy/pypy/rlib以下にあるモジュールを不用意にimportすると、ビルドできないモジュールもありますので要注意。何がどうなっているのかよく分からないのですが・・・</p>

<ul>
<li><tt>listsort</li>
<li><tt>nonconst</tt></li>
<li><tt>objectmodel</tt></li>
<li><tt>rarithmetic</tt></li>
<li><tt>rbigint</tt></li>
<li><tt>rrandom</tt></li>
<li><tt>rsocket</tt></li>
<li><tt>streamio</tt></li>
<li><tt>unroll</tt></li>
<li><tt>parsing</tt></li>
</ul>

<h3>RSocketを使ってみる</h3>

<p>今回はrlibの中から、rsocketを使って、echoサーバをつくってみようと思います。</p>

<script type="text/javascript" src="http://www.smipple.net/embed/u8P0HcJvEyRUgj9n"></script>

<p>はい、できました(3分クッキングの音楽を妄想で補完してください)。</p>

<h3>Pythonのsocketの違い</h3>

<p>大きな処理の流れに関しては違いはありません。</p>

<ul>
<li><tt>gethostbyname()</tt>の返り値が<tt>rsocket.INETAddress</tt>型。</li>
<li><tt>RSocket.bind()</tt>は<tt>rsocket.INETAddress</tt>型を受け付ける。CPythonのようにタプルは受け取ってくれない。</li>
<li><tt>gethostbyname()</tt>呼び出し時は一度に<tt>rsocket.INETAddress</tt>のオブジェクトに一度にポート番号とIPアドレスを指定できない</li>
</ul>

<p>あと、細かいPyPyの問題として、<tt>while True:</tt>とエラーになったので、十分に大きなループにしてあります。</p>

<h3>遊んでみる</h3>

<p>遊んでみました。起動するとポート5000で立ち上がるので、Telnetでつないで入力すると、入力した文字が返ってきます。</p>

<pre><blockquote>
$ telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
server : connection start 

hello world
hello world
</blockquote></pre>

<p>こちらがサーバ側のログです。地味ですね。すみません。</p>

<pre><blockquote>
$ ./server_rsocket-c 
waiting for connection...
connection start
'cv: 'hello world
</blockquote></pre>

<p>本当は、<a href="http://dsas.blog.klab.org/archives/51993306.html">こちら</a>のベンチマークを図ろうと思ったのですが、何やらエラーになるので、測ってません。</p>

<p>CPythonと互換性がないのは、ちょっと使いにくいな、と思うので、CPythonとなるべく同じインタフェースになるようにしたライブラリでも作りたいなぁ、と思います。今回はthreadモジュールに関しても色々トライしていたのですが、まだばっちりと動くところまでできなかったので、今回はsocketだけです。</p>

<p>次は誰かな？</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/51727956.html</link>
      <title>PyPyよりも5倍高速な最速のPython処理系</title>
      <pubDate>Sat, 10 Dec 2011 20:55:11 +0900</pubDate>
      <description>今出張で、サン・フランシスコに来ています。街はもうクリスマスムードで、楽しげな雰囲気がただよっています。期間限定のアイススケートのリンクが公園にできていたり、ngmoco:)のオフィスの入っているビルにもイルミネーションが飾られていたりします。PyPy advent calendar に参加しています。@aodagからバトンを受け取りました。今日のこのネタはアドベントカレンダーの記事です。PyPyはご存知でしょうか？その怪しげな(Pythonらしくイヤラシい)名前にもかかわら..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/6485947309/" title="IMG_0844 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7024/6485947309_dce37885af.jpg" width="375" height="500" alt="IMG_0844"></a>

<p>今出張で、サン・フランシスコに来ています。街はもうクリスマスムードで、楽しげな雰囲気がただよっています。期間限定のアイススケートのリンクが公園にできていたり、ngmoco:)のオフィスの入っているビルにもイルミネーションが飾られていたりします。</p>

<p><a href="http://atnd.org/events/22078">PyPy advent calendar </a>に参加しています。<a href="http://aodag.posterous.com/pypyzodb">@aodag</a>からバトンを受け取りました。今日のこのネタはアドベントカレンダーの記事です。</p>

<p>PyPyはご存知でしょうか？その怪しげな(Pythonらしくイヤラシい)名前にもかかわらず、なんだかよく分からないパフォーマンスを叩き出しているPython処理系です。1.6でもすでにCPythonよりも早かったのですが、1.7ではさらに改善されています。</p>

<p>ですが、このPyPyよりも速いPythonの処理系が存在します。次のスクリーンショットはフィボナッチ数列を計算するベンチマークプログラムの結果です。それぞれの組みの最初の行が計算結果(F<sub>31</sub>)で、2行目が経過時間です。このベンチマークでは、比較対象としてCPython 2.7.2とPyPy 1.7を使っています。</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6485997503/" title="スクリーンショット（2011-12-10 19.23.38） by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7029/6485997503_559b423a16.jpg" width="500" height="233" alt="スクリーンショット（2011-12-10 19.23.38）"></a></p>

<p>PyPyはCPythonよりも8.6倍ほど高速であることが分かりますが、「それ」はPyPyよりも5倍ほど高速でした。オリジナルのCPythonと比べると、実に40倍の速度です。にわかには信じがたい結果です。</p>

<p>この秘密のPythonはPyPyに含まれています。Restricted Pythonというもので、略してRPythonと呼ばれます。Zopeには同じ名前のPython環境がありますが、これとは異なります。ベンチマークのコードを以下に貼り付けます。このブログでは<a href="http://www.smipple.net/">smipple</a>を利用しました。Ianさんありがとう！</p>

<script type="text/javascript" src="http://www.smipple.net/embed/e2tgL2d0Kd7n0NGg"></script>

<h3>だけど、そんなインタプリタ存在しないよ</h3>

<p>ですが、RPythonインタプリタなどというものはどこを探してもありません。RPythonというのは、Pythonのサブセットの仕様名です。すべてのRPythonのプログラムはPythonやPyPy上で実行させることもできます。PyPyでは、もう一つ、<tt>translate.py</tt>というツールを提供しています。このブログのキモはこのプログラムです。<tt>translate.py</tt>について紹介します。</p>

<h3>RPythonってなに？</h3>

<p>RPythonはPyPyのために作られたサブセットです。PyPyがPythonで書かれている、という話を聞いたことがある人もいるでしょう。ですが、PyPyのとんでもない速度はGuidoが開発しているCPython上で達成された結果ではありません。Pythonで書かれたPyPyのインタプリタのソースコードは<tt>translate.py</tt>を使ってC言語やLLVM、CLR(.net)、Javaといったバックエンドのソースコードに変換されます。RPythonは軽量言語的な柔軟性を捨てる代わりに、速度を獲得した言語といえます。例えるなら乙女座のシャカですね。RPythonの結果はまさに天舞宝輪です。</p>

<p>py2exeなどのように、このネイティブコードやJavaや.netなどのプログラムを生成できるというところに興味があったので、アドベントカレンダーのネタ作りのためにちょっと触って見ました。</p>

<h3>RPythonでコードを書くにはどうするの？</h3>

<p>つぎのコードは、すべてのプログラマーにとって馴染みの深いコードサンプルのHello Worldです。</p>

<script type="text/javascript" src="http://www.smipple.net/embed/hN4jR6x2LQbURMwe"></script>

<ul>
<li><tt>target</tt>関数は、エントリーポイントを定義する特別な関数。</li>
<li><tt>__name__</tt>を使ったブロックはRPythonでは実行されないため、他のPythonインタプリタと互換性を維持するのに使える。</li>
<li>エントリーポイントの関数は整数を返す必要がある。</li>
</ul>

<p>つぎのコマンドを実行して、スタバにでも行ってコーヒーを飲んでいると、凄まじく効率の良いバイナリのプログラムが生成されます。</p>

<script type="text/javascript" src="http://www.smipple.net/embed/JmTAL9EleXAemrr8"></script>

<p>僕はまだ詳しくは調べていませんが、RPythonには速度に関するオプションがたくさんあります。Just-In-Timeコンパイラだったり、ガーベジコレクションのアルゴリズムを選択ｓ地ありできます。上記のベンチマークの結果は単に-O2をつけただけで簡単に実行したものです。また、上記のコマンドラインではCPythonを使っていますが、PyPyを使うと、ちょっと時間の節約ができます。</p>

<h3>RPythonプログラミングはエクストリーム・プログラミング</h3>

<p>この「エクストリーム」は「エクストリーム・アイロン」的な意味ですお察しください。ほとんどのPythonのコードはそのままでは変換できないでしょう。なんだかC++でコードを書いているかのような気分になりますし、多くの落とし穴があります。ここでは解決方法がわかっているものに限定していくつか紹介します。</p>

<h4>関数の中で他の関数を定義</h4>

<p>関数定義をネストさせることはできません</p>

<script type="text/javascript" src="http://www.smipple.net/embed/mziAQ1uqwxK6daHJ"></script>

<h4>多重継承</h4>

<p>RPythonは多重継承をサポートしていません。メソッドのコードの共有をしたい場合には、<tt>_mixin_</tt>フラグを2つ目以降のクラスに付ける必要があります。<tt>super()</tt>関数を使うこともできません。ただし、多重継承をすることができないため、親クラス群をC3アルゴリズムで直列化することはないので、それほど重要ではありません。</p>

<script type="text/javascript" src="http://www.smipple.net/embed/HXRUQpX5swVorWfP"></script>

<h4>公式サポートされているモジュールが少ない</h4>

<p>公式には、<tt>os</tt>, <tt>math</tt>, <tt>time</tt>群だけがサポートされているようです。せめて<tt>re</tt>を・・・</p>

<h4>@propertyデコレータ</h4>

<p>プロパティというすばらしい機能を使うことができません。</p>

<script type="text/javascript" src="http://www.smipple.net/embed/X3fTt4hq0tTioyn4"></script>

<h4>メタプログラミング</h4>

<p><tt>__dict__</tt>プロパティにアクセスすることができないため、<tt>dir()</tt>関数が使えません。もしRPython用のテスティングフレームワークを作るのであれば、古のCppUnitのようにテストメソッドを1つずつ手で登録していくようなコードになる気がします。</p>

<h4>関数の引数が、特定のデータ型にバインドされる</h4>

<p>通常のPythonでは、変数が型情報を持つことはありません。そのため、C++のテンプレートのように、ジェネリックなアルゴリズムを記述することもできます。しかし、RPythonの変数は型情報を持ち、最初に割り当てられた時にバインディングが生成されます。これには関数の引数も含まれます。

<script type="text/javascript" src="http://www.smipple.net/embed/fNYWNNxtNsZmjbVF"></script>

<h3>RPythonの印象</h3>

<a href="http://www.flickr.com/photos/shibukawa/6485947609/" title="IMG_0847 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7172/6485947609_dd40b44e93.jpg" width="375" height="500" alt="IMG_0847"></a>

<p>なんだか難しいなぁ、と感じました。</p>

<p>最初に、「これが正規表現をサポートしたら、ちょっとした小さなツール開発で使えるかな、と考えました。そのため、pure Pythonで実装されていて、<tt>re</tt>と互換性を持つ<a href="http://www.acooke.org/rxpy/">rxpy</a>の移植に挑戦しました。しかし、凄まじく難しくて、うまく完成まで持っていくことができませんでした。上記の落とし穴も、この移植中に見つけたものになります。また、RPythonの最も厳しい点は、ビルド時にリソースを大量に消費するというものです。上記のHello Worldのビルドでも1.5分ぐらいかかりましたし、もしPyPyのような巨大なプロダクトをビルドするときは、メモリは4GB以上ないとダメ、だとか。</p>

<p>また、それほど詳しい<a href="http://readthedocs.org/docs/pypy/en/latest/coding-guide.html#id1">ドキュメント</a>もありませんし、だれかがRPythonの仕様を保証してくれているわけでもありません。そのため、試行錯誤を繰り返して触っていく必要があります。しかし、将来的には、RPythonのアノテーションの仕組みをもっと詳しく知って、RPythonでのプログラミングを支援してくれる便利なライブラリが増えてきたりすると、もっと開発しやすくなるでしょう。

<p>僕は兎にも角にも、このスピードのすごさを目の当たりにしてしまったため、少しずつでもRPythonを触って、RPythonでできることをどんどん広げていきたいと考えています。

<p>PyPyアドベントカレンダーは、つぎは<a href="https://twitter.com/#!/yanolab">@yanolab</a>さんの番です。</p>

<p>なお、このエントリーでちょっと言葉が難しいなあ、と感じられた方は、とても評判のよい、エキスパートPythonプログラミングという本をおすすめしております。とうか訳しました。よろしくね！</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048686291" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/51727515.html</link>
      <title>The fastest Python Implementation x5 faster than PyPy</title>
      <pubDate>Sat, 10 Dec 2011 20:15:34 +0900</pubDate>
      <description>Now I stay San Francisco for business trip. The city become Christmas season and very happy atmosphere. Special ice-skating rink is appeared in the park and the office building that ngmoco:) is in has many illuminations.I joined PyPy-ja adv..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/6485947309/" title="IMG_0844 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7024/6485947309_dce37885af.jpg" width="375" height="500" alt="IMG_0844"></a>

<p>Now I stay San Francisco for business trip. The city become Christmas season and very happy atmosphere. Special ice-skating rink is appeared in the park and the office building that ngmoco:) is in has many illuminations.</p>

<p>I joined <a href="http://atnd.org/events/22078">PyPy-ja advent calendar </a>. Yesterday <a href="http://aodag.posterous.com/pypyzodb">@aodag</a> wrote the entry. Today is my turn.</p>

<p>Do you know PyPy? It is a very impressive Python implementation. Its speed become faster and faster. 1.6 was already faster than CPython but 1.7 improved too.</p>

<p>But there is the fastest Python implementation that is faster than PyPy. Following result of the benchmark program that calculates Fibonacci number. Each first lines are the result of the calculation (F<sub>31</sub>), and second lines are the time to calculate. I uses CPython 2.7.2 and PyPy 1.7 and "it".</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6485997503/" title="スクリーンショット（2011-12-10 19.23.38） by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7029/6485997503_559b423a16.jpg" width="500" height="233" alt="スクリーンショット（2011-12-10 19.23.38）"></a></p>

<p>PyPy runs 8.6 times faster than CPython. But "that" implementation runs 5 times faster than PyPy. It is more than 40 times faster than original CPython. Do you believe the result?</p>

<p>That secret of that Python is included in PyPy. Its name is RPython, shorten form of "Restricted Python". Zope has same name Python environment, but it is different one. The code of benchmark is following. This entry uses <a href="http://www.smipple.net/">smipple</a>. Thank you for Ian Lewis! He is super cool Python programmer.</p>

<script type="text/javascript" src="http://www.smipple.net/embed/e2tgL2d0Kd7n0NGg"></script>

<h3>But the interpreter doesn't exist actually.</h3>

<p>But you can't use RPython interpreter. RPython is the specification for the subset of Python. All RPython program can run on Python and PyPy. One more thing, PyPy provides the tool <tt>translate.py</tt>. This is a secret of this blog entry. I will introduce <tt>translate.py</tt>.</p>

<h3>What is RPython?</h3>

<p>RPython is created for PyPy. As you heard, PyPy is written in Python. But its super exciting benchmark result isn't achieved on Guido's CPython. PyPy interpreter source code is converted by <tt>translate.py</tt> into C or LLVM or CLR(.net), Java source code. RPython can gain unbelievable speed instead of any flexibility of lightweight language.</p>

<p>I am interested in the feature that it can translate into native or Java or .net execution like py2exe. So I tried it for PyPy-ja advent calendar.</p>

<h3>How to program in RPython?</h3>

<p>Following code sample is a sample that familiar with all programers - Hello World.</p>

<script type="text/javascript" src="http://www.smipple.net/embed/hN4jR6x2LQbURMwe"></script>

<ul>
<li>The <tt>target</tt> function is the special function it makes decision the entry point.</li>
<li><tt>__name__</tt> block is not executed. It is useful to keep compatibility with other Python interpreters.</li>
<li>The entry point function must return integer.</li>
</ul>

<p>After typing these command and going to Starbucks and drinking coffee, you get super fast native binary program.</p>

<script type="text/javascript" src="http://www.smipple.net/embed/JmTAL9EleXAemrr8"></script>

<p>I don't research the detail, but it supports many options to improve the speed, like Just-In-Time compiling and Garbage-Collection. Above result of benchmarking was generated by simple option(just -O2). Above sample uses CPython, but if you use pypy, you can save your time.</p>

<h3>Programming in RPython is an eXtreme Programming.</h3>

<p>This "eXtreme" is a same meaning of eXtreme Ironing. Almost all Python code can't be accepted as is. I felt as if I programming in C++. There many pit falls. I will show the some of them.</p>

<h4>Function in other functions</h4>

<p>You can't nested function definition:</p>

<script type="text/javascript" src="http://www.smipple.net/embed/mziAQ1uqwxK6daHJ"></script>

<h4>Multiple inheritance</h4>

<p>RPython can't use multiple inheritance. If you want to share the methods, you must set <tt>_mixin_</tt> flag into secondary classes. And you can't use super() function. But it is not important any more (because it doesn't use C3 algorithm to create sequence of parent classes).</p>

<script type="text/javascript" src="http://www.smipple.net/embed/HXRUQpX5swVorWfP"></script>

<h4>Official supported modules are limited.</h4>

<p>In official document, only <tt>os</tt>, <tt>math</tt>, <tt>time</tt> modules are supported.</p>

<h4>@property decorator</h4>

<p>It can't support nicer syntax - property.</p>

<script type="text/javascript" src="http://www.smipple.net/embed/X3fTt4hq0tTioyn4"></script>

<h4>Meta-Programming</h4>

<p>We can't access to <tt>__dict__</tt> property. It means dir() function is not supported. If you want to write testing framework, you must add each test methods by hand like older style CppUnit.</p>

<h4>Function's parameters are binded specific data type</h4>

<p>Variables in Python don't have type information. So you can write generic algorithm like C++'s template. But in RPython, variables have type information and they are binded when first assignment. It includes parameters of function.</p>

<script type="text/javascript" src="http://www.smipple.net/embed/fNYWNNxtNsZmjbVF"></script>

<h3>My impression of RPython</h3>

<a href="http://www.flickr.com/photos/shibukawa/6485947609/" title="IMG_0847 by shibukawa.yoshiki, on Flickr"><img src="http://farm8.staticflickr.com/7172/6485947609_dd40b44e93.jpg" width="375" height="500" alt="IMG_0847"></a>

<p>I felt it is difficult.</p>

<p>At first, if it supports regular expression, I will be able to use it for small tool developing. So I tried to port <a href="http://www.acooke.org/rxpy/">rxpy</a> (pure Python regular expression it has compatibility with re module). But it is super extreme hard task for me (and I couldn't finish). Above pit falls were found when porting rxpy. And the worst point of RPython is it takes much resources. Compiling above simple took about 1.5 minuits. And I heard building PyPy needs more than 4GB memory.</p>

<p>There is only <a href="http://readthedocs.org/docs/pypy/en/latest/coding-guide.html#id1">a little instruction</a>. And no one guarantees the specification of RPython. So we have to try and error to use RPython. But if I can understand annotation system better than now and more useful modules they support RPython programming are released, it will be more useful environment. </p>

<p>But I was moved to the performance. So I want to try RPython little by little to expand the capability of RPython. At first I will read the source code of existing programming languages they are implemented in RPython.</p>

<p>Next person who write PyPy-ja advent calendar is <a href="https://twitter.com/#!/yanolab">@yanolab</a>.</p>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/50635109.html</link>
      <title>ScreenRecyclerで外でも快適デュアルディスプレイ</title>
      <pubDate>Fri, 18 Nov 2011 18:21:00 +0900</pubDate>
      <description>Mac OS Xには、「古いPCをデュアルディスプレイにする」というコンセプトのScreenRecyclerというソフトがあります。有料ですが。毎回設定の仕方(というか、ScreenRecyclerという名前自体)忘れるので、備忘録がわりにブログで紹介します。ScreenRecyclerは以前は32ビットモードでしか動かなかったけど、今はどうなんだろう？今のウェブサイトには注意書きがないね。まぁMacは32ビットモードにしても64ビットアプリは動くのであまり困らないですよね。..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/shibukawa/6357237833/" title="ScreenRecycler by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6057/6357237833_c35c266447.jpg" width="500" height="375" alt="ScreenRecycler"></a></p>

<p>Mac OS Xには、「古いPCをデュアルディスプレイにする」というコンセプトの<a href="http://www.screenrecycler.com/ScreenRecycler.html">ScreenRecycler</a>というソフトがあります。有料ですが。毎回設定の仕方(というか、ScreenRecyclerという名前自体)忘れるので、備忘録がわりにブログで紹介します。</p>

<p>ScreenRecyclerは以前は32ビットモードでしか動かなかったけど、今はどうなんだろう？今のウェブサイトには注意書きがないね。まぁMacは32ビットモードにしても64ビットアプリは動くのであまり困らないですよね。</p>

<h3>PCを2台用意</h3>

<p>Macが親です。今回はDellのマシンが子供です。VNCはパケットを大量に流すので、ルータ経由などにするとアレゲかもしれないのでLANケーブルでMacとDellを直結しました。まずはネットワークの設定です。まず、MacのLANをローカル設定(固定IP)にします。192.168.1.2にしました。その後に、インターネット共有をかけます。</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357301271/" title="スクリーンショット（2011-11-18 17.00.57） by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6239/6357301271_4f5742206e.jpg" width="500" height="441" alt="スクリーンショット（2011-11-18 17.00.57）"></a></p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357303067/" title="スクリーンショット（2011-11-18 17.12.35） by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6094/6357303067_80889e793e.jpg" width="500" height="419" alt="スクリーンショット（2011-11-18 17.12.35）"></a></p>

<p>次はDellのマシンを設定しました。DellのマシンはMacとだけつなげます。Macが192.168.1.2なのでこれをゲートウェイにします。自分はこれ以外のIPにします。192.268.1.3にしました。これで完了です。<p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357301797/" title="network by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6113/6357301797_24dab2f924.jpg" width="500" height="442" alt="network"></a></p>

<h3>VNCでつなぐ</h3>

<p>次に、ScreenRecyclerをインストールして起動します。設定でScan RateとかCompression Rateを上げまくると快適になります。</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357302567/" title="スクリーンショット（2011-11-18 17.09.54） by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6235/6357302567_e924e613a7.jpg" width="387" height="380" alt="スクリーンショット（2011-11-18 17.09.54）"></a></p>

<p>次に、WindowsからVNCで繋ぎます。192.168.1.2:6900に接続します。スクリーンショットはTightVNCですが、UltraVNCでも使えています。</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357303673/" title="vnc by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6119/6357303673_721e694fff.jpg" width="500" height="203" alt="vnc"></a></p>

<p>これで快適デュアルディスプレイ生活が手に入ります。みなさんも勉強会にPCを2台持って行きたくなるはずです。MacBook Pro 15とDellのStudio 15の2台を持って熱海の坂を登るのはツライですが！</p>

<p><a href="http://www.flickr.com/photos/shibukawa/6357432565/" title="ultravnc by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6213/6357432565_39f91d33bf.jpg" width="500" height="281" alt="ultravnc"></a></p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/50075782.html</link>
      <title>ありえるえりあ大規模JavaScript開発の勉強会資料</title>
      <pubDate>Wed, 09 Nov 2011 13:54:24 +0900</pubDate>
      <description> 大規模JavaScript開発   View more presentations from shibukawa  資料アップロードしました！大規模JavaScriptだけど、エンタープライズではない話ですが、お話をさせて頂きました。こちらが完成版でした。発表時はPCがうまくスリープから復帰してくれなくて、再起動→リカバリしたPPTでプレゼンしたので、2ページ目の大事なこと(後者)が説明できなくて、呪い殺されてしまった人がいないか心配で夜も寝れない日々であります。ngCor..</description>
            <content:encoded><![CDATA[
<div style="width:425px" id="__ss_10082382"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/shibukawa/javascript-10082382" title="大規模JavaScript開発" target="_blank">大規模JavaScript開発</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10082382" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/shibukawa" target="_blank">shibukawa</a> </div> </div>

<p>資料アップロードしました！大規模JavaScriptだけど、エンタープライズではない話ですが、お話をさせて頂きました。こちらが完成版でした。発表時はPCがうまくスリープから復帰してくれなくて、再起動→リカバリしたPPTでプレゼンしたので、2ページ目の大事なこと(後者)が説明できなくて、呪い殺されてしまった人がいないか心配で夜も寝れない日々であります。</p>

<p>ngCore周りで大規模JavaScriptコードを支える仕組みというのは、だいたいこんな感じかな、と思います。</p>

<ul>
<li>ソーシャルゲームは非同期で友達とプレイしあうゲームで、アーキテクチャは普通のウェブアプリケーションとほぼ一緒</li>
<li>ファイルをまとめる(ビルド/ベイク)仕組みは重要</li>
<li>ファイルアクセス時にビルドするのはコマンド叩かなくていいから良いよ</li>
<li>オブジェクト指向サポートがあるとうれしい(classキーワードのある言語を使ったことある人は)</li>
<li>ファイル＝名前空間の仕組みがあるのでモジュール分割が容易</li>
<li>階層型のシーン管理と、メッセージのディスパッチの仕組みが忍者ロワイヤルのアーキテクチャのポイント</li>
<li>共通ライブラリ</li>
<li>今後はデータ駆動をもっと推進していくよ</li>
<li>国をまたがって同時開発(git, git-flow/Skypeなどを活用)</li>
<li>ドキュメントはSphinx(CommonJSドメインも作ったよ！)</li>
<li>テストはJasmine</li>
</ul>

<p>DeNA楽しいよ。つい働き過ぎちゃって遅くならないようにいつも気をつけています。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/47078906.html</link>
      <title>書評「Being Geek ―ギークであり続けるためのキャリア戦略」</title>
      <pubDate>Tue, 02 Aug 2011 00:54:05 +0900</pubDate>
      <description>アート・オブ・コミュニティ ―でお世話になったオライリー・ジャパンの高さんから、Being Geek ―ギークであり続けるためのキャリア戦略の献本をいただきました。ありがとうございます。とても興味深い本でした。何度も転職を続け、エンジニアとしても、マネージャとしても、ネットスケープのようなベンチャーから大手まで、いろいろな仕事を経て活躍をしてきたMichael Loppの体験による深い話が満載でした。この本を読んでみて思ったのは、いろんな切り口から何度も読めるな、というもので..</description>
            <content:encoded><![CDATA[
<p><img src="http://www.oreilly.co.jp/books/images/picture_large978-4-87311-499-6.jpeg"></p>

<p><a href="http://www.amazon.co.jp/gp/product/4873114950/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4873114950">アート・オブ・コミュニティ ―</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4873114950" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />でお世話になったオライリー・ジャパンの高さんから、<a href="http://www.amazon.co.jp/gp/product/4873114993/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4873114993">Being Geek ―ギークであり続けるためのキャリア戦略</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4873114993" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />の献本をいただきました。ありがとうございます。とても興味深い本でした。何度も転職を続け、エンジニアとしても、マネージャとしても、ネットスケープのようなベンチャーから大手まで、いろいろな仕事を経て活躍をしてきたMichael Loppの体験による深い話が満載でした。この本を読んでみて思ったのは、いろんな切り口から何度も読めるな、というものです。</p>

<h3>ギークの立場から〜上司とキャリア戦略をハックする</h3>

<p>まずはタイトル通り、ギークの立場で読んでみました。ギークの定義については本書でも語られていますが、本書では、ギークとマネージャの2元論で説明されているため、「現場の仕事をしていて、それを愛している人」と一般化してみることができると思います。ギークの場合には＋アルファで対象がコンピュータということもあり、スキルが上がれば定義を理解してルールを元に予測の範囲内で仕事をこなすことができます。他の職種と比べると、「自分の手のひらで世界を作っている」感覚が好きな人が多いという印象があります。木材などの素材に向き合っている伝統工芸の職人などに近いかなと。そのため、人材派遣業の人や、企画書を作って回していくような仕事の方が本書を読む場合にはそのあたりを勘案して読む必要があるでしょう。</p>

<p>そのようなギーク向けに書かれているのは、「システムとしての会社」です。ギークはどうしても出世のための仕事や会議などを軽く見がちですが、上司、キャリアパスなどの背後にある考えやシステム、ルールを見える化することで、どうすれば効率良く良いスコアを稼げるのか、というギークの得意な土俵に持ってこようというアドバイス群です。ギークとしてどんなに高いスキルを持っていても、仕事をしてお金を稼いで日々のドクターペッパー代を稼ぐには、人と接することは必須です。</p>

<p>転職のための面談や上司とのコミュニケーション、プレゼンテーションの仕方など、幅広い項目について、コンパクトにまとまっています。僕も転職をしたり、いろいろプレゼンしたりしていますが、試行錯誤してきた内容のポイントがいろいろ書かれていて、もうちょっと早く出てくれれば・・・と思いました。</p>

<h3>マネージャの立場から〜人材採用と人の動かし方</h3>

<p>タイトルだけ読むと、ギークの立場を貫き通すための本のように思えますが、ギークと相対するマネージャの立場で読んでも色々参考になることがいろいろと書かれています。中途の採用の面接をしても、会社に来てくれるその日に心変わりしてしまって来るのを辞めてしまった人がいたエピソードなど、こちらもさまざまな体験談を元にしっかりと書かれています。「無能な上司の対処法」などは、逆の立場で見ると「無能な上司と言われないためのアドバイス」ともなるし、最初のXP祭りの牛尾剛さんのプレゼン(アジャイル原理教を滅ぼすために、通し番号のクラス名を強要したりしてダメージを与えようという逆説的な内容)を思い出します。</p>

<p>今の会社の今のチームは、入社して7ヶ月の僕が最古参でも、かなり大きなチームに育っていたりします。このような活発で人材の流入が大きな会社であれば、マネージャという肩書きがなくても本書で書かれた話は訳に立つと思います。また、面接の仕方なども逐一教えてもらえはしないだろうし、この本を読みながらイメージトレーニングすると良さそうです。</p>

<h3>沈みゆく船の船員の立場から〜潰れそうな会社でのサバイバル</h3>

<p>最後は、幸いにして僕はまだ体験したことのない事象のお話です。前代未聞の前例がないことが起きたりすると、冷静な判断ができなくなってパニックとなります。特に、安定志向の日本の会社は大混乱でしょう。会社が傾いていく様子を生々しく語ってくれる人もなかなかいないのですが(ゼロではないですが)、本書を読んでおくことで、少しでも気分を落ち着けることができます。その結果、その、大変な状況であっても、今後に繋がる冷静な判断を下せるようになるでしょう。潰れそうな会社に止まるメリットなども書かれており、多角的に判断するための視点を与えてくれる本だと思います。</p>

<h3>それ以外にハッとしたこと。</h3>

<p>最初に説明した通り、この本は原著者の経験に基づくさまざまなエピソードから構成されています。</p>

<h4>報奨に金銭を使うのは最後の手段(P133)</h4>

<p>これはアート・オブ・コミュニティにも書かれている内容の裏返しです。お金を払わなくても、貢献したいという意志を持って働いてくれる人はいます。「嫌な仕事だけど、お金のために仕方がない」というメンタリティになりがちですが、お金を払わなくても楽しんで貢献したくなってしまう仕事で、さらに「お金までもらえちゃう」というのが最高の職場です。「最後の手段」とまでハッキリ書かれるとキ気持ちいいですね。</p>

<h4>会社の昼休みのブリッジ</h4>

<p>ネットスケープ社を支えてきていた4人がいつもブリッジをしながら情報交換をしていた、という話は興味を引かれました。また、会社が傾く予兆として、そのブリッジが行われなくなったのが崩壊の始まりを予兆させたというのもおもしろかったです。少し今の忙しい状況がクリアできたら、会社のチームを巻き込んでやってみたいと思います。インフォーマルコミュニケーションをここまで鮮やかなメタファーで説明している本は初めてです。</p>

<p>軽く本書を紹介してきました。現役のギークの人も、マネージャになりたての人も、普段はなかなか体験できない状況にはまり込みそうな人も、多くの人の役に立つ本だと思います。

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114993" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114950" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
<a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/47057592.html</link>
      <title>アート・オブ・コミュニティ読書会をしよう！</title>
      <pubDate>Mon, 01 Aug 2011 03:29:35 +0900</pubDate>
      <description>※写真はsphinx-users.jpから拝借しました(shibu.jpと同一サーバですが)。SphinxのユーザコミュニティであるSphinx-Users.jpで、アート・オブ・コミュニティの読書会を行いました。もちろん、フォーカス・リーディングの寺田さんもおっしゃっていますが、読書というのはただ読んで満足するだけではダメです。行動に結び付けるなり、何かしらのアウトプットに繋がらない読書は、ただ「できた気になる」だけでナンセンスです。このブログのエントリーでは、Sphinx..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/shibukawa/5993592751/" title="sphinx_event by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6030/5993592751_5f910402df.jpg" width="400" height="300" alt="sphinx_event"></a><br/>※写真はsphinx-users.jpから拝借しました(shibu.jpと同一サーバですが)。</P>

<p>Sphinxのユーザコミュニティである<a href="http://sphinx-users.jp">Sphinx-Users.jp</a>で、<a href="http://www.amazon.co.jp/gp/product/4873114950/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4873114950">アート・オブ・コミュニティ</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4873114950" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />の読書会を行いました。</p>

<p>もちろん、<a href="http://www.amazon.co.jp/gp/product/4569674860/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4569674860">フォーカス・リーディング</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4569674860" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />の寺田さんもおっしゃっていますが、読書というのはただ読んで満足するだけではダメです。行動に結び付けるなり、何かしらのアウトプットに繋がらない読書は、ただ「できた気になる」だけでナンセンスです。</p>

<p>このブログのエントリーでは、Sphinx-Users.jpの勉強会を振り返りつつ、コミュニティ運営に本書の内容を生かすための第一歩の踏み出し方を紹介します。</p>

<h3>深く本書を理解し、コミュニティに生かすには？</h3>

<p>ただ読むだけではなく、実際に自分達が所属しているコミュニティを取り上げて、具体的に議論しながら進めて行きましょう。もちろん、運営はしていないけど参加だけしているコミュニティや、運営も所属もしていない外部のコミュニティを取り上げ、脳内実験してみながら「もっとここはこうしたい」という提言をまとめていく勉強会もできるとは思いますが、さらに深く理解していくためには、</p>

<ul>
<li>自分が運営側として参加できるコミュニティを題材にする</li>
<li>実際に、コミュニティの方針、ウェブサイトのコンテンツを操作できるメンバーを揃える</li>
</ul>

<p>という2項目を揃えて、同じゴールを共有する参加者間で具体的に議論をして深めていく方法がベストだと思います。</p>

<p>この会では、Sphinx-Users.jp自身のミッション・ステートメントを作り上げ、コミュニケーション手段を整理して、ウェブサイトの構成の見直しまで行いました。本書の内容に照らすと、2章の内容が6割で、3〜6章までが4割といった配分です。当日の<a href="http://sphinx-users.jp/event/20110723_artofcommunity1/index.html">議事録</a>はこちらです。</p>

<h3>ミッション・ステートメント</h3>
<a name="more"></a>
<p>まずは2章を読んでミッションステートメントを定めます。2章ではミッション・ステートメントを決定するまでにいくつかのステップが設けられていますので、これに従って完成させていきます。</p>

<h4>読み手 vs 書き手</h4>

<p>コミュニティの種別として、ファンのグループ(興味の対象を変更することはない)と、自らアウトプットを作っていくコミュニティと2つに分かれます。Sphinxはドキュメントツールであるためややこしいのですが、Sphinxという<a href="http://pocoo.org">pocooプロジェクト</a>が作ったツールそのものに対してコードをコミットしていくためのコミュニティではなく、あくまでもユーザとして利用者視点で日本語の説明を充実させて多くの人に広めるのが目的となります。そのため、読み手のコミュニティとなります。</p>

<p>Asakusa.rbみたいに、パッチを書こう、というコミュニティであれば書き手となります。日本の場合は、IT系のイベントでも多くは読み手主体のコミュニティとなるでしょう。</p>

<p>このあたりは、重要な問題であるため、一回で決めきることはできないかもしれません。この次のコミュニティのデザインとの間で何回かイテレーションして決定せざるを得ないケースもあるでしょう。</p>

<h4>コミュニティのデザイン</h4>

<p>本書中では、次の3項目の質問で定義されているのがコミュニティのデザインとなります。</p>

<ul>
<li>ミッションは何か？</li>
<li>コラボレーションを行う機会、及び領域はどこか？</li>
<li>必要なスキルは何か?</li>
</ul>

<p>最初の「ミッションは何か？」は、読み手/書き手とリンクしています。コミュニティが目指す方向性を決定します。Sphinx-Users.jpでは、</p>

<blockquote>
Sphinxを活用して、ドキュメント作成をパワーアップしたい人から、 Sphinxの拡張機能をプログラミングする人まで、幅広くサポートしていく コミュニティを目指しています。
</blockquote>

<p>と定めました。おそらく、明文化されているかどうかに関わらず、どのコミュニティもここまではおぼろげに決定していることが多いでしょう。Sphinx-Users.jpも、昨年の設立時のトップページの文言とほぼ一致しています。</p>

<p>「コラボレーションを行う機会、及び領域はどこか？」は、「コミュニティに貢献したい」と思った新しいメンバーが、どのような活動を通じてコミットメントしていくか、を説明する内容になります。ついつい「コミュニティメンバーに何を与えるか？」というマネジメント視点で考えがちですが、あくまでも「コミュニティーメンバー」視点で考えます。例えば「採用事例を紹介することで、他の人の役に立つ」や、「ウェブサイトの間違いを指摘する」などです。Sphinx-Users.jpでも、いくつか候補を挙げました。</p>

<p>「必要なスキルは何か?」は「コラボレーションを行う機会、及び領域はどこか？」が決まってくれば自動的に決まります。ある程度、活動内容に依存して決まるところもあります。</p>

<p>これらの内容が決まったら、最後にミッションステートメントを書きます。本の内容にあわせて、ミッションの掘り下げを挟んでもいいでしょう。今回、ミッションステートメントは、Google Docsを使ってみんなでわいわい言いながら、各自手を加えて作っていきました。Etherpadは同一行編集をしまくるとなんか動きが怪しかったです。</p>

<p>最終的にできあがったのがこちらです。できあがったら、ウェブサイトのトップなどに書いたり、コミュニティ運営で生かすなど、積極的に活用してください。</p>

<blockquote>
Sphinx-Users.jp(略称#sphinxjp)は、ドキュメンテーションツールのSphinxの普及を主眼としたコミュニティです。

日本で散らばっているSphinx関連情報を集めて、Webサイト、イベントを通じてSphinx情報を発信します。また、MLやチャットでの情報交換、勉強会の開催などを通じて、ドキュメントをパワーアップしたい人、ドキュメントや翻訳で苦労している人、Sphinxの拡張機能を開発したい開発者たちに”Fun”を提供していきます。
</blockquote>

<p>どいつも、順番にやれば100点の回答が出せるというものではないので、一度決めても、数ヶ月おきとかに見直しをかけたり、ブラッシュアップをする必要があります。Sphinx-Users.jpの場合は、翻訳中のArt of Communityの記述なども参考にして、一度おぼろげにやったことがあったため、今回はフィードバックも生かした2回目となっています。</p>

<h3>風通しのよいコミュニケーションのためのツール選び</h3>

<p>次に、3章と軽く4章、5章も絡む内容の議論を行いました。ミッションステートメント到達に向けて、メンバー同士の情報交換および、マネジメントとメンバー間のコミュニケーション手段を決定していきます。</p>

<p>Sphinx-Users.jpの場合は外部リソースを積極的に使うことにしました。<a href="http://answer.pythonpath.jp/">最近流行の質問系サイト</a>と、最近はSNSとしても有名な分散系のリポジトリサービス(Sphinx-Users.jpの場合はBitbucket)の課題トラッカーを利用した、<a href="https://bitbucket.org/sphinxjp/website/issues">バグ報告・要望</a>フォームです。</p>

<p>また、Sphinx-Users.jpの場合は、ウェブのコンテンツのソース(Sphinx製)がすべてBitbucket上に管理されていて、ここにプッシュすればビルドされてウェブが自動更新されるようになっています。そのため、Bitbucketのforkしてpull-requestという流れも、ウェブサイトの修正方法や加筆の内容の伝達コミュニケーション手段として扱っています。このあたりは、コミュニティ内のワークフローにも関わってくる内容ですね。便利なシステムがあれば、それに対してコミュニティのワークフロー側を合わせるというのでもいいと思います。</p>

<h3>宣伝本部長たる、ウェブサイトの構造のリファクタリング</h3>

<p>最後に、今までの内容を踏まえて、ウェブサイトを分かりやすくしていきます。まだ見ぬ未来のメンバーが、どういう情報に触れることで自分の参加したいコミュニティを見つけていくのかをロールプレイしながらやると良いでしょう。</p>

<p>今までごちゃごちゃだったコミュニティ情報と技術情報を目次上でもすぱっと分けました。そして、こちらの期待するコミュニケーション手段と使われ方などを明確にしていったりしました。コミュニティの入り口を分かりやすく、ユーザグループに入る際の手順と具体的なイメージなどの情報が、正確なきちんと与えられるようにを議論しました。</p>

<p>本当はあと3時間ぐらいあったら、みんなでcommit＆pushしてその場で修正とかもできたかもしれません。今回は時間がなかったので実際の修正作業は家で行いました。Sphinxという素材を生かして、URLはなるべく変えないようにしました。URLが変わると、はてなブックマークなどにひも付いている貴重なフィードバックも消えてしまうのがツライところ。Wikiで運営しているコミュニティの場合は心を鬼にして切り替えていく必要があるかもしれません。勉強会として行うのであれば、午前中から行ったり、合宿してもいいと思います。</p>

<h3>コミュニティの改善は定期的に行おう</h3>

<p>今回は、Sphinx-Users.jp設立以来の2度目の方針決定ミーティングでありました。やはり回数を重ねていくうちに、コミュニティの立ち位置もしっかりして、何をやって何をやらないかも具体的に考えられるようになってきます。ぜひ、定期的にこのような場を設けてみてください。また、ユーザ参加型のウェブサービス類も、ユーザ目線での機会のリストアップなどは参考にできると思います。BtoCをしているサービスの方々にも、このような手法が広がるといいなと思います。</p>

<p>また、今回の勉強会では、2章を中心として議論を行いました。このあたりがベーシックな部分であるため重要と思いますが、もちろん、時間があれば本書の紹介していない部分を深めて議論してみてください。</p>

<h3>アイスブレークにはナーフ</h3>

<a href="http://www.flickr.com/photos/shibukawa/5995016842/" title="nerf by shibukawa.yoshiki, on Flickr"><img src="http://farm7.static.flickr.com/6006/5995016842_675f5b40a9.jpg" width="400" height="300" alt="nerf"></a>

<p>最後の最後になりますが、このようなミーティングなどでスムーズな意見が出てくるようになるには、みんなが仲良くなるようにして忌憚なく意見を言えるようになる、というのも手ですが、時間がかかりすぎてしまいます。IT系のイベントであれば良くアイスブレークというワークを行ったりしています。</p>

<p>このようなアイスブレークの道具としてイチオシなのが<a href="http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fie%3DUTF8%26field-adult-product%3D0%26keywords%3Dnerf%26index%3Daps%26hvadid%3D6837984179%26ref%3Dpd_sl_6644sw0sfg_b%23&tag=shibukawayosh-22&linkCode=ur2&camp=247&creative=7399">ナーフ</a><img src="https://www.assoc-amazon.jp/e/ir??t=shibukawayosh-22&l=ur2&o=9" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />です。最近はいろんな勉強会に持って行くようにしています。僕が買ったのは<a href="http://www.amazon.co.jp/gp/product/B003R8T8G4/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B003R8T8G4">ナーフ N-ストライク マーベリック</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=B003R8T8G4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />ですが、もともと、DeNAのアメリカの子会社のngmoco:)に出張に行った際に「ぜひこの文化を日本でも広めてくれ」とお土産で<a href="http://www.amazon.co.jp/gp/product/B001QFYQ76/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B001QFYQ76">ナーフ N-ストライク ナイトファインダー EX-3</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=B001QFYQ76" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />をもらったのがきっかけです。国際企業で外国と積極的に関わる部署なので、他の国の文化を理解するのは大切ですよね！DeNAの僕の部署でも、(飲み会前などに)テンションが上がったり、遊び心がMAXになると撃ち合いが行われるようになってきました。撃ってみると良くできていておもしろいので、ぜひナーフをオススメします！</p>

<p>ちなみに、子会社の様子はこちら↓。最近は<a href="http://www.fingermissile.com/home.asp">Finger Missile</a>という原始的だけど、強力な武器も導入され始めているとか・・・</p>

<iframe width="560" height="349" src="http://www.youtube.com/embed/mjoI-QDVNy0" frameborder="0" allowfullscreen></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114950" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4569674860" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B003R8T8G4" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B001QFYQ76" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/46609042.html</link>
      <title>数独/ぷよぷよ好きな主婦のためのProject Euler入門</title>
      <pubDate>Fri, 08 Jul 2011 05:54:02 +0900</pubDate>
      <description>by The Consortium under CC BY-SAプログラミングというのは、ゲームとかソフトを作るためだけのものではありません。パズルを解くためにも使うことができます。「コンピュータを使って問題を解くなんて、それってズルじゃないの？」と思われるかもしれません。もちろん、「電卓持ち込み禁止」の試験にパソコンなんて持ち込もうものなら、カンニング扱いで退場させられてしまいます。ですが、世の中には、「パソコンで解く」というルールのパズル集なんかもあります。それがProj..</description>
            <content:encoded><![CDATA[
<p><a href="http://www.flickr.com/photos/the-consortium/4504469260/" title="Sudoku by The Consortium, on Flickr"><img src="http://farm5.static.flickr.com/4055/4504469260_43ea697e9d.jpg" width="500" height="375" alt="Sudoku"></a>
<br>
by The Consortium under CC BY-SA</p>

<p>プログラミングというのは、ゲームとかソフトを作るためだけのものではありません。パズルを解くためにも使うことができます。</p>

<p>「コンピュータを使って問題を解くなんて、それってズルじゃないの？」と思われるかもしれません。もちろん、「電卓持ち込み禁止」の試験にパソコンなんて持ち込もうものなら、カンニング扱いで退場させられてしまいます。ですが、世の中には、「パソコンで解く」というルールのパズル集なんかもあります。それが<a href="http://projecteuler.net">Project Euler(プロジェクト・オイラー)</a>です。このサイトは英語ですが、<a href="http://odz.sakura.ne.jp/projecteuler/">日本語訳を掲載してくれているサイト</a>もあります。</p>

<p>数学とか算数がよく分からなかったので好きではない、という人もいると思います。ですが、脳トレブーム以前から、<a href="http://www.amazon.co.jp/gp/product/4797334185/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4797334185">数独</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4797334185" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />(ニコリ用語。パズラー用語は<a href="http://www.amazon.co.jp/gp/product/4812434416/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4812434416">ナンバープレース(もしくはナンプレ)</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4812434416" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />)はブームでした。<a href="http://www.amazon.co.jp/gp/product/B004XG0ZXE/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B004XG0ZXE">ぷよぷよ</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=B004XG0ZXE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />や、テトリスなどの落ちものパズルにはまったことがある方も多いでしょう。そのような方々は、<font color="red" size="+2">プログラミングで楽しめる素養があります。</font></p>

<h3>公式を覚える必要はありません！</h3>

<p>1, 2, 3, 4...と並んだ数列があったとします。さて、1000までの数を全部足したらいくつになるでしょうか？</p>

<p>数学を覚えている方は、(1 + 1000) × 1000 ÷ 2という公式を思い出して、答えを導き出すかもしれませんが、パソコンを使う場合は、数式を覚える必要はありません。</p>

<p>それでは道具を用意しましょう。インストールする必要はありません。インターネットを見るブラウザ上でプログラムが書ける、<a href="http://pythonwebconsole.thomnichols.org/">パイソン・ウェブ・コンソール</a>というサイトを開いてみましょう。</p>

<p>開けましたか？それでは、左側の欄に下のようなプログラムを打ち込んで見ましょう。コピーしてもいいですよ？</p>

<pre name="code" class="python">sum = 0

for i in range(1, 1001):
    ​sum = sum + i
    
print sum
</pre>

<p>入力できたら、Runと書かれたボタンを押してみてください。右側に数字が出てきましたね？これが答えです。</p>

<p>このプログラムは、「1000までの数を足す」という問題文をそのまま行います。パソコンは繰り返しが得意です。学校のテストでこの問題が出たとしたら、人間がこの戦法でやると、足し算を間違えたり、時間がかかったりして試験の成績は悪くなるでしょう。ですが、パソコンを使う場合にはこれでもいいのです。</p>

<p>sumというのは、足し算結果を入れる箱です。最初は何も足していないので、ゼロを入れておきます。=記号は代入を表します。右の数値を左に入れます。"←"みたいなイメージです。</p>

<p>"for i in range(1, 1001)" というのは決まった書き方です。これを見ると、コンピュータは一段下がった部分のプログラムを1から1001の一つ手前の数値(つまり1000)まで、1000回繰り返します。現在のループ回数は"i"という箱に入ります。最初の繰り返しでは数字の1が、2回目は2が入るというわけです。</p>

<p>繰り返される中では何が行われているのでしょうか？</p>

<p>ここで使っているのは、最初に使った代入の=記号です。sumとiの合計値を、再びsumに代入しています。最初の繰り返しでは、iが1なのでsumは0から1になります。2回目の繰り返しでは、1から3となります。</p>

<p>最後に結果を右側の画面に出します。printという言葉を書くと、結果を右側に出すことができます。何度も書くことができるため、計算結果を確認しながら出すこともできます。試しに、繰り返しの中で、途中結果を出してみましょう。</p>

<pre name="code" class="python"># Script text here

sum = 0

for i in range(11):
    ​sum = sum + i
    print "i =", i, "sum =", sum
</pre>

<p>Runボタンを押してみてください。ね？すごいでしょう？</p>

<p>ifという文を使うと、「3で割り切れる数の合計」を求めることができます。%という記号は、割り算の余りを表します。ifの後ろの式が合っている場合に、ifの中に入ります。「if i % 3 == 0」は、「iを3で割った余りがゼロの場合」となります。つまり、3で割り切れる場合にのみ、ifの中の足し算が行われます。これで、3で割り切れる数の合計を求めることができます。</p>

<pre name="code" class="python"># Script text here

sum = 0

for i in range(1001):
    if i % 3 == 0:
        ​sum = sum + i
        print "i =", i, "sum =", sum
    
print sum
</pre>

<p>3で割り切れる数を求めて紙にメモしましょう。それから上のプログラムの3を5に書き換えて実行してみましょう。もう一工夫加えると、「3か5で割り切れる数の合計」を求めることができます。これがプロジェクト・オイラーの第一問目です。なんだか解けそうな気がしてきませんか？工夫次第では、難しい問題を解くことができます。<a href="http://www.amazon.co.jp/gp/product/4797340207/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4797340207">数独を解くプログラムの作り方</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4797340207" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />が書かれた本もあります。</p>

<p>数独では、縦横、枠の中に1から9の数字を並べます。同時に1つしか使えないという制約があります。プログラミングでは、if、for、変数(箱)、足し算や割り算などの演算子といった道具を並べて答えを出します。1つしか使えないという制約はありませんが、上記のforの説明のように、書き方のルールがいくつか決まっていたりします。書き方のルールにさえ従えば、自由に道具を並べて答えを出していけば良いのです。</p>

<p>もちろん、少ない計算量で結果を出せる戦法もあります。プロの仕事となると、このような品質が求められることもあります。ゲームをプレイするなら、絵がたくさん表示される方がプレイヤーはうれしいでしょう。短い時間で計算が終われば、そのぶん、たくさん絵を出すことができます。試しに、アマゾンで「アルゴリズムとデータ構造」と検索してみてください。なんだか似たような本がいっぱい出てきますよね？早いプログラムを作るためにはこのような知識も必要となってきます。</p>

<p>プログラムのパズルとしては、「コード・ゴルフ」というものもあります。これは実際のゴルフと同じく、なるべく少ない文字数で結果を出すプログラムを書く競技です。さすがにホールインワンはできないと思いますが、これも頭を使うパズルです。</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797334185" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4812434416" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B004XG0ZXE" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797340207" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>※勢いだけで書き始めたエントリーです。Ocaml版、Erlang/OTP版、C++テンプレートメタプログラミング版などのエントリーをお待ちしています。</p><a name="more"></a>

]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
        <item>
      <link>http://blog.shibu.jp/article/46483571.html</link>
      <title>新婚旅行のクルーズツアーとNintendo 3DS</title>
      <pubDate>Sat, 02 Jul 2011 14:24:47 +0900</pubDate>
      <description>最近あんまりブログを書いていなくて、「つまみぐい勉強法でアウトプットしろと言ってたじゃないか！」とお叱りをされる方もいらっしゃるかもしれませんが、昨年からの5冊に引き続き、また他の本の翻訳だったり書き下ろしをしているのでブログの時間がなかなか取れないのです。アウトプットは継続中ですよ！報告が遅れましたが、新婚旅行はハワイに行ってきました。一番の目的はクルーズ旅行がしたかった、というのがあり飛行機でハワイに行き、7泊は船の上、残り一泊は機内泊というツアーです。地上のホテルに泊ま..</description>
            <content:encoded><![CDATA[
<a href="http://www.flickr.com/photos/shibukawa/5806443977/" title="CIMG1794 by shibukawa.yoshiki, on Flickr"><img src="http://farm6.static.flickr.com/5305/5806443977_cd86ee02e9.jpg" width="500" height="375" alt="CIMG1794"></a>

<p>最近あんまりブログを書いていなくて、「<a href="http://www.amazon.co.jp/gp/product/477414259X/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=477414259X">つまみぐい勉強法</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=477414259X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />でアウトプットしろと言ってたじゃないか！」とお叱りをされる方もいらっしゃるかもしれませんが、昨年からの5冊に引き続き、また他の本の翻訳だったり書き下ろしをしているのでブログの時間がなかなか取れないのです。アウトプットは継続中ですよ！</p>

<p>報告が遅れましたが、新婚旅行はハワイに行ってきました。一番の目的はクルーズ旅行がしたかった、というのがあり飛行機でハワイに行き、7泊は船の上、残り一泊は機内泊というツアーです。地上のホテルに泊まったりとかはなしです。</p>

<a href="http://www.flickr.com/photos/shibukawa/5806951116/" title="DSC_0594 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3331/5806951116_347f6e1580.jpg" width="333" height="500" alt="DSC_0594"></a>

<h3>船の様子</h3><a name="more"></a><p>船は想像以上に大きく、プールもあればジムもあり、劇場もあればクラブもあり、レストランがレストランが8カ所、カフェが3カ所・・・かな？雑貨屋が２軒、洋服を売るお店が1軒、宝石屋までついてます。13階建て(客室は4階から)だし、全長もけっこうある(280m)ので、今いる初台のDeNAのオフィスビルの数倍でかいのが海の上を泳いでいるイメージ。エントランスからして天井が高く、立派な階段はあるし、ワシントンモニュメントっぽいものはあるし、水は流れているし・・・すごいです。客室は10階のバルコニー付きの部屋でした。いろいろコンパクトにまとまっている部屋で、なかなか使い勝手は良いです。絵も飾ってあったり、鏡が配置してあったり、広く感じる作りです。広角レンズ持って行かなかったので室内写真はいまいち撮れませんでした。すみません。</p>

<a href="http://www.flickr.com/photos/shibukawa/5806733022/" title="DSC_0479 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3597/5806733022_a24e1cf0bf.jpg" width="333" height="500" alt="DSC_0479"></a>

<a href="http://www.flickr.com/photos/shibukawa/5800630952/" title="DSC_0366 by shibukawa.yoshiki, on Flickr"><img src="http://farm6.static.flickr.com/5278/5800630952_e6982ef534.jpg" width="500" height="333" alt="DSC_0366"></a>

<p>ハワイのクルーズ船は、基本的に昼間は港に停泊していて、夜は島の間を航行します。揺れを75%削減する仕組みがあるらしいのですが、ゼロではないですし、船尾の下の階の方のレストランとかは結構揺れがあったりします。それでも良く効く酔い止めはいくらでもリクエストするともらえますし、シーバンドというバンドを着けていたらほぼ問題なしでした(当方、トヨタのレンタカーを自分で運転して酔った経験があるほど乗り物酔いに弱い)。</p>

<p>だいたい、ハワイの旅行というと、1島か2島行く感じだと思いますが、クルーズだと大きな4島(オアフ島、マウイ島、ハワイ島、カウアイ島)を回ることができます。それぞれの地でオプションツアーが色々選べますので、ハワイを満喫できます。</p>

<h3>船の生活</h3>

<p>ハワイは日本語を話す店員が多く、伊豆に行ったのとあまり変わらない感じがしますが、船内は日本人も多くなく、会話は基本的に英語です。外国に行って日本人がいるとガッカリする、という人もいると思いますが、船内は外国っぽい雰囲気を120%楽しめます。ただし、日本人の船員さんも一人いて相談に乗ったりしてくれますし、レストランには必ず日本語メニューがありますので、英語が得意でなくてもなんとかなります。</p>

<p>船の中の生活は、まず朝起きて、朝ご飯を食べて、オプションツアーに出かけて、帰ってきて夕飯を食べて、夜のコンサートを聴きに行ったりのんびりする、といったスタイルでした。もちろん、船内でもフラ教室があったりするので、オプションツアーに行かないで船内で楽しむこともできます。</p>

<a href="http://www.flickr.com/photos/shibukawa/5806771264/" title="DSC_0480 by shibukawa.yoshiki, on Flickr"><img src="http://farm6.static.flickr.com/5029/5806771264_753ef0c65d.jpg" width="500" height="333" alt="DSC_0480"></a>

<p>オプションツアーは子供から参加できるようなものから、シュノーケリングやスキューバ、ゴルフツアー、ヘリコプターのツアーなどさまざまあります。町中に自分でタクシーなどに出て行って、そこのアクティビティ紹介のお店に行けば、額面上は安いツアーもありますが、それぞれの所でトップクラスのものを揃えてくれているようで、サービスはとても良いです。2人ぐらいならタクシー代だけで値段がひっくり返ってしまうことも多いですが(最終日のサーフィンのツアーがいっぱいで予約が取れなかったので、自分で探しにいった経験から)。また、日本人ツアーのお客さんもいて、日本語のバスガイドツアーみたいなのもあったりします。</p>

<h3>ソーシャルゲーム的な課金システム</h3>

<p>船内は無料でも楽しめるようになっています。レストランの半分ぐらいは無料です。無料でもかなり豪華なビュッフェ(ビュッフェで有名な伊豆長岡＆那須のサンバレー並かそれ以上)があったり、ロブスターもたまに出てくるようなレストランがあったりします。ちょっとした飲み物類(ソーダ、お酒類)は有料です。また、$10〜$25/人の追加で入れるスペシャルなレストランもあります。入場料だけで、メインディッシュを複数頼まなければそれ以上はお金はかからないです。すごいパフォーマンスの鉄板焼きとかは有料です。無料で遊べるけど、「おにぎりを買うには100モバコイン必要です」というmobageと同じ感じです。ちょっとフィルタかかりすぎだけど↓ここも無料。ピアノの生演奏も聴けます。</p>

<a href="http://www.flickr.com/photos/shibukawa/5806717256/" title="DSC_0461 by shibukawa.yoshiki, on Flickr"><img src="http://farm6.static.flickr.com/5222/5806717256_f6e4de1037.jpg" width="500" height="333" alt="DSC_0461"></a>

<h3>それ以外の小ネタなど</h3>

<p>ハワイのクルーズツアーに限ったネタ(他のは知らない)としてはこんなのがあります。もし行かれる方は参考にどうぞ。</p>

<ul>
<li>フォーマルを用意とあるけど、それほど厳密ではない。ネクタイまでは不要。穴あきのジーパンとかサンダルとか短パンじゃなければ入れるよ、というレストランがあるぐらい。</li>
<li>ホワイトナイトというイベントがあるので、白い服を持って行くとよいです。</li>
<li>最終日に船内の売店で半額セールがあります。</li>
<li>オプションツアー以外に、無料のシャトルバスが港に来ていて、近所のモールなどに連れて行ってくれる。買い物やお土産は結構しやすいです。</li>
<li>出航するときは、ぜひデッキに上がって景色を楽しむと良いと思います。巨大な船がぐいぐい進んでいく様は圧巻です。また、360度海が見える景色の中での夕日がとてもすばらしいです。</li>
<li>新婚旅行、誕生日、○○記念日などがあれば、それを伝えておくと、ケーキ(バタークリームを使っていて甘い)をくれて祝ってくれます。</li>
</ul>

<a href="http://www.flickr.com/photos/shibukawa/5806893552/" title="CIMG1764 by shibukawa.yoshiki, on Flickr"><img src="http://farm6.static.flickr.com/5109/5806893552_2026d17748.jpg" width="500" height="375" alt="CIMG1764"></a>

<p>最終日には、映画の撮影などにも使われたという、カウアイ島の絶壁に船を寄せてくれます。大迫力です。</p>

<a href="http://www.flickr.com/photos/shibukawa/5806505479/" title="DSC_0763 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3197/5806505479_120951a389.jpg" width="500" height="333" alt="DSC_0763"></a>

<p>特に、シャトルバスの買い物が良いです。地元のゲームセンターにいったり、地元のスーパーに行ったり・・・もとより観光地よりも現地のスーパーに行くのが好きなタイプなので。「あー、アメリカは今こういうのが子供に流行っているのかぁ」とか色々勉強になります。ちなみにこれが、「<a href="http://www.amazon.co.jp/gp/product/4048689525/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4048689525">ポモドーロテクニック入門</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=4048689525" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />」でキュウリと一緒に会話していたアーティチョークです。アーティチョークって日本で知られてないから、翻訳するときはキャベツあたりにした方がいいかな、とかも考えましたが、最終的にはそのまま訳しました。</p>

<a href="http://www.flickr.com/photos/shibukawa/5800063664/" title="DSC_0134 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3132/5800063664_32ef1bae70.jpg" width="500" height="333" alt="DSC_0134"></a>

<p>こちらがゲームセンターで撮った写真。将来美人になりそうな金髪レディがこれを見て「ドーモ！ドーモ！」と興奮しておりました。すっかり日本の顔です。</P>

<a href="http://www.flickr.com/photos/shibukawa/5799511899/" title="DSC_0135 by shibukawa.yoshiki, on Flickr"><img src="http://farm3.static.flickr.com/2579/5799511899_f38da4a590.jpg" width="500" height="333" alt="DSC_0135"></a>

<p>こちらがモールでゲッツしたソニックグッズの数々。Tシャツは売ってなかった！</p>

<a href="http://www.flickr.com/photos/shibukawa/5800556796/" title="CIMG1712 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3658/5800556796_10efaa8342.jpg" width="500" height="375" alt="CIMG1712"></a>

<p>初めてのクルーズツアーでしたが、自分のホームとなる部屋にずっと滞在していられるため、荷物とかお土産の面倒を見るのが楽ですし、ホーム自体が移動して色々連れて行ってくれるので、とても気楽にすごす事ができました。とても良かったです。もし夏の一番混むシーズンを外して休みが取れるなら、また行きたいと思います。アジアを回るクルーズツアーもあるみたいですし。クルーズツアーの大半はリピート客、というのが分かった気がします。船員さんのサービスもとても良いです。部屋に帰ると、いろんなタオルの動物がお出迎えしてくれます。ちなみに、このタオルの動物作り講座もありました。</p>

<a href="http://www.flickr.com/photos/shibukawa/5800556010/" title="CIMG1711 by shibukawa.yoshiki, on Flickr"><img src="http://farm4.static.flickr.com/3259/5800556010_51d5673625.jpg" width="500" height="375" alt="CIMG1711"></a>

<h3>今回の隠れた名脇役</h3>

<p>ちなみに表題でも触れている<a href="http://www.amazon.co.jp/gp/product/B00457VVRU/ref=as_li_ss_tl?ie=UTF8&tag=shibukawayosh-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B00457VVRU">ニンテンドー3DS</a><img src="http://www.assoc-amazon.jp/e/ir?t=&l=as2&o=9&a=B00457VVRU" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />ですが、3D写真を撮るのに大活躍でした！まだまだ画質はちょっとしょっぱいし、液晶を明るくするとバッテリーの持ちが悪いというのはありますが、伝説のデジカメQV-10みたいな感じで、また新しいガジェットが登場！という感じですね。暇なときにゲームもできる(1万5000円相当)、3Dのデジカメ(1万円)と考えればそんなに高くない気がする！</p>

<p>3Dで撮った写真はMPO形式(JPEGを2枚繋げただけの単純なフォーマット)で保存されます。また、2Dで撮った写真も一緒に保存されます。3dporch.comなど、3D写真をアップできるウェブサービスもぼちぼち出てきています。エンジニア同士の会でも裸眼の3Dを見ると「おおっ！」となるし、ガジェットとして購入するのをお勧めします。ゲームはそのうち出るだろうし。何枚かアップした画像は<a href="http://3dporch.com/users/shibu">こちら</a>から見られます。</p>

<p>3D写真を撮るときは、わざと手前にちょっと障害物が入るようにして立体感を演出するのがポイントですね。ぜひ、僕と会う方は、事前に言ってもらえれば3DSを持って行って写真をお見せしますよ！3DSのディスプレイで見る3D写真はチープながら臨場感あります。</p>

<p>ちなみに、3DSは7月31日までならエキサイトバイクが無料でもらえます！(おっさんホイホイ)。「欲しいソフトが出たら買おう」という人もぱっと買ってしまってもいいと思います。</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477414259X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048689525" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00457VVRU" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=shibukawayosh-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B00457VVS4" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


]]><![CDATA[
]]></content:encoded>
            <category>日記</category>
      <author>@shibukawa</author>
          </item>
      </channel>
</rss>

