Home > Latest topics

Latest topics 近況報告

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

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

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

Page 37/248: « 33 34 35 36 37 38 39 40 41 »

タブバーの縦置き・横置きをタブの数に応じて自動で切り替えたい(A new option to switch the position of the tab bar by the number of tabs.) - May 06, 2010

Q

I have a feature request for Tree Style Tab.

I'd like to use horizontal tabs when I have 5 or less tabs open and then have Firefox automatically switch to vertical tabs when I have 6 or more tabs open. These numbers could obviously be variables in the settings, and the feature could just be toggled from the settings as well.

ツリー型タブへの機能追加の要望です。

タブの数が5つかそれより少ない時はタブを横置きにして、タブの数が6個以上になったらFirefoxが自動的にタブを縦置きに切り替える、という機能が欲しいです。また、タブの位置を切り替える基準のタブの数は簡単に設定できるようになっていて欲しいです。

A

I have no plan to implement the feature to Tree Style Tab itself, however, you can do it by a tiny script using TST's APIs like:

(function() {
  var MAX_HORIZONTAL_TABS = 5;
  var onTabModified = function() {
    var newPosition;
    if (gBrowser.tabContainer.childNodes.length > MAX_HORIZONTAL_TABS)
      newPosition = 'left';
    else
      newPosition = 'top';
    if (TreeStyleTabService.currentTabbarPosition != newPosition)
      TreeStyleTabService.currentTabbarPosition = newPosition;
  };
  gBrowser.tabContainer
    .addEventListener('TabOpen', onTabModified, false);
  gBrowser.tabContainer
    .addEventListener('TabClose', onTabModified, false);
  onTabModified();
  window.addEventListener('unload', function() {
    window.removeEventListener('unload', arguments.callee, false);
    gBrowser.tabContainer
      .removeEventListener('TabOpen', onTabModified, false);
    gBrowser.tabContainer
      .removeEventListener('TabClose', onTabModified, false);
  }, false);
})();

For example, you can use this script for the userChrome.js. Steps to do it:

  1. Install userChrome.js from the official website.
  2. After installation, copy the codes above and paste to the file "userChrome.js" in your profile folder. (ex. C:\Users\username\AppData\Roaming\Mozila\Firefox\Profiles\***.default\chrome\userChrome.js )

そういう機能をツリー型タブ自体に付ける予定はないですが、ツリー型タブのAPIを使うと、上記のような小さいスクリプトでその機能を実現する事ができます。

例えば、このスクリプトはuserChrome.jsでそのまま利用できます。手順は以下の通りです:

  1. userChrome.jsをオフィシャルサイトからインストールする。
  2. インストールが完了したら、前述のコードをコピーして、プロファイルフォルダ内にある「userChrome.js」というファイルに貼り付ける。(例: C:\Users\username\AppData\Roaming\Mozila\Firefox\Profiles\***.default\chrome\userChrome.js )

CSS Transitions(CSSだけで簡単なアニメーション)の使い方・覚え方のまとめ - May 02, 2010

いろんな人がいろんな解説を既に書いてるみたいだけど、ツリー型タブでタブのインデントや折り畳みのアニメーションをCSS Transitionsで書き直してみるにあたり、自分で書いてみるまでよく分からんかったので、理解している内容をまとめてみることにした。

CSS Transitionsのフルスペックの説明でもないし、「こんなことができるぜすげーだろ!」というデモでもない。現実的にどういう場面でどういう風に使う事ができるのか、という事を淡々と述べます。いろんな機能を詰め込んだよく分からんデモスクリプトと組み合わせること前提の変なデモを見たせいで混乱してる僕みたいな人が、CSS Transitionsを理解するための手助けになれれば幸いです。

主な用途

マージンや色などの値を数値で表せるプロパティや、画像を表示する系のプロパティなどについて、スクリプトあるいは:hoverなどの疑似クラスによって動的に値が変化するようにしている場面で、元の状態と新しい状態の間をなめらかに変化させるようにする。

例えば、こんな風に。

ul.menu li {
  transition: margin-left 0.25s ease-out;
}
ul.menu li:not(:hover) {
  margin-left: 0;
}
ul.menu li:hover {
  margin-left: 50px;
}

