コンピュータ

疲れてる

そんなこんなで他の業務の合間にHDD2台でRAID組んで,システムを再構築。
一通り終わってmessagesを見ると,swapがないとエラーが出ている。
…とるの忘れてた。
なくてもいいか,と思ったが念のため切りなおした。

新品HDD死亡

とあるサーバのHDD内蔵1台に2台増設して、RAID1+スペアの構成にした。
スペアが正常動作するか確認のために1台failさせたら、残った方のHDDがuncorrectable errorで復旧不可能に。
増設したHDDはHGST製(内蔵はWDCだった…容量はまったく同じ)。Drive Fitness Test (DFT) を動かしたら、テストが通るのは内臓のWDCだけで、HGST製のは途中でハングする。
原因が良くわからないが、DFTがnvidiaのSATAコントローラに対応してないのが原因と断定して、サーバ本体付属の診断ツールで検証。WDCの方が通るのは謎だが、HGSTのドライブ専用のテスト方法がうまくいってないとか多分そのへんのような気がしないでもない。
結局、無事(?)エラーを出してる方のHDDだけ異常と診断された。

IBM System x3105

職場で,x3105のOpteronモデルの一番安いのを私のオモチャとして購入。メモリは増設して計1GBと控えめ。
特に変なデバイスはなく,それほど新しくないOSもわりとすんなり稼動。

昔のゲームのフォント

昔のnamcoのゲームで使われていたフォント。
最初はnamcoのオリジナルかと思っていたが,他のメーカーのゲームでも使われている。
開発用機材のデフォルトのフォントとかそういうものだろうか。
ちょっと気になった。
ピクセル数が少ないので似たようなフォントはたくさんあると思うが,これは今見てもかなり秀逸だと思う。0とOの表現とか。
oldgamesfont.gif

WAMP初挑戦

Windows+Apache+MySQL+PHPで作られているという社内(?)のシステムのUNIX系OSへの移行作業とその後のメンテを押し付けられ命じられたので中を覗いてみる。
PHPは使ったことがないんだがなー。
DBを軽く見てみると

  • テーブル数個のうち半分くらいしか使ってない
  • 何もかもコード化されていなくて,ユーザやグループをはじめとする名称がそのままキーになっている。
  • 一人のユーザに対応するグループが10個分用意されている。正規化されてない。
  • コンテンツを保持するひとつの項目にplain textとhtmlが混在していて判別のための項目はない。
  • たまに情報がDB内ではなく公開ディレクトリに無造作に置かれたテキストファイルに入ってる。
  • フィールド名の綴りがいろいろ間違っている。

PHPの方を見てみると

  • オブジェクト指向ではなく,別ファイルになっている関数群をまとめたものを require する形式。
  • 関数群をまとめたファイルというのが,ディレクトリ毎に同じ名前の別ファイルとして存在していて,同じ関数が定義してあるが中身が少しずつ違う。
  • 同じような手続きがあちこちにある。
  • 組み込み関数の呼び出し方がいろいろ間違っている。
  • ほとんどのデータを登録・修正・削除するインタフェースがない。
  • 入力値に対するチェックがない。
  • 単純に文字列連結でSQL文を作っている。
  • HTMLのエスケープはほとんどやってない。SQLに追加される文字列のエスケープはまったくやってない。
  • 使ってない(作りかけ)のファイルが多数。

など。
さて,どうやって捨てさせるか…。

POSTされる文字列のencoding問題

掲示板などをはじめ,フォームから日本語を入力してsubmitしてサーバ側で処理をさせるような処理を行う場合,大昔のWebブラウザは日本語化が無理矢理だったりした関係で,ブラウザによってPOSTされる文字列のencodingがまちまちだった。このため,多くのブラウザに対応するとなると,受け取る側は自動判定をはじめ小技がいろいろ必要だった。
例えば任意の文字列のEUC-JP/Shift_JISの自動判別を完全に行うことは不可能である。ここでhiddenで適当な文字列を埋め込んで,その文字列を使ってencodingを調べるといった方法もあったが,hiddenと通常の入力フォームでそれぞれ違うencodingで送るブラウザもあったり。User-Agentを見て判定の優先順位を変えるとか涙ぐましい努力をしているものもあったが,新しいブラウザがまた違うパターンだったりしてぶち壊しだったり。
最近のWebブラウザだとだいたいフォームのHTMLのcharsetと同じものを用いるので,下手に自動判定等はしない方がいいようである。
ところで,最近のWebブラウザは英語や日本語以外の多言語を取り扱うことができる。EUC-JPで書かれたHTMLのフォームにEUC-JPにはない(ASCIIにもJISX0208にもない)文字を書くとどうなるか。

それPla

某大学情報系学部・卒業研究発表会想定ツッコミ
「~~という背景で~~を目的とした~~システムを構築しました」
「それPlaggerでできるよ」

disklabelの罠

NetBSD/amd64 3.0.1 (でなくても起こるけど) をいじってたときの話。

# disklabel sd1
disklabel: Can't read master boot record 0: Undefined error: 0
disklabel: ioctl DIOCGDINFO: Inappropriate ioctl for device

というエラーが出まくって,あれこれやっても直らない。
まあ元々初期化したいディスクだったので大胆にddで先頭をまっさらにしてfdiskして…というのもうまくいかない。
ふと,sd1 でなくて /dev/rsd1d を指定したら動いたり。
変だなあと思って ktrace で調べると,たまたまそこに sd1 というファイル(ゴミ)があって,それを開いて使おうとしていたらしい。
どうやら,fdisk も disklabel もディスク名を “sd1″ と指定したら,”sd1”, “sd1d”, ”/dev/rsd1″, “/dev/rsd1d” の順に探すようなのだが,マニュアルとかに書いてないよなあ…。

ThinkPad X60s バッテリ回収 その後

新しいバッテリが届いた。
差出人がIBMでもLenovoでもなくて,最初は一体何が届いたのかと思った。
中身はバッテリと説明と返送用の配達票。
古いバッテリは一ヶ月以内に返さないと部品代請求されるらしい。:]