2009年2月9日月曜日

FreeBSD:Unicodeにはまる

今回もFreeBSDネタ。以前もちょっと書いたが,今回も文字コードの話。最近のPerl (Perl 5.8.8や5.8.9) では,内部処理ではutf8を使っているらしい。でもunix上では未だにeucが使われていたり,windowsやmacintoshではshift_jisを使っている。そこで必要なのが文字コードの変換。apacheで表示させる時に,どの文字コードを使うのかは,アプリケーション次第。新しく作ったサイトはいきがってutf8にしてみたが,net上に落ちてるスクリプトはshift_jisだったりする。以前,アクセスログを取り,解析,表示してくれるスクリプトを拾ってきた。windowsを念頭においているのか,文字コードはshift_jisで書かれていた。別にそれはよいのだが,このアクセスログ解析スクリプトが表示する検索文字列がよく文字化けする。おかしいなぁ,と思ってブラウザの文字コードをutf8にしたら文字化けしてたところだけちゃんと見えて,今までちゃんと見えていた検索語が化ける。しばらくそのまま使っていたが,どうも気になって仕方ない。そこで,ちょちょいと調べてみた。
 拾ってきたスクリプトでは文字コード変換にはjcode.plを使っていた。ところが,jcode.plはutf8に対応していない。だからutf8があると表示が文字化けしていたのか。ところで,4つ前の投稿にも書いたが,最近のperlではモジュール,Jcode.pmEncode.pmを使うみたい。投稿を書いた時にはEncodeモジュールを使ったのだが,その使い方は、
---------------------------------------------------
cgiのトップに
use Encode;
use Encode::Guess qw/ shiftjis euc-jp utf8 7bit-jis /;
と書いておき、
$in_name = encode('utf8', decode('Guess', $in_name));
とすると、もとの文字コードを推定して、utf-8に変換してくれる。
---------------------------------------------------
ってな感じだった。今回もutf8に対応していないjcode.plのconvertルーチンを使っているところを探して,encodeとdecodeを使って,
$in_name = encode('shiftjis', decode('Guess', $in_name));
としてShift_JISに変換してやればいけるはず,だった。
 ところが,これがうまくいかない。解析ルーチンのcgiが途中で止まってしまう。どこで止まっているかと言うと,utf8の文字列が出てきたところ。そこで止まって,それ以上表示してくれない。困った。apacheのエラーログ,/var/log/httpd-error.logを見ると
shiftjis or utf8 at /usr/local/lib/perl5/5.8.8/mach/Encode.pm line 166, 
     referer: http://xxxxxxxxxxx/yyy.cgi
とでる。おや?これはもしや推定時に困ってるのか?と思い,ネットで検索。「perl Encode」などで検索していると,http://www.bugbearr.jp/?Perl%2FUnicodeというページにたどり着いた。そこには「自動判定したい場合は、Jcode.pm を使う。(Encode::Guess は望ましい動作をしないようだ…)」と書いてある。下の方の「文字コードを自動判別させるには」という所を見ると,どうやらEncodeモジュールの推定はちょっと甘くて,shift_jisかutf8かを決めてくれないみたい。Jcodeモジュールはどっちかわからない時にも,ある程度推定して,文字コードを特定するみたい。そこで,上記サイトにあるように,トップの方で
use Jcode;
と宣言しておいて,
my $sjis = jcode($str)->sjis;
としてみた。そしたらうまくいった。うーん,やっぱりperlは奥が深いですねぇ。
======================================================================
(追記)
後日、自分で記事を参考にしたのだが、Jcode.pmをどうやってインストールしたのか忘れてしまっていた。どうしたかというと、FreeBSDなので、
/usr/ports/japanese/p5-Jcode/
からインストールした。/usr/ports/japanese/p5-jcode.pl/はjcode.plをインストールしてしまうので、間違えないようにしましょう。

2009年2月2日月曜日

FreeBSD:portupgradeにはまる

今日も前回と似たようなネタ。FreeBSDでサーバーを立ち上げようとしてる。マシンが遅いから,なかなかソフトウェアのインストールが終わらない...ぶつぶつ。
 ところで,今日の話題はportupgrade。私にFreeBSDを教えてくれたやつは,基本はdefaultと言って,option設定もあまり追加しないし,portupgradeもあまりしない。何故って,下手にportupgradeするとアプリケーションがよく動かなくなることがあるから。でも私はセキュリティのこともあるし,と思って毎回upgradeしてしまう。で,よくトラブルに巻き込まれる。今回は今までの経験をメモしておこう。