この例では、分かりやすくするために敢えて指定を分けて書いている。ここでは以下のようなことが起こっている。

  • 何もしていない状態だと、margin-left: 0;が適用されている。
  • :hoverの状態になると、margin-left50pxになるようにアニメーションが始まる。
  • :hoverの状態が解除されると、margin-left0になるようにアニメーションが始まる。

何ができる?

  • CSSだけでやれる範囲でいうと、上記のサンプルのように「:hoverになった時にぽわーんとなめらかに出てきて、:hoverが解除されたらぽわーんとなめらかに引っ込む」ようなGUI要素をスクリプト無しで書けるようになる、という所に意義がある。例を挙げると、以下のような物が該当するだろう。
    • :hoverの時だけ出っ張るメニュー項目が、なめらかに出っ張る/引っ込むようになる、とか。
    • :hoverすると色が変わるボタンが、「じわっ……」と色が変わるようになる、とか。
    • :hoverで影が付く時に、「じわっ……」と影が濃くなる、とか。
    • メニューが透明な状態から「じわっ……」と表示されていく、とか。
    • アイコンが90°回転する時に回転がなめらかになる、とか。
  • スクリプトと組み合わせて使う場合、トゥイーンのための実装が要らなくなる(ネイティブ実装に任せてしまえる)というのが多分最大のメリット。
    • ポジショニングやマージンの調整で要素の表示位置を変える時、単に新しい値(=アニメーションの終了時点の値)を設定するだけでトゥイーンしてくれる。
    • CSSで初期値とdurationとイージング関数を指定しておいて、スクリプトで終了値だけを動的に指定する、という使い方。
    • CSSのクラスセレクタであらかじめいくつかの終了値のセットを定義しておいて、スクリプトでclassNameを書き換えて終了値を間接的に指定する、という使い方。
    • タイマーの管理が不要になるので、複数のアニメーションを同時に走らせる場合、アニメーションが全体的に軽くなると思われる。
  • 既に前のアニメーションが行われている間にまた値を変更した場合、現在の時点の値からの変化になる。
    • アニメーションの中断と再開のための面倒なコードは不要。
    • 例えば、margin-left0であったのを、20pxを設定してアニメーションが始まり、20pxに向けて変化していっている最中の10pxの時点でmargin-left0に再設定した場合、前のアニメーションが中断されて、新たに10pxから0に向けて変化するアニメーションが始まる事になる。
    • スクリプトでも動的疑似クラスでも。

「Windows Vista以降のAero Glass有効時のネイティブアプリのボタンみたいな物をWebに簡単に持ち込めるようにする」「GUIの端々にほんのちょっとだけ小粋なアニメーション効果を加えたい時に、スクリプトを書かなくてもよくなる」という話ですね。それ以上でもそれ以下でもないと思っておくと、CSS Transitionsを理解しやすいと思います。

何ができない?

  • テレビアニメのような、長くて複雑なアニメーションは無理。滅茶苦茶頑張ればできるかもしれないけど、CSS Transitionsの仕事ではない。
  • アニメーションと連動したスクリプトの複雑な制御。
    • アニメーション終了時にはDOM Level2 Eventsのイベントリスナで捕捉可能なtransitionendイベント(WebKitではwebKitTransitionEnd)が発行されるので、アニメーションの終了だけは検知できる。
    • それ以外のタイミングではイベントは発行されない(アニメーションが始まったかどうかも分からない)。
  • 無限に繰り返すアニメーション。
    • ループするアニメーションのデモではスクリプトと組み合わせていて、transitionendイベントを使ってその都度新しい「アニメーション終了時点の値」を設定し直してやることで、アニメーションを繰り返している。CSS Transitionsだけではループはできない。
  • どんなプロパティでもアニメーションできるわけではない。仕様書(のWorking Draft)にアニメーションできるプロパティの一覧がある。

書き方

transition:
    アニメーションさせたいプロパティの名前
    アニメーション終了までにかける時間(省略すると0)
    イージングの種類(省略するとease)
    アニメーションが始まるまでの遅延(省略すると0);

これで1セットと考えると分かりやすい。複数のプロパティをアニメーションさせたい時は、

transition: margin-left 1s ease;
transition: margin-top 1s ease;

とは書けないので、カンマ区切りにして

transition: margin-left 1s ease,
            margin-top 1s ease;

と書く。

