mootoh.log
HOT CHIPS Tutorial
- 2008-08-26 (Tue)
HOT CHIPS 20 のゼロ日目、チュートリアルに参加してきました。Stanfordは素晴しいですね。
It’s the Memory, Stupid
マルチコアになって何がたいへんかというと、実はメモリなんだ! というのが斬新でした。 コアが増えるにつれメモリへのアクセスがどっと混むので、帯域が問題になる。マルチコア時代にはレイテンシを下げないといけなくて、メニーコアになるにつれスループットがネックになってくる。 キャッシュの階層を増やすなどして、レイテンシを隠す。3D スタッキングのようなアクロバティックな技術をつかってコアとメモリの距離を近づけてあげる。
CUDAというNVIDIAの並列プログラミングモデルでは、メモリ階層のことをかなり意識して書かないと、ちゃんと速くならない。データがGPUコアの中にあるのか、スクラッチパッドにあるのか、コア間の共有メモリにあるのか、それともDRAMにあるのか。 いかにも最高性能を目指すゲームプログラミング向きだなーと。それに対して Larrabee ではコンパイラやライブラリにそうした泥臭い作業を任せる。プログラマはロジックとアルゴリズムに集中できる。ただし性能がどうなるかは分かりませんね。
とにかくStanfordのキャンパスはすばらしかった。広くて重厚ですね。 なんとかして入れないものか。
- Comments: 0
- Trackbacks: 0
-
Github Tシャツ共同購入しませんか
- 2008-08-26 (Tue)
Github Tシャツ なるものがあるらしいです。 かっこいい! 背中にIDを油性ペンで書き込むのだ!!
で、値段は $22 なのですが送料が $11 かかります。 安いもんなんですが、ちょっとでも節約したいですよねJK。 いっしょに買いませんか?
数人あつまったら決行しましょう。
受け渡し
なにかの勉強会/カンファレンスのときに受け渡してもよいですし、受け渡し会をやってもよいです。
方法
gist:7099 を fork してください。
2008.08.26 追記: gist がなんだか調子悪いので、コメントくださるかはてぶるなどして参加表明ください。
賛同者
Twitterで深夜に呼びかけて4人集まりました。Twitterすごい。
2008.08.26 追記: 2345名捕獲しました。
- @kei_os
- @swdyh : S
- @technohippy
- @mickey24 : M : 11
- @kajidai
- Comments: 1
- Trackbacks: 0
-
IDF
- 2008-08-25 (Mon)
Intel Developer Forum 2008 Fall に参加してきました。 世間的にはNehalemとかAtomが目玉でしたが、ここでは Concurrency に絞って振り返ってみます。
2つの世界
並列で書く世界になるとプログラマは2つに分かれる:
- 下回りに並列化はまかせてロジックに集中する上流階級
- 並列プログラミングモデルで細かい並列記述をがしがし書いて、最高の性能を引き出そうとする低レイヤ野郎
高水準言語とアセンブラとの関係と相似ですね。 上流階級が7割を占めて、ゲームやグラフィックス、組み込みといった低レイヤのひとたちが3割くらいでしょうか。 上流階級はデータ並列のプログラミングモデルであり、低レイヤはタスク並列も使い倒す。
これからは並列プログラミングができないと、コアが増えてプロセッサが速くなっても恩恵を受けれませんよ! というアジテーション。 Intelのツールをいま使えば、将来コアが増えても自動的にちゃーんとスケールするので使ってよ、という分かりやすいストーリーですね。Intelは下回りのツールを提供するので、みなさんは上流階級をエンジョイしてくださいね、というスタンスで、それはどう聞いてもベストの道なんだけど果たしてそううまくいくかどうか。
並列プログラミングモデル
TBB (Threading Building Blocks) がいますぐ使えるツールとしてあり、研究中のプロジェクトとして Ct がある。 いずれも C/C++ をベースとしていて、関数型ライクに並列プログラムを書ける。
並列プログラミング、特にデータ並列には関数型というか高階関数で書ける言語が向いているそうな。Map Reduce なんかもそうですよね。
アプリケーション
今見えているアプリケーション例として、よりきれいなグラフィックスのレンダリングとか物理シミュレーションなどがあがっていました。 いかにも計算量が必要そうなもの。 でも、ふつうのユーザはそんな計算量を必要とするんだろうか。 ふつうのユーザのコンピューティング環境はモバイルに移行しているというこの時に。
モバイルでこそマルチコアは生きてきますよね。低消費電力で高性能になるはずなので。 そこでいかに高速で電力効率の良いプログラムを書くことができるかが大切になってくるのでは。
Larrabee
Larrabeeはフリーダムすぎてすごい。なんとも遊びがいがありそうです。 ぱっと見たかんじはCellっぽいんだけどプログラマが楽をできるような工夫がこらされていて涙が出る。
それぞれのx86コアではμOSのようなものが動いているんだけど、これも自分で書けるそうな。 オレオレ分散OSが1チップで動く時代ですよ。たのしい。
LarrabeeはCPUなの? GPUなの? という質問をしている人がいて、「Larrabeeは革命的なプロセッサなんだ!」と答えていたのが印象的だった。 Larrabeeやばい。
難しさ
並列プログラミングでむずかしいのは、非決定性 (実行するたびに動作が変わる) とそれにまつわるデバッグです。 プログラム中のある行にブレークポイントを張ってデバッガで捕まえたとしても、他のコアの実行は非決定的なので、再現させるのが難しい。 その他の問題 (スケーラビリティ、同期など) については解決してきたけれど、非決定性についてはまだ決め手がない。 ブレークスルーが求められています。
Continuation
カンファレンスというのは一回行っただけでは本当のところは分からない。 何度か連続していくことでトレンドが見えてくるものですね。
ひとことでまとめると、英語がんばろうということでした… ><
まとまってないメモは以下:
- Comments: 0
- Trackbacks: 0
-
SIGGRAPH 2008
- 2008-08-17 (Sun)
SIGGRAPH2008 に参加してきました。Connecting the Dots を感じた一週間でした。
Parallelism
ぼくは市井のしがない並列プログラマなので、GPGPU/CUDA/OpenCL/Larrabee の動向をウォッチするのがミッションでした。そのへんが既にSIGGRAPH的ではありませんが… 今回来たのは当たりだったと思います。なかなかマルチ/メニーコアを特集している学会はなく、各ベンダが主催するイベントで情報を集めているのが現状なので、まとめて見れたのはよかった。
OpenCL/Larrabeeについては初発表だったこともあってたくさんの人が集まっていました。世間の関心が伺えます。
簡単にこの分野のテクノロジーを表にしてみました。
この分野はいまが旬で、来年になったら新しい話はなくなっているのかなあと感じます。今はたくさんプラットフォームがあって、プログラミングモデルが乱立しているけれど、近いうちに淘汰されて1つか2つにまとまっていくことでしょう。そのとき覇権をとるのはどれか。 マルチプラットフォームで、プログラミングしやすいものが支持を得ることはあたりまえですね。OpenCLが有望だと思うのですが、果たしてそうなれるか。
Graphics
4年前はぼくもGraphics屋さんだったのでした。Volume Rendering っていう分野があって、Cell Projectionというアルゴリズムを並列化したよ、という論文を書いたりしていたのです。
何の気なしに聴いていたセッションで、ばりばりの Volume Rendering 話をしている人がいて、おおお懐しいぞこれは! と聴いていたらその人が Kwan-Liu Ma という大御所だと発表の最後で知ってのけぞった。実装してるとき、論文書いてるときに何度も参照してた論文の人が目の前でしゃべってる… ロックスターを目撃したようなものです。
続く発表では、その Volume Rendering がいかに医療の現場で役立っているか、というのを感動的な事例を基に病院のひとが話していた。衝撃でした。自分では、これ何の役に立つんだろう? と思いながら研究していたものが、真剣にやっているひとのところではちゃんと人の命を救っている。
同じ時間をつかうなら、純粋に時間を溝に捨てるようなことばかりしていないで、たくさんの人のためになるようなことに取り組まないと!
インタラクション, インターフェイス
New Tech ていう展示ではインタラクティブな何かがたくさんあって楽しめました。AVRとかすごい未来っぽい。 昔からずっとインタラクティブな何かワナビーなんですよね。いまだにそっち方面に行くことはないのですが…
現地で、Twitterで知り合った @atusi さんと @sonson_twit とごはんを食べたりだべったりしました。 会場の情報をシェアしたり、お互いのバックグラウンドについて話し合ったりしたのは貴重な体験でした。1人でほそぼそと過ごすだけだったはずの一週間がずいぶんとカラフルになったのは、Twitterがあったからこそです。Twitterはぼくの現実を拡張している。
Connecting the Dots
いまは並列プログラミングを食い扶持としていますが、その昔は画像処理をやってたり、レンダラを書いてたり、ユーザーインターフェイスワナビーしたりしてました。なんともばらばらなことやってきたもんです。でも今回それらの経験がちゃんと生きてることを感じられました。巨大なレンダリングには並列計算が要るし、画像処理とレンダリングはいとこみたいなものだ。関心をもって調べまわっていたことは、だれかのアンテナにひっかかる。自分のやってきたことはどこかで今につながる。
- Comments: 0
- Trackbacks: 0
-
VimM その1 に参加してきた
- 2008-07-21 (Mon)
関東にいるVim好きの集まりであるVimMに参加してきました。ついでに15分ほどしゃべった。
なぜ私は10年間Vimを使い続けているのか (PDF)
タイトルは釣りで、じっさいは Vim のソースをかるい気持ちで読んでみよう、というライブコードリーディングでした。 分かりあえるようになるには、まずお互いのことをよく知ることからですよね。
実行中のVimにgdbでアタッチして動きをみるという動的読みをしました。
つかった Vim のソースは、svn:vim7@1070 。
gdb vim pid のイディオムを知らない方が何人かいたようでしたので、これを機にgdbをキメることをおすすめします。
懇親会はVimでつながることの多様性を感じ、二次会では渋谷の魑魅魍魎に蹂躙されるなどしてたいへん楽しめました。主宰のHashさん、ありがとうございました。
いまはブロンズ聖闘士程度ですが、関東Vim四天王の座を狙って精進しようとおもいます。
IRCのログ
いちおう名前伏せで。
15:12:39 m***** はじまるですよ
15:12:40 H*** sorosoro
15:13:18 k*** 10ねん!
15:13:27 u****** wwwwwwwwwwwwwwwwwwwwwwww
15:13:27 k*** おい
15:13:30 r****** www
15:13:30 k*** oiwww
15:13:31 t*** wwww
15:13:31 t****** wwwww
15:13:33 u****** wwwwwwwwwwwwwwwwwwwwwww
15:13:40 k*** うぇーえーl!?
15:13:49 k***** chowww
15:14:00 k*** おおー
15:14:05 r****** oo
15:14:07 k***** oo
15:14:09 a***** emacsで行番号ってどうやって表示すんの?
15:14:48 k*** 37万行ぐらい読める(id:mootoh)
15:15:18 k*** ed→ex→vi→Vim
15:15:26 u****** 「37万行なら読むのに三日はかかりますね」(上野氏)
15:18:08 r****** gdbだけEmacsうらやましい。clewn、vimgdbもそれなりだけど
15:18:21 k*** 一応、バージョン番号は明示しておいた方が良いと思います。Vim 7.1.330等。
15:18:26 u****** 拡大縮小が酔うよー
15:18:51 k*** 関数単位なら良いですけど行番号は微妙にずれます
15:19:05 u****** mootohと書いたらgrowlとかでてくるかな
15:19:52 u****** 心臓の鼓動みたい
15:19:56 u****** > 拡大縮小
15:19:58 H*** ふぉーかすがひどいな
15:20:04 H*** しょうめんにいく
15:20:41 u****** {}++
15:20:59 u****** は***は精神的貴族
15:21:11 t*** h***++
15:21:15 H*** ふぉかすじちょう
15:21:21 r****** h***++
15:21:26 u****** ふぉぉぉかすぅぅぅぅ
15:21:33 u****** もうやめて! オレのライフは0よ!
15:21:38 t*** フォーカス--
15:21:49 y****** focus
15:22:04 u****** おもったんだけど
15:22:05 f********** 手動フォーカスにできねーの
15:22:08 r****** fmfm
15:22:11 f********** fmfm
15:22:16 u****** フォーカスが走った瞬間にH**が逆方向にカメラを動かせばいいんじゃね
15:22:18 k***** fmfm
15:22:20 t*** fmfm...?
15:22:28 H*** それなんてJOJO
15:24:22 r****** 8888
15:24:24 k*** 88888888
15:24:27 k***** 888888
15:24:28 t*** 888888
15:24:34 t****** 8888
15:24:34 k*** Operator関連のコードは魔界村
15:24:38 u**** 888
15:25:49 s***** gdb Vim `ps xa | grep '/Applications/Vim' | cut -f 1 -d ' '`
15:26:42 u****** 大阪のVim勉強会#3では本体のソースよみますか
15:26:47 k*** Vim プチハックのメモ - http://www.k3.dion.ne.jp/~jod/vimhack.html
15:27:35 b********** vimのundoはブランチがつくれる?
15:27:37 k*** ノシ
15:27:37 m******* undo.cのコメントが凄い。
15:27:41 k*** :help undotree
15:27:43 r****** undoブランチ使いこなせてない
15:27:53 k*** matigaeta
15:27:56 k*** :help undo-tree
15:28:04 m***** アン ドゥ トロワ
15:28:12 b********** へー
15:28:28 u****** 888888888
15:28:29 r****** 8888
15:28:32 t*** 88888
- Comments: 0
- Trackbacks: 1
-
Google Code Jam 2008 Qualification Round
- 2008-07-19 (Sat)
Google Code Jam 2008 に参加してます。
Qualification Round は A,B を解いて Score:50、Rank:2246 でした。Cむずいよ。 Rubyで書いてます。irbがつかえるこの幸せ。 irbでインタラクティブにデバッグしつつ、本番の入出力をケアするためのコードを最終行にいれてます。
A. Saving the Universe
さいしょ、レポートの出力形式を間違っていて (#0から出力してた)、なんでこれで違うんだろうと首をかしげてた。1回ぶんのmiss submit。
戦略は以下:
- 入力を先頭から順になめて、エンジンを set に追加
- すべてのエンジンが set にはいったら、カウンタをあげて、setをリセット
電車の中で、この単純な解法に気づいたときはうれしかった。
#!/usr/bin/env ruby # Saving the Universe # at Google Code Jam 2008, QR A # # use Ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] # # author:mootoh # require 'logger' $log = Logger.new(STDOUT) $log.level = Logger::ERROR $log.datetime_format = '' def test(engines, queries) state = [] count = 0 queries.each do |query| state.push query state.uniq! if state.size == engines.size $log.debug("change !") count += 1 state = [query] end $log.debug(state) end count.to_s end def main(file) n = file.gets.chomp.to_i n.times do |i| s = file.gets.chomp.to_i engines = [] s.times {|j| engines.push file.gets.chomp} q = file.gets.chomp.to_i queries = [] q.times {|k| queries.push file.gets.chomp} puts "Case ##{i+1}: " + test(engines, queries) end end main(ARGF) unless $PROGRAM_NAME == 'irb'
Train Timetable
これも電車で解いた。 オブジェクト指向っぽく考えてたら、できそうな気がして。 遅いけど、実行時間は今回問われてないのでおk。
#!/usr/bin/env ruby # Train Timetable # at Google Code Jam 2008, QR B # # use Ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] # # author:mootoh # require 'logger' $log = Logger.new(STDOUT) $log.level = Logger::ERROR $log.datetime_format = '' class Arrow attr_accessor :from, :to def initialize(from, to) @from = from; @to = to end def start_at?(at) @from == at end def to_s; "#{from} -> #{to}"; end def inspect; to_s; end end # Arrow class Train attr_accessor :available_at def Train.tt=(x); @@tt = x; end def Train.tt; @@tt; end def initialize(at) @available_at = at end def departure(to) @available_at = to + @@tt end def to_s; "Train@:#{@available_at}"; end def inspect; to_s; end end # Train class Station attr_accessor :trains, :arrows, :count def initialize(arrows) @trains = [] @arrows = arrows @count = 0 end def train_available_at(at) t = @trains.find { |train| train.available_at <= at } if t @trains.delete(t) t else @count += 1 Train.new(at) end end def to_s 'Station: ' + [ @trains.map {|x| x.to_s}, @arrows.map {|x| x.to_s}, @count.to_s ].join(' : ') end def inspect; to_s; end end # Station def parse(n, file) ret = [] n.times do |i| x = file.gets.chomp.split(/\s+/).map do |x| h, m = x.split(/:/).map {|y| y.to_i} h * 60 + m end ret.push Arrow.new(x[0], x[1]) end ret end def main(file) n = file.gets.chomp.to_i n.times do |j| tt = file.gets.chomp.to_i Train.tt = tt na, nb = file.gets.chomp.split(/\s+/).map {|x| x.to_i} arrows = [na,nb].map {|x| parse(x, file)} starts = (arrows[0] + arrows[1]).map {|x| x.from}.sort.uniq stations = arrows.map {|x| Station.new(x)} starts.each do |start| $log.debug("start at #{start} --------------------") 2.times do |i| st_i = stations[i] st_o = stations[(i+1)%2] departures = st_i.arrows.find_all {|x| x.start_at?(start)} $log.debug("departures=#{departures.size}") departures.each do |d| train = st_i.train_available_at(start) train.departure(d.to) st_o.trains.push train $log.debug(train) end st_i.arrows -= departures $log.debug("#{i == 0 ? 'A' : 'B'}: #{st_i}") $log.debug("#{i == 0 ? 'B' : 'A'}: #{st_o}") end $log.debug('------------------------------------') end puts "Case ##{j+1}: #{stations[0].count} #{stations[1].count}" end end main(ARGF) unless $PROGRAM_NAME == 'irb'
つぎからが本番ですね。がんばろう。
- Comments: 0
- Trackbacks: 0
-
iPhoneで欲しいソフト
- 2008-07-13 (Sun)
初日に買えなくて泣いたこともありましたが、かくかくしかじかで、2日目にしてなんとかiPhoneを買えました。iPhoneで日焼けした。 さっそくiPhone充を満喫しているうちに、欲しいというかつくりたいものがわんさか湧いてきたのでリストアップしてみます。
下まわり
- モデム: Macとつないだときにモデムとして振るまってほしい。べつにBluetoothじゃなくてもいいよ。
- 日本語入力: モーションセンサーを利用したSKKとかおもしろそう。
クライアントアプリ
- Twitterクライアント
- IRCクライアント
- PDFビューア
- テキストファイルビューア
- Last.fm か muxtape を聴けるアプリ
- ブログエディタ
- Remember the Milk クライアント : 本家のはProアカウントが必要
- mixiクライアント
プログラミング環境
- Vim
- Terminal
いや、べつにTerminalでiPhoneの中にフルアクセスできなくてもいいから、REPL環境だけは欲しい。どこでもプログラミングしたい。
こういうふうに、デスクトップ/ノートの延長で思考するのがそもそも時代遅れなのかもしれませんね。 既存のアイデアをiPhoneにそのままもっていっても仕方ないし、 iPhoneというデバイスに適したアプリケーションのかたちをつくっていくべきなのかも。
- Comments: 0
- Trackbacks: 0
-
WEwLC 読書会 #2 に行ってきた
- 2008-07-06 (Sun)
WEwLC読書会 その2 に行き、7章を発表してきました。
- 資料 : 上のモレスキンマインドマップw
- Lingrのログ
ホワイトボード
前日まで、8章が担当だったと思い込んでいたせいもあり、資料をつくれずじまいだったのでホワイトボードにゆるいマインドマップを書いたりしながら話しました。 ホワイトボードに書きながら説明するというのは、うまくやれればとてもインタラクティブで良いと思うんですよね。読書会においてはとくに。
スライドをつくってみんなに発表、というのもいいのですが、せっかく本を持ち寄ってみんなで議論するのだし、発表者はあくまでもガイド役に徹した方がよいのかも。 概念図だけをスライドにしておいて、あとはその場でホワイトボードなりに描きながら議論していくと楽しそうです。
とはいえ今回はうまくできなかったので、もっとホワイトボードテクニックを磨きたいと思います。
ぼくが読書会でやりたいことってなんだろう、と考えてみると、
- そのときのテーマについて自分が困っていることを話す
- 他のひと、現場の生の声を共有する
とかですね。WEwLC読書会は、こうしたことができる、良い場だと思います。
懇親会
という名のExcelカンファレンス 第0会が行われました。 Excel SUGEEEE な話を4時間くらいぶっとおし。 次の技術的イベントに参加するときには、「Excelから来ました」と言えるくらい技術を見につけていたいと思います。
メモ:
- SilverlightのDLRはやばい
- IronScheme は名前勝ち
- ふつうのExcelハッカーはTDDでExcel VBAを書く
- 気の利いたExcelハッカーはOLEでIEコンポーネントを埋め込んだタブ(シート)ブラウザを書く
- 真のExcelzハッカーはソケット通信でP2Pのコードを書く
- Excel VBA 使ってていいのは小学生までだよねー
- いるか (or 冴子先生) ハック
- 第一回Excelカンファレンスが開催される流れ
- Excelカンファレンスは、「経理から来ました」とかいうような日本に埋ずもれている幾多のハッカーを発掘できる良い機会になる
- Excel内Twitterクライアントが全世界に普及すると、あまりの負荷でTwitterにカタストロフィが起きる
と、大変有意義な会でした。みなさまありがとうございました。
- Comments: 0
- Trackbacks: 1
-
Twitterクライアント作者ミーティングに行ってきた
- 2008-07-06 (Sun)

夏ライオン作者のakrさんが煽ったWassrTwitterクライアント作者ミーティングに参加してきました。勢いで二次会までいた。
ほとんどTwitterの話はしてなかったんだけど、クライアントづくりというつながりでいろんな人が集まることができるTwitterはやっぱり素晴しいプラットフォームなんだな。
あんなにたくさんの人がいたのにほんの数人の方としか話せなかった。 次の機会が待たれますね。
記憶の断片:
- twjの人とwassrの中の人が隣同士に座ってた
- これからはマルチポストクライアントの時代。マルチポストモダン
- Jabber PubSub がアツい
- iPhone development XXXXs!
- Objective-CかわいいよObjective-C
- Twitterシールもらった
- 二次会ではSCMについてのまじめトークの傍ら、カラオケで吉幾三が歌われていた
- Twitter作者の男:女比率 (Tokyo/Japan) は 100:0
みなさま、ではまた!
- Comments: 0
- Trackbacks: 0
-
QSWassr
- 2008-07-03 (Thu)
さいきんのTwitterの狼藉には目が余るわッッ! wassr やろうぜ!! みたいな意見をよく目にするようになったので、QSTwitterのwassr版、QSWassrをつくってみました。15分間ハッキング。
やったこと
ほとんど s/twitter.com/api.wassr.jp/gなだけです。APIのエンドポイントを差し替えただけですね。QSTwitterは送信専用クライアントなので、おきらくでした。
とってもダーティなハック (following処理とかtwitterのがそのまま残ってる) なのですが、とりあえずでも動くものがあるほうがよいと思って公開しています。
興味をもたれた物好きな方は、ためしてみてください。
つかいかた
インストール方法、トリガーの設定方法なんかは、QSTwitterのやり方がほとんどそのまま使えます (s/QSTwitter/QSWassr/に注意)。
注意
QSTwitterといっしょに動かせません。 どういうわけか、Quicksilverのプラグインとして、RubyCocoaで書かれたものが複数存在できないようなのです (軽く調べた程度でですが)。
今後
やるとすれば。
- QSTwitterと融合
- Twitter, wassr の (両方に | 選択的に) ポストできるように
- そうすると、ほかのミニブログとも融合したいところ
- following対応
- 融合させた場合も、ちゃんとTwitter,wassrそれぞれのfollowingをうまく扱えるようにしたい
その他
ミニブログを移ると、これまで築いてきたfollow関係がもっていけないから… と躊躇しがちですが、そこはそれ、心機一転すっきりと人間関係をつくりなおすのも面白いとおもいます。ナンバーポータビリティなんか気にしない! 人間関係は定期的にリセットするんだ! 的な心情ですね。
まとめ
wassrはTwitter ライクなAPIをもってるので、Twitterクライアントをつくってるひとは対応してみては! (夏ラ希望)
- Comments: 4
- Trackbacks: 0
-












