2006年2月アーカイブ

とりあえず作っといた。del.icio.usのロゴと並ぶとなぜかちょと嬉しい…。
package Plagger::Plugin::Widget::Extractor;
use strict;
use base qw( Plagger::Plugin );

use Encode;
use HTML::Entities;
use URI;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'publish.entry.fixup' => \&add,
    );
}

sub add {
    my($self, $context, $args) = @_;
    $args->{entry}->add_widget($self);
}

sub html {
    my($self, $entry) = @_;
    my $uri = URI->new('http://extractor.47objects.com/url');
    $uri->query_form(
        url => $entry->permalink,
    );

    my $url = HTML::Entities::encode($uri->as_string);
    return qq(<a href="$url"><img src="http://extractor.47objects.com/static/images/favicon.gif" alt="extract it!" style="border:0;vertical-align:middle" /></a>);
}

1;
Plaggerが流行っていたのですが、仕事でなかなか触る時間がなかったのですが、先週末やっと時間ができたので触ってみた。とりあえず、bloglines2gmailを使っていた身としては、bloglines → gmail以外の選択肢がいろいろ増えたのは素直に嬉しいところです。

んで、自分はlivedoor フレパmixiの友達の日記を自前でRSSにしてそれをリーダーで読んでいたのですが、Plaggerではlivedoor フレパmixiから取ってくるのはあっても、RSSやAtomなどフィードに出力するPublish機能がなかったようだったので、ないのかな?とIRCで尋ねてみたところ作る?というのでさっそく作っているところです。

とりあえず作ってみたものを見せてみたところいきなりの駄目出し(笑)

今後いろいろと修正を加えて次のリリースにはリリースしたいっす。

とりあえず、現状のコードはこちら。キタナイ…。
先日リリースした Extractor の Bookmarklet(コメントをチェック(浮き出る版))のデザインや仕様を変えました。主な変更点としては、「マウスでドラッグできる機能」が付いたのとデザインをがらっと変えました。

その際にma.laさんの最速インターフェース研究会で紹介されていたJavaScriptでの遅延ロードのテクニックを拝借させて頂きましたので、覚え書きのつもりで今回どのようにしてそれを使ったのかについて書いておきます。


まず、先に紹介した Extractor の Bookmarklet がなにをやっているかというと、現在見ているページに script タグのエレメントを生成して、他のドメインのJavaScriptのソースを読み込んでいます。Bookmarklet を分解すると下記になっています。具体的には createElement で script タグを生成して、各プロパティ(language、type、charset、src、id)を設定しています。 (ちなみに Extractor で使っている JavaScript の文字コードは UTF-8 なのですが、読み込む際に表示していたページがShift_JIS や euc-jp であっても、これを行なう際に charset を指定してやれば、どうやらブラウザがうまいこと表示してくれるようです!これは知らなかった。)

※説明しやすいようにURLなどは適宜変更しています。
javascript:
prefFile='';
// 現在表示中のページのURLを取得
u=encodeURIComponent(location.href); 
// scriptタグのエレメントを生成
void(z=document.body.appendChild(document.createElement('script')));
// language、type、charsetなどを設定
void(z.language='javascript');
void(z.type='text/javascript');
void(z.charset='utf-8');
// srcで外部のJavaScriptを指定する
void(z.src='http://extractor.47objects.com/hover.js?url='+u);
// scriptタグのidを設定
void(z.id='extractor');
ここまではなんとか思い付いたのですが、この読み込んだ hover.js という JavaScript 内で prototype.js を読み込もうとして、また script タグのエレメントを createElement で生成してやったのですが、うまく読み込んでくれませんでした。

なんでだろうと調べてみたら、どうやら prototype.js は hover.js のスクリプトを読み込んでから読み込みが開始されるために、prototype.js 内のクラスや関数を使用するためには、prototype.js の読み込みを待ってから hover.js を実行させる必要がありました。

