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 というテーマなのに金子さんがゲストというのに違和感を覚えた。
しかし、ほぼ自社ネタだけであんなに長時間のセミナーを開けるのはすごいなー。
VirtualBoxのゲストでNATネットワーク使ってるときの設定メモ
いままではゲストにWindowsとかしかいれてなかったので、ホストからゲストにネットワークがつながってなくてもよかったけど、さっき Linux いれたら ssh できねーってこまった。
マニュアル読んだら書いてあったがめんどうなのでメモ。
NAT 接続の場合は VirtualBox 側でポートフォワードでゲストにつなげられるようにする機能がついてるけど、GUIがないのでコマンドたたくしかない。ホストの 2222 ポートをゲストの 22 ポートにする場合は
VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222
とするればいいみたい。"debian" は VM の名前で、pcnet というのは使用しているインタフェースの名前。Intel PRO/1000 使ってる人はここを e1000 とするらしい。guestsshってのは適当な名前を自分でつければいいのかな。
設定を消すときは最後の引数を消したのをもう一度実行すればいいようだ。ちょっとめんどうだなぁ。
そんで、sshのポート番号とかたぶんすぐわすれるので、~/.ssh/config に
Host vbox
Port 2222
HostName 127.0.0.1
とかしといた。しかし、vbox という名前を忘れたらどうしよう。。
モダンPerl入門
読了!
第1章は今風のperlのオブジェクト指向について。最近の流れ知らない人にはいいですね。
第2章はその今風な書き方でのデザインパターン。ここが個人的にはすごく参考になった。やっぱりいつもかいてるようなコードで説明されるとわかりやすい。
3,4章でDBやWAFについて。Catalystのロジック分離のところは、自分の説明が下手でなかなか伝わらないことが多いので、今度からはここを読めと勧めることにする。
5章はシステム周り。デーモンの作成とか、そんなのdaemontoolsにまかせちゃうしなーとかおもっていたらちゃんとそこも説明されていた。さすがw
ジョブキュー関係まで扱っていてやっぱりモダンだなぁ、と感じたのだけど、ジョブキューをどうして使うかというところの説明はもう少しあってもいいのかもと思った。時間のかかる処理をmod_perlやfcgi内でやるとどういうことになるのかとか。
6章はテスト。テストの考え方と基本的な書き方。Apache::Test とかまで書いてる割には、あまり突っ込んだ書き方を説明してないところは少し残念。テスト用のライブラリとかmockの作り方くらいはあるといいのかなー。
7章で最適化の話。qr// の話は知らなかったなー。
8章はXS! いままで筆者が話してきたことの総括みたいな感じ。ここまでまとまってる本はないと思う。すばらしい!
9章はCPANとか基礎知識の説明。おまけ的な感じ。
というわけで、全体としてとてもよくまとまっていてすばらしいです。perl書く人すべてにおすすめ。
Hiveminder.app
お気に入りのタスク管理ツール Hiveminder をちょっとハックして自分好みにしてみた。
- Fluid でアプリケーション的に使えるように
- ページ内の jGrowl の通知を本物の Growl 使うように変更
- いまやってるタスクのタイムをカウント出来る機能
- でそれ(いまやるべきこと)を10分間隔で Growl 通知する機能
など。すぐに他ごとしてしまう僕のような人には一番最後の機能がなかなか有効なはず。
スクリプトのダウンロード、使い方などはgithubにアップしたのでそっち見てくださいませ。
余談。
そんなに Hiveminder がいいの? と聞かれると返答に困るわけですが、todo.pl からのブレインダンプでのタスク登録 (todo.pl braindump) とか、指定した日付になるまでタスクリストからタスクを隠せる機能 ([hide until next monday]) だとか、タスクにアイデア的に登録したものをやんないよなーってものは永久に隠せたり(隠してるのはいつでも表示させることが出来るので過去のアイデアリストとして使える)とか他にはない気に入ってるところがたくさんあるので使い続けてます。
@obra++ bestpractical++
ってとこですかね!
あと、いつものように、自分の必要な最小限の機能しかつくってないので、興味ある人いらっしゃいましたら是非とも一緒にハックしましょう。
iPhone野良レポジトリの作り方
coderepos で野良レポジトリホストしたらいいんじゃね、っと思ったのでちょっとやり方をメモ。
iPhone の野良レポジトリは Debian の apt ベースになってるので、開発者が作った .deb ファイルをホストする感じになるのかな。なのでとりあえずここでは .deb の作り方は省く。
ホストの仕方は簡単で、.deb を同じディレクトリにつっこんでおいて、そのディレクトリ内で Debian の dpkg-dev パッケージをインストールすると入る dpkg-scanpackages コマンドを使って
dpkg-scanpackages -m . > Packages
とやるとそのディレクトリの .deb をなめてパッケージ一覧を作ってくれる。これを bzip2 して Packages.bz2 にすれば最低限のレポジトリが完成する。簡単ですね!
ただ、iPhone野良アプリの.debには独自のメタデータがあるので、 dpkg-scanpackages にそれを理解させるためにちょっと変更する必要はある。
--- /usr/bin/dpkg-scanpackages 2008-12-29 13:46:45.000000000 +0900
+++ dpkg-scanpackages 2008-12-10 14:12:55.000000000 +0900
@@ -25,7 +25,9 @@
my @fieldpri = (qw(Package Package-Type Source Version Kernel-Version
Architecture Subarchitecture Essential Origin Bugs
- Maintainer Installed-Size Installer-Menu-Item),
+ Maintainer Installed-Size Installer-Menu-Item
+ Name Author Homepage Icon
+ ),
@pkg_dep_fields, qw(Filename Size MD5sum Section Priority
Homepage Description Tag));
僕の環境(Debian Lenny)ではこんな感じ。
この dpkg-scanpackages でつくった Packages.bz2 があるだけで一応レポジトリとしては機能するけど、どうせなのでレポジトリのメタデータなどを置きたいかと思います。
それは同じところに Release というファイル名で
Origin: Saurik's Example for Cydia
Label: Cydia Example
Suite: stable
Version: 0.9
Codename: tangelo
Architectures: iphoneos-arm
Components: main
Description: An Example Repository from HowTo Instructions
こういうのを置いておけばOKです。各項目の説明は saurik 先生のエントリの Step 4: Repository Metadata (Optional) というところを見るといいと思います。
しかし coderepos は debian ベースではなかった気がするから、どういう場合はどうやるんでしょうね。。
ローカルのgitレポジトリをgistにアップするgist.pl
とか作ってみた。
git レポジトリのルートで実行するとそのレポジトリの内容を gist にポストし、レポジトリの remote に投稿した gist を追加します。
いろいろ手抜きなので下に注意事項を書いておきます。
- 正確にはレポジトリの中身ではなくてカレントディレクトリ以下のすべてのファイルを投稿しちゃう (.git以下はのぞく)
- git config で github.user と github.token を登録しておく必要がある
- remote 名 は origin きめうち
- プライベートgistとかしらない
などという感じです。特に1は注意。必要に応じてverupする感じで。
gisty つかってたんですが、僕は何か作るときとりあえず git init するので、gisty だと gist に投稿したらそれ以降違う場所のレポジトリを使うという設計なのでちょっと面倒だったんですね。
EmacsWiki のコードが冗長なので短くしてみた。
(setq erc-prompt (lambda ()
(let* ((buffer (buffer-name))
(channel (when (string-match "\\(#[^@]+\\)" buffer)
(match-string 1 buffer))))
(erc-propertize
(concat
(or channel
(if (and (boundp 'erc-default-recipients) (erc-default-target))
(erc-default-target)
"ERC"))
">")
'read-only t 'rear-nonsticky t 'front-nonsticky t))))
elisp的にはこういうのどうかくのが良いのかわからんけどとりあえず短くはなった。


