Googleの検索結果に他言語/他検索エンジンへのリンクを追加 v0.2

先日,Operaが一日だけ無料でレジストできるというお祭りがありましたので,さっそくレジストしてみました.最近,拡張の詰め込み過ぎなのか,Firefoxが不安定だったりするので,これを期にすこしOperaに浮気しています.

最近のブラウザの必須機能であるadblockOpera版には,この二つがありました.前者のほうが導入が簡単なので,前者を使っています.なかなか快適です.

もう一つ,以前(id:hcr:20050810),「 Googleの検索結果に他言語/他検索エンジンへのリンクを追加」なんてユーザスクリプトを作っていましたが,これの機能追加(エンジン追加&アイコン表示) & Opera対応をしました.試してやろう,という奇特な方は使ってみてください.

Operaでのスクリーンショットはこんな感じです.

インストール・ダウンロード

Languageengineshortcut.user.js

ちなみに,Greasemonkeyの場合は,右クリックの"Install User Script..."でインストールできますが,Operaの場合は,ダウンロードして指定したフォルダに配置,という手順になるので,ちょっと手間ですね.

ソースコードの著作権表示

ソースコードには,よく「Copyright(C) foobar 2005」などという著作権表示をよく見ます.これは,具体的にどういう効果があるんだろうか,ということをちょっと調べてみました.

参考URL

特に前者がよくまとまっているのですが,さらにまとめると.

  • 万国著作権条約に基づく表示.(C),著作権者,最初の発行年をまとめて記載することで効果を持つ
  • ただし,現状では,ほとんど法的な効果はない*1.ただし,サイン程度の意味合いはある.あと,心理的な抑止効果もある程度は期待できる.

まぁ,気分が出るので,一応書いておきましょう,というぐらい.もちろん,表示されていないからといって,だまってライセンス違反をするのはいけません.

*1:1989年にアメリカがベルヌ条約に加盟したため,ベルヌ条約に加盟していないサウジアラビアラオスなど数国に対してのみ効果があるとのことです.

文字列操作の比較表

高林さんのいやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++に触発されて,個人的により混乱している文字列操作の表を書いてみました.個人的に使うもの,ということで,Perl, Java, WTL, STL, C, shです.さすがにshだと,できることは少ないです.

いずれも一通り使えるってレベルなので,間違いがあったらご容赦を.とくにperlは,もっとalternativeがありそう..

  Perl Java WTL::CString std:string C sh
長さ length($a) a.length() a.GetLength() a.length(), a.size() strlen(a)  
結合 $a = $a . $b a = a + b a = a + b a = a + b strncat(a, b, strlen(b)) a=$a$b
比較 $a eq $b a.equals(b) a == b a == b strncmp(a,b,strlen(a)>strlen(b)?
    strlen(a):strlen(b))*1
$a=$b
n文字目の取得 substr($a,n,1) a.charAt(n) a.GetAt(n), a[n] a[n] *(a+n)  
n文字目からm文字 substr($a,n,m) a.substring(n,m) a.Mid(n,m) a.substr(n,m) strncpy(b,a+n,m)  
部分文字列xを検索 index($a,$x) a.indexOf(x) a.Find(x) a.find(x) strstr(a,x)  
小文字にする a =~ tr/A-Z/a-z/ a.toLowerCase() a.MakeLower() _strlwr(a)*2    
大文字にする a =~ tr/a-z/A-Z/ a.toUpperCase() a.MakeUpper() _strupr(a)*3    
分割 split(/x/,$a) a.split(x)        
文字置換 $a =~ s/x/y/ a.replace(x,y) a.replace(x,y)      
文字列置換(最初のみ) $a =~ s/x/y/ replaceFirst(x,y)        
文字列置換(全部) $a =~ s/x/y/g replaceAll(x,y) a.replace(x,y)      
フォーマット sprintf("%s",$x) a.format("%s",x)*4 a.Format("%s",x) snprintf(a,strlen(a),"%s",x)    

追記(05/9/5)

id:Psychsさんのご指摘により,Javaの比較を修正( a == b → a.equals(b) )しました.

*1:返り値で大小までわかる

*2:VCにはあるが,glibcにはなさそう

*3:VCにはあるが,glibcにはなさそう.

*4:J2SE 5.0以降

Gmailの受信メール数制限

Gmail は1つのアカウントで受信するメールが多すぎると、一時的にアカウントを停止されてしまうみたいです。

だそうで,あんまり調子に乗って使っていると痛い目を見るかもしれません.私の場合,feed2gmailによる巡回しているfeedが200ぐらいなので,いまのところ問題なしです.また,asahi.comのような毎日大量のitemがあるようなfeedは,1メールにまとめている,というのも効果があるのかもしれませんが.(こんな感じです)

ちなみに,miyagawa氏のbloglines2emailは,bloglinesに巡回をさせているってのが,(多分)最大の差分なんですが,うまい方法です.世の中で配信されているRSS/Atomの仕様に準拠していない部分とかの微妙な解釈の違いを吸収するための実装は,かなり地道で大変なので,Bloglinesがそのあたりを全て吸収してくれるのは,かなりありがたいです.それに購読リストもBloglinesでそのまま管理できますしね.

しかし,さらに元ネタのGMailRSSはコンセプトが似てますね.

人間ラジコン@インタラクティブ東京

hcr2005-08-26


インタラクティブ東京に行ってきました.SIGGRAPHで入選した作品の展示がメインだそうで,どれもなかなか面白かったです.やはりインタラクティブな作品というのは,面白さがストレートに体感できて,分り易くてよいです.

