今日のチェキ 2007-06-29
■五巻ようやく手元に
データ入稿しろという印刷会社に萎えた
■アヒルのオモチャが太平洋から北極海を抜けイギリスに向かっている
■五巻ようやく手元に
データ入稿しろという印刷会社に萎えた
■アヒルのオモチャが太平洋から北極海を抜けイギリスに向かっている
Ethna×PHPは29日発売らしい。
錦糸町くまざわで聞いたら、「6月29日発売で当店では売り切れとなっております申し訳ございません」となぞなこと言われたのでAmazonさん。
Ethnaでアクション名の決定方法を変更するにはこちらを参考にします。
PATH_INFOでアクション名決定したい場合はこんな感じでControllerに追加。
function _getActionName_Form()
{
return isset($_SERVER['PATH_INFO'])? str_replace('/', '_', trim($_SERVER['PATH_INFO'], '/')): null;
}
http://example.jp/index.php/test/ → Testアクション
http://example.jp/index.php/user/register → User_Registerアクション
これをやるとアクション名がPATH_INFO以外で取得できなくなるので、テンプレートでformタグを書くときに面倒です。
パラメータもPATH_INFOで取得したいと思ってもできませんので。
Ethna_UrlHandlerの使い方がちょっとわかりづらいのでEthnaでNet_URL_Mapperを使うをそのまま適用。
<?php
/**
* @see http://labs.cybozu.co.jp/blog/tsuruoka/anubis/blog_show/45
*/
require_once 'Net/URL/Mapper.php';
class {Appid}_UrlHandler extends Ethna_UrlHandler
{
var $action_map = array(
'global' => array(
'/*action' => array(
'action' => '',
),
),
);
function &getInstance($class_name = null)
{
$instance =& parent::getInstance(__CLASS__);
return $instance;
}
function buildActionParameter($http_vars, $action)
{
if ($action == "") {
return $http_vars;
}
$action = str_replace('/', '_', $action);
$key = sprintf('action_%s', $action);
$http_vars[$key] = 'true';
return $http_vars;
}
function requestToAction($http_vars)
{
if (isset($http_vars['__url_handler__']) == false
|| isset($this->action_map[$http_vars['__url_handler__']]) == false) {
return array();
}
$url_handler = $http_vars['__url_handler__'];
$action_map = $this->action_map[$url_handler];
// parameter fix
$method = sprintf("_normalizeRequest_%s", ucfirst($url_handler));
if (method_exists($this, $method)) {
$http_vars = $this->$method($http_vars);
}
// normalize
if (isset($http_vars['__url_info__'])) {
$path = $http_vars['__url_info__'];
} else {
$path = "";
}
list($path, $is_slash) = $this->_normalizePath($path);
$mapper = Net_URL_Mapper::getInstance($http_vars['__url_handler__']);
foreach ($this->action_map[$http_vars['__url_handler__']] as $key => $value) {
$mapper->connect($key, $value);
}
$result = $mapper->match($path);
$http_vars = $this->buildActionParameter($http_vars, $result['action']);
unset($result['action']);
$http_vars = array_merge($http_vars, (array)$result);
return $http_vars;
}
}
あとはindex.phpに以下をmain実行前に書く。
$_SERVER['URL_HANDLER'] = 'global';
UrlHandlerの使い方自体はPATH_INFOを使ったRequest-URIからのパラメータの取得を参照。
基本的にhttp://example.jp/index.php/action/name/でアクセスして、特殊なの作りたかったら、action_mapに追加する感じで。
ニコニコ削除祭り。いいえトムです。
■サイトの読み込み時間をプロファイリングできるWEBツール「Pingdom」
心理探偵
■Yahoo! JAPANのPV数は世界一、月間利用者数は4,000万人突破
■MySQL,PostgreSQLとFirebirdの性能をユーザー会メンバーが徹底比較,判明した”意外な結果”
更新とJOINが多ければMySQL,シンプルなSELECT主体ならPostgreSQLが向いている。ストアド・プロシージャでシングル・コネクションならFirebirdは非常に速い
検証が5.0.6-betaってことでindex merge使えるのでJOINもなんとか
またMySQLの場合,デフォルトのエンジンであるMyISAMに比べ,トランザクション機能を持つInnoDBの性能は必ずしも遅くないという,これも意外な結果が得られた。
mixiもInnoDBだしね
でもfull textインデックス張れないのが
どーも、一部通戦力外です。
■まつもとゆきひろ×結城浩,Rubyを語る
そこにシビれる!あこがれるゥ!
まつもとひろゆきに親近感沸いた
■Yahoo!の形態素解析をMeCabで無理やり再現してみる
■なんと9割女性…武将オタ“戦国時代ショップ”
浅井長政が人気商品に並んでたのに納得
■携帯会社、端末変えず変更可能に・総務省方針
3年じゃ無理だろ
■アイマスが遂にスクールミズギ配信
コンテンツ売り上げ1億円突破記念の特別価格1200ゲイツ!
■「時をかける少女」のDVDが発売から2カ月で11万枚突破-アヌシー国際アニメーション映画祭で特別賞を受賞
■「1円携帯」規制へ、総務省が料金体系見直し要請
905が8万とか言われても無理ッス
■ニコニコ動画開発者インタビュー 「ユーザー本位を目指す理由」
senna、senna言い出してからだいぶたったのですが、正直よくわかってなかったので調べてみた。
そもそも、全文検索は全文字列から対象文字列を検索するということは普通やらない。
検索エンジンで「京都」を検索しても「東京都」は引っかからない。
これは日本語を形態素解析し切り出した単語を元に検索しているからである。
この検索の部分がsennaで形態素解析がMeCabと。
でMySQLはというと、
MySQL全文検索
全文検索にはFULLTEXTインデックスを張ってMATCHを使え。
FULLTEXTはMyISAMエンジンのみ利用可能で、インデックス結合の対象とならないぞ。
そもそもシングルバイトのみで日本語では利用できません(なんだtt
ということで、この部分でsennaががんばってくれる(はず)のです。
PostgreSQLとかどうなってるんだろうと調べてみたらみかかが力入れてやってるんですね。
みかかデータのLudiaとか導入楽そうだ。
Yahooが形態素解析Webサービス開始したり、巡回先がやたらMeCabやsennaの話題取り扱ってるんですが、やっとかんとダメですね。
いろいろわかった所でキーワードでWikipediaを見てみると全部載ってる件。
全文検索
形態素解析
わかち書き
どこぞに入ってたmysql叩いてみた。
mysql> CREATE TABLE test (
-> id INTEGER AUTO_INCREMENT,
-> PRIMARY KEY (id),
-> text TEXT NOT NULL,
-> FULLTEXT INDEX (text)
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> insert test value (null, '東京都');
Query OK, 1 row affected (0.20 sec)
mysql> select * from test where match(text) against('京都');
Empty set (0.00 sec)
mysql> select * from test where match(text) against('東京');
+----+-----------+
| id | text |
+----+-----------+
| 1 | 東京都 |
+----+-----------+
1 row in set (0.00 sec)
だめっぽ。
環境
Windows
PHP 5.2.3
MySQL 5.0.41
my.iniの設定
[mysqld]
default-character-set=CP932
skip-character-set-client-handshake
<?php
$mysql = mysql_connect('localhost', 'root', '');
mysql_select_db('test');
echo mysql_client_encoding(); // latin1
echo mysql_real_escape_string('ソン'); // ソ\ン
mysql_close($mysql);
$mysqli = mysqli_connect('localhost', 'root', '', 'test');
echo mysqli_client_encoding($mysqli); // latin1
echo mysqli_real_escape_string($mysqli, 'ソン'); // ソ\ン
mysqli_set_charset($mysqli, 'cp932');
echo mysqli_client_encoding($mysqli); // cp932
echo mysqli_real_escape_string($mysqli, 'ソン'); // ソン
mysqli_close($mysqli);
$pdo = new PDO('mysql:dbname=test;host=localhost', 'root', '');
echo $pdo->quote('ソン'); // 'ソ\ン'
?>
SHOW VARIABLES LIKE “char%”ではclientの文字セットがutf8とでるんですが、クライアントのdll自体がlatin1で動作しちゃってる為使えないです。
mysqliの場合は5.2.3で追加されたmysqli_set_charsetで変更できますが。
PDOに関しては、文字コードナニそれ?って感じでしょう。
プレースフォルダ機能つきプリペアードステートメントが文字コード考慮してなくてどうする。
<?php
$mysql = mysql_connect('localhost', 'root', '');
$result = mysql_query('SHOW VARIABLES LIKE "char%"');
while ($row = mysql_fetch_assoc($result)) {
echo "|{$row['Variable_name']}\t|{$row['Value']}\t|\n";
}
/*
|character_set_client |cp932 |
|character_set_connection |cp932 |
|character_set_database |cp932 |
|character_set_filesystem |binary |
|character_set_results |cp932 |
|character_set_server |cp932 |
|character_set_system |utf8 |
|character_sets_dir |C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
*/
?>
mysql> SELECT * FROM sister;
+--------+
| name |
+--------+
| 四葉 |
+--------+
1 row in set (0.00 sec)
mysql> SELECT * FROM sister WHERE name LIKE '%四\\\葉%';
+--------+
| name |
+--------+
| 四葉 |
+--------+
1 row in set (0.01 sec)
なんで\入ってても引っかかるん?
■ズッバァァン! 豪華アニソン歌手&声優が集結した「CR超絶合体SRD」はサントラも熱いッ!
半島球入れ必死だな
■本日よりマクドナルドが地域別価格を導入、都市部ではどれだけ値上がりしたのか?
■ビリー、20日来日…ダイエットDVD「ブートキャンプ」ブレーク
■デリヘル営業で風営法違反 画像ちゃんねる管理者ら逮捕
そっちで逮捕ですか