memo-space
勝手に添削「PostgreSQL VACUUM FULLせずに不要領域を削除する」
- 2007-11-02
- pgsql
そういう時はdeleteではなくtruncateを使う方法もあります。 truncateはいきなりテーブルを(不要領域を残すことなく)空っぽにするSQLです。
- WriteBacks: 3
CakePHP日記:requestActionとSecurityコンポーネント
- 2007-10-26
- php
なるほど。viewからrequestAction()を呼びだすのか。 なかなかよさそう。 と思ってたらSecurityコンポーネントとの組み合わせでハマってしまいました。
どうやらSecurityコンポーネントのrequireAuthを使ってると、requestAction()が呼ばれた時にセッション側のトークンが書き換えられてしまうので絶対トークンが一致しない様子。うーん困った。
あと、セッションの中にはトークンのキーと同時に有効期限が
セットされるんだけど、
Sessionコンポーネントの有効期限がCAKE_SECURITY * CAKE_SESSION_TIMEOUT
なのに、トークンの有効期限はCAKE_SECURITYだけで決まっちゃってる気がする。
- WriteBacks: 0
Pythonで、メソッド定義されたクラスを知る方法
- 2007-10-23
- python
それより、あるオブジェクトのメソッドがどのクラスで定義されているか調べる方法を知りたいなぁ。
と昨日書いたけど、わかった気がする。__dict__を調べればいいんじゃないだろうか。
- WriteBacks: 1
Pythonで、メソッドがどこで定義されたか外から知る方法
- 2007-10-22
- python
inspect.getfile()とかinspect.getsourcelines()とかがそのものでした。
subtech - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - Ruby で、メソッドがどこで定義されたか外から知る方法
- WriteBacks: 4
sortするならusort
- 2007-10-21
- php
個人的には、sortをするならusort()が好きです。 Perlをはじめ他の言語を使ったことがある人ならそう思うんじゃないかな。
- WriteBacks: 0
phpのinclude_pathのカレントディレクトリ
- 2007-10-15
- php
require("foo.php")とrequire("./foo.php")って意味違うって知ってました? cliから実行する場合以外はあまり関係無いかもしれませんが。
読み込むファイルはまずカレントのワーキングディレクトリからの相対パスとしてinclude_path で探され、それから、カレントのスクリプトのディレクトリからの相対パスとしてinclude_path で探されます。 (中略)ファイル名が ./ あるいは ../ で始まっている場合は、 カレントのワーキングディレクトリからの相対パスとして探されるのみとなります。 (PHP: include - Manual)
- WriteBacks: 0
間違ったRuby On Railsのはじめかた
- 2007-08-30
- programming
- よくあるscaffoldを使ったチュートリアルをやる。
scaffold :modelという一行が何なのか理解できずに悩む。- 2がスタティックメソッドの呼び出しであることを知り、Rubyではクラス定義の中に任意の式を書けることに驚く。
paramsやsessionは何故@paramsや@sessionではないのか悩む。Module#attr_internalの存在を知り、気が遠くなる。←今ここ
どうもRubyのコードは苦手だ。
masuidrive on rails ≫ Blog Archive ≫ Railsでアプリを組むのは簡単か?
Railsでアプリを組むのは、PHPやJavaより楽だけど、Ruby/Railsが使えるようになった人間が、アプリを組むのが楽だって言うだけで、Ruby/Railsを覚えるのがPHP/Javaより簡単って訳じゃない。
なるほど。 RailsはWebアプリケーションを作るための便利な黒魔術集といったところか。
フレームワークとしてうんぬんより、script/generateは便利といった印象。 ただしそのscript/generateの使い方をどこで調べたらいいのかよくわからないけど。
- WriteBacks: 0
PL/Proxyもおもしろいですよ
- 2007-08-24
- pgsql
書こう書こうと思いながら3ヶ月くらい放置していたネタです。 巷ではMySQL Proxyが話題のようなので、 あえて今年のPostgreSQL ConferenceのJoshのプレゼンでもちょっと出ていたPL/Proxyをいじってみました。
- WriteBacks: 0
今さらFizzBuzz(当然PostgreSQL)
- 2007-06-19
- pgsql
色々考えたけど、まあ許せるのはこのくらいか。
-- スタンダードに
select case
when i%15=0 then 'FizzBuzz'
when i%5=0 then 'Buzz'
when i%3=0 then 'Fizz'
else i::text end
from generate_series(1,100)as s(i);
-- ちょっとアグレッシブに(8.2以降)
select coalesce(v15.t, v3.t, v5.t, s.i::text)
from generate_series(1,100)as s(i)
left join(
values(0,'FizzBuzz')) as v15(i,t) on (s.i%15=v15.i)
left join(
values(0,'Fizz')) as v3(i,t) on (s.i%3=v3.i)
left join(
values(0,'Buzz')) as v5(i,t) on (s.i%5=v5.i)
あ、valuesじゃなくて普通にサブクエリでいいのか。まあvaluesって書いてみたかっただけです。
- WriteBacks: 0
Smartyのtruncateはfunc_overloadでいいんじゃない
- 2007-06-15
- php
ずいぶん前からよく見かける話題だけど、また最近見かけたので。
いちばん手っ取り早いのは、mbstring.func_overloadを設定しちゃうことだと思いますよ。自分でプラグイン書く必要とか無いです。
- WriteBacks: 0
交換不可能な(ry
- 2007-06-08
- misc
ちょっとささくれだってるんで。
- Q:交換不可能な能力に磨きをかけるに何をすべきか? A:blogを書けばいいと思うよ - 一人シリコンバレー男 [ITmedia オルタナティブ・ブログ]
- 小野和俊のブログ:梅田望夫氏が言うように、好きなことを貫いて仕事にしていくためにはどのようにすればよいのか
「これは自分しか出来無い」なんてプレッシャーの中で仕事をしていくことが僕のゴールなのだろうか。
- WriteBacks: 2
ファイルの直リンクを防止する方法をもう少し考えてみる
- 2007-05-31
- php
Refererを使わずに直リンクを防止する方法を考えてみます。
元ネタ: cl.pocari.org - PHP の apache_setenv と virtual を利用して,ファイルへの直リンクを防止する
この foo.php のファイル名を時間によって変えるなどすれば,まあ,直リンクを防止することができる……のかな?ちと強引ですが.
つまり、「直リンクを防止する」ことを考えるより「ある一定時間しか有効でないURLを作る」ことを考えれば良いということじゃないでしょうか。
で、foo.phpのファイル名を変えちゃうと、外部からの直リンクは防げても、内部からの普通のリンクを貼る時に困りそうです(それならぶっちゃけ、画像のファイル名そのものを時間によって変えちゃってもいいわけだし)。
なので、時刻をパラメータとして渡す方針で。
フェーズ1
foo.php?t=....のようにfoo.phpにタイムスタンプを渡す- foo.phpの中で
$_GET['t']と現在時刻を比較し、n分以上たっていればはじく - でもこれじゃ簡単に偽装されちゃうYO!
なので、フェーズ2
- foo.phpにタイムスタンプと、(タイムスタンプ+秘密鍵)のHMACを渡す。
- foo.phpの中で、(タイムスタンプ+秘密鍵)のHMACを再計算して、渡ってきたHMACと一致するかチェック。
- foo.phpの中で
$_GET['t']と現在時刻を比較し、n分以上たっていればはじく
な感じじゃないでしょうか。本当はapache moduleとかで書いた方が楽そうですが。
- WriteBacks: 0
勝手に添削「タグを実現するテーブル設計を妄想する」
- 2007-05-28
- pgsql
添削するほどエロくないですが。
元ネタ:タグを実現するテーブル設計を妄想する - よくきたblog
まず、
SELECT COUNT(*) FROM (SELECT user_id FROM item_tags WHERE item_id = 1 GROUP BY user_id) AS rows;
は、
SELECT COUNT(DISTINCT user_id) FROM item_tags WHERE item_id = 1;
でいいです。
- WriteBacks: 0
少年法厳罰化に対するmixiの反応に引いた
- 2007-05-26
- book
少年の凶悪犯罪の増加ってマスコミが煽ってるだけだよねっていう意見はわりと 浸透しているのかと思っていた。
[mixi] 日記一覧 | 少年法「厳罰化」の改正案成立(mixi内)
自分の考え方は、思ってたより少数派なんだなぁって思った次第。
近年、多くのマスメディアがしばしば「少年の凶悪犯罪が急増している」といった内容を喧伝しているが、「犯罪白書」によれば、少年犯罪の発生は1960年代前・中盤が最も多く、1960年代後半から激減。1970年代以降減少傾向にあり、マスメディアによる情報操作が行われている可能性が捨てきれない。(少年犯罪 - Wikipedia)
- WriteBacks: 0
読書ブーム到来
- 2007-05-23
- book
一年ぶりの読書ブーム到来(現実逃避ともいう)。7冊くらい買ったかな。新書とエッセイが1冊ずつ。あとは小説。読んだ順に書きます。
おもしろかった。
憲法九条は、突然変異の奇跡で、無邪気な理想論で、挑戦で、冒険で、面白くて、修道院みたいで、ドン・キホーテみたいだ。
対談の間に挟まっている太田さんの花見のエピソード。桜を狂気の花というあたりは、太田さんは感性の人だなぁと思う。
九条を守りたいという立場でありながら、その発想は世界を一つの家族にという発想や戦争に突入していった時の発想に通ずるのではないかという疑問を呈するあたりもおもしろい。
- WriteBacks: 0
PHPを3ヶ所だけ直すとしたら
- 2007-05-22
- php
PHPについてはいろいろありますが手短に釣られて見ます。
PHPのあれが駄目とかじゃなく、 もし神様(何の?)が、今までのは無かったことにしてPHPをどこでも3ヶ所直していいよっていったらどうするかってのを聞いてみたいです。
- WriteBacks: 2
ミックさんのパズルに挑戦
- 2007-05-12
- pgsql
ミックさんの問題に挑戦してみました。 case文を使う方が先に思いついたけど。こんな感じかな。 ヒラをどこで弾くかが微妙なところですが。
方法はいくつかありますが、代表的なものとしては、HAVINGを使ってUNIONする非効率的なものと、CASE式を使った効率的なものがあります。それぞれどんなクエリになるか、考えてみてください。
- WriteBacks: 1
SQLでIPアドレスから携帯のキャリアを判定する
- 2007-05-11
- pgsql
PostgreSQLのinet型を使って、IPアドレスから携帯のキャリアを判定してみます。
とりあえずIPアドレスの情報源。
- WriteBacks: 1
より分散された世界を想像する
- 2007-05-11
- programming
人のBlogを読んだ時、そこに感想を書き込もうとするのがコメント。 自分のBlogに帰って、そこに感想を書き込んでから送るのがトラックバック。 それぞれ長所短所があるわけですが。
それより、自分がどこに書いた、どこに保存されているか、それをどのように見たいかというのはどうでもいいというか、もっと自由でいいんじゃないかなあ。
hail2uの中の人のblogなんかは、はてなブックマークでブックマークするとコメントできるようになってます。 これは、 はてなブックマークエントリー情報取得API を使ってJSONPでもってきて表示してるんだと思います。
同じことをあちこちでOpenIDでやれば、何がおこるのかな。 僕のBlogも、他のBlogへの感想も、全然バラバラのサーバに対して書き込まれる。 僕がはてなやlivedoorやmixiに書きちらかしたエントリは、IDでひもづけられる。RSSリーダーで気になったエントリがあれば、その場でそこに何か書き込む。 もうエントリとかコメントとかトラックバックとかブックマークとか、そんな区別いらないんじゃないかな。
- WriteBacks: 1
OpenIDとmixiとはてなとlivedoor
- 2007-05-09
- programming
話題になりはじめてからもう二年くらいたつのかもしれないけど、 やっとOpenIDが盛り上がってきたんでしょうか。
ほんまかいな。国内では対応サービス全然増えてない気がしますが。
- WriteBacks: 0
単純なblosxomのコメントスパムよけ
- 2007-05-07
- blosxom
数週間前にコメントスパムよけの仕組みを入れました。 ここのサイトはアクセス数が少ないので参考にならないかもしれませんが。
- WriteBacks: 0
CP932 vs JISX0213
- 2007-05-02
- programming
CP932の2バイト部分(何て呼べば良いんだろう)とJIS X0213の1面を比較してみました。元データはunicode.orgのCP932.TXTと、使いこなそうユニコードのsjis0213.txtです。

CP932 vs JIS0213(2) posted by (C)あきを
- グレーの点はCP932でもJISX0213でもreserved。
- 赤い点は、CP932とJISX0213でUCSのコードが違う。
- 緑の点は、JISX0213にしか存在しない。
- 青の点は、CP932にしか存在しない。
となっていて、白い部分は一致しています。一番気になるのは青いところで、これは13区の10文字です。
| 区 | 点 | CP932 | UCS |
|---|---|---|---|
| 13 | 80 | 0x8790 | U+2252 |
| 13 | 81 | 0x8791 | U+2261 |
| 13 | 82 | 0x8792 | U+222b |
| 13 | 84 | 0x8794 | U+2211 |
| 13 | 85 | 0x8795 | U+221a |
| 13 | 86 | 0x8796 | U+22a5 |
| 13 | 87 | 0x8797 | U+2220 |
| 13 | 90 | 0x879a | U+2235 |
| 13 | 91 | 0x879b | U+2229 |
| 13 | 92 | 0x879c | U+222a |
これらのうち9文字は、2区との重複文字です。
残りの1文字(13, 84)はどこへいったのでしょう。sjis0213.txtには(1 -6-18)にこんなコメントがありました(適当に改行してあります)。
1- 6-18 0x83B0 U+03A3 # GREEK CAPITAL LETTER SIGMA
# unified with Windows CP932 0x8794 (as a "KOKUNAI-JISSOU-GOKAN-MOJI",
a domestically implemented compatibility character, N-ARY SUMMATION (U+2211).
うーん。調べてみようと思ったらJISのサイトがメンテナンス中だった。
関連: 図解:Windowsの文字コード
- WriteBacks: 0
数式いじり
- 2007-04-21
- math
久しぶりにオイラーの贈り物を開いてみた(P42あたり)。
のとき
となるらしい。
こっちは簡単。
これは和と差の積ですね。
中3レベルか、、、
ところで、
は
なので
、、、元に戻った。
あーあとP26のパスカルの三角形とフィボナッチ数列の図の意味がやっとわかった。左に30度傾けて見れば良かったのか。
- WriteBacks: 1
SERIAL型のsequence名を取得する
- 2007-04-18
- pgsql
PostgreSQLでは、SERIAL型とはsequenceをデフォルト値とするinteger型で、SERIAL型の列を持つテーブルを作成すると自動的にsequenceが作られます。
またこの時のsequenceの名前は、{表名}_{列名)_seqとなります。
なんだけど表や列をRENAMEした場合にsequenceの名前もあわせて変わるわけではないので、フレームワークなんかでこの命名規則に依存していると悲しい思いをすることがあります。
- WriteBacks: 0
ミルカさん派です
- 2007-04-17
- math
ミルカさん派ですよミルカさん派。内容は全然理解できてませんが。
ファンタジーの法則ですか。 プログラマの数学は読んでませんが、ミルカさんを読んだ時に感じたのはまさに、 これは冒険物語だということでした。
というわけで、数学ガールに絶対でてきそうにない台詞を勝手に想像してみる。
僕「テトラちゃん!そっちにいっちゃダメだ!」
ミルカ「どうやら間に合ったようだね」
何の話だか。
- WriteBacks: 0
CakePHP日記:PostgreSQLのportを指定する
- 2007-04-16
- php
app/config/database.phpのコメントに惑わされてはいけません。
/*
...
* host =>
* the host you connect to the database
* MySQL 'localhost' to add a port number use 'localhost:port#'
* PostgreSQL 'localhost' to add a port number use 'localhost port=5432'
*
*/
実は'host' => 'localhost port=5432'ではなく'port' => 5432を追加すればOK。
- WriteBacks: 0
CakePHP日記:CakePHPでSmartyを使う時のTips
- 2007-04-11
- php
2007-04-12 追記:※注意!結論の「バッククォートで括ると便利」というのはあってますが、そこまでの過程はほとんどウソでした。そのうち直します。
CakePHPでViewにSmartyViewを使う時、おおざっぱにいうとこんな動きになっています。
- コントローラがビューに変数を渡す
- ビューがSmartyに変数を渡す(ついでに自分自身をviewというSmarty変数に登録する)
- レンダリング
このように、変数のコピーが2度発生します。
{$post.id} // これはSmartyの変数
{$html->link('linkto', $post.id)} // この$postはPHPの(SmartyViewがセットした)変数
ここで困るのは、レンダリング中にセットされた変数はSmartyの世界からしか見えないこうことです。 典型的な例としてはループで使われる変数です。
- WriteBacks: 0
CakePHP日記:Model,View,Controllerを共有する
- 2007-04-09
- php
同じmodel/actionに対して、一般ユーザ向け画面と管理者向け画面を分けたい時、CakePHPではAdmin Routingという選択肢があります。
4.4. 高度な Routing 設定: Admin Routing と Webservices
なんだけども、アプリケーションを分けてしまった方がすっきりする場合もあります。 分けてしまった場合でも、特にModelのクラスは同じもの使うことが多いです。こういう場合はファイルをコピーしなくても、app/config/bootstrap.phpでModelを検索するパスを$modelPaths 複数指定することができます。
- WriteBacks: 0
blosxom starter kit + Vicuna
- 2007-04-09
- blosxom
ちまちまと、blosxom starter kit + Vicunaという微妙なものを作っています。
まだあちこちちゃんと動いてませんが。 欲しい人がいるとはあまり思いませんが、いたら公開を考えます。
- WriteBacks: 0
文字列の先頭と末尾を表わす正規表現
- 2007-04-08
- php
そういう時は普通、\zを使うんだと思う(元記事のコメント欄でも言及されてるみたいだけど)。
- preg_matchの注意点 - PHPプロ!ニュース
Holes in most preg_match() filters - PHP Security Blog
<?php $str_list = array( "OK" => "1234:XYZ", "OK_EOL" => "1234:XYZ" . PHP_EOL, "NG_1" => "1234:XYZ" . PHP_EOL . "aaa" ); foreach ($str_list as $k => $v) { if (preg_match("/^[0-9]+:[X-Z]+\z/", $v)) { echo $k . " => " . $v; echo PHP_EOL . "----------------" . PHP_EOL; } } ?>
という話を書こうと思ったらPerl6では\Aと\zは廃止だそうです。
^と$が\Aと\z相当の動作をするらしい。
- WriteBacks: 0
CakePHP日記:insertかupdateか
- 2007-04-05
- php
Model#save()は、idがセットされているかどうかでinsertかupdateかを判断しているようです(さらに、lidがセットされていれば、本当に存在するかをSELECTしてみています)。
ですが、一般的なコントローラのeditアクションは、
A.12. Posts の編集:CakePHP プログラマーズ リファレンスガイド
function edit($id = null)
{
if (empty($this->data))
{
$this->Post->id = $id;
$this->data = $this->Post->read();
}
else
{
if ($this->Post->save($this->data['Post']))
{
$this->flash('投稿を更新しました。','/posts');
}
}
}
こんな感じで、データがpostされた場合はidをセットしていません。
ではなぜこれをupdateと判断するかというと、URLの1つめのパラメータは暗黙でデフォルトのモデルのidにセットされるからです。
じゃなくってこのドキュメントの例では、idをhiddenで渡しているからでした。
で、このhiddenが無い場合の話が以下に続きます。
しかし、コントローラでvar $uses = array('Model1', 'Model2')などと明示的に使うモデルを指定していると、この暗黙のidのセットは動作しないようです。
なので、uses を指定している時や、URLの1つめのパラメータをデフォルトのモデルのidとして使いたくない場合は、明示的にidをセットしましょう。
- WriteBacks: 0
CakePHP日記:SmartyからHTMLヘルパーの属性を指定する
- 2007-04-03
- php
前回の続き。 実は、
<p>Title: {$html->input('Post/title', $view->aa('size', 40, 'class', 'classname'))}</p>
こんなことしなくても、HTMLヘルパーのメソッドはたいてい、attributeにarrayじゃなく文字列を渡すこともできるらしく、
<p>Title: {$html->input('Post/title', 'size="40" class="classname"')}</p>
でいいんじゃないかということに気づいた。
2007-04-03 追記
やっぱダメだった。inputみたいなフォームの部品に関しては、valueとかidを付けてくれない。$html->image() なんかには使ってもいいかもしれない。
- WriteBacks: 0
CakePHP日記:Smaryテンプレート内での配列生成
- 2007-03-29
- php
CakePHPからSmartyを使うのは一見いいとこどりのようで、実際結構大変かもしれない。
- How to use Smarty with Cake (SmartyView) | The Bakery, Everything CakePHP : Articles
- MOONGIFT ブログ ≫ cakePHP覚書 (1)
素のCakePHPだと
<p>Title: <?php echo $html->input('Post/title', array('size'=>40, 'class'=>'classname'))}</p>
みたいな感じのものを、Smartyテンプレート内では配列を生成できないので、
{assign_assoc var='ArrayName' value='size=>40,class=>classname'}
<p>Title: {$html->input('Post/title', $ArrayName)}</p>
と書こうという話。そんなassignは個人的に許せないわけですよ。 CakePHPのbasic.phpにはaとかaaとかhとかprとか色々便利な関数があるのと、 Smartyテンプレート内では関数を自由に呼び出すことはできないけど、 テンプレート変数のメソッドなら治外法権という性質を利用して、 SmartyViewにラッパーメソッドを追加。
function aa() {
$args = func_get_args();
return call_user_func_array('aa', $args);
}
SmartyViewのインスタンスは$viewとしてテンプレート内から参照できるので、
<p>Title: {$html->input('Post/title', $view->aa('size', 40, 'class', 'classname'))}</p>
と書くことができる。邪道な気もしますが。あと、同様にprも追加しておいた。
あと、テンプレート変数をヘルパーの引数に渡したい時とかどうしよう(ループカウンタとか)。
$view->Smarty->get_template_vars()かなぁ。どんどん道を外れていく気がする。
2007-04-03 追記:CakePHP日記:SmartyからHTMLヘルパーの属性を指定する
- WriteBacks: 2
それ、yuiで
- 2007-03-27
- programming
なかなか興味深いなあと思っていたら、Yahoo UI Libraryでできるらしい。
- 404 Blog Not Found:CSS - スクロール可能なテーブル w/o JavaScript
- Sybianの日記 - tbodyをスクロール可能に
- hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips
どういう仕組みになっているかは誰かが調べてくれるはず。
- WriteBacks: 0
CakePHP日記:radioにlabelを付ける
- 2007-03-27
- php
デフォルトのHtmlHelper::radio()が出力するラジオボタンにラベルが無いので付けた。 誰もがやりたくなる改造だと思います。
ヘルパーが出力するHTMLタグは、app/config/tags.ini.phpでカスタマイズできますが、 <label for="...">と書くにはヘルパー側に手を入れる必要があるので、 安易にapp/config/tags.ini.phpをこんな感じにしてみました。
radio = <label><input type="radio" name="data[%s][%s]" id="%s" %s />%s</label>
- WriteBacks: 1
CakePHP日記:AppErrorで日本語が表示できない
- 2007-03-21
- php
単にメッセージを表示するだけのエラーページのために、action毎にviewを作るのはめんどうなので何か無いかと探してみた。
Object::cakeError()あたりが使えそう。
- app/error.phpというファイルにAppError extends ErrorHandlerを作る。
- Apperror::foo() jを作る。
- app/views/errors/foo.thtml を作る
が作法のようだ。詳しくはソース見てね。
なんだけど、日本語のメッセージが表示されない。どうやらErrorHandlerのコンストラクタでSanitize::paranoid()を使っているからみたいだ。
コンストラクタもオーバーライドしないとだめかな。 いや、もういっそcakeError()を使わずにAppControllerにエラーハンドラを作った方が良いのかな。
- WriteBacks: 0
CakePHP日記:commit()は空のarrayを返す
- 2007-03-21
- php
Modelのcommit()は空のarrayを返すので、 if ($this->Model->commit()) { /* 成功 */ } とか書くと常に失敗する。
というか、他のRDBMSは知らないけど、PostgreSQLってトランザクション内でエラーが出 てる状態でcommitすると成功を返してrollbackするのか。
これは、select以外のSQLをexecute()した場合も、成功の場合は空のarrayを返す。 失敗した場合はfalseを返す。
- WriteBacks: 0
CakePHP日記:sessionとhidden
- 2007-03-20
- php
CakePHPをはじめた。
全体的にはよくまとまっていると思うけど、まだググり足りないのか、あれこれ足りないものも見えてきた。
ドキュメントのサンプルコードも微妙。
6.4. アソシエーション:Example 6.9. posts 作成のための /app/views/posts/add.thtml フォーム
<?php echo $html->hidden('Post/user_id',
array('value'=>$this->controller->Session->read('User.id')))?>
アプリケーションの種類にもよるだろうけど、これはちょっとサンプルコードとしては怖い気がする。user_id詐称しまくりじゃないですか。 これはcontroller側で
$this->data['Post']['user_id'] = $this->Session->read('User.id');
してやるべきじゃなかろうか。
- WriteBacks: 0
tbodyとrowspan
- 2007-03-19
- programming
tbodyで思い出した。JOINの結果みたいなグループ化されたのを表にしたい時に、tdにrowspanを付けるのがけっこうめんどい。 なぜなら、上から走査していくのの、そのグループの要素が何個あるかを最初に知っていなければならないからだ(適当な説明だけどピンとこない人はスルーして下さい)。
で、楽する方法としてtbodyとrowspan="0"を使うという方法を思いついたんだけど、IEだと表示できなった。以上。
| 111 | aaa |
| bbb | |
| ccc | |
| 222 | aaa |
| bbb | |
| ccc |
- WriteBacks: 0
PostgreSQLドキュメントの閲覧用ブックマークレット
- 2007-03-07
- pgsql
PostgreSQL日本語ドキュメントを見ていて、あれ?これって原文どうなってるのかな?とか思った時に、原文の同じページに移動するためのブックマークレットを作ってみた。
下のリンクをブックマークツールバーか何かにドラック&ドロップして下さい。
バージョンが上がった場合は直さなきゃだめだけど。
- WriteBacks: 0
DBD::PgとEvent::Libで非同期通知
- 2007-02-24
- perl
DBの変更をトリガーにしてPushしたいなら、PostgreSQLのLISTEN/NOTIFYですよ。 最近のDBD::Pgは$dbh->func('getfd')というのが使えるらしい。
POEとかよく知りませんが、libeventならCから使ったことがあるので書いてみた。 こんな感じ。
#!/usr/local/bin/perl
use strict;
use warnings;
use IO::Handle;
use Event::Lib;
use DBI;
use Data::Dumper;
sub listener {
my ($ev, $type, $dbh) = @_;
print Dumper($dbh->func('pg_notifies'));
}
my $dbh = DBI->connect("dbi:Pg:", "", "");
$dbh->do("listen hoge");
my $reader = event_new(
IO::Handle->new_from_fd($dbh->func('getfd'), "r"),
EV_READ | EV_PERSIST, \&listener, $dbh);
$reader->add;
event_mainloop;
ファイルディスクリプタからファイルハンドルを得るあたりが自信無し。
# 実行
$ perl notify.pl
...
# 別端末でpsqlからnotifyすると、
=> notify hoge;
=> notify hoge;
...
# 非同期通知。ってこの説明で伝わるのか!?
$VAR1 = [
'hoge',
15164
];
$VAR1 = [
'hoge',
15164
];
普通はトリガと一緒に使います。
=> create or replace function t1_trig_func() returns trigger as
$$begin notify hoge; end;$$ language plpgsql;
CREATE FUNCTION
=> create trigger t1_trigger after insert or update or delete on t1
for each statement execute procedure t1_trig_func();
CREATE TRIGGER
=> insert into t1 values(1);
以下、関連するPostgreSQLのドキュメント
- WriteBacks: 0
図解:Windowsの文字コード
- 2007-02-24
- programming
先日、某所でWindows Vistaで採用されたJIS X 0213:2004の話を聞いてきた。 実際にVistaに触る機会があれば色々実験してみたいと思うけど、 その前にとりあえずWindowsの文字コードについてまとめておきたいと思う。
まずは私の知っているWindows XPまでの話。以下のページを参考にさせてもらいました。 あわせて見ていただけるとわかりやすいと思います。
Windows-31J(CP932とも呼ばれることがあるけど、以降Windows-31Jと呼びます) というのは、
- JIS X 0201:1997
- JIS X 0208:1997
- NEC特殊文字
- NEC選定IBM拡張文字
- IBM拡張文字
からなっている(あれ?ユーザ定義外字が無いな)。
JIS X 0201は1バイトなので置いておいて、マルチバイト文字の基本は JIS X 0208という文字集合。これは94×94文字の集合なので 領域としては8836文字分あるけど、空きとかがあって実際に定義されているのは 6879文字だそうだ。
そこに特殊だったり選定だったり拡張だったりを追加した図がコレ。

