Home > Latest topics

Latest topics 近況報告

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

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

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

Page 40/248: « 36 37 38 39 40 41 42 43 44 »

Split Browser開発のよもやま話(8):ポップアップボタンの実装 - Feb 02, 2007

最初のリリース前の作り込みの話の続き。最終段階、ブラウズ領域の上下左右のポップアップボタンの実装について。このエントリは、XULにおける要素の重ね合わせ表示の方法に関する話が色々含まれています。多分。

実は当初は、こんな機能を付けるつもりは無かった。Split Browserのコンセプト自体が半分冗談みたいなものだったから、そこまで深く考えてなかったし。

ただ、実際に基本的な機能が揃って形になってくると、コンテキストメニューから「ブラウザを分割」を選んでさらにサブメニューから上下左右を選択する、という操作がだんだん鬱陶しくなってきた。と同時に、これをどうにかすることができれば使い勝手の面でブレイクスルーになるのではないか、という事も漠然と思うようになってきた。その最も安直な解決策として思い付いたのが、分割可能な領域の端にポインタが近付いたら勝手にボタンを表示して、それをクリックしたらその方向にそのブラウザを分割する、というものだったワケです。

ただ、思い付いたはいいものの、どうやって実装するかでだいぶあっちに行ったりこっちに行ったりウロウロしてた。

続きを表示する ...

Split Browser開発のよもやま話(7):状態の保存と復元 - Jan 31, 2007

作り込みのフェーズの続きですよ。だいぶ間が空いてしまったけど。

ブラウザの分割の状態を保存する、と一口に言っても、保存するべき内容は2つのレイヤに分けることができる。

  1. それぞれの分割されたブラウザの履歴の状態
  2. どの方向にどれだけ分割されているか、という状態

1の情報の保存と復元の処理は、nsISHistoryの状態の保存と復元が鍵になる。これはFirefox 2のセッション保存機能を実現しているnsSessionStore.jsの中身を見れば理解できるだろう。要約すると、処理の流れは以下のようになる。

  1. browser要素のsessionHistoryプロパティ(nsISHistoryのインスタンス)のgetEntryAtIndex()メソッドで、個々のヒストリエントリ(「戻る」「進む」で辿れる個々の履歴)を取得する。
  2. 個々のエントリのオブジェクト(nsISHEntry/nsIHistoryEntryのインスタンス)の、URIやタイトル、キャッシュのキーなどの情報を取得する。
  3. 取得した情報を何らかの形で保存する。
  4. Firefoxを再起動する。
  5. 保存されていた情報を読み込む。
  6. 保存されていた情報から、同じ情報を持ったnsISHEntryのインスタンスを生成する。
  7. browser要素のsessionHistoryプロパティにnsISHistoryInternalインターフェースでアクセスして、addEntry()メソッドでヒストリエントリとして追加する。

tabbrowser要素に対しては、これをタブの数だけ繰り返せばいい。

続きを表示する ...

Korean Locale - Jan 31, 2007

韓国ではActiveXを使えないブラウザは全然使われてないらしいのにもかかわらず、Split BrowserのKorean Language Packを作って送ってきてくれるという奇特な人がいた。박찬규(sushizang)さん、頑張りすぎです。

ところでKorean Localeって日本語にする時どう表記するべきか悩みますね。北の楽園もとい朝鮮民主主義人民共和国でも使われてる言語だから「韓国語」って言い切っちゃうのも何か変だし、かといってハングルってのはひらがなやカタカナと同じく文字の種類でしかないし。考えるのがめんどいからこのエントリでは「Korean」にしちゃいましたよ。

MozUnitで単体テスト - Jan 22, 2007

MozLabに含まれてる単体テストツールのMozUnitの使いかたが分からない、っていうか真面目にプログラミング勉強したことないから単体テストっていうのがどういう物なのかすらわかってない。説明が全然ないし、普通に他のテスト用のツールを使い慣れた人でないと使えないとかそういう物なのだろうか?

とりあえず試しに動かしてみたけど、何が嬉しいのかいまいち分からない。隠し設定使えば普通にJSコンソールにエラーがリアルタイムで表示されるし、エラー表示だけじゃどこがいけないのか分からないとかいっても結局の所JSデバッガで一行ずつ見ていかないと分からない所だってあるし……自動制御で動かすのも、userChrome.jsとかで自分でスクリプト書いてやるのとの違いが分からない。特に、ブラウザの読み込みが完了したタイミングでのテストとか。

