yaotti's diary

Software is Eating the World

FCRC(ISMM+PLDI)に参加した

SanJoseで開かれた2011 Federated Computing Research Conferenceに参加した.*1
FCRCというのはCS関係の学会が集まった,acmのお祭のようなもの.4年に1回開かれているらしい.
海外に行くのは2回目*2だけど2回ともCaliforniaのSanJose周りだなあ.
以下簡単なメモ.

ISMM

マルチコアなシステムを考えた論文が多いように感じた.マルチコア環境でのGCやキャッシュミス削減など.
局所性を強調しているプレゼンが多くて,本当に重要なのだなあと思った.知識として重要だと知っているのと,実際本当に効いてくることを知るのとは違う…
全体的に聞いていて面白かったのだけれど,特にキャッシュの話は楽しかったのでもしかするとそのあたりに一番興味があるのかもしれない.

PLDI

自動並列化はよいですね.何も考えずに書いたプログラムがコンパイラ/VMレイヤーで勝手に並列化される未来!
プレゼンでは詳しいことは理解できなかったのだけれどもメモリフェンスを自動で入れるというのが気になった.
興味の強さの違いか,PLDIは眠くて集中できないセッションが多かった…反省.


まとめ

メモリ管理が一番面白いと思える対象だと改めて思った,のだけれど…ISMMの論文投稿数や先生に聞いた感じでは,メモリ管理の研究は落ちついてきているみたい.
まあそれでも一番面白いと思える対象だし,必要とされなくなることも無い分野なので頑張りたいと思います.
ちょっと気になったのは,ISMMでもモバイルデバイスを対象とした論文がなかったこと.サーバーアプリとは違った制約があるから*3,あっても良さそうだと思うんだけどなあ.既存の研究を適用すればいいからなのか,まだそれほど取り組まれていないのか,どっちだろうか.
今回,面白そうな理論や論文をたくさん見つけたのでしばらく論文を読みまくることになりそうです:)

*1:論文を通したわけではないのだけれど,教授に同行させて頂いた.本当にありがたい…次は論文を通して胸を張って行きたい

