pkgdb.rb での Segmentation Fault

[2006-02-01] の portsdb.rb での Segmentation Fault とほぼ同じ現象に再び遭遇。

$ portversion -vL=
—> Checking the package registry database
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg … – 249 packages found (-2 +0) (…)/usr/local/lib/ruby/site_ruby/1.8/pkgdb.rb:466: [BUG] Segmentation fault
ruby 1.8.4 (2005-12-24) [i386-freebsd4]
 
Abort trap (core dumped)

なんで bdb1_btree 見てるのか、と疑問に思いながらソースコードを追っていくとどうやら、PKG_DBDRIVER という変数を見ているもよう。portsdb では PORTS_DBDRIVER ですが、pkgdb ではこちらを使う、と。PORTS_DBDRIVER と同様、PKG_DBDRIVER も bdb_btree (bdb1_btree)がデフォルトで、これは freebsd5 でも変わっていないようです。

export PKG_DBDRIVER=bdb1_hash
pkgdb -aF

これで対処完了!
 
追記: pkgtools.conf に

ENV[‘PORTS_DBDRIVER’] = ‘bdb1_hash’
ENV[‘PKG_DBDRIVER’] = ‘bdb1_hash’

とするほうが設定がまとまっていいかもです。

今日の Eclipse Plugin

最近ネタがあっても更新してません(。。;)
翻訳プラグイン
リリース当初から知ってたものの、見なかった事にしていたプラグイン^^;
命名の時の手間が減るかなと思い今更に導入。
Update Site: http://www.eisbahn.jp/update-site/
EclipseUML
Free Edition を導入。GEF, EMF がバンドルされ, インストーラ(実行可能なjar形式)での配布で昔に比べてインストールが容易になってました。
普段 Jude Community Edition を使っているのですが、
いまいちコードとの同期が取りづらいのと、UML2.0 に対応していないのが不満だったので..
 
HeapStatus
Eclipse3.2 で標準搭載になった(Eclipse自体の)メモリ使用状況表示, メモリ解放プラグイン。
Update Site: http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-ui-home/updates
追記(2006-07-21): Eclipse3.2 ではデフォルトでヒープステータス表示がオフになっている。「設定→ 一般」の「ヒープステータスを表示」のチェックを入れることで利用可能になります。
 
Commons4E (@IT の記事)
Update Site: http://commons4e.berlios.de/updatesite/
– ソロプログラミングプラグイン
これにはまったらきっと病んでる。

eAccelerator トラブルシューティング – Can not create shared memory area in Unknown on line 0

Q. Linux + Apache + PHP + eAccelerator の環境で apache が次のエラーを出して動かなくなりました。

$tail -f error_log
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
[Thu Feb 23 09:26:31 2006] [warn] pid file /usr/local/apache_1.3.34/logs/httpd.pid overwritten — Unclean shutdown of previous Apache run?
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0

A. このエラーが出た場合、原因はここの次の FAQ に書いてあるケースの可能性があります。

Q: I’m using linux 2.6 kernel and eAccelerator doesn’t get loaded when the shm_size is set to value bigger than 32mb. Php gives this warning:
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0

A: The default shared memory size for the 2.6 kernel is 32mb. You can change this size by setting /proc/sys/kernel/shmmax to the disired maximum value. You can do this by echo VAL > /proc/sys/kernel/shmmax or add the line kernel.shmmax=VAL to /etc/sysctl.conf so you don’t have to set it manualy every time you reboot.

カーネルの共有メモリ制限(デフォルト32MB)を超えて、eaccelerator.shm_size を設定したのが原因でした。php.ini で

eaccelerator.shm_size=32

のように範囲内に押えるか、あるいは FAQ にあるように

# cat /proc/sys/kernel/shmmax
33554432

を、
# expr 64 “*” 1024 “*” 1024 > /proc/sys/kernel/shmmax
のように、バイト単位で適切に上限を設定してカーネルごとリブートすれば解決します。

OpenLaszlo メモ

■OpenLaszlo デモ:
http://www.laszlosystems.com/partners/support/demos/
■OpenLaszlo 利用についての @IT の記事:
http://www.atmarkit.co.jp/fwcr/rensai/laszlo01/01.html
■採用している例:
– http://www.behr.com/behrx/colorsmart/main.jsp
http://www.svcfinancial.com/sol_demo_library2.html
 から辿れるリンク先(view demo とあるもの)。
 
