Rubellum fly light

ほぼPHP日記

Ubuntu(11.04)にmikutterをインストールした(RVM)

今までLinuxTwitterクライアントとしてSaezuriやTweetDeckを使っていたのですが、
Linux版のAdobe AIRのサポートが終了してしまったため、新たにクライアントを探すことに。
いろいろ探してみた結果、mikutterが良い感じだったのでインストールしたよ、というお話。

環境

OS:Ubuntu 11.04 (64bit)
Ruby: ruby 1.9.3-p0 (RVM)


mikutterのHPでは、Rubyの動作条件が「1.8.7 or 1.9.1 or 1.9.2」となっていますが、
1.9.3でもたぶんきっと絶対なんとかなるでしょう。

インストール

RVMのインストールは省略します。


gtk2をインストール。

$ sudo apt-get install libgtk2.0-dev


gtk+(gem)をインストール。

$ gem install gtk+


mikutterをダウンロード。
安定版はそんなものなかった状態なので、最新の不安定版をダウンロード。
mikutter
解凍して「ruby mikutter.rb」で実行。
インストーラ? なんですか、それ。


ランチャーに登録したかったのですが、やり方がよくわからなかったので、
いちいち端末から実行しています。

さいごに

mikutterはソースコードもエンターテイメントですね!

au版iPhoneのezwebメールで即受信通知する方法

au版iPhoneではezwebメールの受信間隔が最大で15分程度ある。
そこでもっとはやく通知できる方法をないかなぁと探してみた(メールとか別に来ないんですけどね、はぁ…)。
んでどうやら「ezwebメールをBoxcarの通知用メールアドレスに自動転送して通知する方法」が簡単かつ早かったので(10秒かからないくらい)、以下そのやり方。

方法

Boxcarの設定

AppStoreから「Boxcar」で検索してインストール。
起動したら「Add a Service」を選択。
「Email Account」を選び、特に何もせず右上の「Save」。
「My Email」を選択し、右上の「Edit」ボタンを押す。
メニューの「Your Forwarding Address is:〜」に書かれているメールアドレスを覚えておく。

ezwebメールの自動転送設定

次に自動転送の設定。まずメール設定のアドレスを取得する。
iPhoneアプリの「メッセージ」(SMS?)で「#5000」宛に本文「1234」で送信。
するとURLが送られてくるのでアクセス。
このときWi-fiで接続してると「ページが開けません」と出てくるので3Gで接続しましょう。
ページを開いたら以下の通りにすすめる。
「メールアドレス変更・その他の設定」→「自動転送先」→暗証番号の入力(買ったときに書いたアレ)→フォームに先ほどのBoxcarのアドレスを入力し「送信」→完了画面。


以上です。
てけとうにメールを送信して確認してみてください。

さいごに

この方法だとBoxcar側に全部メールが転送されるので、国家機密バリのメールを受信する人は注意が必要ですね><

2011年10月に読んだ本

小説

10/1 告白
 登場人物の告白という形(回想チック)なのでスイスイ読めて、しかも面白かった。
 教室にあるはずの平和な日常が全然ないよこの学級。
10/14 とある飛空士への追憶
 次期女王の姫さまと一介の飛空士による長距離飛行。
 このせっていだけでよだれがじゅるり。
 展開はオーソドックスだったなぁ。
10/16 ジウ
 文庫3冊の重量級。ひたすらバイオレンス。
 歌舞伎町がアレします。
10/30 シャングリ・ラ
 超おもしろい。
 後半の超展開が超展開すぎて超展開。
 特に小夜子さんの活躍がマジぱねぇ。
 あと美邦こえぇ。

BrainfuckでGPGPU!

GPGPUできるBrainfuckをCUDAで実装してみました。
このBrainfuckを使用すると、SIMDな並列演算を行うことができます。
並列演算用の命令を2つ追加してるので純粋なBrainf*ckではないですね、はい。

拡張命令

記号を2つ追加しました。

記号 説明
{ 並列演算の開始.ポインタの指す要素分だけスレッドを用意
} 並列演算の終了

大雑把な説明

基本的に中括弧で囲まれた命令が並列実行されます。

+++{+ー+}>.  # 「+-+」が並列に実行されます

「{」命令が実行されると、ポインタが指している要素の値分だけスレッドが用意されます。

↓           
+++{+ー+}>.  |→0|0|0|0|

 ↓          
+++{+ー+}>.  |→1|0|0|0|

  ↓         
+++{+ー+}>.  |→2|0|0|0|

   ↓      
+++{+ー+}>.  |→3|0|0|0|  この場合3個のスレッドで実行するよ!

並列演算の実行時にスレッドが作られ、スレッドごとにメモリが用意されます。
このメモリはGPU上のメモリで、メインメモリからは独立してます(デバイスメモリ)。
メモリの先頭にはスレッドIDが格納されます。
スレッドIDとは「0〜スレッド数-1」の通し番号でスレッドを識別するものです。

↓    スレッドID=0  |→0|0| スレッドごとにメモリが用意される
↓    スレッドID=1  |→1|0|  先頭にはスレッドIDが格納
↓    スレッドID=2  |→2|0|
+ー+}  

