2009/05/31

Android で DNS サーバアドレスと経路テーブルを見る方法

android-platform メイリングリストで書きましたが、Android で、DNS サーバアドレスと経路テーブルを特別な外部コマンドを使わず、shell 上のみで確認する方法です。

DNSサーバのアドレスを確認するには、net.dns{1,2} に対して getprop コマンドを発行します。
# getprop net.dns1
192.168.32.18
ADP-1などを使っていて、DHCP経由で取得したアドレスを知りたい場合には、dhcp.tiwlan0.dns{1,2}を確認すると良いでしょう。
# getprop dhcp.tiwlan0.dns1
192.168.32.18
同様に、DHCP経由で取得したルータのアドレスを取得するには、dhcp.tiwlan0.gatewayが利用できます。
# getprop dhcp.tiwlan0.gateway
192.168.32.1
一方、現時点の経路情報を見たい場合には、/proc/net/route を cat で覗くのが簡単です。例えば、以下のような出力を得ることが出来るでしょう。
# cat /proc/net/route
Iface Destination Gateway  Flags RefCnt Use Metric Mask  MTU Window IRTT
tiwlan0 0020A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0
tiwlan0 00000000 0120A8C0 0003 0 0 0 00000000 0 0 0
Destination が '00000000' の行はデフォルト経路情報です。

Gatewayには、'0120A8C0' と書かれていますが、10進数表記に直すと'1.32.168.192'となり、'192.168.32.1'の順番がひっくり返ったものと読めます。

コマンドがそれほど充実していない Andorid の shell 環境なだけに、頭の片隅にでも留めておくと、「なぜかネットワークにつながらない」という時には便利なのではないかと思います。

2009/05/22

PENTAX K-7 発表

PENTAX K-7が発表されました!

Kの名前とMZ-7の名前を合わせ持つ「K-7」という名前が誇らしげですね。角張ったペンタ部を持つシルエットも素敵です。

風景/広角レンズ好きな私にとって、この価格帯でありながら「視野率約100%」という点が何よりも嬉しいです。また、サンプルを見る限りでは、PRIME IIは期待できそうで、特に空やビル撮りにはD-RangeやCTEあたりがわくわくしてきます。

構図微調整、自動水平補正、電子水準器なんて、まさにヘタレな私に最適な機能群(おぃ)!

視度調整が未だにスライドなところが残念だったり、グリーンボタンの位置が変更になったりしている点が不安だったりという点もややありますが、それらが全く些細に感じられてしまうほど、撮影の楽しさを増してくれそうな、魅惑的な機能群。

風景取りが今以上に楽しくなりそうなカメラを作ってくださった開発者の方々に、感謝です。

PENTAX はこのサプライズがたまりません。

2009/05/14

Linux kernel version に -dirty が付く理由

ある Linux の kernel を build したところ、version に -dirty という文字列が付加されました。

この Linux ではバイナリ提供されている LKM を insmod する必要があります。LKM は kernel の version 文字列(いわゆる vermagic)が一致しない場合、(普通には)読み込んでくれませんので、この -dirty が問題となりました。

Kernel の Makefile によれば、
config に CONFIG_LOCALVERSION_AUTO が設定されている場合、./scripts/setlocalversion の生成結果が付与される
と書いてあります。

そこでsetlocalversion を読んでみたところ、commit されていない改編 code がある場合、-dirty という文字が付与されることが分かりました。なるほど、確かに実験用 build のつもりだったので commit していないコードがあります。

release version と、少しいじった version を混同しないためにも、この自動付与は大変良いアイディアだな、と思いました。