そこで最速インターフェース研究会の登場です。最速インターフェース研究会の「[Ajax] JSAN構想とリモートデータの取得とUserJavaScript」の記事にあるwaitという関数を使うことにより、prototype.js で定義されている関数を読み込み済かどうかを確認後に hover.js を実行するようにしました。

具体的なやりかたとしては、下記のように行いました。

// 最速にある wait 関数
function wait(a,func){
	var check = 0;
	try{
		eval("check = " + a);
	}catch(e){
	}
	if(check){
		func()
	}else{
		var f = function(){wait(a,func)};
		setTimeout(f,100);
	}
}

// まずは、prototype.jsの読み込みの準備
var s document.appendChild(d.createElement("script"));
s.type = "text/javascript";
s.src = "http://example.com/js/prototype.js";

// prototype.jsで使いたい関数が読み込まれてから、その関数を使っての処理
wait('Class.create', function() {
	// 実行したい処理
	alert("Class.create loaded!");
	var newclass = new Class.create();
});
このようにすることにより、遅延ロードを行なうことが可能になるようです。このテクニックを使えば、色々な JavaScript のライブラリをリモートに置いたりして使うことが可能になるので便利ですよね。これを作っていてはじめて実感しました…。

Fri Feb 17 20:48:48 2006 JST現在Extractorがdel.icio.usに拒否られ中です。
このmashupの時代に…んもー。

のちほど復活させます。
ご迷惑をおかけしてすみません。

Fri Feb 17 23:25:50 2006現在直っています。

extractor_hover.gifExtractorに新機能を追加しました。今まではこちらのサイトまで来てコメントを表示していましたが、前のエントリのコメントでせきむらさんがあるサイトの様にhoverで表示させて欲しいというのをヒントにごにょごにょして作りました。

そのBookmarkletはExtractorのサイトの方に「コメントをチェック(浮き出る版)」という名前でありますので、そちらから入手してください。


現状はただ表示するだけで、移動とかはできません。スクリーンショットのように表示されるだけです。一応基本機能として「左上の[x]、下部のESC to closeをクリックするかESCボタンを押すことで表示が消える」ようになっているのと「Bookmark Thisをクリックすることでブックマークができる」ようになっています。

どうですかお客さん。

extractor_commenter_num20060214.gif先日公開したExtractorですが、他にもブックマークしている人はいるのに、コメントした人だけを表示される仕様になっていました。でもコメントした人だけだと、そのURLの盛り上り感がわからないかなと思いました。

そこでコメントしていなくてもブックマークしている人も含めた総数を出すようにしました。各ブックマークコメントの上部の[ Number of total commenters: 13 ]という表示がそれになります。


yapc_asia.jpgチケットゲット!

extractor.gifExtractorっていうサービスを作ってみた。どんなサービスかっていうと、あるURLに対して巷にあるソーシャルブックマークのコメントを取ってきてまとめて表示するサービスです。今のところ「はてブ」と「del.icio.us」にのみ対応しています。表示されるのはそのURLに対してコメントをなにか入力している人のみになっています。コメントがないけどブックマークしている人もいると思いますが、それは表示されないようになっています。

あとコメントを表示した画面からはてブにもdel.icio.usにもpostできるようになっていますので、ブックマークする前に他の人がどういうコメントを出しているのだろうかというのに調べるのによいかなと。

標語は「ちょっとまて、ブックマークする前にExtractor」です。
どうぞよろしくお願いします。

また、各ブックマークサービスのことを考慮し、結果は1時間キャッシュするようにしているので最新の情報でない可能性もありますのでご注意を。

※いきなりロゴマークありますけど、別に気合がはいってるわけではなくたまたま知り合いのデザイナさんに頼んだら快く作って頂けたのでそれを使ってます。
※こういうサービスって他にもあるのかな…。

スラッシュドット ジャパン | DDNSサービス「hn.org」が2006/2/15でサービス停止

S0R5曰く、"利用者宛に来たメールによると、Dynamic DNSサービスを提供するhn.orgが、2006/2/15をもってサービス停止するとのこと。Webサイトにもその旨の告知が掲載されている。とくにサービス停止の理由は載っていないようだ。私は気付いたらここのサービスを4年以上使っていたので、今まで無料で使わせていただき感謝したいと思う。さて、移転先はどうしようかな…。"

