Diary of Sacred Fox - April 30, 2004

The Quintetには通算 179067 人(今日:0, 昨日:1)のお客様が来場しています

2004/04/30(1)

UIが悪いと感じた瞬間

理学部4号館を出るとき, ドアの取っ手を手で押したら手が反対側の扉に擦れて皮が剥けた時, いつものように体当たりで開けるべきだったと激しく後悔

2004/04/30(2)

Currier

アンテナ
更新された記事に対して『Up』とラベル付けする機能を実装しました
この更新後2度目にCurrierをチェックした時から有効です
表示基準は前回表示時のCurrier内の最新の日記ではなくて最新の巡回データファイルです, ほぼ巡回時間と同じです最新のデータファイルの日付よりも後の更新時刻を持つデータに対してラベルを付加しています
たまたま巡回後にあった更新を見ていたとしても, 次回Up報告されるでしょうし…場合によっては表示が少々狂うことがあるかもしれませんがご了承ください
また, MSIE 6.0で検証した結果: ブラウザバックではキャッシュが使われましたが, アンテナへのリンクをクリックした時には再読み込みしていましたブラウザにもよりますが, 巡回先からリンクを辿ったりブラウザバックを使ったりしてアンテナへ戻ってきた時に, ということで再読み込みボタンが押された瞬間には確実にUpが消えます, 消えなければブラウザのバグですアンテナへの再読み込みが発生するとUpラベルが消えてしまいますが, この辺は仕様ですのでご容赦下さい

ついでにIS2002erの代のアンテナ, IS2004erとかへのリンクも存在碧天IS2001erの代のアンテナ, 流石にIS2003erの中には利用者は少ないだろうか…アンテナAKIにリンク, 他に必要なものがあったら言って下さい
あまり数は多く出来ませんが善処いたします

2004/04/30(3)

CGI遊び

Encodeの使い方がいまいち分かっていなかったので勉強
コード種類の判別はEncodeではやってくれない模様, 自分で作る必要がある…ので作る
変換モジュールを作るんだったらこんな風なので良いのではないだろうか(乞撃墜)

use EncodeにはPerl 5.8以降が必要, OOPだけなら5で十分, でも今回はOOPじゃない5.008;
use これがないプログラムは危険strict;
use Perl 5.8以降の標準モジュールを利用Encocde;
sub tosjis($) {
  my $frm = shift;
  foreach (このリストの中で最初に見つかったもので断定する, 最初の2つはこの順番でないと誤判定が出る, 後ろの2つはこの順番でないとEUCが半角カナに化ける(Shift_JISで半角の『イヒ』はEUCの『暇』に化けることは一部では有名), 因みに此処の表現はEncodeでのCanonical Name, iso-2022-jpの代わりに制限のゆるい7bit-jisを利用qw(7bit-jis utf8 euc-jp shiftjis)) {
    my $tmp = $frm;
    my 変数名から分かるように一旦UTF-8に落としている$utf = エラーが出てきたらTrapしてundefにしなさいという指示eval {decode($_, $frm, 失敗したらとっとと諦めてエラーで堕ちなさいという指示Encode::FB_CROAK)};
    気持ち悪いから一応, 使いやしないんだけどundef $@;
    return encode('shiftjis', $utf) if $utf;
  }
  return undef;
}
print このスクリプトをShift_JIS, EUC-JP, ISO-2022-JP, UTF-8のどれで書いていてもShift_JISで表示する, レモンtosjis('檸檬'), "\n";

あとは完璧にはならないけどあればあっただけ教育的効果が出るのでh2z一番単純で馬鹿な方法はreturnをencode('shiftjis', decode('iso-2022-jp', encode('iso-2022-jp', $utf)))とでもすること, iso-2022-joは半角カナを扱わないかませられれば完璧なんだけど…
因みにこれを完全にするにはFormのhidden inputフィールドで大昔に言われていたhtmlの『美乳』効果(前述の文字はEUCとSJISで被っていない部分にコードがあるのでこれを最初の方に入れておくとブラウザのコード判別の成功率が上がる)でしょうか日本語を強制的に渡して一旦分割してEscapeを外し, \tを半角スペースに区切ってから\tで繋いでEncode? さすがにhiddenとそれ以外でエンコードが違うことは無いと思われるのでパラメータを同時にエンコードすればいいだろうと思われる…面倒そう
ま, 昔からある非標準モジュールだが恐らくCGI作者の中では最も有名なモジュールの一つJcode使えやという話もありますが…