FriendFeed の widget を貼ってみた

以前

Twitter / wtnabe: friendfeed を blog パーツ化できれば …

なんてことを言っていたんだけど、普通にできてた。いつできたのかは知らないけど。ということで

FriendFeed - Embed FriendFeed

辺りから widget を作って貼っ付けると便利だと思うよ。Sign in していれば自動的に自分の feed の widget が作れる。これまでは Twitter Updates を貼ってたんだけど、代わりに FriendFeed widget にしてみた。これなら delicious での活動も github での活動もまとめて貼れる。

tDiary に貼る場合はユーザー定義 CSS のあとに widget がくるので、!important 付けまくってやらないとスタイルの調整ができないところだけ注意。あ、あとなんかこの widget は幅を px で決め打ちしたがってるけど、そこは width パラメータを削除してやれば大丈夫。普通に馴染む。

色以外は。

ロゴの色にバリエーションがあれば嬉しかったなー。うちは暖色系なので、青系の FriendFeed のロゴがどうにも合わない。仕方ないのでロゴは CSS で display: none してしまった(乱暴)。

au のドメイン認証規制でちょっと悩む

なりすまし規制×
指定受信携帯メール(各キャリア)を許可
ドメイン認証規制

の状態で docomo.ne.jp を詐称したメールが普通に届いちゃう。これは au の現在の設定メニューでは

  • 「ドメイン認証規制」は「なりすまし規制」のオプションではなく、独立した一つの機能
  • 指定受信は最優先されるホワイトリスト

だからか。本当に携帯からのメールかどうかはとりあえず「なりすまし規制」を on にしておかないとチェックされないというかチェックはしててもホワイトリストの方で携帯ドメインのメールが許可されてスルーしちゃう? (もしかすると携帯ドメインの方は「ドメイン認証規制」は無関係で「なりすまし規制」しか効果がない、ということかもしれないけど。)

なりすまし規制
基本設定の「一括指定受信」×
ドメイン認証規制

にした。携帯ドメイン以外の PC から送ったメールが拒否された。ということは

  • ドメイン指定、アドレス指定のホワイトリストに登録せず
  • 携帯ドメイン以外からのメールを受信するためには
  • 「一括指定受信」の設定は必要

てこと? 結局

なりすまし規制
基本設定の「一括指定受信」のインターネットメール
ドメイン認証規制

にしてみた。これで様子見してみるか。

何をしたいかというと、個別にホワイトリストを管理せずに spam を減らしたいっつーことなんだけど。今まで細かくドメインやアドレスのホワイトリストをちまちま登録して、それ以外のインターネットメールはすべて拒否してたんだけど、ちょっとやっぱ不便だし面倒なので、ドメイン認証規制に期待したい、ということです。

ちなみにこの au の「ドメイン認証規制」では from 詐称は普通にできます。from ではなく envelope-from のドメインか、なければ HELO ドメインを見て SPF レコードを引きにいく模様。したがって自分の使っているプロバイダが SPF レコードをちゃんと用意してれば基本的に from 詐称はし放題。別に悪意がなくても from を書き換えたいときはあるわけで、そういうときにも対応できる形になってて嬉しい。

ただし、携帯のドメインでは X-SPF-Received というフィールドがないメールでも届いちゃうので、たぶん上に書いたように「なりすまし規制」しか見ていない。たぶん。

なんか、設定方法はいろいろ書いてあるんだけど、それぞれどういうメールを規制してるのかがよく分からんなぁ。

探したところ

KDDI au: 迷惑Eメール防止方法 > ニーズで探す

しか、それっぽいページが見つからない。みんなこれだけで分かるの?

cf.

JavaScript で外部ライブラリの load

分かっている人には今さらなネタです。自分用に整理してみました。

Ecmascript そのものには外部ファイルを読み込む機能はない。ホスト環境の機能に依存する。ブラウザで動く JavaScript は HTML を解釈するブラウザの機能を利用し、

  1. <script> 要素を書き出す
  2. XMLHttpRequest

のどちらかの方法で外部ファイルを load する。(HTML の中に script 要素を予め書いておく方法は何も難しいことはないのですっぱり割愛 。)

