Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

Page 1/239: 1 2 3 4 5 6 7 8 9 »

FirefoxとThunderbirdの導入案件で使ってるソフトウェアを公開し(て)た - Nov 09, 2012

2年前のブラウザー勉強会で、FirefoxやThunderbirdの一括導入と企業での導入事例についての話をやったけど、その時に「こういう物を使ってます」と話だけ出した「メタインストーラ(FirefoxやThunderbirdのインストーラをキックしてサイレントインストールした上で、アドオンも一緒にインストールする物。設定を作り込んだ状態のFirefoxやThunderbirdを一括導入するために使う)」だけど、実はちょっと前からGitHubでひっそりと公開してた。導入案件の相談があってもリソース配分の関係で受けられないという事が何度かあったので、ツール公開しとくから自分でできる人は自分でやってねという話です。

が、過去の案件で要望が上がる度に場当たり的に機能追加や修正を繰り返してきて、それなのに目の前の導入案件をこなす事に手一杯でドキュメントが整備できてなかったせいで、公開したはいいけど結局弊社(というか僕)でないと使えない状態だった。ドキュメントを書こうと思っても、設定の仕方とかが煩雑ですっきり解説できないものだから、ドキュメント整備もなかなか進んでなかった。

それがこのところ、Mozilla関係の作業が少し落ち着いてて時間を確保しやすかったので、じゃあやるか!と頑張って、ドキュメント整備と設定方法の改善をちまちま進めてた(解説しにくかったのは実装が宜しくなかったからで、実装がすっきりしていれば解説もしやすいわけで、ドキュメントを書く事が契機となって実装が改善されるというのはよくある話なのです)。その締めくくりとして、簡単なチュートリアル込みの使い方解説エントリを会社のブログで公開した。アドオンを同梱して導入するだけのインストーラなら多分そんなに迷わないで作れるんじゃないかなと思う。

このFx Meta Installerは、FirefoxのWindows版インストーラと同じくNSISスクリプトで開発してるんだけど、思い返してみれば、僕のNSISとの付き合いはPortable Firefox(Firefox for Androidではなく、USBメモリで実行ファイルとプロファイルを持ち運ぶアレ)からだった。NSISはインストーラを作るための物なんだけど、使いよう次第ではPortable Firefoxみたいなこと(プロファイルをテンポラリフォルダにコピーして、Firefoxを起動して、Firefoxが終了したらプロファイルをUSBメモリに書き戻す)もできる。ずーっと前にMozilla Japanが秋葉原と渋谷でFirefoxの入ったCD-ROMを配るというプロモーションをやった事があったけど、あの時配ってたCDの「ディスクを入れたらautorunでFirefoxがお試し用に起動する」っていうやつは、実は、Portable Firefoxを改造したか参考にしたかして僕が作ってたのですよね。それがなかったら今のFx Meta Installerはなかったかもしれないと思うと、ちょっと感慨深い。

あと、Fx Meta Installerの設定項目だったり機能だったりを見てると、ああこんな事もあったなあ……と過去の案件の事を色々思い出させられる。Linuxでもビルドできるようにしたのは、普段使ってるUbuntu入りのLet's noteだけ持ってお客さんの所で動作を試して直してビルドしてまた試して……というのをやるためだったし、解説エントリでは触れてないけど、メタインストーラのバイナリに電子署名するための設定を見てると、グローバルサインで証明書を買う手続きをしたなあという事を思い出すし。いまFx Meta Installerに実装されてる機能は、お客さんの要望だったり状況だったりの必要に迫られて追加したものがほとんどなので、ある意味でこいつは僕の仕事(の1つ)の履歴そのものとも言えるのかもしれない。

FirefoxやThunderbirdを必ずクラッシュさせるコード - Mar 02, 2012

クラッシュレポーターの挙動を調べたい時に。以下のコードを改行無しでエラーコンソールあたりで実行すれば一発で落ちる。

Components.utils.import('resource://gre/modules/ctypes.jsm');
const gNspr4 = ctypes.open(ctypes.libraryName('nspr4'));
const PR_Free = gNspr4.declare(
        'PR_Free',
        ctypes.default_abi,
        ctypes.void_t,
        ctypes.voidptr_t
      );
var ptr = new ctypes.voidptr_t(0123);
PR_Free(ptr);

要は、js-ctypesを使って適当なアドレスのメモリを解放してメモリ破壊を引き起こしてみるということで。

破壊するアドレスによってはひょっとしたらどえらいことになるかもしれないので、試す時は自己責任でね!


