トップ 最新 追記

2007-10-01 [長年日記]

_ Reminderfox のポップアップがあんまり目立たない

せっかく使い始めた Reminderfox なんだけど、通知の方法が地味。ステータスバーとかツールバーの上にちょこっと文字が出る。ポップアップもなんか普通にウィンドウが開くだけで何の動きもないし、裏に回りっぱなしだったり、expose して切り替えてると全然目立たない。当然音は切ってあるので、音が出ても意味がない。

だからと言ってモーダルなダイアログで UI の制御をぶんどられるとそれはそれですごいむかつくんだろうけど、この状態はさすがに目立たなすぎてイマイチな気がする。

どうしたものか。


2007-10-02 [長年日記]

_ Growl を入れてみたがまだイマイチ

OSX で Notifier と言えば Growl らしいのでこれを入れてみる。

Welcome to Growl!

どうやらこれも 10.3 は放置プレイに入りつつあるようだけどとりあえず入れてみる…と思ったら入れ方分かんねぇ。

Growl.prefPane

をダブルクリックって。なんかもう少し分かりやすくできないのか。

そして何にも使えるアプリがねぇ。あーえーと。なんか後から足すのか。

Extras/GrowlMail/GrowlMail.pkg

をインストール。

Extras/growlnotify/install.sh

を Terminal から実行(ぶ) いやまぁ、できますけど、それってどうだ。

続いて Thunderbird に Growl New Message Notification :: Thunderbird Add-ons をインストール。う。これ、新着メッセージだけだよな。つか Growl Notifications :: Thunderbird Add-ons も同じだな。てことはあれか。

Reminderfox から WebDAV で iCal データを定期的に吐き出して、それを iCal で定期的に読み込んで、iCal そのものか、あるいは iCal + Growl でやった方がよさげだな。

どう見てもめんどうくさいです。あり(ry

……。やっぱ iCal かぁ?


2007-10-03 [長年日記]

_ Reminderfox + iCal も難しい

メールドリブンのイベント、タスクについては Reminderfox が便利そうという話は以前からしているんだけど、これのアラーム通知や iCal アプリとしての使い勝手はイマイチなので、これと iCal を組み合わせようと思ったのだけれど、結論から言うとこれは無理。*1

iCal 1.5.5 ではカレンダーを PUT するか GET するか最初に決め打たないといけない。日本語に言い直すと公開用のカレンダーと表示用のカレンダーである。

今回は Reminderfox からスタートするので表示用のカレンダーになってしまうが、そうなると iCal 上で細かく時間の調整やアラームの設定をやり直すことはできなくなる。転記して別なカレンダー上でアラーム設定することはできるが、それって無駄くさくね?

逆に公開用のカレンダーにすると問答無用でローカルの情報をサーバ上に PUT してしまうので、別なアプリで書き換えた情報はあっけなく消えてしまう。

ぬー。iCal 2 + iSync なら問題ないのかもしれないけど、そういう選択肢はないしなぁ。


ちなみに Reminderfox 1.5 からカレンダーを WebDAV でエクスポートする際は認証がなくてもユーザー名が必要な様子。ただ、それが分かっててもなぜか予期せぬエラーが頻発するので、WebDAV での保存周りなどはまだ十分なテストが行われていないのでしょうな。

また、iCal 1.5.5 のアラーム機能はやはり予想通りなかなかよかった。iCal のアラームウィンドウは問答無用で最前面に出続けるが、他のアプリで普通に作業できるし、iCal は alarm 用の daemon を持っているので、iCal 自体を立ち上げておく必要はない。これなら Growl とかなくたって十分実用的だ。

惜しい!

あ。Sunbird は読み書きできるな。Sunbird で編集して iCal で通知? 違うな、Sunbird が Growl に対応してればいいのか。それか iCal データパースして自力で growlnotify に投げる? さすがにそこまでやる気はないなぁ。

*1 Reminderfox 1.5 + iCal 1.5.5 だから?


2007-10-04 [長年日記]

_ IPAフォント00201 を OSX 10.3 で試す

IPA フォント単独公開記念ということで、前回の IPAフォントを OS X で試してみた から変わったかなーと思い、試してみた。結果、

アプリplatform結果
mi 2.1.6PantherNG
iText 3.1.6PantherNG
CotEditor 0.9.3PantherOK

どうやら前回の予想通り、独自にというか古い方式?でフォント管理してるアプリはやはり 12, 14 ポイントで正しく表示できませんね。CotEditor は OSX 標準のフォントパネルを利用しており、表示も正しく行えます。

Carbon Emacs は設定するのが面倒でやってません。

M+ + IPA の合成フォントがそのうち更新されることをまったりと期待。

Tags: Text OSX Font

2007-10-05 [長年日記]

_ javascript.el のカスタマイズがやっと少し分かった

(autoload 'javascript-mode "javascript" "javascript-mode" t)
(add-hook 'javascript-mode-hook
          (function
           (lambda ()
;            (c-set-style "k&r")
             (setq tab-width 2)
             (setq javascript-indent-level 2)
             (setq javascript-basic-offset tab-width)
             )))

4 タブとか 8 タブはきらいなので 2 に。

ハマった点。

  • autoload の 2番目の javascript がファイル名に当たることが分からず四苦八苦
  • そこかしこで setq js-indent-level 4 なんて記述が紹介されているが、それじゃ効かない
    • バージョンによって違うのか?
  • style の設定がまさか c-set-style でそのまま動くとは思わなかった
    • ver 2 beta にしたら動かなかった。てゆーかなくても K&R スタイルっぽいのでこのまま行ってみよう。

間違っている可能性大だけど、望んだ動き*1 にはなっているのでとりあえずこんなもんで。 emacs-lisp で自分の望む変数や関数がどこにどんな名前で存在しているのか調べる方法が分からないから、いつもいつもすごい遠回りをしている気がする。

そのたびにソースをそのまま読んでいるので少しは lisp に慣れてきているはずなのに、全然上達してこないのはやっぱセンスないんだろか。

cf. Karl Landstrm's Pages

ver.2 beta になってた。

*1 手元の環境でエラーが出ずにインデントのレベルやスタイルが思った通りってこと。


2007-10-06 [長年日記]

_ hosts の影響があるかどうかは host と ping を使えば分かりそう

hosts ファイルってありますな。まぁ普段は用ないんだけど、稀に、ここに直接 IP アドレスと FQDN とかホスト名を書いて何かの対処をすることがあって、でもこれ、戻すの忘れちゃうんだな。

で、おっかしぃなぁ繋がらないなぁとか、違うところに繋がって思った結果が返ってこないとかいうことが起きるわけだけど、そのときに DNS かな?とまでは思っても hosts かな?ってなかなか思わないわけ。で、その原因の一つが hosts の中から引いてるのか DNS の中から引いてるのか区別がつかないっちゅーのがあるんじゃないかと思うわけです。

もう一つは hosts ファイルの中を検索する手頃なコマンドってのがないのよね。普段 DNS かな?と思ったときには host コマンドを叩くんだけど*1、こいつは DNS しか引かないので、hosts ファイルの中身は結果に出てこない。でも普通のアプリは hosts の方も見に行くわけ。見に行くんだけど、その結果どういう IP アドレスに繋ぎに行こうとしているのかって分からんのですよ。ブラウザとか。

で、ここでハマるわけです。が、解決策を思いつきました。

ping を打てばいいんだ!

ping も hosts を参照して、なおかつ IP アドレスに対して打ってくれるんで、そこで IP アドレスが確認できます。とりあえずこれでいいか。

Tags: DNS Net Tool

*1 nslookup でもいいけど


2007-10-08 [長年日記]

_ hosts と DNS のどちらで名前解決してるか分かるツール書いてみた

またタイトルで終わってしまった。

odz buffer - 名前解決

でヒントをもらったので Ruby で書いてみた。

#! /usr/bin/env ruby

require 'resolv'
require 'ipaddr'

def main()
  host      = ARGV.shift()
  num_addrs = 0

  if ( host )
    begin
      ipaddr = IPAddr.new( host )
      output_names( ipaddr )
    rescue
      begin
        num_addrs += output_addrs( Resolv::Hosts.new(), host )
      ensure
        num_addrs += output_addrs( Resolv::DNS.new(), host )
      end
    end
  else
    STDERR.puts "Usage: #{$0} hostname/FQDN|ipaddr"
  end

  exit num_addrs
end

def output_addrs( resolv, host )
  addrs = resolv.getaddresses( host )

  if ( addrs.size > 0 )
    puts resolv.class.to_s.sub( /Resolv::/, '' )
    addrs.each { |addr|
      puts addr
    }
  end

  return addrs.size
end

def output_names( ipaddr )
  if ( ipaddr.class == IPAddr and
         names = Resolv.getnames( ipaddr.to_s ) and
         names.size > 0 )
    names.each { |name|
      puts name
    }
  end

  return names.size
end

if ( $0 == __FILE__ )
  main()
end

試しに getaddresses.rb という名前にしてみる。

$ ./getaddresses.rb aligach.net
Hosts
127.0.0.1
DNS
202.181.99.90
$ ./getaddresses.rb www.google.com
DNS
66.249.89.99
66.249.89.104
66.249.89.147

意外に便利。

取得したアドレスの数を返すので DNS にも hosts にも一切情報がない場合は 0 になり、失敗した旨を伝えることになります。

[2007-10-09 追記] 逆引きもできるようにしてみた。名前は pseudohost.rb とかそんなんで。

逆引きもできるので、通常の使い方では alias で host にしちゃうことも可能になった。これでより使いやすくなった。

※ ただし面倒なので逆引きの方は hosts だ DNS だなんつーことは言いません。

Tags: Ruby DNS Tool Net

2007-10-11 [長年日記]

_ メンテ終了

レンタルサーバのメンテが終了した。外からは全然分からないけど。(すっかり忘れてて朝繋がらなくてちょっとビビった。)

Tags: 日々

_ いまさらHSPネタなのに

初心者向けプログラミング・ツールに望まれること:ITpro

あまり釣り度は高くなさげ。ただ、

・プログラミング言語としての“スジ”がよい

 構造化プログラミングやオブジェクト指向プログラミングといった手法を習得しようとする場合,初心者のころからこうした機能をサポートする言語を使って概念を身に付けていれば,学習コストが少なくて済むことが期待できる。逆に,スジが悪い言語を初心者のころに使うことで,行儀の悪いプログラムを書く悪癖がついてしまうことを危惧する人もいるかもしれない。だが,最初はこうした機能を使わずにプログラミングをすることで,後でその機能を使ったときに,その効能やありがたみを実感できる可能性もある。

この項目丸ごと不適切な気が。

スジの悪い言語から入っても「あとでありがたみが分かる」効果があるんじゃね?てことを書いているのにその項目タイトルが「スジがよい」ってどないやねん。

ちゃんと校正してください。

それ以外はまぁ。「別に。」「特にないです。」

_ 関西オープンソース行ってみようかな

関西オープンフォーラム

少なくとも東京よりは行きやすい。日帰りも十分可能だし。


2007-10-12 [長年日記]

_ DOM node 内で使える getter は getElementsByTagName だけ

知らなかった。一応仕様書は読んでたつもりだけどスルー力を発揮しまくってたんだな、きっと。

以下、mozrepl で覗いてみた結果。

repl.search( /element/i, content.document )

getElementById
createElement
getElementsByTagName
documentElement
createElementNS
getElementsByTagNameNS
ELEMENT_NODE
getElementsByName
getAnonymousElementByAttribute

repl.search( /element/i, html )

事前に var html = content.document.getElementsByTagName( 'html' )[0] を実行済み。

ELEMENT_NODE
getElementsByTagName
getElementsByTagNameNS

へー。

getElementsByName を node 内で使えたらコスト低いかなーとか期待したんだけど、そういうことはできないのでした。なるほどね。

_ IE って難しい

今回は

の合わせ技。

表示するページの文字コードと form の送信先の期待する文字コードが異なる場合、IE 以外のブラウザなら accept-charset 属性に従って送信してくれる。

つまり IE でだけゴニョゴニョしなきゃいけないわけだけど*1

  • 送信先で期待している文字コードが UTF-8
  • GET リクエストが有効

の二つが AND でクリアできている場合、form の submit を横取りして JavaScript の encodeURIComponent() を使って URI を生成して、そこに飛べばよい。

が、これだけだと履歴を戻ることができなくなってしまう。例の、Ajax と同じ問題だ。そこで location.hash を適当に書き直してやることで送信先の URI に飛んで行く前の URI を履歴に保存してやろうとするんだけど、これがまた IE でだけ動かないorz

もう IE なんて死滅しろ。

ちなみに、Win2k + IE の場合は location.hash なんて書き換えなくても履歴に残ったりする。なんだこのいきなりの挙動の変わりっぷり。IE のバージョンとか JScript のバージョンとかじゃなくて OS のバージョンが影響するところがよく分からん*2

*1 6 も 7 もダメダメ

*2 WinXP + IE 6/7, JScript 5.6/5.7 ともに location.hash を使っても履歴に残せないが、Win2k + IE 6, JScript 5.6 では何もせずに履歴が残る。


2007-10-13 [長年日記]

_ ma.la印ローカルプロキシ(2006年製)がちょっとイマイチ

※ 本人に補足されたっぽいので調子に乗ってアイディアを追加しました。

最速インターフェース研究会 :: 萌ディタとSleipnirとWEBrickを使って人のサイトのCSSをリアルタイム編集するデモ

非常にありがたいんだけど、実際使ってみて以下の点がイマイチかなと思った。

  • full_path を + で求めてるけど、File.join() 使えば / の有無を気にしなくて済むよ。
  • rewrite の設定があるけどファイルが存在していないから rewrite を行わないのか、rewrite の設定がないから行わないのか分からない。
  • rewrite 設定ってハッシュじゃなくてそのままパスの文字列を書いたリストでもいいような?
    • dir があるんだからサイトごとにそのサイトの構造に従ってファイルを置いておいた方が分かりやすくない?
    • rewrite と capture で設定を分ければいいかな? capture の方は proxy ホストのファイルを使う、rewrite は通常の URI の rewrite に使う、ということであれば、rewrite はハッシュの方がよさげ。

こんな感じ?

まだ File.join() の部分しか直してないんでスクリプトを上げたりはしないけど、そんなことを思った土曜出勤の昼下がり。

たぶん1年以上前のものなので、現在は超絶パワーアップしたものが使われているはず。

最後に一言。便利なものをありがとう!

[2007-10-17 追記] 高速化アイディア

なんか遅い気がするのでとりあえず吐き出しとく。ヘボい機械使っててごめんなさい。

  • hostname をキーにしたハッシュもあるといいかも

パースしたら enable になってる filter だけで以下のようなハッシュ

host1: filter1
host2: filter2

を作ると hostname だけで rewrite の設定があるかどうか分かるので少しは速くなるかも。公開されてるコードだと filter や host の数が増えてくるとリニアに遅くなる予感。

  • そのためには filters もハッシュの方がよい?

公開バージョンのように

filters:
 -
   name: value
   enable: bool
   target:
    - host
 -
   name:
 ...

という構造になってると特定のフィルタだけを呼び出すのは難しいので

filters:
  filter1:
    enable: bool
    target:
  filter2:
...

って感じにすると host -> filter の呼び出しがスムーズになる気がする。

  • req.path_info が rewrite の設定に引っ掛かったどうかチェックした方がよくないか

公開されているバージョンのコードだと rewrite のルールをガーッと読んでリクエストされたパスに対して gsub! を掛けまくったあとに、問答無用で FileTest.file? してるけど、まったくの想像で申し訳ないけどすべてのリクエストに対してこれらの行程が走ったらそら重たいような?

gsub!() の結果が nil でないときに rewrite が起きたと言えるわけだから、それを保存する値を適当に作って、rewrite が起きていれば FileTest.file? から File.read() っつー流れはどうだろう。

Tags: Ruby Web

_ Firefox で proxy の設定を手早く

Firefox は例によって extension で。

SwitchProxy Tool :: Firefox Add-ons

インストール後、何か特別なことをした覚えはないけど、いきなりツールバーに日本語で出現したのでビビる。すげぇ。

Firefox + SwitchProxy

_ Opera で proxy の設定を手早く

Opera は独自のプロキシ設定を手早く反映する工夫がなされている。

Opera の Proxy 設定その1 Opera の Proxy 設定その2


プロキシの on/off をクイックメニューからすぐに切り替えられるのだ。

Opera のクイックメニューから Proxy を on/off

Tags: Tool Web

_ OSX 全般で proxy の設定を手早く

今回初めて気がついたけど、OSX は、ネットワークの設定からプロキシの設定をいじることができる。


システム環境設定のプロキシ設定@OSX 10.3


この設定は上に挙げた以外の

  • Safari
  • Sunrise
  • Camino
  • iCab

で有効だった。

手早いかと言われると操作性として微妙だが、複数のブラウザに一気に反映させられるのはなかなか魅力。

Tags: Tool Net OSX

2007-10-14 [長年日記]

_ たださんによる iPod Touch レビューがありがたい

ただのにっき(2007-10-12)

実はネット端末として DS とどっちが上かに興味がある。ソフト的なテクノロジというよりは単純にいちばん気になるのは速度かな。DS おせぇ。

でも。えーとあの。クレードル? あれの操作性もなかなかよいと思うんだけど、その部分がどうなのかも気になるところか。誰か比較してる人いないかな…。

そうだ。イアホン部分を抜くと一時停止するっていうのは知らなかった。基本的にトランスミッタを使って車で聴くスタイル*1なので、とっさに音を切りたけりゃ車のオーディオを切っちゃえばいいんで。

*1 しかも遠出のときだけ

_ WEBrick メモ

WEBrick をあれこれ調べていてもたいした情報がなく、

こんくらいか。eto 方式が自分の好み。

proxy の話を除けばいちばん充実してるのはこっちかな?

Gnome's Guide to WEBrick

ところでどうでもいい話だけど、tokuhirom さんて今は全然モンキーレンチが似合うように見えないよね。何があったのだろう。もしや別人?

Tags: Ruby Web

_ event handling って難しい

JavaScriptのイベントハンドラに頭を悩ます。。

を見てさらに突っ込んでみた。ここでは便宜的にイベントハンドリングには以下の3つの方法があるものとする。

  1. HTML attribute
    • <a onclick=""> とか
  2. DOM event listener
    • obj.addEventListener(), obj.attachEvent()
  3. DOM 0 property
    • obj.onlick = func とか

これを上の優先順位で付加した。実際には DOM 0 property は try catch で event listener のセットに失敗したときだけ試すことにした。

結果、意外なことが分かった。

手元の環境では

  • DOM event が優先
    • Gecko ブラウザのみ
  • HTML attribute が優先
    • WinIE 6, Opera 9.23, Safari 1.3, iCab 3.03

合わせ技で、HTML attribute と DOM event listener の両方で return false した場合、

  1. HTML attribute
  2. DOM event listener
  3. 停止
    • WinIE は DOM event listener の return false で停止
    • Safari 1.3, Opera 9.23, iCab 3.03 は HTML attribute の return false で停止(つまり event listener だけで return false しても止まらないでページ遷移してしまう。)

という流れになる。

ちなみに Firefox で同じことをすると DOM event listener が先に実行されて、その return false で停止する。

ただなんか Safari はよく分からなくて、手元の Safari 1.3 では

  • a タグは DOM event listener が優先
  • form タグは HTML attribute が優先

てな動きに。なんだかよく分からん。本当に一貫してこの通りの動きになるのかは分かりません。

ちなみに、どのブラウザでも DOM 0 property にセットしたものは HTML attribute を上書きする形で動くらしく、この中での return false によってページ遷移を抑止することができた。逆に言うと、onsubmit で submit の無効化とかしたい場合は、現状では DOM event listener は役に立たず、DOM 0 property の方にセットしないとダメっぽいです。 DOM 0 property の方にセットして false を返すか、DOM event listener にセットして event オブジェクトを通じて動作の停止を行うかのいずれか。

複数のイベントハンドラをセットする必要が今のところ自分にはないのでこれ以上細かくは調べてないけど、ページ遷移抑止をしつつ複数のイベントハンドラを a や form で動かそうと思ったら、どうするのが正解なんでしょうな event オブジェクトをちゃんと使えってことですな。

[2007-09-15 追記]

分かりました。以下、「イベントハンドラ」は DOM event listener の意味で用います。

  • イベントハンドラの return を見てくれるのは IE だけ
  • イベントハンドラからページ遷移を抑止するためには event オブジェクトに対してそのように指示を出さないとダメ
    • 明示の方法は event モデルに従う
  • イベントハンドラは黙ってても「イベントオブジェクト」を受け取る
    • 仕様になってるわけじゃないけど、そういう実装になってる
  • attachEvent() で動作する IE, Opera, iCab は window.event オブジェクトをいきなり参照できる
  • addEventListener() で動作する Firefox, Safari は明示的にイベントハンドラの方で引数を指定しておいて event オブジェクトを受け取る
    • かと思いきや Safari はなぜかイベントハンドラ function で引数を明示しておかなくても `event' リテラルが「W3C モデルの event オブジェクト」を意味してまともに動いちゃう
    • しかも addEventListener() で第3引数を省いても動くなどいい具合にアバウト

すっげ。Safari すっげ。どういうことかというと、こんなんでも動くってことです。

obj.addEventListener( 'click', function() {
  alert( event.target );
} );

Firefox だと event なんてオブジェクトは function() 内に存在しないので動きません。ふーむ。

登場人物は Opera 9.23, iCab 3.03, Safari 1.3(一部2), Firefox 2.0.7, WinIE 6 とワタクシ wtnabe、special thanks to odz ! でお送りしました。

本日のツッコミ(全2件) [ツッコミを入れる]

_ odz [prototype.js なら Event.stop が YUI なら YAHOO.util.Event.stopE..]

_ wtnabe [ありがとうございます。あーやっぱり event オブジェクトを使わないとダメなんですかね。listen してる fu..]


2007-10-15 [長年日記]

_ location への代入で Safari は履歴を残さない

loction を書き換えてページ遷移を JavaScript から起こす方法には

  1. location 書き換え
  2. location.replace()

の二つがあり、1 の方法は履歴が残り、2 の方法では履歴が残らない…はずだった。

Safari はどっちでも残らない。

また Safari か。

1.3/2/3 のいずれでもダメっぽい。

まぁ location.hash の書き換えで履歴を作ることはできるのだけど、それは今度 IE の方でうまくいかないというひどい状態になる。

数の暴力で Safari の履歴を見捨てるのが正解だろう、きっと。

※ つか Safari 1.3 って fragment id が変わっただけで load が起きるのか…。


2007-10-16 [長年日記]

_ 文字コードを指定して読み直し

[2007-10-18 追記] イマドキは C-x RET r ( revert-buffer-with-coding-system ) のようです。r は revert の r ? でも reload とか reopen などをイメージしやすくていいですね!

blog.woremacx.com: Emacsで文字コード指定して再読込

ぐぐった時に、そのものずばりの情報に到達できるとうれしくなります。

これが意外とできないんですよね。今回の動作は

  1. 今から実行するコマンドの文字コードを指定して
    • C-x RET c
  2. ファイルを開き直す
    • C-x C-v

という流れ。

そもそもこれが思いつかない。てっきり文字コードを指定してファイルを開くというコマンドが存在するかのような錯覚に陥ってしまうが、そうは問屋が下ろさないのが Emacs クオリティ。dired で C-x RET c して文字コードを指定して open するのと基本的には一緒。

C-x C-v は自動的にカレントバッファの削除を行ってくれるけれどカレントバッファのファイル名をキープしてファイルを開こうとしてくれるので、「開き直す」意味に使いやすい、ということですな。

※ 実は昔から Emacs の挙動はこうして言葉に直さないと頭に入って来ないのです。なんでこんな苦労して使ってるんでしょうなぁ。

Tags: Emacs
本日のツッコミ(全3件) [ツッコミを入れる]

_ k12u [22.0あたりから C-x RET rでいけますね]

_ wtnabe [おお! Coding system for visited file ですか。で、これを実行すると今開いてるファイル..]

_ wtnabe [なんかおかしなこと書いてますね。Coding system for visited file を聞かれる、ですね。な..]


2007-10-17 [長年日記]

_ はてなの新編集機能に(悪い意味で)ビビる

なんかはてなの編集機能が Ajax になったっぽいという記事をどこかで見かけてふらふらとはてな村へ出かけてみた。

どこからそんな編集機能を利用するのか分からない。

なんかセクションタイトルの部分に mouseover したら色が変わったので試しにクリックしたらテキストが textarea になった。あー edit in place ってやつでしたっけ、これ。

でだ。これ、なんで機能が明示されてないの? 普通に表示されてる [ 編集 ] リンクが従来通りなのはいいとして、新しい機能って試しにクリックしてみた人か真面目にはてなダイアリー日記を追いかけてる人か、はてな村の中にはてなの追っかけみたいな親切なお友達がいない限り気づかなくない?

あと。

他人の日記でも textarea になっちゃうのはすごいビビるのでやめてほしいよ? まぁ実際には編集結果を送信するボタンがないのでたぶん編集できないんだけど、それにしたってビビるじゃないか。

まぁ慣れてる人ははてなってこんなもん、と思うのかもしれないけど。

Tags: Web

2007-10-18 [長年日記]

_ Widget Class Library なんてものが

US版の Yahoo! Widgets の Workshop の中にある。

Yahoo! Widgets - Workshop

permalink もなけりゃドキュメントは zip アーカイブの中の jsdoc と Word ファイルだけ(なんで Word ?)。

日本語通るなら面白いかも。

入れてみた。なんも書いてないけど Widget Engine ver.4 以降対応でした。

Widgets/Library/
Widgets/Library/Yahoo

にあれこれ入る。えーと、これを使ってる

Craigslist Updater | Yahoo! Widgets

の中を覗いていけばなんとなく分かるかな? 超面倒くさい画像作りから解放されると、だいぶ楽な気がする。今のところ見つけた IDE は

Spket IDE

free for non-commercial use なので、ちょっと微妙な制限なのよね 。この class library で IDE なしでも頑張れそうかどうかが気になるところ。


2007-10-19 [長年日記]

_ Yahoo Widget Class Library をちょっと読んでみた

ところでコレ、ライセンスどうなってんだろ?

基本的には

  1. Widgets/Library/LibraryShared.js を include()
    • Widget Engine 標準の include() はパスを受け取る
  2. var lib = new Yahoo.Utility.Library( libpath )
    • libpath は Widgets/Library のことナリ
    • なんと lib は中で普通に使っているのでこの名前で作ってあげないとダメ
  3. 以降は lib.include( Classname )
    • WCL の include() は base の libpath と .js を自動的に付加して Classname だけで動く
    • version も指定できる

という流れ。

1 の段階では library の path を計算して、存在していれば処理続行。存在していなければインストールしてくんないと動かないよというメッセージを出して止まるように書くべし。

いろんなコントロールがそれぞれの class として定義されている。

ちょっとアレだなーと思うのは

  • Yahoo.Controls.
  • Yahoo.Drawing.
  • Yahoo.Utility.

という名前空間になっていて、YAHOO.widget. は YUI の方に取られてしまっている。うーん。YUI が YUI で namespace を取ればよかったのにね。

しかしこの library はユーザーの Widgets フォルダに保存されるので、ユーザーが変わったらインストールし直しっつーのが面倒くさいな。まぁ自分の配布したい widget にそのまま同梱しちゃうっていう手はあるんだけど。

むしろグローバルの lib をぶんどってしまっているのがすげーダサイ気がする。そんなんでいいのか。

Tags: Ecmascript

2007-10-21 [長年日記]

_ Spket IDE 試してみた

Spket IDE

けど。

  • .kon ファイルでは補完は効くけど .js では効かない
  • そもそも Konfabulator 独自のオブジェクト(system とか)の中身について補完が効かない

これじゃあ使えないなぁ。

別にプロジェクト管理とかパッケージングとかできなくていいから、独自オブジェクトの inspect ができると嬉しいんだよね。MozRepl みたいな。あぁいうのだけあれば十分なんだけどな。


2007-10-22 [長年日記]

_ tramp で sshx で multihop

;;「で」が multihop.

実は何度も何度も試してみていたんだけど、どうにも sshx で multihop できないなぁと悩んでいた。どうも sshx は multihop に使えるメソッドとして登録されていないっぽい。

各ホップは ホップメソッド 指定、つまりユーザ名とホスト名から成ります。ホップメソッドはインラインメソッドのみになり得ます。以下のホップメソッドが(今のところ)利用可能です:

  • telnet
  • rsh
  • ssh
  • su
  • sudo

※ 各メソッドの説明は省略しています。

ということでマニュアルの

sshx
お分かりのように、これは ssh とちょっと違った類似物です。 ssh がリモートホストで通常の対話的シェルを開くのに対し、このオプションは `ssh -t -t host -l user /bin/sh' を使って接続を行ないます。この方法は、通常のログインシェルが、ログインの際に質問をしてくるように設定してある場合に有用です。この手順によりそれらの質問を回避して、`標準的な' ログインシェルを tramp に使わせることができます。

の記述を頼りに .emacs に

(require 'tramp)
(setq tramp-default-method "sshx")
(add-to-list
  'tramp-multi-connection-function-alist
  '("sshx" tramp-multi-connect-rlogin "ssh -t -t %h -l %u /bin/sh%n"))

と書いてみたら繋がった*1。うむうむ。これやっぱ補完できないと不便だね。次は補完か。

cf.

Tags: Emacs

*1 このとき、ユーザー名は省略できない。ちょっと引っ掛かった。

_ Be My Last ヘビーローテ

今さらながら宇多田ヒカルはいいな。歌がうまいだけの小娘だった頃には少しも興味が湧かなかったが、結婚する前くらいと、そして最近はやはりよい感じ。

でもコレ当時は売れなかったらしい。

恐るべきは自分の「マイナー」センサー。か?

Tags: 日々 Music

2007-10-23 [長年日記]

_ Yahoo! Widgets Engine の engine が SpiderMonkey だって忘れてた

リファレンスをつらつら眺めていたら debug window で /help って打ってみなって書いてあったのでやってみた。

Widget Engine Debugging Commands:
   /dump object              print all the properties of 'object'
   /trace function           print a message every time 'function' is called
   /untrace function         stop tracing 'function'
   /watch object.property    display a message when the given 'property' of 'object' changes
   /tracethrow [on|off]      turns on/off messages whenever an exception is thrown (on by default)
   (arbitrary JavaScript)    execute the given JavaScript
   /clear                    clear the debug output
   /help                     this list of commands

あ。

/dump system
system[languages]: ja,en,fr,de,es,it,nl,sv,no,da,fi,pt,zh_CN,zh_TW,ko
system[platform]: macintosh
...
...

あーっ!

そうか! そうだよ! 何度も目にしていたのにまたスルー力を発揮してしまっていた!

これ SpiderMonkey だ!

普段 Firebug とか MozRepl とか Rhino とかで SpiderMonkey そのものを目にする機会がないから忘れてた! まぁ dump なんて SpiderMonkey にはないけど、もしかするといろいろできるかもしんない。

いやー普段 OSX だから分かんなかったよ、って書こうと思ったらいつの間にか Fink にも SpiderMonkey きてたよorz


2007-10-24 [長年日記]

_ WCLはもう一手間加えないとダメだな

しつこく Yahoo! Widgets の Widget Class Library ですが。

とりあえずライブラリの存在をチェックして include してグローバルな lib にオブジェクトを作ってやるなんつー単純な作業を毎回書くのはいやなので、それだけをやるコードを書いた。

ついでにどんなコンポーネントがあるのかだけでもライブラリ自身にリストアップしてもらおうと components(), subcomponents() を勝手に追加。(要はファイルシステムをなめて .js ファイルかディレクトリかチェックして配列を返すだけ。)

雰囲気がつかめてきて機嫌がよくなってくる。しかしその先へ行こうとサンプルを眺めてげんなり。

  • まず Yahoo.Controls.Theme コンストラクタに Theme の存在するパスを教えてやる(えぇっ!?)
    • しかもそのためには Yahoo.Controls クラスのリソースのパスを getResourcePath で取得したうえで、その中の Themes ディレクトリを指定する必要がある(マジっすか)
    • つまりこういうこと new Yahoo.Controls.Theme( lib.getResourcePath( 'Yahoo.Controls' ) + '/Themes' )
    • こんなのグローバルな lib を自分たちで汚してるんだし、オブジェクトの中で解決してくれよ
  • できたオブジェクトに theme 名を与える
  • 各コントロールのコンストラクタにはすべてこの theme オブジェクトを与える
  • 各コントロールのパラメータはできあがったオブジェクトに対して一つ一つ丁寧にセットしてやる
frmMain = new Yahoo.Controls.Form(theme);
frmMain.text = "Widget Class Library Control Sample";
frmMain.width = 350;
frmMain.height = 400;
...
lblPrompt1 = new Yahoo.Controls.Label(frmMain.theme);
lblPrompt1.autoSize = true;
lblPrompt1.left = 8;
...

以下コントロール分くり返し。

……。

いやぁ。自分で画像作らなくていいのはありがたいよ? ありがたいんだけど、なんでこんなめんどくさいんだよぅ。なーんつーかこう、バラバラな感じ。かといって粗結合で扱いやすいよ!とかでもない。あくまで縦横無尽に共依存。

どないやねん。どないやねーん。

なんかパラメータとかもさ、JSON でドーンとセットしたいじゃんよ。まぁそういうの書けばいいんだと思うけどさ。ぐるぐる回して setter があったらそれに放り込むようなやつ? まぁ自分に書けるかどうか分かんないけどさ*1。しかもこのライブラリの setter, getter の書き方って deprecated ですよ? orz

cf. Core JavaScript 1.5 Guide:Creating New Objects:Defining Getters and Setters - MDC

他にもリファレンスを眺めてみると obosolete なのに Widget Class Library のサンプルにはバンバン出てくる書き方とかあったりして、そういうのどうなのよ?とかね。気になるところがボロボロと出てきますね、これ。

たぶんその辺の気持ち悪さが解消されればめっちゃ便利になるんじゃないかと期待はしてるんだけどなぁ。自分で書かなきゃいけないんですかねぇ。WCL そのもののバージョンアップなんてそんなすぐにはないですよね…。

*1 setter 一覧とか getter 一覧て取れそうもないですなぁ。Ecmascript 4 ではできそうな気がするんだけど。


2007-10-25 [長年日記]

_ ES4って文字列に改行を含むことができるようになるんだ

アルファな JavaScript デベロッパの皆さんは当然チェックしてるんでしょうけど、overview(PDF) をつまみ食い(斜め読みですらない)したところ

  • triple-quoted string で改行を直接含むことができる(34ページ)
  • オブジェクト初期化子のおしりカンマは仕様上許可される(35ページ)
    • IE でもおしりカンマ {key: value,} が書ける?
  • CR も CRLF も LF もみんな LF になる(36ページ)
    • WinIE でも安心して LF だけの JavaScript を動かせるようになる?
  • ユーザー定義のプロパティを DontEnum 型にできる!(39ページ)
    • obj.propertyIsEnumerable( 'propname', false ) とするだけで ok. 何が嬉しいって、Array オブジェクトにメソッドをペトっと追加してもそれが for ( in ) で出てこなくなります!

辺りにちょっとビビっときてしまいました。ただなんか全体的に

難しくなる

感じがします。class 構文とかは別にどうでもいいんだけど、: が増えたりすると途端に難しく見えるのは Python とか Haskell とか Xtal とかああいうの目にしてるからかな。小難しい用語がたくさん並んだイカツイやつって感じ。今までの JavaScript にあった、なーんも考えてませーん的なほんわかした雰囲気はなくなってしまった気がする。というか今気がついたけど、

: が多い記法はイヤ

なんだな、きっと。何か特別な意味がそこにはありますよオーラがドパドパ出てるんですよ。オレには見える。

Tags: Ecmascript

_ 破綻させてないもん

Geekなぺーじ : Subversionを使ってプロジェクトを破綻させるためのTIPS

  1. レポジトリデータベースを直に編集してしまう。困ったらエディタでレポジトリを直接編集してしまえ!

直、ではないな。dump ファイルだから。

近いことをやったけど破綻はさせてないお。

Tags: Subversion

2007-10-26 [長年日記]

_ CentOS のネットワークインストール時に URL を間違ってハマる

アホすぎ。何を間違ったかっちゅーと、例えば IIJ ミラーを使ったときに

×http://ftp.iij.ad.jp/pub/linux/centos/5/isos/i386/
http://ftp.iij.ad.jp/pub/linux/centos/5/os/i386/

この間違いでしばらく悩みました。Invalid URL と 404 しか出ないと分からない…。いろいろ試して、images が見つからないとかいうメッセージが出て気がついた。http じゃなくて ftp の方が間違いに気づきやすいかも。

Tags: Xen Linux

_ CentOS 初挑戦で yum リポジトリに悩む

CentOS を入れてみた。

全然パッケージないじゃん。みんなこんなんで仕事できるの?できないよね?

例えば 4.5 では nkf もない。5 にはあるけど。エンタープライズな皆さんはそんな雑多な処理はなさらない? 自動判定なんかに頼らずに iconv 使うのが常識? うっそーん。もしかして時代は今 Perl + Encode.pm ? うっそーん。まさか php + mbstring + encoding_transfer で文字コードなんて気にしちゃいない? うっそーん。

でだ。

パッケージ探訪の旅に出るわけですな。面倒くせぇなぁ。ports や今の Debian なら欲しいものはほとんど全部手に入るのに。*1ざっと調べると

  • CentOS の配布物なんだけど標準の yum リポジトリの設定では enabled になっていない centosplus
  • EPEL (Extra Packages for Enterprise Linux)
  • RPMforgeDAG, Dries, freshrpms が参加してるっぽい。)
    • rssh とかこの辺で手に入る
  • Fedora extras(適当な Fedora mirror の中の extras)

cf.

を使うのがメジャーな感じですか。(ミラーの選択には netselect であれこれ とか参照していただければこれ幸いにございます。)

他にも @IT:Fedora Coreの非公式リポジトリをyumで利用するには なんて記事があって、Fedora FAQ からリポジトリのリストを取得できるらしい。

ただ一応 RHEL ですよね。デスクトップで使うっちゅーならともかく、公開サーバとして使う場合、どのリポジトリまで使うことにするのか、判断が必要になってきちゃうんですよね。混ぜたら RHEL クオリティは保てないわけだから。(必要ならパッケージ単位でも検証はしなきゃならんのだろうなぁ。)

アップデートポリシーは基本的にリリースバージョンが上がらない限りはアプリのバージョンは固定なのかな? なんかそんな感じだよね? 例えば 4.4 -> 4.5 のときにはアプリのバージョンは上がる可能性があるけど、4.5 の間は変わらない、みたいな雰囲気。(CentOS や最近の RedHat, Fedora はまったく使ったことがないので全然分からないのです 。)

いや今ナニしてるかと言うと、CentOS 4 と 5 の比較をしてるんですが。やっぱ 4 はアレコレ古いなーと思っているところなのです。Ruby も 1.8.1 だし。やっぱ 5 の方がいいかなー。ただ Cent5 にしても PHP は 5.1.6 なのよね。PHP 5.2 で「まとも」と呼んでいいのは恐らく 5.2.3 からなので、そうするとリリースのタイミングからしてこうなっちゃうよね。逆に Cent4.5 だと PHP は 4.3.9 なので、PHP 5 の機能が不要でパッチがちゃんと出るならしばらくこれでいくという判断もアリっちゃーアリだろな。ただ、Ruby 1.8.1 は割と本気で困るけど。せめて 1.8.2 にしてくれればいいのに、やっぱポリシーの都合で上げなかったのかなぁ。(1.8.2 でアレコレ変わりましたよね。)

ところで本題ではないんだけど、今回のこの実験には CentOS 5 から標準で入った Xen を使って domU に Cent5 と Cent4 を同時に起こして確認してみてるんだけど、どっちも virt-install でスコっと入るので拍子抜けするくらい簡単。Xen も初めて*2だったけど、僕にもできたよ!*3 ただ本当はこの上に Debian な domU も作る予定だったんだけど、なんか手元に Xen カーネルの Debian が立ち上がる機械が余ってなくて断念しちゃった。wakatono さんみたいに debootstrap で手作業? いやいやいや。自分、不器用ですから。(意味が違う。)

※ EPEL は互換性、依存関係で悩むことが少なそう。サポート云々は聞いてみるのがいちばんか。

[2007-10-29 追記] EPEL の記述を追加。これが RHEL 外部リポジトリ的には本命か?

cf. yum リポジトリで特定のパッケージだけを扱う

Tags: Xen Linux

*1 ports はたまに外れ引くことあるけど^^;

*2 厳密にはちょっと違うけど

*3 console が手元の screen と相性悪くて最初何がなんだか分からなかった。screen てチョコチョコこういう現象に出くわすよね。


2007-10-27 [長年日記]

_ 日本はどこの業界も異常という話

404 Blog Not Found:惰訳 - 建築士がプログラマーのごとく働かねばならぬとしたら

Dan の中の人は「全プログラマーが泣いた。」と書いたが、コメント欄では

建築でもデザインでもこんなの日常

という反応がいくつも。ひどいのは業界ではなく日本という土地なのか?

まぁでもこんなに最初になんでも言ってくれるなんて、親切すぎて泣ける気はしますけど。たいていこういうのって、できあがる直前かできあがってから出てくる話でしょ?

2007-10-26 - haruki からの平面波

こっちは最後の

追々伸: もしかして、あたしが必要なのは家じゃなくてトレーラーハウスかも。もしそうなら、どんなのを買えば良いのか教えて!

が秀逸。そんなもん自分で探しに逝けやゴルァと思いながら業者探しする姿を想像して泣けた。(でもたぶん実際探すのは営業の人)

_ VPC for Mac はもはやステということか

Mactopia Japan : サポート情報

Virtual PC for Mac をお使いの皆様へ

Mac OS X 10.5 Leopard 上での Virtual PC のご使用はサポートしておりません。PowerPC 上に Mac OS X 10.5 Leopard をインストールした環境での使用もサポート対象外となります。

※ たぶんそのうち別なページにこの内容は移るだろうけど。

つまり捨てろということですな。まぁ Intel Mac なら VPC じゃなくていいんだし。Bootcamp も他の方法もある。

お仕事機械をどうしたものか。さすがに Panther はもう Apple がサポートしなくなるよね。Fink の対応を待って移行したいんだけど。Classic環境はなくてよくなったはずなのでいいとして、Windows が完全に要らなくなるわけでもない。あー余ってる実機でやればいいのか。邪魔だな。邪魔だけど各種エミュ環境を用意しようと思ったら x86 系の機械があった方が助かるのは間違いないな。その気になれば SheepShaver で Classic そのものが再現できるし。(そこまでやる必要はきっとないに違いない。)

Tags: MS Apple OSX

_ Sunbrid & Lightning 0.7

Calendar Weblog: Lightning 0.7 & Sunbird 0.7 have been released

最近全然チェックしてなかった。

Lightning のインターフェイスがよくなってる。前はインストールしたら Outlook Express のアドレス帳みたいな位置にずっとカレンダーが表示されっぱなしでうざかったんだけど、メールインターフェイスとカレンダーインターフェイスをガラッと切り替えられるようになった。この方がいいな 。

その代わり Today Pane という新しいペインができた。

+---+------+--+
|   |      |  |
|   +------+  |
|   |      |  |
|   |      |  |
+---+------+--+

スクリーンショットは加工が面倒なので AA で。右端が Today Pane. これはショートカットやツールバーのボタンで簡単に on/off できる。ここに Event や Task がこじんまりと収まってくれる。

なかなかいいかも。

Sun Java Calendar Server は知らんので無視。

_ いつの間にか Cygwin で screen が使える

久しぶりに Cygwin 環境を揃えてみた。

terminal は ck に置いてけぼりをくらったので例によって CygTerm で Putty を。こうして記録を取っていたおかげで今回も迷うことなく環境を構築できた。ありがとう2年半前のオレ。uname -r は

1.5.24(0.156/4/2)

でまぁそれはともかく。インストーラの中に screen(4.0.3) があったので使ってみた。

動くじゃん

おぉ。これはいいな。detach, attach できなかった問題も修正されている。terminal の設定が SJIS になっているので .screenrc に

defencofing SJIS

を書けば日本語も問題なく扱える感じ。ついでに .emacs も

(set-language-environment "Japanese")
(set-terminal-coding-system 'sjis)
(set-keyboard-coding-system 'sjis)
(setq-default buffer-file-coding-system 'sjis)
(set-default-coding-systems 'sjis)

で日本語ファイル名も問題なさげ。zsh で日本語ディレクトリに cd できないけど、これは放置でいいかなぁ? Emacs の M-x shell だとイケるし、そもそもそんなに必要性もなかろう。

Tags: MS Cygwin

2007-10-29 [長年日記]

_ yum リポジトリで特定のパッケージだけを扱う

最近すっかり yum 使いに。たまに portinstall とか、手が不思議な動きをするのは内緒。それにしても yum はなんか遅くないですか。apt にした方がいいのかなぁ。でも運用始まったらこんなの頻繁に使わないだろうしなぁ。

えー基本的には /etc/yum.repos.d/ 以下でリポジトリごとに .repo ファイルを置いてあるものとする。

そのファイルの中で

exclude=除外パッケージ名のカンマ区切りリスト

or

includepkgs=利用するパッケージ名のカンマ区切りリスト

という形で特定する*1。ともに *, ? の glob が利用できる。

この指定があれば search などの際に該当するパッケージ、あるいは該当するパッケージ以外だけがリストアップされる。試しに以下のように

[fedora-extras]
name=Fedora6 - Extras
baseurl=http://ftp.riken.jp/Linux/fedora/extras/6/i386/
gpgcheck=1
enabled=1
gpgkey=http://ftp.riken.jp/Linux/fedora/extras/RPM-GPG-KEY-Fedora-Extras
priority=2
protect=1
includepkgs=namazu*,kakasi*

fedora extras の riken mirror を指定してやると、

$ yum list all | awk '$3 ~ /fedora/'
kakasi.i386                              2.3.4-22.fc6           fedora-extras
kakasi-devel.i386                        2.3.4-22.fc6           fedora-extras
kakasi-dict.i386                         2.3.4-22.fc6           fedora-extras
namazu.i386                              2.0.16-1.fc6           fedora-extras
namazu-cgi.i386                          2.0.16-1.fc6           fedora-extras
namazu-devel.i386                        2.0.16-1.fc6           fedora-extras

てな感じで fedora-extras の中で利用できるパッケージは kakasi と namazu 関係のものだけになる。*2

ま、man 5 yum.conf の劣化コピーなんですが自分のためにメモ。

cf. CentOS 初挑戦で yum リポジトリに悩む

Tags: Linux

*1 include は最後の s とか忘れがちなので注意。

*2 ただこれやっちゃうと何か追加したいパッケージが出てくるかもしれないというときに不安になるよね。別名で同じリポジトリを enabled=0 でセットしておくといいのかも。


2007-10-30 [長年日記]

_ もっと誉められてしかるべきだ

と自分が感じている原因はなんなのだろうか。

誉められて育ってこなかったと自分が感じているからかなぁ。

なんか怒られたことしか覚えてないもんな。

誉められまくって育てばもっと人格者になれたのだろうか。

そんなわけないよね。

なんつーか。

まぁ単なる気分の問題であればそれでいいんだけどねぇ。

感謝される仕事ってステキよね。まぁありがとうと言われるだけで満足かっつーとたぶんそんなこたぁねんだけど。

アウトプットがないからですかそうですか。うーむ。

思い出した。自分で過去の自分に感謝することはよくあるのだけれど、現在の自分は未来の自分からの感謝を受け止めることができない。だからいつも現在の自分は何かがくすぶったままだ。

むずかしいね。

Tags: 日々

2007-10-31 [長年日記]

_ go-pear.org なんてねぇ!

ドメインごとありゃしねぇ。

site:pear.php.net go-pear - Google 検索

つーことで

http://pear.php.net/go-pear

が正解。

そーーーーーーーいえば。大昔はこの URL だったような気がしてきましたよ?

つかさ。アナウンスねーの? アナウンス! なんか

PEAR :: Doc Bug #12250 :: go-pear.org domain is expired..

こんな報告が上がっているのがついこの間なのでもしかしたら中の人は何か頑張ってて、そのうちしれっとドメインも戻ってくるのかもしれないけど、だからと言って現時点で何のアナウンスもないのってどうなの? pukiwiki.org がドメイン落としたのはまだ失笑程度で済むけど、Pear がこういうことやってるのはどうなんだ。マニュアルにはしっかり go-pear.org って書いてあるんだからさ。なんか対処してくんないとみんな困るでしょ?

ガッカリだよ!

Tags: PEAR PHP

_ PostgreSQL 8.1 以降、ユーザーとかグループとか言わない

おっつ。

データベースロールと権限

ロールの概念には、"ユーザ"という概念と"グループ"という概念が含まれます。 PostgreSQLバージョン8.1より前まででは、ユーザとグループは異なる種類の実体として扱われていました。しかし、現在ではロールしか存在しません。すべてのロールは、ユーザとして、グループとして、またはその両方として動作することができます。

おっつ。

  • LOGIN 属性を持つ ROLE(従来のユーザーに相当)
  • LOGIN 属性を持たない ROLE(従来のグループに相当)

という具合に分かれるらしい。

リストアしようとしたら role がないと言われて一瞬 ( ゜д゜) てなたよ。

Tags: DBMS