swk's log 最新ページ

gkbinclock - from swk's log

GKrellM 用の「2 進時計」プラグイン.配布サイトはこちら:


2005-05-04 Wed

* 正午は午前十二時? 午後十二時? 午後零時? [gkbinclock]

gkbinclock へのパッチを 1 ヵ月くらい前にもらっていたのだが,そのまま放置してしまっていた.ようやく取り込んで 0.6 をリリース.

何のパッチだったかというと,「12時間表記モードでは 0 時と表すより 12 時と表す方がいいはずだから,そう直したよ」というパッチ.

すぐに取り込めなかったのは,この主張自体が私の感覚と反するからである.結局そのパッチをそのまま適用するのではなく,0 時と表示するか 12 時と表示するかを選ぶための「12 instead of 0 モード」というものを設定パネルに増やすことにした.


個人的感覚としては,12時間表記であっても 1時〜12時より 0時〜11時で表す方が素直だと思っている.

正午を 12:00 と表す場合,それは午前 11:00 に後続するものなのだから,午前 12:00 であるとするのが素直だろう.しかし正午を一瞬でも過ぎた 12 時台の時刻を考えると,その時刻は正午を過ぎているのだから午後であり「午前12時XX分」と呼ぶのは非常に気持ち悪い.正午を午後 0 時,正子を午前 0 時とすれば,この辺の気持ち悪さは払拭される.


現実には「12時」という表現はごく普通に使われていて(実際俺だって使うよ),しかも午前なのか午後なのかは統一されていないので,ややこしいことこの上ない.(まあ実際には「昼の12時」とか「夜中の12時」とかいうことが多いし,文脈で一意に定まることが多いのでたいてい大丈夫なんだけど)

これはパッチを送ってくれた Peter とメールで議論しているときに彼が教えてくれたことなんだけど,strftime(3) だと正午は「午後」12:00 なのだ.

% perl -e 'use POSIX; print POSIX::strftime "%r\n", 59, 0, 11, 1, 1, 2000;'
11:00:59 AM
% perl -e 'use POSIX; print POSIX::strftime "%r\n", 0, 0, 12, 1, 1, 2000;'
12:00:00 PM
% perl -e 'use POSIX; print POSIX::strftime "%r\n", 1, 0, 12, 1, 1, 2000;'
12:00:01 PM

気持ちわるーい.

もっと気持ち悪いのは日本の法令だ.日本で時刻の表記を定めている法令を探すと,明治5年の太政官布告第337号までさかのぼることになり,その後改廃されている記録はないらしい.

これに掲載されている時刻表よると,

  • 午前は「午前零時 即 午後十二時」から「午前十二時」まで,
  • 午後は「午後一時」から「午後十二時」まで

と分類されている.

(゜Д゜)ハァ?

つまり正子は午前零時でも午後十二時でもあるけど,正午は午前十二時でしかないと.さらに正午と午後 1:00 の間は午前でも午後でもないと.

なんつう法律だ.ていうか時刻表作ったときに 午前の表のマスが午後より 1 個多い 時点で異変に気づいてくれ太政官.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Jaelyn] What a joy to find such clear thinking. ... (2013-07-04 07:05:45)

2005-03-22 Tue

* TIX LED clock [misc][gkbinclock]

thinkgeek に LED 時計の新種.デューティ比変調ってところか.

慣れると普通の binary より読みやすいかも知れない.以前作った gkbinclock を常にデスクトップに表示しているけど,いまだに 16 より上は瞬時にはピンと来ない(← じゃあ使うなと小1時間

あと思ったのは,こういうコードが一意に定まらないっ時計てのも結構面白いかも.以前 [2005-03-06-1]傾いた時計クイズ のときに今さらのように認識したのは,あー,アナログ時計の表示って実は冗長だったんだなあという点.分針とか秒針って,時針の読み取り精度が十分に高ければ不要なんだよな.

普通のアナログ時計の場合は,冗長だけど一意に定まるコーディングによって読み取り誤差の影響を小さくしている.一方,この LED クロックは,一意に定まらないコーディングによって楽しさやアート性を向上させているといったところか(ほんとか?).

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Ratih] Your postnig lays bare the truth (2013-01-01 18:36:22)

2005-02-03 Thu

* 16進テトリス [tech][gkbinclock]

gkbinclock へのリンクを逆にたどって見つけた.すげー.やりたくねー.しかし 16 進数の読解練習にはいいかも(いいのか.

2005-01-05 Wed

* 24h モード実装 [gkbinclock]

gkbinclock-0.5 を公開.12/31 にメールでリクエストをもらっていた 24時間表示モードに対応しただけ.正月休みの間に実装して,しばらく動かしてたけど大丈夫そうなのでリリース.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Roman] This could not possibly have been more h... (2012-12-30 14:17:41)

