ツリーブラウザかつテーブルブラウザ


ちょっと思うことがあって、なんかここ2,3年くらいブラウザ作ってる。
もうタブブラウザとか、古い。てかタブってインターフェイスが古い。
んだけど、一人で作って一人で使ってると、行き詰るよなーと思い出した。
でもどーせ需要もないのでやめちゃおっかなー、とか。
でもタブ500個くらい開けるブラウザとか、他にないし、使い続けはするんだけれども。
(実際タブ(に類するもの)を500個開けるわけじゃないけど。)
そこそこの完成度になったらスパッとやめよう。

ライフゲームのアルゴリズム

gaucheライフゲーム書いてみました。
何番煎じかはわかりませんが、というか誰もが通る道?
なるべく速いアルゴリズムを考えてみます。(200x200の盤面です。)

sdlの部分は以下からもらいました。

http://d.hatena.ne.jp/scinfaxi/20070222/1172123218

まずはナイーブな実装

上下にオフセットしたもののそれぞれに関してオフセットしたものの内
オフセットしてないものを除いたものを全部足せば周りの生きてるセルが取れるよねっていうことで。

んむ、チョロ過ぎる。案の定遅い。自分のパソコンで11fps位。そこそこ速いcpuでもこれなので
動かすときは注意。

色々悩みながらベクタでやると、速くなったり遅くなったり。
vector-mapやるよりwhileでぶん回すほうが速いとか
uvectorあんまり速くはならないとか
set!あると最適化が効かないのか遅くなるとか色々考えながらやってると、どうにかこうにか45fps。

結局全部main-loopの中に押し込んだほうが早いということで。
作用の境界が一つずれてるのは仕様です;

速いらしいというハッシュテーブルでも実装してみましたが、
自分には無理でした。ベクタ版と比べると百倍近く速度に差が出てしまった。

結果。

ふざけたプロンプトだけど気にしない。

リスト版
https://gist.github.com/998982

ベクタ版
https://gist.github.com/1010414

ハッシュテーブル版
https://gist.github.com/1010411

遊ぶときは3x3bmp用意してください。

自分の中で結論としては、
リストでやると読みやすくなるけど遅い。
ベクタは速くなるけど読みにくい。
ハッシュテーブルは私には使いこなせません、と。

最近eshell関連で調べてて思ったこと。

大体もうeshellの環境が整ってきていじる部分は少なくなってきたけど
たまに、こういうことしてる人居ないかなぁと思って調べることがあるのです。
大体そういうのは見つからなくて、不満が募るのですが、(何に対してだろう)
ちょっと、気づいたことがあります。

大体、eshellに関して書いてあるサイトは、eshellをshellとして使うこと前提で、
shellらしい機能を提供する目的で書かれた記事が多いのです。
(renameがこんなに、「コマンドで」簡単になる、とか、「コマンド」を打つのを楽にする何かとか。)
まあ、当たり前といえば、当たり前なのですが。
eshellの本質って、なんだろうと考えたとき、
自分が思うeshellの本質って違うんですよね。eshellの本質はshellであることではなくて、
もちろんshellであることは必要なのですが、
emacsっていうeditor上で動いているshellだってことなんです。
そのまんまなんですが、これって結構凄い事じゃないですか?
それなのに、eshellをshellとしてだけ使うのってすごくもったいない。
editorがすることって、もちろんeditすることなのですが、
それやってる人はネット上ではあんまりお目にかかったことはないです。

eshellの出力を「edit」することで何かできないだろうか。

以上前置き。。。


今回長いので単にリンク張ります。

https://gist.github.com/995254

・lsしたらその内容を変更することでリネームしたりコピーしたりできます。
・'r'でただ単にリネームモードになって、'S-c'でただ単にコピーモードに入ります。
・直接文字を削除したり置換しようとしたりするとリネームモードに入ります。
(ファイル上にカーソルがある状態じゃないと動きません。)
・'C-x,C-s'で終了と同時に変更が適用されます。
・'C-g'で何もせずに終了。
(富豪的にテキストプロパティをがんがん使ってるので若干遅いです。)
(自分の環境でls自体の4分の1から3分の1程度の時間がかかりました。)
(リネームせずに7000ファイルで1秒程度、テキストプロパティは付け直さざるを得ない。)
・一応テキストプロパティ付け直さないようにもできます。'C-x,s'で。その場合は再度リネームできません。
・-sや-lオプションにもある程度対応。
(スペースで始まったり終わったり、 中にスペース二個連続だったりすると、あんまりよろしくない動きをします。注意!)

コメントとか皆無ですが、それには理由があって、
自分のeshellの設定がかなり複雑に絡み合って、今回のはその一部なのです。
できるだけ直感的にファイル操作する何かを作ろうともくろんでますが、それはまたの機会に。


最近は、eshellからemacsをコントロールしてる気分です。どうでもいいけど。

completer風味の補完をauto-completeで

いきなり間が開いてしまった。
書こうと思ったことはいっぱいあるんですけどね
今回は
eshell使っててファイル名打つのが馬鹿らしくなったので(普通のcompleteだと貧弱な気がして)
昔そんなのがあったらしいというcompleterなるものの補完のしかたを真似てやってみました

/h/u/e/a-c.el

と打つと

/home/user-name/elisp/auto-complete.el

が補完されます。

本家と違うのは間にユニークでないディレクトリ名があるとそこで補完が止まってしまうのですが
今回書いたのはもうマッチするやつ全部候補に入れちゃえって感じでやってます。

無駄にmigemo対応。

eshellの色々、書いてて楽しいな。
最近はeshellのlsがdiredで言うwdiredみたいにリネームできるようにとかしてます。

始めた。

なんとなく始めてみました。
emacslispとかschemeとか趣味で書いてます。
しかし周りにプログラミングとかする人いないのでさびしいです。

最近eshellの設定が1000行超えてきてやべー。
とりあえず以下auto-completeの設定。


こちらを参考にさせていただきました。

シェル難民がeshellに漂流したついでに、 eshell tipsまとめてみた

シンボルが勝手に補完されるのはパースの時点で勝手にlisp-complete-symbolが呼ばれているせいです。
変わりにpcomplete-completionにall-completionを投げました。
なんというかダーティハックだけど一応動く。