like i loved you +

バイドゥ(百度)株式会社で働くR&Dエンジニアとして、世界一楽しい検索エンジンを作っています。情報系大学院生が、腕一本で「世界で一番アツい会社」に就職するまで&してからの記録。

Archive for 10月, 2008

日頃Windowsを使っていると、「なんでこのショートカットキーはこんなに不便なんだろう」「なんでもっと簡単にこの一連の操作ができないんだろう」ということが頻繁にある。例えば自分がMacに移行して感動したことの一つは「Cmd+Q」でアプリを終了したり「Cmd+W」でウインドウを閉じたりするのが簡単に、しかもアプリ間で統一性を持ってできることだった。誰が「Alt+F4」なんて指がつりそうなショートカットを頻繁に入力しなければいけないのか。

なので、Windowsで、「キーストロークやマウスクリックなどのイベントやメッセージを全部キャプチャ(フック)して、それに応じて自分で好きなイベントやメッセージを割り当てられるような、願わくばフックを何かの簡易言語で書けるようなカスタマイズツールがあったらなぁ」と悶々と考えてて半分自分で作ろうかとも考えてたのだけど、

まさにそういうツールが既にあったのを発見。

http://www.autohotkey.com/
AutoHotkey - Free Mouse and Keyboard Macro Program with Hotkeys and AutoText

細かい説明、使い方、サンプルなどは全部この

AutoHotkeyを流行らせるページ
http://lukewarm.s101.xrea.com/

に書いてあるので割愛。基本的には、「a::b」というペアをずらずらと並べ、「a」キーが押されたときに「b」という処理を行うというスクリプトを書く。この「b」という処理のところに独自言語で実に色んな処理が書ける。例えば、自分が今愛用しているスクリプト片は例えば

#f::
Process,Exist,firefox.exe
if ErrorLevel<>0
  WinActivate,ahk_pid %ErrorLevel%
else
  Run,C:Program FilesMozilla Firefoxfirefox.exe

こういうもので、「Win+F」が押された時に、Firefoxが既に起動してればそのウインドウにフォーカスを合わせ、起動してなければ起動するというもの。これでたくさんウインドウを開いているときにイチイチ「Alt+Tab」で目標のウインドウを探さなくて済むし、起動していないときも一瞬で開ける(もちろん、これまでもLaunchyを使ってたので大して起動の手間はかからないわけだけど)。自分はこのスクリプト片を他にもファイラやエディタなど頻繁に使うアプリにも書いてて、そのおかげで使い始めて3日ほど経ったけど「Alt+Tab」を使う頻度が劇的に減ってしまってとても快適。

ついでに「Win+Q」をこれまでの「Alt+F4」の代わりに使えるようにしたので、アプリを終了する(正確に言うと、「ウインドウを閉じる」だけど、Windowsではこの2つはほぼ同義)ときもMacOS Xのノリでできる。ちなみに、このAutoHotKeyを使わなくても、ウインドウを閉じるのは「Alt+Space」でコンテキストメニューを出してから「C」を押せば良い。この一連のストロークはキーどうしが近いので慣れれば一瞬でできるようになってとても便利なのだけど、これまでリアルで知ってる人に出会ったことがない。逆に、情報系の学生なのに「Alt+Tab」を知らない人は何人か出会ったことがある。

欲を言えば、このAutoHotKeyで使われているスクリプト言語があまり好きになれない。自分がまだ仕様の全貌を知らないせいかもしれないけど、バージョンアップと共に言語仕様を継ぎ足していったようなお世辞にも美しいとは言えない文法+仕様で、これを中で全部場合分けしてパースしているのかと思うとご苦労様という感じ。なので、このスクリプト部分をもっと身近なPerl、Python、Ruby、JavaScriptのサブセットで綺麗に書けるツールがあったらもっとヒットすると思う。誰か(変態な人)がAutoHotKey上で動くLLのインタプリタを書けば良いのだけど、それならベースのエンジンから作り直したほうが早い。できる限りプログラム初心者にも分かるようにしたかったのだろうけど、それならいっそのことS式で書かせてくれたほうが自分にはやりやすかったな。

