以前、アマチュア無線三級が合格したという話しをしましたが、無線局免許を変更しました。ようやく免許が届きました。

今回も電子申請です。申請から1ヶ月かかりましたが、何のことはない、私が返信用の封筒を出していなかったのです。封筒を送ったら、すぐに送られてきました。

電子申請に一つ注文。審査が終了したら、メールでもいいから連絡くれたらいいのに。お願いします。おそらく、申請したら同時に返信用の封筒を送らなければいけないのでしょうね。

PCやサーバーを使っていると、どうしてもソフトウェアのアップデートをしなければいけません。Windowsですと自動的にアップデートしてくれるのでいいのですが、オープンソースのサーバーアプリケーションですと、ダウンロード、ファイルのアップ、更新と一連の作業を行わなければなりません。

サーバーのアプリケーションの更新が重要なのは理解していますが、面倒であるということも確かです。納品したお客様の中には、作業費を出していただけない場合もありますので、無償で作業するか、最悪そのままで運用となります。

なるべく手間をかけないことができないかということで、現在このブログで利用しているWordPressの自動更新のプラグイン(Wordpress Automatic Upgrade Plugin)を試してみました。

まずは、あまり影響のないサイトで試してみます。インストールはいつものWordPressのプラグインのインストールと同じ。プラグインのディレクトリにコピーするだけです。

管理画面でWordpress Automatic Upgrade Pluginを実行すると、あとは画面にしたがっていくだけです。テーブルのバックアップに始まり、最新のWordPressのダウンロード、そしてインストールまでやってくれます。

日本語の辺りで不具合が出るかと思いましたが、問題なしです。

もし、WordPressの更新があれば、管理画面で表示してくれます。最新のWordPressはプラグインの更新も教えてくれますので、こちらも併せて使えれば、常に最新の状態にしてくれます。

これは簡単です。トラブルが発生しても、バックアップファイルで戻せるので、良しとしましょう。

追記

以前にWordPressのソースを修正して対応した、RSSでの時間がUTCになってしまういうトラブルですが、Wordpress Automatic Upgrade Pluginを実行したら元に戻ってしまいました。当たり前のことでしょうが、元のWordPressが対応してくれないとだめですね。

今日、税理士の先生のところに会社の決算の件で行きました。その帰り、ランチを食べようと横浜ヨドバシの地下のとんこつラーメン屋に。

そのラーメン屋はテレビのランキングで1位を取ったと、大々的にポスターを貼って宣伝。大丈夫だろうと入ってみる。カウンターには店主の創業当時の感動ストーリーといった小冊子も置いてある。

しかし! 出てきたラーメンはまずい。私はあまり味にはうるさくない方ですが、とにかく麺がまずい。

麺がアルデンテ。芯がある。粉っぽい。

これは何かの間違いと思って、替え玉を注文する。そのとき

「麺が煮えてなかったので、今度は柔らかめで。」

と注文。

またまた出てきた麺は、歯ごたえがよくてコリコリしている。この店はそういう麺みたいです。隣の人は堅めの麺を注文していましたが、どんなものが出てるのか・・・。

早々に退散し、違う店で食べ直そうかと思いました。

でも、とんこつラーメンって細麺と聞いていましたが、こんな生煮えの麺でしたか? それがこの店のとんこつラーメンだよと言われてしまえば、なにも言えませんが。でも、それは私には理解できない・・・。

あー。ランチのおかげで気分が悪い。あと何回食事ができるとのはいいませんが、まずいランチに当たったときは、とても損した感じ。

そういえば、うちの娘の行きたい学校の選び方は、おいしそうな学食がある学校だそうです。食べるってことは大事なのですよ。

タイトルの件、考えてみれば当たり前なのですが、お客さんからの仕様で引っかかりました。ここでいう全角文字は、マルチバイト文字のこと。

フォームに文字を入力する処理で、入力した文字の長さをチェックする処理が必要です。そこで文字長でチェックするか、バイトでチェックするか。

これをCakePHPのバリデーションで用意しているmaxLengthのルールでチェックしたところ、何も考えずに内部コードのバイト長でチェックしていまいます。これをお客様から指摘されました。希望としては、全角文字を2バイトでチェックして欲しいとのこと。

例えば、「あああ」は6バイトではなく9バイトとして判定されます。これは内部のコードがUTF-8だからです。CakePHPのバリデーションで正しく文字数で判定するには、maxLengthの処理をmb_strlen()で変更してあげます。詳細な対応方法は、こちらのサイトをご覧ください。

ここで簡単な実験です。こんなコードと結果です。

<?php

$str = "あああ";

echo(strlen($str)); // 9

echo(mb_strlen($str));  // 9

echo(mb_strlen($str, ‘UTF-8′));  // 3

echo(mb_strlen(mb_convert_encoding($str, ‘SJIS’, ‘UTF-8′), ‘SJIS’)); // 3

echo(strlen(mb_convert_encoding($str, ‘SJIS’, ‘UTF-8′)));  // 6

?>

UTF-8のままですと、全角文字は2バイトにはなりません。しかも、正しく文字コードをしてあげないと正しい文字数になりません。

一旦、シフトJISに変換してあげて、mb_stringではないstrlen()で全角文字を2バイトで計算してくれます。

昔の人間ですと、どうしても全角=2バイト、半角=1バイトと考えてしまうのですが、この考え方は古いかもしれませんね。

社内で使っているデルのサーバーは、ファイルサーバー、IMAPサーバー、AsteriskのソフトPDXのサーバーとして利用しています。メモリ1GBでディスク100GB4台をRAID5です。

導入して4年目、多少トラブルがあったものの、とりあえず無事に動いています。

しかし、いつ壊れるかもしれません。ファイルサーバーのバックアップは毎日取っていますが、安心してはいられません。しかも、そろそろディスクの残量がなくなってきています。

そこで、サーバーの更新を検討してみます。条件としては、

  • ディスクは1Tバイト以上。
  • RAID構成で安全に。
  • メモリは仮想化されたサーバーを動かすので2MB以上。
  • 日頃メンテナンスで面倒がないこと。

となります。現在のサーバー構成でメモリとディスクを増やして、デルで見積もりをしたら、30万近くになります。。

代案として

  • Linuxのサーバーで構築するのをやめて、NASのTera Stationとを入れてしまう。しかし、これですと、IAMPとかAsteriskなどのアプリケーションが動かない。
  • NASのTera StationとLinuxサーバーを入れてしまう。そのときのLinuxサーバーはディスクは最小構成。ディスクはTera Stationにマウントする。Linuxサーバーが故障したら、OSだけ再インストール。でも、LinuxサーバーからTeraStationへのマウントはSMBでマウントするの? 遅そうですね。
  • 上のNASのTera Stationの代わりにiSCSIのTeraStarion ISを入れる。もし、ディスクが足りなくなったら、iSCSIの機器を追加していく。NASよりもパフォーマンスは上か? でも、iSCSI自体、新しい技術のためハードルが高いか? それにLinuxとの接続はBUFFALOも推奨していなさそうだし。
  • サーバー自体をパーツを買ってきて自作してしまう。でも、自作してしまうと故障したときに自分で面倒みなければいけないし大変かもしれません。

お客様には、何台もTeraStationを薦めてきましたが、そろそろ自社でも導入しておいたほうがいいかもしれません。3番目がおもしろいかもしれません。

さて、どうするか・・・。