2004-12-31 Fri

* gkbinclock-0.4 リリース [gkbinclock]

あやうく忘れそうになってたが,手もとでは問題無く動いているようなので config panel を実装した版を公開しておく.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Mara] The purchases I make are etnriley based ... (2013-01-01 19:52:12)

2004-12-26 Sun

* config panel 実装 [gkbinclock]

とりあえず普通の 2 進か BCD かの選択は config panel で選べるようにするべきだろう,というわけで config panel の実装に手をつけてみる.

gkbinclock は,構造としては panel 1 枚でできていて,そこに LED の decal が配置されている(gkrellm_create_decal_pixmap で座標を指定して生成).これを config panel で入れ換えたい.ややこしいのは,普通の binary と BCD で panel の縦サイズが変わってしまう点であった.

とりあえず,decal だけ destroy して create し直して, gkrellm_panel_panel_configure, gkrellm_panel_panel_create してみた. GKrellM 2.2.4 だと動いているように見えるのだが,1.2 だと panel のリサイズがうまくいかない.具体的には,大きくはなるんだけど小さくなってくれない.そして,何度かやってると segv で落ちてしまう.結局,panel ごと一旦 destroy して,gkrellm_panel_new0,decal の生成,panel の configure と create,callback の connect し直し,と一通りやり直すのが正解っぽい.

ちなみに gkrellm_panel_create を呼ぶときの最初の引数には,その panel の親 widget を指定しなければならないんだけど,これは plugin の create_monitor が呼ばれるときに引数として渡される仕組みになっているので,他から呼ぶにはさてどうしましょう,とちょっと悩んだが,えいやっとこんな感じで済ます.

static GtkWidget *main_vbox;

static void
create_plugin(GtkWidget *vbox, gint first_create)
{
   main_vbox = vbox;
   create_led_panel(first_create);
}

とりあえず手元では動いているけど,これでいいのかよく分からない. builtin なモジュールの実装を眺めてみると,create_monitor の中でもう 1 個箱を作るなんていう面倒なことをやっていた.もしかしたら何か落とし穴があるのかも.少し様子見てからリリースする方がいいかな.

ついでなので LED 用の decal を LED1, LED0, BLANK から選べるようにする.以前,theme によっては点灯と消灯が逆に見えるという指摘をもらったことがあったので,それに対するとりあえずの対応.

こっちは object を壊したり作ったりリサイズしたりする必要はなかったので楽だったが,「前の描画時刻から比べて変化していないビットの描画処理は省略する」という自己満足な最適化を入れていたのを忘れていて,しばしはまる _| ̄|○

2004-12-25 Sat

* ver. 0.3 リリース [gkbinclock]

GKrellM 2.x 対応版.2.x 向けソースをベースとして,1.x 用にマクロで切り替えるようにした.デフォルトの Makefile だと,両方用の so ファイルを生成しようとする.片方だけでよい場合は TARGET 変数を書き換えて下さい,な方針.自動検出とかする方が親切なのかも知れないけど,まあそのうち気が向いたらってことで.

2004-12-23 Thu

* gkrellm2 仮対応 [gkbinclock]

gkbinclock を gkrellm2 に仮対応.本家サイトの porting guide 見ながらちゃちゃっと書いてみたら思ったよりあっさり終わった.

今は 1.x の記述がベースで,#define マクロで gkrellm2 に対応させてる感じだけど,今後を考えると逆の方がいいかもな.週末にはリリースか?

2004-12-23 Thu

* gkrellm-2.2.4 [suite][gkbinclock]

plugin の開発・動作確認用にgkrellm 1.x と 2.x の両方をインストールしたかったんだけど,FreeBSD の ports だと は共存は想定されていないっぽい.というわけで,gkrellm-2.2.4 を ports を使わずに make した.

{server,src}/Makefile を

-FLAGS = -O2 -I.. $(PKG_INCLUDE) $(GTOP_INCLUDE)
+FLAGS = -O2 -I.. -I/usr/local/include $(PKG_INCLUDE) $(GTOP_INCLUDE)

しておいて,

% gmake freebsd
# gmake install_freebsd INSTALLDIR=/usr/local/gkrellm2/bin INCLUDEDIR=/usr/X11R6/include/

とする.実行ファイルは /usr/local/gkrellm2/bin/gkrellm に入る.

2004-08-28 Sat

* 作ってみた [gkbinclock]

ver. 0.1 リリース.とかしてる場合じゃないのだが.逃避にも程がある.

最終更新時間: 2009-01-04 15:31


Shingo W. Kagami - swk(at)kagami.org