*2:前回は[http://d.hatena.ne.jp/yaotti/searchdiary?word=%2A%5Bsvc09%5D:title=SVC]

*3:メモリはそれほど豊富にはないとか,ビュースレッドは止めちゃいけないけど他のスレッドはある程度止まってもよいとか

最近のこと

自分のページを見て,半年近く(去年末以来)ダイアリーを書いていないことに気付いてびっくりした.
なぜここまで書かなくなったんだろうと思って考えてみるといくつかの理由が思い当たった.

まず,今年最初に始めた"出来事や考えなどをテキストファイルに1日1ファイル単位でまとめていく"という記録活動が習慣化していて,
そのせいでdiaryを書こうという気持ちが弱くなっていたのかも.

$ wc -l ~/diary/2011/*/* | tail -1
5321 total

空行もあるけど,1日30行程度書いているらしい


もう1つの理由は,ちょっとした技術ノウハウをよく書いていたけれども何か不毛感というか重箱の隅つっつき感があり,
そんな記事ばかり書くのはどうなのか,と思い始めていたこと.
情報の価値は受け取り手が決めることだろうと思いつつ,一度その思いが浮かんでからはわざわざダイアリーに残そうという気にならなくなってきた.


しかし生駒日記のmamorukさんも"自分も過去は OS をインストールしたとか、ソフトウェアの設定ではまったとかばかり書いていた"とのことで,それはそれで通過点として(?)悪くはないのかもしれない.

最近やっていること

卒業研究

Androidの中身(Dalvik VM),メモリ管理まわりに手を加えていろいろやっている.
Dalvik VMのメモリ管理(dlmallocやGC)については一度まとめたいなと思っているけれどもいつになることやら…
GC本(下の本)で説明された時からバージョンアップ(Froyo->Gingerbread)した今のDalvik VMでは

  • precise GCができるようになっていたり
  • concurrent GCになっていたり
    • card tableを使ったmostly-concurrent M&S
  • Copy GCのコードが入ってたり
    • 入ってるだけ,使われてはいない&動かすこともできないけど…
    • オブジェクトを動かしたいんだろうなというのが伝わってくる

と面白い変更がいくつかあるのでまとめたい(と書いておけばまとめるはず).
GC本にはGCの基礎を学ぶ際にとてもお世話になりました.

ガベージコレクションのアルゴリズムと実装

ガベージコレクションのアルゴリズムと実装

webサービス開発

隙間時間を見付けつつ,友人と一緒に開発を進めていっている.(コードはほぼ全部僕が書いているけれど)
webサービスを自分で0から作るのは初めてなので,アルバイトでの機能開発とは違った楽しさがある.
アイディアとしては同じサービスが既にあるけれども,その分野にはGoogleTwitterのような巨人はまだおらず,
また自分の中で何度検証しても「これはいける」「必要とされるはず」と思える物なので満足のいくレベルまで作り込みたい.

輪講

Certified Programming with Dependent Typesというのを読んでいる.なかなか難しい.
Coqを理解していないことによる難しさと,論理学に明るくないことによる難しさがあるのかな…
論理学の教科書を引っ張り出して思い出しつつ進めている.
昔使ってた教科書を今改めて読んでみると,以前は知識を暗記し表面的に理解していただけで体系的な理解はできていなかったということがわかる.悲しい.


という感じの最近.これからも適当に日記を書いていこう.

2010年ふりかえり+2011年へ向けて

記事一覧 - (programmer? yaotti)Hiroshige Umino(@yaotti)/Archives - Twilogを見て思い出しながら簡単に振り返ってみた&ざっくりとした目標を立てた.来年の自分向けエントリ.

1月

手帳を使い始めたけどすぐに面倒になってやめた.今は普通のノート+Evernoteで落ち着いている.

2月

TopCoderの過去問を解くのにはまっていた.SRM参加してないなぁ.

3月

22歳になった.

4月

研究室に配属された(仮).今考えても研究室は自分にぴったりな所を選べたと思う.
Evernoteを使い始めた.いまでもけっこう使ってる.
NHKにちょっと出た.面白い体験だった.ディレクターっぽい人が「30秒考えさせてください」と言って内容をその場で考えていくのが印象的だった.

5月

NAISTのオープンキャンパスに行った.結局NAISTに行くことはなさそう.

6月

GC本を読んだりしていた.今年買って一番役立ってる本かも.

7月

インターンに行けることがが決まった.今年一番嬉しかった出来事.
C++書いたりしてた.yaotti/closxom · GitHubとか.

8月

インターン一ヶ月目.一言では言えない.色々面白い人達に会った.英語の必要性を身をもって痛感した.
ロードバイクを買った.
RubyKaigiに行った.

9月

インターン二ヶ月目.ちょっとしんどい時期だったけど,研究の大変さ+面白さを少し体験できた.1つのことをひたすらやるのは良い.
卒論テーマがGC関係のものに決まった.楽しい.
土日は一日かけてサイクリングしたり,日本科学未来館や展覧会(文化庁メディア芸術プラザ,NTTインターコミュニケーションセンターなど)に行ったりしていた.
9月に買ったジャグリングはいまだにちょくちょくやってる.

10月

10/1にインターンが終わった.8週間は短かった.自分に足りないところが明確になったのが大きかった.
卒論を開始した.

11月

MBAを購入した.とても快適.

12月

(JPerl|Emacs) Advent Calendar書いた.proveをうまく使ってテスト実行を効率化しよう - JPerl Advent Calendar 2010 Casual Trackanything関数を好きな言語で実装できるanything-with-everything.el (Emacs Advent Calendar 2010 8日目) - (programmer? yaotti)

一番大きかったのはインターンだなぁ.経験として大きいし,それで院進学を決めたというのもある.

2011年の(SMARTでない)目標

  • 卒論できちんと成果を出す
    • "The greatest pleasure in life is doing what people say you cannot do." (Walter Bagehot)
    • "期待されている事以上をやる"ということほど面白いことはない
  • 英語を身につける
    • TOEFLで100点を取る
    • 英語できないと話にならない,という思いが強くなりつつある
  • 時間管理をもっとうまくやる
    • 今年最初に比べるとずっと整理して行えるようにはなったけれども,まだまだ

2011年もどうぞよろしくお願いします.

プロジェクト内のファイルを絞り込んで操作するanything-git-project.el

今まであるプロジェクト内の別ファイルへの移動にはanything-project.elというのを使っていたのですが,

  • ファイルが多いプロジェクトだとちょっと遅い
  • .gitignoreで指定しているファイルも表示される
  • もうちょっといい感じに表示してほしい

という不満があったのでgit用の同じようなものを書きました.
List up all files under the control of git and do something (open/view/delete/etc) with them — Gist

Modified filesとUntracked filesは毎回更新してるので,ネットワーク越しとかだと重いかもしれません.
git使ってる人なら普通に便利だと思います.どうぞ.

Mac::FSEventsのインストール方法

普通にやるとこける+日本語で情報がないのでメモ
If your install of Mac::FSEvents doesnt work on Snow Leopard - Naruzo's blogにあるようにオプションを変えてやればいい.
以下を実行する

cpanm --look Mac::FSEvents
cp Makefile Makefile_orig
cat Makefile_orig | perl -ne 's/ppc/x86_64/g;print;'  > Makefile
make && make test && make install

anything関数を好きな言語で実装できるanything-with-everything.el (Emacs Advent Calendar 2010 8日目)

Emacs Advent Calendar jp: 2010の8日目の記事です.
7日目はid:moozさん(そうだ Info 読もう - mooz deceives you)でした.明日はid:rubikitchさんです.


この記事では,anythingをより身近に使えるようになるanything-with-everything.elというのを書いたので,その紹介をします.
yaotti/anything-with-everything.el · GitHub
インターフェースを少し変更


を受けて,関数名を文字列ではなくシンボルで渡すように変更しました.

(defun-anything-function-with-script
    anything-emacswiki-changes  ; "anything-emacswiki-changes"ではない
    "get-emacswiki-changes.pl")

これは何?

(そもそもanything.elって何?/Emacsユーザーだけど入れてない,という人はanything導入のeverything 〜3分で使えるanything.el〜 - (rubikitch loves (Emacs Ruby CUI Books))を読んでとりあえず導入して色々試してみましょう.anything-find-fileの代わりにanything-filelist+を使おう - (rubikitch loves (Emacs Ruby CUI Books))などは衝撃的だと思います.)

anything-with-everything.elというのは,anything関数をelisp以外で実装することを可能にするelispです.
anythingインターフェースはとても快適なので様々な面で使いたくなるのですが,ちょっと複雑なことをしようとするとelispがそこまで書けない/よくわからないのであきらめる,ということが多いと思います.
Web APIを叩いてパースしてあれこれやる,なんてことをしようと思うと大変そうです.使い慣れた言語ならすぐに書けるのに…
そこでanything-with-everything.elを利用すれば,好きな言語でanything関数の処理を書いてelispを1行足すだけで自分のanything関数を作ることができます.

どう使うの?

まずanything関数の処理を行うscriptを書きます.そのスクリプト(以下ではhoge.pl)が備えるべきインターフェースは

  • $ hoge.pl --init=list でanythingの"選択候補"群を出力する
    • 1行に1つずつ,改行区切りで標準出力に印字する
  • $ hoge.pl --action=open CANDIDATE で処理を行う
    • CANDIDATEというのは上の"選択候補"のことです
    • 改行無しで渡ってきます

の2つです.
これだけだと何だかよくわからないので,例を.

サンプル

以下はEmacsWikiの最近更新されたURLを一覧表示し,選択するとブラウザで開くというサンプルです.

このスクリプトを~/.emacs.d/anything/scripts/以下に置き*1,以下のelispを評価します.

(require 'anything-with-everything)
(defun-anything-function-with-script anything-emacswiki-changes "get-emacswiki-changes.pl")

すると,anything-emacswiki-changesという関数が定義されるので,M-x anything-emacswiki-changesとすれば実行できます.

応用例

複数ソースを利用したいときには以下のようにします.
以下のスクリプト

を同じように~/.emacs.d/anything/scripts/へ保存し,(依存するモジュールが多いので普段perlを使わない人は動かないと思います)

(require 'anything-with-everything)
(defun-anything-function-with-script anything-hb-entries "get-hb-entries.pl"
  (("list" . "Hot Entries") ("my_entries" . "My Entries")))

を評価すると,「はてなブックマークの人気エントリ」「自分のブックマーク」の2つから候補を選択することができます.
先程のelispと違う最後のリストは,それぞれ(--initオプションの値 . ソースの名前)を表しています.
アクションは先程と同じように script --action=open CANDIDATEと実行されることを想定しています*2

まとめ

これは unite.vim の source をお好きなスクリプト言語で書ける unite-script - はこべにっき#を見て,anythingでも同じようにやりたい!と思って書いたものです.id:hakobe932++
スクリプトがやることは「候補を改行区切りで出力する」「その中の1つを引数に取って実行する」の2つなのでelispの知識がなくても簡単に実行/検証することができます.
これを使って面白い/便利なanything関数を作ってみてください.何かあればtwitterの@yaottiまで.


Emacs Advent Calendar 2010の明日9日目は,anything.elで有名なid:rubikitchさんです.

*1:このディレクトリは(setq awe:scripts-root-dir "/path/to/another/location")などとすれば変更できます

*2:今は複数のアクションを実行できないですが(間に合わなかった…)できるようにするつもりです