2008/09/02(火)PC-BSD 1.5.1 amd64版の日本語環境

3週間くらい前に今まで使っていたPCが逝ってしまい、今あるものを活用するために、中古品で代替を用意したのですが、、

当方は消費電力が小さい AMD cpu ものにこだわっており、そうなると、現行で入手できるものは 64bit ものな Athron64 に事実上限られています。32bit な AthronXP はCPU 本体は流通していますが、肝心な対応マザーボードを探すほうが大変な状況になっています。ここ4年くらいでこんな状況に変わってしまっています。

PC-BSD の 32bit 版には、http://www.ofug.net/~yamajun/files/  などで公開されている日本語入力API の pbi ファイルがあり、これを使うと簡単に使えるようになるのですが、amd64 版には対応するpbi はないです。
 試しに 32bit 版のpbi を強引にインストール試みましたが、全く反応なし。。
 仕方がないので、ports から入れることにしました。
 以下、備忘録的なものです。初心者向けではありません。

1. コンソールを起動し、root になる
2. sysinstall で ports を導入(デフォルトでは入っていない)
3. 以下を root で順番に実行

cd /usr/ports/japanese/anthy
make install
cd /usr/ports/japanese/uim-anthy
make install
cd /usr/ports/textproc/uim-gtk
make install

4.ログインユーザに戻り、ログインユーザのホームディレクトリに移動
5 ~/.xprofile を下記のように編集
export LANG=ja_JP.eucJP
export XMODIFIERS='@im=uim'
export GTK_IM_MODULE=uim

6. ~/.kde/Autostart ディレクトリに 適当なファイル名で以下の内容の起動スクリプト生成。パーミッションを 755 にしておくのを忘れないこと。

#!/bin/sh
uim-xim &
uim-toolbar-gtk-systray &

7. ~/.qt/qtrc ファイル中の[General] セクションに以下の1行を追記

XIMInputStyle=Over The Spot


PC-BSD では、日本語入力は、uim+Anthy の組み合わせがデファクトスタンダートになっています。Shift+スペースキーで日本語入力の on/off を切り替えます。

2008/07/29(火)analog 6.0 の FireFox3対応

Firefox3 になってから、デフォルト設定では表示される文字サイズが大きくてお困りの諸氏も多いかと思います。
ベースカーネルの技術者としては、デフォルト設定であっても Firefox2 や IE6 などと同じようなイメージで表示させたいし、出来る限りその方向で対応しています。
通常は、スタイルシートにて文字フォントサイズを指定することで回避できるのですが、analog6.0 ではスタイルシートの設定がCプログラムでハードコーディングされているようなので、直接ソースコードをいじらなければ対応できないと思われます。