昨日の hn.org がサービスを停止するという報を受けて、clouder.jp が苦境にたたされました。なぜなら、なにを隠そう clouder.jp は hn.org の dynamic dns を使っていたからです。

無料サービスだしこういう事態もある程度は想定していたものの、いざその場になるとDNSの移行はめんどいなぁと思ってしまいます。でもこのまま放っておいたら clouder.jp が見られなくなりますので、しかたなく重い腰を上げて移転先を探し始めました。

そして、小一時間ネット上をさまよっていたら EveryDNS というよさげな dynamic dns サービスをみつけました。ちょっと使ってみたところ操作感とかもよさげだったので、これを使用することに決めました。

移行の決め手となったのは「無料」「ワイルドカードが使用可」「登録時の入力項目が少ない」「MX、CNAME の設定ができる」でしたが、 EveryDNS はこれらをクリアしていました。

登録方法等については、ネット上で他の方が詳しく解説しているのでそちらをご参照下さい。(※ちなみに解説見なくても設定できるぐらい簡単なインターフェイスになっているのも気に入りました)

参考 URL:
EveryDNS 設定方法
独自ドメインの設定( EveryDNS.net )
EveryDNS 設定 | リナックスでサーバ構築

問題がないかはこれから少し使ってみて見極めることにしたいと思います。

すごいリファラを付けてくるんですが!
長~いので、全部見たい人はエディタとかにコピペしてゆっくりとお読み下さいませ。

#IP以外は気にせず晒してみる…。

