ウノウラボのcoco1さんの記事を見てIRCを入れてみようと思いました。

UlimaOnline廃人時代以来あんまり使ってなかったのでいったいどこに入ればいいのか・・・。haltさんの教えもあって#PHPStudyと#CakePHPに入れました。

今日びのIRCライフはtiarraというIRC Proxyを立てて、そこからtwitterやらlingrやらを取りに行って一括して扱うのが普通だそうです。ポートが必要な常駐ソフトを使ってるってことはみんなサーバー持ってるってこと?ワープアショックです。

よく考えたら、前に使ってた糞VAIOが**ny専用機+プリンタサーバー+NASって感じで放置されてるのに気付きました。

糞の中のcoLinuxをブリッジ接続にして外からはdynamicDNSを振りました。これでtiarraライフが。

しかし、家だとLAN内アドレス、外だとdDNSのアドレス、切り替えるのが面倒臭い。家にDNS立てればいいのかな?だりー。

MovableTypeは4.1でさらに高機能になり、テンプレートが高度に構造化されたため、徹底的にDRYにテンプレートを書けるようになっています。さらにCMS的にブログ記事以外のページも自由に作れるようになり、そちらにも構造化されたテンプレートが利用できます。

僕は大東亜戦争従軍記というブログを次のようにしたいと考えました。

  1. デフォルトじゃないデザインにしたい
  2. 老人にも読めるように文言はなるべく平易に(カテゴリ → 目次とか)、文字は大きくしたい
  3. 完結している手記なので古い方から順番に表示したい
  4. 漢数字のカテゴリーを正しくソートしたい(第三章、第四章とか)
  5. タグとかいろんな老人にはわからない文言を削除したい
  6. 携帯にも対応したい

手持ちのMovableType4.1で実現しようと思いました。別のブログを4.1にバージョンアップした経験から、「これは容易ならざる事になった」と思い、4.1対応の書籍を買ってきました。

1時間後、その書籍はゴミ箱の中に納まっていた。

この構造化されたテンプレート、CSSクラス、MTテンプレート記法を覚えた上で、おそらく本体かプラグインのあの懐かしい(しかし昔とは違って進化したモダンな)Perlの海に潜らなければならないだろう。

MTには元StyleCatcherと呼ばれた、他人の作ったテンプレートとスタイルを簡単に自分のブログに当てはめる機能がある。CMS化した4.1に対応したテーマを血眼で捜したが、無かった。

やはりデザイナーにとってもあの高度化したテンプレートに対応したテーマを作るのは容易ならざることに違いない。

次の日、デザイナーの人に相談すると、WordPressをすすめられ、簡単な使い方を習った。

次の日、1人月はかかると思っていたブログのリニューアルが完成した。(趣味なのでかかってもいいんだけど)

特にテンプレートのsql文字列と思われるところに”order by xxx_id”“を追加しただけで記事が古い順に並んだのは痛快だった。

またK-tai styleというプラグインを入れただけで僕のE-Mobileも含めた全キャリア対応になったのにはびっくりした。

sideber.php, footer.php, category.php、実に分かりやすい。

WordPressが大好きになってしまった。

フリーになるとオープンソースをちょっとカスタマイズとか出来ると楽できていいですよね。

そうなるとPHPは外せないわけで、ちょこちょこPHPで出来たオープンソースソフトウェアを弄るわけですが、大規模開発とかSIer向けとかとは違った、OSSのWebアプリに向いた設計があることに気が付きました。

具体的にはWordPressの作者の人(?)がもっと設計を洗練させて作ったというbbPressというフォーラムのソフトがあるんですが、これのソースを見たとき、

「うは、なるほど。やられた。この人はわかっちょる。」

とちょっとショックを受けました。

とりあえずタイトルに対する結論から列挙しますと、(bbPressですが)

  1. 言語はPHPしかありえない
  2. インストールに黒い画面(ターミナル)を使う必要があってはいけない
  3. FrontControllerを使わない。(URL見たまんまのファイルがあること)
  4. クラスを使わない。functions.phpとかにbb_xxxxとかいう関数を列挙する。
  5. テンプレート言語はPHP。theme/default/以下とかに置いて、前述のURL見たまんまファイルと同名にする。(register.phpとか)
  6. ディレクトリ構造はフラットに近くする
  7. gettextを使っておくと自然と翻訳してくれる人が現れる

作者はとにかく「サードパーティー開発者」と「ユーザー」に奉仕して、DRYに反していても誰にでもわかりやすいまま頑張ってスパゲッティにならないようにします。

より多くの「サードパーティー開発者」に気に入ってもらえるようにすることがひいてはプラグインの増加、ソフト自身の価値向上につながるんですね。

この構造の明快さだけでこのアプリのファンになってしまいました。

ただ、裾野が広すぎると、実際に何度も起こっているようにプラグインでSQL Injectionを作りこんでしまう可能性が高いのは何とかしないとまずいですね。プラグインの中でプレースフォルダ使ってない部分があったら警告表示するとか、できないかな?

MTOS4.1にバージョンアップした。

それにに伴って、こんな感じの.htaccessを書いて安心していた。

Redirect permanent /mt/archives/2008/05/post-702.html http://p0t.jp/archives/2008/05/post-702.html

ところが、リダイレクトできない。よく見ると・・・

(略)/post-702.html

ハイフンが

(略)/post_702.html

アンスコに変わっている。

word replace

ちょっと意味がわからないんだが、Word特有の文字を置き換える対応するASCII文字 (””、’、…、-、—)の「-」がいけないのか?

そして、置き換えるフィールドの中に無いが、暗黙的に出力ファイル名も含まれるということなのか?

ジーザス!

Redirectでアンスコの方に変えてやるという方法もあるが、負けた気がするので下記のSQLをマイシーコーで実行して事なきを得た。(既に遅いが)

UPDATE mt_entry SET entry_basename = REPLACE(entry_basename, 'post_', 'post-' )

ついでに、ころころ引っ越すために画像はFlickrに置くことに統一した。(ついでだが、flickr and WEBIMAGERは便利なツールだ)

ソフト毎の流儀やバッドノウハウを覚えるのは嫌いな方じゃないが、最近のWordPressの好印象とMovableTypeの悪印象が鮮明過ぎる。SEO的なプラグインもWordPressにそろっている。ぼちぼち変え時かもしれない・・・

MTOS4.1を使ってみて、もはやカスタマイズ方法を勉強するコストが俺のモチベーションを遥かに上まわる程、テンプレートが細かく構造化されており、ウェブページ(ブログ記事以外)を含めたテーマ(StyleCatcherを使ったStyle?)も殆ど見つからない状態。(だから今、このブログはデフォルトの鶏なんです・・・)

あと、今記事1580個なんですが、再構築はホント萎えます・・・。

フリーとして小さい要望をちゃっちゃと終わらせるためにはWordPressも知っとかなきゃなあということもあって大東亜戦争従軍記をWordPress2.5.1に移行始めました。(もっと和風っぽくする予定です・・・)

これが、何かわかりやすい!テンプレというかテーマもPHPまんまだし。

結構お馴染みっぽいvicunaというところのテーマを使わせてもらってます。ただ、おじいちゃん達が読むサイトなのでフォントでかくしたり、激しく日本語表記をわかり易くしたりカスタマイズしています。

多言語化にはgettextを使っているようで、

__(msgid, domain);

こんな感じの記述がテンプレ中に見られます。あー書き方ちょっと面倒いけどわかりやすいっすねー。

wp-content/themes/wp.vicuna/languages/ja.po

をちょっと弄ってって、

% msgfmt -o ja.mo ja.po

で完成。でも”“トラックバック”“とかいってもわかんないよなあ。

ユーザーとしては、SFC時代のサウンドノベルはかまいたちから夜光虫(糞ゲー)まで全部やった覚えがあります。特に、この学校であった怖い話と続編的な位置にある晦(つきこもり)は大好きでした。

もうすぐニートになる知り合いと意気投合して僕らもWebからサウンドノベルが作れるまぜまぜノベルで古き良きサウンドノベルを作り始めました。その名もつきこもりにちなんで「ひきこもり・・・」と。

hikikomori.png

僕らもすでにプレイしていた時には感情移入していた主人公の中・高学生からみた○○おじさんの年齢になりました。俄然やる気がでました。もちろん実写で真幸おじさん(俺の本名)として登場したくてたまりません。(もちろん一瞬で頓挫しましたが・・・)

ま、それはいいとして、サービス作成者として見たこの「まぜまぜノベル」ですが、現状ある類似サイトよりよく出来てる印象があります。Flashを多用していて、マニュアル熟読しなくても作れるし、自分の作った音や絵などの素材を全体で共有する機能もあります。

収益化方法を簡単に考えてみると、有料機能の追加(計画中だそうです)。フォトストックの様に素材の有料取引と仲介料。人気コンテンツの販売。携帯機能の有料化。

俺はあまり良い案が思いつきません。なかなか難しいですね。

はてな最強化計画ってありましたけど、ああいう風にユーザーから(収益化を考えたコンサル的な)意見を募集してはどうだろうか・・・って、あ!

hostsファイルに大体、coLinuxのhost名を付けて使ってる。

192.168.10.40    dev

で、http://dev/phpinfo.php にアクセスするとFirefoxではphpinfo.phpのダウンロードが始まる。 IE7, Safari3.1, Opera9ではphpinfoがちゃんと動く。

http://192.168.10.40/phpinfo.php にアクセスするとFirefoxでもphpinfoがちゃんと動く。サーバーにVirtualHostの記述は何もしてない。

毎回これでハマるので覚書・・・。