2009年2月1日日曜日

FreeBSDで無線LAN

FreeBSDのrelease 7.1をインストールしてみた。理由はあまったノートをwebサーバーにしようと思っているから。FreeBSDのインストールは,インストールCDのイメージを取ってきて,CDからインストール。でもそれは起動だけに使って,インストールするファイルはネット上からHTTP-proxyを通して取ってくる作戦にしてみた。いろいろなアプリケーションはcvsupでportsを最新にしてからインストールした。インストールはこれまでデスクトップで数台行ってきたので,大きな問題なく完了。設定ファイルも他のFreeBSDマシンからコピーすればよいので,さっさと作業できた。

2009年1月27日火曜日

AjaxとBubbleToolTips

これもweb絡みのお話。ちょっとネットでAjaxについて調べてみた。一番興味を引かれたのはアムステルダムのサッカーチームだったけど、これはちょっと領域外。問題のAjaxは一言で言うと、JavaScriptを使って、ページの再読み込みをあまりさせないで、かつ、マウスの動きに応じてボタンの色が変わったり、写真が入れ替わったりするってやつみたい。同窓会のページはcgiで再読み込みしまくってるから、Ajax風にできないかと思って少し挑戦したけど、めんどくさくなってやめちゃった。それでも何かおもしろい事できないかと思って、メニューボタンの上にマウスを持って行くと、色が変わるようにしておいた。これは色の違う画像を用意しておいて、onMouseOverで違う色の画像に置き換えて、onMouseOutで元の色の画像に戻してるだけだけどね。
 それと、大きめの集合写真の顔の辺りにマウスを持ってくると、人名を吹き出しで表示するようにしてみた。どうしたかというと、BubbleToolTipsと<area>タグを使ってみた。BubbleToolTipsは簡単に風船状の吹き出しをつけてくれるスクリプト。基本的にJavaScriptで書いてある。だけど、今回の用途にはちょっと改造が必要だった。それは<area>タグに対して作用するようにしたかったから。

2009年1月23日金曜日

cgiとutf8とphpとjs

追記)2017/6に,FreeBSD で fine-uploader を使ってみた(その1)というのを書いた。 そこでは fine-uploader という JavaScript のライブラリを使ったファイルのアップローダーについて書いている。 Uber Uploader はすでに古く更新されていないので,fine-uploader など新しいアップロードライブラリを使うことをお薦めする。
追記)2011/8時点での Uber-Uploader の最新版である Uber-Uploader 6.8.2 についてはUber-Uploader 6.8.2 の使い方(その1)で述べているので,参考にしてみて欲しい。

最近、同窓会に出席して同窓会のwebを担当することになった。とりあえず簡単に、と思って作り出したが、これまでいくつか作ってきたwebで培った技術を使いたくなってしまった。とりあえずはcgiを使ってメニューなど並べてみたりした。当初、JISコードで作ってみたが、最近の趨勢としてはUTF-8で作るようになりつつあるみたいなので、途中でページを全てUTF-8にしてみた。FreeBDS上に作っているのだが、最近はnkf -wでUTF-8にしてくれるようになっていた。いつのまに...
 さらに、そこにBBS(掲示板)を載せてみた。一から作るのはめんどくさいので、世の中に落ちてるcgiのソフトを拾ってきて,載せておいた。一発で動くかと思ったが,これが意外と手間取った。トラブった原因としては,一つには文字コードの問題。当初JISコードでwebを作っていたので、JISコードにしてみたら,全角の「:」などが文字化けして実行時にひっかかかる。そこで仕方なくShift_JISにしたらうまくいった。これはUTF-8にするのはかなり手間なのでやめておいた。それと改行の問題。もともとwindows用に書かれているらしく,改行コードがunix用になってなかった。そのままだとこれがうまく働かない。仕方ないのでこれも改行コードを変更してみた。ここでもnkfが活躍した。というか、FreeBSD上で他の方法を思いつかなかっただけなのだが。nkf -dってすると改行コードがLFのみになるみたいやった。あと,cgiが実行可能となっている下に作業用のdirectoryを置いておいたが,そこにある画像ファイルが表示されなかった。どうやらcgi実行可能なdirectoryの下に置いてはいけないみたい。これはcgi実行directoryから出したらうまくいった。でもBBSってみんな使うのかなぁ?