XXX.XXX.XXX.XXX - - [03/Feb/2006:15:45:52 +0900] "GET /yoshiki/mt/archives/000622.html HTTP/1.1" 200 22151"feeds:RSS&abcdane.net/index.rdf&akutoku.seesaa.net/index.rdf&antipop.gs/mt/index.rdf&bb.watch.impress.co.jp/cda/rss/alphageek.rdf&blog.bulknews.net/mt/index.rdf&blog.dascorp.co.jp/feedaggregator/rss.xml&blog.excite.co.jp/aikouemura/index.xml&blog.excite.co.jp/koushien/index.xml&blog.hitachi-system.co.jp/index.xml&blog.japan.cnet.com/kenn/index.rdf&blog.japan.cnet.com/nakajima/index.rdf&blog.livedoor.jp/dankogai/index.rdf&blog.livedoor.jp/insidears/index.rdf&blog.livedoor.jp/insighter/index.rdf&blog.livedoor.jp/jdash/index.rdf&blog.livedoor.jp/manicdee/index.rdf&blog.livedoor.jp/nipotan/index.rdf&blog.livedoor.jp/warata2ki/index.rdf&blog.mf-davinci.com/yoshida/atom.xml&blog.nikkeibp.co.jp/mansion/atom.xml&blog.sonymusic.co.jp/halcali/index.rdf&blog.thebadtiming.com/feed/atom/&blogs.itmedia.co.jp/closebox/atom.xml&bush.air-nifty.com/bushlog/atom.xml&buy.livedoor.biz/index.rdf&cfmx7.seesaa.net/index20.rdf&cl.cocolog-nifty.com/dtp/index.rdf&d.hatena.ne.jp/honeywest/rss&d.hatena.ne.jp/jdash/rss&d.hatena.ne.jp/marusan55/rss&d.hatena.ne.jp/mohri/rss&d.hatena.ne.jp/naoya/rss&d.hatena.ne.jp/takanabe/rss&d.hatena.ne.jp/umedamochio/rss&d.hatena.ne.jp/yomoyomo/rss&del.icio.us/rss/33rpm&del.icio.us/rss/deepdiver&del.icio.us/rss/for/peyoung?private=10321d104fcdf74fd48c2e91135022d9&del.icio.us/rss/msuga&del.icio.us/rss/peyoung&del.icio.us/rss/worldnagata&dig.csail.mit.edu/breadcrumbs/blog/feed/4&feeds.feedburner.com/otsune&fugazo.blog4.fc2.com/?xml&ganymede.synapse-blog.jp/cfdev/index.rdf&googleblog.blogspot.com/atom.xml&hokotate.cocolog-nifty.com/blog/atom.xml&hotwired.goo.ne.jp/news/index.rdf&iamlazy.exblog.jp/index.xml&japan.cnet.com/rss/index.rdf&kengo.preston-net.com/index.rdf&labs.cybozu.co.jp/blog/akky/atom.xml&marugoto.exblog.jp/index.xml&mycasty.jp/hoshan/index.rdf&nais.to/~yto/clog/cl.rdf&namazu.org/~satoru/blog/index.rdf&negishi.exblog.jp/atom.xml&neta.ywcafe.net/index.xml&nikkeibp.jp/jp/flash/index.rdf&nobi.cocolog-nifty.com/nobilog2/atom.xml&oden.way-nifty.com/blog/atom.xml&radar.oreilly.com/index.rdf&ramenlove.livedoor.biz/index.rdf&rhyme.33rpm.jp/blosxom/index.rdf&satoshi.blogs.com/life/atom.xml&slashdot.jp/slashdotjp.rss&slashdot.jp/~xap/journal/rss&spaces.msn.com/members/furukawablog/feed.rss&sw.homelinux.net/php/rss/rss.php&tokyo.txt-nifty.com/fukublog/atom.xml&velvet.exblog.jp/index.xml&www.100shiki.com/atom.xml&www.alterope.co.jp/endoh/index.rdf&www.asfusion.com/blog/rss.cfm?mode=full%26lang=en&www.atmarkit.co.jp/rss/rss2dc.xml&www.barks.jp/RSS/barks_news.rdf&www.bpurcell.org/blog/rss.cfm?mode=full&www.buntel.com/blog/rss.cfm?mode=short%26%2338;&www.coldfusionlab.com/blog/rss.cfm&www.corfield.org/blog/rss.cfm?mode=short&www.enpitu.ne.jp/tool/rdf.cgi?id=99799&www.excite.co.jp/News/xml/?source=excite_blog_news&www.fladdict.net/blog-jp/index.rdf&www.forta.com/blog/rss.cfm?mode=full&www.goodpic.com/mt/index.rdf&www.h-yamaguchi.net/atom.xml&www.hyuki.com/t/rss.xml&www.javaopen.org/~yasuyuki/diary/atom.xml&www.klynch.com/index.rdf&www.lolajl.net/cfosxblog/atom.xml&www.markme.com/notifications/coldfusion.xml&www.markme.com/notifications/flex.xml&www.markme.com/notifications/jrun.xml&www.milkstand.net/fsgarage/index.xml&www.nakanohito.com/atom.xml&www.nintendo-inside.jp/inside.rdf&www.onflow.jp/blog/atom.xml&www.org44.com/blog/atom.xml&www.podcastjuice.jp/rakugo/atom.xml&www.remus.dti.ne.jp/~a-satomi/nikki/rss.rdf&www.rubyist.net/~matz/index.rdf&www.simeji.com/diary/t.rdf&www.stylesheet-stylebook.com/wp-atom.php&www.timekiller.jp/index.xml&www.tkamiya.net/junk/index.rdf&www.yasuhisa.com/could/rss2.xml&www.yukan-fuji.com/atom.xml&www3.asahi.com/rss/index.rdf&x.nest.jp/rss.rdf&x51.org/index.rdf&yet.s61.xrea.com/mt/atom.xml&uuid:20DA1C01-7729-4C8F-93FE-4F71F77630C2" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/417.9 (KHTML, like Gecko) Safari/417.8"

radio_remote.jpg

先日の MacWorld で iPod のアクセサリ Radio Remote が発表されていました。iPod を買ったらぜったい買うぞ!と思っていたので、お財布と相談をしつつ買ってみました。今回はそのレポです。今後買おうかと思ってる人に参考になればと。

使える iPod の種類は iPod nano か 5G(第5世代、videoの付いてるやつね) の iPod です。それと iPod Updater を 1.1に挙げる必要があります。(ただし 1.1 に上げると不具合が出る場合があるという話もちらほら聞くのでご注意を)

上記の条件が揃えば、あとは Radio Remote を iPod につなげると「ラジオ」というメニューが増えます。ただラジオを受信する前に地域の設定をしなければならないようで、現状は「ヨーロッパ」「USA」「日本」の3つの地域が選べるようです。もちろん自分は日本を選びました。

あとは「ラジオ」のメニューを選べばよいらしいので、選んでみる。するとサーっという音が聞こえてきました!!とりあえず、ホイールを動かしいくつかのラジオ局を聞いてみました。

意外と音質は良いです。今使ってる場所がかなりの高所なので、そのせいかもしれませんが…。つまり受信状況がよい所であれば、けっこういい感じに聞こえるということですね。

ラジオ局のセットは簡単にできます。セット数の Max は…、今6つしてるけど説明書には限界は載ってないようです。いくつまでできるのだろうか。

とりあえず今日はこれが届いたばかりだという理由もありますが、ラジオを聞き始めたら音楽を聞かなくなってしまった…www まぁ「聞いたり」「見たり」「受信したり」と選択肢が増えるのはよいことだと思います。

最後に不満を2つ。1つは、コネクトする部分がイヤフォンのところではなく下の Dock とつなぐところにつなぎ、その先にイヤフォンをさす形なので(ちなみにイヤフォンは上にさすこともできます。そのためiPod本体の上部とリモコンの両方にイヤフォンをさして二人で聞いたりすることもできるようです)、ケースを使ってる人でケースの下に穴が開いてないものは買い換えを迫られそうですよ。もう1つは、単純にコード部分が追加となるため、今まで使っていたイヤフォンが純正でなく、自分の使ってたイヤフォンはコネクタの部分がL字型のやつのため、それをリモコンにさすとなんかスッキリしません…。

とまぁ現状はこんな感じです。

Apple iPod Radio Remote MA070G/A
アップルコンピュータ (2006/01/12)


Apple iPod 30GB ホワイト [MA002J/A]
アップルコンピュータ (2005/10/20)
おすすめ度の平均: 4.21
4 ビデオ早送り方法
4 ビデオはおまけ
4 iPodでも、PSPでも再生できる映像ファイルが便利

たまには技術的ではない話題を。。。

本日(正確には昨日)、弊社に最速インターフェース研究会の中の人がjoinされました。
GoogleGoogle SuggestGoogle Mapsを公開してAjaxが流行り始めた2004年終りから2005年初頭、どこかからリンクされていたそのブログをみつけて、購読を始めたところ「最近になってようやくJavaScript関係、動的ロードを使ったテクニック等について話せる相手ができまして、、なかなか充実しています。」というようなことを書いているのを見て、こういう人がいるんだなー、すごいなーと思ってました。それから最速インターフェース研究会を購読させて頂いていますが、自分がAjaxを作るときにはそこで公開されているコードを参考にさせて頂く場合も多いです。(実際にお会いしたのは確かshibuya.pmの後の呑み会でした。うぉ、こ、この人か!?というのが正直な最初の印象でしたwww)

にぽたん研究所の方も書いているように、弊社にはサーバサイドの技術に関しては長けている方はいますが、クライアントサイドの技術に関してはまだまだな部分があり、未開拓の地と言えます。そこに刺激となるには十分過ぎるぐらいの技術を持った方のjoinということもあり、これまたにぽたん研究所のエントリにかぶせるような形で申し訳けないですが、正直ワクテカなわけです。

個人的には、ブログなどを読んでいるとクライアントサイドの技術だけでなくその他の物事に対する発想という点でも「そう考えるか!」といった、人が考え付かないような違った見方もできる方なのではないかなと思っていたりしますので、自分にとっても良い刺激になる予感がします。

#といいつつ最近Ajaxには関係ない仕事をしている今日この頃ですが…www

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja