たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
OSC2009Tokyo/Spring会場からネットワークに繋がらない、ということで小林さんや組長や池添さんに助けてもらった。
古いUbuntuでGUIを使ってネットワークの設定を行っていた場合、今のUbuntu(8.10)では、ネットワーク設定のためのGUIを起動してもまるで設定が行えない状態になるようだ。
僕の場合、会社の無線LANの設定が /etc/network/interfaces に残っていて、これがあるせいで新しいUbuntuのネットワーク自動設定機能が全く働かなくなっていた。今まで外出先でUbuntuで無線LANを使うという事がなかったので、気付いてなかった。
auto lo iface lo inet loopback
この2行だけを残して残りを全部コメントアウトした後、システムを再起動(ログアウトしてもう一度ログイン、では駄目)したら、ネットワークの自動設定機能がちゃんと機能するようになった。
ロケール更新ついでに。
直した問題は、「www.」で始まるドメイン名をダブルクリックした時の補完結果が「http:\/\/www.〜」になってしまうせいで読み込みに失敗するというもの。これはデフォルト設定として指定していた補完ルールのミスで、変更したのも設定ファイルだけ。デフォルト設定から変更して使ってる人は、「http:\/\」となっている所を「http://」に書き換えると、問題が直ります。
で、何故この問題を見落としてしまっていたのか、なんだけれども。
この設定が影響する処理については、既にUxU用のテストを作成してあって、自動テストを走らせた時にはこの問題は発生していなかった。テストの内容自体には問題はなくて、問題はUxUの方にあった。
テキストリンク用のテストでは、UxU 0.5.3で追加した新しいヘルパーメソッドのutils.loadPrefs()
を使っていて、defaults以下にある設定ファイルを読み込んだ上でテストを行っていた。調べてみたら、これがまずかった。
この設定ファイルは元々はcontent以下に置いてあった物で、旧バージョンでは「ファイルの内容を文字列として読み込んだ後に評価して……」てな事を全部自前でやってたんだけど、Firefox 2未満のサポート打ち切りに際して、defaultsフォルダ以下にファイルを置いて読み込み処理はFirefox自身に任せるようにしたという経緯がある。
アドオンの設定ファイルはJavaScriptの関数呼び出しの形で設定が保存されている。なので旧バージョンでは、ファイルの内容を文字列として読み込んだ後、eval()
でJavaScriptとして評価して設定内容を読み込んでいた。文字列の設定値として「http:\/\/」と書かれた箇所は、無意味なエスケープになるので、この時自動的に「http://」と解釈される。なので、冒頭に書いたような問題は今まで起こっていなかった。
defaults以下に置かれたファイルをFirefox自身が読み込む時も同じような感じなのだろう、と思いこんでたんだけど、よく調べてみたらそうじゃなかった。defaults以下に置かれた設定ファイルはlibprefモジュールのprefreadという、JavaScriptパーサではない独自のパーサによって解釈されていて、よくよく見てみると、\"
、\'
、\
、\r
、\n
、\xXX
(16進数表記でのエスケープ)、\uXXXX
(Unicodeエスケープ)以外のエスケープはエスケープ文字を含んだ文字列として取得されるという事が判明した。例えば\t
はタブ文字ではなく"\t"
になるし、\/
は"\/"
になる。これは予想外だった……
で、このあたりの挙動を再現するコードをゼロから書こうとしたら死ねると思ったので、結局、prefreadをまるごとJavaScriptに移植する事にした。といってもJavaScriptの文法はCに近い(らしい)ので、コピペして少し書き換えたという感じ。
UxU自体のライセンスはGPLなんだけど、ソースコードとして入手する限り、このファイルのライセンスは元バージョンと同じMPL/GPL/LGPLとして使えるはずなので、まぁ、そんなに使い出はないと思うけど使いたい人がいたらどーぞ。
JavaScriptのコードの中で例外を投げようとしてraise new Error('message')
と書いてしまった。
raise Error.new('message')
になったらもう手遅れだと思う。
直った直った書いてたけど見落としがありましたごめんなさい。
コンテキストメニューを開くと固まる、という極端なケースの事例としてGMailでの現象を見て、他の所で起こってるらしいコンテキストメニューがらみの問題もこれ(スタイルシートに対してマッチングを行って激遅になってる)に違いない!と思い込んでしまってたんだけども、それ以外に、テキストノードが細かく分割されてる場面でも超スローになってしまうことがあることに、今朝やっと気付きました。
修正箇所を見ると分かるけど、何でか手抜きでXPath式の評価をループごとに毎回行うように書いてたせいで、表みたいにテキストが細かく分割されてる場面でXPath式の評価が無駄に何度も行われてしまい、それで時間を食ってた。式の評価を最初の1回だけにしたら、場合によっては100倍くらい速くなった。正直、document.evaluate()
の実行コストを甘く見てた。
実に恥ずかしいミスですね。
件のエントリは見たが、「バカな失敗」と「失敗するようなバカ」が混同されているような気がする
「バカな失敗をした」という事実と「こんな失敗をしてるから、他の事も含めてバカな技術者に違いない」というFUDはハッキリ区別しないとね
理屈はまあ分かるんですけどね。モヒカンな人達はそういう誤解を招きやすい言動をしてるなあ、とよく思います。
以前どこかで「中国人には礼節が無いから、儒教が生まれた。日本人は臆病だから、武士道が生まれた。西洋人は卑怯だから、騎士道が生まれた。」という感じの話を見かけた。「おあしす運動(おはよう、ありがとう、しつれいします、すみません、といった挨拶をきちんと言おうという運動)」について母は、「こういう運動をしてるって言う事自体が恥じゃないか」と言っていた。それらが本来備わっているのなら改めて殊更大事にする必要なんか無いわけで、「大事にしましょう」と言うってことは「それが足りてない、それが実現できてない」って言ってるのと同じことだ、という訳ですね。
さて、ここに「罪を<ruby><rb>悪</rb><rt class="読み">にく</rt></ruby>んで人を<ruby><rb>悪</rb><rt class="読み">にく</rt></ruby>まず」という言葉がある。広辞苑によると犯した罪は罪としてにくむべきものだが、その罪を犯した人までもにくんではならない。
ということだそうですが、なんでこんな言葉が生まれたんでしょうね。前述の話に倣うと、誰もがデフォでそういう事ができるんだったら、広辞苑に載る程長生きする言葉だとは人々の間で認識されてなかったんじゃないかと思うんですよ。
言い換えれば、少なくとも日本人は(これに対応する言葉が英語圏にもあるんだったら話は別。僕はそれを知らないので、知ってる人がいたら教えて欲しい(→調べた。慣用句で condemn the crime rather than the criminal
というのがこれに相当するらしい。っていうかひょっとしてこれが輸入された時の訳が「罪を悪んで〜」なのか?))、誰かが罪を犯したらその罪を憎むしその人の事も憎むのがデフォだって事なんじゃないかと思うんです。昭和がどうとか平成がどうとかじゃなくて、もう、何年経っても何世代経っても消えない業のような物なんじゃないかと。
だから、自分が叩かれたり、人が叩かれたりしてる時には、それは人格批判ではなく行為への批判なのだ、と考えるよりも、行為だけじゃなく人格まで責めてるんだ、と考えた方が予想としては正確さが増すんじゃないかと思うわけです。叩き手のことをよく知らないならば、なおのこと。
少なくとも僕はそう考えてるところがある。そして多くの他人もそう考えてるんじゃないかと思ってる。これが一般人の感覚というものなのではないか、と僕は仮定している。「これは人格批判じゃなくてあくまで行為への批判なんだな」と、向こうの方が勝手に察してくれるはずであるとは、僕は期待していない。そして誤解によって余計なトラブルが起こる事を恐れている。でも、なんとか改めて欲しい、間違いに気付かせたい、と思う事は度々ある。
だから自分が人の行為を咎める時には、その行為だけを咎めたい時には、「これは人格を批判してるんじゃないんですよ、行為を批判してるんですよ」という事をしつこいくらい意識して言葉を選ぶようにしてるつもり。「バカ」という、指す対象が広い否定の言葉を使う事自体を避けて、「これこれこういうケースへの配慮が足りない」のようにより具体的個別的にいていると思うし、「バカ」と書く場合があるとしても多分「バカな事」と限定して書くと思う。(そんな事ばっかりしてるから、こうして長文になるんだけど。だからtwitterやはてブのブコメのような場を僕は表現の場としては選んでいないのだと思う。)
そういう僕からすると、otsune氏やいわゆるモヒカンな人は「そこまで懇切丁寧に説明する義理はないし無駄なのでしない。誤解するなら勝手に誤解してくれ。誤解された結果トラブルが起こるというリスクは承知の上だ。」というスタンスで発言しているように見える。それ自体はその人達が選んだ道だろうから是非は問わないけど、上述の通り仮定した一般人(罪を憎んで人も憎んでしまう考え方がデフォ)の立場で考えたら、それに付き合わされるのはたまったもんじゃねえや、と思う。
昭和とか平成とか書いてあるけど、要はいつもの「モヒカン」と「ムラ社会」の衝突か。
これら(特に刺身☆ブーメランさんのエントリ)を見ていて、cho45さんがこの間書いていた話を思い出した。
「批判に耐えられないならブログ書くな」的なのがうざくて仕方ない。
何でうざいかっていうと、「ま、おれは批判に耐えられるんだぜ? かっこいいだろ?」ないし「おれは批判に耐えられないからアウトプットなんてしないぜwww 賢いだろ?www」みたいな顔が浮かぶとかだったり
モヒカンの威を借る村人。ただただプリミティブな衝動に従って破壊と略奪(ぉぃ)を繰り返すというある意味で純粋なモヒカン達に混ざって、あるいは後からコソコソ付いていって、普段自分が村の中であまり高い位置にいない事から来るストレスを破壊と略奪で発散してるしがない村民。というのをイメージした。
テキストリンク 3.0.2009021601で、inputやtextareaの中のURI文字列も処理できるようにしてみた。といっても、テキスト入力中にダブルクリックするだけで開かれるとかそんなのはウザすぎるので、あくまでURI文字列選択中にコンテキストメニューを開いた時だけの機能だけど。ブログとか日記とか書いてる途中でふと確認したくなった時、なんかに使えるんじゃないかと思う。
DOM2 RangeのcompareBoundaryPointsをnsIDOMNSEditableElementの編集領域の中のRange同士の間で使うと、何故だかNS_ERROR_DOM_WRONG_DOCUMENT_ERR例外が発生してしまったので、仕方ないからnsIDOMNSRangeのcomparePointで解決するようにしてみた。独自仕様な上にどうにも動作が怪しい感じなので、できればcompareBoundaryPointsだけで済ませたかったんだけど、なかなかうまくいかない。
GMailでコンテキストメニューが固まる問題は、本文だけじゃなくヘッダ領域の中のstyle要素の内容までURI文字列の検索対象にしてしまってたせいだった(全面リライトにあたって、DOM3 XPathで代用できそうな所を片っ端からDOM3 XPathに置き換えたんだけど、XPath式の評価結果が書き直し前と違ってたことに気付いてなかった)。スタイル宣言が全部URI文字列らしき物として検出されてしまって、それで無限ではないんだけど数千回のループが発生して、途中で処理を打ち切られてたという感じ。XPath式を工夫してbodyの中だけを検索対象にするようにしたら直った。
この辺の修正に際してもまたテストを書き足した。こんな感じでテストが充実してくれば、多分、将来的にはregressionは減る方向に向かうと思うんだけど……
14日、仕事でこっちに来ていたShunsaku君ともう一人大学時代の同期の人の飲み会に混ぜて貰ったんだけど、それに参加するために電車に乗って移動している時、女子高生らしき子達が僕のすぐ隣でカバンからチョコレートらしき物をチラつかせながらキャッキャしてた。友チョコとかそういうのっぽい感じだったんだけど。横目で見てて「うわー、現実にあるんやこんな光景! 都市伝説ちゃうかったんや!」と思ってしまった。でもよく考えたら寝屋校漫研の時に先輩達(闇チョコフォンデュの面子)が冗談ノリでくれたこともあったんだよなあ。なんでこんなに「別世界」感があるのか……
コミティア会場で本を買ったオマケにチョコレートをくれた所が2箇所。あと先週実家に帰った時に母が早めにくれたやつ。そんだけ。
目当てはケ・セラ・セ・ラビットとあと1件くらいで、昼過ぎにノコノコ行ったんだけど、結局会場全部を舐めるように見て1万円以上放出してしまった。最後、手持ちの現金を使い果たしてしまって、欲しかったのに買えなかった本が1冊残ってしまったのが心残りだ。
雰囲気を見て、もえじら組でも出れそうだったら出てみようかなと思ってた(でもよく考えたら(よく考えなくても)inugamixさん原作キャラの二次創作なので参加既定を満たしていない)んだけど、やっぱ無理そうだ。多分ここに混ざってもすごい場違いな感じだろう。それに、壁の方に各漫画誌編集部の出張持ち込みコーナーなんかがあったりするし……ここは「自分だけの作品」を作りたいソウルがある熱心な人達が集まる神聖な場なのだろう。僕みたいな年間同人ポイントが1未満の人間は来ちゃいけない。そんな気がした。
930SH(黒)にした。デザイン的には830CAの方が気に入ってたんだけど、うっかり安かったから買ってしまった4GBのMicroSDが使えないのが困るなあと思ったので、他の現行機種の中で一番見た目的に許せる範囲だったこれを選んだ。
東芝じゃないのでくーまんとはさようならです。あああくーまん……
帰ってきてから気付いた困った事。
画面そのものは回転しないんだけど、加速度センサが付いてるのか、本体を横に向けたら勝手にワンセグTVがフル画面になったりして、これはこれで面白い。
最初は秋葉原ヨドバシで手続きしようと思ってたんだけど、基本料金プランをホワイトプランじゃなくてWホワイトに変えないと駄目って言われたので、ゴーゴーカレーでロースカツカレー食べてすごすご帰った。その後家の近所のソフトバンクのショップに行ってみたら在庫があったのでそこで手続きした。