| @技術/プログラミング

結局CakePHPを触ってます。Railsはサーバー側の準備するのが無理っぽかったのであきらめました。CakePHPはPHP 4だろうがPHP 5だろうが、普通にサーバーにPHPがインストールされていれば、とりあえずファイルを落としてきて自分の開発機でBake(あるいは開発)し、ちょこちょこ設定をしてサーバーにアップロードするだけで(DBの準備とかは別に必要だけど)CMSが出来上がるのですごく良いと思いました。MySQLでもSQLiteでもPostgreSQLでも、DBに何を使おうとも記述内容は変わらないところとかすごく良いと思います。

オブジェクト指向の醍醐味みたいのはアホなので僕にはあまり分かりません。CakePHPを始める前に『たのしいRuby』を途中まで読んでたんですけど、僕はそれまでPHPとC言語をほんの少しだけ触っていて、そのとき感じた「なんかこれまで触ってきた言語と全然発想が違うなー」という驚きのようなものは感じられなかったです。ただCakePHPのMVCの考え方はRailsそのまんまみたいなのでRailsを勉強する足がかりにはなるかなと思いました。

最初はCakePHPの公式ガイドみたいのをチラ読みしてたんですけど、こういうのは本で持ってた方が使いやすいので『CakePHP1.2ガイドブック』を買いました。まだChapter 7までしか読んでないんだけど、誤植や記述の間違いが多くて困る。わりと最初の、「とりあえずBakeしてみよう」みたいなところで間違いがあるので、根気強くない人は本に書いてあるとおりにBakeできないことに絶望してCakePHP使わなくなるんじゃないかな。僕は公式フォーラムを読んだので間違いに気づきましたけど。“CakePHP1.2でモデルのアソシエーションの設定がビューに反映されない” フォーラム - CakePHP Users in Japan

CakePHP1.2ガイドブック、悪い本じゃないと思うんだけど、1.3対応版とかでは単純な誤植とか記述場所の間違いとかで読者を混乱させないようにして欲しいです。

| @Mac/iPhone

Ruby on RailsかCakePHPかどちらかをぼちぼち触ることにしたので、MacPortsで一通り環境を整えてました。いつまでもMAMPの世話になるのはやめようと思い、一個一個必要なものをインストールしていきました。Rails自体は簡単に入ったんだけど、MySQLのインストールがうまくいかない。

なんかを参考にインストールを試みたんですけど、ごちゃごちゃエラーが出ます。まず最初は

--->  Computing dependencies for wiresharkError: Unable to execute port: can't read "build.cmd": Failed to locate 'make' in path: '/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin' or at its MacPorts configuration time location, did you move it?

というエラーが出てました。とりあえずこれは #21062 (Snow Leopard, fresh install, can’t install any ports) MacPorts を参考にしてSnow Leopardのインストールディスクに含まれてる “UNIX dev tools” をインストール。しかしまだ解決しない。MySQLだけじゃなくて

$ sudo port update outdated

とかも失敗する。rsyncがうまくいってないのかなと、ルーターの873のポートを開放したりして半日つぶしたんですけど改善せず。

万策尽きたので一回上書きインストールしたMacPorts 1.8.1を消して入れ直してみました。

$ sudo port deactivate active

してから

$ sudo rm -rf /opt/

その後パッケージ版のMacPorts 1.8.1をダウンロードしてインストールしてみたところ、すべてうまくいきました。

MacPortsはLeopardのときに初めてインストールして、Snow LeopardにしてからはSnow Leopard対応版のMacPorts 1.8.1を上書きインストールしてました。これがどうも良くなかったみたい。

OSのアップグレードとかはやっぱクリーンインストールした方が良いのかな。きちゃないファイルの断片とかをごちゃごちゃため込んでそうです。

| @技術/プログラミング

仕事でPHPを使ってちょっとしたCMSみたいの作ってます。ログインとかフォーム内容の送信とかセッション管理とかMySQLの利用とか、CMSを作る上で必要な事項がP_BLOGに集約されていたので、わりとすんなり出来そうです。加えてAmazonのISBN変換プラグインの修正をやってきたので、外部のAPIと通信するみたいなことも将来的にはやれそうです。いやぁ、P_BLOG様々だ。

ただ、作ったものをパッケージ化してどんなサーバー環境でも動くような形で配布する、となると途端にハードルが上がる気がします。ソース非公開で仕事用にプログラム書く方が、ユーザーをサポートしなくても良いという観点では楽な気がします(ユーザー≠お客さん)。もちろん仕事である以上、お金のやりとりが発生するのでお客さんに対する責任は生じますけど、ツールをダウンロードしたユーザーから「僕の借りているレンタルサーバーでは使えません」みたいな問い合わせは来ないですからね。本当にkazさんリスペクトです。

ところで、MySQLとか大抵のサーバーですぐ使えるようになるものだと思っていたのですが、それはどうもレンタルサーバー脳なようでした。使えるようにするには環境をセットアップしないといけない。僕はLinuxとかUnixとかのサーバーにSSHでログインして操作するみたいのが全然できないので、そっちの方の勉強もして行かなきゃいけないなと思いました。phpMyAdminが便利すぎるのでMySQLの管理もこいつに頼りっきりでしたが、これも卒業しないと。

| @技術/プログラミング

usericons.relucks.orgをご存じですか? 様々なウェブサービスのユーザーアイコンを拾ってきて画像のURLを渡してくれるAPIです。これすごく便利。

このブログにコメントを書き込んでもらったときにURI欄にTwitterのユーザーページのURLが書いてあったら、twitty.jpのAPIを使わせてもらってユーザーアイコンを表示していたんですけど(参照:Twitterアイコンをブログのコメント欄に表示するというアイディア)、このAPIはtwitty.jpがTwitterから収集してきたアイコンを表示するのでタイムラグがあったし、透過pngとかはgifに変換されてて背景がきちゃなくなっていました。自分でTwitterから取ってこようかなーとも思ったのですが、ページが表示される度にアイコン取りに行ったらすぐにAPI制限喰らっちゃうし、MySQLにユーザー情報を格納するとかごちゃごちゃやってたんだけど結局わからんくて断念。そんな折、swdyhさんが作ったサービスに出会ったわけでした。

これまでTwitterの画像だけ取ってくるようにしてたけど、 usericons.relucks.org は

  • flickr
  • github
  • hatena
  • lastfm
  • logpi
  • najimi
  • nowa
  • turnyournameintoaface
  • twitter
  • wassr

に対応してるので、Twitterの他に自分がアカウントを持ってる flickr, hatena, last.fm, wassr のアイコンも取ってくるようにしました。

このAPIは本当にスバラシイ!

で、やり方なんですけど、 /include/fnc_logs.inc.php の382行目付近から396行目付近

Continue reading...

| @技術/プログラミング

 レンタルサーバーをXREA内で引っ越したので、PHP、MySQLともバージョンがあがって、それぞれ5.2.5、5.1.22-rcになった。

 P_BLOG本体は簡単に移せたんだけど、MySQLでハマった。調べて見たところMySQL4.0から4.1、5.xへのアップグレードは文字コードにとても気をつかうようで、かなり苦労した。ISBN変換プラグインは全く動かなくなってしまったので大幅にリニューアルした。

 MySQL5系はテーブル、レコードごとに文字コードを指定できたりとか、自動でクライアントとサーバーとDB間の文字コードを調節してくれるみたいなんだけど、こういった付加機能がむしろ悪さをして文字化けを頻発させてるみたい。

 結論としては、現在MySQL4.0がインストールされているサーバーでP_BLOGを運営している人は、自信がない限りMySQL5.xにはバージョンアップしない方がいいです。

| @技術/プログラミング

 ここ数ヶ月、ブログがめちゃくちゃ重く、閲覧者の皆様にはご迷惑をおかけてしおります。全国のファンの皆様からおしかりのメールを頂いております。

 この重さ、僕は素人によるPHPいじりが原因だと思っていたのですが、どうもそうじゃないくさいんですね。データベースのあるサーバーが重いんですわ。だから静的にページを生成してるMovable Typeなんかの表示は快速なんだけど、P_BLOGが重い。WordPressは動的生成でMySQLを使うけど、ログが少ないので少し粘る程度で表示出来るみたい。

 もう長いこと同じ状況が続いてるし、ステップサーバーに問い合わせても「データベースにつながりにくい状態が続いておりましたが、現在は解消済みです」なんて涼しい内容のメールが返ってくるだけ。こりゃきっと永遠に改善することはないだろうと思って移転しようかなと2chのレンタル鯖板を徘徊したんですけど、結局優良サーバーの情報ってのはなかなか匿名掲示板だと得られないですね。評価基準が厳しくて。

チカッパ!

 それでとりあえず、oberheimさんが使っておられるチカッパ!を試してみました。ロリポップと同じpaperboy&co.のサービスですが、「男性向けホスティングサービス」と銘打ってわざわざ「ナウでヤング」なロリポと差別化しているくらいだからきっとMySQLも高速なんだろうな、と期待を込めて。ていうかナウでヤングって表現古いよな。

Continue reading...

| @技術/プログラミング

 P_BLOGのカテゴリー検索(category.php)は部分一致検索気味で、例えば"昔の日記"というカテゴリーと"日記"というカテゴリーがあったとするなら、日記のカテゴリーを選択したときに前者まで含まれてしまうのですよね(やっぱりうまくいかないカテゴリー検索)。そういうわけで、後方一致がおきないようにカテゴリー(TAG)をつけるようにしていたのですが、うっかり後方が重複するカテゴリーができてました。"本"と"熊本"です。地名は盲点だった :-!

 しょうがないのでもう一度 category.php いじりにチャレンジしてみました。


//=====================================
// CATEGORY LIST UP QUERY -- HOW?
//=====================================

$patterns = '/(*|+|^|$|?|(|))/';
if (preg_match($patterns, $key)) {
    // (1) Use "LIKE" search
    $listup_query = "BINARY category LIKE '%".$key."%')";
} else {
    // (2) Use MySQL Regular Expression
    $listup_query = "category REGEXP BINARY '^".$key."$|^".$key.",|,".$key.",|,".$key."$|,?".$key.",|,?".$key."$')";
}
Continue reading...