Windows-31J posted by (C)あきを
13区と89〜92区はJIS X 0208の空き領域に文字を追加している。 それはともかく115〜119区って94越えてるんだけど、 これはShiftJISというエンコードのなせる技だったりする。
で、本題はこの先。これらの追加された文字は、 歴史的経緯によってすべて重複している。同じ文字の形(グリフ)のものが 2箇所以上にある。つまり2つ以上の文字コードを持っているわけだ。 その重複を表わしたのが次の図。

Windows-31Jの重複符号化文字 posted by (C)あきを
普通ベン図 は楕円とかで書くんだろうけどそれじゃ上手く書けないので四角になってます。 赤い数字は各四角形の中の文字数。つまりNEC特殊文字は8+1+61+13=83文字と なっていて、そのうち14文字はIBM拡張文字と重複している。 また、9文字はJIS X 0208の2区と重複しているというわけです。
さてこの中には1つの文字で3つの文字コードを持つものは何文字あるでしょう? というと公文式か日能研かという感じだけど。実際のところ2文字あります。
しかし何時間もかけた割にはイマイチな図だな。誰か絵心のある人に書き直してもらいたい。
次はVistaについて書きたい。
- WriteBacks: 1
2月21日のメモ
- 2007-02-21
- misc
昨日、北口の地下でスケートボードをやっていた若者がムーディー勝山を歌っていた。「みぎからやってきたぁー♪」
自分が欲しいなと思っていたものに近い。
素敵なことをやってる人を発見してしまった。
- WriteBacks: 1
Makefileをもっと簡潔に
- 2007-02-19
- programming
ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - - Makefile は簡潔に書きましょう
hoge.cからhogeを生成するより簡単な方法は、Makefileを書かないことです。
$ make hoge
Makefileを書くのであれば、
hoge:
とだけ書いて
$ make
で十分。
- WriteBacks: 0
PHPの変数
- 2007-01-30
- php
PHPでの内部変数の扱われ方 - PHP5のオブジェクトコピーでありがちな勘違い - PHPプロ!ニュース
参照渡しで$aと$bが同じものだと思っている方は不思議に思うかもしれません。
普通の言語なら同様の実行結果になるんじゃなかろうか。 これを不思議に思うようであればかなり自由な発想の持ち主だと思うよ。
package StdClass;
sub new { bless {} }
package main;
use Data::Dumper;
$a = new StdClass;
$b = $a;
$a->{foo} = 'bar';
print Dumper($b);
$a = 'baz';
print Dumper($b);
...
$VAR1 = bless( {
'foo' => 'bar'
}, 'StdClass' );
$VAR1 = bless( {
'foo' => 'bar'
}, 'StdClass' );
- WriteBacks: 1
Plagger入れた - 作るよ野良RSS
- 2007-01-17
- misc
札幌市民に送る某at-macのRSSとか(用事無いくせに)。
http://www.mono-space.net/~iakio/rss/
- WriteBacks: 3
plperlでUnicode正規化
- 2007-01-12
- pgsql
PostgreSQLでUnicodeの正規化ができればいいなぁと思ってたんだけど、調べてみると自分でCで書くのはかなり辛そう。
PerlにはUnicode::Normalizeという実装があるので、これをplperlから利用してみた。(正確にはplperlu)。
Unicodeの正規化についてはこの辺を。
daily dayflower - Unicode::Normalize で遊ぶ
utf8db=# create or replace function nfkc(text) returns text as
$$use Unicode::Normalize; return Unicode::Normalize::NFKC($_[0]);$$ language plperlu;
CREATE FUNCTION
utf8db=# select nfkc('ABC');
nfkc
------
ABC
(1 row)
utf8db=# select nfkc('イ
- WriteBacks: 0
- Search
- Feeds
- Profile
- 石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
- 書いた本
- Links