日曜プログラマもどきみたいなのが手を出していい物じゃあないんじゃないのか、これは。

追記。MozUnitのソースコード見てああでもないこうでもないと頭の中で検証してやっと使い方が理解できた。

動画で紹介されてるのは非同期処理の例なんだけど、これで例えばブラウザの読み込みを待ってからテストを実行するとかそういうのをやろうとすると、全然うまくいかない。

こういう場合はコールバック関数とかイベントリスナとかを使って、テストしたい状態になるのを待ってからテストしてやらなきゃいかんのだけど、その方法が全然分からなかった。MozUnitのページには、何やらオプションを指定すると非同期でない(変な日本語だ……)テストができるとか書いてあるんだけど、英語だし略語と技術的専門用語との区別がつかんしで、ちんぷんかんぷんだった。

結論から言うと、async型のテストを作る場合は「setUp」メソッドに渡されるコールバック関数を使うというのが鍵だった。このコールバック関数を実行しないと、処理が一歩も進まない。

続きを表示する ...

Split Browser開発のよもやま話(6):分割されたブラウザの作り込み - Jan 21, 2007

1日目でとりあえず必要最低限の機能は揃ったので、2日目は作り込みのフェーズに入った。

最初の方で作った分割後の領域用のsubbrowserウィジェットは、ブラウザとしてまともな機能が全然無い状態だった。「戻る」や「進む」などのボタンは一応あったけど履歴が何もないときでも常時押せる状態だったし、faviconもページのタイトルも何も表示されないような物。これではさすがに話にならない。

subbrowserの中に何を入れるかなんだけど、今後のことはともかくとして、最初に公開するバージョンでは、「戻る」「進む」「更新」「中止」の4つのボタンと「ロケーションバー」+「移動」ボタン、「Webサイトのアイコン(favicon)」、読み込み状況を示す「プログレスバー」、それから前のエントリでもチラッと出てきたけど「閉じる」ボタン。これだけ設けておくことにした。

ただ、これだけの要素をあの狭いスペースにそのまま置くとだいぶアレなことになるので、Safariを参考に、「更新」と「中止」のボタン、それから「プログレスバー」と「ロケーションバー」はそれぞれ一つにまとめたんだけど。前者はCSSでの指定、後者はXULのスタックによって実現できた。

続きを表示する ...

Split Browser開発のよもやま話(5):分割されたブラウザの削除 - Jan 20, 2007

いつまで続くんだこの話。やっと開発一日目最後のところだよ。コード書くのは手っ取り早いけど文章書くのってだりい。ドキュメント整備が遅れるのは世の常ですね。

ええと。とりあえず「分割」する、ブラウザをどんどん増やす方向については前回までのところでできたんで、次は追加したブラウザを削除する方向の処理の話です。

例として、「一回右に分割して、さらにその分割されたブラウザを下に分割する」という場合を想定してみよう。 (配布ページのスクリーンショットみたいな状態を想定)

これはDOM操作的には、hboxにsubbrowser-containerを入れて、さらにその中のvboxにsubbrowser-containerを入れる、という感じになる。タグで書いたらこんな感じだ。


<subbrowser-container>
  <vbox>
    <hbox>
      <box anonid="wrapper">
        <tabbrowser/> <!-- 左 -->
      </box>
      <splitter/>
      <subbrowser-container>
        <vbox>
          <hbox>
            <box anonid="wrapper">
              <subbrowser/> <!-- 右上 -->
            </box>
          </hbox>
          <splitter/>
          <subbrowser-container>
            <vbox>
              <hbox>
                <box anonid="wrapper">
                  <subbrowser/> <!-- 右下 -->
                </box>
              </hbox>
            </vbox>
          </subbrowser-container>
        </vbox>
      </subbrowser-container>
    </hbox>
  </vbox>
</subbrowser-container>

右下のブラウザを削除する場合はどうするか? これは分かりやすい。subbrowserの親の親の親の親にあたるsubbrowser-container要素を削除すればOKだ。また、左の部分、つまり最初からFirefoxにあるブラウザは削除できないので、ここも問題無いといえば問題無い。

難しいのは、右上の位置にあるブラウザ……何らかの子ブラウザを抱えている、中間の階層のブラウザを削除する場合だ。

続きを表示する ...

Split Browser開発のよもやま話(4):構造が決まるまでの試行錯誤 - Jan 18, 2007

