|
やっと1巻を発見して購入。
これはたしかにおもしろいー。みみっちくて、バカで、真剣で、謎の緊張感が!
作品集の掃除当番を見ると作者のここまでの実験というか試行錯誤がわかって更におもしろい!
|
|
やっと1巻を発見して購入。
これはたしかにおもしろいー。みみっちくて、バカで、真剣で、謎の緊張感が!
作品集の掃除当番を見ると作者のここまでの実験というか試行錯誤がわかって更におもしろい!
|
plnet.jpのサーバ移行が完了しましたー。
以前はレンタルサーバーで借りていたんですが、アクトインディ株式会社さんが社内サーバー設置をすることを機に社内の片隅にPlnetのサーバーも置かせてもらえることになりました。
ハードも好きに選んでということだったのでキャンペーン中につき半額で24,800円というお買い得なHP ProLiant ML110 G4にしました。
社内にお邪魔して、リリースされたばかりのDebian etchを速攻でインスコして外から接続できる状態にしてきました。その後、家からなんだかんだ設定して先日DNSの移行も完了したとこです。
一時期はやばかったCPU負荷もアプリケーションのチューニングでかなり良い状態。24800円のサーバ1台でどのくらいいけるのか、今後も全ての情報を晒しつつ頑張ってみようと思います。
大失敗という結果情報を晒すことになるかもしれませんが、どちらにしろ個人でWebサービスをやろうと思ってる方の参考になれば幸いです。
Yet another Cybozu Labs: ニコニコ動画勉強会に行ってきました複数テーブルにまたがるJOINは避ける 非正規化ロジックで対応
すごい気になる。
今のところの考えでは、これってOracleやPostgresなんかの1テーブル1インデックス制限が無いDBMSなら避けなくてもいいんじゃないかと思うんですがどうなんだろう。えらい人に聞いてみたい。
create_functionが気になったのでもうちょっと実験。
$ cat lambda.php
<?php
$lambda = create_function('', 'echo "foo\n";');
var_dump($lambda);
var_dump('lambda_1');
call_user_func($lambda);
call_user_func('lambda_1');
$ php lambda.php
string(9) "lambda_1"
string(8) "lambda_1"
foo
Warning: call_user_func(lambda_1): First argument is expected to be a valid callback in /home/komagata/works/example/php/lambda.php on line 6
怪しい。その1byteは何なんだと。
create_functionは関数名に使えない名前で関数定義してるだけってのはホントっぽいっすね。
PHPでクロージャ
$ cat closure.php
<?php
function get_adder() {
static $count = 0;
return create_function('', 'return ++$count;');
}
$adder = get_adder();
echo call_user_func($adder);
echo call_user_func($adder);
echo call_user_func($adder);
$ php closure.php
111
・・・に、失敗!
Plnetのコード整理とバグ潰し。
ダブっちゃいけないURLをtext型の255byteのINDEXで管理してたので長いやつはダブる状態になってた。しかもINDEX長いので速度も糞。
urlのmd5を作ってそちらを見るのが常識だということを知りました・・・。これならINDEXも32byteで雲泥の差。
t-kawaduが変換して重複も消してくれるバッチを書いてくれたのでスッキリ。
コードの方はあまりにもDRYじゃない部分を2つ変更。もはやオリジナルMojaviのコードにこだわってもしょうがないので本体に手を入れました。ひとつはViewが無くてもOKにしたのと、Railsのlayoutみたいにして大枠をひとつにまとめました。
<?php
class FooAction extends Action {
var $layout = 'Public'
(略)
}
?>
Public.html:
ヘッダー
{$partial}
フッター
実装はどうでもいいとして、重複コードを減らすとその分細部に時間をかけられて嬉しい。テンプレの共通化が進むと、適当なCSSとかHTMLだったのを、ちゃんと書こうかな!って気になります。
最低限のFastCGIが動いたのでRackを試してみました。
Ruby版WSGIと呼ばれてるとのこと。WSGIって何だろう。
TokuLog 改め Perl を極めて結婚するブログ – What’s WSGI? その1WSGI は、Web Server Gateway Interface の略です。
WSGI は、Web Server と、Web Application/Web Framework の間のやりとりを規定するPythonプロトコルです。
なるほど、Web Server Geteway Interfaceって言われるとわかりやすい。Web ServerとWebアプリは色々あるから共通のインターフェース決めようっていうのはまったく真っ当なお話ですな。
こちらを参考に最低限のFastCGI版のRackを使ったコードを書いてみました。
#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
include Rack
hello_rack = Proc.new do |env|
Response.new.finish do |res|
res.write "Hello, Rack"
end
end
Handler::FastCGI.run hello_rack
うごいたー。
Handlerを変えるだけでMongrelやWEBrickなんかでも動くポータブルなコードになって嬉しい。今後はこれで書いてこう。
Amazonから本が届いたー。
そうそう、待ってたんだよ、
Rubyist Magazine出張版と、実践ハイパフォーマンスMySQLと、・・・Rubyist Magazine出張版。
だれかほしい人あげます・・・。
|
Debian JP Project – CDN 対応ミラーの設定Debian JP Project では、1 つのサーバがダウンしただけで APT によるパッケージのダウンロードができなくなるといった障害に対処するため、複数の Debian ミラーサーバを仮想的に集約して耐障害性を持たせる CDN (Contents Delivery Network) 化を進めています。CDN ミラーには、次の APT リポジトリでアクセスできます (詳細)。
Debian JP ProjectがAPTリポジトリのCDN化しようとしてるそうです。スバラシ。
ついこの間、会社の勉強会でCDNの話があったばかりなのでタイムリー。その時は日本各地にサーバ借りて自分でCDN開業しようとか愚かなことを言ってたんですが、やっぱりこういう草の根CDNみたいな形が良さそう。(それにしちゃ負担デカ過ぎですが・・・)
Debian JP Project – CDN 対応ミラーの設定
push ミラー構築後、管理チームに連絡してください。重み付けの設定のため、あなたの提供できる帯域についての情報も付加していただけると助かります。連絡を受けた管理チームは、あなたのミラーを CDN のネットワークに追加します。「host cdn.debian.or.jp」で DNS 問い合わせを実行し、あなたのサーバが加わっていることを確認してください。
振り分けや低速サーバの検出、pushする辺りのプログラムがどうなってんのか気になります。その辺がパッケージとして提供されたら楽しいのにな。最悪自分で構築できるなんて状態になれば何かと心強いですよね。
・・・そんなことないか。
パワポとかのスライドを手っ取り早い状態にしてくれるSlideShareを使ってみました。
今までブログでそのままスライド見れるようにJavascriptとかいちいち書いてたのが、アラこれは便利だ。Scribdも楽しいけどスライドに特化したのはこっちがいいかも。