<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>
ブログをマシにしよう → ブログサービスをいろいろ探す → ちょっと試すもなにか満足いかなくて → 自作しようとして → せっかくならと流行りのフレームワークを試し始めて → 満足してそのことをブログに書こうとして → 自分のブログがイマイチなのを思い出して → (最初に戻る) の悪循環を断ち切る為に準備ができるまでひとまず書き置いておくブログ


Tweet


米国サンフランシスコ在住。たまに東京。現在Twitter, Inc.でソフトウェアエンジニアをしています。



@niw



色々連絡先
</description><title>blog.niw.at</title><generator>Tumblr (3.0; @niw)</generator><link>http://blog.niw.at/</link><item><title>Mountain LionのMessages.appを使ってみた</title><description>&lt;p&gt;Mac OS Xのあたらしいバージョン、10.8、通称「Mountain Lion」の内容が&lt;a href="http://www.apple.com/macosx/mountain-lion/"&gt;ちらりと発表&lt;/a&gt;されました。&lt;/p&gt;

&lt;p&gt;Mountain Lionは&lt;a href="http://www.flickr.com/search/?q=Mountain%20Lion"&gt;こういう生き物&lt;/a&gt;なんですが、それはさておき、今回その一部であるMessages(複数形です)が&lt;a href="http://www.apple.com/macosx/mountain-lion/messages-beta/"&gt;一般にダウンロードできる&lt;/a&gt;ので使って見ました。&lt;/p&gt;

&lt;p&gt;これはこれまでのiChat.appを置き換え、iOSのiMessageに対応させるもので、実際、Messages.appと画面には表示されますが、実態は&lt;code&gt;/Applications/iChat.app&lt;/code&gt;だったりします。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lziml4k4vR1qz5rul.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;で、感想。まだベータ版なので不都合があってあたりまえなんですが現状、日本語で使う上でこまった問題があります。なんと一つのメッセージに日本語英語が混在するとiOS上で見た時にバラバラになってしまうという問題が…&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzimhar5cP1qz5rul.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Messages.appではこのように普通に表示されるのですが…&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzimbuivaU1qz5rul.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;iPhoneではこんなことに…&lt;/p&gt;

&lt;p&gt;うーむ、これテストしなかったのかなあ。なぜバラバラになるのか、プロトコルはXMPPらしいのですが説明ができるひと、@&lt;a href="http://twitter.com/niw"&gt;niw&lt;/a&gt;まで教えてください!&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;以下のようなツイートをもらいました。&lt;/p&gt;

&lt;blockquote class="twitter-tweet" lang="ja"&gt;&lt;p&gt;Mac の iMessage で、欧文と和文が混じったメッセージを iOS Devices に送ったとき分割されてしまうのはフォントの問題で、Mac の方で例えばヒラギノとか和文書体を設定するととりあえず解決する。&lt;/p&gt;— Hiroki Katoさん (@cockscomb) &lt;a href="https://twitter.com/cockscomb/status/170393700822822912" data-datetime="2012-02-17T06:26:38+00:00"&gt;2月 17, 2012&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;謎ですが、フォントをヒラギノに変えたら分割されなくなるようです。手元の環境でヒラギノにしても分割されたこともあるのでよくわかりません。&lt;/p&gt;</description><link>http://blog.niw.at/post/17744371140</link><guid>http://blog.niw.at/post/17744371140</guid><pubDate>Thu, 16 Feb 2012 18:20:00 -0800</pubDate></item><item><title>Tahoe にスノボに行って来た</title><description>&lt;p&gt;まだ筋肉痛で動きが制限されています。こんにちは。&lt;/p&gt;

&lt;p&gt;San Francisco は California 州の都市なんですが、多分カリフォルニアっていうと、こう、 &lt;em&gt;海!&lt;/em&gt; &lt;em&gt;青い空!&lt;/em&gt; だと思うんですが、実は雪山もあります。&lt;/p&gt;

&lt;p&gt;今回はそんな California 州と Nevada 州の境目にある Tahoe のスキーリゾートに遊びに行ってきたというお話。&lt;/p&gt;

&lt;iframe width="500" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/?ie=UTF8&amp;t=m&amp;ll=39.100226,-120.031128&amp;spn=1.492013,2.746582&amp;z=8&amp;output=embed"&gt;&lt;/iframe&gt;

&lt;p&gt;今回はいろいろ準備が後手に回ったり、予約の過程で大失敗をしたりと色々と不手際が重なったのですが、結果的に&lt;a href="http://www.northstarattahoe.com/"&gt;Northstar&lt;/a&gt;という Tahoe の北西にあるリゾートに行きました。&lt;/p&gt;

&lt;p&gt;San Francisco からは只今絶賛増線中の Bay Bridge を渡ってひたすら I-80 を北上する、というコースです。昨年シーズンは渋滞で4〜5時間かかった記憶があるのですが、今回は渋滞もなく途中の Sacramento で休憩しても3時間ちょっとで到着しました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzf9q1xgDb1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;こ、これがスキーリゾート…?!&lt;/p&gt;

&lt;p&gt;実は Tahoe は昨年シーズン記録的な大雪で、見渡す限り真っ白でしたが、今シーズンは記録的な &lt;em&gt;雪の降らなさ&lt;/em&gt; で1月になってからやっと雪が降り、2月になってからは全然降っていない、みたいな状態です。
到着まで雪がちらほらとしか見えないので、さすがに途中で不安になりました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzf9z9fhLs1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;今回は4名で出かけたので2br2ba(寝室2つ、トイレ風呂も2つ、の意味)のコンドミニアムを借りました。綺麗でキッチンとか暖炉とかもあり、いろいろ準備すればBBQとかも出来ます。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfa35Wyap1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;さて、その雪がないリゾートなのですが、さすがにゲレンデはバッチり雪があります。けっこうガリガリしていて、春スキーって感じでした。あ、スキーはしてませんが。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfa6h4bHh1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;山頂からの光景。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfa8dpE3I1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;ちなみに、日本ではスキー場では1,000円のカレーと相場決まっているのですが、米国では$10のハンバーガーとなります。California なので Tacos とかもあります。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfaedo0w21qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;これまでずっとレンタルだったので San Francisco に引っ越してからボードなどを買いました。ところが、昨年シーズンこのリゾートに来たときにビンディングのパーツを盗まれたり、その後遭難しかかるなど、ここは思い出深いリゾートだったりします。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfanlcScK1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;写ってないけれど、右足のパーツを盗られ、その後交換パーツを送ってもらったりした関係で左右で色が違います。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzfaltO55F1qz5rul.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;今回はそんなトラブルはなく、かつリフト券を Fast Pass にしたのでリフト待ちが全くなくて非常に快適でした。これはオススメです。&lt;/p&gt;

&lt;p&gt;というわけで、今度はちゃんと準備して今シーズンもうあと1回は行きたいなあと思っています!&lt;/p&gt;</description><link>http://blog.niw.at/post/17649213803</link><guid>http://blog.niw.at/post/17649213803</guid><pubDate>Tue, 14 Feb 2012 23:20:00 -0800</pubDate></item><item><title>Mac OS Xで動的ライブラリのバージョン違いの警告が出た</title><description>&lt;p&gt;たまに、&lt;code&gt;nokogiri.gem&lt;/code&gt;を使っているときに、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;WARNING: Nokogiri was built against LibXML version 2.7.8,
but has dynamically loaded 2.7.3
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;と言われて凹むことがあります、というか、先日ありました。原因は多分Mac OS X 10.7.3にしたことなんですがこういう時に何をすればいいのかという話です。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nokogiri.gem&lt;/code&gt;は&lt;code&gt;libxml2&lt;/code&gt;を使ったRubyのXML/HTMLパーサーなんですが、ビルド時に利用した&lt;code&gt;libxml2&lt;/code&gt;のバージョンを覚えていて、実行時に違うバージョンを使うと文句を垂れます。というのも特定の&lt;code&gt;libxml2&lt;/code&gt;はバグがアレすぎて&lt;code&gt;nokogiri.gem&lt;/code&gt;がまともに動かないのでそれを排除する目的でそういうことをしているんだと思います。&lt;/p&gt;

&lt;p&gt;さて、こうなった時には誰が違うバージョンの&lt;code&gt;libxml2&lt;/code&gt;を&lt;code&gt;nokogiri.gem&lt;/code&gt;より &lt;em&gt;先に&lt;/em&gt; ロードしているのを知る必要があります。普通は他のgemが明らかに&lt;code&gt;libxml2&lt;/code&gt;を使っていたりして、あぁ、こいつが違うバージョンの&lt;code&gt;libxml2&lt;/code&gt;をロードしてるのかー って気がつけることもあるのですが、まったく見当がつかない場合が問題です。&lt;/p&gt;