■その他採用サイト一覧:
http://www.laszlosystems.com/customers/case/
■OpenLaszlo でビジネス展開している日本の会社:
http://www.net8.co.jp/

CSS バグ辞典

http://members.at.infoseek.co.jp/cssbug/index.html
特に IE について、けっこうな量の不具合があるのだなぁと改めてびっくりです。
例えば vertical-align 周りの動作の怪しさはずっと気になっていたので、検証コードで確認できてすっきりしました。
参考:
CSS テクニックコミュニティ(mixi)

bind8/bind9 設定の基本

named.conf 全体設定、zone の項目でゾーン(ドメイン、逆引き時の IP アドレス)を定義し、実際の DNS レコードについては、ゾーンごとにゾーンファイルに記述していく。

named.conf:
    options {
        directory “/etc/named”;
        // 任意のディレクトリ名。ここで設定したものが、
        // ゾーンファイルなど設定ファイルのルートディレクトリになる。
    };
    // 正引き(ドメイン -> IP アドレス)用。
    zone “example.org” { // example.org ドメインについての定義
        type master; // 他の DNS サーバを参照するのではなく、自分で
                      // DNS レコードを定義する場合は master。
                      // 他のサーバを参照する場合は slave
        file “master/example.org”; // 利用するゾーンファイル。ファイル名は任意のものでよい。master 用。
        // masters { 192.168.1.1; 10.0.0.10; }; // DNS レコード参照先マスタサーバ。slave 用。
    };
    
    // 逆引き(IP アドレス -> ドメイン)用。
    zone “1.168.192.in-addr.arpa” { // 192.168.1.* 用。ドット区切りで逆転して、in-addr.arpa を付加する。
        type master;
        file “master/1.168.192.in-addr.arpa”;
    }

次にゾーン設定ファイルです。ドメイン指定の部分では、最後にドットをつける形式(FQDN)にすることに注意します。これは FQDN 形式でないと後にドメイン名が続く(example.org のゾーン設定の場合、ns.example.org は ns.example.org.example.org.)と解釈するためです。

master/example.org:
$TTL 3600 ; Default TTL. 全てのレコードについて有効期間を何秒にするか。
@ IN SOA ns.example.org. postmaster.examle.org. (
       ; 第一パラメータはどのホストについてのレコードか、で @ は *.example.org の意味です。
       ; 第二パラメータは IN は Internet の意味です。常に IN にするものだと思っていていいんじゃないでしょうか。
       ; 第三パラメータはレコードの内容です。SOA は Start of Authority の意味で、ゾーン設定で最初に設定します。
       ; SOA レコードには後ろに二つパラメータと ( 〜 ) が続きます。
       ; ns.example.org が DNS サーバ, postmaster.example.org が
       ; 管理者宛メールアドレス(@ を . に置き換えたもの)です。
       2006021714; Serial. 任意の数値でよいが、更新の必要の有無は
                 ; この数値以下かで判別されるため、
                 ; 更新の際はこの数値以上にする。
       3600 ; Refresh (sec). 更新確認の頻度を何秒ごとにするか。
       1000 ; Retry (times). 失敗時の試行回数。
       86400 ; Expire (sec). 失敗したときに何秒後に破棄するか。
       86400 ; Minimum TTL(sec).
    )
  IN NS ns.example.org. ; example.org, *.example.org の DNS サーバのドメインを ns.example.org にします。
  IN A 192.168.1.11 ; example.org, *.example.org の名前解決結果を 192.168.1.11 にします。
ns IN A 192.168.1.2 ; ns.exmaple.org の名前解決結果を 192.168.1.2 にします。
www IN A 192.168.1.11 ; www.example.org の名前解決結果を 192.168.1.11 にします。

master/1.168.192.in-addr.arpa:
$ORIGIN 1.168.192.in-addr.arpa. ; 192.168.1.* についての設定であることを宣言
$TTL 3600
@ IN SOA ns.example.org. postmaster.example.org. (
        2006021714 ; Serial
        3600 ; Refresh
        1000 ; Retry
        86400 ; Expire
        86400 ; Minimum TTL
    )
  IN NS ns.example.org. ; Primary DNS
  IN NS ns2.exmaple.org. ; Secondary DNS (Optional)