なんか誤解してる人がいるかもなので追記しておく。

このコードはjs-ctypes(JavaScriptからC製のライブラリを呼び出す機能)を使っていて、NSPRというFirefoxやThunderbirdのかなり根っこの方のライブラリに含まれてるメモリ操作系の関数を呼び出して意図的にメモリ破壊を引き起こすという例です。クラッシュして欲しくないコードでクラッシュしてしまうという脆弱性系の話ではありません。

でもって、js-ctypesはChrome権限が無いと使えません。言い換えると、Chrome権限を取られてしまうような脆弱性を突かれない限りこのようなコードはWeb上にある普通のスクリプトからは実行できないし、Chrome権限を取られてる(アドオンの一部として実行されている)状況ではクラッシュどころかパスワードマネージャに入ってるパスワードのぶっこぬきでも何でもやり放題だから、むしろその事(特権を取られてるという事)自体の方が問題です。

仕事でFirefoxの導入案件をやる時に、クラッシュレポーターを無効化してくれと言われて無効化したつもりだけど、ほんとに無効化されてるかどうか確認したかった、でも最近のFirefoxはわりかし安定してるからそう簡単にはクラッシュしてくれない、ハードウェアアクセラレーション系の機能あたりを使ってクラッシュするのを気長に待つわけにもいかない、ということでこういうコードを使って手っ取り早くクラッシュさせてみた……というだけの話ですよ。

ThunderbirdのLDAP属性のマッピングで嵌った - Apr 14, 2010

Thunderbirdには、LDAPでディレクトリサーバに問い合わせて、その結果をアドレス帳として表示したり宛先入力時のオートコンプリートに使ったりする機能がある。その際に、ディレクトリサーバないに格納されてる情報をアドレス帳の「名前」とか「(プライベートの)住所」とかにどのように割り当てるかを決めないといけない。Thunderbirdの初期設定では一般的なマッピングの指定が既になされているんだけれども、特殊な運用をしてる場合には、その情報がアドレス帳で表示されないということになる。

で、そのマッピングは隠し設定で変更できるんだけど、マッピングを変更すると検索結果が全く表示されなくなるという問題にぶち当たってしまった。

結論から言うと、これは複数の項目で同じLDAP属性を参照しているせいだった。

user_pref("ldap_2.servers.myldap.attrmap.HomeCity", "l");

こんな風に書くと、もうそれだけで動かなくなる。何故かというと、「l(小文字のL)」というLDAP属性はThunderbirdの既定のマッピングにおいてWorkCity(ldap_2.servers.default.attrmap.WorkCity)で参照されているから。この時検索結果が表示されなくなる問題を回避するためには、ldap_2.servers.myldap.attrmap.WorkCityでマッピングするLDAP属性のリストから「l」を外すか、ldap_2.servers.myldap.attrmap.HomeCityで「l」を参照するのをやめるかする必要がある。他の項目についても同じ事が言える。

まとめ:LDAP属性のマッピングを変更する時は既定のマッピングとかち合わないように気をつけましょう。

POPからThunderbird + Gmail + IMAPに乗り換えたい - Nov 18, 2009

今まで「IMAPとはサーバ上だけにメールを置いておく物なのだ」と思い込んでたので、POPから移行するのに少し抵抗があったんだけども、そうじゃなくてIMAPはPOPを包含するものでありPOP的な運用もできるのだと知って、それならいっちょ本気出して移行してみるかなと思って移行してみた。

会社マシンのThunderbirdでメールに付けたタグをどうにかして自宅のマシンからも利用できるようにしたい、という事を前々から思っていた。というのも、自宅ではプライベートのアドレスに来たメールをGmail経由でBecky! 2で受信(SPAMフィルタ代わり)して仕事メールは基本的に閲覧のみ、会社ではプライベートのアドレスに来たメールを仕事用アドレス宛に転送してThunderbirdで利用してたんだけれども、Thunderbirdを使い始めてみるとタグが便利すぎて(Tag Dialog万歳)、アドオンのバグ報告を受信したらとりあえず「未処理」「bug」のタグを付けて、処理したら「未処理」タグだけ外す、というやり方でバグを管理するような運用が染み着いてしまいまして。気がついたら、自宅のBecky! 2ではどのメールが未処理なのかさっぱり分からなくなってしまったんですわ。

まあタグで運用しなくてもフォルダ分けでもいいかなって思うんだけど、それでもとにかく家と出先とで同じフォルダ構成でメールが見えてくれないと困るわけで。じゃあIMAPだよねってなるけど、でもオフラインでメールが見れないのはイザって時に困るわけで。

やりたいのは、家PC・会社PC・Gmailの3箇所で同じデータを同期させるという運用。それぞれにメールの本文が全部ちゃんとあって、1箇所でメールを消したらそれが他の2箇所でもちゃんと反映されて、という感じにしたかった。一般的なPOPの使い方のように「受信したらサーバからはすぐ消す」というのはするつもりはない(POPの時も2箇所で受信させてたし)。

ThunderbirdでGmailをIMAPで使うための準備

まずはアカウントウィザードでGmailのIMAP用アカウントを作成する。

  • Thunderbirdのアカウントウィザードには「Gmail」という選択肢があるけど、これを使うとPOPアクセスの方のアカウントができてしまうので、普通のメールアカウントを作成して種類を「IMAP」にする。
  • 当然だけどGmail側の設定でIMAPの利用を許可しておく必要がある。

アカウントができたらGmail用に設定を変更しておく。

  • アカウント設定の「コピーと特別なフォルダ」で、「送信済みトレイ」と「下書き」をGmailのフォルダを使うように設定する。そうしないと、ルート直下と[Gmail]以下の2箇所に似たようなフォルダができて混乱の元になる。
  • Thunderbirdの迷惑メールフィルタも一応有効にしておいて、迷惑メールと判断された受信メッセージは[Gmail]以下の「迷惑メール」に移動するようにする。
  • [Gmail]以下の「ゴミ箱」をごみ箱フォルダとして使うように設定する。これはabout:configを使わないといけない。GmailのIMAPアカウントのサーバの設定群に対して、新規の文字列型設定でmail.server.server*.trash_folder_nameを追加し、値を[Gmail]/ゴミ箱に設定する。

新規にGmail IMAP接続用のアカウントを作るのなら、Gmail IMAP Account Setupを使った方が楽。これをインストールすると、アカウント作成のウィザードにGmailのIMAP接続用の項目が加わる。すでに手作業でアカウントを作ってしまった後では役に立たないので、早とちりして自分でアカウントを作ってしまった僕のような人はご愁傷様です。

あと、IMAPでの運用に限らないけど、Gmailっぽいスレッドフロート式の使い方をするためには以下の設定もしておくといい。

  • about:configでmailnews.thread_pane_column_unthreadsfalseにする。この変更を行っておかないと、スレッド表示とソートを併用できない。
  • ThreadBubbleをインストールする。入れておくと、一番新しくレスが付いたスレッドが、受信日時の降順ソートで上に来るようになる。

Gmailでまともにメールの整理をしてなかった人は、これを機に整理するようにしてみましょう(僕のことです)。

  • Gmailのラベル=Thunderbirdのフォルダ。Gmail側ではメールの整理にラベルを使うようにする。
  • Gmailのラベル名に半角スラッシュを入れる→Thunderbirdではサブフォルダになる。例えば「Mozilla/Firefox」と「Mozilla/Thunderbird」という2つのラベルを作っておくと、Thunderbirdからは「Mozillaというフォルダがあって、その中にFirefoxとThunderbirdというサブフォルダがある」ように見える。

というあたりを踏まえてラベルをいっぱい作っておく。

Thunderbird+IMAPで前述したような運用をするための設定

  • 新着メールをチェックする時、受信トレイだけでなくすべてのフォルダをチェック対象にする。about:configでmail.check_all_imap_folders_for_newを探して値をtrueにする。こうすると、フォルダごとのプロパティでそのフォルダを新着チェック対象に設定する手間が省ける。
  • アカウント設定の「オフラインとディスク領域」で、すべてのフォルダに対してオフライン利用のチェックを入れる。今後作成するフォルダもオフライン利用可能にしておく。
  • Sync On Arrivalをインストールする。about:configでextensions.checkCompatibilityfalseにしておかないとインストールできないので注意が必要。

この3つを組み合わせることで、

  • Gmail側のフィルタでそれぞれのフォルダに振り分けられたメールも新着チェックの対象になる。(POPの時は新着メールをダウンロードしてから各フォルダに振り分ける形だったのが、振り分けが終わった状態で受信される形になる。)
  • 新着チェックの時、メールの本文まで含めて自動的にダウンロードされる。(POPのように、オフラインでもメールを読めるようになる。)

という運用が可能になる。

注意点

  • 上記のような動作になるのは新着メールの受信時だけなので、すでにある全てのメールの本文をダウンロードさせるために、1回だけ「ファイル」→「オフライン」→「オフライン作業」でオフラインモードに切り替えてやる必要がある(ダウンロードが完了したらオンラインモードに戻すのを忘れずに!)。
  • GmailのUI上で選択とか表示とかをしようとすると挙動がおかしくなる変なメール(変なSPAMとか壊れたメールとか?)がある時は、チェックを付けて「削除」しておく。こうしないと、そのメールを含むフォルダをThunderbirdで受信する時にSome messages could not be FETCHed (Failure).というエラーが出る。
  • 手元にすでにあるメールボックスの中身をGmailにアップロードして一元管理しよう!と思っても複数フォルダをまとめてうpとかしたら駄目っぽい。アップロード中に「アクセスが多すぎます」みたいなエラーが出てしばらく繋がらなくなる。Gmailをストレージ代わりに使うツールとかを締め出すための制限か? しょうがないので、面倒だけどちょっとずつアップロードするしかないようだ。
  • フォルダの階層の深さには制限がある……というより、パスの長さに制限がある。Gmail上のラベルの文字数が最大で40文字までのようなので、ネストの深いフォルダはそのままではGmail上に持っていけない。短い名前に変更する必要がある。

Mozilla Add-onsのアドオン開発者向けUIがパワーアップしてた - Mar 28, 2009

テキストリンクをThunderbirdにもインストールできるようにしたのにAMOのサイト上ではFirefox専用のままになってしまう件についてボヤいたところ、くでんさんに「Bugzillaで言えばいいじゃない」的な指摘を受けたので、確かにその通りだと思って、念のため新しくバグ報告する前に「target」あたりのキーワードで検索してみたら、Adding new compatible application fails when it's the first oneというバグが出てきて、でもFIXEDになってて「おっかしーなー」と思いながら最初に添付されてたスクリーンショットを見てみたら「Add New Application」と書かれたボタンがあって「なんじゃこりゃあああああこんなん見たこと無いぞおおおお?!」と思って、バグ報告しようとした時に「対象アプリケーション」の英語版表記を知りたくて英語ロケールに切り替えた状態になってたままで開発者用ページのトップに移動したら「新しいUIを試してみよう」みたいな今まで見たことない告知が一番上に表示されてて、そこから辿っていったら今テスト中らしい新UIにアクセスできて(新UIはまだ日本語じゃ利用できないようで、日本語に切り替えてアクセスしようとしたら見れなかった)、それを使うと手動で対象アプリケーションを追加できた。

あと、今までは一度アップロードしたバージョンは、ファイルを削除することはできてもその「バージョン」自体を無かったことにはできなかったんだけど、新UIの方ではそういうファイルが無い状態になったバージョンを「削除」する機能も加わってた。やっときたか……ていうかなんで今までできなかったんだ?

Thunderbird上でテキストリンクを使えるようにしたよ - Mar 27, 2009

テキストリンク バージョン3.1以降で、Thunderbirdでも利用できるようにした。

プレーンテキスト形式のメールでは、Thunderbird自体のURI自動認識の処理を置き換える形で動作する。 Thunderbird上での動作の様子はこんな感じ。 Thunderbird本体のURIの認識部分は結構いいかげんなので、地の文とURIが連続してるとたまに酷い事になる。テキストリンク導入後は、Thunderbird自身による抽出結果を一旦全部白紙に戻して、もう一度URIの認識を自力で行うようになる。

同じような事をするアドオンが他にもありそう(っていうかFirefoxではLinkificationがそうだ)だけど、自分では見つけられなかったので……

ところで、AMOの方にもアップロードしたんだけど、過去にFirefox専用として登録したアドオンは後からThunderbirdにも対応した後も、Firefox専用アドオンとして扱われてしまって、Thunderbird Add-onsの方からは辿る事ができないようだ。これってどうにかならんのだろうか。

Thunderbirdのパッチが2つとも蹴られた - Feb 23, 2009

Shredderに取り込まれたパッチだけど、2つとも、「Thunderbird 2.0.0.xには入れらんないよ」と蹴られてしまった。「そんなに重要じゃないから」だそうです。ちょっと待ってよ、日本語環境じゃどっちもめっさ重要やん。そしてThunderbirdはレガシーなメールソフトが必要とされ続けてる日本でこそシェアの伸びが期待できるわけじゃないすか。それなのに。

Firefoxでは中野さんの頑張りのおかげかマーケティングの都合なのか2.0.0.x系のセキュリティアップデートでも日本語環境特有の問題の修正を入れてもらえてたそうだけど、人もいないしMozilla内部じゃ注目度も低いThunderbirdでは絶望的ですかね……

2つ目のパッチが取り込まれたよー - Jan 16, 2009

前のエントリに追記した通り、HTMLメールのデフォルトのフォントに日本語の名前のフォントを使えない問題で書いたパッチが採用されたんだけど、それに続いて設定ダイアログを開いた時に前回選んだフォントが選択されない問題のパッチも採用された。(ただしどっちもShredderの話で、Thunderbird 2.0.0.xに入れてもらうにはまだかかりそう。)

今までずっとアウトローな感じで野良パッチを垂れ流してた状態だったけど、こうしてちゃんとアップストリームに還元できるようになると、嬉しいものだなと思いました。

MozStorageを使う時にメモリリークを防いだりオーバーヘッドを減らしたり - Jan 09, 2009

mozIStorageStatement.finalize() メモ - 1/4ガロン

うっ。僕の知識は古かった。Firefox 3 Hacksで、createStatement()で作ったステートメントは使い終わったらstatement.reset()、と書いてましたが、statement.finalize()が正解だったようです。

が、一律にこう置き換えるとよい、というわけでもないのがややこしい所です。mozIStorageStatementのfinalizeメソッドはどうやらFirefox 3.0.x(Gecko 1.9)で導入された物のようで、Gecko 1.8系では存在しません。なのでメソッドを呼ぶ前に存在確認をしておかないといけない。Firefox 2なんてもうサポート終了してんじゃん!と思うかもですが、Thunderbirdはまだ2.0.0.xが現役なのでもうしばらくは気をつけないといけないんですハイ。

ところで、僕はずっと誤解してしまってたんですが、ステートメントはstatement.reset()でリセットすると、バインドするパラメータを変えて何度も使い回せるんですね。createStatement()のオーバーヘッドがどのくらいなのかよく分からないのでアレなんですが、SQL文が変わらない時はキャッシュしたステートメントを使い回すようにするという形で、高速化を図れるでしょうか。XUL/Migemoに早速活かしてみたいと思います。

ThunderbirdでHTMLメールの初期状態のフォントに日本語の名前のフォントを指定しても期待通りに動かない件 - Jan 08, 2009

別に特殊な文字なんか使ってないのに、メールを送信しようとすると「変な文字が入ってるからISO-2022-JPじゃ送れないよ! UTF-8にする?」みたいな確認が出る、という問い合わせを受けて調査をしてたら、原因は表題の箇所にあった。

「MS P明朝」みたいに非ASCIIな文字を名前に含むフォントを使おうとすると、フォント名自体が文字化けしてしまって、その化けた文字がISO-2022-JPの範囲外なので上記の確認が表示されてしまう、というのが事の真相だった。

で、検索してみたらMozilla Japanのナレッジベースが引っかかったんだけど……

Mozilla Japan - Thunderbird サポート - ナレッジベース - HTML 形式のメッセージを作成中にフォントを変更できない

日本では HTML 形式のメッセージはあまり好まれませんので、シンプルなテキスト形式で作成していただくという方法もあります。

ちょwwwwwwwそりゃないよwwwwwwwwwwww

ナレッジベースからリンクされてたバグはEditorコンポーネント扱いになってたんだけど、自分が特定した限りでは原因箇所はThunderbird固有のフロントエンド部分だったので、分かりやすいようにと思って新しくバグを立てた。

Bug 472621 – Thunderbird fails to use some fonts for the default font of HTML messages, if the font has non-ASCII name.

パッチを見ての通り、修正点自体はほんとに些細です。なのに何年も見過ごされてたっていうのが、なんだかなぁ……

1月13日追記。池添さんに教えてもらいながらレビュー依頼したりとかなんとか。checkin-neededキーワードが付いて、どうやらパッチ採用してもらえそうな感じ? そして関連する別のバグにもパッチを書いてみた。

1月15日追記。Trunkにチェックインされたよ! これで僕もThunderbirdコントリビュータ!(←クレジット入れ忘れてるのできっと誰にも知られないまま)

2月23日追記。重要なバグじゃないからパッチは2.0.0.xには入れないと言われてしまいました。重要じゃないのか……最初から付いてる機能が最低限すらまともに働いてない事がそんなに些細な問題ですか……。

Page 1/239: 1 2 3 4 5 6 7 8 9 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード