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 27/239: « 23 24 25 26 27 28 29 30 31 »

さくらのレンタルサーバで定期的なバックアップの作成 - Jun 08, 2010

以前やった事の復習で。以下のようなスクリプトを ~/backup.sh として作成した。

#!/bin/sh

BACKUP_DAYS=14
destparentdir=~/backup

# BACKUP_DAYSより古いバックアップは自動消去
find $destparentdir/ -ctime +$BACKUP_DAYS -type d -maxdepth 1 -print0 | xargs -0 rm -r -f

destdir=$destparentdir/`date +%Y-%m-%d_%H-%M-%S`
mkdir $destdir
# vオプションは、試しに実行する時用。
tar cjvf $destdir/www.tar.bz2 ~/www
tar cjvf $destdir/scripts.tar.bz2 ~/*.sh
crontab -l > $destdir/crontab

で、crontabによって定期的に実行するように設定するわけなんだけど、さくらのレンタルサーバの場合サーバコントロールパネルにcron管理用のインターフェースがあって、5個までならここから管理できるみたい。というわけで時々実行するように設定しておいた。

同じ所に置いとくんじゃバックアップとして意味が薄いので、できればそのうちローカルにscpでダウンロードするとかそういう風にしてみたい。

レンタルサーバ借りて何年目かにしてやっとここまで辿り着いたよ!(今までなんもやってなかったという事があり得ないですねハイ)

さくらのレンタルサーバ スタンダードプランでrep2 - Jun 08, 2010

いくつか前例はあるようだ。

僕の契約はスタンダードプランなんだけど、複数ユーザでFreeBSD 7のサーバを共用してる状態で、管理者権限は無い。クライアントはUbuntu 10.04。という前提で。

sshの準備

何はともあれ、まずはリモート操作のための準備を整える。

ssh ユーザ名@ドメイン名

これでsshでログインできるんだけど、いちいちパスワードを訊かれてしまう。なのでsshの公開鍵を置いておくことにした。

  1. 1回、上記の要領でSSHでログインする。
  2. mkdir .ssh
  3. chmod 700 .ssh
  4. vi .ssh/authorized_keys
  5. ローカルにある公開鍵(~/.ssh/id_rsa.pubなど)の内容を貼り付けて、ファイルを保存する。
  6. chmod 600 .ssh/authorized_keys
  7. exit

再度上記の要領でsshでログインを試みると、今度はパスワードを訊かれなくなる。scpも。

rep2設置

  1. p2拡張機能パックの「依存ライブラリ込み」のファイル一式をダウンロードする。今回は rep2ex-100227-0215.7z を使った。
  2. ファイルを展開する。
  3. cd rep2ex-100227-0215-with-deps
  4. tar zcvf rep2.tar.gz rep2 で再圧縮する。
  5. scp ~/rep2.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  6. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  7. mkdir ~/p2data でWebから見えない位置にデータディレクトリを用意する。
  8. tar zxvf rep2.tar.gz で展開する。
  9. mv rep2 www/ でWebから見える位置に移動。
  10. パーミッションを設定する。
    1. chmod 705 www/rep2
    2. cd www/rep2
    3. find . -name "*.php" -type f -print | xargs chmod 705
  11. vi conf/conf_admin.inc.php で初期設定を変更する。
    • $_conf['data_dir']などで指定しているデータディレクトリの位置を、先程作ったデータディレクトリへのパスに書き換える。 ~/p2data/ にデータディレクトリがあってrep2のindex.phpが ~/www/rep2/index.php にあるという位置関係なら、値は "../../p2data/" になる。
    • どこからでもアクセスを受け付けるようにするなら、 $_conf['secure']['auth_host'] の値を 0 にする。
  12. http://ドメイン名/rep2/index.php にアクセスしてみる。

上記の参考エントリではこれだけでいけるという風に書いてあるんだけど、僕の場合はPHPのエラーで動かなかった。magic_quotes_gpcをOffにしろとかなんとか。

さくらのレンタルサーバのサーバコントロールパネルを見てみると「PHP設定の編集」というのがあったので、ここを見てみたところ、デフォルトの設定に対して必要な設定項目だけ上書き指定できるようだったので、magic_quotes_gpc = Off と記入して保存した。その後再度rep2のページにアクセスしてみた所、今度はちゃんとユーザ登録用のフォームが表示された。

ローカルのrep2のログを引き継ぐ

実はローカルで今までrep2を動かしてたので、そのログや「お気にスレ」などのデータを引き継ぎたかった。ローカルのデータは ~/public_html/rep2/data/ に置いてた、という前提で。

  1. exit (sshでサーバに入ったままなのであれば)
  2. cd ~/public_html/rep2
  3. tar zcvf data.tar.gz data で圧縮する。
  4. scp ~/data.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  5. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  6. tar zxvf data.tar.gz で展開する。
  7. rm -r p2data
  8. mv data p2data
  9. rm p2data/p2_auth_user.php で古い認証ユーザの設定を削除する。
  10. http://ドメイン名/rep2/index.php にアクセスしてみる。

今まで見てたスレの過去ログが見えるようになっていれば成功。

余談

今回の事で、さくらのレンタルサーバにsshで入る方法を習得した。もう少し色々試したら、定期的にサーバにある内容をまとめて圧縮してバックアップということもできるようになれるかな。なれるといいな。

「幻覚ピカソ」が完結してた→また捨てるに捨てられない本が増えてしまった - Jun 05, 2010

実に綺麗に終わった……最後、泣いた。ぼろぼろ泣いた。僕は、泣いた作品は捨てるに捨てられなくなってしまうので、また本棚のスペースが足りなくなってしまう。

主人公の葉村ヒカリは、根暗で絵ばっかり描いてる高校生。あまりに絵ばっかり描いてるから、あだ名は「ピカソ」。そんなピカソはある日唐突に、大きな事故に巻き込まれてしまう。一緒に事故に巻き込まれた友人・山本千晶は死に、ピカソは生き残った。でも彼が生還したのは、千晶が死の間際に彼の生還を願い、ある事と引き替えにかりそめの命を神から与えられたからだった。ピカソの前に幽霊として急に現れた千晶は、ピカソに言う。「人助けをしなさい、それがピカソが生き続けるための代償」。かくしてピカソは唯一の特技である「絵」を使ってクラスメイト達の心の闇を描き出し、千晶と共に彼らの深層心理に飛び込んで難問を解決していく事になるのだった……

僕が古屋兎丸を知ったのはライチ光クラブだったんだけど、全然違う作風で驚いた。耽美な絵柄で悲劇や残酷劇を描くのがメインの人なのかと思ってたけど、この作品では悩み多い年頃の少年少女の青春をさわやかに描いてる。

登場するキャラクター達は皆悩みを抱えているのだけれども、悩みがこんがらがってて何が「本当の問題」なのか分からないし、どこからこの状況を打破していけばいいのか糸口すらも分からないしで、前に進めず足踏みを強いられている。ピカソと千晶がするのは、こんがらがった悩みをひとつひとつ解きほぐして、糸口を見つける事。そこから先の事、見つけた糸を手放さないでちょっとずつでも問題を解決していくのは、あくまで悩んでいた彼ら自身の仕事だ。

多くのクラスメイト達の手助けをしてきたピカソは、最後にピカソ自身の心の闇と対面させられる。彼自身意識していなかった心の闇に、いよいよ立ち向かわないといけなくなる。彼が抱える闇の正体は何なのか? その闇を取り除くとはどういう事なのか?

後味はほろ苦いけど、そこには希望がある。全3巻、見かけたら読んでみて下さい。

勉強会ってそもそも何のためにやるんだろ - Jun 03, 2010

勉強会って何なんだろう。何のためにあるんだろう。という事が、考えれば考えるほど分からなくなってくる。

僕がWeb標準に傾倒してたりMozillaの拡張機能開発に持てる限りの時間をつぎ込んだりしてた時は、そもそもそれらをテーマにしたイベント自体が存在していなかったか、存在していても僕はそれを知らなかった。知識を得たかったらソースコードや英語の原典に当たるしか無くて、ノウハウを得たかったら自分で試してみるしか無くて、同じ事に興味を持ってる人同士で集まって勉強会を開くというのは想像もできなかった。技術的な向上は、人と会ってする物という認識があまりない。

だから、僕にとってMozillaのイベント(当時で言えばMozilla Party)とかは、知識や経験を得るための場というよりも、お祭りのような意味合いの方が強かった。Shibuya.jsもそうだった。行って何を得て帰ってくるかではなくて、行く事自体が目的だった気がする。

大阪から新幹線なり夜行バスなりで時間とお金をかけて東京にまで出かけて、長くても1日とかそのくらいだけ滞在して、帰ってくる。その過程で技術的な物を手に入れる事はあまり考えてなかった気がする。それだったら、大学の必修の講義を受けた後の有り余ってる時間で調べたり試したりした方が効率いいじゃんって思ってたんじゃないかと思う。

話を聞きに行きたかったというよりも、同じ事に興味がある人と会う機会が欲しかったんだと思う。だから懇親会には必ず参加するようにしてるし、そっちの方が自分にとっては重大事という気がする。この間テスト駆動開発の勉強会の後で懇親会に出れなかったのはとても残念だった。

勉強会的な物に全く意味が無い、とは思わない。JSDeferredのコードリーディングやテスト駆動開発の実習のように、コードと向き合う時間がある物は自分にとっては得る物が多かったと思う。こういう事こそまさに、実際に集まってやらなきゃできない物なんじゃないかと思う。逆に、「前に講師が一人立って淡々とプレゼンして大勢の聴講者がそれを聞くだけ」というスタイルの物は、極論すれば別に実際に集まってやらなくたっていいんじゃないのと思う。そういうスタイルでやる意味があるのは、Shibuya.jsとかジョジョ勉強会とかのように、その場の空気を共有する事に意味がある物くらいなんじゃないかって思う。

まあ、世に多数ある一般的な「勉強会」にはほとんど参加した事がない人間だから、そう思うのかもしれないんですけど。

携帯から送られたメールの中に含まれている絵文字を判別したかった - May 31, 2010

またRailsなんですけど。

携帯端末のメールで絵文字を入力した物を送信して、Railsアプリ(いわゆる勝手サイトにあたるもの)でそれを受信したら何か処理をしたい、っていう場面でどぉぉぉーもうまくいかなくて一日悩んでた。

ActionMailer::Baseを継承した独自のクラス(Mailmanとかそういう名前で定義してる)のMailman.receive()に渡ってきたメールの内容から、絵文字を検出したかった。

class Mailman < ActionMailer::Base
  def receive(mail)
    some_operation(mail.subject)
    some_operation(mail.body)
  end

  def some_operation(string)
    # ここで絵文字を検出したい
  end
end

jpmobileとかMbMailとかが利用できるのかなと思ったんだけど、うまくいかない。DoCoMoの端末から絵文字入りのメールを送っても、絵文字のコードにマッチするはずの正規表現に全然マッチしない。

んで、もっとよく調べてみたら、勝手サイトだからなのか何なのか、DoCoMoのメールサーバからメールが送られる時点で絵文字の情報は完璧に失われるんですね絵文字は全部「〓」に変換されてしまってて、〓の文字コードは(Unicodeだと)0x3013だから、さっきのコード表から作った正規表現にはマッチするわけがない。

まあ、やりたかった事は「絵文字があったらエラーを返す」という事だったので、「〓」が有るか無いかだけ見るというソリューションでだいたい問題なかったんですけれども。(「〓」自体を送信できないという問題は残るけど、こんな文字は普段使わないからその問題は無視する)

1日まるまる無駄にしてしまった……

メールのヘッダに埋め込む用に文字列をBase64エンコードする - May 28, 2010

所用でRuby on Railsのテストケースを書いているのですが、メールを受信してあれこれする処理のテストのためのfixtureを用意するのにいちいちホントにメールを送信してそのソース文字列をコピペするとかそういう事をやってたら面倒すぎたので、Subjectとかのヘッダ部分を簡単に書き換える方法を探した所、Rubyでやるのが早いっぽい事が分かったのですが、忘れそうなのでメモしておきます。

irbを起動して

require "base64"
def encode( str )
  "=?iso-2022-jp?B?" + Base64.encode64( NKF.nkf( '-j --utf8-input', str ) ).chomp + "?="
end

を貼り付ける。後はencode("文字列")でその都度結果を見ればいい。

フリーソフト作者の自衛のための手段としてのオープンソース化と、自衛のための「寄付は受け付けないよ」 - May 16, 2010

夜フクロウというMac OS X用のメジャーなTwitterクライアントがあるんだけど、夜フクロウのアップデートに伴って、作者のポリシーによって一部の機能が削除されたというか使い方が制限されるようになったそうだ。それに対して、その機能を使っていたユーザが「なんで機能を削除したんだ」「作者の横暴だ」「作者にはユーザの要望に応える義務がある」「作者の思想を押しつけるな」といった発言を作者に対して行ったそうだ。

以前、僕はこんな事を書いた。

あなたが使いたい物がどこにもないのなら、あなたが自分で作るしかない。使いたい物があっても作る気が無いのなら、誰にも文句は言えない。作る気がなくても使いたいのなら、賃金なり労力なりのコストを負担するのが当然。あなたのためにタダで働いてくれる都合のいい奴隷は、そうそういない。いまあなたがタダで利益を得られているとしたら、他の人がその人自身のためにやったことのおすそ分けを貰っているからにすぎない。おすそ分けが少ないぞと文句を言う権利はあなたにはあるけれども、それに応じる義務は誰にも無い。なんでおすそ分けをもっとよこさないんだ、と不満を述べる姿はただ滑稽なだけだ。

この辺の僕の認識は今もずっと変わっていない。

しかし作者がどう考えていようとも、「お客様は神さまだろゴルァ!!!」と横暴な物言いをするユーザは出てくるし、「ちょっとくらい耳を傾けてくれてもいいのに」と言って結局は全面的に要求が受け入れられるまでいつまでもしつこく食い下がるユーザも出てくる。それは避けられない。

でも、そういう声に毎日のように晒されてウンザリしてやる気を削がれたり、強迫観念に囚われて精神を病んでしまったりすることは、避けられると思う。自作のソフトウェアをオープンソースなライセンスのもとで公開するのは、そのための自衛の手段として有効なんじゃないかと僕は結構本気で思ってる。

フリーソフトウェア(※ここではストールマンが言う所の自由なソフトウェアの事)やオープンソースの考え方がどういう理由で出てきたかは、この際どうでもいい。重要なのは、「嫌ならフォーク(元のプロジェクトと袂を分かち、別プロジェクトとして分岐・継続すること)してよ」と言えるようになるという点だ。

こういう声を受けてストレスを感じる人というのは、多分、責任感が強いとかマジメだとか、そういう気質を持ってるんだと思う。だからこそ、要望が寄せられると「自分がやらなきゃいけない」と感じて抱え込んでしまうんじゃないだろうか。

クローズドソースだと、まさに文字通り「自分がやらなきゃ誰もできない」ので言い訳ができない。要望に応えないことを選ぶ場合、それに対する責めに真っ正面から立ち向かわないといけない。精神力が強くないとやってらんない。

でも、オープンソースにしておけば、言い訳ができる。自分がやらなくても、他の誰かがソースコードに手を加えて実現することが、理屈の上では可能なのだから。自分一人で抱え込まなくてもよくなる。

あるいは、「どうしてもやりたいんだったら自分でやってくれ」と言うこともできる。僕はよく、そういう言い方をしてると思う。自分自身が、他の人の作った拡張機能が動かなくなったのを見よう見まねで改造して動くように修正した、という所からアドオン開発のキャリアがスタートしているから、実感を持ってそう言ってる。やる気と時間さえあれば多分できるはず、本気でそれが必要なんだったら何が何でもやるはずだ、そう思ってる。こうなると、その機能がいつまで経っても実現されないのは、「僕のせい」ではなく「自分でやろうとしないその人のせい」になる。

相手がどう思おうとどうでもいい、とにかく自分の中でそういう理屈で言い訳ができるって事が大事なんだと思う。

同じ理由で僕は、Mozilla Add-onsの寄付募集機能も使わないようにしてる。

AMOでは、作者が設定しさえすればPayPal経由で寄付を受け取れるようになっている。ちょっと前にそういう機能が付いた。機能を使ってる人もちょっとずつ増えていってるみたいだ。でも僕は今の所、寄付機能を使って寄付を募るつもりはない。

何故かというと、「金払ってるんだから言う事を聞けよ」って言われるストレスに晒されたくないからだ。「いい物にはお金を払いたい、だから寄付したいんだ」と言われたらそれはそれで嬉しい。でも、金と一緒に「そしてお金を払ったんだからこっちの言う事を聞いて欲しい」という要求がくっついてくるんだったら(「寄付」のためのシステムを「対価を払うため」に使われるんだったら)、金は受け取りたくない。受け取らない代わりに自由でいさせて欲しい。

というか、相手がそう言っていなくても多分自分の中で「金を受け取っておいて無視するのか?」という声が聞こえてくるだろうと思う。金を受け取っていなければ、「別に、応えなきゃいけない義理はないんだし」という言い訳をしやすい。相手に対してというよりも、自分自身に対して、そう言い聞かせやすくなる。

アドウェア(広告を表示する機能をくっつけて公開することで、費用を広告収入でまかなうという配布形態)にしないのもこの理由が大きい。まあ、広告を入れる余地がどこにもないという設計上の理由もあるんだけど。

確かにソースを公開しないでいれば、競合相手が登場しにくくなって、名声を独り占めできるかもしれない。確かに寄付を募れば、お金が手に入るかもしれない。でも、何かを得るためには何かを失わないといけない。自由な時間、自分自身からも追い立てられることのない気楽な状態、そういう物が代わりに失われる。それに耐えられない脆弱な神経しか持ち合わせていないので、僕は、地位名声の独り占めも寄付金も諦めることにした。僕は、気楽な方がいい。ストレスに追い立てられながらこなすのは、生きるために避けられない仕事だけでいい。生きるために必要でない余暇のことにおいてまで、ストレスに追い立てられなくてはならない道理はない。

このエントリを見て阿久根市長みたいだなと言う人もいるようだ。

阿久根市長がどういう事を言ってるのか逐一ウォッチしてる訳じゃないからちゃんと把握してないんだけど、「自分でやれ」「嫌ならフォークしろ」とかそういう言い方が該当するんだろうか。それとも、作者が暴君のように振る舞う限りは作者自身は気楽だけど、その分のストレスは善良なユーザにしわ寄せが行ってるということだろうか。

僕は、善意のソフトウェア作者に精神を病んで欲しくない。フリーソフト作者(※言うまでもないけど、ここでは自由ソフトウェアではなく無料ソフトウェアの方ね)の中に一定数いるであろう「便利な物を作ってみたから、みんなもどうぞー」という素朴な善意でソフトウェアを公開している気のいいあんちゃんが、たかり体質の人間にまとわりつかれて疲弊して潰れる姿は、見たくない。だからこのエントリは、そういう人に自衛のための手段を紹介するという点にフォーカスして書いたつもり。

たかり体質の人は、「それが当然だ」という理由を尤もらしい言葉で強い語調で語る。だから気が弱い気のいいあんちゃんはうっかり「もしかしたら本当にそうなのかな」って思ってしまうかもしれない。

もう一度引用する。

あなたが使いたい物がどこにもないのなら、あなたが自分で作るしかない。使いたい物があっても作る気が無いのなら、誰にも文句は言えない。作る気がなくても使いたいのなら、賃金なり労力なりのコストを負担するのが当然。あなたのためにタダで働いてくれる都合のいい奴隷は、そうそういない。いまあなたがタダで利益を得られているとしたら、他の人がその人自身のためにやったことのおすそ分けを貰っているからにすぎない。おすそ分けが少ないぞと文句を言う権利はあなたにはあるけれども、それに応じる義務は誰にも無い。なんでおすそ分けをもっとよこさないんだ、と不満を述べる姿はただ滑稽なだけだ。

ユーザからの要望に応えることが作者自身にとっても当たり前になってくると、そもそもなんで要望に応えなきゃいけないの?という事が分からなくなってくる。自分で自分をがんじがらめにして、「要望に応えなきゃ」というプレッシャーだけが一人歩きしてしまう。

だから、思い返してみて欲しい。何故自分がそれを始めたのか、そして、何故それを続けているのかを。あなたは、エンドユーザの奴隷になるためにソフトウェアの公開を始めたのか? 違うだろう。

タブのコンテキストメニューが正常に機能しなくなった? (The context menu on tabs doesn't appear anymore?) - May 15, 2010

Q

I'm running your Tree Style Tab extension on the last Firefox, 3.4a. I installed the Menu Editor extension and the context menu on the tabs stopped to appear. Until Firefox 3.6.3 they were working together nicely.

私はツリー型タブを最新版のFirefox(3.7a4)で使っています。Menu Editorをインストールしていると、タブのコンテキストメニューが出なくなってしまいました。Firefox 3.6では両者は正常に機能していたのですが……

A

Codes of the context menu on tabs are totally restructured on the Firefox 3.7a4. See: Bug 554991 - allow tab context menu to be modified by normal XUL overlays. So, addons including codes about context menu on tabs must be updated.

TST newer than 0.10.2010040201 has been updated for the change, but I couldn't find out a version updated for Firefox 3.7a4 from all versions of the Menu Editor.

If the problem still appear with a new version of the Menu Editor updated for Minefield 3.7a4 and later, please tell me again.

タブのコンテキストメニューの実装は、Firefox 3.7a4で大きく変わりました。Bug 554991 - allow tab context menu to be modified by normal XUL overlays を参照してください。このため、タブのコンテキストメニューを触るアドオンは更新されなくてはなりません。

ツリー型タブのバージョン0.10.2010040201以降はこの変更に対応済みですが、私はMenu Editorの公開済みのバージョン一覧からMinefield 3.7a4に対応したバージョンを見つけることはできませんでした。.

もしMenu EditorのFirefox 3.7a4対応版がリリースされた後でもまだ問題が再現するようであれば、改めてご連絡ください。

一言でいえば、「Firefox 3.7a4の新仕様にきちんと対応してないアドオンと組み合わせて何が起こっても僕の責任じゃないですよ」ってことで。

奇刊クリルタイ4.5(仮)にマンガを寄稿しました - May 14, 2010

ちょっと気が早いですが今のうちに宣伝しておきます。5月23日に開催される文学フリマにおいて発行予定の奇刊クリルタイ 4.5(仮称。多分先方のサイトで「ドルジ(仮)」と書かれている物がこれだと思われます)に、4ページほどのマンガを寄稿しました。タイトルは「とあるW3C信者の大後悔リグレット」です。……というタイトルから想像が付くかもしれませんが、いわゆるひとつのCSSコミューンな人間の一人として過去を振り返る内容となっております。 (本編より抽出:血の涙を流すPiro)

先に言い訳しておきますが、内容は実話ではなくてかなりの脚色が入ってます。作業時間的に短いページ数にまとめないといけなかったので、説明を省くために仮想敵をキャラクター化したという感じです。特定の個人に対して深い恨みを抱いているとかそういう訳ではないので、あしからず。(←説得力のない言い訳ですね)

「タブを閉じる」ボタンの働きの選択肢として「親のタブを閉じずに子孫のタブだけを閉じる」が欲しい(A new option to close only child tabs by "Close Tab" button) - May 14, 2010

Q

My small suggestion is to be able to configure the close button for a parent tab to just close its children. After it is child-less, the second click would close the tab itself. My feeling is that this would make for more fluid experience when you open up a flurry of child tabs to follow up on details and want to continue with the main "story" or "task" on the original parent tab. As it is now you have to right click and select close children, which I find a bit clunky.

私の希望は、親のタブの「タブを閉じる」ボタンをクリックした時の挙動として、子孫のタブだけを閉じるというオプションが欲しいというものです。そのタブに子供がいなくなった後、2度目のクリックはそのタブ自身を閉じるでしょう。これがどういうときに役立つかというと、何か作業をしている時に、詳細な情報を見るために子タブをいくつか開いた後で、それらを一気に閉じて元の作業に戻るという風な場合です。現状でこのような使い方をするには、タブを右クリックして「このタブの子タブをすべて閉じる」を選択しなくてはならないので、面倒です。

A

Sorry, I have no plan to implement the feature to Tree Style Tab. There are two reasons: 1) overriding of the behavior of "close tab" button is hard to implement. And, 2) I think it is not an instinctive behavior.

1) Now there are some options for "close tab" of parent tabs, but all options are designed to work just after the parent tab was correctly closed. Because, TST listens "TabClose" event which is fired after the tab is completely closed by Firefox itself. We cannot cancel the closing of the parent tab from "TabClose" event.

2) If "close tab" button closes the tab and its collapsed children, I think it is instinctive, because it is same to the default behavior of the "close tab" button, except there are collapsed (hidden) children. And if the button closes only the parent tab (keeping children open) it is also same to the Firefox default. "When the close button is clicked, only children are closed and the tab itself is still there" -- the scenario is odd a little for me.

However, you can implement the feature with other scriptable addons (FireGestures, userChrome.js, etc.) with following codes:

var parentTab = gBrowser.selectedTab;
if (TreeStyleTab.hasChildTabs(parentTab)
  // The second argument "true" means "close only children".
  TreeStyleTabService.removeTabSubtree(parentTab, true);
else
  gBrowser.removeTab(parentTab);

すみませんが、その機能をツリー型タブ本体に取り込むつもりはありません。それには2つの理由があります。1) 「タブを閉じる」ボタンの挙動を乗っ取るのは実装が大変ですし、2) その挙動は直感的とは私には思えません。

1) 現在、親のタブの「タブを閉じる」ボタンをクリックした場合の挙動にはいくつかの選択肢を設けてありますが、そのいずれも、親のタブ自体が閉じられた後に働くことを前提にしています。これはツリー型タブが、タブが完全に閉じられた後でFirefox自身によって発行される「TabClose」イベントを監視することによってこの機能を実現しているためです。「TabClose」イベントからは、タブを閉じる操作自体をキャンセルする事はできません。

2) 「タブを閉じる」ボタンによってそのタブ自身とすべての折り畳まれた子タブが閉じられる場合、そこに折り畳まれた(見えない)子タブがあるという点を除けばFirefoxの標準的な挙動と同じなので、これは私には直感的な挙動に感じられます。また、もしそのタブだけが閉じられて子タブが残るのであれば、これはFirefoxの標準的な挙動と全く同じです。しかしながら、「タブを閉じるボタンをクリックしたら、子タブだけが閉じられて、そのタブは已然として開かれたままとなる」――この挙動は、私には違和感があります。

とはいえ、あなたはこの機能を、スクリプトでカスタマイズする機能を持った他のアドオン(FireGestures、userChrome.jsなど)と組み合わせる事で実現できます。上記のコードを参照して下さい。

Page 27/239: « 23 24 25 26 27 28 29 30 31 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

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