PHPマニュアルや以前書いたエントリーへのコメントで教えて頂いたcreate_functionトリビアのまとめ。(下記全部PHP4です)

1. create_functionで作った関数は無名じゃないし、どっからでも呼べる。

% cat lambda_1.php
<?php
create_function('', 'echo "foo\n";');
call_user_func(chr(0)."lambda_1");
% php lambda_1.php
foo

2. しかし、定義済み関数には出てこない。

% cat lambda_2.php
<?php
create_function('', 'echo "foo\n";');
print_r(get_defined_functions());
% php lambda_2.php | grep lambda
%

3. でもやっぱり存在するらしい。

% cat lambda_3.php
<?php
create_function('', 'echo "foo\n";');
var_dump(function_exists(chr(0)."lambda_1"));
% php lambda_3.php
bool(true)

4. create_functionで作った関数は参照が返せない。こんなのを作っておくと便利かも。

% cat lambda_4.php
<?php
function create_ref_function($args, $code) {
  static $n = 0;
  $name = "ref_lambda_".++$n;
  eval("function &".$name."(".$args.")"."{".$code."}");
  return $name;
}
$func = create_ref_function('', 'echo "foo\n";');
call_user_func($func);
% php lambda_4.php
foo

5. create_function内での関数名は一律__lambda_func。

% cat lambda_5.php
<?php
create_function('', 'echo __FUNCTION__;');
call_user_func(chr(0)."lambda_1");
% php lambda_5.php
__lambda_func

Have a good create_function life!

参考:1byte 参考:PHP: create_function – Manual

(Life Hack系みたいにキャッチーなタイトルを付けたかっただけなんです。知っても何の生産性も上がりません。すみません・・・。)

Lingrの鳥肌実Roomで教わったのでミルフィールに登録してみました。

Mixiの言いたいだけコミュニティーに書くまでも無く、Twitterですらウザがられるような言いたいだけフレーズを書く場として使いはじめました。

デザイン、というか具体的にfont-sizeとpaddingとline-hightとletter-spacingがかわいい。

CakePHP製だそうですね。応援あげ。

SEOの実験サイトを作るって言ったけど、それにあたって機能とコンテンツはどうする?

機能

  1. 人から見て有用なもの
  2. 人から見て有用でないもの(でも検索エンジンからは評価されるもの)

コンテンツ

  1. マッシュアップ(笑)(ネットから引っ張ってきた他人の作ったもの)
  2. オリジナルコンテンツ

でも混乱してきました。

まず、機能。有用って何?

Twitterはうちのオカンにとって有用か?村上春樹風に語るスレジェネレーターは俺にとって有用じゃないのか?線形文字Bで書かれたブックレビューサイトは有用か?

それで、コンテンツ。オリジナルって何?

ブログのエントリーはオリジナルか?検索結果は?ニュースの見出しは?形態素は?

ブログのエントリーはオリジナルって雰囲気がするよね。ニュースの見出しは勝手に載せてリンク張って良いことにならなかったっけ?

例えば係り受け解析を使って意味が通るまま文節を並び変えたら?

% cabocha
ボクシングには蹴り技が無い。そう思っていた時期が俺にもありました。
ボクシングには---D
        蹴り技が-D
            無い。---------D
                そう-D     |
            思っていた-D   |
                  時期が---D
                    俺にも-D
                ありました。
EOS

「ボクシングには蹴り技が無い。そう思っていた時期が俺にもありました。」 → 「蹴り技がボクシングには無い。俺にもそう思っていた時期がありました。」

これはまずい気がするなあ。

じゃあ形態素解析で切り出した「ボクシングには蹴り技が無い。そう思っていた時期が俺にもありました。」の「ボクシング」は?

% mecab -F%m\|
ボクシングには蹴り技が無い。そう思っていた時期が俺にもありました。
ボクシング|に|は|蹴り|技|が|無い|。|そう|思っ|て|い|た|時期|が|俺|に|も|あり|まし|た|。|EOS

そうやって作った辞書は?そこから人工無能の要領で作った文章は・・・?

極論、機能の有用・非有用は相対的なもの。コンテンツのオリジナル性は明確な定義が無い。(もちろん利用規約などで明確に定義しているところから引っ張ってきちゃ駄目)

要は見せ方次第で、酷い話、有用っぽく見える・パクリっぽくなく見えるモノを作れば良いということになる。

やればいいことがわかった。

「有用っぽく見える・パクリっぽくなく見えるサービスを作る」

(うわ!こいつ最低だ!と思うかもしれませんが、わざわざ見た目だけで役に立たないパクリサービスを目指すという訳ではありません。明確にSEOのグレーゾーンを見極める意味で、極端でも考えるフレームを定義する必要があるというだけです。)

なんだかまじめに考えるほどに怪しくなってきました。これがSEOのダークサイドに落ちるということかw