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的にはこういうのどうかくのが良いのかわからんけどとりあえず短くはなった。
id:IMAKADO さんにバッファ作らずに使わずに正規表現マッチする方法教えてもらったのでちょっと短くできた。
(setq erc-prompt (lambda ()
(let* ((buffer (buffer-name))
(channel (when (string-match "\\(#[^@]+\\)" buffer)
(match-string 1 buffer))))
(if channel
(erc-propertize (concat channel ">") 'read-only t 'rear-nonsticky t 'front-nonsticky t)
(if (and (boundp 'erc-default-recipients) (erc-default-target))
(erc-propertize (concat (erc-default-target) ">") 'read-only t 'rear-nonsticky t 'front-nonsticky t)
(erc-propertize (concat "ERC>") 'read-only t 'rear-nonsticky t 'front-nonsticky t))))))
ERCのプロンプトにチャンネル名表示
というネタは EmacsWiki: Erc Configuration の Channel-specific prompts に書いてあるんだけど、そこにも書いてあるとおり、初回表示時にはチャンネル名にならないのでこんな感じにハック。
(setq erc-prompt (lambda ()
(let* ((buffer (buffer-name))
(channel (with-temp-buffer
(insert buffer)
(beginning-of-buffer)
(when (re-search-forward "\\(#[^@]+\\)" nil t)
(match-string 1)))))
(if channel
(erc-propertize (concat channel ">") 'read-only t 'rear-nonsticky t 'front-nonsticky t)
(if (and (boundp 'erc-default-recipients) (erc-default-target))
(erc-propertize (concat (erc-default-target) ">") 'read-only t 'rear-nonsticky t 'front-nonsticky t)
(erc-propertize (concat "ERC>") 'read-only t 'rear-nonsticky t 'front-nonsticky t))))))
バッファ名からチャンネル名部分とるようにした感じ。
1:1 トークとかどうなるかわからないのでとりあえず EmacsWiki のルーチンも書いておいた。
dopplr.el
最近 ERC つかって IRC も emacs でやるようにしたのだけど、昔 irssi 用に作った dopplr.pl とおなじことが emacs でもしたくなったのでちょっと書いてみたりした。
使い方は dopplr.pl と同じで最初に
(setq dopplr-api-token "your api token") ; M-x customize-group RET dopplr でもできる
しておいて、あとは
M-x dopplr-local-clock RET miyagawa
するという感じになっています。
dopplr.el などとたいそうな名前ですがまだこれしか作ってません。
はじめて設定以外で elisp 書いたけどむずかしい。すごいぐちゃぐちゃになってしまった。絶対もっとうまく書けるはず。
OSXで快適ビットマップフォント生活
OSX の良いところの一つにアンチエイリアスの効いたきれいなフォントがあげられると思います。
ただ、ターミナルやエディタなどでそう言うフォントを使用するとどうしても視認性の問題から文字サイズを大きくする必要があり、1画面あたりの情報量が減ってしまいます。
また単純に僕がビットマップフォントが好きだという理由もあり、ずっと OSX でもビットマップフォントで開発したいなーと思ってました。
しかし、Terminal.app や iTerm できれいに日本語を表示できるビットマップフォントを見つけられず、やむを得ずアンチエイリアスしてました。 Osaka フォントとか、CarbonEmacs だとビットマップ表示で日本語きれいにひょうじできるのにTerminal.app やiTerm だとガタガタになってしまうし。。
で、あきらめてたんですが、モトヤシーダというフォントならいけるよという話を聞いて設定してみたところわりときれいに表示させることが出来ました。
モトヤシーダは
こちらのサイトで販売されているのですが、お試しフリーフォントというところに入っていますのでとりあえず無料で試せます。僕はWin版をダウンロードしてCrossOver Macで自己解凍exeを展開しました。ただのlhaの自己解凍形式のようなのでlhaコマンドでも行けるそうです。
そんなわけで Terminal.app + iTerm から CarbonEmacs + iTerm に移行しました。
僕が愛用している CodingFontTobi というフォントは ttf 版だとなぜか 16pt 設定で 11pt 相当の表示というなぞの状態になっていて、日本語をうまく混在表示させるためにはasciiとそれ以外で違うフォント設定を使えるアプリケーションを使う必要があります。
CarbonEmacsとiTermならそれができるということですね。CodingFontTobi 16pt + モトヤシーダ(EmacsではOsaka) 11pt という設定にしてます。
これでやっと OSX でも満足行く表示になりました。やっぱりこっちのほうがいいですなー。
また、他にもいいビットマップフォントをご存じの方いらっしゃいましたら是非とも教えてください!!