Game*Spark – : 1992年にGameProが配った『ストリートファイター』バレンタインデーカードが酷い件 by RIKUSYO人気格闘ゲーム、ストリートファイターのキャラクターが描かれたバレンタインデーカードなのですが、このキャラクターの絵がとんでもない代物でした。
92年に送られてきたらたしかにショックだけど、カッコいいなw。
Game*Spark – : 1992年にGameProが配った『ストリートファイター』バレンタインデーカードが酷い件 by RIKUSYO人気格闘ゲーム、ストリートファイターのキャラクターが描かれたバレンタインデーカードなのですが、このキャラクターの絵がとんでもない代物でした。
92年に送られてきたらたしかにショックだけど、カッコいいなw。
freenodeにrails-tokyoチャネルを作りましたということで、irc.freenode.netに#rails-tokyoチャネルを作ってみました。
ッザース!
早速JOINして下らない質問をしてみたところ、すぐ回答してもらえました。良い人だー!
質問:「sessionって普通どう消してますか?」
答え:「DBの場合はcronとかで普通に消すとのこと。」
14日前までのは消して、ついでにOPTIMIZEというのを用意してこれをcronで回すことにします。
script/dbmaintenance:
#!/usr/bin/env ruby
RAILS_ENV ||= "production"
require File.dirname(__FILE__) + '/../config/boot'
require RAILS_ROOT + '/config/environment'
con = ActiveRecord::Base.connection
con.execute "DELETE FROM sessions WHERE updated_at < '#{14.days.ago.to_s(:db)}'"
con.tables.each do |table|
con.execute "OPTIMIZE TABLE #{table}"
end
現行アプリだとショッピングカートみたいのがあるので結構溜まってました。
PHPだと言語自体にsession gcがあるからそういうのがあるのかと勘違いしてました。でもPHPのDebianパッケージ版はsession gc切ってcronで消してたから特に違和感は無いですね。
restful_authenticationだとsessionが使わないから不要?キャッシュ用途だとDBじゃ遅いから意味ないのかな。
ウノウラボの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的にブログ記事以外のページも自由に作れるようになり、そちらにも構造化されたテンプレートが利用できます。
僕は大東亜戦争従軍記というブログを次のようにしたいと考えました。
手持ちの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ですが)
作者はとにかく「サードパーティー開発者」と「ユーザー」に奉仕して、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特有の文字を置き換えるの対応する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からサウンドノベルが作れるまぜまぜノベルで古き良きサウンドノベルを作り始めました。その名もつきこもりにちなんで「ひきこもり・・・」と。

僕らもすでにプレイしていた時には感情移入していた主人公の中・高学生からみた○○おじさんの年齢になりました。俄然やる気がでました。もちろん実写で真幸おじさん(俺の本名)として登場したくてたまりません。(もちろん一瞬で頓挫しましたが・・・)
ま、それはいいとして、サービス作成者として見たこの「まぜまぜノベル」ですが、現状ある類似サイトよりよく出来てる印象があります。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系みたいにキャッチーなタイトルを付けたかっただけなんです。知っても何の生産性も上がりません。すみません・・・。)