yaotti's diary

Software is Eating the World

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:今は複数のアクションを実行できないですが(間に合わなかった…)できるようにするつもりです

anything-mac-itunes.elというのを書きました

unite.vim の source をお好きなスクリプト言語で書ける unite-script - はこべにっき#を見て、エディタからiTunesの曲をインクリメンタルに絞り込んで再生できると便利だなーと思ったので
anything的にiTunesの曲を検索+再生できるelispを書きました。
Anything interface for iTunes (Mac only) — Gist
曲名の取得や再生にapplescriptを使っているので、名前からわかるようにMacでしか動きません。
上のファイルをパスの通った適当なところに置いて

(when (eq system-type 'darwin)
  (require 'anything-mac-itunes)
  (global-set-key (kbd "C-c m") 'anything-mac-itunes)
  (global-set-key (kbd "C-c b") 'anything-mac-itunes-back-track)
  (global-set-key (kbd "C-c n") 'anything-mac-itunes-next-track)
  (global-set-key (kbd "C-c p") 'anything-mac-itunes-playpause-track)
  (global-set-key (kbd "C-c c") 'anything-mac-itunes-show-current-track-info)
  )

.emacsに書くと、C-c mで曲を絞り込み*1+再生、C-c pでplay/pauseなどができます。C-c cを押すと今再生している曲の情報をminibufferに表示します。
最初の一度の実行は曲名リストを作成するため時間がかかりますが、それ以降はキャッシュされます。
言語を英語にしている人は(setq anything-mac-itunes-library-name "Library")とかしてください。
Emacs+Macユーザーの方はどうぞ。

追記
Carbon Emacsだと内部文字コードSJISらしく、曲を検索できなかったり曲名が文字化けしたりするそうです。(via @peccul)
なのでdo-applescriptにdefadivceで文字コード変換を前後に噛ませるか、CocoaEmacsにアップデートするかしないといけなさそうです。
CarbonEmacsは今後アップデートされないのでCocoaEmacsのインストールをおすすめします。
homebrewを入れてから

cp -R /Application/Emacs.app /Application/CarbonEmacs.app
brew install emacs --cocoa
ln -s /usr/local/Cellar/emacs/23.2/Emacs.app /Applications/Emacs.app
# あとは適当に/Application/CarbonEmacs.app内から足りないelispを.emacs.dに持ってくる

*1:検索対象は曲名、アルバム名、アーティスト名

インターン終了+卒論開始

先週金曜日にて,8週間にわたるインターン+東京生活が終わりました.
自分のやりたい方向がより明確になったこと,今まで会ってきた人とは違ったタイプの凄い人達と話せたこと,自分が伸ばすべき点や足りない点について教えられ,それらについてじっくり考える機会を得られたことなど,良い経験になりました.
今までかなり適当に行動してきたことがわかったので今後は計画的に色々動いていきたいなぁ.


そして卒論テーマがGC関連のものに決まり研究室選びの時に想定していた通りのタイプの研究ができそうなので,最近は楽しく論文を読んだりしています.

C++でblosxomクローン書いた

最近C++を勉強する必要性に駆られているので勉強として書いてみた*1
yaotti/closxom · GitHub
C++のクラスとか名前空間は始めて書いたので(TopCoderだとクラスを自分で書くことはない),結構怪しいコードになってる気がする.
に大体準拠しているはず.

最初は

C++実践プログラミング

C++実践プログラミング


を読んで,なんとなくわかってきたような気がしたところで(まだ1/3も読んでない)
Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)


を「どうせそのうち買うだろう」と思って買って適当に読み始めたんだけど,これが大当りだった.
コード書いてるときに浮かんだちょっとした疑問の解決策が,いくつかそのまま書かれていてとても役に立った.
先入観で「この本はある程度C++を書ける人向けだ」と思ってたんだけど,これはC++の文法がなんとなくわかってさあこれからコードを書こうという人にぴったりの本だと思う.

*1:C++のメモはhttp://d.hatena.ne.jp/yaotti+study/searchdiary?word=*[c%2B%2B]に