TOPに戻る
鬱るんです
躁鬱病のITエンジニア「はまー」が心と体の模様を記した雑記帳。 大手IT企業で心身ともにぼろぼろになり退職した後、ほそぼそと働いたり事業を立ち上げようとして頓挫したり、作業所に通ったり障害者雇用で働いたりと紆余曲折したが、今は無職な毎日。

カテゴリー:お仕事

今朝は起きて会社に行く準備をしたものの、しんどくてもう一度寝てしまった。昼まで寝てしまったが、起きたら割と元気そうだったので、昼食を食べてから会社に行った。

ミーティングが多い。今日も15時からと、その後もう一つミーティングがる予定だったのだが、15時からのミーティングが終わったのが17時頃で、あとの方はリスケされた。明日もミーティングが2つある。眠いよう。

明日は締め日である。明日会社に行けば、今月の欠勤は6日だけになる。最近にしては、またこの時期にしてはよく行っている方だろう。先月も今月も、調子が悪くなったときに断眠療法で抜け出した。また何度でもやってやる。

いつも怖い月曜日、無事に朝起きて会社に行くことができた。

私が開発したアプリ専用のサーバ構築が完了したとのことなので、アプリを入れて動かしてみる。が、すんなり動かない。まあそんなものだろう。今までCatalystの簡易サーバで動かしていたが、CGIで動かすと誤動作するというバグがあったのと、あとはディレクトリのパーミッションの問題であった。

しかしながら、それでもまだ最後まで動いてくれないが、18時半くらいに、今日はもうあきらめて家路についた。

プリズムメガネをかけて仕事をしていても特に違和感は感じないのだが、目は疲れてくる。う~ん、前より楽なはずなのだがなあ。ま、とりあえずこの調子で様子を見よう。

いかん。文字化けだけでなく、画面が真っ白になってしてしまった。

今日も帰りが遅くなってしまった理由の一つなのだが、最新のサーバ環境でアプリが動かないのである。Catalystのアプリが動かない。どうやら Catalystのバージョンだけでなく、Perl自体のバージョンが関係しているらしい。どうにもこうにも、UTF-8の扱いがうまくいかない。いや、これは開発機のバージョンが古かったというわけでなく、先日「これは便利」と思って使ったモジュールが悪さをしているような感じがする。

そのモジュールとは、Catalyst::Plugin::FillInForm::ForceUTF8というものである。HTML::FillInForm という便利なモジュールをCatalystのPluginにしたCatalyst::Plugin::FillInFormを、更にUTF-8対応させたモジュールである。こいつは、FormValidatorとセットで使うのだが、その機能とは、まずこいつをuseしておき、CatalystのRootコントローラのEndアクションの中でViewをレンダリングした後に、おまじないを書いておく、という使い方をする。(レンダリングした後に、というのが少し不思議)

そしてその機能とは、フォームから受け取った値をFormValidatorでバリデーションすると、エラーがあってもう一度入力フォームを表示させたときに、inputタグの中に明示的にvalueをセットしなくても、前の画面の値を自動的にセットしてくれる、という便利なものである。これを使う前はTT(Template Toolkit)の機能を利用して、動的に一つずつ埋め込んでいたのだ。

本番機と同じ環境でアプリを動かしたら文字化けしまくって、調べたらPerlの5.8からはUTF-8を内部的に使うようになっていて、その関係でいろいろ調べているうちに偶然見つけて、こりゃ便利と思って使ったのがこのモジュールである。しかし、こいつを使い出したら文字化けするのではなく、画面が真白で表示されなくなった。サーバがエラーを吐いている。「Wide character が云々」と、Catalyst::Engine の中で落ちているのだ。レンダリングに失敗している。”ForceUTF8″という名前なのに、なぜだ?

まあ、元のやり方に戻せば解決するとは思っているのだが、なんか悔しい。なんかいい方法ないかな。こいつを更に継承したクラスでも作るか。とかなんとか今また調べていたら、新たな情報を発見。どうやらこのForceUTF8版は古いようだ。今はPerl自体がUTF-8対応しているので、Catalyst::Plugin::Unicodeをuseして、Catalyst::Plugin::FillInFormを使えばいいらしい。う~ん、今ただちに試してみたいけど、続きはまた明日。

久々に一番乗り。
昨日の続きをやるべ。

ようやく機能的にはほぼ完成して、あとはエラー時のログをファイルに出力するコーディングを入れようとしていた矢先。

開発は FreeBSD7.2 で行っていた。しばらく portupgrade もしていない共用マシンであった。私のローカルな環境はは Ubuntu 仕様になっていて、裏には FreeBSD6.4 という古いものがデュアルで入っていた。OS のバージョンを上げるのがめんどくさくて、FreeBSD で開発するときは共用サーバを使っていた。

それはそれとして、本番環境ではこのアプリ専用のサーバが用意される。それには FreeBSD8.0 を入れる予定なので、えいやっと自分のローカル環境を FreeBSD8.0 にあげて、最新版のモジュールをがしがしと ports やら CPAN で入れて、アプリを起動しようとすると、

動かん。

私が開発しているプラットフォームである Catalyst(MVCモデルの Perl のフレームワーク)のエンジンが昨年に全面的に修正され、MOOSEベースとなって、その影響があちこちにあるらしい。今後は Plugin をできるだけ使わない方向で Catalyst の開発は進めて行くべきである、とメインのデベロッパーの著書にも書いてある。安易に Plugin を作ると、名前空間が同一なのでメソッド名がコンフリクトを起こしたりするからだそうだ。

んでもって、最初のエラーはいきなり「画面が真っ白」。簡易サーバのログを見ると、レンダリングのところで wide character がどうたらこうたら、と書いてある。どうやらマルチバイト文字関連で引っかかっているようだ。

ググると出てくる出てくる。MOOSEベースになって、というよりマルチバイト文字の扱いがいろいろ変わってしまっているようだ。UTF-8を使うときには、いろいろと作法が必要になった。メモがわりにここに書いておこう。

・Catalyst::Plugin::Unicode を追加
・Configに ForceUTF8 を設定
・View を Catalyst::View:TT から Catalyst::View::TT::ForceUTF8 に変更

試行錯誤して、いろんなところが文字化けしているのが少しずつ正常に表示されるようになってきた。が、まだ一部文字化けがある。DBから取り出した、あるいはフォームから渡されたファイル名を含む文字列を flash で View に渡してレンダリングすると、ファイル名の部分だけ文字化けする。なんでだ?普通に stash に入れて渡すと正常に表示されるのに。

続きはまた明日。