「404 Blog Not Found:納税者に税務署員までやらせる国」経由で「内田樹の研究室: Why do only fools pay the tax?」を読みました。
それは私が給与や原稿料を受け取るときに、「あ、消費税分5%上乗せしてください」と言えってことなのか?
内田樹の研究室: Why do only fools pay the tax?
私がそう言えば、出版社は「はいはい」と5%増しの原稿料を私に払ってくれるということなのか?
原稿料に消費税を上乗せしてくれる出版社って少ないんでしょうか? 私の数少ない原稿料受け取りの経験では、原稿料には消費税がちゃんと上乗せされてました。最後に原稿料を受け取ったのは、消費税がまだ3%だった頃なんですが。10年以上も前の話。その出版社が先進的だっただけなのかな。
原稿料をもらえる機会なんて、個人では滅多にないんですが、それでも消費税を受け取る機会は増えつつあります。例えば、アフィリエイトをやっている人。まだ消費税を上乗せして報酬を支払ってくれる会社は少ないのですが、リンクシェアは、消費税上乗せで支払ってくれます。
それ以外で消費税をもらったのは、同人誌の委託販売。コミックマーケットのサークル参加受付は抽選なんですが、抽選に漏れたところや、当日物理的に参加できない人のために、同人誌のみをコミックマーケット会場に送付して委託販売してもらうことができる制度があります。で、この委託制度を使って頒布した同人誌の売り上げに、消費税がプラスされて送金されてきます(委託手数料を引かれるので、売り上げ(もしくは委託販売申込み冊数)が少ない場合は、消費税よりも手数料の方が高くなる場合もあります)。同人誌を委託販売する人の話なので、あまり一般的な話ではないですが、個人でも消費税を受け取る機会があることは示せた、と思います。
自分たちで同人誌を頒布するときには消費税を上乗せしてないんですが、委託販売だと消費税を上乗せして頒布されるんですね。もっとも、個人のやっているサークルスペース経由で委託販売するときは、消費税を上乗せする例はまれだと思います。あくまでも、コミックマーケットの委託制度を利用した場合の話になります。
とはいっても、私の場合、確定申告が必要なほどの売り上げはないので、
だが、世の中には「そういうこと」をしなければならないと考えただけで死にたくなるようなタイプの人間もいる(私がそうだ)。
内田樹の研究室: Why do only fools pay the tax?
「そういうこと」(納税業務のために割かれる労働)をしなくてすんでいます。私も「そういうこと」はあんまりしたくないなぁ。
ちなみに
近所の八百屋さんが買い物をしたお客さんから消費税を受け取るのと同じように、プロスポーツ選手も年俸を受け取る時に年俸の支払先から消費税を受け取っています
ちょっと気になる!スポーツ芸能界の税金:プロスポーツ選手の年俸の消費税は?
プロのスポーツ選手も消費税を受け取る立場のようですね。
他に、個人が消費税を受け取る状況の例として
金地金を売却する場合には、売却先の業者から5%の消費税を受け取ることができます(高額の売買をすれば別ですが、個人の売買程度であれば、消費税の申告は必要ないかと思います。
金の魅力
といったケースがあるようです。そういえば、Yahoo! オークションで落札した商品に消費税を別途請求してくる人もいたなぁ。消費税の申告対象になるくらい取引してるのかな。そういう人は個人事業者になった方が税金が安くなるはずなので、すでに個人事業者になってるのかもしれませんが。
XML、学びの第一歩
livedoor Reader の442ヶ月問題、転じて443ヶ月問題(もしくは444ヶ月問題)について。
tsupoさんのところと、ブログの女王のところだけ442ヶ月絡みで
読めなかったのですが、昨日あたりから読めるようになりました。
なかの人が対応してくれたのかな?投稿者: ぴっくあっぷ (2006.06.16 午後 08:40)
[観] livedoor Reader の「442ヶ月」問題 - コメント欄
6月15日??17日頃に、今まで読めてなかった記事が未読として表示されるようになって、やっと直ったか、と安心していたら、18日から、また未読が一切流れてこない状況に逆戻り。ちなみに、16日時点では、依然として、「443ヶ月前」の表示が出ていました。
そして、今日。
これまで問題が発生していた Atom フィードに関して、いまさっき、livedoor Reader でちゃんと読むことができました。「編集」画面の方も、443ヶ月前という表示がなくなり、17時間前とか、通常の表示になっています。今度こそ、完全に直ったかな?
何が原因で発生していたのか、よくわからないままなんですが、直ってよかったです。
ただし、まだ「ココログの生成する Atom 1.0 フィードの中身がおかしい」件は直っていません。おかしくなる(MIME type と実際の中身が食い違っている)記事の数は減ったみたいですが、おかしくなるときはおかしくなるようです。
拙作のExtractorをlivedoor Clipに対応させました。使い方は今までと変わらず、同じ操作をするだけでlivedoor Clipのコメントが表示できるようになっています。
うそ、パクりました。にぽたん研究所から。
先に使い方から説明すると、まず「http://api.del.icio.us/v1/posts/all?」ここにアクセスすると、自分が今までにdel.icio.usへポストしたブックマークをすべて取得できるので、それを取得しておきます。ベーシック認証がありますが、それは自分のdel.icio.usのアカウントを入力してください。
次に下記のスクリプトを用意して、先程del.icio.usから取得したブックマークのデータ(all.xmlというファイル名にしておいてください)と同じディレクトリに置いたら、あとはスクリプトを実行するだけです。もちろんあとで紹介するWWW::SyncSBS::D2Lも用意する必要があります。
#!/usr/local/bin/perl
use strict;
use WWW::SyncSBS::D2L;
my $d2l = WWW::SyncSBS::D2L->new;
$d2l->livedoor_id('your_ld_id');
$d2l->livedoor_pw('your_ld_pw');
$d2l->sync;
![]()
I meant to write this up last night but got home a bit too late for that. If you've been a suffering with Yahoo! Messenger on your Mac for the last few years, download the new beta and rejoice.
This thing has been in the works for quite a while and hopefully you'll think it was worth the wait. The Messenger team has been banging away on this and getting internal folks to test it out. Now it's your turn.
Other mentions:
(comments)
arimyが占ってあげるね。
今日は「タイトル運下降気味」だよ。
お前も殺されちまう」吾郎:「タイトル、エリーを見殺しにしろっていうのかよ!」仲間たち:「…………
*このエントリのarimy占いは、BlogPet(ブログペット)の「arimy」が書きました。
最近 Perl でテストを書くときに Test::Class を使ってます。(もしかして常識?) これまでは *.t で Test::More をそのまま使ってたけど、テストが大きくなってくるとコードが分かりにくくなったり、自分であれこれしなきゃいけないことが多くてめんどくさい。
Test::Class は xUnit スタイルで Perl のテストを書けるフレームワークです。xUnit な Perl 実装といえば Test::Unit もあるんですが、テスト用の関数も Test::Unit の流儀に従う必要があってちょっと嫌。Test::Class は Test::More と Test::Harness とか、普段使い慣れてる Perl らしいテストスタイルを使いつつ xUnit できるという点が良いです。
使い方ですが、
- Test::Class を継承したテストクラスを作り
- テスト用のメソッドをメソッドアトリビュートで指定しつつ作っていき
- テストクラスの runtests を呼ぶ
という流れ。
例えば Dog クラスの bark メソッドをテストをするには、t/01-dog.t として
#!perl
use strict;
use warnings;
My::Test->runtests;
package My::Test;
use base qw/Test::Class/;
use Test::More;
use Dog;
sub test_bark : Test {
my $dog = Dog->new({ name => 'pochi', age => 18 });
is $dog->bark, "bowwow";
}
1;
などと書きます。ここではテストの実行ファイルの中にクラス定義を書いてますが、普通にライブラリパス切ってその中に入れても OK。
テストは sub test_bark : Test { ... } の中に書きます。Test アトリビュートをつけたメソッドが、runtests 時に呼ばれてテストされます。メソッドが呼ばれる順はランダム。テストメソッドの中では、Test::More の is を使ってテストしてます。
もう少しテストを拡充してみます。
package My::Test;
use base qw/Test::Class/;
use Test::More;
use Dog;
sub make_fixture : Test(setup) {
my $self = shift;
$self->{dog} = Dog->new({ name => 'pochi', age => 18 })
}
sub test_instance : Test(6) {
my $dog = shift->{dog};
isa_ok $dog, 'Class::Accessor::Fast';
isa_ok $dog, 'Dog';
ok $dog->can($_) for qw/name age/;
is $dog->name, 'pochi';
is $dog->age, 18;
}
sub test_bark : Test {
my $dog = shift->{dog};
is $dog->bark, "bowwow";
}
1;
Test アトリビュートをつけたテストメソッドをつけた中で実行するテストの数がひとつの場合は、Test で ok ですが、複数になるときはその数を Test(4) などと書きます。もちろん Test(no_plan) とも書けます。Tests でもいいらしい。
その他特殊なアトリビュートとしては setup / teardown / startup / shutdown などがあります。説明の必要はないでしょう。ここでは setup を使ってインスタンス生成をやってます。
テストをするときは prove を使うと楽。*1lib/Dog.pm に Dog の定義をしているとして
% prove -vl t/01-dog.t t/01-dog....ok All tests successful. Files=1, Tests=7, 0 wallclock secs ( 0.13 cusr + 0.03 csys = 0.16 CPU)
という具合で実行できます。prove -v すると、
% prove -vl t/01-dog.t t/01-dog....# # My::Test->test_bark 1..7 ok 1 - test bark # # My::Test->test_instance ok 2 - The object isa Class::Accessor::Fast ok 3 - The object isa Dog ok 4 - test instance ok 5 - test instance ok 6 - test instance ok 7 - test instance ok All tests successful. Files=1, Tests=7, 0 wallclock secs ( 0.12 cusr + 0.05 csys = 0.17 CPU)
という感じで、どのテストを実行してるかも出力してくれて便利です。
Test::Class には他にもいろいろ機能がありますが、基本はこんな感じです。なんかうちの環境では Test::Class のテストが通らないっていうあれな具合ですが、force install しちゃいました。
*1:prove は Test::Harness に付属してくるテスト実行用コマンド
最近 Perl でテストを書くときに Test::Class を使ってます。(もしかして常識?) これまでは *.t で Test::More をそのまま使ってたけど、テストが大きくなってくるとコードが分かりにくくなったり、自分であれこれしなきゃいけないことが多くてめんどくさい。
Test::Class は xUnit スタイルで Perl のテストを書けるフレームワークです。xUnit な Perl 実装といえば Test::Unit もあるんですが、テスト用の関数も Test::Unit の流儀に従う必要があってちょっと嫌。Test::Class は Test::More と Test::Harness とか、普段使い慣れてる Perl らしいテストスタイルを使いつつ xUnit できるという点が良いです。
使い方ですが、
- Test::Class を継承したテストクラスを作り
- テスト用のメソッドをメソッドアトリビュートで指定しつつ作っていき
- テストクラスの runtests を呼ぶ
という流れ。
例えば Dog クラスの bark メソッドをテストをするには、t/01-dog.t として
#!perl
use strict;
use warnings;
My::Test->runtests;
package My::Test;
use base qw/Test::Class/;
use Test::More;
use Dog;
sub test_bark : Test {
my $dog = Dog->new({ name => 'pochi', age => 18 });
is $dog->bark, "bowwow";
}
1;
などと書きます。ここではテストの実行ファイルの中にクラス定義を書いてますが、普通にライブラリパス切ってその中に入れても OK。
テストは sub test_bark : Test { ... } の中に書きます。Test アトリビュートをつけたメソッドが、runtests 時に呼ばれてテストされます。メソッドが呼ばれる順はランダム。テストメソッドの中では、Test::More の is を使ってテストしてます。
もう少しテストを拡充してみます。
package My::Test;
use base qw/Test::Class/;
use Test::More;
use Dog;
sub make_fixture : Test(setup) {
my $self = shift;
$self->{dog} = Dog->new({ name => 'pochi', age => 18 })
}
sub test_instance : Test(6) {
my $dog = shift->{dog};
isa_ok $dog, 'Class::Accessor::Fast';
isa_ok $dog, 'Dog';
ok $dog->can($_) for qw/name age/;
is $dog->name, 'pochi';
is $dog->age, 18;
}
sub test_bark : Test {
my $dog = shift->{dog};
is $dog->bark, "bowwow";
}
1;
Test アトリビュートをつけたテストメソッドをつけた中で実行するテストの数がひとつの場合は、Test で ok ですが、複数になるときはその数を Test(4) などと書きます。もちろん Test(no_plan) とも書けます。Tests でもいいらしい。
その他特殊なアトリビュートとしては setup / teardown / startup / shutdown などがあります。説明の必要はないでしょう。ここでは setup を使ってインスタンス生成をやってます。
テストをするときは prove を使うと楽。*1lib/Dog.pm に Dog の定義をしているとして
% prove -vl t/01-dog.t t/01-dog....ok All tests successful. Files=1, Tests=7, 0 wallclock secs ( 0.13 cusr + 0.03 csys = 0.16 CPU)
という具合で実行できます。prove -v すると、
% prove -vl t/01-dog.t t/01-dog....# # My::Test->test_bark 1..7 ok 1 - test bark # # My::Test->test_instance ok 2 - The object isa Class::Accessor::Fast ok 3 - The object isa Dog ok 4 - test instance ok 5 - test instance ok 6 - test instance ok 7 - test instance ok All tests successful. Files=1, Tests=7, 0 wallclock secs ( 0.12 cusr + 0.05 csys = 0.17 CPU)
という感じで、どのテストを実行してるかも出力してくれて便利です。
Test::Class には他にもいろいろ機能がありますが、基本はこんな感じです。なんかうちの環境では Test::Class のテストが通らないっていうあれな具合ですが、force install しちゃいました。
*1:prove は Test::Harness に付属してくるテスト実行用コマンド
本業ではないのだが……
最終更新: 2006年6月30日
「ソーシャルブックマーク管理ツール」の新しい版をお届けします。この版では、まだ始まったばかりの livedoor クリップをサポートしたほか、これからブックマークに登録しようとしている Web ページをすでに登録している人の数を見る機能などを追加しました。詳しいことは、変更履歴を見てください。
(2006年6月30日 追記)
0.10版のバグ修正版として、0.10a 版をリリースしました。0.10版をすでにダウンロードされている方は、0.10a版に差し替えて使用してください。なお、0.10a版から、ECナビ人気ニュースとニフティクリップへの登録にも対応しています。
(追記、ここまで)
ダウンロード
- 0.10a版 bookey010a.lzh (Windows用) [2.20MB (2316158バイト)]
- 0.10版 bookey010.lzh (Windows用) [2.19MB (2303174バイト)]
変更履歴
- Ver 0.10a 2006年 6月30日
- (1) 「ブックマーク登録者数を表示する」機能が ON のとき、かつ hatena exist API によるブックマーク登録者数が取得できなかった場合、はてなブックマークのエントリページを取得してブックマーク登録者数を取得するようにしているところ、当該エントリページが256KBより大きいとき、bookey がクラッシュする不具合に対処した
- (2) ECナビ人気ニュースの登録に対応した
- (3) ニフティクリップの登録に対応した
- (4) charset が ISO-2022-JP な Webページも、livedoorクリップに登録できるように修正した
- (5) タグの区切りの空白文字が複数個連続しているときに、はてなブックマークにタグが全く反映されずに登録されてしまう不具合に対処した
- (6) タグ候補をはてなブックマークのエントリページから取得するとき、複数人によって使用されているタグのみをタグ候補とするよう変更した
- Ver 0.10 2006年 6月29日
- (1) Flog の取得、削除、同期に対応した
- (2) livedoor クリップの登録に対応した
- (3) コメントに改行が含まれる場合、はてなブックマークに登録時、最後の改行以降の文字列のみがコメントになり、タグは1つも反映されないという現象に対処した
- (4) charset が Shift_JIS 以外のWebページでかつタイトルの長さが128バイトより長い場合、MM/Memo への登録が失敗するか、タイトルが空の状態で登録されてしまう不具合に対処した
- (5) すでに誰かによって登録済みのブックマークを Flog に登録しようとするとエラーになる現象に対処した
- (6) 登録ブックマーク数が1000件以上ある場合、BlogPeople Tags から取得(エクスポート)できるブックマークの数が常に1000件以下になる(1000で割った余りに相当する件数しか取得できない)不具合に対処した
- (7) 登録しようとしているWebページをすでにブックマークに登録している人の数(はてなブックマーク、del.icio.us、MM/Memo)を表示する機能を追加した(デフォルトは表示しない)
- (8) bookey のドラッグアンドドロップ可能なダイアログの面積を少し小さくしてみた
- (9) ブックマーク登録内容編集ダイアログに、どのブックマークへの登録機能が ON なのか OFF なのか見ることができるようにした(各ブックマークサービスを象徴するアイコンにマウスカーソルを持っていくと、ON/OFF状態を示すツールチップが表示される)
- (10) ブックマーク登録中、取得中、同期中など、時間がかかる処理実行中でも定期的に画面の再描画が必要かどうか調べて、必要なら再描画するようにしてみた(ダイアログのタイトルに「応答なし」と表示される状況を減らすことができた)
- (11) その他、メモリオーバーフロー、バッファオーバーランが発生する可能性のある箇所に対策を施した
他に、クリック可能な文字列にマウスカーソルを持っていくといわゆる「指カーソル」になるようにしてみたり、ちょっとしたユーザーインターフェースの改良を試みています。
追記
早くも不具合が見つかってしまいました(例えば、「ブックマーク登録者数を表示する」をONにして「[観] ソーシャルブックマーク管理ツール」をブックマークしようとすると、落ちてしまいます)。
そういうことですので、できましたら、修正版(0.10a版)が出るまで、ダウンロードはお控えください。
(2006年6月30日追記)
0.10a版をリリースしました。0.10版をお使いの方は、差し替えをお願いします。
(追記、ここまで)

Earlier this year I decided to do something about the amount of money I spend at Amazon.com on books. While I am buying fewer books now, the biggest change I made was to buy used books rather than new.
After a few experiences, I've found that the used books are often indistinguishable from new and come at anywhere from a 20% to 60% discount even after you factor out shipping (I have Amazon Prime, so I'm used to "free" shipping).
Why didn't I think of this sooner?
If you regularly buy books from Amazon and aren't all hung up on having something brand new, I highly recommend looking at the used options. It adds up over time.
(comments)
「複数のソーシャルブックマークサービスに同時に投稿するスクリプト」を拡張し、 livedoorクリップ と next.1470.net にも対応してみました。ってことで、最大21箇所同時にブックマークを投稿できるようになりました。
next.1470.net
まだプロトタイピングの段階なんで、ベータとか以前のバージョンだけど、だいぶまとまってきたんで、いったん晒してみる。まだ実用レベルではないし、データも保全しない可能性が高い(DB設計からやり直す可能性がある)のでそのつもりでどうぞ。
1470.netリニューアル開発テストバージョン - いしなお! (2006-06-23)
MM/Memo や blogmap といったサービスが提供中の 1470.net のishinaoさんによる実験的なサービスです。次期 1470.net がどんな感じになるか、興味のある人は参加してみては? ただし、最終的には今とは全く違うものになるかもしれないこと、登録したデータが本番システムまで保持されない可能性があること、仕様変更が頻繁に行なわれること、など、現段階では常用するためのサービスではありません。使ってみる場合は、その辺、注意してください。ただ、いろいろ面白い機能が実装されつつありますので、そういうのが好きな人には楽しめると思います。
livedoor クリップ
いずれ livedoor もソーシャルブックマークサービスを始めるだろうと予想されていましたが、ようやく始まりました。 まだまだ、これからどんどんいろんな機能が実装されていくようです。livedoor Reader との連携機能も予定されているとのこと。今後の成長に期待しています。
livedoor clipでは、通常のソーシャルブックマークの機能に加えて、記事単位での非公開設定(詳細)や、使い方にあわせてブックマークレットカスタマイズできるブックマークジェネレータ(詳細)などをご用意しております。
livedoor clip開発日誌:liveoor clip(ソーシャルブックマーク)はベータ版です - livedoor Blog(ブログ)
ぱっと見、他のソーシャルブックマークからいろんな機能を取り込んだ感じ。ブックマーク元記事を5段階評価できたり、ブックマークごとにパブリック(公開)/プライベート(非公開)を指定できたり。そのうち、スクリーンショット機能も付くのでしょう。
ブックマーク同時投稿スクリプト
このスクリプトは、結構癖のある動きをします。1つのブックマークサービスしか使わない場合は、そんなに問題はないと思うんですが、複数のブックマークサービスに同時に投稿しようとするとき、不用意に、ウィンドウを閉じてしまうと、そこで処理が終わって、残りのブックマークサービスに投稿できない、というようなこともあります。使っているうちに、その辺はわかってくると思いますが、ある程度使い慣れないと、全然使い物にならないかもしれません。
そもそも、ネタとして作ったという側面が大きく、あまり実用的ではないと思います。とはいえ、慣れれば、(たぶん)使いこなせるようになりますので、全く使えない代物という訳でもありません。とかなんとか、言い訳してみるテストでした (^^;
ソース
それでは、以下、「複数のソーシャルブックマークサービスに同時に投稿するスクリプト (livedoorクリップ、next.1470.net対応版)」のソースです。設置にあたっての注意点等、こまかいことは「複数のソーシャルブックマークサービスに同時に投稿するスクリプト」を参照してください。
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript" src="md5.js"></script>
<script language="JavaScript" type="text/javascript">
/* 右クリックで各所にブックマーク */
/* 指定した複数のソーシャルブックマークに同時登録できます */
/* 注意: 本スクリプトを使用するにあたって、あらかじめ */
/* Paj’s Home: Cryptography: JavaScript MD5 */
/* (http://pajhome.org.uk/crypt/md5/index.html) */
/* にて公開されている */
/* md5.js */
/* (ソース本体: http://pajhome.org.uk/crypt/md5/md5.js) */
/* (ソースリスト: http://pajhome.org.uk/crypt/md5/md5src.html) */
/* をダウンロードして、本スクリプトと同じディレクトリ(フォルダ) */
/* に設置しておいてください。 */
/* */
/* また、Internet Explorer 6.0 SP2 以降をお使いの場合は、セキュリ */
/* ティの警告が出ることがあります。警告が出るたびに「コンテンツの */
/* 実行を許可」してください。毎回「許可」するのが面倒だと思う方は、 */
/* Internet Explorer の */
/* ツール - インターネットオプション - 詳細設定 */
/* の「マイ コンピュータのファイルでのアクティブ コンテンツの実行 */
/* を許可する」をチェック状態にしてください。ただし、この設定変更 */
/* によりセキュリティ上の危険性が高まりますので、ご注意ください。 */
/* */
/* written by H.Tsujimura (tsupo) 2006 */
/* 関連情報提供場所: http://watcher.moe-nifty.com/ */
/* */
/* Ver 1.2 2006/06/28 livedoor クリップ、next.1470.net にも対応した */
/* Ver 1.1 2006/06/09 登録対象選択ダイアログでのタイトル、URL、コメントの編 */
/* 集結果を投稿内容に反映するようにした */
/* Ver 1.0 2006/06/08 最初の版 */
obj = external.menuArguments; // 右クリック時の引数のオブジェクトの参照
page_url = obj.document.URL; // ページのURL
title_txt = obj.document.title; // タイトル文字列
cite_txt = obj.document.selection.createRange().text; // 引用文字列
// ↓↓ あなたのアカウントに変更して、お使いください
del_userID = "tsupo"; // del.icio.us のアカウント
// ↑↑ あなたのアカウントに変更して、お使いください
if ( obj.location.href && (obj.location.href != "") )
page_url = obj.location.href; // 「はてなダイアリーキーワード」対策
if ( title_txt == "[object]" ) {
str = obj.document.body.parentNode;
inn = str.innerHTML;
s = inn.indexOf("<TITLE>");
e = inn.indexOf("</TITLE>");
if ( (s > 0) && (e > s) )
title_txt = inn.substring(s + 7, e);
}
function escapeString(str) {
result = "";
len = str.length;
for ( i = 0; i < len; i++ ) {
if ( str.charAt(i) == '?' )
result += "%3F";
else if ( str.charAt(i) == '>' )
result += "%3E";
else if ( str.charAt(i) == '=' )
result += "%3D";
else if ( str.charAt(i) == '<' )
result += "%3C";
else if ( str.charAt(i) == ':' )
result += "%3A";
else if ( str.charAt(i) == '/' )
result += "%2F";
else if ( str.charAt(i) == '&' )
result += "%26";
else if ( str.charAt(i) == '%' )
result += "%25";
else if ( str.charAt(i) == '#' )
result += "%23";
// else if ( str.charAt(i) == ' ' )
// result += "%20";
else if ( str.charAt(i) == '\n' )
result += escape("\n");
else
result += str.charAt(i);
}
return ( result );
}
function hatenaIdAutoDiscovery()
{
var ret = false;
// まず、head 部分から探索
var str = obj.document.body.parentNode;
var inn = str.innerHTML;
var idx1 = inn.indexOf("foaf:OnlineAccount");
if ( idx1 == -1 ) {
// head 部分に存在しない場合は body 部分を探索
str = obj.document.body;
inn = str.innerHTML;
idx1 = inn.indexOf("foaf:OnlineAccount");
}
if ( idx1 > 0 ) {
if ( inn.indexOf('<foaf:accountServiceHomepage rdf:resource="http://www.hatena.ne.jp/" />') > 0 ) {
idx2 = inn.indexOf('foaf:accountName="');
if ( idx2 > 0 ) {
hatenaIdForTipsjar = inn.substring(idx2+18,inn.indexOf('</foaf:OnlineAccount>'));
hatenaIdForTipsjar = hatenaIdForTipsjar.substring(0, hatenaIdForTipsjar.indexOf('"'));
ret = true;
}
}
}
return ( ret );
}
function postHatenaBookmark( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" ) {
// はてなID auto-discovery (投げ銭可能かどうかチェック)
isTipsjarOK = hatenaIdAutoDiscovery();
asin = "";
if ( page_url.match("/asin/") || page_url.match("/ASIN/") || page_url.match("/gp/product/") ) {
asinIdx = page_url.indexOf("/asin/");
if ( asinIdx < 0 )
asinIdx = page_url.indexOf("/ASIN/");
if ( asinIdx < 0 )
asinIdx = page_url.indexOf("/gp/product/") + 6;
if ( asinIdx >= 0 ) {
asinIdx += 6;
len = page_url.length;
if ( len >= asinIdx + 11 )
len = asinIdx + 11;
asin = page_url.substring(asinIdx,len);
if ( asin.charAt(asin.length - 1) == '/' )
asin = asin.substring(0,asin.length - 1);
}
}
newWin = window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(title_txt)+'&url='+escape(page_url)+'&comment='+escape(cite_txt), '_blank', 'width=520,height=600,resizable=1,scrollbars=1');
t = newWin.document.cookie;
loc = t.lastIndexOf(';');
if ( loc > 0 )
rk = t.substring(0,t.lastIndexOf(';'));
else
rk = t;
rk = rk.substring(rk.lastIndexOf('=')+1);
rkm = b64_md5(rk);
newWin.document.open();
newWin.document.write("<html>\n<head>\n<title>はてなブックマーク - ソーシャルブックマーク</title>\n");
newWin.document.write('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n');
newWin.document.write('<meta http-equiv="Content-Style-Type" content="text/css">\n');
newWin.document.write('<meta http-equiv="Content-Script-Type" content="text/javascript">\n');
newWin.document.write('<sc' + 'ript type="text/javascript" src="http://b.hatena.ne.jp/js/comment_counter.js"></sc' + 'ript>\n');
newWin.document.write('<link rel="stylesheet" type="text/css" href="http://b.hatena.ne.jp/style">\n');
newWin.document.write('<style type="text/css">\n#body {\n margin-left: 0px;\n}\n\n.info td {\n font-size: 80%;\n}\n\n');
newWin.document.write('div.note {\n margin-left: 10px;\n margin-top: 20px;\n}\n\n');
newWin.document.write('div.info p {\n font-size: 90%;\n}\n\ndiv.info p.addurl-footer {\n font-size: 100%;\n}\n');
newWin.document.write('</style>\n');
newWin.document.write('</head>\n<body>\n');
newWin.document.write('<div id="banner"><h1><a href="http://www.hatena.ne.jp/" target="_blank"><img src="http://b.hatena.ne.jp/images/hatena_de.gif" width="104" height="40" alt="Hatena"></a>');
newWin.document.write('<a href="http://b.hatena.ne.jp/" target="_blank"><img src="http://b.hatena.ne.jp/images/Bookmarkde.gif" width="118" height="40" alt="Bookmark"></a>');
newWin.document.write('<img src="http://b.hatena.ne.jp/images/betade.gif" width="42" height="40" alt="beta" title="beta">');
newWin.document.write('<img border="0" src="http://b.hatena.ne.jp/images/tri_de.gif" width="15" height="40" usemap="#trimap" alt="tri"></h1>');
newWin.document.write('<a href="http://www.hatena.ne.jp/"><img src="http://b.hatena.ne.jp/images/hatenade.gif" class="logo" alt="はてな" title="はてな"></a></div>\n');
newWin.document.write('<map name="trimap">\n');
newWin.document.write('<area shape="rect" coords="1,10,15,25" href="http://a.hatena.ne.jp/" alt="はてなアンテナ" title="はてなアンテナ">\n');
newWin.document.write('<area shape="rect" coords="1,25,15,40" href="http://d.hatena.ne.jp/" alt="はてなダイアリー" title="はてなダイアリー">\n');
newWin.document.write('</map>\n');
newWin.document.write('<div id="container">\n');
newWin.document.write('<div id="body">\n');
newWin.document.write('<h2>ブックマークの確認</h2>\n');
newWin.document.write('<form action="http://b.hatena.ne.jp/add" method="POST" name="add" id="edit_form" style="margin:0">\n');
newWin.document.write('<input type="hidden" name="mode" value="enter">\n');
newWin.document.write('<input type="hidden" name="eid" value="">\n');
newWin.document.write('<input type="hidden" name="url" value="' + page_url + '">\n');
newWin.document.write('<input type="hidden" name="rkm" value="' + rkm + '">\n');
newWin.document.write('<input type="hidden" name="is_bm" value="1">\n');
newWin.document.write('<div class="info">\n<table>\n<tr>\n');
newWin.document.write('<td class="label" nowrap>URL</td>\n<td class="addurl">\n');
newWin.document.write('<a href="' + page_url + '" target="_blank">' + page_url + '</a>\n');
newWin.document.write('</td>\n</tr><tr>\n<td class="label" nowrap>タイトル</td>\n<td>\n');
newWin.document.write('<input type="text" name="title" value="' + title_txt + '" size="50" />\n');
newWin.document.write('</td>\n</tr>\n<tr>\n<td class="label" nowrap>コメント<br><span class="note">(省略可)</span></td>\n<td>\n');
newWin.document.write('<input type="text" name="comment" id="comment" value="' + cite_txt + '" size="50" onKeyUp="countBytes()" />\n');
newWin.document.write('<span id="comment_count"></span>\n<div id="candidates_list"></div>\n</td>\n</table>\n');
newWin.document.write('</div>\n');
if ( isTipsjarOK ) {
newWin.document.write('<!-- ポイント送信 -->\n');
newWin.document.write('<input type="hidden" name="hatenaid" value="' + hatenaIdForTipsjar + '">\n');
newWin.document.write('<p><input type="checkbox" name="tipjar" value="1" id="tipjar"> <label for="tipjar">このエントリーの作者にポイントを送信する</label></p>\n');
}
else if ( asin != "" ) {
newWin.document.write('<input type="hidden" name="asin" value="' + asin + '">\n');
newWin.document.write('<p><input type="checkbox" name="addasin" value="1" checked="checked">この商品をコレクションに加える</p>\n');
}
newWin.document.write('<input type="submit" name="commit" value="追加する">\n');
newWin.document.write('<input type="submit" name="go_bm" value="追加して確認">\n');
newWin.document.write('<div id="tags_list"></div>\n<div id="othertags_list"></div>\n<div id="keywords_list"></div>\n');
newWin.document.write('</form>\n');
newWin.document.write('<div class="note" style="padding-bottom: 1em;">※コメント欄で"[hoge]..."と書くとタグが利用できます。→<a href="/help#tag" target="_blank">詳しい説明</a></div>\n');
newWin.document.write('</div>\n</div>\n');
newWin.document.write('</body>\n</html>\n');
newWin.document.close();
newWin.document.focus();
}
else
window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(title_txt)+'&url='+escape(page_url), '_blank', 'width=520,height=600,resizable=1,scrollbars=1');
}
function postDelicious( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://del.icio.us/' + del_userID + '?v=2&url=' + encodeURIComponent(page_url) + '&title=' + encodeURIComponent(title_txt) + '&extended=' + encodeURIComponent(cite_txt));
else
window.open('http://del.icio.us/' + del_userID + '?v=2&url=' + encodeURIComponent(page_url) + '&title=' + encodeURIComponent(title_txt));
}
function postMMmemo( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://1470.net/mm/memo_form.html?url=' + encodeURIComponent(page_url) + '&memo_title=' + encodeURIComponent(title_txt) + '&memo_text=' + encodeURIComponent(cite_txt));
else
window.open('http://1470.net/mm/memo_form.html?url=' + encodeURIComponent(page_url) + '&memo_title=' + encodeURIComponent(title_txt));
}
function postBlogPeopleTags( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://tags.blogpeople.net/tags_addlink.jsp?u=' + encodeURIComponent(page_url) + '&ti=' + escape(title_txt) + '&de=' + escape(cite_txt));
else
window.open('http://tags.blogpeople.net/tags_addlink.jsp?u=' + encodeURIComponent(page_url) + '&ti=' + escape(title_txt));
}
function postDrecomRSS( title_txt, page_url, cite_txt )
{
if (cite_txt == '') {
t = title_txt;
window.open('http://rss.drecom.jp/shortcut/add_clip?url='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt)+'&comment='+encodeURIComponent(t),
'add_clip',
'scrollbars=yes,width=450,height=500,left=100,top=100,status=yes,resizable=yes');
}
else {
t = cite_txt;
newWin = window.open('http://rss.drecom.jp/shortcut/add_clip?url='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt)+'&comment='+encodeURIComponent(t),
'add_clip',
'scrollbars=yes,width=450,height=500,left=100,top=100,status=yes,resizable=yes');
newWin.document.open();
newWin.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n');
newWin.document.write('<html lang="ja">\n<head>\n');
newWin.document.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n');
newWin.document.write('<meta http-equiv="Content-Style-Type" content="text/css">\n');
newWin.document.write('<meta http-equiv="Content-Script-Type" content="text/javascript">\n');
newWin.document.write('<title>クリップ追加 - ドリコムRSS</title>\n');
newWin.document.write('<link rel="stylesheet" href="http://rss.drecom.jp/css/default.css" type="text/css" />\n');
newWin.document.write('<link rel="shortcut icon" href="http://rss.drecom.jp/favicon.ico" />\n');
newWin.document.write('<link rel="alternate" type="application/rss+xml" title="RSS" href="http://rss-help.cms.drecom.jp/topics_0_1_0.rdf" />\n');
newWin.document.write('<link href="/css/home.css" rel="stylesheet" type="text/css">\n</head>\n');
newWin.document.write('<body onLoad="window.focus()">\n');
newWin.document.write('<div class="window_form">\n<div class="window_header">クリップの追加</div>\n');
newWin.document.write('<form action="http://rss.drecom.jp/shortcut/add_clip_done" method="post">\n');
newWin.document.write('<div class="bookmarklet_message_error">\n</div>\n');
newWin.document.write('<div class="window_text_1">タイトル</div>\n<div class="window_text">\n');
newWin.document.write('<input type="text" name="clip_title" id="clip_title" value="' + title_txt + '">\n');
newWin.document.write('</div>\n<div class="bookmarklet_message_error">\n</div>\n');
newWin.document.write('<div class="window_text_1">URL</div>\n<div class="window_text">\n');
newWin.document.write('<input type="text" name="clip_url" id="clip_url" value="' + page_url + '">\n');
newWin.document.write('</div>\n<div class="bookmarklet_message_error">\n</div>\n');
newWin.document.write('<div class="window_text_1">登録先フォルダ</div>\n<div class="window_text">\n');
newWin.document.write('<select name="clip_folder">\n');
newWin.document.write('<option value="1">IT</option>\n');
newWin.document.write('<option value="2">エンターテイメント</option>\n');
newWin.document.write('<option value="3">サイエンス</option>\n');
newWin.document.write('<option value="4">地域</option>\n');
newWin.document.write('<option value="5">社会</option>\n');
newWin.document.write('<option value="6">コラム</option>\n');
newWin.document.write('<option value="7">訃報</option>\n');
newWin.document.write('<option value="8">文化・芸能</option>\n');
newWin.document.write('<option value="9">blog</option>\n');
newWin.document.write('<option value="10">経済・経営</option>\n');
newWin.document.write('<option value="11">政治</option>\n');
newWin.document.write('<option value="12">スポーツ</option>\n');
newWin.document.write('<option value="13">ブックレビュー</option>\n');
newWin.document.write('<option value="14">国際</option>\n');
newWin.document.write('<option value="15">テクノロジー</option>\n');
newWin.document.write('</select>\n</div>\n<div class="window_text_1">コメント</div>\n<div class="window_text">\n');
newWin.document.write('<textarea name="clip_comment" rows="8">' + t + '</textarea>\n');
newWin.document.write('</div>\n<div id="submit">\n');
newWin.document.write('<input type="submit" value="登録">\n');
newWin.document.write('</div>\n</form>\n<div id="submit">\n<p>\n');
newWin.document.write('<input type="button" value="閉じる" onclick="window.close(); return false;">\n');
newWin.document.write('</p>\n</div>\n</div>\n</body>\n</html>\n');
newWin.document.close();
newWin.document.focus();
}
}
function postJoltMark( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://mark.jolt.jp/mark/entryMark.do?u=' + encodeURIComponent(page_url) + '&t=' + encodeURIComponent(title_txt));
}
function postFlog( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://www.flog.jp/post.php?url_uri=' + encodeURIComponent(page_url) + '&url_title=' + encodeURIComponent(title_txt));
}
function postECnavi( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://news.ecnavi.jp/config/add/confirm?url='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt)+'&encoded='+encodeURIComponent('ECナビ'));
}
function postNiftyClip( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://clip.nifty.com/create?url=' + encodeURIComponent(page_url) + '&title=' + encodeURIComponent(title_txt) + '&comment=' + encodeURIComponent(cite_txt));
else
window.open('http://clip.nifty.com/create?url='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt));
}
function postRootace( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://www.rootace.com/add.php?title='+escape(title_txt)+'&url='+escape(page_url)+'&v=1','_blank','width=480,height=490,resizable=1,scrollbars=1');
}
function postGoogleBookmark( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://www.google.com/bookmarks/mark?op=add&bkmk=' + encodeURIComponent(page_url) + '&title=' + encodeURIComponent(title_txt) + '&annotation=' + encodeURIComponent(cite_txt) + '&hl=ja');
else
window.open('http://www.google.com/bookmarks/mark?op=add&bkmk=' + encodeURIComponent(page_url) + '&title=' + encodeURIComponent(title_txt) + '&hl=ja');
}
function postGmail( title_txt, page_url, cite_txt )
{
page_title = escapeString( title_txt );
page_url = escapeString( page_url );
d = 'http://mail.google.com/mail/?view=cm&tf=1&cmid=2&init=1&fs=1';
d += '&su=' + page_title + '&body=URL%3A ' + page_url;
if ( cite_txt ) {
page_body = escapeString( cite_txt );
d += escape('\n') + '内容%3A ' + page_body;
}
window.open(d,'gmail','toolbar=no,width=600,height=600');
}
function postMarkezine( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://markezine.jp/bookmark/?mode=new&style=simple&u='+escape(page_url)+'&t='+escape(title_txt), '_blank', 'width=550,height=700,resizable=1,scrollbars=1');
}
function postCoRich( title_txt, page_url, cite_txt )
{
// 注意: title_txt, cite_txt の値は無視されます
window.open('http://newsclip.corich.jp/clip/public_html/marklet.php?url='+escape(page_url));
}
function postBlogHeader( title_txt, page_url, cite_txt )
{
// 注意: title_txt, cite_txt の値は無視されます
window.open('http://sbm.blogheader.com/newbookmark.asp?confilm=true&url='+encodeURIComponent(page_url));
}
function postBaqoo( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://baqoo.cc/add.php?mode=confirm&title='+escape(title_txt)+'&url='+escape(page_url));
}
function postReddit( title_txt, page_url, cite_txt )
{
// 注意: cite_txt の値は無視されます
window.open('http://ja.reddit.com/submit?url='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt));
}
function postDigg( title_txt, page_url, cite_txt )
{
// 注意: title_txt, cite_txt の値は無視されます
window.open('http://www.digg.com/submit?url='+encodeURIComponent(page_url));
}
function postExciteLinkPost( title_txt, page_url, cite_txt )
{
// 注意: page_url, cite_txt の値は無視されます
window.open('http://linkpost.news.excite.co.jp/page/w/?title=' + encodeURIComponent(title_txt));
}
function postLivedoorClip( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://clip.livedoor.com/clip/add?link='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt)+'¬es='+encodeURIComponent(cite_txt));
else
window.open('http://clip.livedoor.com/clip/add?link='+encodeURIComponent(page_url)+'&title='+encodeURIComponent(title_txt));
}
function postNext1470Net( title_txt, page_url, cite_txt )
{
if ( cite_txt != "" )
window.open('http://next.1470.net/tools/memo/new?url='+encodeURIComponent(page_url)+'&comment='+encodeURIComponent(cite_txt)); // コメントは反映されない(反映されることも、ごくたまにある?)
else
window.open('http://next.1470.net/tools/bookmark?url='+encodeURIComponent(page_url));
}
/* メニュー画面生成 */
newWin = window.open("","Select");
newWin.document.open();
newWin.document.write('<html>\n');
newWin.document.write('<head><title>登録先選択</title>\n');
newWin.document.write('<meta http-equiv="Content-Script-Type" content="text/javascript">\n');
newWin.document.write('<script type="text/javascript">\n');
newWin.document.write('function nextAction()\n');
newWin.document.write('{\n');
newWin.document.write(' window.result = new Array(4);\n');
newWin.document.write(' window.result[0] = ""\n');
newWin.document.write(' window.result[1] = document.test.title.value;\n');
newWin.document.write(' window.result[2] = document.test.url.value;\n');
newWin.document.write(' window.result[3] = document.test.comment.value;\n');
newWin.document.write(' if ( document.test.hatena.checked == true ) window.result[0] += "1";\n');
newWin.document.write(' if ( document.test.delicious.checked == true ) window.result[0] += "2";\n');
newWin.document.write(' if ( document.test.mmMemo.checked == true ) window.result[0] += "3";\n');
newWin.document.write(' if ( document.test.bpTags.checked == true ) window.result[0] += "4";\n');
newWin.document.write(' if ( document.test.drecom.checked == true ) window.result[0] += "5";\n');
newWin.document.write(' if ( document.test.joltMark.checked == true ) window.result[0] += "6";\n');
newWin.document.write(' if ( document.test.flog.checked == true ) window.result[0] += "7";\n');
newWin.document.write(' if ( document.test.ecNavi.checked == true ) window.result[0] += "8";\n');
newWin.document.write(' if ( document.test.nifty.checked == true ) window.result[0] += "9";\n');
newWin.document.write(' if ( document.test.rootace.checked == true ) window.result[0] += "A";\n');
newWin.document.write(' if ( document.test.google.checked == true ) window.result[0] += "B";\n');
newWin.document.write(' if ( document.test.gmail.checked == true ) window.result[0] += "C";\n');
newWin.document.write(' if ( document.test.markezine.checked == true ) window.result[0] += "D";\n');
newWin.document.write(' if ( document.test.corich.checked == true ) window.result[0] += "E";\n');
newWin.document.write(' if ( document.test.blogHeadr.checked == true ) window.result[0] += "F";\n');
newWin.document.write(' if ( document.test.baqoo.checked == true ) window.result[0] += "G";\n');
newWin.document.write(' if ( document.test.reddit.checked == true ) window.result[0] += "H";\n');
newWin.document.write(' if ( document.test.digg.checked == true ) window.result[0] += "I";\n');
newWin.document.write(' if ( document.test.linkpost.checked == true ) window.result[0] += "J";\n');
newWin.document.write(' if ( document.test.livedoor.checked == true ) window.result[0] += "K";\n');
newWin.document.write(' if ( document.test.next1470.checked == true ) window.result[0] += "L";\n');
newWin.document.write(' window.opener.updateParent( window );\n');
newWin.document.write('}\n');
newWin.document.write('</sc' + 'ript>\n');
newWin.document.write('</head>\n');
newWin.document.write('<body>\n');
newWin.document.write('<p>登録先を選択してください。</p>\n');
newWin.document.write('<form name="test" onkeydown="if (event.keyCode==13) { nextAction(); }">\n');
newWin.document.write('<table border="0">\n');
newWin.document.write('<tr><td>登録先: </td><td>\n');
newWin.document.write('<input type="checkbox" name="hatena" value="1">はてなブックマーク /\n');
newWin.document.write('<input type="checkbox" name="delicious" value="2">del.icio.us /\n');
newWin.document.write('<input type="checkbox" name="mmMemo" value="3">MM/Memo /\n');
newWin.document.write('<input type="checkbox" name="bpTags" value="4">BlogPeople Tags<br />\n');
newWin.document.write('<input type="checkbox" name="drecom" value="5">ドリコムRSS /\n');
newWin.document.write('<input type="checkbox" name="joltMark" value="6">JoltMark /\n');
newWin.document.write('<input type="checkbox" name="flog" value="7">Flog /\n');
newWin.document.write('<input type="checkbox" name="ecNavi" value="8">ECナビ人気ニュース<br />\n');
newWin.document.write('<input type="checkbox" name="nifty" value="9">ニフティクリップ /\n');
newWin.document.write('<input type="checkbox" name="rootace" value="A">ROOTACE /\n');
newWin.document.write('<input type="checkbox" name="google" value="B">Google Bookmark /\n');
newWin.document.write('<input type="checkbox" name="gmail" value="C">Gmail<br />\n');
newWin.document.write('<input type="checkbox" name="markezine" value="D">Markezine /\n');
newWin.document.write('<input type="checkbox" name="corich" value="E">CoRich /\n');
newWin.document.write('<input type="checkbox" name="blogHeadr" value="F">BlogHeader SBM /\n');
newWin.document.write('<input type="checkbox" name="baqoo" value="G">baqoo /\n');
newWin.document.write('<input type="checkbox" name="reddit" value="H">reddit /\n');
newWin.document.write('<input type="checkbox" name="digg" value="I">digg<br />\n');
newWin.document.write('<input type="checkbox" name="linkpost" value="J">Excite リンクポスト /\n');
newWin.document.write('<input type="checkbox" name="livedoor" value="K">livedoor クリップ\n');
newWin.document.write('<input type="checkbox" name="next1470" value="L">next.1470.net\n');
newWin.document.write('</td><tr>\n');
newWin.document.write('<tr><td>タイトル: </td><td><input type="text" name="title" value="'+ title_txt +'" size="80" /></td></tr>\n');
newWin.document.write('<tr><td>URL: </td><td><input type="text" name="url" value="'+ page_url +'" size="80" /></td></tr>\n');
newWin.document.write('<tr><td>コメント: </td><td><textarea name="comment" cols="60" rows="5">' + cite_txt + '</textarea></td></tr>\n');
newWin.document.write('<tr><td colspan="2">タイトル、URL、コメントは、この画面で変更したものが反映されます。</td></tr>\n');
newWin.document.write('</table>\n');
newWin.document.write('<input type="button" name="regist" value="実行" onclick="javascript:nextAction()" />\n');
newWin.document.write('</form>\n');
newWin.document.write('</body>\n');
newWin.document.write('</html>\n');
newWin.document.close();
newWin.resizeTo(640,600);
newWin.focus();
function updateParent( subwindow )
{
target = "";
count = 0;
if ( subwindow.result[0] != "" )
target = subwindow.result[0];
if ( subwindow.result[1] != "" )
title_txt = subwindow.result[1];
if ( subwindow.result[2] != "" )
page_url = subwindow.result[2];
if ( subwindow.result[3] != "" )
cite_txt = subwindow.result[3];
subwindow.close(); // 子 window をクローズ
if ( target != "" ) {
count = target.length;
confirm("ブックマークの投稿を開始します (投稿先: " + count + "件)");
}
window.close(); // ダミーで開いた prompt をクローズ
if ( target.match( "1" ) ) {
// はてなブックマークに登録
postHatenaBookmark( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("はてなブックマークへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "2" ) ) {
// del.icio.usに登録
postDelicious( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("del.icio.usへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "3" ) ) {
// MM/Memoに登録
postMMmemo( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("MM/Memoへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "4" ) ) {
// BlogPeople Tagsに登録
postBlogPeopleTags( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("BlogPeople Tagsへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "5" ) ) {
// ドリコムRSSに登録
postDrecomRSS( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("ドリコムRSSへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "6" ) ) {
// JoltMarkに登録
postJoltMark( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("JoltMarkへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "7" ) ) {
// Flogに登録
postFlog( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Flogへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "8" ) ) {
// ECナビ人気ニュースに登録
postECnavi( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("ECナビ人気ニュースへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "9" ) ) {
// ニフティクリップに登録
postNiftyClip( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("ニフティクリップへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "A" ) ) {
// ROOTACEに登録
postRootace( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("ROOTACEへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "B" ) ) {
// Google Bookmarkに登録
postGoogleBookmark( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Google Bookmarkへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "C" ) ) {
// Gmail を使って覚え書き(メールで送信)
postGmail( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Gmailでの送信が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "D" ) ) {
// Markezineブックマークに登録
postMarkezine( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Markezineへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "E" ) ) {
// CoRichに登録
postCoRich( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("CoRichへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "F" ) ) {
// BlogHeader SBMに登録
postBlogHeader( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("BlogHeader SBMへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "G" ) ) {
// baqooに登録
postBaqoo( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Baqooへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "H" ) ) {
// redditに登録
postReddit( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("redditへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "I" ) ) {
// diggに登録
postDigg( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("diggへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "J" ) ) {
// Exciteリンクポストに登録
postExciteLinkPost( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("Exciteリンクポストへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "K" ) ) {
// livedoor クリップ に登録
postLivedoorClip( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("livedoor クリップへの登録が終わったら、OK を押してください");
count--;
}
}
if ( target.match( "L" ) ) {
// next.1470.net に登録
postNext1470Net( title_txt, page_url, cite_txt );
if ( count >= 2 ) {
confirm("next.1470.netへの登録が終わったら、OK を押してください");
count--;
}
}
}
/* subwindow.result を介してのウィンドウ間通信を機能させるため、*/
/* やむなくダミーのウィンドウを生成しておく */
prompt('ダミーのウィンドウです。\n作業が終わるまで、閉じないでそのままにしておいてください。','');
</script>
In a post that falls into the classic trap of thinking that search is the only way Yahoo can increase market share, my friend Joe recently posed an odd question:
Perhaps the choice is simply overwhelming people who are thus choosing to stick with Google's search interface (still simpler than Yahoo's). Malcolm Gladwell has noted that when presented with too many purchase options people actually may choose fewer items than if presented with a smaller number of options. Could Yahoo's problem be that they simply are doing too GOOD of a job ushering in Web 2.0?
I really doubt that's the case.
First of all, the complexity of our search interface (which likely means "the search results page") has little if anything to do with "Web 2.0" that I can figure. In fact, over the last year or so Google's search result pages have started to look a bit more like ours. They've become a bit more complex, busy, or some might even say cluttered.
Second of all, doing a good job of ushering in anything new on the web means doing it in a way that's meaningful and useful to people. If we're doing things that drive people away (or fail to attract them), I don't see how anyone can call that GOOD (in all CAPS no less). It's something we need to fix.
Finally, I don't think Gladwell's idea applies here. Joe is confusing "choice" with "understanding" or maybe "recognition." As I understand it, Gladwell was talking about equal choices: choosing among 5 models of coffee makers versus 50 of them. Search results pages on Google and Yahoo are a blend of different elements, not all of which are the same: advertisements, organic results, more advertisements, related search terms, etc.
Besides, if too much choice was really a problem, we'd expect to see a lot more people using "I'm feeling lucky" on Google, wouldn't we?
(comments)
RSSリーダーで読む



RSS 1.0
OPML