スレッドは並列に実行されます。
「}」は終了マークです。

              
↓    スレッドID=0  |→0|0|
↓    スレッドID=1  |→1|0|
↓    スレッドID=2  |→2|0|
+ー+}

              
 ↓   スレッドID=0  |→1|0|
 ↓   スレッドID=1  |→2|0|
 ↓   スレッドID=2  |→3|0|
+ー+}

              
  ↓  スレッドID=0  |→0|0|
  ↓  スレッドID=1  |→1|0|
  ↓  スレッドID=2  |→2|0|
+ー+}

              
   ↓ スレッドID=0  |→1|0|
   ↓ スレッドID=1  |→2|0|
   ↓ スレッドID=2  |→3|0|
+ー+}

命令は共通の領域に保存されていますが、スレッドごとに違う命令も実行できます。

↓    スレッドID=0  |4|7|  こんな状況でもOK
 ↓   スレッドID=1  |5|8|
  ↓  スレッドID=2  |6|9|
+++

最終的にポインタが指している値をメインメモリにスレッドID順でコピーします。

              
   ↓ スレッドID=0  |→1|0|
   ↓ スレッドID=1  |→2|0|
   ↓ スレッドID=2  |→3|0|
+ー+}

# 並列演算の終了後

+++{+ー+}>.  |→3|1|2|3|  スレッド数の後ろに結果(1,2,3)がコピーされる.

あとはよしなに結果を使います。

実行例

一応簡単なサンプルコードだけ。
CUDAを使っているので、実行するにはNVIDIAのグラフィックボードが必要になります。

1. abcと出力するプログラム。

3個のスレッド(ID=0, 1, 2)に対して、中括弧内で97(10*10-3, つまり'a')を足してます。

+++{>++++++++++[<++++++++++>-]<---}.>.>.>.
abc
2. 'a'〜'z'を表示するプログラム。

スレッドを26個用意→スレッドIDに'a'(97)を足す→出力。

>>+++[<+++++++++>-]<-{>>+++++++++[<++++++++++>-]<+++++++<[>+<-]>}[>.[-]<[->+<]>-]

内部、CUDA的なお話

疲れてきたので簡単な説明だけで許してくださいごめんなさい(オイ。
というか途中でいろいろ面倒になって実装自体がアレな事になってます(オイオイ。


スレッドブロックは1つしか使ってません。
スレッド数は(n, 1, 1)で実行されます。

// CUDAで例えるとこういうこと
dim3 grid(1,1);
dim3 block(n, 1, 1);

並列演算時のメモリはシェアードメモリです。
1次元配列ですが、2次元配列的に使ってます。
「スレッド数×スレッドあたりの最大メモリ(とりあえず32にしてある)」です。
メモリは縦に使っていきます。

 0 1 2 … n-1 ←スレッドID
↓↓↓ 下向きに進んでいく
|0|1|2|…|n-1|  memory[threadId][0]
|0|0|0|…| 0 |    memory[threadId][1]

メモリを縦に使うことにした理由は、(繰り返しの命令([ ])がなければ)アクセスする要素が連続した場所になるため高速になるだろうと考えたからです。
(シェアードメモリでは関係ないかも)

ソースコード

githubに置いておきました。
もうギブハラ(Github・ハラスメント)も怖くない!
https://github.com/rubellum/cuda-brainfuck

おわりに

最近はGPGPUってあんまり言わないらしい(GPUコンピューティング?)。
正直、実装するよりBrainf*ckのコード考えたり、ブログに説明を書いたりする方が大変でした。

iPhone4S料金メモ

てけとうなメモ。

2011年9月に読んだ本

9月は試験とレポート地獄♪

小説

9/10 禁涙境事件 / 上遠野浩平
9/11 月は幽咽のデバイス / 森博嗣
9/28 ソードアート・オンライン 1 / 川原礫
9/29 烙印の紋章 1 / 杉原智則


ここらへん見てソードアート・オンラインと烙印の紋章を買った。
俺TUEEE系はおもしろいね、やっぱ。
ミスマルカ興国物語、とある飛空士も読みたいなあ。

2011年8月に読んだ本

インターンやらコミケやらで8月前半はあんまり読めなかった。
ほとんどラノベな気がするなぁ…。
いや、気にするまい。

小説

8/1 紅〜醜悪際〜 / 片山憲太郎
8/1 愚者と愚者 / 打海文三
8/2 十二国記 華胥の幽夢 / 小野不由美
8/19 境界線上のホライゾン (1) / 川上稔
8/20 球形の季節 / 恩田陸
8/21 千里眼 ファントム・クォーター / 松岡圭祐
8/22 ラプンツェルの翼 (1) / 土橋真二郎
8/23 斜め屋敷の犯罪 / 島田荘司
8/23 ラプンツェルの翼 (2) / 土橋真二郎
8/24 φは壊れたね / 森博嗣
8/26 θは遊んでくれたよ / 森博嗣
8/31 紫骸城事件 / 上遠野浩平

漫画

血まみれスケバンチェーンソー (3) / 三家本礼