Hatena::ブログ(Diary)

ndkすごい RSSフィード

2014-08-02

2010-02-19

imenuをつかった簡単OCaml on Emacs関数ジャンプレシピ

imenu.elで、関数定義にジャンプ - Happy OCaml!! - ocaml-nagoyaグループ

imenu.el の使い方と応用 — ありえるえりあ

巷で話題の anything.el を使ってみた — ありえるえりあ

2007-07-25 - http://rubikitch.com/に移転しました

参考文献の先が詳しいですが…。

とにかくEmacs詳しくないけどOCaml関数定義をジャンプさせたいだけなんだ!っていう人はこうしてくださいな。

  1. imenu

imenuは多分最初から入ってるのでok.

  1. tuareg-imenu

tuareg-imenu(http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=76)をダウンロードしてload-pathのところに配置。

.emacsには

;tuareg-imenu

(autoload 'tuareg-imenu-set-imenu "tuareg-imenu" "Configuration of imenu for tuareg" t)

(add-hook 'tuareg-mode-hook 'tuareg-imenu-set-imenu)

を追記。

  1. anything

anythingは

http://www.emacswiki.org/cgi-bin/wiki/download/anything.el

http://www.emacswiki.org/cgi-bin/wiki/download/anything-config.el

からダウンロードして配置。emacs-lispのバイトコンパイルをしてね!

.emacsには

;anything

(require 'anything-config)

(setq anything-sources (list anything-c-source-buffers

anything-c-source-bookmarks

anything-c-source-imenu

;;anything-c-source-recentf

anything-c-source-file-name-history

anything-c-source-locate

anything-c-source-complex-command-history)

)

(global-set-key "\C-f" 'anything)

を追記。

ちなみにanythingの呼び出しは

(global-set-key "\C-f" 'anything)

のようにC-fに割り当ててある(C-fで移動とかしない人なのでつぶしましちゃいました)。自由に変更してくださいな。

anything-c-source-imenuっていうのがimenuをanythingのsource(検索対象)に入れる関数。これを登録してある。

これもうこのままで動くはず。

Meadowだとなぜかanythingにimenuが表示されるときとされないときがある。

どうも開いたら一回M-x imenuで何か関数にジャンプしないといけないみたいだ。ちょっと面倒だけど、あまりある便利さの前にこのぐらいなんでもないっすよ!

ちなみにimenuっていうのは

関数の名前っぽいものを全体からスキャンしてストアしといててくれる。入力した関数名のところに一発ジャンプ、という優れものelisp

anythingっていうのは要は自動補完。でも何から何まで全部自動補完の対象になるとても便利なelisp。これの自動補完の対象にimenuの候補を加えればリストから選んで関数にジャンプできる(インクリメンタルサーチも出来る)。便利すぎる。

f:id:euphonictechnologies:20100219230020p:image

2010-02-05

Baidu Type 使ってみた:ファーストインプレッション

今この文章はGoogleIMEを使って入力してます.

なんでかっていうとこんな感じだから.

f:id:euphonictechnologies:20100205174340j:image

使ってみた感想としては

  1. スキン機能は本当にびっくりするくらいいらない.

f:id:euphonictechnologies:20100205174630j:image

  1. なんでかっていうと,日本語キーボードに対応してないみたいだから.
  2. だもんで,日本語モードに切り替えるのにツールバーを使うほかない.なんてこったい.
  3. 変換はどうなんだろう.

GoogleIMEと比べてみます.

どっちも変換キー一発勝負.

  • 普通の単語

「国家安全保障局」

G:国家安全保障局

B:国家安全保障局

「米金融規制案発表」

G:米金融規制案発表

B:米金融規制案発表

シカゴオプション取引所のボラティリティー・インデックス

G:シカゴオプション取引所のボラティリティー・インデックス

B:シカゴオプション取引所のボラティリティー・インデックス

ちなみに上の文章はBaiduTypeではインデックスの最後のuが入力限界に達したため入力できなかったので,インデックスだけを区切って変換した.

これを見ると,単語変換精度に違いはないように思える.

  • 普通の文章

欧州ソブリン債をめぐる懸念が高まっていることや、米新規失業保険申請件数が予想外に増加したことを受けて警戒感が広がった。」

G:欧州ソブリン債をめぐる懸念が高まっていることや,米新規失業保険申請件数が予想外に増加したことを受けて警戒感が広がった.

B:欧州ソブリン歳をめぐる懸念が高まっていることや、米新規失業保険申請件数が予想外に増加したことを受けて軽快感が広がった。

「レベリング氏が「あなたのモチベーションとは何ですか」と質問をすると、ある営業マンは「私は社長を男にしたいと思っています」と発言。」

G:れべリング氏が「あなたのモチベーションとはなんですか」と質問をすると、ある営業マンは「私は社長を男にしたいと思っています」と発言。

B:レベリング滋賀「あなたのモチベーションとは何ですか」と質問をすると、ある営業マンは「私は社長を男にしたいと思っています」と発言。

ここでだいぶ差がついてきた感じがする.

ちなみにみんなが馬鹿にするMS-IME(のTrigramのやつ)を試してみると

MSIME:欧州のそぶりン祭をめぐる懸念が高まっていることや、米新規失業保険申請件数が予想外に増加したことを受けて警戒感が広がった。

MSIME:れべリング氏が「あなたのモチベーションとはなんですか」と質問をすると、ある営業マンは「私は社長を男にしたいと思っています」と発言。

うーん、MS-IMEは辞書が弱いんだな.

ともあれ、Baidu TypeとGoogle IMEの差は歴然で,警戒感と軽快感とか,ソブリン債みたいな単語のデータ量の差のような気もするところから,レべリング氏がと滋賀みたいな明らかに品詞選択を間違っているところもある.GoogleIME素晴らしい.

MS-IME…もうちょっと辞書頑張れ.

最後に

アスキー・メディアワークスが4月1日に発売を予定している期待のPSP新作ギャルゲーマリッジロワイヤル / プリズムストーリー』。全国から集まったプレイヤー(主人公)のお嫁さん候補たち12人と交流を深め、最終的にひとりのお嫁さんを決定することになる。

(中略)

実はこのゲーム、登場する12人の美少女たちの顔がみんな同じに見えるとインターネット上で話題になっているのだ。確かに、12人の美少女たちはみんな同じ顔をしている。」

G:アスキー・メディアワークスが4月1日に発売を予定している機体のPSP新作ギャルゲーマリッジロワイヤル・プリズムストーリー」.全国から集まったプレイヤー(主人公)のお嫁さん候補たち12人と交流を深め,最終的にひとりのお嫁さんを決定することになる.

(中略)

実はこのゲーム,登場する12人に美少女たちの顔がみんな同じに見えるとインターネット上で話題に鳴っているのだ.確かに,12人の美少女たちはみんな同じ顔をしている.

B:アスキー・メディアワークスが4月1日に発売を予定している期待のPSP新作ギャルゲーマリッジロワイヤル・プリズムストーリー」。)全国から集まったプレイヤー(主人公のお嫁さん候補たち12人と交流を深め、最終的に一人のお嫁さんを決定することになる。

)(中略

実はこのゲーム、登場する12人の美少女たちの顔が皆同じに見えるとインターネット上で話題になっているのだ。確かに、12人の美少女たちは皆同じ顔をしている。

なんと、最後の結果では全体的にBaidu Typeの方が良好だ.Google IMEの話題に鳴っているが致命的な変換ミスと言えよう.

ともあれ、BaiduTypeは今は英語キーボードになってしまう上,閉じカッコ’)’をうつと何故か,直接入力になってしまう(上の括弧の対応が変なのはそのせい).なので実用に耐えるかどうかは微妙.

もうちょっとちゃんと使えるようになったら,意外に使えるかもしれない気がする.

ともあれ、今の段階だとネタだな,完全に.

2010-01-04

Go言語をWindowsで使えた!

no title

を参考にしたらできた!

ちなみにPowershellだとできないよ!

Microsoft

2009-12-20

OMakeを使ってOcamlのファイルをビルド!

やっとまともな開発環境ができた!

今の開発環境はon Windows

OCaml for windows + Meadow + tuareg-mode + omake

という感じ。

どんな感じかっていうと

  1. meadowmlファイルを書く
  2. その場でC-c, C-eで評価して文法や型の確認とテストケースの実行。これで単体テストは完了。
  3. そのあとOMake使ってバイナリビルド結合テスト

という感じ。

やっと理解できた。OMakeすばらしい!

OMakeは

omake: OCamlフレンドリーな超強力ビルド ツール - Oh, you `re no (fun _ → more)

Windows上で ocamlopt + OMake + LablGL - あらいげたの日記

とか

OMakeでのコンパイル@ocaml-tutorial日本語版

にあるとおりそのままでほぼ大丈夫。

ただ、Meadowで書いているときに他のファイルのモジュールとかを読まなきゃいけない。

方法は二つ

  • そのファイルを開いてC-c, C-b(ファイル全体の評価)する
  • #use書いて、その行を評価する

で、もちろん上の方法はあほみたいなので、下の方法を使うと。

そうするともちろんocamlcとかocamloptのコンパイラに怒られる。

そこで、

sed "/^#/d"

としておくと、#から始まるインタプリタコマンド行を消してくれる。

これをプリプロセスとするためにOMakeのOCAMLPPFLAGSに

OCAMLPPFLAGS = -pp 'sed "/^#/d"'

を足しておく。

Windowsでネイティブコンパイルしたいので、コマンドプロンプト

>"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"

を実行する。

PATHにリンカとかflexlinkの実行ファイルの場所を追加して、さあいよいよOMake!

omake

ものぐさな性格なので、warningがいっぱい出る。たいていパターンマッチのexhaustive warning.というわけで、warningがあるとコンパイルできない(-warn-error)ので、warningを全部直して、(あり得ないパターンマッチで例外をはくようにちゃんと書いた…ちゃん取っていうか知らないけど)再度omake。

今度はちゃんと動く。感動。

これで一発ビルド環境ができた。うーん。モダンだ。

ひとまず動いたところまで、あとで詳しく書きますー。

2009-12-19

OCamlでTrie

Trieを書いた。パフォーマンスはあんまりよくない…。

再帰呼び出しスタック消費をなるべく抑えるように書いたけど、残念ながら末尾再帰にできなかった…。これ以上時間をかけられないのでこれでおしまい。

パフォーマンスは

Core2Duo T5600 1.83GHzで

1000 : 0.187000 sec

10000: 20.485000 sec

18000: 68.437000 sec

うーん。遅いなあ。

とりあえず、ターゲットにしているスケールでまあ我慢できる時間で動くことはわかったので、後に回そう。

再帰構造のretrievalを末尾再帰に(機械的に)直す方法ってあるのかなあ…。


# let trobj = TriTrie.add_list [] (headn t 100);;
val trobj : (int, int * int * int * int * int) Trie.trie list =
  [Node (103,
    [Node (74, [Leaf (102, (100, 102, 103, 74, 1))]);
     Node (100, [Leaf (101, (98, 100, 101, 103, 1))]);
     Node (73, [Leaf (102, (99, 73, 102, 103, 1))])]);
   Node (101,
    [Node (103, [Leaf (100, (98, 100, 101, 103, 1))]);
     Node (99, [Leaf (98, (96, 99, 98, 101, 1))]);
     Node (102, [Leaf (100, (97, 102, 100, 101, 1))])]);
   Node (99,
    [Node (97,
      [Leaf (98, (93, 98, 99, 97, 1)); Leaf (96, (94, 99, 97, 96, 1))]);
     Node (98,
      [Leaf (100, (95, 100, 99, 98, 1)); Leaf (101, (96, 99, 98, 101, 1))])]);
   Node (97,
    [Node (96, [Leaf (99, (94, 99, 97, 96, 1))]);
     Node (95,
      [Leaf (96, (91, 96, 97, 95, 1)); Leaf (94, (92, 97, 95, 94, 1))]);
     Node (98, [Leaf (99, (93, 98, 99, 97, 1))])]);
   Node (95,
    [Node (94, [Leaf (97, (92, 97, 95, 94, 1))]);
     Node (93,
      [Leaf (94, (89, 94, 95, 93, 1)); Leaf (92, (90, 95, 93, 92, 1))]);
     Node (96, [Leaf (97, (91, 96, 97, 95, 1))])]);
   Node (93,
    [Node (92, [Leaf (95, (90, 95, 93, 92, 1))]);
     Node (91,
      [Leaf (92, (87, 92, 93, 91, 1)); Leaf (90, (88, 93, 91, 90, 1))]);
     Node (94, [Leaf (95, (89, 94, 95, 93, 1))])]);
   Node (91,
    [Node (90, [Leaf (93, (88, 93, 91, 90, 1))]);
     Node (89,
      [Leaf (90, (85, 90, 91, 89, 1)); Leaf (88, (86, 91, 89, 88, 1))]);
     Node (92, [Leaf (93, (87, 92, 93, 91, 1))])]);
   Node (89, [Node (88, [Leaf (91, (86, ...)); ...]); ...]); ...]

Go言語さわってみた

Ubuntu 9.10にインストールしてちょこっと触ってみた。

以下メモとリンク。

インストール

no title

を参照。

ターゲットCPUamd64

ほぼ問題なくインストール完了。Anthyの日本語変換バカ過ぎてマジ使えない。

Emacsでサンプルコードを実行してみる。

#6g test.go

#6l test.6

#./6.out

バイナリが出来上がる。6gとか6lはamd64向け。5はamdで8はx86らしい。

次に欲しいのがEmacsの編集モード

Sixpence

を参考にしつつ...

ln -s ${GOROOT}/misc/emacs/*.el ~/.emacs.d/site-lisp/go-mode/

go-modeのelispをsite-lisp以下にリンク。

で、.emacs

;================================================================

; Go

;================================================================

(require 'go-mode-load)

を追加。

で、

~/.emacs.d/site-lisp/go-mode/

にload-pathが通っていなかったので.emacsにさらに

(defconst my-elisp-directory "~/.emacs.d/site-lisp/" "The directory for my elisp file.")

(dolist (dir (let ((dir (expand-file-name my-elisp-directory)))

(list dir (format "%s%d" dir emacs-major-version))))

(when (and (stringp dir) (file-directory-p dir))

(let *1

(setq load-path (cons default-directory load-path))

(normal-top-level-add-subdirs-to-load-path))))

これで、~/.emacs.d/site-lisp/以下のディレクトリ再帰的にload-pathに含まれるようになる(Emacs講座 -第6回- load-path / マスタカの ChangeLog メモを参考にしました)。

これでgo-modeで編集できるー!

つづく

つづきは「makefileを出力するmakemakerでコンパイルを一発で」の巻の予定。

*1:default-directory dir

2009-12-17

OCamlのデバッグ

俺の場合

  1. OCamlデバッグは基本printデバッグ
  2. いろいろな入力パターン(引数)を試してみる。脳みそデバッグ

それが現代的なデバッグ環境か?

OCamlの場合(そして自分の場合)、複雑な関数を書くよりもばんばん関数分割してバラバラにしていくので、それで事足りる(副作用がないって本当にすばらしい)。

それでもだめなら

Haskellなんかだとデバッグがえらい大変なイメージがあるんですが、 OCamlはその辺りはどうなんでしょうか……という件 - じじぃの日記、ツッコミ可

というわけで

#trace <関数名>

で追いかけるのが楽そうです。

デバッガは必要か - Oh, you `re no (fun _ → more)

とかも参考に。

2009-12-04

左クリックを長押しして右クリックするフリーウェア

手元にあるVAIOマウス「VGP-BMS33」の右クリックがなぜか利かない。

というわけで、マックにあるような左クリック長押しで右クリックするフリーウェアを見つけた。

超便利。

同じように左Ctrlと左クリックでも右クリックができるように設定できてとても便利。

iMapple : ProMouseEnabler

http://www.eonet.ne.jp/~imappie/index.html

便利すぎる。インストール後にスタートアップに登録されているショートカットから起動するだけ。昨日も実にシンプルですばらしい。

しかし、長押しで右クリックなんてAppleらしくない変なインタラクションだと思うのは俺だけ?

2009-08-16

どうしてChromeは速いのか

@IT:Chromeはなぜ速いのか

http://www.atmarkit.co.jp/news/analysis/200812/22/chrome.html

ここによくまとまっているように思う。

GoogleChrome高速化の取り組みは大きく分けて二つ。

・実行速度の高速化

・レスポンスの高速化

前者については、あんまり説明しようがないが、要はコードのいろんな所を技巧的に高速化していくというもの。Googleのエンジニアは優秀なんだろうなあ。

特に効果があるのはディスクIOの制限で、Chromeのコアプロセス(Chromeはいろんな機能をバラバラにして並列に通信し合って駆動するらしい)はとにかくディスクアクセスをしない。

だから、速く感じるそうな。

あとはレスポンスについてもとにかく処理の実行順序を良く考えることで、ユーザへのレスポンスを良くしているらしい。とにかくウィンドウを出しちゃうとか、そういうの。

上のリンク先にいろいろ書いてあるが、とにかく高速化への取り組み方にはやばいものがあるみたいで…俺の大好きなIEでも見習ってほしいなあと思いつつ、安全であるってことも同時にすべてのプラットフォームで保証しつつ速くするのは…難しいよね。

後やっぱりこの手の製品の開発って最初の方針をどうしても引きずるし。

高速化ってコストがめちゃくちゃかかるしね。

2009-07-26

euphonictechnologies2009-07-26

帰路

大雨の影響で線路に土砂が一部崩れて、足止め中。

予想外に今回の災害は続くようだ。

2009-07-25

euphonictechnologies2009-07-25

徳山

煙突がたってて地方の工業都市っぽい格好良さがあったのでとってみた。

徳山はコンクリの町。

f:id:euphonictechnologies:20090725121900j:image

防府を出て

岩国から広島めざして電車。

海が広いな大きいな。

2009-07-23

euphonictechnologies2009-07-23

手詰まり

ここで終電。

てか電車の選択肢がつきた。

日本横断すごろくは難しかった…

f:id:euphonictechnologies:20090723211000j:image

ハードモード

京都やることないや。

というわけでハードモード。

新山口発23時が終電のすごろくスタート!

出た目は4!

次ののぞみにのると福山でストップ!

f:id:euphonictechnologies:20090723191500j:image

というわけで

初日の目的地京都に到着!

ももたろ社長地元住民は歓迎してたりは別にしませんぞ!

4年ぶりの京都駅きれいになってた!

というわけで寺とかもしまってるんで、観光とかもできないです。

f:id:euphonictechnologies:20090723185300j:image

なんと!

のぞみにのったことによってすでに京都到着確定!

ももたろ社長が天賦の才を持っていることが簡単に証明されてしまったことよ(@゜▽゜@)

京都観光でも楽しむかな。

明日は波乱の予感?


神田につきました!

ももたろ社長!

なんで炎は上にあがって燃えるんでしょうか?

次は5!

結構調子いい感じだ。

f:id:euphonictechnologies:20090723154100j:image

つくばでの出た目は4

北千住に到着

今度の出目は6!

2009-06-16

WolframAlpha最強

大学からライセンスしてもらっているMathematica6.0が期間が過ぎて使えない。

そんな感じなので、WolframAlphaを使っている。

もしかしたら、Mathematicaよりも便利かもしれない。

WolframAlphaだと変数関数を定義することができないが、基本的な数式処理が簡単にできる。

たとえば、ある方程式を入力すると、それを整理して見やすく表示してくれるから便利。

2a*e^(a^2+b^2+c^2)*(x-a)+2b*e^(a^2+b^2+c^2)*(y-b)+2c*e^(a^2+b^2+c^2)*(z-c)-1*(w-e^(a^2+b^2+c^2))==0

f:id:euphonictechnologies:20090616124754p:image

http://www06.wolframalpha.com/input/?i=2a*e^(a^2%2Bb^2%2Bc^2)*(x-a)%2B2b*e^(a^2%2Bb^2%2Bc^2)*(y-b)%2B2c*e^(a^2%2Bb^2%2Bc^2)*(z-c)-1*(w-e^(a^2%2Bb^2%2Bc^2))%3D%3D0

数式を入力するだけで、その答えとか、数値解析の結果とかを表示してくれる。

これでもっと何がすごいかって言うとMathematica関数

DやSolve,Eliminateなどの数式処理関数が使えることである。

これらをうまく組み合わせて1行に押し込めれば、接平面方程式をすぐに得ることも可能。

課題をMathematicaでやってることがばれた。

とまれ、Mathematicaライセンスがない今、WolframAlphaはMathematicaの代替品として余りあるプロダクトであるといえる。

適当な入力を入れるとそれに適当な処理をして見やすく表示してくれるという点でMathematicaを越えているといえる。

Computational knowledge engineすばらしい。

2009-06-04

Live Mesh便利すぎ

Live Meshというのは、いろんなデバイスを自分のメッシュに登録するとそいつらを色々連動できる、というマイクロソフトのサービス。

これのひとつにフォルダの同期があって、これがお手軽すぎて吹く。

どういうことかというと

f:id:euphonictechnologies:20090604163448p:image

という感じで、いつも使うパソコンに設定しておくと研究室と、ノートパソコンと、家のデスクトップでファイルのやり取りが圧倒的に簡単になる。

Officeのあのフォルダも使ってみたけど、ちょっと面倒なので、これがおすすめ。

2009-06-02

Wolfram alpha使ってみた

いろんな人がすでに取り上げて使ってみているWolfram Alpha(http://www.wolframalpha.com/)。

f:id:euphonictechnologies:20090602093032p:image

こんな風に、「google stock price」(http://www.wolframalpha.com/input/?i=google+stock+price)といれると、言葉の意味を解釈して、それにあったデータを整理して表示してくれる。

他にも「japan gdp」(http://www.wolframalpha.com/input/?i=japan+gdp)とやれば、日本のGDPの推移を出してくれるし(gdpっていう単語をきちんとGross Domestic Productだと解釈してくれる)、びっくりしたのが次のやつ

f:id:euphonictechnologies:20090602093854p:image

「goldmansachs, jp morgan, bank of america」(http://www.wolframalpha.com/input/?i=goldmansachs%2C+jp+morgan%2C+bank+of+america)と入れると、話題の米系銀行の株価をいろいろ分析して出してくれる。

ファンダメンタルズを表にして見せてくれるし、最近のリターンもグラフで出してくれて、最適ポートフォリオも分析して出してくれる。これは面白い。

社会系のことだけじゃなくて、たとえば「sinc(pi/2)」(http://www.wolframalpha.com/input/?i=sinc%28pi%2F2%29)と入れると、sinc関数をいろんな形で見せてくれるし、もっとびっくりしたのが

f:id:euphonictechnologies:20090602094719p:image

「{{1, 2, 3},{2, 2, 2},{3, 2, 1}}」(http://www.wolframalpha.com/input/?i=%7B%7B1%2C+9%2C+3%7D%2C%7B+2%2C+2%2C+2%7D%2C%7B+3%2C+2%2C+1%7D%7D)

Mathematicaのリスト形式で行列を与えると行列を認識してくれて、こいつのいろいろな分析結果を教えてくれる。

こいつは対称行列なのでPropertyはsymmetricだし、デターミナントとトレース、ランクと固有値固有ベクトルも教えてくれる。課題が楽になるね!

Scilabと比べて何がうれしいかというと、答えが整数じゃなくてルートがついたりするとScilabは実数値を返しやがるんだが、Mathematicaなのできちんとルートで教えてくれる。これは面白い。というか、製品版のMathematicaにはそういう機能が入ってるんだろうね。それを無料で使えるという点においてもありがたい。

とにかく、まだまだいろいろ面白い使い方が発掘できると思うので、レポートにちょっと調べるのが面倒なとき、ここから串刺し検索をかけるのが賢いと思うよ!

いやあ、こういうの図書館学のAnvilとか大好きだろうなあ。もう知ってるかもしれないけど、ぜひぜひいろいろ活用して面白い使い方を教えていただきたく。

GoogleGoogle Squaredなるバーティカルっぽい検索エンジンを出してくるらしい。これにも期待。

D