アニメーション終了までにかける時間はCSS3 Values and Unitsの時間の値で指定する。例えば250ミリ秒で完了させたい時は250ms(ミリ秒単位)または0.25s(秒単位)と書く。アニメーションが始まるまでの遅延も同様。

イージング関数(値の変化の仕方)には、以下のいずれかを指定できる。

linear
等速直線運動的な変化
ease-in
最初はゆっくり、最後にいくにつれて激しく変化
ease-out
最初は激しく、最後にいくにつれてゆっくり変化
ease
ゆっくり始まって、途中で最高速になり、最後はまたゆっくり変化
ease-in-out
easeをもう少しきびきびさせたような感じ
cubic-bezier()
ベジェ曲線でアニメーションの変化の仕方を指定

現状ではまだ仕様が固まっていなくてどのベンダも先行実装の段階なので、ベンダープレフィクス付きの指定を書いてやらないといけない。

-webkit-transition: SafariとGoogle Chrome用の指定;
-moz-transition: Firefox用の指定;
-o-transition: Opera用の指定;
transition: 仕様通りの指定;

CSS TransitionsがRecommendationになったら、ベンダープレフィクス無しの記述だけでいけるようになるはず。

Ubuntu 9.10からUbuntu 10.04にアップグレードした - Apr 30, 2010

Ubuntu 9.10 Karmic KoalaからUbuntu 10.04 LTS Lucid Lynxにアップグレードした。9.10の諸問題が解消されている事に期待して。

  1. Ubuntu Japanese TeamのUbuntu 10.04 LTSへのアップグレード手順に従ってアップグレードする。
    • アップグレード処理の間、何故かdeskbar-appletがクラッシュしまくる。対処方法が分からないのでとりあえず無視しまくる。
  2. Japanese Teamのリポジトリを有効にして、パッケージをインストールしたりアップグレードしたりする。
  3. deskbar-appletがやっぱりクラッシュするので、パネルから削除した。
  4. ATOK X3をセットアップし直す。
    1. Ubuntu 8.04 LTS 日本語ローカライズド Desktopでのインストール方法に従ってATOK X3をインストールする。
    2. ATOK X3 for Linux アップデートモジュールをインストールする。
    3. ATOK X3 for Linux Ubuntu 9.04(GTK+ 2.16) 対応モジュールをインストールする。書いてある手順通りにやると何故かoptというディレクトリがatokx3gtk216.tar.gzと同じ位置にできてしまったので、手作業でsudo mv opt/atokx3/lib/client/jsgtkext.so /opt/atokx3/lib/client/jsgtkext.soした。
    4. iiimf-propertiesをインストールし直す。bin/deb/IIIMF/iiimf-properties_trunk_r3104-js1_i386.deb をインストールする。 以上の操作で、今までの環境で使っていた設定が反映されるようになった(ウィンドウ左下に張り付く「ATOK」のツールチップ?を消して、「変換」キーだけでATOKのON/OFFをトグルできるようにする、という設定)。

所感。

  • Gnomeパネルをデスクトップの左右に縦に置くという使い方をしてるんだけど、「Ambiance」テーマだとGnomeパネルの縦置きは想定されていないようで、背景画像が縦に繰り返されてものすごく酷い事になった。仕方ないので今まで通り「Human」テーマを使うことにした。
  • なんでか知らんけど「システム」→「設定」の中にiiimf-properties起動のための項目が追加されなくて設定ができない。ググって見つかった情報によるとターミナルでiiim-propertiesとやれば起動できる(コマンド名はiiimf-propertiesではない)そうなので、それで凌ぐ事にする。
  • 「設定」→「タッチパネル」でくるくるスクロールを有効にし直してやらないといけなかった。
  • 自分で作ったランチャからFirefoxを起動できなくなった……と思ったけど起動オプションのプロファイル指定がfirefox -p プロファイル名になってたのをfirefox -P プロファイル名(大文字)に直したら起動できた。むしろ何で今まで小文字でいけてたのかの方が謎だ。
  • ローカルで動かしてたPHPが動かなくなった。
    • 思い切って全部やり直しだ!とsudo aptitude purge apache2.2-bin php5とかやってからもう一度インストールし直したんだけどどうにもこうにも動かない。
    • *.phpなファイルにアクセスするとapplication/x-httpd-phpなMIME Typeのファイルが送られてきてしまってダウンロードになる。
    • 設定ファイル( /etc/apache2/mod-enabled/php5.conf )の中のコメントにTo re-enable php in user directories comment the following lines(ユーザのディレクトリでPHPを有効にしたかったら以下の行をコメントアウトせよ)と書かれていた事に気がついて、<IfModule mod_userdir.c>~</IfModule>をコメントアウトしたら、ファイルのダウンロードにならずにPHPのスクリプトとして解釈された結果が返るようになった。
  • FirefoxでFlashのコンテンツが表示されなくなった。
    • flashplugin-nonfreeとflashplugin-installerを削除して代わりにadobe-flashpluginをインストールしたら(※adobe-flashpluginをインストールすると先の2つは自動的に削除される)、表示されるようになった。
  • Dropboxのクライアントが止まってたので最新版を入れ直した。

なんかあればまた追記していく。

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属性のマッピングを変更する時は既定のマッピングとかち合わないように気をつけましょう。

ドレッシングがおいしければサラダでも苦にならない - Apr 12, 2010

会社のすぐ近くのカレー屋さんでセットのメニューを注文したりするとサラダがでてくるのですが、そのサラダにかかってるドレッシングが最近になって一般向けに販売されるようになりまして、買ってみたのです。パッション・オニオン・ドレッシングというそうです。買って初めて気がついたのですが、賞味期限が短いので、最近はキャベツの千切りが8割くらいのサラダとも言えないようなサラダを自分で作って頑張って消費しています。

これまでに作ったパターン。

  • キャベツ千切り+ピーマン千切り+トマトのブツ切り
  • キャベツ千切り+ピーマン千切り+大根千切り+トマトのブツ切り
  • キャベツ千切り+ピーマン千切り+大根千切り+豆腐+トマトのブツ切り

ワンパターンにも程がある。飽きが来ないので苦にならないのですけれどもね。相当前に買った市販の普通のドレッシングがまだ残ってる(どう考えても賞味期限過ぎてる)のに、こっちばかり使ってます。

Suicaを処分してモバイルSuicaにした(メインバンクも変えた) - Apr 12, 2010

経緯。

  1. 大阪でずっと暮らすものと思ってe-kenetのクレジットカードと同時にPiTaPaを作った。引き落とし口座は近畿大阪銀行の口座にした。
  2. 東京に引っ越すことになり、PiTaPaエリアが広がるまでの一時しのぎのつもりでSuicaを作った。
  3. 関東にはもう広がりそうにないPiTaPaに絶望した!
  4. りそなグループなのにりそなになる気配がなくて通帳繰り越しの度に大阪または神田の支店に平日に行かないといけない近畿大阪銀行にも絶望した!
  5. Felica機能付きの携帯電話に機種変更した。
  6. モバイルSuicaを使おうと思ったが、e-kenetのクレジットカードで払おうと思うと年会費が必要だと知ったので「もういいよウワァァァァン!」と断念した。
  7. e-kenetのクレジットカードの有効期限がそろそろ切れる。
  8. VIEWカードまたはその提携カードならモバイルSuicaを当面は年会費無料で使えると知った。

そんなわけでSuica、クレジットカード、メインバンクの3つを一気に乗り換えることにしました。乗り換え先は三菱東京UFJで、Suica機能付きのクレジットカード(=VIEWカードの提携カード)にしてモバイルSuicaも当面は年会費無料で使えるようになりました。

今のところモバイルSuicaのオートチャージはVIEWカードまたはその提携カードでないとできないそうなのですが、今回の乗り換えでできるようになったので登録してみました。普段は残額がなくなる度に3000円をチャージするようにしていたので、それと同じくらいということで、1000円を切ったら2000円を補充する設定にしています。

ところで、Suicaを使わなくなるなるとSuicaの残額が気になるところですよね。Suicaを使わなくなる時は緑の窓口に持って行くと500円のデポジット金が返ってくるのですが、その時チャージされている残額は返って来ないので、もったいない病の人は残額が0になるように工夫しないといけません。僕の場合は最後は残額が110円になった時点で自動販売機を見たらオロナミンCが110円で売られていましたので、それを買って残額0円にしました。普段Suicaで買い物をしないので僕の場合はスッキリいけましたが、Suicaで買い物をしてると消費税分とかで1円単位で残りが出てしまってスッキリしないかもしれないので大変ですね。

まとめ。持ち歩く物が1つ減ったので楽になりました。

あ、でもモバイルSuicaって端末にチャージされるんですよね? ということは機種変更の時にもまた同じ問題が発生するのか……

追記。コメント欄で指摘を受けたけど、Suicaの残額は手数料210円を支払えば払い戻してもらえるんですね。残額が210円より少ない場合は満額払い戻してもらえるようです全額没収だそうです。あとブコメによると、Suica払いできる店舗で残額以上の買い物をすれば不足分を現金で払えるのでそれでもいけるそうです。モバイルSuicaの場合、機種変更での引き継ぎもできるとのことです。至れり尽くせりですね。Felica付きのガラケーな人は速攻で移行するといいと思います!!!

努力しようと思って努力できるかっていうとそんな訳はない - Apr 06, 2010

1つ前の話の続きかもしれない。

僕自身は、「努力できる人っていいなあ羨ましいなあ」と思うけど、大抵の事は努力しようと思っても続かない飽きっぽい人間だと自覚しています。自炊、続きません。運動、続きません。やってもすぐに成果を得られない事は大抵、やってる途中で飽きちゃいます。自分の飽きっぽさを認められない、自分はそんな飽きっぽい人間じゃないはずだ、自分が悪いんじゃなくて自分を飽きさせるその対象の方が悪いのだ、と思う人がひょっとしたら「努力なんてかっこ悪いよ」と斜に構えて言うのかも知れません。少なくとも過去の自分はそうだった気がします。

でも、楽しい時ってホント、秀丸エディタに10時間以上連続して向き合ってても苦にならないですね。食事をする時間も惜しいくらいにのめり込むことが結構ありました。今は、毎日ちゃんと会社に行かないといけないので、やりたくてもできないんですけど。

彼らは、プログラム書いててノリにノッてる時の僕みたいな感じで、仕事(=儲けに繋がる事)をしてる時はそれが楽しくて楽しくて仕方ないというタイプの人なんじゃないかと思います。僕は金に繋がりやすい事に彼らほど熱中できる気はしない(金儲けが嫌いなのではなく、好きな事が金になりにくい事ばかりだという意味ですよ)ので、彼らのように大儲けはできないんだと思います。残念ですが仕方ないです。彼らの真似はできないので、羨んでも無意味です。

「さあ努力するぞ」と思って努力できる・努力が続くのは、何でもいいから努力するのが好きだという人なんだろうと思います。ある意味マゾだと思います。僕も大概マゾいと思いますが、そういうマゾさは無いので、残念ですが努力が続きません。仕方がないので、やってて苦にならない事に没頭して現実逃避するのです。それが僕の場合は、Web標準だとかCSSだとかJavaScriptだとかMozillaだとかだったりなんでしょうね。

ただ、幸いな事に自分は、そうして現実逃避して没頭した対象に関する知識とか経験とかがそれなりのお金になるという状況に居る事ができています。「仕事なんか辛くて当たり前だ」という話をよく聞きますが、自分はそういう意味ではとても恵まれた状況にいるのだと思います。

とりあえず、何かやるならやってて苦にならない事をやる方がいいと思うし、やってて苦にならない事がいくつかあるのならその中で一番お金になりそうな事を優先すると、色々ラクになるんじゃないかなと思います。

僕の場合、Mozilla以外ではRails(Ruby)やり始めた時は右も左も分からなくて辛かったですけど、分かってくるとそれほど物凄く辛いという事もなくなってきた気がします。やっててそれほど辛くないと思える事がいくつか手持ちであると、つぶしがきいていいと思います。なので、そういう物がまだないという人は、そういう物を見つけてみるといいんじゃないかと思います。

ただ、「あ、それほど辛くないな」と思えるようになるまでにはひょっとしたらそれなりに時間がかかるかもしれませんので、最初のうちは、辛くてもちょっと無理して続けてみるという事が必要なのかもしれません。考えてみれば、自分もMozillaの中を見始めた時は色々辛かった気がします。

そこで諦めないで続けざるを得ない何らかの事情(Mozillaの時は「他にやってくれる人がいなかった」、Railsの時は「仕事で仕方なく」)があると、「あ、それほど辛くないな」と思える所まで辿り着きやすくなるのかもしれません。そういう意味では、他に手を付けてる人が居ない事(自分がやらなきゃ他に誰もやってくれない事)に手を付けてみるというのは、いい選択なのかもしれないなと思います。

「みんなと同じ事やっててもつまらない」というのは、そういう話なのかもしれませんね。

Why I'm using eval() instead of others? - Apr 06, 2010

参考:AMOエディタ権限剥奪きますた

Hello,

Surely I wrongly believed that the policy is flexible for cases, because Tree Style Tab was in the "recommended" list actually. When the policy was changed (to be applied completely for any addons), it had to be removed from the list quickly. This is not a cynicism, I'm really worrying that double standard will make developers confused.

In fact I had not reviewed addons as an editor yet, so this is nonsensically thing, but if I still can talk about this, I didn't mean to accept any addons include eval()s without reviewing. When there are alternative safer way, I thought that recommend him to rewrite his codes. I just told about cases which are not alternated by other ways.

Anyway, I agree to the decision that you've removed me from the group. I had no actual achievement as an editor (there is zero review! I'm very sorry.), instead, I'm all mouth. That's that. I'll still use AMO as an addon author, to put old XPI files, and I possibly move existing versions in the AMO to the beta channel. I think that AMO is really really great work. Editors also.

regards,

P.S.

Can I explain again the reason why I'm using eval() to override existing functions instead of other ways? Of course I use custom DOM events or other safe way when they are available. Following topic is about cases which don't fire custom events. In other words, I explain why I don't like replacing of existing functions by "originalFunction.apply(this, arguments)".

In old days I developed an all-in-one style addon named "Tabbrowser Extensions (TBE)" for Firefox 1.5 and older versions. It was one of major addons about tabbed browsing enhancements, until Tab Mix Plus appeared. In the addon, I aggressively replaced many internal functions of Firefox itself, like:

var origFunc = gBrowser.moveTabTo;
gBrowser.moveTabTo = function() {
  var result = origFunc.apply(this, arguments);
  // some post-process for the moved tab
  return result;
};

Yes, it is one of ways recommended in the entry http://adblockplus.org/blog/five-wrong-reasons-to-use-eval-in-an-extension for injecting some operations before/after the original function.

However, then I frequently suffered from compatibility problems with other addons around tabs, because they used eval() to inject their tiny codes to existing (Fireflx's original) functions, like:

eval("gBrowser.moveTabTo = "+gBrowser.moveTabTo.replace(
  "tab = ",
  "doSomething(); $&"
));

As you know, replacing of functions break addons which inject codes by eval() like above. So I had to choose how to solve this problem, from two ways: 1) import and merge the function of the addon conflict with TBE, 2) use eval() instead of replacing of functions. There was no other choice. To make another addon compatible to mine, it had to be re-written without eval(), but it can't be done in some cases, because the feature surely required injected codes to existing functions. I couldn't make mine compatible to the addon without eval(). I disliked eval(), then I chose "1". In the result, TBE became very very fat addon and I couldn't continue to develop it by me alone anymore. I abandoned it.

I can't force users to forbid using addons which depend on eval(). On the other side, I cannot merge too many features to my own addon because fat and huge project will annoy me. From both reasons "make my addon compatible with the addon" and "keep my addon simple (without extra features)", now I'm using eval()s to inject just minimal codes.

Safety margin about compatibility to other tab-related addons is one of core values of Tree Style Tab and other my addons developed after TBE. When I get reports of compatibility problems with other addons, I try to make mine compatible to others if at all possible (and, of course, for compatibility some my addons provide APIs for others.) If there were only "clean" ways (DOM events, Object.prototype.watch(), etc.) TST were far from satisfactory for tab addicts. Because I'm also using many other tab-related addons (not developed by me), if it doesn't work others, I also won't use TST. Just for making my addons compatible to existing and future addons, I chose eval().

If there were many other custom events for bookmark commands, new tab commands, etc., I won't use eval()s. XBL, CSS hacks also. However, margins for extending UIs (unused boxes etc.) are getting removed from Firefox, because "they eat the RAM, they make the startup process slowly". Only to adding extra elements to tabs, I had to use custom XBL at risk of compatibility problems with third party's themes.

Firefox is getting hard to be extended for me (and my addons). My addon was listed to "recommended", and people say "update it for latest Firefox". There is no way to provide features of my addon without dangerous way. That is my situation.

今evalを理由に審査を蹴られるのであっても、その代替となるより安全な手段が提供されるのであれば、迷わずそっちに乗り換えたいとは思ってる。問題は、独自のXBLを提供するなどの「危ない」事をしなければやりたい事を実現できないような、拡張機能から触れる伸び代の部分がどんどんなくなってるという事だ。それどころか、起動速度が落ちるからという理由でFUELがばっさり切られたように、今ある必要な物すらどんどん切られていっている。W3Cですら、テーブルレイアウトを必要とする人達のニーズにある程度答えられるような、position: absoluteのような仕組みを仕様に取り入れていたというのに。そういう現実を抜きにして、この話は語れないと思う。

あと先方から補足があったけど、曰く、AMO Editorsグループから外した直接の理由は確かに「ポリシーに同意していないから」だけれども、活動してないエディタを外す事自体はよくあることだそうで、ポリシー云々のことが無くてもレビュー実績0の自分はいずれ外されてただろうとのことです。

とりあえずなんでもやってみなはれとか、北方謙三的に言うと「ソープ行け」とか、そういうアレ - Apr 05, 2010

進むべきか退くべきか。違う道を選ぶべきか、今いる道を歩き続けるべきか。@saneyuki_sさんのそういう悩みと、内田樹氏の「なんとなく、で始めた人のほうが長続きする」という話を見てて、こんな事を思ったんですが。

結婚は「好きな物が一致する人」ではなく「嫌いな物が一致する人」とした方が長続きする、という風な話をどこかで見たか聞いたかしました。どうも世の中は、「好きな事が一致してたら、他の所でどんなに相性が合わなくても大丈夫!」という人よりも、「どーしてもここだけは我慢ならない! という点で問題がなければそれ以外の事はだいたい妥協できるよ」という人の方が多いみたいです。僕自身もそういうタイプな気がします。

思い返してみれば僕自身、プログラミングでご飯食べる事になるとは小さい頃にはこれっぽっちも全く考えてなかったと思います。どちらかというと、数十人にも及ぶキャラクター達の膨大な設定と、彼らの暮らす世界の通貨やら単位系やらにまで言及した細々とした世界設定と、世界の始まりと終わりを股にかけるようなやたら壮大なストーリーを盛り込んだ、超大作RPGを作るプランナー的な立場に超憧れていて、RPGツクールとかRPGメーカーとかを買ってはみたものの、最初の村すら完成させる事ができず、いやまあそんな事はどうでもいいんですが、とにかく「クリエイター」に憧れてはいたけれども「プログラマー」には憧れてはいなかったと思うんですよ。

そもそもこのサイトを作り始めたきっかけは、自作の絵をメインコンテンツとして公開する場所を設けたかったからだと思います。そう、今じゃ年に2回くらいしか絵を描かなくなってしまいましたが、当初の自分の心の拠り所は「絵描き」だったのです。将来はキャラクターデザイナーになりたいとか、イラストレーターになりたいとか、そんな事を夢想していたりもしたのです。

またある時は、プロモデラーに憧れた事もありました。プロポーションをいじる加工のやり方や関節を増やす加工のやり方を勉強して、MG RX-78-2 Ver.kaをスマートにする改造とか電撃ホビー付録のとにかく動かない1/144 TR-1ヘイズルをフル可動にする改造とかやったりもしました。が、今では成形色仕上げのお手軽パチ組みが関の山です。

どうしてこうなったのか、理由はたくさんあると思うんですが、自分の内面的な最大の理由は「面倒だったから」で説明できる気がします。

絵を描くのってめんどくさいんですよね、ぶっちゃけ。背景を真面目に描こうとすると、パース取るのに気をつけなきゃいけないし、木の葉っぱとか窓とか真面目に描くと本当に単純作業だし。それでも頑張って完成させたとしても、雰囲気のいい写真には絶対敵わないわけですよ。風景を描くのが好きで描いてるんじゃなく、風景がないとみっともないから嫌々描いてるだけだから、そこには愛がないのです。

プラモは、塗装がとにかく嫌なんですよね。道具の準備と片付けがものすごくめんどくさい。気が短いから半乾きで触ってしまって指紋べっとり、なんてのはしょっちゅうですよ。乾くの待ってる間に熱意が冷めてしまうし、なんとか頑張って最後まで仕上げた所で、中国のおばちゃん(お姉さん?)が手がけたGFFよりもヘボい仕上がりにしかならないし。とても報われません。塗る楽しさじゃなくて、できあがった物でブブーンドドドドドと遊ぶ方が楽しいのです。いわゆるブンドドです。