2008年12月19日金曜日

るーにー

気分がすぐれないなぁ。なんか面白いことないかなぁ?そういえば昨日マンチェスターとガンバの試合をテレビでしてた。ちょっと気になるから見てしまった。どっちを応援してたかというと,どっちも。そりゃガンバにも意地を見せて欲しいと思ったが,相手が悪すぎるよなぁ。それにしても後半2-1になってからのマンチェスターの攻撃はすごかった。ガンバの守備は何してるの?って感じで翻弄されてた。基本的に運動量が違うのだろうか?でも早さが全然違ってたよなぁ。あれってやっぱり世界でもまれないと身につかないものなのかなぁ?でもマンチェスターもガンバに3点取られるってあかんよなぁ。ま,ガンバも頑張ったということでしょう。そういえばテレビではやたらロナウドロナウドって叫んでたけど,ロナウド一人でサッカーしてるわけじゃないのになぁ。一人だけすごくても簡単には勝てないのよねぇ,サッカーって。個人的にはルーニーのプレーが好きやなぁ。あの飛び出しと,ゴール前であわてずにゴールする感覚ってそこらにはいないよなぁ。あれぞフォワードって感じがするんやけど,どやろ?

2008年11月21日金曜日

ログログ

自分で作っているいろんなサイトのログを取っている。方法はcgiが使えればよいのだが、それなりの金を払うか、自分で管理できるマシンがないとできない。私はいろいろと管理してるマシンがあり、そこにちょこっとお邪魔してログを取っている。そこで思ったことがある。みんなwindowsには苦労しているなぁ、ということ。何がって、他のところでdwmapi.dllに関して文章を書いた。書いたと言っても日記だが。そしたら書いた次の日には検索サイトを通じてその文章を見にきた人がいた。すごいなぁ。私はXPなのにVista用のvideoドライバーのアップデータを入れてしまい、休止状態にならなくなって困ったのだが、みんな同じようなことで困っているみたい。こういう時ってネットが便利なのよねぇ。何を隠そう、私も最初はdwmapi.dllで検索をかけたのでした。それで解決できたから、その顛末を書いておこうと思ったのでした。誰かの役に立ったのならうれしいねぇ。

2008年10月5日日曜日

バイクと車の違い

雨の中,バイクに乗っていてふと思った事を書いておこう。私は車の免許を19歳で取り,バイクは確か26歳で取った。車はもうきっと20万kmを越え,バイクも10万kmに近い距離を走っている。これだけ走れば両方ともいろんなことを経験してきた。パンクもあったし,車はエアコン用のV-ベルトが切れたこともあった。両方とも事故で1台ずつ潰した。スピード違反で捕まったこともある。何が言いたいかと言えば,それなりの経験値を持っているはず,ということ。
 そんな私が車に乗っている人間とバイクに乗っている人間の考え方や行動パターンなどの違いについて書いてみる。車にしか乗っていない人の方がバイクのことを知らない事が多いと思うので,バイクのことやバイクからみたことを書こう。

2008年6月14日土曜日

Super Black Birdのカムチェーンテンショナーのリフターの交換

Super Black Bird (CBR1100XX) のエンジン周りから変な音がしていた。 回転数が2500回転から3000回転弱の辺りで,コツコツという感じの音と振動がある。 回転数をあげると音は消えるが,なんとも気持ち悪い。 そこでネットで調べてみると,レギュレーターと並んでカムチェーンテンショナーがトラぶりやすいらしい。 レギュレータは以前換えてもらったので,今度はカムチェーンテンショナーの番か? どうやらカムチェーンテンショナーのテンションのかけ具合をコントロールするリフターという部品がへたるらしい。 そこでそれを交換することにした。

まずはバイク屋に電話。値段と納期を確認した。 値段は4000円弱。納期は数日とのこと。 そこで早速注文した。 で,取り付けもしてもらおうかと思ったが,工賃が7000円以上かかるみたい。 折角だから一度自分で換えてみよう,と思った。 まずはカウル(フェアリング)をはずす。リフターの場所は右のアンダーカウルの裏にあるらしい。 なのでアンダーカウルをはずした。意外と簡単だった。 他にもハンドル近くの部品もはずしたら作業効率があがった。 リフターという部品自体は比較的簡単に交換できた。 場所もはずし安い場所だったからだが。 取り寄せた部品にはパッキンと取り付けネジがついていた。

まずはリフターのトップのメクラ用のネジをはずして,後で再利用。 M6のネジを緩めて部品をはずして,引っこ抜いた。 で,古いパッキンのかすをきれいにした。 エンジン内部にゴミが入らないように,軍手を押し込んで作業した。 パッキン部がきれいになったら,新しいパーツを取り付けた。 取り付ける時に,新品のトップにストッパーがはめてある。 これをつけたままエンジン本体に取り付ける。 つけたらストッパーを引き抜く。すると,スコンと音がしてリフターが伸びる。 これでテンショナーに力がかかるはず。

今回はリフター以外に,アーシングにも挑戦した。 アーシングはバッテリーのマイナス側とボディやエンジンなどを太めのケーブルで電気的につなぐ作業。 目的はノイズを減らすこと。 人によってはトルクが増えるなど,の理由で行っているようだが,私は無線のノイズ対策のつもり。 アーシングのためにはエンジントップが見えないといけない。 そのためにタンクをはずして,エアフィルターをはずさないといけない。 タンクは,座席付近のネジをはずして,少し持ち上げる。 そして,タンク下にあるバルブをオフの位置へ。 その後,ホース5本(キャブレターへ太いの2本,細いの1本,ドレイン1本,後1本はよくわからず)をはずし, 燃料計のコネクタをはずしてから,タンクを後に引くようにして,はずす。 タンクはほぼ満タンだったのでめちゃめちゃ重かった。

タンクをはずすとエアフィルターが見える。 黒い丸っこい大きなやつ。 これはキャブレターの入口4つにそれぞれホースバンドのような感じで止めてある。 それをはずしたらはずせる。 他にホースが二本あるが,これらもはずしたら取れる。 するとキャブレターが顔を出す。 キャブレターの奥にエンジンのヘッドが見える。 青いスパークプラグのカバーが見える。 その辺りをアーシングしたいのだが,いい場所にネジがない。 変な場所のネジをはずすとあとが面倒そうなので,余計な事はしない方がいい。 他にキャブレターや,オルタネーター(発電機)辺りもアーシングしたいが, オルタネーターはもともとアーシングしてある。 キャブレターもいいネジがない。これもあきらめた。 それでもどこかにアーシングしないとここまでの努力が.... そこで,エンジン本体の下の方と,ボディ(ハンドルの根本付近)にアーシングしてみた。 結果は???よくわからん。何か変化あったのかなぁ??? さらに車のエンジンもみてみたが,これがまたいい場所がない。 ケーブルが余っているから使ってみたいのになぁ...

ちなみに写真をhttp://picasaweb.google.co.jp/matsup/CBR1100XX#に置いてある。

2008年4月21日月曜日

ZZ-R1400にV46をつけたくてモノキーベースをつけてみた

ZZ-R1400にもGiviのV46をつけれるようにとモノキーベースをつけてみた。まずはモノキーベースとキャップ類をネットのサイトで探して買った。値段はそれなりにした。それとKawasaki Europe製のサポート(タンデムシートの後,タンデムバーをはずして代わりにつける。荷台に物を載せるための板)を買いました。Kawasakiのお店で買ったけど,なんと3万円弱もした。高いなぁ。でもV46をつけたかったので,仕方なく買いました。さて,Kawasaki Europeのサポートの上にモノキーベースをどうつけるか,が問題だった。いろいろネットで見てもあまりよい案がない。そこでホームセンターで分厚いアルミの板を買ってきた。分厚いと言っても5mm厚だが。そこに適当にネジ穴を開けて,ビスとスプリングワッシャとナットで固定してみた。これが意外といい感じ。さっそくモノキーベースもつけた。それからV46も載せてみた。いいやん~。これでV46をBlack Birdと共有できて便利になるぞ。やっぱりV46は鍵がかけられるから便利なのよねぇ。

写真はhttp://picasaweb.google.co.jp/matsup/Givi_on_ZZR1400#