ソフトウェア開発

Emacs で Zen Coding を試してみた

Emacs の zencoding-mode
Web 制作の人たちのなかで今話題の Zen Coding。これを使うと HTML タグが簡単に入力できるようになる。

この前の OSC で、某 Drupal のコミュニティで親しくしてくれているディレクタ(兼エンジニア)の人に教えてもらった。

TextMate とか NetBeans とかの主要エディタ用にあるらしいんだけど、僕は Emacs を常用しているんで Emacs 用のものを探していた(どうでもよいが、僕に Zen Coding を教えてくれたディレクタさんは、Komodo Edit を使っている。これはこれで凄い)。EmacsWiki の Zen Coding のページには、zencoding-mode.el というマイナーモードが紹介されている。このファイルを開発マシンに入れてみた。

EC-CUBE でオーナーズストアで購入した商品がダウンロード出来ないときの原因と対策(PHP5.2.0以降)

EC-CUBE オーナーズストア管理の購入商品一覧
もう一点はまった事があったのでここに書いておく。

EC-CUBE 管理画面のオーナーズストア管理で、決済モジュールのダウンロードができずにはまった。

特に、今回は 2.4.3 から 2.4.4 へのアップデートもやったので、その時のミスかと思い、なかなか原因を突き止められなかった。

latin1 で作ってしまったデータベースを phpMyAdmin で文字化けせずに export する方法

phpmyadmin_export.png
昨晩は EC-CUBEで構築された、とある EC サイトの移行作業であった。 フリーエンジニアの場合、夜中に作業出来ることを重宝されることがある。今回のような移行作業は特に。ようは、お買い物に来る人が少ない時間帯に移行作業をやってしまおうってやつだ。

昼間のうちに必要な情報はすべて集め、夜までは他の仕事をこなしつつ、約束していた移行作業の開始時間を待っていた。

「そういえば、MySQLのダンプを忘れていたなー。phpMyAdmin がインストールされているはず(今回の作業を引き受ける条件として、phpMyAdminがインストールされているサーバという話をしていたので)なんだけど、URLを聞くのを忘れていたなー」

ということでお客さんに電話した。

「えっと、管理画面とかそういうの無いんですよ。確認して折り返し電話します。」

という回答。嫌な予感。

MySQL で Got a packet bigger than 'max_allowed_packet' bytes エラーが発生した

Drupal で色々やってたらエラーが表示されるようになった。
どんなエラーかというと、 **Got a packet bigger than 'max_allowed_packet' bytes** というやつ。

Session データを書き込もうとしていたみたいなんだけど、MySQL があまり長い SQLを受け付けない設定になっていたみたいではじかれてた。

画面にエラーが表示され無いように display_errors を設定する

PHPでのアプリの開発って、このところずっとフレームワークを使ってたので忘れてしまってた。XOOPSも、Drupalも管理画面で変更できるし。Mojavi も cakephp も設定ファイルで変更できる。

しっかり本番環境で、Warning Illegal offset type in xxxx などとエラーメッセージが表示されてしまっていた。
関係者の皆様申し訳ございません。確認不足でした。

本番環境では PHPの設定(php.ini等)で、display_errorsOff にしたほうがよい。こうすることで、エラーメッセージを画面に表示しなくなる。画面にエラーメッセージが表示されると、エラーメッセージからセキュリティホールを見つけられる危険があるから。ついでに、画面に表示せずにログファイルに出力するには、log_errorsOnにしておく。これは、対で覚えておいた方がよい。

今回の場合は、たまたま問題の起こりそうに無いメッセージだったが、お客様からご指摘頂くような失態。

cron で VACUUM (vacuumdb と .pgpass)

先ほど EC-CUBEなサイトの夜間 VACUUM 設定が完了したのでメモ。

まずは、以下の感じで crontab に vacuumdb コマンドの実行を指定。この設定だと 4時0分にコマンドが起動される。

0 4 * * * /usr/bin/vacuumdb --analyze -U databaseuser databasename

crontab(1) コマンドは忘れた事無いけど、一応老後の為に書いておく。以下のようにする事で、username さんの権限で起動するコマンドが指定出来る(例えば、nologin なユーザの設定をしたいときに使う)。

% crontab -u username -e

ついでに中身だけ見るときは

% crontab -u username -l

suPHPの罠(php.ini が反映されない場合の対処方法)

某 EC-CUBEのサイトを新しいサーバにお引越し。そのサーバは suExec の PHP版みたいなモジュール suPHP を使っている。

suPHPといえば、例えば、スクリプトファイルの所有者、所有グループが実行ユーザと異なっていたらエラーになるとか、まあとにかく安全に動作するようにちゃんと動いてくれる。別に初めて使うわけじゃないんで、その事はわかっていたつもりだったんだけど……。

EC-CUBEは、日本の企業が作ったソフトウェアなので、モバイル版だとちゃんと日本の携帯電話にあった HTMLを出力してくれる。古い機種のことも考えていて、Shift_JISでの出力に対応している。

ログイン画面で「システムエラー」になったとき、エラーログを見ればすぐにわかった。データベースのエンコードがおかしいってメッセージが出ているが、データベースはちゃんと utf8で作られている。
そうなると、mb_string 関連の設定がおかしいのだろう。たしかに .htaccess ファイルが存在し、mbstring 関連の設定もされている。しかし、このファイルを色々といじってみても、phpinfo()で調べると、値がやっぱりおかしい。

EC-CUBEコミュニティのフォーラムにも似たようなことが書いてあったし、suPHPのFAQにもちゃんと書いてある(Can I use the php_value directives in .htaccess files with suPHP? のところ)。どうやら、suPHPだと .htaccess ファイルの php_value を読み込まない様子。

関西オープンソース2007

にいってきた。 関西.pm のメンバーがお昼に行くときの交代要員として。ただし、俺の中では Perl 5.004 からとまっているので、声かけられたらどないしよってずっと思ってた(5.6とか5.8もそれなりには使っているけど)。もうちょっと Perl の勉強しておけばよかった。結局 Perl に関する質問は一度もされなかったけど。 Perl のブースには、干支が同じ(ひとまわり違い)の人がいた。話をすると結構刺激を受ける。俺も頑張ろう。そういや、今年はほとんどプログラムを書いていないなあ