それらに比べるとプログラミングは、まだ長続きしてるんですよね。面倒な所はコピペしても誰も文句言われない、むしろそれ(車輪の再発明をしないで、ライブラリを利用するようにする事)が奨励されてるくらいです。自動テストを書くのも、果てしないリグレッションの嵐に終止符を打つ事ができるからです。手作業で10時間かかる面倒な事を10時間かけてこなす事が尊ばれるのではなく、仮に10時間でも20時間でもかかったとしても、実行したら1分で自動的に片付けてくれる自動処理を書く事の方が尊ばれる。それが自分の性に合っているのだと思います。

ただ、すべての人がそうだとは思いません。人によっては、自動化の手順やらなんやらを考える事が苦痛でたまらない、そんな事するくらいだったら淡々と手を動かす方がいいよ、って場合もあるだろうと思います。

そこが多分、自分が一番多くの時間を過ごす事が何になるのかを決めるポイントなんじゃないかと思います。

自分にとって、何が耐え難い苦痛なのか。どうであったら我慢できるのか。苦にならないのか。苦にならない物であれば長続きするわけで、長続きすればそれだけ沢山経験が蓄積されるわけで、嫌々やらされる場合に比べたらそれは大きなアドバンテージになると思うんです。やる気の燃費がいい、というか何というか。

でも、何が耐え難い苦痛になるのかなんて、実際やってみないと分からない部分が大きいんですよね。やってるうちに慣れるかもしれない。というか大抵の事は慣れてしまう。人間の適応力ってすごいみたいです。「美人は3日で飽きるけど、ブスは3日ですぐ慣れる」なんてフレーズもありました。だから、恐れることなく色々手を出していいんじゃないかと思います。若くても、大人でも、それは変わらないんじゃないかと思います。

続いてるかもしれない

Why I don't roll Tree Style Tab back to the version which have the option "hide new tab button"? - Mar 31, 2010

I got some requests to add an option "hide new tab button" again.

Excuse me, but I say "no". There are two reasons.

First, by adding too many options, users consider Tree Style Tab as an all-in-one/versatile addon, and novice users who don't understand what is the purpose of TST will also install it. I don't hope that future. Actually, I received some requests like "please add an option to disable tree features, I want only a vertical tab bar." -- I just ignored it.

Yes, currently TST has some features not related to tree, but they are anguished decisions. When I find out other addons which provide those futures, I'll readily remove them from TST itself, and make TST work with those addons together. (Actually I removed "open selected links in tabs" and some features.) I hope that only users who want to use "tree of tabs" install TST.

By the way, in old days I developed an all-in-one style addon "Tabbrowser Extensions" which was well-known before the Tab Mix Plus became major. It had very various options about tabs, it had huge codes, I received too many requests, and I gave up to continue to develop it. I don't want to repeat stupid thing like that.

Second, hiding the "new tab" button is a choice of an user who use another addon to do it. TST is designed to work with visible"new tab" button, and not designed to work without the button. If you decide to hide the button at your own risk, you also have to care the result, especially when you hide the button by customizing of userChrome.css.

Nonetheless, If you hide the button by an option of an existing addon, then I should add some hack to TST for compatibility with the addon, because I said "and make TST work with those addons together." Which addon do you use, Tab Mix Plus? TMP Lite CE? Tab Utilities? If you tell me which is installed, then I can write hack for the addon promptly.

regards,

ツリー型タブにツリーと関係ない機能を加えてくれという要求は尽きない。何度でも言うけど、ツリー型タブを多機能アドオンにするつもりは全く無いし、現状でツリーと関係ない機能が含まれているのは実装上の都合とかそういう理由による苦渋の選択だし、そういう機能を取り除けるものならどんどん取り除いていくつもりだし実際そうしてきたし、とにかくそこを譲るつもりは全くこれっぽっちもありません。特に、アドオンを自分で作ってないエンドユーザの立場から物を言っている人に対しては。自分で作ってる人にはもちろんこう返しますよ、「じゃあそのためのアドオンをあなたが作って下さい。なるべく連携できるようにこっちも頑張るから。」と。

Page 37/248: « 33 34 35 36 37 38 39 40 41 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき