DBIx::Class::ResultClass::HashRefInflatorが無視されるケース

$rs->result_class(‘DBIx::Class::ResultClass::HashRefInflator’);
がときどき無視されてしまうのはこれかー.
http://lists.scsys.co.uk/pipermail/dbix-class/2008-February/005733.html

the custom result_class is written *only* into the $rs->{result_class} slot (by the result_class() accessor/mutator generated by Class::Accessor::Grouped), whereas when ResultSet->new() is (secretly) invoked to build the resulting resultset (yes, new() is called even on a simple find() with some \%attrs), the custom result_class is searched
*only* in the $rs->{attrs}{result_class} slot (please see ResultSet.pm line 101), which however is never assigned by the result_class() mutator. Consider also that ResultSet->new() is invoked this way ( from a ResultSet instance – for example by search_rs() ):
my $rs = (ref $self)->new($self->result_source, $new_attrs); so once in new() we’ve lost $self and the opportunity to read its result_class slot, which is why it should have somehow been copied into $new_attrs->{result_class} before calling new().

なんだってー!
まぁ,いかにもCatalyst的に起こりそうな不具合なので,もっと早く調べておけば良かったな.
DBIx::Class::ResultClass::HashRefInflatorはもともとラッパ関数経由で使っているので,そこんとこを
 $rs->result_class(‘DBIx::Class::ResultClass::HashRefInflator’);
 $rs->{attrs}{result_class} = ‘DBIx::Class::ResultClass::HashRefInflator’;
に変えて対処.
これまでここんとこでくねくねしてたので影響でかいわ.

【JavaScript OOP】DOMのイベントハンドラとインスタンスメソッドの対応付け

DOMの要素とクラスとを対応付けたい場合のイベントハンドラの扱い方.
・Hogeクラスを,クラス属性値hogeのdiv要素(以下hoge要素)と対応付けたい
・Hogeクラスのインスタンスメソッドonmousedownを,hoge要素のonmousedownイベントハンドラと対応付けたい

// Constructor
function Hoge(_fuga){
var _elm = document.createElement('div');
_elm.setAttribute("class", 'hoge');
this.elm = _elm;
this.fuga = _fuga;
}
// Initializer
// インスタンスを作成,インスタンスメソッドをDOMイベントにバインドし,
// インスタンスを返すクラスメソッド.
// DOMイベントハンドラからはthis.fugaでインスタンスのプロパティに
// アクセスできないので,クロージャを用いる.
Hoge.initializer = function(_fuga){
var instance = new Hoge(_fuga);
instance.elm.onmousedown = function(e){
// Hoge.prototype.onmousedownを継承した
// インスタンスメソッドonmousedownを呼び出す
instance.onmousedown(e);
};
return instance;
};
Hoge.prototype.onmousedown = function (e){
this.fuga = 'fugafuga';
};
// var obj = new Hoge('fuga'); の代わりに以下を使う
var obj = Hoge.initializer('fuga');
// hoge要素の上でmousedownすると,obj.fugaの値が'fugafuga'になる.

あまり可愛くないけど,こうするしかないかな.
イベントハンドラじゃなくてイベントリスナを使う場合もほとんど同じなので割愛.

Mac版Safari3.1における,oncontextmenuのデフォルト動作を無効にした時の不具合(2)

http://storybook.jp/mt/2008/06/macsafari31oncontextmenu.html
FCKeditorでは,独自コンテキストメニューをIFRAMEとして開いてるので,Mac版Safari3.1でもフォーカスを取り戻せているようです.ちなみに,FCKeditorのパネルはIFRAME,あるいはIEの場合window.createPopupで開かれる仕様.
(9/10追記)
IFRAMEで独自にチャレンジしてみたけど駄目でした.

MySQL 文字数の制約

(MySQL 5.03以降の話)
VARCHARの場合,設定した文字数が制約.
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT はそれぞれの最大バイト数が制約.

VARCHAR
VARCHAR(X)のXは文字数.0から65,535までの値.
例)VARCHAR(4)は4文字.4バイトではない.バイト数は文字コードに依存する.
ただし,実際に適用可能な長さは,行の最大サイズ(65,535バイト)を越えない範囲である.

MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used.

http://dev.mysql.com/doc/refman/5.0/en/char.html
TEXT
最大バイト数は次のとおり.
 TINYTEXT:255 (2^8 – 1) bytes
 TEXT:65,535 (2^16 – 1) bytes
 MEDIUMTEXT:16,777,215 (2^24 – 1) bytes
 LONGTEXT:4,294,967,295 (2^32 – 1) bytes
VARCHARのように,行の最大サイズの制約は受けない.
ただし,max_allowed_packet の制約を受ける.
その他,TEXTとVARCHARとの違いはこちらに.
http://dev.mysql.com/doc/refman/5.0/en/blob.html

Mac版Safari3.1における,oncontextmenuのデフォルト動作を無効にした時の不具合

http://storybook.jp/mt/2008/04/macsafari31.html
ExtJSのほうでも話題になってました.
http://extjs.com/forum/showthread.php?p=141199
いまんとこ対処なし.
SaasBoard/PositLogに関して言えば,
Ctrl + 左クリックで独自コンテキストメニューを表示させると問題を回避できます.

Mac版 Firefox3上でのFCKeditor 2.6.2

return(enter)キー押下時のバグ
http://positlog.org/071212pG.html#id_spr5fxkr
は修正されないままでした.
状況を確認できる環境を持ってないのだろうなぁ.
Firefox2向けにはパッチ付きで報告してあるけど,
http://dev.fckeditor.net/ticket/2140
このパッチあてるとFirefox3ではreturn(enter)キーが全く効かなくなります.あわ.
修正予定.