たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
のりさんのところで報じられている、Firefox 3の仕様変更について、チェックインされたパッチを詳しく調べてみた。
今後拡張機能の自動更新では、以下の2つの段階でセキュアかどうかのチェックが入るようだ。
この二つの条件が満たされてやっと、アドオンの自動更新が行われるという仕組みになっている。
よって、アドオン作者が取れる選択肢は以下の4つになる。
やる方として一番楽なのは1と4なんだけど、1には重大な問題がある。
というわけでもうちょっと素早く対応できる路線として2を検討してみようと思ったんだけど、仮にどうにかしてSSL証明書を手に入れたとしても、そもそもさくらのレンタルサーバじゃビジネス用プラン以外ではSSLは使えないんだってさ……
3はやりかた自体が分からない。XMLに署名するとかハッシュ値得るとか、僕の頭ではちんぷんかんぷんです。
ということでいずれにしても今の野良アドオン天国はオシマイだと言えよう。
前にも書いた気がするけど、ISBNコードが13桁になって前のやつが使えなくなったので、13桁ISBNコードを10桁ISBNコードに変換するコードを入れて書き直してみた(Amazonの個別商品ページのURIは13桁ISBNではなく10桁ISBNベースなのです)。
var title = prompt('タイトルを入力') || '';
var isbn = prompt('ISBNコードを入力') || '';
isbn = isbn.replace(/^(urn:isbn:|isbn)/i, '');
if (!isbn) return;
var urn = 'urn:isbn:'+isbn;
var urn_part = urn.match(/^urn:isbn:(\d{3}-)?(\d-?\d+-?\d+-?[x\d])$/i);
var numRaw = urn_part[2];
var num = numRaw.replace(/-/g, '');
/*
13桁ISBNのチェックディジットは10桁ISBNのチェックディジットと異なるので、
10桁ISBN基準で再計算する。
*/
var num10 = num;
if (urn_part[2]) {
var sum = (parseInt(num.charAt(0)) * 10) +
(parseInt(num.charAt(1)) * 9) +
(parseInt(num.charAt(2)) * 8) +
(parseInt(num.charAt(3)) * 7) +
(parseInt(num.charAt(4)) * 6) +
(parseInt(num.charAt(5)) * 5) +
(parseInt(num.charAt(6)) * 4) +
(parseInt(num.charAt(7)) * 3) +
(parseInt(num.charAt(8)) * 2);
var digit = (sum % 11);
if (digit) {
digit = 11 - digit;
if (digit == 10)
digit = 'X';
}
num10 = num.replace(/.$/, digit);
}
_setClipBoard(
'[<img src="http://images.amazon.com/images/P/'+num10+'.01._AA110_FMjpg_SCTZZZZZZZ_V66486851_.jpg" alt="" />'+title+']('+urn+')'+
'([Amazon.co.jp](http://www.amazon.co.jp/exec/obidos/ASIN/'+
num10+
'/outsiderrefle-22/ref=nosim))'
);
昨日から今日にかけてモリモリと書評を書いてたのはこれが原因。
おこづかいかせげるといいなあ!
ちなみにこのスクリプトでは基本のリンク先を urn:isbn:ISBNコード というURN形式のリンクにしてありますが、Firefoxでこれを読み込むにはURN Supportなどを使う必要があります。w3mの場合は近藤氏によるリダイレクタを使うといいでしょう。IEとOperaはシラネ。
拡張機能勉強会の時に焚き付けられた、Text Shadowのコード(textshadow.js)を教材にして拡張機能開発のノウハウを解説していくシリーズ。
JavaScriptでは、普通に宣言した変数や関数はグローバルな物になる。
var name = 'hoge';
function getItem(aKey) {
return array[aKey];
}
だから、Firefoxで最初から定義されてるグローバル変数や関数と同じ名前の変数や関数を定義してしまうと、エラーが起こるし、最悪の場合はFirefoxが動かなくなってしまう。
// ステータスバーだけ表示した
// 新規ウィンドウを開く関数「loadURI」を定義。
function loadURI(aURI) {
window.open(aURI, 'mytarget', 'status');
}
// でも、これをやってしまうと、事あるごとに
// 新しいウィンドウが開かれるようになってしまう。
// なぜなら、Firefox内で既に「loadURI」という関数が
// 「ページを現在のタブで読み込む関数」として
// 定義されているから。
// 「ブラウザの一覧」のページを新しいウィンドウで開いて、
// そのウィンドウをgBrowserという変数に格納する。
gBrowser = window.open('http://piro.sakura.ne.jp/browsers-list.html');
// でも、これをやってしまうと、Firefoxがまともに
// 動かなくなる。なぜなら、Firefoxのブラウズ領域の
// 要素ノードへの参照としてgBrowserが定義されているから。
これを防ぐ手っ取り早い方法としてお勧めしたいのが、自分の拡張機能で使う変数や関数を、「自分の拡張機能専用のサービスオブジェクト」のプロパティやメソッドとして保持するようにするというやり方だ。
目が覚めたら14時でした。
勉強会本体の感想。
Firemacs作者の山本さんの話を聞いてると、以前の自分を思い出した。XPCOMにどんな機能があるのか知らなかった頃に、知ってる範囲の知識でどうにかして解決しようとあれこれ工夫を試みていた。そういう「工夫」を思い付くかどうか、というのが、もしかしたらある種の「分れ道」なのかもしれないなと思った。
marさんによるXUL preLoaderの話。
document.loadOverlay()
で動的に読み込む。……というのが、preLoaderの発想。preLoaderのような発想が僕に無かったのは、loadOverlay
というメソッドを知らなかった・存在を忘れてたからというのも大きいんだけど、それ以前に、他の拡張機能で同じ方法を使われて異なるIDを指定されてしまったらこのテクニックは破綻してしまう、ということに気づいていたからだ。僕は以前から、拡張機能を作るときは他の拡張機能となるべく衝突しないようにということに気を付けるようにしている(TBEの時はそれで散々叩かれたし)ので、preLoaderのテクニックはあまり推奨しづらい。
ところで、今ふと思ったんだけど。E4X使ったらJavaScriptの中に普通にXUL文書片を書けるから、preLoaderあんまりいらなくね?(ぉ
誕生日を祝ってもらえて、フォクすけは幸せ者ですね。僕もこれくらい愛されてみたいです。どうでもいいですが、ケーキの周りのフィルムについたクリームを舐め取っている様子をばっちり撮られてしまっていました。
Mozilla 24のための各プログラムの番宣ビデオ?の撮影があって、Shibuya.jsのビデオに僕まで出ることになってしまった、というかほとんど僕が喋ってた。幽霊部員なのに。あとで映像見てみても、ほんとキモイなーと思った。また叩かれるんだろうなあ。いやだなあ。
CNET JapanのFirefoxのコラムが更新されました。最終回です。
ライフハックのアレも最終回。当然、僕のキモ声動画も最終。今回はNewsFoxの使いかたです。でも僕はLDR使ってるんですよね……
写真とラフと(壁紙とかの)イラストを見比べて、二次元と三次元はやっぱ違うんだねえとか、立体化する人のセンスが問われるんだなあとか、そんなことを思う。昨今の美少女フィギュアの質の向上はそういう意味でとても凄まじい。
試作品に「顔が鈴カステラ」とあるけど、最終完成品の正面顔もけっこう鈴カステラな気が……
まあ総じてこれはこれでイイ。個人的には一番最後の写真が愁いを帯びてて一番好きです。
たけんさんがとりあげてる、SOI A+zilla Add on Competition。プレゼン資料の一個目を見た人は気がついたかもだけど、これは僕が作った物だったりする。資料の内容自体はこないだのでぶこんの焼き直し(GomitaさんがSoftware Design誌の特集記事用に書かれたチュートリアルをベースにしたもの)で、150ページほどをImpressのプレゼンに手作業で変換するのに丸三日かかったと書いたのはこれのことなのでした。
いやね。こないだ慶應SFCまで行ってワークショップの先生のまねごとをやらせていただきまして。その時は事情を全然知らんかったのですが、こういうことだったんですね、と。
でぶこんの時はPC持ってきてる人が少なかったからチュートリアルをチュートリアルっぽく進めてよいものかどうか迷って悲惨な結果になったけど、この時のワークショップでは、それよりずっと少ない人数で全員それなりに基礎知識のある人ばかりだったんで、でぶこんの時にやりたかったことを実行することができたと思う。一人一人PCの画面を見て回って、うまくいってないようだったらアドバイスして、みたいな。
ただ、サンプルコードとか焦って用意したから全然テストしてなくて、それをダウンロードして使ってくれてた参加者の方が「うごかねえ!」とドツボにハマりまくっていたので、でぶこんの時とは別の意味で悲惨な結果になったと言えよう。最終的に予定の時間を大幅にオーバーしてたし……
ちなみに資料の英訳はボランティアかプロか知らないけど誰か他の人がやって下さいました。僕が訳したわけではないです。
テキストシャドウを:hover, :focus, :activeのダイナミック疑似クラスに対応させた……つもり。でも試してみたら:focusは意図通り動いてくれない。何でだろう。
テキストシャドウに、userContent.css内の指定を読む機能を加えた。圧倒的多数のサイトではtext-shadowはまだまだ使われていないけれども、ユーザースタイルシートを使えば色々遊べるよ、と。
といっても全サイトで同じ色の影しか指定できない、サイトごとにいちいち影の色を指定しなきゃいけない、なんてのじゃあとてもじゃないけど使ってらんないので、userContent.css内の指定のみ、色が無指定の時はCSS3の仕様を無視して自動的にそれっぽい影の色を適用するようにしてみた。例えばh1, h2, h3, h4, h5, h6 { text-shadow: 0.2em 0.2em 0.2em; }
とかuserContent.cssに書いとけば、色んなサイトで影が付いて楽しくなるかもしれません。
ちなみに、XPCOMを使ってもuserChrome.cssやuserContent.cssから生成されたスタイルシートオブジェクトには絶対にアクセスできない。なので今回は、新規に空のドキュメントを生成し、そこにxml-stylesheet処理命令でuserContent.cssを読み込ませて、生成されたスタイルシートオブジェクトを参照する、という裏技を使っている。
Firefox Rock Festival '07のサイトに少年ナイフの名前が出ていて、一時期もてはやされたProxomitronが「少年ウェア」という謎ライセンスだったことを思い出してちょっと感慨深かった。ていうかProxomitron関係の話題で名前だけ知ってた。ギークにある意味馴染み深い名前だった「少年ナイフ」がギークに馴染み深いFirefoxとこうして同じ画面で名前を見ることになるとは、誰も想像だにしなかったに違いない。
公式サイト見てみたら、結成が1981年だそうで、僕の生まれる前からいる人達なんですね……