と、感心しつつ、今回は暫定的に -dirty が付かないよう、setlocalversion をいじって対処してしまいました... (^^;

2009/05/10

ARToolKitで初音ミク Act2 : MMD標準モデルver.大百科

ちょ、ちょっと、これ、凄すぎます...。感動。

FreeBSD 6.4 から FreeBSD 7.2 へのアップデート

FreeBSD 7系 から、3回目のリリースとなる FreeBSD 7.2 が公開されました

今まで FreeBSD 6.4 を使っていましたが、そろそろ良い頃合いかと思い、移行してみることに。

従来、FreeBSD の major アップデートは、cvsup で src を持ってきた後、/usr/src/UPDATINGを見つつ、大きく変更の加わった /etc 配下のファイルを mergemaster で制御しつつ、といった感じの作業となることから、私にとってはなかなか手間のかかる作業でした。

しかし今回の major アップデートでは freebsd-updateコマンドを使うことで、この作業を自動化することができます。これは嬉しい!

freebsd-update コマンドを使った major アップデートの方法は、詳細な手順が Web で公開されていますので、これに従うのが簡単です。

なお記事内にも書かれている通り、今回の移行元は upgrade 機能をサポートしたfreebsd-updateコマンドが最初から用意されている FreeBSD 6.4 になりますので、記事内のsh freebsd-update.sh -f freebsd-update.conffreebsd-updateへ読み替えて実行することになります。

実際に作業を行って気のついた点は以下の通りです。

1. upgrade 処理は時間がかかる

取得ファイルを丹念に調べ上げ、その後に取得をはじめるため、 upgrade 処理には非常に長い時間がかかります。寝る前などに実行しておくと良いかもしれません。

2. portupgrade -a に時間がかかる

記事内では portupgrade -a を2度行うことが推奨されています。特にそのうち一回は -f 付きであり、インストールされている ports を full build することになりますので、ここでもそれなりの時間がかかります。package が使える人は、-P の併用も考えると良いでしょう。

なお、FreeBSD 7.x 系は thread をはじめ、各種ライブラリが変更になっていますから時間がかかるから、という理由で portupgrade を端折るのは避けた方が無難です。

3. 最後のfreebsd-update install の前に misc/compat6x を入れておくと良い

最後のfreebsd-update installを実行すると、古いライブラリを消去してくれます。が、私が portupgrade -af のやり方を間違えたのか、再構築後の一部 ports が、libc.so.7ではなく libc.so.6 を要求していたため、起動できない ports が出てしまいました。念のため、misc/compat6x を入れておくと良いかもしれません。

4. VMware 5.x の vmware-checkvm が起動できない

ここ数年 FreeBSD は Windows 上の VMware workstation 5.x で使っているのですが、FreeBSD 7.x に入れ替えたところ、vmware-checkvm が Bad system call でcore dump するようになってしまいました。VMware workstation 6.x 上では動作するようなのですが、5.x 系のvmware-checkvm は static link されているためか、うまく動作させることが出来ません。

折角の機会なので、VirtualBox上で稼働させることにしました。今まで使っていた vmdk をそのまま使っていますが、特に問題なく動作しています。

5. vje の ports が削除された

私は長い間 FreeBSD 上の仮名漢字変換サーバに VJE-Delta を使っていたのですが、とうとう ports から消えてしまいました(といっても、消えたのは、昨年の8月のようですが...)。依存している misc/compat3x がずいぶん前から FORBIDDEN になっていたので、致し方ないことです。

残念ながら VJE-Delta そのものもずいぶん前から販売終了となっていますので、これを機会に仮名漢字変換サーバを乗り換えることに。といっても、VJEをesecanna経由で使っていた関係で、最も簡単に移行できる canna を選択。VJE以前は、cannaを使っていたとは言え、10年以上のブランクがあるので、何か新鮮な感じです...。

FreeBSD 7.2 への入れ替えが終了した後は、快適に動作しています。current 時代を通しても7.x系は使っていなかったので楽しみです。

2009/05/03

Eclipse のデバッガで android.jar のソースコードを追いかける方法

Andorid 用コードを書いていると、まれに標準ライブラリの中を追いかけたくなる時があります。

残念ながら、Android-SDK に付属してくる android.jar にはソースコードが含まれていないため、ebugger で標準ライブラリ中へ入り込むと、バイトコードが表示されてしまいます。

Eclipse を通じて、android.jar へソースコードを attach しようとすると、ADT はこの操作を許可してくれません。

幸い Erick Blirke さんが貴重な情報を公開してくださっており、SDK の platfroms/*/ 配下へ sources という名前でディレクトリを作り、その中へ android.jar と同じ階層構造で .java ファイルを置けば良いことが分かりました。

そこで、特定ディレクトリ配下の .java ファイルを検索し、package に基づくディレクトリレイアウトで symbolick link を張るスクリプトを作成してみました。githubから入手可能です。
% git clone git://github.com/n-miyo/aspack.git
ただの単一ファイルスクリプなのでWebインターフェイスからコピペして使うのが簡単かもしれません。

手元で MacOS X + Andorid SDK 1.5 + android-sdk-1.5_r1 タグで repo sync したソース、という構成で試したところ、無事に標準ライブラリの中へ入ってゆくことが出来るようになりました。便利です。

なお、このスクリプトは、Michael Forster さんによるjava ファイル群を zip 化する python スクリプトから多くのアイディアを頂きました。

Blirkeさん、Forster さん、貴重な情報、どうもありがとうございました。感謝しております。