&lt;p&gt;そこで、Mac OS Xで動的ライブラリのいろいろを司ってるのは&lt;code&gt;dyld&lt;/code&gt;ですが、その環境変数で便利な&lt;code&gt;DYLD_PRINT_LIBRARIES&lt;/code&gt;を使います。詳しくは&lt;code&gt;man 1 dyld&lt;/code&gt;。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DYLD_PRINT_LIBRARIES=1 ruby a_script_requires_many_gems.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;とすると、ロードされたライブラリがずらずら出てきますので、どのタイミングで期待してない&lt;code&gt;libxml2&lt;/code&gt;がロードされているのか眺めます。例えば、こんな感じ。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;dyld: loaded: ... /gems/memcached-1.3.1.1/lib/rlibmemcached.bundle
dyld: loaded: /usr/lib/libsasl2.2.dylib
...
dyld: loaded: ... /Kerberos.framework/Versions/A/Kerberos
dyld: loaded: ... /Heimdal.framework/Versions/A/Heimdal
dyld: loaded: ... /Security.framework/Versions/A/Security
dyld: loaded: ... /CoreFoundation.framework/Versions/A/CoreFoundation
...
dyld: loaded: /usr/lib/libxar-nossl.dylib
dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib
dyld: loaded: /usr/lib/libbz2.1.0.dylib
dyld: loaded: /usr/lib/libxml2.2.dylib
... ↑あっ
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;おや、ここでMac OS Xの&lt;code&gt;libxml2&lt;/code&gt;が呼ばれていますね。これが原因っぽい。じゃあこれをロードした奴は誰だってことになるので、これより上でロードしているライブラリを&lt;code&gt;otool -L&lt;/code&gt;で調べていきます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ otool -L /usr/lib/libxar-nossl.dylib
/usr/lib/libxar-nossl.dylib:
    /usr/lib/libxar-nossl.dylib (compatibility version 1.0.0, ...
    ...
    /usr/lib/libxml2.2.dylib (compatibility version 10.0.0, ...
    ... ↑あっ
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ほう、&lt;code&gt;libxar-nossl.dylib&lt;/code&gt;が&lt;code&gt;libxml2&lt;/code&gt;をロードした犯人っぽいですね。で、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ otool -L ... /Security.framework/Versions/A/Security:
    ... /Security.framework/Versions/A/Security (compatibility...
    ...
    /usr/lib/libxar-nossl.dylib (compatibility version 1.0.0, ...
    ... ↑あっ
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ほう、&lt;code&gt;Security.framework&lt;/code&gt;が&lt;code&gt;libxar-nossl.dylib&lt;/code&gt;をロードしていますね。という感じで掘り進めます。で、この依存関係を呼ばれる逆順に書き出すとこうなります。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/usr/lib/libxml2.2.dylib
← /usr/lib/libxar-nossl.dylib
← Security.framework
← Kerberos.framework
← /usr/lib/sasl2/libgssapiv2.2.so
← /usr/lib/libsasl2.2.dylib ←これはotool -Lではわかりませんが、明らかですね。
← gems/memcached-1.3.1.1/lib/rlibmemcached.bundle
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;なんと、お前かー! まさか、&lt;code&gt;memcached.gem&lt;/code&gt;が&lt;code&gt;libxml2&lt;/code&gt;をロードしているとは思いもよりませんでした。&lt;code&gt;memcached.gem&lt;/code&gt;は&lt;code&gt;memcached&lt;/code&gt;のクライアントですがXMLを使う余地など無いのでパッと見さっぱりわからないですね。
多分、10.7.3でどこかの誰かがこの依存関係を創り上げたのではないかと思っていますが、今後SASL関係のやつらが全部&lt;code&gt;libxml2&lt;/code&gt;をロードすると思うとげんなりです。&lt;/p&gt;

&lt;p&gt;で、この場合、解決策は&lt;code&gt;nokogiri.gem&lt;/code&gt;を素直に&lt;code&gt;/usr/lib/libxml2.2.dylib&lt;/code&gt;を使うようにビルドしなおせばいいのですがまあ、最適解はそれぞれの状況に応じて変わるのでなんとも言えません。
というわけで、原因がわかってめでたしめでたし!&lt;/p&gt;

&lt;h2&gt;おまけ - gdbで追いかける&lt;/h2&gt;

&lt;p&gt;最初、&lt;code&gt;DYLD_PRINT_LIBRARIES&lt;/code&gt;なんて気が付かなかったので&lt;code&gt;gdb&lt;/code&gt;して&lt;code&gt;dlopen&lt;/code&gt;でブレイクポイント立ててロードしている奴らを知ろうと思いました。結果から言えば&lt;code&gt;dlopen&lt;/code&gt;だけではすべての&lt;code&gt;dyld&lt;/code&gt;のロードを見られるわけではないので失敗したのですが、忘れないようにやり方をメモしておきます。この場合は、&lt;code&gt;dtrace&lt;/code&gt;しても良いんだけど。&lt;/p&gt;

&lt;p&gt;ここでのポイントは&lt;code&gt;dlopen&lt;/code&gt;はデバッグ情報がないのでそのままでは&lt;code&gt;gdb&lt;/code&gt;で引数が表示できないこと。そこで&lt;code&gt;x86_64&lt;/code&gt;の場合、&lt;code&gt;rdiレジスタ&lt;/code&gt;から順に&lt;code&gt;rsi&lt;/code&gt;、&lt;code&gt;rdx&lt;/code&gt;、&lt;code&gt;rcx&lt;/code&gt;、&lt;code&gt;r8&lt;/code&gt;、&lt;code&gt;r9&lt;/code&gt;に引数が入ってるので、それを見ていきます。こんな感じ。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gdb --args ruby a_script_requires_many_gems.rb
(gdb) b dlopen  ←dlopenにブレイクポイント立てる
(gdb) r ←実行
...
Breakpoint 1, 0x00007fff93c18929 in dlopen () ←止まる
(gdb) i r ←レジスタ一覧
...
rax    0x1    1
rbx    0x7fff8cbe1000    140735554654208
rcx    0x69    105
rdx    0x9    9
rsi    0x10    16
rdi    0x7fff8cbe1980    140735554656640
rbp    0x7fff5fbfe650    0x7fff5fbfe650
rsp    0x7fff5fbfe640    0x7fff5fbfe640
...
(gdb) p (char *)0x7fff8cbe1980 ← rdi をchar *として見る。$rdi でも同じ。
$1 = 0x7fff8cbe1980 "/usr/lib/libobjc.A.dylib" ←見えた
(gdb) display (char *)$rdi ←止まるたびに出るようにする
(gdb) c ←続行
...
Breakpoint 1, 0x00007fff93c18929 in dlopen ()
1: (char *) $rdi = 0x100275210 "... /thread.bundle" ←見えた
(gdb)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;便利ですね!&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;多分もっとかっこいい方法があるはずなので、是非@&lt;a href="http://twitter.com/niw"&gt;niw&lt;/a&gt;まで教えてください!&lt;/p&gt;</description><link>http://blog.niw.at/post/17311357890</link><guid>http://blog.niw.at/post/17311357890</guid><pubDate>Wed, 08 Feb 2012 23:48:00 -0800</pubDate></item><item><title>ドメインを移管してみるテスト</title><description>&lt;p&gt;現在個人で保有しているドメインがいくつかあります。&lt;/p&gt;

&lt;p&gt;そのうち伝統的に古い90年代に取得したある.comドメインがずーっと当時のNetwork Solutions、今のVeriSignで管理されており、その管理費用が異様に高い(年間$40くらい)なうえに、Network Solutionsのサイトが広告まみれで、なにか操作をするたびに「この機能いらない？いらない？ねえ、本当にいらない？」と聞いてきて非常にイライラするので更新時期を踏まえて移管することにしました。&lt;/p&gt;

&lt;h2&gt;移管先を探す&lt;/h2&gt;

&lt;p&gt;まず、移管先を決めなくてはいけません。条件は、手頃な値段で、うざくなくて、ある程度長い間営業している米国から使っても問題ない、&lt;em&gt;.atドメインに対応している&lt;/em&gt;業者ということで選びました。&lt;/p&gt;

&lt;p&gt;しかし最後の条件がキビしくてかなり絞られることになりました。最初はGoDaddyが浮かんだのですがSOPAの一件もあるのでちょっと敬遠し、結果的に&lt;em&gt;No Bullshit&lt;/em&gt;と言っているレジストラ、&lt;a href="http://gandi.net"&gt;Gandi&lt;/a&gt;に移管することにしました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lylgggWxd11qz5rul.png" alt="Gandi"/&gt;&lt;/p&gt;

&lt;p&gt;フランスの会社です。&lt;/p&gt;

&lt;h2&gt;移管する前にネームサーバーを変えておく&lt;/h2&gt;

&lt;p&gt;ドメインレジストラを変えるということはそのレジストラが提供しているサービスも変えるということになるので、もしレジストラのネームサーバーを使っている場合はそれを予め切り替えておかないといけません。ダウンタイムが発生してもよいのならなにも考えずに移動すればいいような気もしますが、運用されているドメイン名の場合はそうもゆかず。&lt;/p&gt;

&lt;p&gt;ということで一旦、第三者で、簡単に設定できる&lt;a href="http://aws.amazon.com/route53/"&gt;Amazon AWSのRoute 53&lt;/a&gt;に書き換えておきます。
移管が終わって問題なさそうなら移管先のネームサーバーに再度切り替えるのでもいいですし、もし移管先のネームサーバーが事前に分かっていて、かつ設定できるのならそれを利用すればいいとも思います。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# そのドメインで使っているネームサーバー一覧する
$ dig NS ドメイン.名
...
;; ANSWER SECTION:
ドメイン.名.     165948  IN  NS  ns-....awsdns-....com.
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Route 53はAmazonが提供するDNSサービスで名称の53はもちろん、DNSが使うUDPのポート番号に因んでいると思います。サインアップしてゾーンを追加して現在DNSに設定されているレコードを全部作ってから移管元のレジストラでネームサーバーをRoute 53のものに変更します。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyljgyqC451qz5rul.png" alt="Route 53"/&gt;&lt;/p&gt;

&lt;p&gt;AWSのManagement Consoleからできるので楽チン。&lt;/p&gt;

&lt;h2&gt;移管申請の前にAuthorization Codeを取得&lt;/h2&gt;

&lt;p&gt;.comなどのドメインを移管するときには、移管元のレジストラでAuthorization Codeを取得して、それを移管先に伝える作業が必要です。このあたりのやり取りで重要になるのがドメインのWHOISで登録されているメールアドレスで所有者の確認に使われます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# WHOISを見る
$ whois ドメイン.名
...
Registrant:
Yoshimasa Niwa    メール@アドレス
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;まずDomain Protectみたいな機能がある場合はそれを外して、Authorization Codeを取得します。レジストラによって手順が異なるようですが、基本的にウェブインターフェイスで完了するでしょう。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lylh1q9umH1qz5rul.png" alt="Domain Protect"/&gt;&lt;/p&gt;

&lt;h2&gt;費用の支払いと移管元、移管先からの確認&lt;/h2&gt;

&lt;p&gt;ここまで準備ができたら、移管先のレジストラのサイトで移管したいドメイン名を指定してAuthorization Codeを入力して移管費用などを支払います。&lt;/p&gt;

&lt;p&gt;その後移管元、移管先双方から移管したいドメインのメールアドレスに対して「移管したい言うてるんだけどほんまかいな」的なメールが来ますので、リンクを踏んで「せやで」と答えておきます。この確認メールが来るまでに数時間を要しました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lylh69H0NU1qz5rul.png" alt="Transfer Confirmation"/&gt;&lt;/p&gt;

&lt;h2&gt;移管完了&lt;/h2&gt;

&lt;p&gt;ここから待つこと数日。その日にそのままサクサク終わるかと思いきや、まったくぜんぜん。&lt;/p&gt;

&lt;p&gt;忘れたころに移管元から移管が完了したという通知が来ます。そして移管先からも移管が完了したという通知が来てすべて完了しました。&lt;/p&gt;

&lt;p&gt;結果的に、移管が完了するまでにさらに5日かかりましたが、そういうもののようです。ひょっとしたら手動なのかも。&lt;/p&gt;</description><link>http://blog.niw.at/post/16966988089</link><guid>http://blog.niw.at/post/16966988089</guid><pubDate>Thu, 02 Feb 2012 23:28:32 -0800</pubDate></item><item><title>Mac OS Xのパッケージファイルを操作する</title><description>&lt;p&gt;Mac OS Xではアプリケーションなどをインストールするときに伝統的に.pkgで終わるパッケージが使われています。
しかし、インストールする前にどんなファイルが展開されるんだろう、とか、あのインストーラーに入ってるあのファイルだけ取り出したい、みたいなことがあると思います。&lt;/p&gt;

&lt;p&gt;そんなパッケージにまつわる基本的な操作をまとめました。基本的に&lt;code&gt;Terminal.app&lt;/code&gt;での操作になります。&lt;/p&gt;

&lt;h2&gt;インストールされているパッケージの一覧&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --pkgs
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;例えば、mysqlが入ってるかなーとかは、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --pkgs|grep '[m]ysql'
com.mysql.mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;となります。&lt;code&gt;[]&lt;/code&gt;がついてるのは、そういう&lt;code&gt;grep&lt;/code&gt;のテクニックです。&lt;/p&gt;

&lt;h2&gt;インストールされているファイルの一覧&lt;/h2&gt;

&lt;p&gt;既にインストールされているmysqlのパッケージがインストールしたファイルの一覧は次にようにします。インストール前のpkgに対しては後述。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --files com.mysql.mysq
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;インストールされているファイルの削除&lt;/h2&gt;

&lt;p&gt;一応&lt;code&gt;pkgutil&lt;/code&gt;にオプションがあったんですが(&lt;code&gt;--unlink&lt;/code&gt;)、うまく消せないし、フォルダが残ることがあるし、なんかコマンドそれ自体がなくなった気もするので、自前のコマンドを作っています。&lt;a href="https://github.com/niw/profiles/blob/master/bin/rm_pkg_files"&gt;このあたりから入手&lt;/a&gt;してください。
こういうのは&lt;code&gt;root&lt;/code&gt;で実行しますが、なんか重要なファイル消えちゃうかもなので、自己責任で。&lt;/p&gt;

&lt;h2&gt;インストールされているパッケージを消す&lt;/h2&gt;

&lt;p&gt;ファイルの削除ではなく、パッケージの登録を消す場合は次のようにします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --forget com.mysql.mysq
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;インストール前のパッケージのファイル一覧&lt;/h2&gt;

&lt;p&gt;どんなファイルがpkgでインストールされるか知るには、パッケージによって2種類の方法があります。まず、pkgが単一のファイルの場合(Flat Package File)は次のようにします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --payload-files path-to-flat-package-file.pkg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;もし、pkgファイルがディレクトリ形式の場合は次のようにします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ lsbom path-to.pkg/Contents/Archive.bom
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;BOMってなんじゃらほいってことですが、Bill of Materialsという意味だそうです。詳しくは&lt;code&gt;man bom&lt;/code&gt;で。&lt;/p&gt;

&lt;h2&gt;インストール前のパッケージからファイルを取り出す&lt;/h2&gt;

&lt;p&gt;これも2種類それぞれに違う方法が必要です。まず、Flat Package Fileの場合は次にようにしまう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pkgutil --expand path-to-flat-package-file.pkg ./tmp
$ ditto -x --bom ./tmp/path-to-Bom ./tmp/path-top-Payload ./
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;pkgutil&lt;/code&gt;でFlat Package Fileからディレクトリに展開して、その中にある&lt;code&gt;Bom&lt;/code&gt;を使って&lt;code&gt;Payload&lt;/code&gt;ファイルからファイルを取り出します。めんどくさい…&lt;/p&gt;

&lt;p&gt;ディレクトリの場合は次のようにします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ pax -rzf path-to.pkg/Contents/Archive.pax.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;また別のコマンド… なんだか様々な圧縮方法とファイル形式があって、非常に大変です。&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;他にも&lt;code&gt;Archive.bom&lt;/code&gt;がない場合とかいろんな形式がある雰囲気なので、もっと良い方法があったら@&lt;a href="http://twitter.com/niw"&gt;niw&lt;/a&gt;まで教えてもらえると嬉しいです!&lt;/p&gt;</description><link>http://blog.niw.at/post/16690761384</link><guid>http://blog.niw.at/post/16690761384</guid><pubDate>Sun, 29 Jan 2012 03:00:00 -0800</pubDate></item><item><title>boundioで電話を鳴らす</title><description>&lt;p&gt;さっきTwitterでちらっと&lt;a href="http://boundio.jp/"&gt;boundio&lt;/a&gt;というのを見かけたので試して見ました。簡単に言えばHTTP POSTで電話を鳴らせるというサービスです。&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;なにはともあれアカウント作る&lt;/li&gt;
&lt;li&gt;&lt;p&gt;管理画面の「音声ファイル管理」で音声ファイルをアップする。
さくっとMacの&lt;code&gt;say&lt;/code&gt;コマンドで作りました。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;say -o hello.aiff "hello, world"
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;アップロードしたファイルのIDを覚える。多分最初は&lt;code&gt;000001&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;curlでお試しURL(サイトではデベロッパーツールというわかりにくいネーミング。)にHTTP POSTする。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ curl -v 'https://boundio.jp/api/vd1/&lt;自分のユーザーID&gt;/call' \
-d 'key=&lt;デベロッパーツールに載ってるアプリケーションキー&gt;' \
-d 'tel_to=&lt;電話番号&gt;' \
-d 'cast=file(&lt;さっきのアップロードしたファイルのID&gt;)'
{"success":"true","_id":"****"}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;050の番号から電話がかかってくるらしい&lt;/li&gt;
&lt;li&gt;&lt;p&gt;電話がつながったかどうか後で調べるにはこうする&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ curl -v 'https://boundio.jp/api/vd1/&lt;自分のユーザーID&gt;/tel_status?
  key=&lt;デベロッパーツールに載ってるアプリケーションキー&gt;'
[{"success":"true",
  "result":[
    {"_id":"****",
     "_from":"050********",
     "_to":"+1415*******",
     "_start":"2012-01-17 17:34",
     "_end":"",
     "_duration":"0",
     "_status":"架電待機"},
    {"_id":"****",
     "_from":"050********",
     "_to":"080********",
     "_start":"2012-01-17 17:28",
     "_end":"2012-01-17 17:29",
     "_duration":"34",
     "_status":"架電完了"}, ...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ドキュメントには&lt;code&gt;tel_id&lt;/code&gt;が必須と書いてあるけど、指定しないと履歴が取れる。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;ところで、電話がかかってくる「らしい」、というのは、実は米国の番号を試したのですがAPI呼び出しは成功するものの電話かからず。残念ながらダメだったので、日本にいる人の協力を仰いだわけで、本当に電話が鳴ったかどうかは僕にはわからないのです。&lt;/p&gt;

&lt;p&gt;喋らせる音声は自分でアップしたファイルを組み合わせたり、合成音声で番号を喋らせたりできるようです。&lt;/p&gt;

&lt;p&gt;というわけで、&lt;strike&gt;イタ電&lt;/strike&gt;例えば、電話認証やちょっとアレげな通知をするウェブアプリとかに使えそうですね!&lt;/p&gt;</description><link>http://blog.niw.at/post/16000747363</link><guid>http://blog.niw.at/post/16000747363</guid><pubDate>Tue, 17 Jan 2012 00:57:00 -0800</pubDate></item><item><title>2011年を振り返ってみる</title><description>&lt;p&gt;2010年も&lt;a href="http://blog.niw.at/post/15213401886"&gt;同じようなこと&lt;/a&gt;をしていましたので、2011年も数字で振り返ってみようと思います。&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;687&lt;/span&gt;人、140文字をお届け&lt;/h2&gt;

&lt;p&gt;あまりこのブログでは仕事や職場のことを書いていませんが、今働いてるTwitterはこの1年でさらに何倍にも成長しました。二度同じことがない、とてもエキサイティングで楽しい1年でした。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7005/6497083241_9e9d12cb40.jpg" alt="Twitter Holiday Party 2011"/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;59,693&lt;/span&gt;マイル、15区間&lt;/h2&gt;

&lt;p&gt;2011年は太平洋を何度か往復しましたが、結局、太平洋横断だけで終わりました。是非、2012年こそはヨーロッパ方面にも等にも行けるように頑張りたいと思います。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm7.staticflickr.com/6188/6082121267_eefeb1e639.jpg" alt="DL209"/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;35&lt;/span&gt;回レンタル&lt;/h2&gt;

&lt;p&gt;カリフォルニア州のいろいろな所に車で出かけました。あとハワイ州とニューヨーク州にも行ったかな。いい加減、車を手に入れようと思います。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm7.staticflickr.com/6192/6052298007_29c6d06025.jpg" alt="California Blue Sky"/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;62,708&lt;/span&gt;通&lt;/h2&gt;

&lt;p&gt;送受信した電子メールの数。だいたい、8分あたり1通の計算。まだ健全ですね。&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;1,679&lt;/span&gt;コミット&lt;/h2&gt;

&lt;p&gt;去年よりはちょっと多いかな。平均5時間あたり1コミット。&lt;a href="https://github.com/niw"&gt;Make things&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;&lt;span style="font-size: x-large; font-family: Georgia, serif;"&gt;2012&lt;/span&gt;年、あるいは平成24年&lt;/h2&gt;

&lt;p&gt;どの数字も少しだけ去年より増えて、よりアクティブな1年だったということがなんとなくわかりました。2012年もたくさんの友達を世界中につくって、新しいものいっぱいつくって、エキサイティングで楽しい年にしたいと思います!&lt;/p&gt;

&lt;p&gt;今年もよろしくお願いします!!&lt;/p&gt;</description><link>http://blog.niw.at/post/15224582489</link><guid>http://blog.niw.at/post/15224582489</guid><pubDate>Mon, 02 Jan 2012 20:29:00 -0800</pubDate></item><item><title>New Yorkの焼き鳥事情</title><description>&lt;p&gt;先日、New Yorkでブランチをした店から出てきたらいきなりコワーカーに声をかけられて、まさに同じ店に入ろうとしていた所だったと。多少有名な店だったのは事実ですが、ばったり街で人に会うことがまさかNew Yorkまで出かけていって起こるとは。&lt;/p&gt;

&lt;p&gt;さて、先輩のブロガー@&lt;a href="http://twitter.com/drikin"&gt;drikin&lt;/a&gt;に&lt;a href="http://blog.drikin.com/2011/11/torikyu.html"&gt;ラーメン以上に恋しい美味しい焼き鳥&lt;/a&gt;と言わしめた焼き鳥ですが、ちょっと前にタイムラインでこんなツイートを見かけたので、&lt;/p&gt;

&lt;blockquote class="twitter-tweet" lang="ja"&gt;&lt;p&gt;Like yakitori? In New York? Come get &lt;a href="https://twitter.com/search/%2523truechicken"&gt;#truechicken&lt;/a&gt; at Tori Shin &lt;a href="http://t.co/4lK5joQX" title="http://torishinny.com/about-us/"&gt;torishinny.com/about-us/&lt;/a&gt; Pre-Nationals omakase with @&lt;a href="https://twitter.com/yarrow"&gt;yarrow&lt;/a&gt; :)&lt;/p&gt;— crystalさん (@crystal) &lt;a href="https://twitter.com/crystal/status/146382202467393536" data-datetime="2011-12-13T00:13:31+00:00"&gt;12月 13, 2011&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;これは行かねば! ということで今回は前回に引き続きNew Yorkの焼き鳥編です。&lt;/p&gt;

&lt;h2&gt;鳥心&lt;/h2&gt;

&lt;p&gt;Upper Eastといっても1st Ave.沿い、Lexington Ave.から極寒のなかを歩いて数分いきなり日本風の門構えの店、&lt;a href="http://torishinny.com/"&gt;鳥心&lt;/a&gt;が現れます。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwngglKjTV1qz5rul.jpg" alt="鳥心"/&gt;&lt;/p&gt;

&lt;p&gt;店内は、なんていうか日本です。日本の大企業の方々の駐在員さんがスーツ姿でお食事をなさっていて、いやはや格差社会とか思ったのですが、それはさておき。&lt;/p&gt;

&lt;p&gt;メニューは単品をランダムに選ぶ方法とコースのおまかせがあって、おまかせは分量的にも内容的にもかなり満足できました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwngpiCMWb1qz5rul.jpg" alt="焼き鳥"/&gt;&lt;/p&gt;

&lt;p&gt;最後に親子丼とスープと、ちょっと鳥尽くしすぎる! ってくらい楽しめます。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwngqwHZMU1qz5rul.jpg" alt="親子丼"/&gt;&lt;/p&gt;

&lt;p&gt;デザートのしそシャーベットはアメリカのデザートではまずありえない甘さ控えめで驚きです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwngt9nlJU1qz5rul.jpg" alt="デザート"/&gt;&lt;/p&gt;

&lt;p&gt;お値段は、だいたい日本円で6,000円くらいでした。つまり$80なんですが、お安いですね(ドルが)!
ちょっと歩く場所にあるので行きづらいかもしれませんが、たまに焼き鳥が恋しくなったときは6時間の飛行機とさらに数百ドルはらって食べに来るのもありかなと思いました。&lt;/p&gt;

&lt;p&gt;ちなみに、帰り際にSan Franciscoに出店して下さい! と、お願いしておきましたが軽く笑って流されてしまった感があってガックシです。&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;合わせて読みたい → &lt;a href="http://blog.niw.at/post/14503885653"&gt;New Yorkのラーメン事情&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/14664029263</link><guid>http://blog.niw.at/post/14664029263</guid><pubDate>Fri, 23 Dec 2011 01:33:00 -0800</pubDate></item><item><title>New Yorkのラーメン事情</title><description>&lt;p&gt;週末を利用してNew Yorkに遊びに行きました。San Franciscoからは飛行機で5〜6時間と、成田からですと、Singaporeちょっと手前くらいと同じ距離があります。
飛んでる間はずっと北米大陸上空ですので、&lt;a href="http://www.gogoair.com/"&gt;gogo&lt;/a&gt;によるインターネットが使えるのですが、それはまたの機会にブログすることにして、今回はラーメンのお話。&lt;/p&gt;

&lt;h1&gt;「San Franciscoが東京のラーメンにやられたようだな…」「フフフ… San Franciscoは&lt;ruby&gt;米国&lt;rt&gt;べいこく&lt;/rt&gt;都四天王&lt;rt&gt;としてんのう&lt;/rt&gt;&lt;/ruby&gt;の中でも最弱」「ラーメンごときで消えるとは北米都市の面汚しよ…」&lt;/h1&gt;

&lt;p&gt;はっきり言って、New Yorkのご飯クオリティはSan Franciscoとは比べ物にならないクオリティです。ラーメンも例外じゃないです。&lt;/p&gt;

&lt;h2&gt;せたが屋 ニューヨーク&lt;/h2&gt;

&lt;p&gt;まずひとつめ、&lt;a href="http://www.ramensetagayany.com/"&gt;せたが屋&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwaykszy1qz5rul.jpg" alt="St. Marks Pl."/&gt;&lt;/p&gt;

&lt;p&gt;East Villageのなんだかよく見ると和食っぽいなぁ、みたいな店がいっぱいあるストリートにあります。地下鉄を8で降りてちょっと歩きました。このへん。&lt;/p&gt;

&lt;iframe width="506" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;ie=UTF8&amp;hq=&amp;hnear=East+Village,+New+York&amp;t=m&amp;ll=40.725535,-73.981419&amp;spn=0.019514,0.04283&amp;z=14&amp;output=embed"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;お店はこんな感じ。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwd1c9Yh1qz5rul.jpg" alt="せたが屋"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwd81tvA1qz5rul.jpg" alt="せたが屋"/&gt;&lt;/p&gt;

&lt;p&gt;塩ラーメンです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwe1byIV1qz5rul.jpg" alt="塩ラーメン"/&gt;&lt;/p&gt;

&lt;p&gt;日本のお店には行った事がない気がするので比較できないんですが、美味しいです。
お昼だったのもあって、あまり混んでませんでした。&lt;/p&gt;

&lt;p&gt;店内は日本のラーメン特集番組が流れていて、デザートにはちゃんと餅アイスがあって定番な感じ。何故か米国にあるラーメン店の基本メニューはラーメンと餃子、唐揚げ、デザートに餅アイスがあって、これはSan Franciscoのお店も同じ。&lt;/p&gt;

&lt;h2&gt;一風堂 ニューヨーク&lt;/h2&gt;

&lt;p&gt;さて、次は有名店、&lt;a href="http://www.ippudony.com/"&gt;一風堂&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;場所はせたが屋から遠くないEast Villageの4th Av.沿い。なんかすごい店の外に寒い中並んでる! って思ったらバス停のバス待ち客でした。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwszc9d71qz5rul.jpg" alt="行列?"/&gt;&lt;/p&gt;

&lt;p&gt;しかし、近づくと中ですごい人が並んでる… ぐぬぬ。ちなみに、2人とかで1時間くらい待ちみたいのようでした。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwtmpnwL1qz5rul.jpg" alt="一風堂"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwy0zkjH1qz5rul.jpg" alt="一風堂"/&gt;&lt;/p&gt;

&lt;p&gt;ラーメンは日本の一風堂と同じメニュー構成で、白丸をチョイス。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwhwyyIHnH1qz5rul.jpg" alt="白丸元味"/&gt;&lt;/p&gt;

&lt;p&gt;替え玉もあります。&lt;/p&gt;

&lt;p&gt;ところで気になるお値段なのですが… この円高であってもちょっとこれはっていう値段します。具体的には日本の倍くらい。まあ、ちゃんとしたディナーとしていく雰囲気の店なので五行に近い感じなのかな。&lt;/p&gt;

&lt;p&gt;しかし、ちゃんと米国でこのラーメンが食べられるんですねー。
さてはて、ベイエリアにはいつ来るのか。&lt;/p&gt;

&lt;p&gt;という訳で片道6時間(と、ん百ドル)かけてラーメンを食べに行った話でした。おしまい。&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;合わせて読みたい → &lt;a href="http://blog.niw.at/post/14256752050"&gt;San Franciscoのお寿司事情&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/14503885653</link><guid>http://blog.niw.at/post/14503885653</guid><pubDate>Tue, 20 Dec 2011 01:33:00 -0800</pubDate></item><item><title>重要なことはfont-size: 600%で</title><description>&lt;div style="font-size: 600%; line-height: 100%;"&gt;来週から、年末年始に東京に行きます。みなさん遊んで下さい! お寿司とか好きです。&lt;/div&gt;

&lt;hr&gt;&lt;p&gt;12/18, 2011 追記: 過ぎ去ると意味がわからないので、解説しておくと、日本時間の2011年12月19日の特大ニュースを&lt;a href="http://www.nikkei.com/"&gt;日本経済新聞&lt;/a&gt;がウェブに掲載した際に、ヘッドラインに&lt;code&gt;font-size: 600%;&lt;/code&gt;の指定をして特別デカイ文字でニュースを掲載したことが話題になりましたの。参考画像がこちらです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwflw3BKec1qz5rul.png" alt="日経のヘッドラインの文字がでかすぎる件について"/&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/14439085863</link><guid>http://blog.niw.at/post/14439085863</guid><pubDate>Sun, 18 Dec 2011 19:34:00 -0800</pubDate></item><item><title>San Franciscoのお寿司事情</title><description>&lt;p&gt;ごめんなさい、San Franciscoと書いておきながら、San Franciscoのお寿司屋さんの話題は出て来ません。&lt;/p&gt;

&lt;p&gt;以前にこのブログでも&lt;a href="http://blog.niw.at/post/12317760945"&gt;ちらっと触れた&lt;/a&gt;ことがあるのですが、全然関係ない事を書いてしまったので、そのお寿司の話を。今回は&lt;code&gt;git&lt;/code&gt;とか出て来ません。&lt;/p&gt;

&lt;p&gt;San Franciscoから北に車で20分弱、橋を渡った向こう岸にある小さな街&lt;a href="http://maps.google.com/maps?q=Sausalito&amp;hl=en&amp;ll=37.859134,-122.485199&amp;spn=0.127941,0.146084&amp;sll=37.0625,-95.677068&amp;sspn=64.36916,74.794922&amp;vpsrc=6&amp;hnear=Sausalito,+Marin,+California&amp;t=m&amp;z=13"&gt;Sausalito&lt;/a&gt;にある&lt;a href="http://www.sushiran.com/"&gt;Sushi Ran&lt;/a&gt;というお寿司屋さんがお気に入りです。&lt;/p&gt;

&lt;p&gt;まず赤いけどGoldenなGolden Gate Bridgeを渡ります。そ言えばSan Franciscoだったここ、と思う瞬間。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lw8l9rpJ7E1qz5rul.png" alt="Golden Gate Bridge"/&gt;&lt;/p&gt;

&lt;p&gt;ちょっと山を降ります。テキトーに路駐してお店に。夜だといい感じになってます。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lw8lcvKRHq1qz5rul.jpg" alt="Sushi Ran - こんな所"/&gt;&lt;/p&gt;

&lt;p&gt;このお店、今日知ったのですが実はミシュランの星が1つ以上付いているようです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lw8lqhulbx1qz5rul.jpg" alt="Sushi Ran - お店"/&gt;&lt;/p&gt;

&lt;p&gt;そして問題のお寿司。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lw8ljt150L1qz5rul.jpg" alt="Sushi Ran - お寿司"/&gt;&lt;/p&gt;

&lt;p&gt;カウンターでは食べた事はないのですが、テーブルだとこうやって握りを頼んであとはランダムに好きなお寿司を足していく感じです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lw8lm8Ooox1qz5rul.jpg" alt="Sushi Ran - お寿司"/&gt;&lt;/p&gt;

&lt;p&gt;大体、あんまり飲まないでいっぱい食べるか、飲んで普通に食べるかどっちにしでもチップ込みで$80位ですので、チップ込みでも日本円で6,000円くらい… や、安い… (ドルが)。&lt;/p&gt;

&lt;p&gt;ベイエリアにはいっぱいお寿司屋さんがありますが、ここはお寿司以外の料理や雰囲気、行きやすさやお値段を考えるととても魅力的なお店です。&lt;/p&gt;

&lt;p&gt;是非、一度お試し下さい!!&lt;/p&gt;</description><link>http://blog.niw.at/post/14256752050</link><guid>http://blog.niw.at/post/14256752050</guid><pubDate>Thu, 15 Dec 2011 00:54:00 -0800</pubDate></item><item><title>デーモンプロセスをゆるふわ監視するときに便利な$0</title><description>&lt;p&gt;たとえばデーモンがあったとします。こんな感じで。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ruby -rwebrick -e 'include WEBrick; Daemon.start;\
HTTPServer.new(:Port =&gt; 3000).tap{|s|\
  s.mount "/", HTTPServlet::ProcHandler.new(Proc.new{|req,res|\
    res.body = "hi"});\
  trap(:TERM){s.shutdown}\
}.start'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで3000番でHTTPサーバが起動しました。ちょっとリクエストしてみましょう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ curl 'http://127.0.0.1:3000/'
hi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;期待通り動きましたね。ではちょっとこのデーモンが今どんな状態なのかを監視できるようにしましょう… ってなると多分、ログをどっかにとかになりますが、もっと簡単になんとなく知る方法として&lt;code&gt;$0&lt;/code&gt;が使えます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ruby&lt;/code&gt;の&lt;code&gt;$0&lt;/code&gt;はご存知の通り現在実行している&lt;code&gt;ruby&lt;/code&gt;スクリプトの名前とかが入ってるんですが、これ書き換えができるんです。で、書き換えると&lt;code&gt;ps(1)&lt;/code&gt;の値が変わ(&lt;em&gt;ることがあ&lt;/em&gt;)ります。&lt;/p&gt;

&lt;p&gt;先のコードをちょっと書き換えて、何回リクエストが来たか数えておきます。
そしてそれを&lt;code&gt;$0&lt;/code&gt;に入れてみます。
あ、今度のを実行するまえに前のプロセスを&lt;code&gt;kill&lt;/code&gt;しといて下さいね。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ruby -rwebrick -e 'include WEBrick; Daemon.start; $count = 0;\
HTTPServer.new(:Port =&gt; 3000).tap{|s|\
  s.mount "/", HTTPServlet::ProcHandler.new(Proc.new{|req,res|\
    $count += 1; $0 = "mydaemon: count=#{$count}"; res.body = "hi"});\
  trap(:TERM){s.shutdown}\
}.start'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;新しいデーモンが起動しました。ちょっと&lt;code&gt;ps(1)&lt;/code&gt;してみます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ps x|grep '[r]uby'
16046 ?        S      0:00 ruby -rwebrick -e...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;あー、居ましたね。こいつです。このPID覚えておきます。で、一回リクエストします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ curl 'http://127.0.0.1:3000/'
hi
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;期待通りの結果ですね。では&lt;code&gt;ps(1)&lt;/code&gt;はどうでしょうか。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ps x|grep '[r]uby'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ぶへ、なんも出ない。となるわけですが、これはさっき&lt;code&gt;$0&lt;/code&gt;を書き換えたから&lt;code&gt;ps(1)&lt;/code&gt;で表示される名前が変わってるんです。こうします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ps x|grep 16046
16046 ?        S      0:00 mydaemon: count=1  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;いたー! しかも処理したリクエスト数が見える! と、このように&lt;code&gt;ps(1)&lt;/code&gt;でこのデーモンがどれだけリクエストを処理したかが見えますね。適当に何度か呼んでみましょう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ while true; do curl 'http://127.0.0.1:3000/'; done
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;それでこっそり裏で&lt;code&gt;top -cp 16046&lt;/code&gt;とかしてみます。おおーじわじわ増える…!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PID   ... VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16046 ... 14556 4652 1388 S    0  0.6   0:03.42 mydaemon: count=1025
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ま、こんな感じで&lt;code&gt;$0&lt;/code&gt;を使うとゆるふわにデーモンの状態を眺められますよ、という話でした。&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;うまく行かない場合は環境がダメなんだと思います。実は&lt;code&gt;$0&lt;/code&gt;で&lt;code&gt;ps(1)&lt;/code&gt;の結果を書き換えるのは環境依存なので必ずしもどんな環境でも使えるわけではありません。上記例はLinuxで実行してます。&lt;/p&gt;

&lt;p&gt;あともうひとつ、&lt;code&gt;ruby&lt;/code&gt;を起動する際に、この例ではワンライナー的に&lt;code&gt;-e&lt;/code&gt;でスクリプトを渡していますが、これは実はミソで&lt;code&gt;$0&lt;/code&gt;で書き換えられる範囲は最初にプロセスを作ったときの名前の長さまでという制約があったりします。なので場合によっては十分な長さのダミーな引数を付けたりして呼び出すと大丈夫だったりします。&lt;/p&gt;</description><link>http://blog.niw.at/post/13820186809</link><guid>http://blog.niw.at/post/13820186809</guid><pubDate>Tue, 06 Dec 2011 00:24:00 -0800</pubDate></item><item><title>GmailのIMAP設定画面が難解すぎて生きるのが辛い</title><description>&lt;p&gt;Gmail使ってますよね。もうメール = Gmailなのではないでしょうか。
メールそれ自体はとても古い技術に基づいており、これだけ分散してまともに動いている仕組みは他にDNSくらいなんじゃないかなと思いますが、どちらも問題を抱えていて、特にメールはスパムやらとの戦いの場となっていて多分当面この状況は変わらないんじゃないかなと思います。
しかし、メール = Gmailを意味する世界になっているのだとしたら、もうあまり深いこと考えなくてもそういうもんだと思って使っていけるんじゃないかなあと思いつつ、いい加減代替手段が出てきてもいいよねと思っている次第です。&lt;/p&gt;

&lt;p&gt;さて、そんなGmailですが、メールの仕組みの上に乗っかっているサービスなので、とんでもない複雑な設定画面がくっついています。いや、結果的にそうなってしまいました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvmou9OroX1qz5rul.png" alt="新しいデザインになったりしたね"/&gt;&lt;/p&gt;

&lt;p&gt;そして、設定画面の中で最難関なのが&lt;a href="http://ja.wikipedia.org/wiki/Internet_Message_Access_Protocol"&gt;IMAP&lt;/a&gt;の挙動の設定ではないでしょうか。はっきりいって、普通に読んだだけでは何を言ってるのかさっぱりわけが分かりません。&lt;/p&gt;

&lt;p&gt;まず、そもそものIMAPの設定画面ですが、Gmailの設定タブ「メール転送と POP/IMAP」の中にあります。そして以前に「Labs」の一分の機能として用意されていたAdvanced IMAP Controlsが標準になっていて、これが設定の複雑さを増しています。&lt;/p&gt;

&lt;p&gt;というわけで今回は、この設定をひとつずつ意味を理解しながら見ていきたいと思います。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvmdqbCPCZ1qz5rul.png" alt="メール転送と POP/IMAP"/&gt;&lt;/p&gt;

&lt;h2&gt;IMAP を有効にする、IMAP を無効にする&lt;/h2&gt;

&lt;p&gt;IMAPを使うか、使わないか。これはわかる。&lt;/p&gt;

&lt;h2&gt;フォルダ サイズの制限&lt;/h2&gt;

&lt;p&gt;順番逆ですが、これは簡単なので先に。
これで1つのIMAPのフォルダに現れるメールの最大件数を指定できます。&lt;/p&gt;

&lt;p&gt;ご存知の通り&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;フォルダには抹消されていない過去の全メールが現れます。ですので、頑張る系のメーラーでこのフォルダに触れた途端、過去のン万件のメールをダウンロードし出します。これはその挙動をなんとかするための設定で、多分、時間順で新しい方から1000件までしか現れないようにする、みたいなことができます。最低1000件なので、それは我慢しましょう。&lt;/p&gt;

&lt;h2&gt;IMAP のメールを削除するようマークを付けた場合(自動消去をオン/オフ)と、最後に表示された IMAP フォルダからメールを削除/消去するようマークを付けた場合&lt;/h2&gt;

&lt;p&gt;これが難解。この2つの設定、パッと見では意味不明ですね。実は日本語では難解度が上がるっていうかちゃんと翻訳されていないので、英語の設定画面を見てみます。それぞれ、&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;When I mark a message in IMAP as deleted: Auto-&lt;em&gt;Expunge&lt;/em&gt; on/off&lt;/li&gt;
&lt;li&gt;When a message is marked as deleted and expunged from the last &lt;em&gt;visible&lt;/em&gt; IMAP folder&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;となっています。一部太字にしました。これらの単語は日本語訳では意味が失われているか、意味を取り違えて翻訳されています。しかし、英語にしてもやっぱり意味不明なんですね。
そこで、この挙動を理解するにはIMAPのフォルダとGmailのラベルの関係と、IMAPのプロトコルでの削除の挙動を理解する必要があります。&lt;/p&gt;

&lt;p&gt;まず、GmailのIMAPでは、GmailのラベルはIMAPのフォルダとして機能します。つまりあるメールが&lt;code&gt;Urgent&lt;/code&gt;と&lt;code&gt;Bug&lt;/code&gt;という２つのラベルを持っていた場合、同じメールが&lt;code&gt;Urgent&lt;/code&gt;と&lt;code&gt;Bug&lt;/code&gt;と&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;の3つのフォルダに登場します。でも実態は1つです。
もしすべてのラベルがなくなった場合でも、&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;には残ります。&lt;/p&gt;

&lt;p&gt;次にIMAPのプロトコルですが、IMAPでのメーラーがメールを削除する時には次のようにコマンドを発行します。&lt;code&gt;EXPUNGE&lt;/code&gt;ではなくて&lt;code&gt;CLOSE&lt;/code&gt;を使ったほうが行儀がいいという話もあるようですが、後述の理解を深めるために&lt;code&gt;EXPUNGE&lt;/code&gt;にしておきます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# INBOXフォルダを開く
SELECT "INBOX"

# Deletedフラグを立てる
STORE 1 +FLAGS (\Deleted)

# Deletedフラグを立てたメールを抹消する
EXPUNGE
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;IMAPは状態のあるプロトコルで、メールを削除するときには、特定のフォルダを開いてそのフォルダのメール対して削除フラグを立ててそして最後に実際に削除するという流れになります。Gmailの設定でいうところの英語「Expunge」はこのIMAPの&lt;code&gt;EXPUNGE&lt;/code&gt;コマンドを意味していて、最初のオプションは、このコマンドを自動でサーバ側で発行するかしないかを選択するオプションになっています。&lt;/p&gt;

&lt;p&gt;デフォルトではAuto-Expungeは、つまり自動消去はオンになっています。つまり、Gmailではメーラーが&lt;code&gt;Deleted&lt;/code&gt;フラグを&lt;code&gt;STORE&lt;/code&gt;コマンド立てると、裏で&lt;code&gt;EXPUNGE&lt;/code&gt;が走る仕組みになっていて、その瞬間に「そのフォルダが表すラベルがメールから消される」という挙動をします。
ポイントは、ラベルが消されるというだけでメールが本当に消されるわけではない、という点です。この自動消去の挙動では、メールは&lt;code&gt;[Gmail]/Trash&lt;/code&gt;には移動しません。&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;には依然表示されます。&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;で削除を実行した場合&lt;code&gt;EXPUNGE&lt;/code&gt;しても削除されません。&lt;/p&gt;

&lt;p&gt;自動消去をオフにすると&lt;code&gt;Deleted&lt;/code&gt;フラグを&lt;code&gt;STORE&lt;/code&gt;コマンドで追加しただけでは何もしないようになります。つまり、よりメーラーが期待するIMAPサーバの振る舞いに近いものになると言えます。ちなみに、&lt;code&gt;Deleted&lt;/code&gt;フラグを立てただけで&lt;code&gt;EXPUNGE&lt;/code&gt;しないとそのメールは&lt;code&gt;Deleted&lt;/code&gt;フラグが立ったまま残ります。この状態はウェブからは全く見えません。&lt;/p&gt;

&lt;p&gt;そして、自動消去をオフにすることで、次のオプションが有効になり、メーラーから&lt;code&gt;EXPUNGE&lt;/code&gt;コマンドが発行された際に、Gmailがどのように振る舞うのかを選ぶことができます。&lt;/p&gt;

&lt;p&gt;まず&lt;code&gt;EXPUNGE&lt;/code&gt;を実行したフォルダが表すラベルがある場合は、そのラベルがメールから削除されます。次に、もし、そのメールがどの&lt;em&gt;IMAPプロトコルから見えるフォルダ&lt;/em&gt;にも登場しない場合(この太字にした部分が設定画面の日本語訳では誤って訳されています)、つまり「ラベル」の設定タブで「IMAP で表示」としたもののうち、どのフォルダにも登場しない場合、つまり条件式として書くと、&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;EXPUNGE を実行したときに:
すべてのラベルが削除されていて &amp;&amp;
([Gmail]/All Mail 上で EXPUNGE を実行した ||
 [Gmail]/All Mail を IMAP で表示しないようにしている場合)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;に、次の中から挙動を選べます。&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;メールをアーカイブする&lt;br/&gt;
デフォルトの挙動です。結果的に何もしません。&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;を見えるようにしていてもいなくても、あるいは&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;で&lt;code&gt;EXPUNGE&lt;/code&gt;を実行したとしても消えません。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;メッセージをゴミ箱に移動&lt;br/&gt;
そのメールを&lt;code&gt;[Gmail]/Trash&lt;/code&gt;に移動します。つまりGmail上のゴミ箱です。&lt;code&gt;[Gmail]/All Mail&lt;/code&gt;からも消えます。30日ほど放置するとGmailから消されます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;メールを今すぐ完全に削除する&lt;br/&gt;
 そのメールをその時点で抹消します(「今すぐ」って… これも設定画面の誤訳)。&lt;code&gt;[Gmail]/Trash&lt;/code&gt;にすら残りません。つまりGmail上でそのメールを削除してさらにゴミ箱から削除を選んだ挙動です。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;難解ですね。これは様々なIMAPのメーラーがそれぞれ異なった挙動をすることと、GmailのラベルがIMAPの概念にまったく合ってないことに起因していると思います。&lt;/p&gt;

&lt;p&gt;ユーザーはこれらの挙動と利用するメーラーがメールをメーラー上で削除したときに発行するIMAPコマンドの挙動とを照らしあわせて、最適なIMAP環境を構築することになります。&lt;/p&gt;

&lt;p&gt;で、こんな解説どこに載ってんねんって話ですが、いちおう、&lt;a href="https://groups.google.com/group/Gmail-Help-POP-and-IMAP-en/browse_thread/thread/0e294c5b3cf59a6e"&gt;ここ&lt;/a&gt;でGmailのエンジニアが書いてます… &lt;em&gt;こんな挙動わかるかいな!!!&lt;/em&gt;&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;まとめ。このIMAPの設定を使いこなすにはIMAPのプロトコルを知る必要があります。仕様は&lt;a href="http://datatracker.ietf.org/doc/rfc3501/"&gt;RFC3501&lt;/a&gt;(といくつかのRFCで構成されている)なので読んでみることとおすすめします。&lt;/p&gt;

&lt;p&gt;また、これらの挙動を踏まえて、最も普通のIMAPサーバーと同じ挙動にするには、&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;「IMAP のメールを削除するようマークを付けた場合」は「自動消去オフ」&lt;/li&gt;
&lt;li&gt;「メールを今すぐ完全に削除する」にする&lt;/li&gt;
&lt;li&gt;「ラベル」の設定で、「すべてのメール(All Mail)」の「IMAPに表示」のチェック外す&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;とかでなんとなくうまく行くんじゃないかなーって気がしますがこの設定だと&lt;em&gt;メールを消すと本気で消える&lt;/em&gt;のでご利用は計画的に。&lt;/p&gt;

&lt;p&gt;あと、一応、今回このブログを書くのには実際にGmailのIMAPサーバとIMAPでおしゃべりして挙動を確認しています。ですがあくまでもこれが書かれた時点での挙動ですので今後変わるかもしれませんね。&lt;/p&gt;

&lt;p&gt;というわけで、快適なGmailライフを!&lt;/p&gt;</description><link>http://blog.niw.at/post/13675914439</link><guid>http://blog.niw.at/post/13675914439</guid><pubDate>Sat, 03 Dec 2011 04:48:00 -0800</pubDate></item><item><title>Zapposを使ってみた</title><description>&lt;p&gt;&lt;a href="http://blog.niw.at/post/12464623675"&gt;ちょっと前のブログ&lt;/a&gt;で書いたように&lt;a href="http://www.zappos.com/"&gt;Zappos&lt;/a&gt;で靴を買ったんですが、その後の顛末を。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lviolyIgQu1qz5rul.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Zapposは普通のオンラインサイトと同様に普通に買い物して普通に商品が届くのですが、びっくりしたのはそのサポート体制。
無償で返品交換が出来ることは知っていたのですが、ちょろっと「予定よりも届くのが遅い…」ってツイートしたら速攻でVIPアカウントにしたので次回からは1 day shipping使って下さい! と来たりしてなかなか(あ、でもこれは1回買えば、普通にそうなるものらしいとも聞いた気がしますが。)&lt;/p&gt;

&lt;p&gt;Twitter経由以外でもどんな不満でもリーズナブルならそれなりの対応をしてくれるようでここが顧客満足度を上げるキモなのかなあと。
つまり返事が無い、のれんに腕押し状態のサポートや電話で延々マニュアル対応されるみたいなのが不満を高めるわけで、小売業として、オンラインサービスとしてこの点はとても大切なんじゃないかな、と思った次第。
少なくともちゃんと聞いてるよ、という姿勢を見せることは聞いていても見せないよりはずっといいということで。&lt;/p&gt;

&lt;p&gt;自分はこういったTwitter経由のサポートでとてもいい体験をいっぱいしていて、@&lt;a href="https://twitter.com/delta"&gt;Delta&lt;/a&gt;とか@&lt;a href="https://twitter.com/comcast"&gt;Comcast&lt;/a&gt;にはそれぞれサービスはアレなことが多いんですが、ある意味普通よりは多少の満足度を持っています。
まあ日本のそれと比較すると足元にも及びませんが、ま、この話はまた別の機会に。&lt;/p&gt;

&lt;p&gt;ちなみに、買った靴はサイズもぴったり(やっぱり 7½ でした←今後の為に自分メモ)で満足してます。&lt;/p&gt;</description><link>http://blog.niw.at/post/13584314235</link><guid>http://blog.niw.at/post/13584314235</guid><pubDate>Thu, 01 Dec 2011 00:59:00 -0800</pubDate></item><item><title>Amazon Kindle Fireの処遇について。Kindle Fire、差し上げます。</title><description>&lt;p&gt;発表があってから数ヶ月、&lt;a href="http://www.amazon.com/gp/product/B0051VVOB2?ie=UTF8&amp;tag=niwat-20&amp;linkCode=shr&amp;camp=213733&amp;creative=393177&amp;creativeASIN=B0051VVOB2&amp;ref_=amb_link_358998362_6"&gt;Amazon Kindle Fire&lt;/a&gt;で遊ぶことができました。到着する2日前に東京に出かけたので受け取ることが出来ずにいましたが、先日帰宅したので結構長く待つことに。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvga34lJA91qz5rul.jpg" alt="Amazon Kindle Fire"/&gt;&lt;/p&gt;

&lt;p&gt;じゃじゃーん。開封!&lt;/p&gt;

&lt;p&gt;さて、一晩遊んだんですが、結論としては、うーん、残念って感じ。
遊ぶ前から色々なブログや&lt;a href="http://drikin.tv/day/2011/11/26"&gt;ストリーミング放送&lt;/a&gt;などでディスられていますがざっと上げるとこんな感じ。&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;ウェブブラウザがAndroidのそれをなんら変わりない使いにくさ、そして微妙な挙動。&lt;a href="http://www.amazon.com/gp/help/customer/display.html/?nodeId=200775440"&gt;Silk&lt;/a&gt;の影響か、戻るボタンを押しても内容が戻らないということが多発。&lt;/li&gt;
&lt;li&gt;PDFは、ただ表示されるだけ。それ以上でもそれ以下でもない。&lt;/li&gt;
&lt;li&gt;見た目以上にズッシリ。&lt;/li&gt;
&lt;li&gt;画面は綺麗なんだけど… あれ、なんだか、狭い… ような…&lt;/li&gt;
&lt;li&gt;Amazon App Storeがまだ現時点では欲しいものが見つからない。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして(普通に使う限りでの)決定的にアレなのが、&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;iPad以上の何かがまったく見つけられない。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;という点。正直、処遇に困ってしまいました。&lt;/p&gt;

&lt;p&gt;将来性はとてもあると思います。Amazonのビジネスとしても理解できます。今後のソフトウェアアップデートで大幅に改善されることとは思いますし、上記のような問題は解決されるような気もします。またrootしてしまえばいろいろ遊べるAndroidデバイスなんだとは思いますが、ちょっと今は必要ないかなぁ、と。&lt;/p&gt;

&lt;p&gt;そこでアメリカ流に簡単に返品もできるのですが、どうせなら数多の批判記事を読んでもそれでも欲しいという方に楽しくつかって頂きたいと思いますので、次のルールでご希望の方に差し上げたいと思います。&lt;/p&gt;

&lt;hr&gt;&lt;h2&gt;趣旨&lt;/h2&gt;

&lt;p&gt;僅か1台のAmazon Kindle Fireですが、僕がこれを残念だなーとか言いながら使うよりも、&lt;strong&gt;Android的にこれを使って面白いハックをしたり、面白いアプリケーションを作ったり、楽しいブログ記事が出ればきっと楽しいはず!&lt;/strong&gt; と思ったので差し上げます。つまり、無償譲渡です。&lt;/p&gt;

&lt;h2&gt;このAmazon Kindle Fireについて&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/B0051VVOB2?ie=UTF8&amp;tag=niwat-20&amp;linkCode=shr&amp;camp=213733&amp;creative=393177&amp;creativeASIN=B0051VVOB2&amp;ref_=amb_link_358998362_6"&gt;このAmazon Kindle Fire&lt;/a&gt;です。なにか他のKindle Fireがあるかもしれませんが、ここに写真の掲載のあるアレです。&lt;/li&gt;
&lt;li&gt;開封済み、一度使用済みで、一度僕のAmazon.comのアカウントにリンクされていますが、工場出荷時へリセットします。&lt;/li&gt;
&lt;li&gt;丁寧に使ったので傷などはないはずですが、すんごい細いのがあるかもしれません。&lt;/li&gt;
&lt;li&gt;Amazonから届いたときのまま、箱と本体添付の充電通信ケーブルを付けますが、箱や添付品を含めることで送料が増えるなどの理由で要らないという場合はご連絡下さい。&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;無償譲渡のルール&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;日本語(か英語)で僕とコミュニケーションの取れる、数多のAmazon Kindle Fireのディスり記事を読んでも、それでも欲しくて、&lt;strong&gt;ハックしたりアプリケーションを作ったり、面白いブログ記事を書いたりして活用できる!&lt;/strong&gt;、という個人や組織が対象です。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;11/30, 2011 追記&lt;/em&gt; - ハック必須じゃないです、面白い使い方とか面白い記事とか書けそうとか、そういうのでもいいです。鍋しきに使いますとかは心が痛むのでやめて欲しいけど…&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;本体は差し上げますが、送料については状況がそれぞれに異なりますのでご負担下さい。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;基本的に皆様の善意を信じます。しかし転売等はご遠慮下さい。直接的な利益享受が目的の行為は今回の譲渡の趣旨に反します。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;譲渡をうけて活用してみた結果、しかしすんごい残念で期待はずれでうまく活用できなかったということでしたら、今回と同じ条件での無償譲渡を行うことを許可します。その譲渡には今回と同じルールを適用して下さい。この同じルールを適用するというルール事態も適用してください。つまりGPLのように継承されます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;この譲渡行為に対しての法的な問題があったり、かなり面倒な事態になるという事がわかった場合はこの譲渡事態を取りやめる可能性がありますが、まあそんなことは無いでしょう、多分。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;今回の譲渡に関わる一切は僕が所属する組織等にはまったく関係がありません。あくまでも個人的なものです。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;今回譲渡するAmazon Kindle Fireが1台しか無い以上、応募多数の場合は期日が過ぎてから抽選します。その時点で連絡が取れなかった場合は再度抽選を行い連絡がとれるまで繰り返します。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;応募のルール&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;今から5日後の &lt;strong&gt;米国太平洋時間&lt;/strong&gt; の &lt;strong&gt;2011年12月4日(日曜日) 23:59:59&lt;/strong&gt; までにTwitterで@&lt;a href="https://twitter.com/#!/niw"&gt;niw&lt;/a&gt;に次のフォーマットでツイートすること。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@niw #kindlehack (活用のしかた) (あればブログとかgithubへのURL)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;必ず、もし譲渡された場合にどう活用したいのかをツイートに付して下さい。例えば、「Androidとしてハックしてスキャナをつなげるようにして自炊から即電子書籍として読めるようなアプリを作る」とか「すんごい面白いブログ記事を書く」とか「日本語の電子書籍を販売しようとしていて、現実的な電子書籍を普及させるにのこんなふうに使いたい」などです。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;皆様の善意に任せますが、実現不可能な活用方法の提案はご遠慮下さい。ご自身で可能なかつ面白い活用方法をある程度は具体的に(秘密のアレ、とかならぼかしてもらっても結構です)お願いします。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ブログやgithubのレポジトリなどの客観的なエンジニアリング力やブログ力がある方はそのURLも付して頂けると嬉しいです。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;万が一応募の意思なく僕とのコミュニケーションの一環で上記のようなフォーマットのツイートを送ることになった場合はそれらのツイートは無視します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;同様のフォーマットで1つ以上のツイートを送られても1つとみなしますが、いくつものツイートで長々と送るのはご遠慮下さい。上記フォーマットには自由に書ける100文字以上の余裕があります。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;やはり善意に任せますが、複数のアカウントを取得して一人が複数応募するのはやめて下さい。応募元のアカウントがちゃんと使われていなさそうな場合は応募したとはみなさいないことにします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;抽選結果の連絡はTwitterで行います。その後のやり取りや送付先のやり取り等はダイレクトメッセージ等で行いたいと思います。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;発送について&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;このブログが日本語で書かれているので主に日本の方向けとなるかと思いますが、国際発送致します。送料と関税に関してはご負担下さい。&lt;/li&gt;
&lt;li&gt;本体は米国サンフランシスコから発送します。日本宛だと、&lt;a href="https://www.usps.com/ship/express-mail-international.htm"&gt;USPSのEMS&lt;/a&gt;で$20くらい、1週間程度かかかると思います。&lt;/li&gt;
&lt;li&gt;1週間も待てない! 速攻欲しいから&lt;a href="http://www.fedex.com/us/"&gt;FedExで&lt;/a&gt;! という場合は対応しますがそれなりに値が張ります。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;以上、まだルールに抜けがあったり色々手間取ったりするかもしれませんが、始めての試みなのでお手柔らかに…! では応募お待ちしております!&lt;/p&gt;

&lt;hr&gt;&lt;h2&gt;当選者と今後&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;12/13, 2011 追記&lt;/em&gt; - 期日を迎えまして、有効応募ツイートは5件、その中から厳選なる審査の結果 @&lt;a href="https://twitter.com/kinneko"&gt;kinneko&lt;/a&gt; さんに譲渡が決まりました! おめでとうございます。
先日Kindle Fireを発送し、譲渡が完了しました。&lt;/p&gt;

&lt;p&gt;@kinnekoさんのブログは&lt;a href="http://d.hatena.ne.jp/kinneko/"&gt;こちら&lt;/a&gt;です!&lt;/p&gt;</description><link>http://blog.niw.at/post/13530935568</link><guid>http://blog.niw.at/post/13530935568</guid><pubDate>Tue, 29 Nov 2011 19:38:00 -0800</pubDate></item><item><title>あるSan Franciscoでの休日、たとえば秋刀魚</title><description>&lt;p&gt;いろんな意味で&lt;a href="http://blog.drikin.com/"&gt;先輩のブロガー&lt;/a&gt;から「ブログがアレすぎる」とアレされたので、もっと普通な記事も増やそうと思いました。&lt;/p&gt;

&lt;p&gt;というわけで今回記事にはこの1行を除いて、一切&lt;code&gt;git&lt;/code&gt;とか&lt;code&gt;ruby&lt;/code&gt;とか&lt;code&gt;gcc&lt;/code&gt;とか&lt;code&gt;vim&lt;/code&gt;とかそういうのはありません!&lt;/p&gt;

&lt;p&gt;というわけで今日は夏時間が終わって最初の日。すべてが1時間遅れている世界というか元に戻ったんですけどそんな日曜日の出来事です。&lt;/p&gt;

&lt;p&gt;のんびり起きてあまりの寒さにびっくり(最低気温47度F、8度Cでした)しつつ、MacBook Air片手にふらっと靴を見に出かけてからいつものカフェでブランチを。&lt;/p&gt;

&lt;p&gt;いろいろ見た結果、初めて&lt;a href="http://www.zappos.com/"&gt;Zappos&lt;/a&gt;を使ってみることにしました。Zapposは返品交換自由のオンライン衣類販売サイトでLas Vegasにある会社です。噂だけは色々聞いていて友達も使っているのを見たことはあるのですが自分は使うのは初めて。ちょっと値段が高いらしいのですが、店でみた感じとあまり変わらなかったので購入。さてどうなることやら!&lt;/p&gt;

&lt;p&gt;その後、昨日突如企画されたいろんな意味で&lt;a href="http://blog.drikin.com/"&gt;先輩のブロガー&lt;/a&gt;宅での秋刀魚ホームパーティーに向かいます。途中でAT&amp;Tストアで&lt;a href="http://jawbone.com/up/product"&gt;Jawbone Up&lt;/a&gt;を物色して黒しかないので今回は購入せず。店員がやたら「取り寄せる? 取り寄せる?」って聞いてきて商魂たくましいと思った次第。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_luadpzPXXM1qz5rul.png" alt="Jawbone Up"/&gt;&lt;/p&gt;

&lt;p&gt;秋刀魚パーティーでは文字通り美味しく秋刀魚を頂き、&lt;a href="http://www.amazon.com/gp/product/B002GYWHSQ/ref=as_li_ss_tl?ie=UTF8&amp;tag=niwat-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B002GYWHSQ"&gt;Kindle DX&lt;/a&gt;があと一息でベストPDFリーダーになるなあと思ったり、&lt;a href="http://www.amazon.co.jp/gp/product/B004G3CXMU/ref=as_li_ss_tl?ie=UTF8&amp;tag=niwniwat-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=B004G3CXMU"&gt;SonyのReader&lt;/a&gt;がけっこう出来がいいなあと思ったり、フィギュアの出来がすごいなーってなったり、アレがアレすぎるような話や、アレがアレなのを聞いたりしてドン引きしたり、アレとアレとアレが同じ場所に引っ越すとか、日本のテレビを何ヶ月ぶりかに見てTwitterについて普通に話をしてて感慨深かったり、リア充について真剣に議論したり、中二病について理解を深めたりしました。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_luadwsfbXE1qz5rul.png" alt="秋刀魚"/&gt;&lt;/p&gt;

&lt;p&gt;しかし、和食はいいものですね! ごちそうさまでした!!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_luae2c8d9i1qz5rul.png" alt="ご飯"/&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/12464623675</link><guid>http://blog.niw.at/post/12464623675</guid><pubDate>Mon, 07 Nov 2011 02:52:00 -0800</pubDate></item><item><title>gitの小ネタ</title><description>&lt;p&gt;SausalitoでBostonからのゲストを迎えておいしいお寿司を食べてきました。&lt;/p&gt;

&lt;p&gt;ま、全然それは関係ないんですが、久しぶりのブログとして軽く&lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;の小ネタ的なものを。&lt;/p&gt;

&lt;h2&gt;gitのコマンドショートカット&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git commit&lt;/code&gt;とか長いですよね。そういう場合は、&lt;code&gt;~/.gitconfig&lt;/code&gt;に次のように書き足しましょう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[alias]
    ci = commit
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで&lt;code&gt;git ci&lt;/code&gt;で&lt;code&gt;git commit&lt;/code&gt;と同様の動きをします。&lt;/p&gt;

&lt;h2&gt;カラフルに&lt;/h2&gt;

&lt;p&gt;生のgitは地味ですよね。そういう場合はこうします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[color]
    diff = auto
    status = auto
    branch = auto
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;あのマージのグラフが見たい…&lt;/h2&gt;

&lt;p&gt;いくつかの&lt;a href="http://www.git-tower.com/"&gt;GUIツール&lt;/a&gt;だと、綺麗なマージ状況を表示する機能があって羨ましいですよね。そういう場合はこうします。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[alias]
    gr = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;こうすると、&lt;code&gt;git gr&lt;/code&gt;でこんなグラフを表示できます。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lu4fz6ZLbW1qz5rul.png" alt="git log --graph"/&gt;&lt;/p&gt;

&lt;p&gt;以上、gitの小ネタ集でした。いちおう、gitについてはまた今度ちゃんと書こうかと思ってます。&lt;/p&gt;</description><link>http://blog.niw.at/post/12317760945</link><guid>http://blog.niw.at/post/12317760945</guid><pubDate>Thu, 03 Nov 2011 22:49:00 -0700</pubDate></item><item><title>iPhone 4S アンロック!</title><description>&lt;p&gt;先日購入したVerizonのiPhone 4Sをアンロックしたのでまとめておきます。&lt;/p&gt;

&lt;p&gt;正確に言うと、いわゆるどんなSIMでもなんでもござれのファクトリーアンロックではなくて、海外での利用を目的として、米国ではCDMAのVerizonを、米国外ではGSMで現地のキャリアのSIMを使える、というリージョンロックつきのアンロックをしました。&lt;/p&gt;

&lt;p&gt;これには店頭でも確認したとおり、一定の条件(たとえば、60日とか、6ヶ月使った後、あるいは優良なユーザー、1年あたり1回線まで、などと言われています。)を満たす必要があるらしいが可能である、ということがわかっていました。&lt;/p&gt;

&lt;p&gt;実は僕は明日から東京に出かける関係もあって、できれば今日のうちにアンロックできたらいいなと思っていてものは試しと、Verizonの&lt;a href="http://b2b.vzw.com/international/Global_Travel/index.html"&gt;Global Services Activation Specialist&lt;/a&gt; &lt;strong&gt;(800) 711-8300&lt;/strong&gt; に夜の8時過ぎに電話をしました。&lt;/p&gt;

&lt;p&gt;大抵、米国のカスタマーサービスは夕方5時には終わるので機械と話して終わりかな? と思ったらちゃんと人間がでるではありませんか! もうこれだけでVerizonの株が上がってしまいます。
そこから、1. 明日から東京に旅行する 2. 現地のSIMカードを持っている、GMSのSIMアンロックができると聞いているがやってくれないか 3. ローミングしたいのではない の3点を説明します。&lt;/p&gt;

&lt;p&gt;まず最初に電話に出た人に話して、わからないからみたいな感じで次の部署に回されます。よくあるパターン。そして次、また次となり、たらい回しを食らってそのたびに同じ説明をしました。そして最後にでた兄ちゃんは「名前は?」「PINは?」の後になんといきなり「OK! アンロックしたヨ!」とあっさりと…
僕が、へ? 聞き間違い? と思って少し戸惑ってると、&lt;/p&gt;

&lt;p&gt;そうダヨ、もうアンロックしたヨ、持ってるSIMカードをさしたら使えるヨ! でも初回にiTunesに繋ぐかWiFiでアクティベーションがいるヨ、だから米国にいる間にSIM差し替えてアクティベーションしてネ? PCは持ってるカイ? じゃ簡単だネ! Have a nice flight!&lt;/p&gt;

&lt;p&gt;みたいに言われて唖然。なんと簡単なことでしょう、その結果がこちら。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ltaz1eeN1n1qz5rul.jpg" alt="AT&amp;T"/&gt;&lt;/p&gt;

&lt;p&gt;おお! AT&amp;Tって出た!
これだけ見るとAT&amp;TのiPhone 4Sと何ら違いがない…&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ltaz3bWTYE1qz5rul.jpg" alt="NTT DOCOMO"/&gt;&lt;/p&gt;

&lt;p&gt;というわけで、こちらも。最初の画像でアンロックって言うと、AT&amp;Tでも使えるの!ってなりますが、実は使用したのは手持ちのNTT DOCOMOのSIMカードで、AT&amp;Tは米国でNTT DOCOMOのローミング先として表示されています。&lt;/p&gt;

&lt;p&gt;さてその手順ですが、電話でお兄ちゃんが言っていたとおり、NTT DOCOMOのSIMを挿入すると暫くは電波を探していますが、見つかるとホーム画面が暗転Appleのロゴが表示されてシャキーンっという感じの動画(&lt;a href="http://www.apple.com/safari/welcome/"&gt;こんな感じ&lt;/a&gt;、ちょっと違うけど)が流れた後、アクティベーションしてネ!と表示され、WiFi接続画面になります。
この時点でiTunesにつないでもアクティベートできるようですが、そのままWiFi経由でアクティベーションを進めました。そしてすぐに普通のホーム画面に戻ってAT&amp;Tと表示されました。&lt;/p&gt;

&lt;p&gt;一度アクティベートしたSIMは二度目以降はアクティベーションの必要はないようなので、このまま飛行機のドアが閉まるまでVerizonが使えて、成田に着陸したら即NTT DOCOMOで使えるわけですね! すごい便利!&lt;/p&gt;

&lt;p&gt;ちなみに、アンロック後AT&amp;TのSIMも試しましたがそのSIMは使えないヨ!と表示されてしまいました。&lt;/p&gt;

&lt;p&gt;という訳で、まとめ。&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;VerizonのiPhone 4SはたしかにGSMでSIMアンロックできる&lt;/li&gt;
&lt;li&gt;但し、米国外のSIMのみ有効のリージョンロック付き。

&lt;ul&gt;&lt;li&gt;しかし、実質Verizonのほうが良いのでAT&amp;Tを無理に使う理由がないのも事実。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;国外のGSMのキャリアのSIMを利用できる。&lt;/li&gt;
&lt;li&gt;初回のSIM挿入時にWiFi経由、あるいはiTunes経由でアクティベーションが必要。

&lt;ul&gt;&lt;li&gt;このプロセスでVerizonに使って良いSIMか問い合わせているように思います。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;2回目以降はアクティベーションの必要ない。&lt;/li&gt;
&lt;li&gt;アンロックするのに60日待ったり6ヶ月待ったりする必要は必ずしもないようである。

&lt;ul&gt;&lt;li&gt;ただし通常の米国のカスタマーサポートと電話口で交渉するだけの英語力と気合は必要。&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;アンロックに費用がかかる、といような話は今のところ聞いてない。多分タダ。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;以上、このようにVerizonのiPhone 4Sは現状かなりいい選択肢のようですよ!&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;合わせて読みたい→&lt;a href="http://blog.niw.at/post/11471638009"&gt;米国でのiPhone 4S事情&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;&lt;em&gt;10/26, 2011更新&lt;/em&gt; 正しいAPNの設定は必要ですが、なんの問題もなく通信、通話ともNTT DOCOMOで利用できています。&lt;/p&gt;</description><link>http://blog.niw.at/post/11647586896</link><guid>http://blog.niw.at/post/11647586896</guid><pubDate>Wed, 19 Oct 2011 01:11:00 -0700</pubDate></item><item><title>ようこそ、税金地獄へ!</title><description>&lt;p&gt;先日iPhone 4Sなどを買いました。&lt;/p&gt;

&lt;p&gt;電話会社やAppleは16Gの&lt;a href="http://www.verizonwireless.com/b2c/splash/iphone.jsp"&gt;iPhone 4Sは$199.99&lt;/a&gt;と謳っています。
ということはまあ$200ちょいで買えるかな、と思いますよね?
まさかそんなアマちゃんじゃありませんよ。&lt;/p&gt;

&lt;p&gt;さてここで米国はカリフォルニア州サンフランシスコ市の消費税についてお話ししましょう。そうです、カリフォルニア州は市によって税率が異なります。簡単に、乱暴に言えば&lt;em&gt;約10%&lt;/em&gt;です。2011年10月現在は正確に言うと&lt;a href="http://www.boe.ca.gov/cgi-bin/rates.cgi?LETTER=S&amp;LIST=COUNTY"&gt;サンフランシスコ市では8.5%&lt;/a&gt;ですが、この間までは9.5%だった気がします。
ということは、iPhone 4Sは$217くらい? と思うわけですが、実際は&lt;em&gt;$255近く&lt;/em&gt;必要となります。&lt;/p&gt;

&lt;p&gt;何故…&lt;/p&gt;

&lt;p&gt;実はこれ、元の本体価格、つまりこの赤い電話会社では$649.99なんですが、それに対する消費税が加算されているですね。つまり、2年契約で$199.99になる$450の値引きは本体値段だけにしか効かないから税金のことなんか知らないよ、と。当たり前っちゃあ当たり前なんですが…
つまり、消費税は元の値段に対する8.5%で$55.25となり、$199.99に$55.25を加えてはい、$255.24ね、と言うわけです。&lt;/p&gt;

&lt;p&gt;まあ些細な額っていえばそうなのかもしれないですけど、解せないでよねー。
実は所得税はもっとすごいことになってるんですが… それはまたの機会に。&lt;/p&gt;

&lt;p&gt;というわけで。ようこそ、&lt;em&gt;税金地獄へ!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ちなみに、日本では税込表示がルールなのでこういうことはあまり起こらないですね。あと、日本も消費税率を10%にするとかしないとかそういう話があるみたいですね。&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;合わせて読みたい→&lt;a href="http://blog.niw.at/post/11471638009/"&gt;米国でのiPhone 4S事情&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/11607262719</link><guid>http://blog.niw.at/post/11607262719</guid><pubDate>Tue, 18 Oct 2011 01:41:00 -0700</pubDate></item><item><title>ふえるアドレス帳のアイコンちゃん</title><description>&lt;p&gt;Mac OS Xのアドレス帳にはかなり前からバグというか残念な挙動があって、登録されている人のアイコンを変えるとアイコン画像がどんどん増えてゴミとして溜まっていく問題があります。&lt;/p&gt;

&lt;p&gt;試しに、アイコンが入ってるフォルダのファイル数を数えてみましょう。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ find ~/Library/Application\ Support/AddressBook/Images/ \
  -type f|wc -l
# iCloudを使っている場合はちょっと場所が違うのでこんな感じ
$ find ~/Library/Application\ Support/AddressBook/Sources/*/Images \
  -type f|wc -l 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;なんか凄まじい数字が表示されますよね。登録されてる全件数よりも多いとか。
じつはこれゴミで、どうやらアイコンを更新したりアドレス帳マージしたりしても古いのが消えないようです。というわけで、これを綺麗にするスクリプトを紹介。&lt;/p&gt;

&lt;p&gt;まず、Rubyで実装したのは&lt;a href="https://gist.github.com/635904"&gt;これ&lt;/a&gt;。&lt;code&gt;sqlite3-ruby&lt;/code&gt;が必要です。
もうひとつ、シェルスクリプトで実装したのは&lt;a href="https://gist.github.com/1292227"&gt;これ&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;どちらも&lt;code&gt;AddressBook-v22.abcddb&lt;/code&gt;があるフォルダに移動してから実行してください。こんな感じ。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd ~/Library/Application\ Support/AddressBook
$ sh sweep_addressbook_images.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;面倒ですねー。
残念ながらこういうゴミが残るアプリってのは世の中に多いので適宜対応していくしかないですね。
それでは引き続き快適なアドレス帳ライフを!!&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;あわせて読みたい → &lt;a href="http://blog.niw.at/post/11426937144"&gt;アドレス帳を整理したいっ&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.niw.at/post/11565903390</link><guid>http://blog.niw.at/post/11565903390</guid><pubDate>Mon, 17 Oct 2011 02:01:00 -0700</pubDate></item></channel></rss>

