古いバッファを自動で消したい!!#2
昨日のやつに言及いただいた。
midnight.el で毎日 0 時に古いバッファを削除する - (rubikitch loves (Emacs Ruby CUI))
標準添付の midnight.el とかどうだろうか。
まさにこれがやりたかった。ありがとうございます!
で、設定ファイル書かなくても全部 customize だけでできるみたい。
customize-group midnight
して midnight-mode
を on
にすれば OK。ノーマルバッファの削除間隔はデフォルトだと3日だが、ちょっと短いのでそこも 7 とかに変更した。
あとはまぁデフォルトで良いかな。
古いバッファを自動で消したい!!
気がつくとemacsのバッファがすごい数になっていて補完などが重くなるのである程度たまったら自動で古い物(しばらくvisitしてない物)を自動的に削除するようなものが欲しい。
とりあえずぼくのelisp力ではあんまり難しいことはできないので
(defun kill-old-buffers ()
(interactive)
(let ((count 0))
(dolist (b (buffer-list))
(incf count)
(if (> count 100)
(or (buffer-modified-p b)
(kill-buffer b))))))
とかいうのを書いてとりあえずはしのぐことにした。これは最後に使ったバッファ100個のこし、それ以前のバッファで修正フラグがたってないものを全部殺すというもの。
(buffer-list)
でとれるリストは anything などのように故意に最後に自分を突っ込んでる物以外はだいたい最後に訪問した順にくるようになってると思うのでまぁだいたいこれでやりたいことはできている感じ。
100個より古いバッファとかもうほとんど参照しないよね。必要になったら開き直せば全然かまわない。
詰まったFCGIプロセスを見つける方法
package FCGI::ProcManager::Debug; use strict; use warnings; use base qw/FCGI::ProcManager/;
sub pm_manage {
my $res = shift->SUPER::pm_manage(@_);
# manager does not return pm_manage, so below code should run in server only
$0 = 'perl-fcgi (waiting)';
$res;
}
sub pm_pre_dispatch {
$0 = sprintf('perl-fcgi (started %s)', scalar localtime);
shift->SUPER::pm_pre_dispatch(@_);
}
sub pm_post_dispatch {
$0 = 'perl-fcgi (waiting)';
shift->SUPER::pm_pre_dispatch(@_);
}
1;
こんな感じの ProcManager
のサブクラスを作り、これを代わりに使用すると、psコマンドでperlプロセスが詰まってないか確認することができるようになる。
プロセスが待機中の時は
perl-fcgi (waiting)
実行中の場合は
perl-fcgi (started Fri Apr 3 14:39:25 2009)
とスクリプト実行開始時間がでるので、それを元に探せばいい。$ENV{PATH_INFO}
等も表示させるともっと親切かも。
Catalyst のアプリの場合、
./script/myapp_fastcgi.pl -manager FCGI::ProcManager::Debug
等とすると使用するmanagerクラスを変更できるようになってるから、コードを変更せずすぐに導入できる点もグッド。
lleval.el
YappoLogs: danさんのllevalをもっと便利にするラッパー作った
一時はcodepadの1/100くらいの利便性まで下がってしまって心配しましたが、80倍便利になってぼくたちのDan the APIが帰って来ました。
ということで、emacs からたたけるようにしてみました。
先日作成した codepad.el と同じようなインターフェースになっていて、M-x lleval-buffer
でバッファをllevalする、M-x lleval-region
で選択したリージョンを lleval する、となっています。
言語はメジャーモードから自動判別されます。
codepad よりレスポンスがはやくて快適ですね!
Enjoy!
CGI用の設定
こういうようなFastCGI用の設定のCGIバージョン。
こんな感じかなー。
server.document-root = "/Users/typester/dev/scratch/myapp/root"
$HTTP["url"] !~ "^/(css/|images?/|js/|static/|tmp/|[^/]+\.[^/]+$)" {
cgi.assign = ( "" => "" )
alias.url = (
"" => "/Users/typester/dev/scratch/myapp/script/myapp.cgi",
)
}
OSX でディスプレイが電源切れたことを検知したい
おもむろに Xcode のドキュメントを検索すると CGGetOnlineDisplayList
とかいう関数が見つかったので
#include <CoreFoundation/CoreFoundation.h>
#include <ApplicationServices/ApplicationServices.h>
int main (int argc, const char * argv[]) {
CGDisplayCount displayCount;
CGDirectDisplayID displays[4];
int i;
CGGetOnlineDisplayList(4, displays, &displayCount);
for (i = 0; i < displayCount; ++i) {
CGRect rect = CGDisplayBounds(displays[i]);
printf("%d: %.0fx%.0f ( ", i, rect.size.width, rect.size.height);
if (CGDisplayIsActive(displays[i]))
printf("active ");
if (CGDisplayIsAsleep(displays[i]))
printf("sleep ");
if (CGDisplayIsBuiltin(displays[i]))
printf("builtin ");
if (CGDisplayIsMain(displays[i]))
printf("main ");
if (CGDisplayIsOnline(displays[i]))
printf("online ");
printf(")\n");
}
return 0;
}
とかいうのを書いてみた。これで、
$ ./dispinfo
0: 1280x800 ( active builtin main online )
1: 1024x768 ( active online )
とかいう出力が得られる。
のだけど、ディスプレイの電源(上記の1)を切ってもこのプログラムの出力は全く変わらない。ケーブルを抜くと出力から消える。
ここではケーブルは指したままで、ディスプレイの電源が落ちたことを検知したいという状況なので全然使えない。。
どーしたらいいんだろ?
codepad.el も書いた
昨日つくった dan-perl.el なんだけど、
404 Blog Not Found:Ajax - perlを実行するAPI
きっかけは、Codepadへの不満。PerlのVersionが5.8.0と古すぎる上、HTMLベースだと再利用がちょっと大変。というわけで別の車輪を再発明したわけです。上のサンプルを見てのとおり、perlの範囲内であればcodepadより自由な環境が楽しめます。
ということなんだけど、実際のところはなんだか codepad よりも自由度が低いような気がします。。。 use できても実際に使おうとするとエラーになるモジュールが多いし。codepad だったら perl 以外もいけるし。
というわけで codepad でよくね!ということで emacs インタフェースを作ってみました。
M-x codepad-run-buffer
とかするとカレントバッファをcodepadに投げてその実行結果を表示します。codepadでの言語はメジャーモードから自動的に判別するようになっています。
ほか、選択したリージョンを実行する codepad-run-region や プロンプトでワンライナーを入れる codepad-run などの関数があります。
言語をメジャーモードから取得するより自分で指定できるようにした方が良いのかもとか、実行したあとブラウザで結果ページを表示したほうがいいかもとか、いろいろありますがとりあえずこんなもんで。
CarbonEmacsの背後のWindowを切り替える
そろそろ野球のシーズンですね。フルスクリーンEmacsの裏にメディアプレーヤーを置くとなかなか快適ということを発見しました。
しかし、単純に裏に表示しているだけなため、Firefoxを開いたあとEmacsに戻ったりするとEmacsの裏の画面がFirefoxになってしまっていてイラッとします。
そこでこんな elisp で emacs の裏の画面を好きなアプリケーションにすぐに設定できるようにしてみました。
(do-applescript "activate application \"VLC\"
activate application \"Emacs\"")
快適。
ところで、これをもっと汎用的にして、VLC の部分を anything で選択きたら全画面 emacser にはものすごく便利なのかも。
ライブドアテクニカルセミナーにいってきた
先週末のライブドアテクニカルセミナーに行ってきた。
感想
シシンデラ
- 実運用ありきで開発
- パフォーマンスはなかなか良さそうであった
- けれども環境や、運用方法の制限は多めな感じ
- うちの環境にはちょっとマッチしないけど、そういうのが決まれば使えそう
livedoor Blog
- 長いサービスだから過去の遺産がカオス
- 文字コード混在、共存させるバッドノウハウ。カオスw
- 大変そう
- ASPをやるらしい
金子さんのP2Pの話
- P2Pの歴史
- P2P自体というよりはP2Pネットワークの歴史
- Winny2や新しく作ってる何とかキャスト(名前忘れた..)の話
- 何とかキャストは交換鍵認証を採用
- 配信はDRMベース。現在はWMPのみ対応(ぇー
- 配信者が期限とか保存可否とかちゃんと制御できるらしい
- 何とかキャストに関しては言えないことが多いみたい(?)で全体的に曖昧な発表
懇親会にも参加したけど、あういう雰囲気は苦手だなぁ。普通に居酒屋とかでやるほうがいいな。
シシンデラとブログの話と金子さんのP2Pの話が面白かった。でも、Open&Share というテーマなのに金子さんがゲストというのに違和感を覚えた。
しかし、ほぼ自社ネタだけであんなに長時間のセミナーを開けるのはすごいなー。