index

2009年 2月
              1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  
2009年 3月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
  16 17 18 19 20 21 22
  23 24 25 26 27 28 29
30 31          
2009年 4月
      1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

アレ

インターネットサイトを開けません~操作は中断されました   ▽20090331a #プログラミング

インターネット サイト ~~ を開けません。

操作は中断されました

ってのが IE で出ましたよっと.ていうか出てたらしい.客先で(ぉ

原因を調べるために検索すると Google Maps を貼り付けた人の話とかが わんさか出てくるんだけど,どーーも原因がはっきりしないが……

完成していない外側の DOM オブジェクトを内部の DOM オブジェクトが 直接変更しようとすると出る,のかな? でも出てない例の方が多いんでさらに謎.うーむ.

とか思いつつ検索結果をずーっと下っていくと,KB 発見.

表示はされる原因、Operation 中止エラー メッセージ Internet Explorer で Web ページにアクセスするとでしょうか。

この問題は、子コンテナの HTML 要素が、子コンテナの親のコンテナ要素を変更しようとするスクリプト含まために発生します。 スクリプト innerHTML プロパティ メソッドまたは appendChild メソッドを使用して親のコンテナ要素を変更しようとします。

(原文ママ)

相変わらずの日本語でおkっぷりは機械翻訳なので仕方ないとして (嫌なら英語ページを読めって話です), 要するにえーと,子の要素が親の要素を innerHTML や appendChild で操作しようとすると出る,と.

でもその条件でも出ないことが多い気がするなぁ……と思いつつ例文と解決策を見ていると…… あそっか,より厳密には「親要素があって子要素があって,その子要素の中から親要素を操作すると出る」であって, 「親要素の直下にあるスクリプトからは親を操作できる」わけだ. だから </body> の直前に <script> 置けばほぼ確実に大丈夫,と.

変なバグであるw

解決策:

The easiest way for you to fix the problem is to upgrade to Internet Explorer 8

デスヨネー


ところで客先で問題が起きたそのページでは innerHTML も appendChild も使ってないんですが,どうしましょうね……?

MP3プレイヤ   ▽20090313a #日記

MP3 プレイヤの電池がほんと寿命っぽくてどうしたものか.

使ってるのは依然として COWON iAudio M3 です.

サイズも手頃だし,HDD 搭載で容量も 20GB だし, USB Mass Storage で普通に Windows から MP3 ファイルをコピーすればもりもり認識してくれるし,と, あたしの使用スタイルにとてもマッチした良い子なのだが.

次の機種を探し始めた頃にはすっかり 2GB とか 4GB のメモリが主流で, 20GB HDD 搭載なんてモデルが市場からなくなってしまっていたのね. ていうか動画プレイヤ主体で MP3 プレイヤはそっちの方に行ってしまったというか.

んが,最近になって SDHC カードとかが 16GB とか 32GB とかになってきたんで, これに対応したプレイヤならいいんじゃね? そういうの出ねーかな?

とかひっそりと思ってたらいいの出た.ていうか出る.

COWON D2+.SDHC 対応だし, そもそも内蔵が 16GB あれば何とかなりそうな気もする. 外見デザインはすっきりしてて良い感じ. 液晶のところは何か保護シートでも貼りたいところだが.


COWON S9 ってのも良いなーというかデザイン的にはこっちのが好みなんだけど, こいつは BlueTooth ヘッドフォンが前提のようで, 操作ボタンが上辺にあるがヘッドフォン端子が底辺にあるというw

S9 カッコいいんだけどなー.BlueTooth でノイズキャンセラ付きのちょうどいいヘッドフォンねーかなーw


まぁとりあえずは来週発売の COWON D2 を買ってみようか.

それ以前にこれを必要とするほど外出しろよって話ですがw


Propel1.3 の transaction   ▽20090310a #プログラミング #PHP #symfony

symfony 1.2 で Doctrine がサポートされたもののイマイチなので Propel 1.3 を使うわけだが 1.2 の Creole から 1.3 では PDO を使うようになったので transaction まわりの処理がそっちに対応して変更された.

で,PDO では「ネストした transaction」をサポートしなくて, beginTransaction() した後に再度 beginTransaction() しようとすると PDOException の例外を吐いてくださる.

Propel は Creole からの互換で,というか単にそれじゃ面倒だからだと思うが, そこをラップして多重に beginTransaction() できるよう PropelPDO クラスでオーバライドしてたりする.

でも多重 transaction をサポートしてるわけではないので微妙に挙動が直感的でなかったりする.気がする.

コードから見るルールは以下の通り.

  • commit() はいちばん外側のやつだけが有効で他は無視
  • rollback() はどこにあっても有効
  • commit()かrollback()が働いたら transaction は終了
  • transaction 終了後の commit() と rollback() は全て無視

以上のルールを念頭に……


// 普通のパターン
Propel::getConnection()->beginTransaction();
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->commit();

// $hoge->num == 1



// 多重 transaction のパターン
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->commit(); // 内側 trn の commit は無視
Propel::getConnection()->commit(); // こっちが有効

// $hoge->num == 2


ここまではいい.


// 内側 commit 外側 rollback
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->commit(); // 内側 trn の commit は無視
Propel::getConnection()->rollback(); // こっちが有効で rollback

// $hoge->num == not set



// 内側 rollback 外側 commit
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->rollback(); // こっちの rollback が有効
Propel::getConnection()->commit(); // こっちは無視

// $hoge->num == not set


外側の set 1 は内側の rollback() で消されてる点に注意.


// 内側 commit 外側 rollback その2
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->commit(); // 内側 trn の commit は無視
$hoge->setNum( 3 );
$hoge->save();
Propel::getConnection()->rollback(); // こっちが有効で rollback

// $hoge->num == not set


最後に rollback() してるから,全部なかったことに.


// 内側 rollback 外側 commit その2
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->rollback(); // こっちの rollback が有効
$hoge->setNum( 3 );
$hoge->save();
Propel::getConnection()->commit(); // こっちは無視

// $hoge->num == 3


内側の set 2 の後の rollback() で transaction が終了するので, その後の set 3 は transaction の文脈外で実行される. その後の commit も普通に無視されるので,結果 3 が残る.


// 内側 rollback 外側 rollback
Propel::getConnection()->beginTransaction(); // trn 1
$hoge->setNum( 1 );
$hoge->save();
Propel::getConnection()->beginTransaction(); // trn 2
$hoge->setNum( 2 );
$hoge->save();
Propel::getConnection()->rollback(); // こっちの rollback が有効
$hoge->setNum( 3 );
$hoge->save();
Propel::getConnection()->rollback(); // こっちは無視

// $hoge->num == 3


これも理屈は上のと同じなんだけど, 最後に rollback() してるのに set 3 が残ってるのってすごく直感的じゃないなーと.


まぁ実際には rollback() するような状況ならその後すぐ例外を throw して後の処理はさっくり飛ばすと思うんで, rollback() した後の set が動いちゃうとかって事はあまりないだろうとは思うんだけどもね.

TODO:世界樹の迷宮   ▽20090305b #ゲーム
アイテム名 モンスター 場所 条件
花切りの大鎌 全てを刈る影 B3F 1ターン以内に倒す
石像のカケラ ゴーレム B3F
森鬼の頭飾り フォレストデモン B20F 2ターン以内に倒す
森鬼の腕甲 フォレストオウガ B20F 2ターン以内に倒す
森王のタテガミ ケルヌンノス B10F
頭状の世界樹根 採取 B28F E-2 (Lv3)
腕状の世界樹根 伐採 B27F F-7 (Lv3)
足状の世界樹根 採掘 B28F E-2 (Lv3)
濡れた紫糸 禍乱の姫君 B18-20F 3箇所封じた状態で倒す
濡れた赤糸 冷酷なる貴婦人 B18,20F 3箇所封じた状態で倒す
石像の豪腕 ゴーレム B3F 即死効果で倒す
海王の氷骨 コロトラングル B15F (炎属性以外で倒す)
魔獣の瞳 マンティコア B17F (10ターン以内に倒す)
華王のビロード アルルーナ B7F (炎属性以外で倒す)
呪い牙の芯部 樹の下の大王 B25F (術で倒す?)
雷竜のヒゲ 雷鳴と共に現る者 B25F
竜の玉礎 [火氷雷]竜クローン B30F
火竜の皮 火竜クローン B30F
火竜の逆鱗 偉大なる赤竜 B8F
氷竜の逆鱗 氷嵐の支配者 B16F 逆鱗攻略
雷竜の逆鱗 雷鳴と共に現る者 B25F 逆鱗攻略


世界樹の迷宮   ▽20090305a #ゲーム

セブンスドラゴン」がもう発売されて家にも届こうかという昨今, あと少しで「世界樹の迷宮」をクリア,って感じでございます. こういうひとりでチクチクやるゲームは仕事の合間の息抜きにちょうどいいわー.弾幕シューティングもいいけどねw


しかし「クリア」ってのがこれまた……

マップの地下 25F で「最初のエンディング」, その後にもりもり潜って地下 30F のラスボスに到達するために, 戻って 3体の(普通ならラスボス級の)ボス敵を倒す, ためにキャラクタの Lv を落としてスキルを割り振りなおして専用キャラを育成して,やっと 3体とラスボスを倒して.

で,やっと「モンスター図鑑」が埋まったので, あとは「アイテム図鑑」を埋めれば完成,なのだが, レアドロップアイテムとか条件ドロップアイテムとか, 条件の中には今のパーティのスキルでは実現できないのがあるから, これまた専用キャラを育成して……とかw

つうわけで,「あと少し」じゃ全然ない気がしてきたぜ.

まぁ「セブンスドラゴン」届いてもその前に「世界樹の迷宮 II」が積んであるわけだが……w



hasLayoutってこういうことか   ▽20090303b #コンピュータ

AJAX もりもり使いました的なね,Windows アプリっぽく, ブラウザのサイズを変えるとそれに合わせて画面内の HTML パーツの配置とかサイズも追従するような, そんな感じのやつを作ってたですよ.

   ヘッダ   
 
  コンテンツ  
 
   フッタ   

まぁよくあるこんな感じのレイアウトで.

で, Event.observe( window, 'resize', windowResize ) とかやって,windowResize()$('hoge').setStyle({ height:'~~px'}) っと.

~~の部分を ( document.documentElement.clientHeight - ヘッダの縦幅 - フッタの縦幅 ) にすればおk.


……とか思ってた時期があたしにもありました.


Firefox では普通に動くんだけど,IE だとウゴカナーイ.動かないってのとは違うな,何かものすごくデタラメに動く.

初回の読み込み時は期待通りに動いたと思ったら,ウィンドウを最大化すると動かなくて,元に戻すとやたら小さくなったり,もう一度最大化するとさらに小さくなったり.

alert() とか仕込んで調べてみたら,どうもリサイズのたびに, 毎回取得していた「ヘッダの縦幅 - フッタの縦幅」の値が毎回テキトーに変動している模様. いや中身変えてないんで変動されちゃ困るんですけど……

とりあえず泥縄的に,初回に縦幅を取得して固定でやってみる. そしたら IE7 は期待通りに動くようになったが, IE6 は何だか……こう,リサイズにはきちんと追従するんだけど, 位置がおかしい.設定したサイズの倍くらいのスペースを取ってる気がする.

倍くらいに見えるので値を /2 してみたら,すげえぴったりになった. つまり 2倍だったんだ.そういえばなんか IE6 で縦幅が 2倍になるバグとか聞いたことがあるぞ……

というわけで検索して出てきた「IE6でよく遭遇するCSSのバグとその解決方法」のページさん. でそこからさらに,「IEでのCSSのバグを回避するhasLayout」.


なんかちょっと前に hasLayout の話題を読んだ気がしたが忘れていた.

hasLayoutとは、オブジェクトがレイアウトを持っているかどうかを示すものです。

とか理解できなかったんだけど. でもこれをいじっていて少し理解した気がする.


つまり,hasLayout:true なエレメントは, 自分のサイズ(縦幅やら横幅やら)を保持していて, それをもって周囲のレイアウトに対して影響を及ぼす側にある.

逆に hasLayout:false なエレメントは, 自分自身のサイズってものに主張がなくて, 周囲に押されるままにサイズを変えようとする.

今回,height を設定しても期待したようにならなかったり, あるいは height を取得しようとしても変な値が返ってきてたのは, そいつが hasLayout:false だったから「自分自身の height 値」に自信がなかったんではなかろうか.

で,hasLayout:true にするための設定も上記ページに. この中だと width:any value とか zoom:1 あたりが使いやすそうなので, その辺を設定してみる.

……うまくいったヽ( ´∀`)ノ


調子に乗って *{zoom:1} とか設定したら,symfony のツールバーが変なサイズになったりしたw とりあえず上記の話からして,「流し込まれたレイアウト以外のレイアウトを強制したい相手」にのみ設定してやればよさそうだ.


つか IE7 でもこれ影響してるみたいなんすけど…… IE8 でもあるのだろうか? Firefox とかではこんなんなしできちんとレイアウトを変更できてるんだし, こんなん気にせずに自由に使えるようになってほしいもんだなぁ……

北海道に行きたいにゃー   ▽20090303a #日記

前回は北端の宗谷岬に行ったので, 今度は東端の納沙布岬に行ってみたいんじゃないかしらー?


しかし前回にすごく実感したのが,フェリー超退屈. つうかそれ自体は構わないんだけど,苫小牧・八戸間のフェリー, 雑魚部屋で雑魚寝なので,他人がいると眠れないあたしはマトモに眠れないのだ.

というわけで,フェリーを使わずに……というか フェリーで雑魚寝しなくて済む何らかの方法でとにかく 「北海道を自分のクルマで走る」だけを目的に何かないか探ってみる. でも金額もかなりすげー事になりそうなので,いちおう金額も探ってみるぜ.


作戦その1:青函フェリー

なんだかんだで青函フェリーだと?

いくら(往復) 時間(片道)
クルマ ¥80000 13時間
フェリー ¥40000 4時間

青函フェリーは時間が短いので, タイミングを注意すれば中で寝ることもなくただ単に乗ってればいいだけなのが魅力.

クルマ費用はガス代 + 高速代なので金がかかるが, それだけ長距離ドライブを楽しめるというのもいいなぁ.


作戦その2:大洗~苫小牧フェリー

大洗でフェリーにクルマを乗せて,自分は電車とかで移動,で苫小牧でフェリーを待ってクルマを受け取る,的な.

いくら(往復) 時間(片道)
高速道路 ¥16000 数時間
フェリー ¥52000 20時間
電車 ¥40000 10時間

電車はまぁ,ある程度は自分の領域が確保されるだろうし, 雑魚寝よりはマシ……だと思うんだけど……


作戦その2':大洗~苫小牧フェリー(乗ってく)

個室を取れれば,積んでる本を5~6冊持って行って, ひたすら読書三昧で過ごすのも意外と悪くない……かも?

いくら(往復) 時間(片道)
高速道路 ¥16000 数時間
フェリー ¥52000 20時間


作戦その3:陸送業者

自動車の陸送業者さんに運搬を頼んで,自分は新幹線とか飛行機とかで移動したらどうかな?

調べてみると,マイカー旅行に特化したサービスを提供してる業者さんとかもあるようだ.

いくら(往復) 時間(片道)
陸送業者 ¥83000 片道 5~7日
飛行機 ¥40000 数時間

往復が楽なのは魅力だけど,時間が随分かかるなぁ……


ぬう……なんか比較してたら,結局フェリーに行き着いてしまいそうな…… でもフェリーの予約を取っちゃうと,計画の流動性が阻害されるんだよな. 要するに行き当たりばったりで行動できなくなるってことだが.

往路は大洗からで,帰りは青函&自走なんてのもいいかなぁ……


マインスイーパも出来やしない   ▽20090301a #ゲーム #マインスイーパ

もうね腱鞘炎がひどくて……

以前の左手の時のように全く使えなくなってしまってるわけではないんだけど, 右手が,毎朝起きた時とかにすっごい痛いのさー. ドケルバン病ってやつですかのう.そこの ATOK,「死病」とか変換するんじゃあないッ!


でマインスイーパもあまりやってないわけだが, マイコミでマインスイーパの記事が出てたので, 久しぶりにやってみた……ら,なんか全然ダメです.

うーんやれやれ.弾幕シューティングは少しは上達してきたが, かわりにマインスイーパの腕が鈍っているとは……

ていうか腱鞘炎はやく治れ. そこの ATOK,「名折れ」とか変換するんじゃあないッ!

index