たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
「もし人生やり直せるならどうしたい?」と問われて深く考えずに「スポーツとか音楽とかやってる人になりたいかも」と答えたんだけれども、なぜそう答えたのかその時はよく分からなかった。そっちの方がモテそうだからか? とも思ったけど、スポーツや音楽やっててモテない人もいるしなあ。
とかなんとかモヤモヤしてた時に、B'z(松本孝弘)のギタープレイの完コピに挑戦してる人の映像(ニコ動)とフェルナンド宮田という人のギタープレイの映像(ニコ動)を見て、なぜそう答えたのかの理由が分かった。
スポーツも音楽も、ライブが一番映えるものだからだ。
プログラムも絵も、時間をかければかけるほど作品の質を高められる。ハッキリ言えば、天才じゃなくてもただのボンクラでも、時間さえあればいいものが作れる。無限アンドゥでどこまでも工程を戻せるし、バックアップだって取っておける。やる気が尽きたらやる気が戻るまで作業を中断することもできる。だから素人目には、ただのボンクラが時間をかけて作ったものと、天才がサクッと作ったものとの、見分けは付かない。同人作家が11時間で描く絵(ニコ動)も、もっと短い時間で、あるいはもっと長い時間をかけて、同じようなクオリティのものを作ることができて、それらを素人の目で区別することは極めて困難だ。
でもライブは違う。ライブパフォーマンスは一瞬の煌めきだ。やり直しも作り込みもきかないから、その時その場で出せる実力が、その時その場でできるパフォーマンスの質のすべてを決定づける。そしてその良し悪しは素人目にもはっきりと分かる。
綺麗な絵を作るのに絵の実力は必ずしも必要ないけれども、華麗なギターソロを演奏するにはギタープレイの実力がなければどうにもならない。
じゃあDTMはその考え方だと駄目ってことにならないか? という風にツッコまれるかもしれないけど、確かに、僕は心のどこかでDTMをライブよりも一段下に見ているかもしれない。
あと、よくよく考えてみれば、世の中には、ライブで絵を描くことで高い評価を得る人もいるんだよね。ボブとか。こないだのMozilla 24でも、生でプログラムを書くライブコーディングというイベントをやってたし。
つまるところ僕がスポーツや音楽をやってる人になりたいと思ったというのは、自分にライブで素晴らしい絵や素晴らしいプログラムを作る実力がないこと、それだけの修練を積むことを忌避してきたという事実から目を背けて、自分が今まで手を出したことのない分野だから自分にも可能性があるに違いないと安直にも思い込んで、「俺だって一度やる気を出しさえすりゃあそんな事造作もないことなんだぜ」とくだを巻き、実際にはその「やる気を出しさえすりゃあ」ができなかったからこそ今この地位に甘んじているんだということに気付こうともしない、そんなドリーマーなボンクラの世迷い言にすぎなかったと。
ジュブナイルポルノ名作紹介という記事を何かの偶然で見かけて、なんの気無しに見てみたら、その中でPure Innocenceが紹介されていた。うわー、懐かしい!!! 高校か大学の時に読んだ記憶があるよ……
今読み返してみると、何故だか主人公のビジュアルイメージに謎の彼女Xの卜部さんが思い浮かんでしまった。いや卜部さんはこんなことしませんがね。序盤の、外から見て何考えてんだか全然わかんない、でも本人的には筋の通る思考プロセスを経た結果の行動が、相手の男を激しく動揺させる、という展開がそれを想起させたんだろうか。
Chromeウィンドウでは、window.open()
やwindow.openDialog()
の第3引数でalwaysRaised
フラグを指定することで、「常に最前面に表示」状態のウィンドウを開くことができる(通常のスクリプトではこのフラグを使うには特権が必要)。じゃあ、すでに開かれているウィンドウを最前面にすることはできないのか? というのが今日のお題。
フォクすけクロックを使ってみて、Firefoxのウィンドウの下に時計が隠れてしまうのは不便きわまりないと思ったので、これをどうにかしたかった。最初は、前述のalwaysRaised
を使った方法でいけるかなと思ったんだけど、Firefoxのアドオンとして動作する時はこれでいいけどXULRunnerアプリとして動作する時には「開く元の親ウィンドウ」が無いからこれじゃダメだ、と気がついた。
んでちょっと調べてみた所によると、どうもnsIXULWindowインターフェースのzLevel
というプロパティをいじることで、ウィンドウの重ね合わせの優先順位を動的に変更できるようだということが分かってきた。
以下のようにいくつかのインターフェースを経由することで、Chromeウィンドウ(nsIDOMWindow)からnsIXULWindowのインターフェースに辿り着くことができる。
var Ci = Components.interfaces;
var XULWindow = window
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIXULWindow);
XULWindow.zLevel = Ci.nsIXULWindow.raisedZ;
zLevel
に指定可能な値はnsIXULWindowインターフェースにおいて定数プロパティとして定義されていて、以下の種類がある。
プロパティ | 実際の値 | 意味 |
---|---|---|
Ci.nsIXULWindow.lowestZ | 0 | すべてのウィンドウの最背面 |
Ci.nsIXULWindow.loweredZ | 4 | すべてのChromeウィンドウの最背面 |
Ci.nsIXULWindow.normalZ | 5 | 通常 |
Ci.nsIXULWindow.raisedZ | 6 | すべてのChromeウィンドウの最前面 |
Ci.nsIXULWindow.highestZ | 9 | すべてのウィンドウの最前面 |
lowestZ
とloweredZ
の違いは、前者がエクスプローラその他Windowsネイティブのアプリケーションのウィンドウも含めてすべての最背面になるのに対して、後者はあくまでFirefoxのウィンドウの中での最背面になるだけであるということ。loweredZ
を指定したChromeウィンドウが他のネイティブアプリのウィンドウの下にある時、そのChromeウィンドウをクリックすると、そのChromeウィンドウがネイティブアプリのウィンドウの上に表示されるようになると同時に、それに「押し上げられる」形で、FirefoxのウィンドウすべてがそのChromeウィンドウより前面に表示される。
highestZ
とraisedZ
もそれと同様に、後者を指定したウィンドウは上にネイティブアプリのウィンドウが重なりうるけど、前者にはいかなるウィンドウも上には重ならない……のかと思いきや、こちらはどっちを指定してみてもraisedZ
で期待される通りの挙動にしかならなかった(Firefoxのウィンドウの中での最前面になるだけで、他のネイティブアプリのウィンドウが前面にくると、その下に隠れてしまう)。これってバグ?
ちなみに、数値で1~3を指定した場合はloweredZ
(4)を指定したのと同じ挙動になるようだ。多分7~8はraisedZ
(6)と同じで、それ以上はすべてhighestZ
(9)と同じになるんだろうと思うけど……前述の通りhighestZ
とraisedZ
は実際の挙動に違いが全然無いので、それを確認することはできなかった。
あと、ずっと前にEz Sidebarでこの問題にぶち当たってから気になってるもののずっと直ってないみたいなんだけど、raisedZ
以上が指定されたウィンドウがあると、通常のウィンドウで開いたモーダルダイアログが親ウィンドウの下に潜ってしまうという問題が起こる。パスワードの入力を求めるダイアログ等がFirefoxのウィンドウの下に潜ってしまって使い物にならないので、これはマジで困る。どうにかならんものだろうか。
――ということで対策を考えてみた。
var XULWindow = window
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIXULWindow);
var observer = {
observe : function(aSubect, aTopic, aData)
{
if (aTopic == "xul-window-registered") {
XULWindow.zLevel = Ci.nsIXULWindow.normalZ;
window.setTimeout(function() {
XULWindow.zLevel = Ci.nsIXULWindow.highestZ;
}, 250);
}
}
};
var ObserverService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
ObserverService.addObserver(MakeOnTopObserver,
"xul-window-registered", false);
新しいウィンドウが開かれる直前にウィンドウのzLevel
を元に戻して、ウィンドウが開かれた後にまた最前面に戻す。こうすれば最後の問題は回避できる。
ショウガを使って野菜炒めを作ろうと思って買い物をして帰ってきて冷蔵庫を開けたらカボチャ1/4があった(こないだ買ってそれっきりになってた)ので先にそっちを使うことにした。でも味噌汁と野菜炒めしかやらんのでは芸がないので思い切って新メニューに挑戦してみることにした。カボチャの煮物。
レシピを検索してみたらいくつかバリエーションがあってどれに従えばいいのか分からなかったので、いくつか見た物を混ぜてやってみることにした。カボチャの皮を適当に切って(切った後で思ったけど、ちゃんと煮ればべつに皮がついてても問題ないんだよね? というか皮の方に栄養たくさんあったりする? だとしたら後悔だな……)、水と醤油とみりんと砂糖とだし(粉末)を量りもせずに適当にドボドボ投入して煮てみた。
その間に弁当用のブロッコリーを電子レンジで茹でたりとか野菜炒めの野菜を切ったりとかしていて、ニンジンを取り出したところでふと気がついた。やべ。煮物にこれ入れるつもりだったんじゃん……鍋を開けてみたら水分がほとんどなくなってイイ感じに煮崩れてホクホクになったカボチャが。仕方ないからニンジンだけ電子レンジで茹でて、少しでも味がつくように、カボチャをどけた後の僅かな残り汁の中に放り込んで少し煮た後カボチャと合わせた。
野菜炒めの方は白菜を入れるつもりだったんだけど途中で力尽きたのでタマネギとニンジンとブロッコリーの芯と賞味期限切れのハムだけで作った。味付けは親が送ってきてくれたものの使い道に困ってた餃子のタレをドボドボ入れた。
アルェー? ショウガを使うつもりだったのに全然使ってないよ?
そういえば写真に写ってる茶碗が実は前のと違うのですが、前に使ってたやつ予備も含めて2つは、一つはだいぶ前から少し欠けてて気にせず使ってたんだけど何かの衝撃でヒビが広がって底まで達してしまったので引退、もう一つは洗ってる時に手が滑って割ってしまった、ということで買い直した次第です。
McCoyから辿った先の文書でまだ翻訳されていない物があったので、XPCOM ABIとWindowsレジストリを使って拡張機能を追加するを翻訳してみた。
ところで、表示されるページタイトルを変更する<title-override></title-override>
ってもう使えないんだろうか? 英語版と近いURIになることで他のページを翻訳する時にリンク先をいちいち確認しなくても済むから、むしろガンガン使うべき機能だと思うんだけど。
夏コミ前後に弟が来てた時に買い込んできた食料の中に練りワサビと練りショウガがあったんだけど、こんなの買ってこられても正直困るよと。自炊してるとは行ってもレパートリーが2品目くらいしかない(ぉぃ)から薬味を使うような料理作らないし、魚買ってきて捌いて刺身にするのでもなければ刺身買ってくりゃ普通はワサビついてくるし……
ということで処理に困っていたんだけれども、少なくともワサビの方はどうにかなりそうな感じだ。ふとした思いつきから卵かけご飯にワサビを入れてみたら、これがなかなかいける。考えてみたらこの組み合わせって、「大人のふりかけ」ののりたまごあたりと同じなんだよな。合うのも当然か。
ショウガの方は……ショウガを使う料理にチャレンジしてみるしかないですかねぇ。
Firefox 3からは、安全な方法での自動更新に対応していないアドオンはインストールできなくなるようだ、ということを先日書いた。そっちのエントリに詳しいことを書いたんだけど、要約すると、「安全な方法での自動更新を提供する」方法には以下の3つのパターンがある。
くでんさんの報じる所によると、このうち3番目の方法をものすごく簡単に実行できるようになる開発者向けのツール「McCoy(マッコイ)」が公開されたそうで、早速自分も使ってみたところ、本当に簡単だった(手順としては。作業はなんだかんだで手間取ったけど……)。なので、せっかく須藤さんにCOZMIXNGのアカウントを作ってもらったけど、今後はこの方法を使っていこうと思う。
閉幕まで残ってたらなぜかおみやげに頂いてしまったFirefoxカステラをみんなで分けて食べたよ。
うまかった!
写真うpはめどいのでリンク先をどうぞ(とかいう)。
お客さんを迎え入れるために部屋の掃除を物凄く久しぶりにしました。今の我が部屋はここ半年で一番きれいだと思います。
どっちが正しいとかはどうでもいいがとかの増田エントリを見ていて、トラックバックとして書き込まれているレスをいちいちタブ開いて読むのが面倒だったので、ダブルクリックもしくは「show」ボタンのクリックでその場に読み込むようなスクリプトを探してみたんだけど、見付からなかったのでサクッと書いてみた。
Firefox + Greasemonkeyの組み合わせでしかテストしてないので、他の類似環境で動くかどうかは知りません。
さりげなく更新。一度展開した項目をもう一度展開しようとすると中身が消えてしまう問題を修正したり、外部サイトのトラックバックはインラインフレームで表示するようにしたり、項目の上でしばらく待つだけで項目を読み込むようにしたりしてみた。
もう一度検索し直してみたら似たスクリプトが既に存在していた……
更新。ボタンを押したりダブルクリックしたりした時に内容が消えてしまう問題を修正。
イベント終わった後そのまま打ち上げに行って帰ってきてシャワー浴びて12時間ほど寝てやっと起きて動画をようつべにうpして日記書く前にやる気が尽きてまた寝て、という感じで2日経ってしまいましたが当日を振り返って思い出を書いてみるよ。