以下の修正で対応しました:
src/outxhtml.c の 58 行目あたりに、赤字の部分追加
57 else { /* default style sheet inline if no external style sheet specified */
58  fprintf(outf, "<style type=\"text/css\" id=\"internalStyle\">\n");
59  fprintf(outf, \"body {\n\tfont-family: Osaka,monospace,sans-serif;\n\t\";
60     "font-size: 9pt;\n\tfont-size-adjust: none ;\n}\n") ;
61  fprintf(outf, "h2 {\n\tbackground-color: #A0C0F0;\n\twidth: 98%%;\n\t"
62     "padding: 3px 6px;\n}\n");
ソースコード修正後、コンパイルして対応完了です。

2008/06/03(火)shoutcast の ID3タグ表示

長らく悩んでいたのですが、解決を見たので・・・
200806031.jpg

これは、Tristate社 開発の Shoutcast 再生専用モジュール BB-SHOUT です。
液晶表示の下の行に  アーティスト名 - 曲名 のように流れてくる曲の簡単な情報が表示されます。

shoutcast は、基本的に mp3 形式のファイルを HTTP を独自拡張したストリーミングプロトコルで流れてきます。
アーティスト名や曲名は、mp3 形式ファイルの中に含まれる ID3 タグ情報を拾って取得するような仕組みになっています。

アーティスト名と曲名を表示させるためには、ID3 タグを設定すれば良いのですが、ID3タグを設定したのに拾ってくれない・・・と悩んでいた方も結構おられるように思います。

FreeBSD 6.xや 7.0で shoutcast をsc_trans で流すことを検討している場合、先ずは sc_trans を捨てること を考えましょう。 sc_trans は基本的な部分は機能しますが、ID3タ グを活用する場合、 FreeBSD では使い物になりません。(Linux 用の sc_trans も駄目っぽいです)
sc_trans の代わりに ices0.4 を使ってください。FreeBSD の場合は、Packages になっています。カテゴリは audio です。
また、ID3 タグは v3.2 で設定する必要があります。
ID3 タグには 互換性が高いと言われる v1.0 から v1.1/v2.2/v2.3/v2.4/v3.2 と6種類あるようです。
ところがこの世に出回っている ID3タグ設定ソフトウェアは v2.4 までの対応で、 v3.2 に対応しているものはなかなか見られません。
v3.2 に対応しているのは audacity 程度しか見当たりません。(要 lame ライブラリ)

200806032.jpg

sc_trans を ices0.4 に変更し、ID3 タグを v3.2 で定義しなおすことで、このようにめでたく ID3タグを拾ってくれるようになります。

2008/03/29(土)2038年問題

遠い未来の話かと思ったら、ついに当方が設計開発したシステムで発生したようで。。orz
Webブラウザである操作をすると、'500 Internal Server Error' で以後の操作が不能になるというので、どこでそうなるか追いかけている最中に、「ある操作」をすると、

Day too big - 47482 > 24855
Sec too big - 47482 > 44047

のメッセージを吐いて Internal Server Error になる、というものでした。
メッセージからして時刻や日付に関する部分であることが類推できるので、それを中心に検証していたら、、
データベース上に 2100年x月x日 のデータを発見。これが原因です。

2038年問題は、どういう問題かというと、現在多用されている Unix / Linux のシステムクロックが 1970年1月1日 AM 0:00:00 からの累積秒数で表現されており、これが 32bit 長のため、このまま何も対策しないと、2038年1月19日 AM 03:47:07 でフルカウントになり、次の1秒で桁溢れになるため、あらゆる誤動作を引き起こす、という問題。2000年問題より深刻とも言われます。
#ちなみにMacOS ではファイルシステムについて同様の問題である 2040年問題があります。

該当システムは、日付部分だけが問題だったので、Unix のシステムクロック(しばしば epoch とも言う)を使わずに、西暦元年1月1日を起算日とする日付(これはユリウス日と呼ばれる)に変換した上で処理することで回避。
ただ、最近のOSは、Unix のシステムクロックを 64bit 長にしているものも出てきているので、流通しているUnix系OSが64bit 長システムクロックになれば、オーバフローは更に2900億年ほど先になるので、その方向で対策はされる模様。
少なくとも FreeBSD 6.x においては システムクロックは 32bit 長表現みたいです。(gcc のバージョンも 3.4 だし。。)
gcc のバージョンがあがった FreeBSD 7.0R ではどうでしょうか。(gcc のバージョンは 4.2.1)


※追記:
簡単に確認できるようなので、早速試してみることに・・・
FreeBSD 7.0R i386版

[1]% date -u -r 2147483647
2038年 1月19日 火曜日 03時14分07秒 UTC
[2]% date -u -r 2147483648
1901年 12月13日 金曜日 20時45分52秒 UTC

FreeBSD 7.0R amd64 版

[1]% date -u -r 2147483647
2038年 1月19日 火曜日 03時14分07秒 UTC
[2]% date -u -r 2147483648
2038年 1月19日 火曜日 03時14分08秒 UTC

少なくともプラットフォームが 64bit だと64bit長システムクロックに対応している模様。。