この手のハック、これまでにも同じことを思い立ってPowerProを使っていた時期があったのだけど、全部GUIベース(+ヘンテコなスクリプト)で設定するのでうんざりしていた。あと、GUIベースの設定は違うマシン間での共有が面倒くさいが、AutoHotKeyみたいにスクリプトで全部見えればそのファイルをコピーしたりするだけで良いので精神健康上も良いとおもう。

ちなみにこのAutoHotKey、Windows上の入力イベント(キーボード、マウス、ジョイスティック)を全てキャプチャできるので、少しスクリプトを書くだけでそのままキーロガーが作れる。というかもう作った。色々と探してみたのだけど、Windows上で使い勝手が良くフリーのキーロガーというのはなかなか見つからない(そりゃそうだ、誰が必要とするのだろう。)このキーロガーは前に

キーロガーを使って集中力を「監視」する … 集中力アップのためのツール案(記録編)
http://blog.lilyx.net/2007/10/21/concentration-by-keylogger/

キーロガーを使って集中力を「監視」する … 集中力アップのためのツール案(解析編
http://blog.lilyx.net/2007/10/27/keylogger-analysis/

という記事で書いた通り、とても面白い使い方ができる。それについてはまた後日別記事で書くことに。

add to hatena hatena.comment (23) add to del.icio.us (0) add to livedoor.clip (5) add to Yahoo!Bookmark (0) Total: 28
  • 3 Comments
  • Filed under: 技術
  • 久しぶりに曲を作ってみた

    3ヶ月間インターンに行ってしばらく頓挫していた作曲活動だけど、久しぶりにまとまった時間が取れたので(というか取ったので)、ずっと前から中途半端に完成していた曲を仕上げて、もう1曲新たに full scratch で作ってみた。良かったら聞いてみてください。

    両方ともビート入りエレクトロ・アンビエント系。最近よく聴いてる Shulman とか Solar Fields とか Kaya Projectからけっこう影響受けてるとおもう。特に上物の音づかいとか、変拍子とか。このあたりのエレクトロ・アンビエントは仕事中の作業用BGMとしてもお勧めですよ。

    1. Filed of Clonds (field_of_clounds.mp3; 6,131KB)

    2. transition (transition.mp3; 8,254KB)

    以下、技術的なことを少し。

    - 6/8拍子と9/4拍子は、前者x3=後者x2で8分音符の数が同じになるので互いにコンパチ。2曲とも違和感無く転拍子にそのテクを使ってる。
    - 1曲目はDAWにCubaseを、2曲目はAbleton Liveを使用。どっちもほぼ同じVSTが動くので使用感にそれほど差は無いとおもう。強いて言えばAbleton Liveはデュアルディスプレイの恩恵がまったく受けられない(VSTのウインドウを開きっぱなしにして画面に散りばめておくことができない)のでもう少し改善してくれたらなぁ。これは大きいディスプレイを買えということなのか。
    - 音源はHypersonic 2を中心に使用。このマルチティンバー音源は、決して大容量でも高音質でも無いけれど、オールジャンルに対応できるしコストパフォーマンスは非常に良いと思う。
    - 上物の正弦波っぽいシンセ+付点8分のディレイで一気に「それ」っぽくなる。1曲目みたいにポルタメント入れるとなお良いかも。あとはコードの構成音を、テンション音(7thとか)中心にかき鳴らしておけばOK。2曲目では、それにAbleton LiveのAuto FilterエフェクトをかけることによりさらにGate効果っぽくしている。がんばって弾いたアルペジオを、コード弾きシンセのGateっぽく聴かせてしまう贅沢な技かも。

    add to hatena hatena.comment (1) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 1
  • 0 Comments
  • Filed under: 音楽, 技術
  • 小町さんのブログでアナウンスがあったように、10/6に Yahoo! Inc. の Patrick PantelさんがNAISTにて「大規模な自動的集合展開」について講演してくださるというので行ってきた。初NAIST訪問でした。

    集合展開(Set Expansion)というのは(自分でも)聞き慣れない言葉だったけど、要するに Google Sets みたいに、ある言葉の集合を入れるとそれらと同じカテゴリに属する他の言葉を自動でウェブなどから取ってきてくれるようなタスクのこと。たとえばred, green, blueって入れるとblack, white, brown, pinkなど他の色を自動でずらずらと出してくれる。

    Google Setsはどうやってやってるかは知らないが、この集合展開、基本的には、類義語獲得によく使われる分布類似度の応用で実現可能である。与えられた語(種:シード)の文脈を見て、その文脈と共起するような語を拾ってくればシードと類似している可能性が高い、というしくみである(ここを詳しく語っていると論文が軽く数本書けてしまうので割愛)。

    講演自体はこの分布類似度からスタートして、どうやって高速化するか、コーパスの質や量、シードの質や量の影響は、といった関連調査まで幅広く紹介してくれた。自分は分布類似度がらみのことをずっと研究でやってきたので、「どうやってやっているか」の部分について深く聞きたかったのだが、この部分については要するに「シードの素性ベクトルを算術平均して、あとは普通の分布類似度と同じ」だったのでなんだか拍子抜け。聴衆の興味の問題もあるのであまりマニアックなところを延々と議論するのもアレかとは思うけど、ここの集合展開の基本モデルについても再考の余地はありそうだ。

    あとは、分布類似度の高速化の話が面白かった。PantelさんはYahoo!の分散化システム(GoogleのMapReduceみたいなの)上に単語分割して載せて、さらに逆インデックス作って高速化を図ったという話だったけど、分布類似度というのはもともと扱う行列がものすごくスパースなので、実は計算量がO(N^3)というのは大げさである。計算量を下げる別のアプローチとして、元の情報を保ったまま余計な次元や要素を削除するのが簡単にできてしまう。このあたりの技術は自分が去年ぐらいにやってたことで、もうすぐ論文誌「自然言語処理」に論文が載るので興味があったら見てやってください(宣伝)。講演後にPantelさんともこのあたりの議論がけっこうできたのでよかった。

    ちなみに集合展開というと、この前ふらふらしていて見つけたSet Expander for Any Language (SEAL)というシステムが異様に性能が高く、Google Setsよりも良い結果を出してくれる(ちなみにGoogle Setsはちょっと前まで日本語が通りさえしなかった)。例えば、「ネ、ウシ、トラ」をGoogle Setsに入れても全然展開してくれないけど、このSEALに入れるとちゃんと「タツ、イヌ、トリ、ウ」を出してくれて賢い。こっちは論文をちゃんと追ってないが、分布類似度じゃなくてHTMLの構造を使ってるようだ。ハイブリッド的にやったらどうなんだろう。

    その後はPantelさんと一緒に松本研究室の紹介をしてもらう。聞いたことある話も少しあったけど非常に面白くて、なんだか講演を聴きに来た身で紹介までそのまましていただいて申し訳なく、何か自分も研究紹介のネタ(最低でも論文別刷り)ぐらい持ってくればよかったと後悔。興味を持ってもらえそうなネタがあればトークをしながらこうやって研究室を訪問して回るのも良いかもしれない。

    その後Pantelさんと研究やYahoo!や採用の話などをしながら移動。Yahoo!について「そんなにしゃべちゃっていいの」的なことも聞けておもしろい。夜はPantelさんを囲む会でおいしい夕食をいただき帰路につく。講演もNAIST訪問を含めて実に楽しい1日だった。NAISTも非常に良い環境だし、名古屋から実質2時間で行けるので、時間的な距離は東京とほとんど同じ(かちょっと遠い)ぐらいで、このぐらいなら軽い研究会などちょくちょく訪問に行ければ、研究の情報交換もできるしモチベーションも上がって良い感じだと思った。あまり頻繁に行くぐらいなら「中の人」にでもなってしまったほうが良いかもしれない。

    add to hatena hatena.comment (6) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 6
  • 0 Comments
  • Filed under: 技術, 大学
  • Recent Comments