; 以下 IP アドレスごとに固有で逆引き設定をする場合のみ記述する。
1 IN PTR root.example.org. ; 192.168.1.1 の逆引き結果
11 IN PTR www.example.org. ; 192.168.1.11 の逆引き結果

参考:
ネームサーバーの設定
– bind9 設定
ゾーンファイルの書き方について教えてください(@IT)
– ISC BIND(English)

ファイルへのアクセス状況を調べる

fstat, lsof, fuser などのコマンドを使うと、現在開かれている全てのファイルと開いているユーザ、プログラム、プロセス、読み書きのモードが調べられます。
fstat は FreeBSD の場合で、fuser は Linux の場合、lsof は Linux, BSD を含む UNIX 互換 OS で利用可能です。BSD でlsof を使う場合は、 ports/sysutils/lsof を入れます。lsof は機能が豊富なので、lsof の利用をお勧めします。

fstat:
fstat [-fmnv] [-p pid] [-u user] [-N system] [-M core] [file …]
 
fuser:
fuser [-a|-s|-c] [-4|-6] [-n space] [-k [-i] [-signal] ] [-muvf] name

fuser -l
fuser -V
 
lsof:
lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [
+|-D D ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [
+|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ] [ -S
[t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ — ]
[names]

たとえば、ログファイルを開いているプロセス, ファイルを調べるには

lsof +D /var/log

等とします。
デバッグや問題究明に便利です。
 
参考:
– LSOF設置及び使用ガイド

J2EE でどのフレームワークを使うか。またデザインとの分離について

F’s Garage:日記
なかなか難しいなと常々思っているので、こういうの読むと安心。個人的には,突っ込みしてる方と同じで JSP + EL + Beans が多めです。loop についてはカスタムタグか、そのまま埋め込みかどちらか。これを読んで、カスタムタグも Java コードも使わない Plain Old HTML Pages で書けるのが一番デザインの分離ができそうな気がしてます。
 
参考:
– Nirvana Wiki

C# で Java と同等のアクセス制限をかける

Java プログラマが C# を学ぶ際のメモその2。
 
– Java
public: どこからでもアクセス可
protected: 自クラス内と子孫クラス、または同一パッケージ内であればアクセス可(default 権限も兼用)。
default: 同一パッケージ内からのみアクセス可。アクセス修飾子を省略した場合のデフォルト。
private: 自クラス内からのみアクセス可。
 
– C#
public: どこからでもアクセス可(入れ子 enum,interface のデフォルト)。
protected internal: 同一アセンブリ(DLL ファイル, EXE ファイル等)内と子孫からアクセス可。
internal: 同一アセンブリ内からのみアクセス可(名前空間直下で宣言したコンテナのデフォルト)。
protected: 自コンテナ(クラス等)内と子孫からのみアクセス可。(Java と違い同一名前空間は不可)
private: 自コンテナのみからアクセス可(入れ子 class, struct のデフォルト)。
 
注意すべきは、protected の動作の違いと、default(Java) と internal(C#) の制限範囲の違いです。
Java では、パッケージレベルでの制限が可能ですが、言語で制限をかけただけだと外部ファイルからのパッケージへの侵入が可能です。
これを防ぐには JAR を作る時にシーリング機構を利用すれば、そのパッケージの利用者の侵入を制限することができます。
マニフェストの不正な書き換えを防ぐにはJARへの署名機能等を使えばよさそうです。
 
C# では、アセンブリ(プログラム, ライブラリ)単位でのアクセス制限が可能で、名前空間単位では制限できません。アクセス制限がソースファイル単位ではないことに注意してください。
参考:
C# プログラマーズリファレンス – アクセシビリティレベル
JARマニフェストのメイン属性
– JavaHouse Brewers 19189 – Package Joining Attack(JDK1.2 での話)

パケットキャプチャツール

昔(2年ほど前)使っていて、機能的にも優秀で使いやすかったものなのですが、
名前を度忘れしていて今日やっと思い出しました orz.
 
Wireshark
(Etherealから改称)
ネットワークに実際に流れている中身をキャプチャして、GUI で見ることができるオープンソースなパケットキャプチャツールです。
Ethereal, Wireshark の Windows での動作には WinPcap が必要です。
 
Windows の他に、Linux 等さまざまな環境で動作します。
 
追記:
(2006-07-27) Ethereal は Wireshark として更新されるようになりました
参考:
Ethereal(イーサリアル)の日本語解説サイト
Wireshark