中でも「Shaking The World: 前庭感覚電気刺激による新規感覚提示インタフェース」が,究極的に直感的,というか,神経に直接,電気的に働きかけるという,そうとう強烈な手法が,最高に気持ち悪くて,最高に面白かったです.事前に承諾書へのサインが必要!なデモでは「前庭感覚(平衡感覚)を電気刺激する」ということで,ヘッドホンのような装置を頭に付けて行います.装置を装着すると,耳の下あたりがピリピリとくるので,神経を直接刺激している感があります.

デモでは,「体験者の歩行をリモートコントロール」「映像の動きに併せて遠心力を体感できるゲーム」「音楽のリズムに合わせて世界が揺れる感覚を体験」の三つがありました.まず「体験者の歩行をリモートコントロール」ですが,これがまさしく人間ラジコンで,歩いているところで,ラジコンのコントローラで左右に操作されると,体が傾いている気がして,おっとっととそちらに曲ってしまいます.まず,これが気持ち悪いです.

次は「映像の動きに併せて遠心力を体感できるゲーム」でレースゲームのコース中でコーナリングのGを感じることができます.これは,だいぶまっとうな使い方です.

最後の「音楽のリズムに合わせて世界が揺れる感覚を体験」が強烈で,アップ系の音楽に合せて電気信号が送られてくるので,体がぐちゃぐちゃに傾いてしまう感覚で,相当に気持悪いです.「泥酔したときに頭の中がグルグル回っている感覚」というのが,だいぶ近いと思います.Rez もビックリです.

他のまっとうな用途としては,乗り物酔いの酷い人向けに,乗り物の揺れのカウンターとして与える,といったノイズキャンセルの揺れ版ということも考えているようです.でも,個人的には,デモの最後のトリップ系が,極めて独特の感覚で非常に面白く一押しです.もっとも,インタラクティブ東京は終ってしまったので,デモを体験できる場は,残念ながら,当分は,なさそうなのですが.

Google Desktop 2のSDKの新機能

Google Desktop 2ベータ版が出ましたね.英語版なので,日本語が検索できなくなる危険性もありますが,えいやっ,と入れてみたところ,特に問題は,なさそうです.

トラックバックをいただいた「[PC]Google Desktop Search 2(ベータ)を使ってみた」によると,拙作のBecky plugin for Google Desktop Search v0.0.5もちゃんと動作しているようです.しかも,「メールを登録するとどうしても同一メールが複数登録されるという現象が起こっていたが、今回のベータ版では解消されているようだ。」とのことなので,さらに素晴しくなっているようです.

新しいSidebarなんかは,すでに各所で紹介されているので,置いておいて,SDKの追加機能を調べてみました.今回の新機能は,「Implementing new Displays」「Defining GD user interface actions」「Receiving and Handling GD events」の三つです.ドキュメントを読んでも,イメージが捕めなかったので,サンプルも調べてみました.

  • Implementing new Displays - サイドバーに新しいコンポーネントを追加する
    • これは,そのままですね.このAPIを実装することで,新しいコンポーネントを作れます.
  • Defining GD user interface actions - UIのアクションを定義する.
    • アクションとは,ユーザが検索結果を表示させる時に,その動作を定義できるようになります.典型的には,メールのアクションがあります.メールの検索結果を見ると,返信や転送ができるようになっていますが,その動作を実装できるようになります.これは,OutlookとかThunderbirdなんかの標準で対応していたメーラでは実現されていたのですが,それを汎用的な形にした,というところでしょう.Beckyのプラグインにも組み込みたいところですが,Beckyを外部から操作することはできるのでしょうか? MAPIとか? ちょっと要調査です.あと,通常のファイルにもアクションが定義されていて,検索結果の表示方法を変更できたりします.
  • Receiving and Handling GD events - Google Desktopのイベントを受けとる.
    • これは,Googleデスクトップに新しいテキスト・メールなどがインデックスされた時のイベントを受けとることができるようになります.サイドバーのEmailとかWebClipsは,新しいメールや見たウェブページが一覧として見ることができるコンポーネントですが,おそらく,この機能を使って実装されていると思われます.

デスクトップ検索も,いろいろな実装がありますが,プラグインでの機能拡張性を考慮するとGoogle Desktopが頭一つ抜けてきたような気がします.

食べるクッキーを最小限にする方法

クッキーは,セッション情報を保存するため,とか,ユーザの行動を追跡するため,など,いろいろ便利に使われているようですが,前者はともかく,後者は,あまり気持ちのいいものではありません.そこで,「食べるクッキーを最小限にする方法」です.

  • 用意するもの
  • 準備
    • Firefoxの設定では,Cookieを全面的に拒否する.
      • Tools→Options→Privacy→Cookies→「Allow sites to set cookies」をオフにする.
    • Permit Cookieを有効にする.
    • (お好みで)Adblockでvalueclick関連とかは,そもそも読み込まないようにする.
  • ブラウジング
    • 最低限のCookieのみ食べることにする
      • Alt+Cで現在見ているドメインの設定を変えることができますので,たとえば,はてなの場合,「hatena.ne.jp」のドメインについて"許可"する.
      • ツールバーのボタンで「C」というボタンを追加することで,マウスでの操作も可能となります.

以前は,Firefoxの設定で「Cookieを食べる時に確認する」としていて,Cookieを食べさせようとされる度に一々拒否することで,長大なブラックリストを作っていました.これだと,見たことのない広告が一杯張ってあるような新しいページ(http://boingboing.net/とか)に行くと,10回ぐらいダイアログが出てくるのが,かなりウンザリでした.ただ,Cookieを食べたくない一念で,ポチポチと拒否していました.

ところが,上記の方法で,デフォルト拒否で,選択的にCookieを食べてもいいホワイトリストを作成することができるので,二度と見ないようなサイトのCookieまで,一々拒否する必要が無くなり,スッキリしました.