※ ここに書いたものよりもう少し詳しい内容を「JavaScript の動的ロードで(結果的に)Classic Mac を除外する」、「XMLHttpRequest を使ったスクリプトのロードは意外と面倒」に書きました。よければそちらも読んでいただければと思います。

1. の方法の場合、どのドメインにある JavaScript でも load できる。この方法は外部のドメインにあるデータの読み込みによく使われるが、HTML の読み込みが完了した文章からこれを実行してもスクリプトの load がいつ完了したか知る方法がない。1また、他のドメインに置いてあるスクリプトは常に読み取れるとは限らないので自分のページのロード時間が外部の要因に左右されることになる。2

2. の方法の場合は XMLHttpRequest の特性上読み込めるスクリプトが同一ドメインのものに限定されるが、スクリプトのロード完了をイベントで知ることができるし、1 の場合よりユーザーを不用意に待たせてしまう可能性も低くなるだろう。

XMLHttpRequest を備えているブラウザしか相手にしないのであればこの方法は安全だし分かりやすいのでオススメだと思う。

以下、注意事項がいろいろある 1 の場合について。

user javascript での load、あるいはユーザーのアクションによる load

この場合、すでに HTML 文書そのものは load し終わっているので、スクリプトの load の完了は window.onload イベントでは補足できない。したがって何らかの手を加える必要がある。

具体的には 最速 ma.la 方式に手を加えるのが恐らくいちばん楽。

cf. JSAN DEMO

function onloaded( objname, func, thisobj ) {
  var obj = undefined;
  try {
    eval( "obj = " + objname );
  } catch ( e ) {
    ;
  }
  if ( typeof obj != 'undefined' ) {
    func.call( thisobj );
  } else {
    setTimeout( function() {
                  onloaded( objname, func, thisobj );
               }, 100 );
  }
}

一応オブジェクトを作っていても動きますよバージョン3。呼び出しは

onloaded( ObjectName, function() {
                        function();
                      }, this );

という形になる。4

ただしこれは読めば分かるが終了条件が危うい。目的とするオブジェクトが永遠に生成されない場合5は onloaded の処理は終了しない。

ということで本当はこれは

  • 外部ライブラリの load などをまかなうオブジェクトの中に綴じ込め、その中のメンバ変数とかを頼りに再帰回数を制限しておく
  • 外部ライブラリの名前はフルのファイル名ではなくオブジェクト名を与えると
ObjeactName + ".js"

に展開されてロードされるとか、命名規則を作っておく

などの工夫をした方がよいだろう。

そうすればすでに読み込み済みのライブラリを多重 load してしまうこともない。なんか書いてるうちに段々 DoJo や JSAN に似てくるな。

JSAN はこの bootstrap の部分だけ利用するのもアリかもしれない。Perl 界隈向けっぽいがおいしいところは利用すべきかな、と。

GreaseMonkey

どうも名前空間と言うか、セキュリティを考えて何か細工が入っているっぽい。(全然ちゃんと調べてない。)Module か greasemonkeyService の中で実行されるのかな? <script>要素書き出し方式で読み込んだライブラリが GreaseMonkey 上では動かずに Firebug 上では動くので恐らくそう。

  • gm script の中で script 要素を書き出してスクリプトを読む場合は unsafeWindow を利用するとよさげ
  • gmXHR を利用すると unsafeWindow は不要っぽい

上に書いたモジュールの load などを行うものをオブジェクトとして作っておいて、実行環境を判別して gm と通常のページ、bookmarklet などの環境を気にせずに load() が呼べたりするとステキっぽい。

参考

JSAN

JSAN も JSModule も中で XMLHttpRequest でスクリプトを取得するようになってるのね。Array#push も使ってるし、MacIE は無視、っと。

※ まぁ今さら MacIE だけ特別に気を使わなきゃいけないのもどうかとは思うんだけど。MacIE も MacOS 9 もとっくの昔にメーカーがサポート打ち切ってるんだから。どうしてもという人は本当に真剣に iCab の支援をすべきだろう。あれが唯一の希望なんだから。

  1. Firefox の場合は、文書の読み込みと同時に実行すれば window.onload の瞬間にはすべてのスクリプトが揃っているので難しいことを考える必要はないっぽい。localhost でわざと setTimeout() で時間を遅らせて load してみたけど大丈夫だった。でも他のブラウザは全滅なんだよな。あと iframe 使えばその辺の問題は回避できるのかもしれないけど、試してない。iframe 好きじゃないしなぁ。 

  2. 404 の場合はまだしも、外部ドメインのサーバが落ちているなどの場合はその判断が確定されるまでの間、ブラウザが待たされてしまう。 

  3. ただし MacIE では Function#call メソッドがないので動かない。 

  4. もとの wait() って関数名が、どうも待ったあとに関数を実行するイメージが湧かないので名前は変えてあります。 

  5. オブジェクトの名前を間違って書いてしまったとか呼び出し先のサーバが落ちている場合、もっと言えばオブジェクトの構成が変わってしまった場合なんかもそう。 

早い話がグローバル変数なんか使ってんじゃねぇぞ、と

yohgaki's blog - PHPの現行リリースに重大な脆弱性(PHP4.4.0以下、PHP5.0.5以下)

一部それだけじゃないんだけど、

  • register_globals
  • $GLOBALS[]
  • import_request_variables()

ともグローバルスコープの変数を使うという段階でイマドキどうなんだそれ、という話なわけで。

  • スーパーグローバル変数を使って
    • validation を通過したものをローカル変数に入れる
    • あるいはローカル変数に持ってきてからでもちゃんとチェックする

っつ−手順を踏んでから使えと。グローバル変数はとにかくどこで何が起きるか分かんねーんだから、そんなもん使うなと。とりあえず E_ALL で書けと。

沿志奏逢(Bank Band)

Bank Band については ap bank 参照。

じっくり聞くとけっこういいな。ぱっと聞いた印象ではこう盛り上がるに欠けるというか、やっぱ音が少ないし、ベースの歌が古くてどうしても耳や身体に入ってくる感覚がすぐにはしっくりこない。

個人的には元歌が好きなので

  • カルアミルク(岡村靖幸)
  • 糸(中島みゆき)

は当然気に入っている(元歌とのギャップも楽しめるってもんだ)が、他にも

  • 限りない欲望(井上陽水)

とか、さすがだなぁと思う。吉田拓郎もいいもんですな。

portsdb -uU

すげー遅い。ものすごい時間掛かる。これなら listupgrade の富豪アプローチの方がまだ速い。portsdb を利用した portversion が速くてもインデックス起こすのがここまで遅いとちょっと考えるなぁ。頻繁にやってればそんなに遅くないのかな。

ただ pkgdb が矛盾してると listupgrade はまったく機能しなくなるので注意が必要。あ、矛盾したときのメッセージは拾えるようにしておけばいいのか。

ちゅーことで listupgrade 20041104

#! /usr/bin/env ruby
# -*- ruby -*-

print "Have you executed CVSUP recently ?\n"
print "Please wait for a while. Take coffee break ;-)\n"

needupgrade = Hash.new()
results = false

cmd = open( '| sudo portupgrade -an 2>&1' )
while line = cmd.gets
  if ( line =~ /Upgrading '(.*)' to '(.*)'/ )
    needupgrade.store( $1, $2 )
  elsif ( line =~ /Listing the results/ )
    results = true
  end
end
cmd.close()

if ( needupgrade.size > 0 )
  maxlength = 0
  needupgrade.keys.each { |string|
    if ( string.length > maxlength )
      maxlength = string.length
    end
  }

  needupgrade.keys.sort.each { |pkg|
    printf( "%-*s --> %s\n", maxlength, pkg, needupgrade[pkg] )
  }
elsif ( results )
  print "All ports are up-to-date ! Congratulation !\n"
else
  print "Something wrong with ``pkgdb'', maybe ?\n"
end

正常に終われば最後に結果の一覧がずらずらと出るはず、という作り方。Upgrade の必要な ports はないが、そもそも結果一覧の表示がない場合は portupgrade がなんかトラブってるんじゃないか、と推測。たいがいは pkgdb の問題なのでそういうメッセージを出すようにした。

はてなのシステムを流用するのはいいんだけど

はてなダイアリー日記でコメントを受け付けているのは読みにくくてしゃーない。トラックバックのみにしてくれないだろうか。これでは広報的な側面の機能はかなりスポイルされてしまっていると思う。ダイアリーのシステムを使った方が発信が楽というのは理解できるけど、もっと工夫しておくべきじゃないかなぁ。

About

例によって個人のなんちゃらです