前のエントリではさらっと最終的な設計だけ示したけど、これは実は、この後の段階の作業で分かったことやなんかをフィードバックした結果たどり着いた、(少なくとも自分的には)一番洗練された状態だ。ここに至るまでにはだいぶ無駄に寄り道してた。

続きを表示する ...

Split Browser開発のよもやま話(3):縦横に「分割」するための入れ子構造 - Jan 17, 2007

Split Browserの話の続き。間が空いてしまったけど。

そもそも何故「分割」なのか? いわゆるMDIアプリケーションのように普通にブラウザをたくさん置けないのか? という疑問は結構多くの人が思うものだと思う。

これはXULの仕様上の制約による部分が大きい。XULの場合は基本的に「内容が横に並ぶボックス(hbox:horizontal box)」と「内容が縦に並ぶボックス(vbox:vertical box)」という縦横の箱の集まりとしてGUIの構造を定義するようになっていて、要素の重ね合わせというのはイレギュラーな事態だからだ。

まあ、この制限を乗り越えてボックスを好きな位置に表示するテクニックというのはいくつかあって、タブのドラッグ&ドロップの時に出てくる矢印や、フィッシング詐欺警告とかのように、Firefox本体でもそんなテクニックが使われていたりはする。しかし現状では、タブの切り替えやbrowser要素等と重なったときに色々と予期しない結果になってしまうこともあって、あくまで補助的にしか使えないかなーというのが僕の印象です。Split Browserでもこのテクニックを使っている部分があるけど、これはまた後述します。

あと、さらに余談だけど、Firefox 3だか4だかではSVGのサポートが改善されてSVGのforeignObject要素の中にインラインフレームを置けるようになるそうで、これを使うともっと自由にブラウザを表示できるようになるのかもしれない。

続きを表示する ...

Subversionによるバージョン管理はじめますた - Jan 16, 2007

Rabbitの須藤さんの協力により、このサイトで公開してる拡張機能をSubversionでバージョン管理できるようになりました。まるっとうぷったので今後は自宅でも会社でも旅行先でも支障なく開発が進むようになるかもしれませんし、そうでないかもしれません。

チェックアウトだけだったら誰でもできるんでしたっけ?

サーバの領域を貸していただいただけでなく、Subversionの使い方も教わりました。Windowsだとシェル拡張として機能するTortoiseSVNが色々便利っぽいです。Ubuntuだとさすがにシェル拡張というわけにはいかないようですが、RapidSVNを使えばGUIで操作できてイイ感じでした。Ubuntuならapt-get install rapidsvnで一発ですし。

RapidSVN用の日本語ロケールはパッケージに含まれてないみたいだけど、0.9.0用0.9.3用0.9.4用などが独自に作成されているのでこれを導入しておくとよい。rapidsvn.moを/usr/share/locale/ja/に置けば勝手に読み込んでくれる。

あとついでにXPIパッケージを作るのに使ってるバッチファイルのリポジトリなんかも作ってみました。おもっきしパスがうちの環境に依存してますが、まあ、もしよければ参考にしてください(誰ともなく)。ちなみにCygwinのchmodとzipコマンド、それからLZH形式のファイルの作成用にunlha.exeを使ってます。

Split Browser開発のよもやま話(2):小型ブラウザの制作 - Jan 13, 2007

前のエントリの続き。

「ブラウザを分割する」という機能を考えた時、構成要素として、一通りの機能を持ったブラウザのサブセット的なパーツは絶対に必要になる。

幸い、XULにはbrowser要素というインラインフレームの一種があって、このタグをいっこ書くだけで「戻る」「進む」などの機能を含めたWebブラウザの基本的な機能を持ったブラウザを簡単に作れるようになっている。


var browser = document.createElement('browser');
document.documentElement.appendChild(browser);

browser.goBack();
browser.loadURI('http://piro.sakura.ne.jp/');

ただ、実際に使うにあたっては、そういった機能を呼び出すためのツールバーボタンやメニューなどは自前でちまちま用意しないといけない。

コンテントホルダーでは、メインのブラウズ領域とコンテントホルダーの提供するブラウザとの間の仕切り(splitter要素)そのものをツールバー代わりにして、そこにボタンを配置してみた。ただ、このやり方にはいくつか問題がある。

続きを表示する ...

Page 40/248: « 36 37 38 39 40 41 42 43 44 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき