スキップしてメイン コンテンツに移動

投稿

ラベル(インターネット)が付いた投稿を表示しています

Thunderbirdで標準搭載されたPGPによる暗号化を利用する

電子メールクライアントのMozilla Thunderbird 78でやっとOpenPGPの機能が標準搭載された。 とはいっても、78.0.1ではまだ不完全で、78.1.0でほぼ完成したようだが、デフォルトではOpenPGPは使えない。今後リリース予定の78.2からデフォルトで動作するようになるらしい。 78.1.0で使うためには、「オプション」の「一般」の一番下の「設定エディター...」を開き、 mail.openpgp.enable を true にする必要がある。 ただし、設定をいじると動作保証対象外になるので、自己責任で対応すること。 今回の動作検証ではWindows 10上で実行させた 64ビット版Thunderbird 78.1.0 を使っている。 設定を済ませたら、「エンドツーエンド暗号化」のOpenPGPの「Add Key...」で秘密鍵をインポートもしくは作成する。 GnuPG などですでに鍵を作っているのであれば、それをエクスポートして読み込ませるだけだ。 公開鍵をインポートする場合、「OpenPGP Key Manager」の「Import Public Key From File」で対応可能だ。 早速、メールを作成し、「セキュリティ」から「暗号化が必要」と「このメッセージにデジタル署名」を選択して送信する。 メッセージは自分自身に送っているのであまり意味はないが、それぞれの機能がきちんと動作していることを確認することはできる。 この通り、暗号化とデジタル署名ができていることを確認できた。 PGPは昔からあるが、自分の周りでは使われているのをほとんど見たことがない。 Thunderbirdに標準搭載されたのを機に、広まってくれないだろうか。

Android端末をサーバにしてPyramidフレームワークを利用する

しばらく前に、PythonのWebフレームワークである Pyramid を利用した。これがなかなか良くできており、Android端末上でも動かしてみたくなったので載せてみた。 ところで、自分が利用しているキャリアはドコモなんだけど、 spモード だとグローバルIPが割り振られないので外部から端末にアクセスできない。なので、spモードを契約せずに、 mopera U を利用している。mopera UであればグローバルIPが割り振られるのでアクセスすることができるからだ。このためだけに、spモードにせず、mopera Uにしていると言っても過言ではない。 閑話休題。まず、Pyramidを動作させるにはAndroid端末用のPython環境である SL4A を入れる必要がある。次にPyramidを入れるのだが、必要なモジュールなどが複数あるのでそれも一緒に入れる。一応、Hello Worldプログラムを動かすのに必要なものはすべて挙げたが、もし足りない場合は実行時に何が足りないかエラー表示が出るので、それを参考に入れて欲しい。また、 Android SDK が導入されていることを前提にしている。 まず、Android端末にシェルで入ってプログラムを展開するディレクトリを準備する。環境に合わせてディレクトリは読み替えて欲しい。 > adb shell * daemon not running. starting it now on port 5037 * * daemon started successfully * $ cd /sdcard/sl4a/scripts $ mkdir pyramid $ exit 適当なディレクトリで以下のプログラム・モジュールをPC側で展開する。 pyramid-master.zip translationstring-1.3.tar.gz venusian-1.0.tar.gz WebOb-1.4.tar.gz zope.deprecation-4.1.2.tar.gz zope.interface-4.1.2.tar.gz repoze.lru-0.6.tar.gz PC側からAndroid端末にプログラム・モジュールをコピーする。 > adb push pyramid /...

IRCボットの作成

久々のブログ更新。書きたいときに書くというスタンスです。最近、会社でも技術ブログを立ち上げたので、そちらで書いても良いかも。 今回はIRCボットの作成について書いてみる。しばらく前から社内IRCで技術関連の雑談用チャンネルを利用している。技術系のメーリングリストもあるのだけど、わざわざメールで話題にするようなことでもない、軽い内容を気軽に議論できる場が欲しかったので有志で立ち上げた。IT企業にとって技術的な雑談をできる場はとても大事だと思う。 素のIRCの場合、発言内容がサーバに保存されず、途中から参加しても話題についていけないという問題が出たので、適当なボットで対応することにしたが、やはりエンジニアがメインの会社なのだからボットも自作が基本でしょ、ということでPythonで作ってみた。まあ、作ったといっても「 Python でシンプルな IRC クライアントを作成する 」のサイトを参考にさせてもらったのでスクラッチから作成したわけではない。 コマンド techlog: を入れると、その日の発言がボットからのtalkで返される。ただ、最初は1日分の発言しか取れない仕様だったので、日を跨ぐとその前の発言が取得できないし、一時的にチャットを抜けた分のログが欲しいだけでも強制的に1日分の発言を取得してしまう。 そこで、SQLite3を使ってユーザ毎にログイン・ログアウト時刻を管理して、ログアウトしてからログインするまでの発言を取得できるように変更することにした。新規に参加したメンバーでも自動的にデータベースに登録される。せっかくユーザの時刻情報があるのだから、 techtime: , techtimeall: というコマンドを作って、それぞれ自分の滞在時間、ユーザ全員分の滞在時間も取得できるようにしてみた。 IRCサーバ上で以下のコマンドを実行すると、IRCにボットが常駐する。 $ ./irc_bot.py > irc_bot.log & ソースコードは以下の通り。 そこそこ社内IRCも使えるようになったのだが、最近、別プロジェクトで利用を始めた Slack がかなり便利だったので、そこに技術系チャンネルを作ったところ、ほとんどのメンバーがSlackに流れてしまった…。次は Slackでボット作成 かなぁ。

一行でテキストに含まれるURLをすべて短縮URLに変換するPythonスクリプト

テキストに含まれるURLをすべてbit.lyの短縮URLに変換するPythonワンライナーを書いた。使用しているモジュールはre、urllib、urllib2、simplejson。コードに一行追加するだけだし、Twitterなどのメッセージを処理するのに便利だと思う。 for link in sorted(re.findall(r"(http(?:s?)\:\/\/(?!bit\.ly[\/\ ])[^\/\ ]+\/?.*?)(?:[\ <>\"\{\}\|\\\^\[\]\`]|$)", msg), reverse=True): msg = (lambda x: re.sub(re.escape(x), (lambda y: str(simplejson.loads(urllib2.urlopen("http://api.bit.ly/shorten?version=2.0.1&longUrl=%s&login= BITLY_ID &apiKey= BITLY_API_KEY " % urllib.quote(y)).read())["results"][y]["shortUrl"]))(x), msg))(link) bit.lyのAPIキーは 別途取得 しておく必要がある。 msg = u"ここのブログのURLはhttp://handasse.blogspot.com/ です。記事のURLはhttp://handasse.blogspot.com/2010/05/urlurlpython.html です。" としてURLを含むメッセージを処理すると以下のように変換される。 print msg ここのブログのURLはhttp://bit.ly/PQa9F です。記事のURLはhttp://bit.ly/cVRVu6 です。 上記のコードを展開したものが以下のコード。簡単なエラー処理を追加してある。 def bitly(x): try: data = urllib2.urlopen("http://api.bit.ly/shorten?version=2....

Google Waveを使わないと人生損する

「Google Waveを使わないと人生損する」…これはちょっと大げさかもしれないが、1年半前に書いたブログ記事「 Evernoteを使わないと人生損する 」で言及したEvernoteと同じぐらい、Google Waveが重要な技術になると感じたのは本当だ。当初、 Google Wave は自分にとって、 Google App Engine (GAE) などでプログラミングできる単なるおもちゃだった。しかしながら、今になってやっと、オンラインコラボレーションプラットフォームであるGoogle Waveの潜在能力の高さを知ることになった。 大量のメールに埋もれる情報と予定の立たないミーティング 最近、仕事上のメールのやりとりが頻繁ですぐに流されてしまうことが多く、大事な知らせを失念してしまったり、大量のメールから目的の情報を探し出さなくてはならなくなったりと、メールの扱いに手を焼いていた。さらに、直接顔を合わせるミーティングにおいても、この時期は皆忙しいようで、集まりたいときにすぐに集まれない状況が続き、何かと仕事が滞りがちになっていた。 そこで、昨年にアカウントを取得していたGoogle Waveに目を付けたのだ。今までGoogle Waveを仕事で利用しなかったのは、もともと GAEと連動させてWaveボットなどを開発する のが目的であり、コラボレーションツールとしてはあまり興味を持っていなかったからだ。それに、知人や同僚にもアカウントを持っている人がいなかった。 しかし、メールでのやりとりがひどく非効率に感じられ、必要なときにミーティングもできないというこの状況を打破すべく、Google Waveのアカウントを職場で配ってみることにした。そこでまずは、IT関連の最新技術に明るい同僚に利用してもらい、しばらく一緒に使ってみたのだが、特に問題となるような点もなく、使い勝手もそれほど悪くはなかったので、他のメンバーにもアカウントを配ることにした。 本当に新しいことは理解され難い Google Waveアカウントを配ったメンバーに早速使ってみてもらったところ、おおむね好評を得られて…というほど甘くはなく、やはり第一印象は「難しい」、「使いづらい」、「メールでいいんじゃないの」という意見だった。誰もGoogle Waveの名前すら聞いたことがな...

無線LANで現在位置を取得してGoogleマップとストリートビューで表示する

昨年の8月に書いた記事、「 Google App Engine: Gearsで位置情報を取得してストリートビューで表示させる 」で、無線LANから取得した現在位置を Googleマップ と ストリートビュー で表示するウェブアプリを作ったが、今回、それをブログなどにもそのまま貼り付けられるようにしてみた。もともと、JavaScriptを使ったアプリなのでそれほど変更するところもなかったのだが、無用な部分を削除し、きちんと画面にエラーメッセージを表示するようにした。動作させるためには Gears をインストールしている必要がある。 無線LANから現在位置情報を取り出すためにGearsの Geolocation API を使った。位置情報を取り出したらあとは Google Maps API でそれをGoogleマップとストリートビューで表示させるだけだ。因みに、今年の7月からGoogleマップの画面で左上にある四角いボタンを押すと 現在位置を表示できる ようになっている。 今回のアプリでは、現在位置を示すマーカーに自作の扇形アイコンを使った。ストリートビューの向きと連動している。ペグマン(人型アイコン)でもよかったのだろうけど、個人的には向いている方向が分かりづらいと思う。 以下にソースファイルを示す。ページを読み込んだ際にGearsにより位置情報を取得している。 <script src="http://maps.google.com/maps?file=api&v=2.x&key= Google Maps API Key " type="text/javascript"></script> <script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script> <script type="text/javascript"> var map; var pano; var overlayInstance = null; var marker;...

結局Pythonを使ってコマンドラインで動作するTwitterクライアントを作ってしまった

Twitterのアカウントを取ってから既に1年半になるが、活発に使っているとは言い難い。その原因の一つとして Twitterのクライアント がある。どうにも自分が利用するのにピッタリだと思うクライアントが見つからなかったのだ。そこで結局、自分の好みに合わせてコマンドライン上で動作するシンプルなTwitterクライアントをPythonで作ってしまった。しかも、ワンライナー(1行プログラム)。 最初の頃はいくつかのクライアントを使ってみたのだが、PCでの作業はシェルで行うことが多いので別のウィンドウを開きたくなかったり、Windows、Unix、MacなどのOSが変わっても同じクライアントを使いたかったり、GUIじゃなくてCUIで操作したかったり、それほど使い込むつもりがないので極力シンプルでコンパクトになっていて欲しかったり、そもそもクライアントをインストールしたくなかったりと、かなり条件を厳しく求めていたら使えるクライアントがなくなってしまい、結局、公式サイトもしくは 自分で作成した掲示板 からたまにつぶやくだけになってしまった(ただし、 Twitterfeed は利用している)。 しかし、最近になってタイムラインをよく眺めるようになり、これが結構面白いと気がついた。自分と違う考え方に触れるのは楽しい。そして、自分ももう少しつぶやいてみようかと思ったのだが、公式サイトや掲示板からのポストはいちいちブラウザを開かなくてはならず手軽だとは言い難かった。 そこで、先日、 PythonのワンライナーでTwitterを使える ようにしたこともあり、もう少し改良してそれをクライアントにすることにした。Pythonスクリプトなら、Pythonが入っていればどのOSでも動作するし、使い方はどこでも一緒で、コマンドラインでそのまま使え、タイムラインをgrepなどで簡単に選択表示できる。それに、たった1行のソースコードなので簡単に中身を確認でき、パスワード漏洩やキーロガーなどを心配しなくてもいい。 tw.py でタイムラインを取得することができ、 tw.py つぶやき tw.py つぶやき http://handasse.blogspot.com/ ブログのURLです。 tw.py "つぶやき&つぶやき" tw.py "つぶ...

PythonのワンライナーでTwitterを使う

Twitterでつぶやいたり、タイムラインを取得したりするPythonのワンライナー(1行プログラム)を作ってみた。取り敢えずWindowsで動作は確認した。Pythonさえ入っていればどこでも動くと思う。シェルやcronに組み込んだり、ウェブアプリや自作プログラムで利用したり、Python以外に必要なものがないから手軽に使えるんじゃないかな。ただ、ユーザ名とパスワードは生テキストなのでその辺は気をつけるべきかも。 まず、Twitterでつぶやくワンライナー。 python -c "import urllib,urllib2;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com',' username ',' password ');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));urllib2.urlopen('http://twitter.com/statuses/update.xml',urllib.urlencode({'status':' つぶやき '.decode('cp932').encode('utf-8')}))" 次に、タイムライン取得。 simplejson を使っている。 python -c "import sys,urllib,urllib2,xml.sax.saxutils,simplejson;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com',' username ',' password ');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));sys.stdout.write('...

Google App Engineを利用してmixiアプリを作成する

最近、mixiアプリの正式版がリリースされたらしい。以前、オープンベータが始まったときにちょっと興味を抱いたのだが、そのまま忘れてしまっていた。しかし、この正式版リリースでまた興味が湧き、Google App Engine (GAE)と絡めてちょっといじってみたので、GAEを利用したmixiアプリの作成方法を説明してみようと思う。 まず、GAEを初めて利用する場合は、 Google App Engine - Google Code でアカウントを取得する。SDK一式を落としてきて使えるようにしておくこと。次に、mixiアプリを申請できるように、 デベロッパー登録 をしておこう。 さて、ここから本格的にmixiアプリを作成するわけだが、誰でも(自分を含めて)簡単に理解できるように「 はじめてのmixiアプリ 」の「Hello, world!」アプリケーションを元に作成することにした。 ところで、GAEを単なるファイル置き場として使うだけであれば、次のように設定すればいい。まず、作業ディレクトリにgadgetsディレクトリを作成して、そこにGadget XMLファイル(ここではhello.xmlとする)を置き、app.yamlのhandlersに以下の設定を追加する。 - url: /(.*\.xml) static_files: gadgets/\1 upload: gadgets/(.*\.xml) これを、そのまま以下のコマンドでアップロードする。そして、mixiアプリ登録で、Gadget XMLファイルのURLを、 http://アプリケーション名.appspot.com/hello.xml のように指定するだけだ。 appcfg.py update アプリケーション名 しかし、ファイル置き場にするだけならば、GAEである必要はないわけで、ここではちゃんとGAEを利用した使い方を説明する。 Google App Engineを利用したmixiアプリ「Hello, world!」 GAEを利用するということで、「Hello, world!」アプリケーションの表示を「Hello, ユーザ名!」から、時間に応じた挨拶に変更してみる。朝なら「おはよう, ユーザ名!」、昼なら「こんにちは, ユーザ名!」、夜なら「こんばんは, ユ...

Python: URL短縮サービスbit.lyのAPIを使ってみた

最近、 TwitterがTinyURLを捨ててbit.lyを採用 したらしい。そんなこともあって、URL短縮サービスに興味がわいたので、以前にGoogle App Engineで作成した Twitter送信機能付きメッセージボード で書き込んだURLをbit.lyで短縮して送信できるようにしてみた。今まではURLを含む投稿はTwitterに送信しないようにしていた。以下にbit.lyのAPIをPythonを使ってどのように利用すればよいか書いてみる。 まずは、 bit.ly で無料アカウントを取得する。これで API Key が貰えるので、bit.lyのAPIを利用できるようになる。次に、 bit.ly APIの解説 を参考にしながら、APIを使ってみる。URLの短縮も展開も簡単だ。JSONでもXMLでも利用できるが、今回はsimplejsonを使ってJSONを利用している。 詳しくは最後にソースコードを付けたのでそれを読んで欲しい。因みにソースコード中の赤字で示した部分がアカウント名とAPI Keyになる。コード中のアカウントはbit.lyのデモ用なので、自分のアカウントと置き換えて欲しい。使い方は、 bitly_test.py URL とすればよい。URLが短縮URLなら展開され、通常のURLなら短縮URLが表示される。 また、Google App Engineで利用する場合は、simplejsonを from django.utils import simplejson として呼び出し、urllib2.urlopenをurlfetch.fetchに変更すればよい。 bitly_test.py #!/usr/bin/env python import sys, os, re, urllib, urllib2 import simplejson apiurl = "http://api.bit.ly/%s?version=2.0.1&%s=%s&login= bitlyapidemo &apiKey= R_0da49e0a9118ff35f52f629d2d71bf07 " api_index = { "shorten": "longUrl...

Evernoteを使わないと人生損する

Evernote を使っていないと人生を損していると思う。もちろん独断と偏見だけど。それにしても、もっと早くからこのようなサービスがあることを知っていればなぁ、と思ってしまう。それほどまでに個人的には画期的なアプリケーションであり、サービスであったのだ。 少し前にあるウェブサイトでEvernoteのことを知り、すぐにインストールした。しかし、イマイチその便利さが分からずしばらく放置していた。まず、どのように使えばいいか分からない。画像やPDFファイルなどを貼り付けることができるノートのようなものと云うことは分かったのだが、どこが便利なのか。普通にノートを取れば済む事ではないかと思ってしまったのだ。 それで、Evernoteはしばらく使っていなかった。ところで、自分は仕事用のノートを持っており、ミーティングやセミナー、仕事の進捗、ちょっとしたメモをこれに書いていた。ある日、以前行った仕事の手順を知るためにそのノートを見返してみたのだが、すぐに該当する箇所を見つけることができなかった。この時間の浪費はひどく損だ。特に仕事関係のメモは高い頻度で見返すことが多く、仕事の効率にも響く。そこで、Evernoteを思い出した。Evernoteならタグでグループ分けもでき、ソートや検索もお手の物だ。これは使わない手はないと、ここで初めて気が付いた。 それからしばらく使ってみたのだが、これがとても良い。まず、入力したメモやデータがオンラインストレージと同期されるので、どのPCからも同じノートを読むことができる。もちろん、オンラインでデータを扱うことに対しセキュリティが気になるようならローカルデータとして扱うこともできる。この場合、入力したPCでしか閲覧できないが。 また、普段PCを使って仕事しているので、仕事の進捗など一々ノートを取り出して開いてペンで書き込むという行為はそれだけで効率が落ちるのだ。EvernoteであればPCから離れることもない。さらに、仕事のデータ、例えば数値計算のグラフなどを画像のまま貼り付けることができるのも凄く便利だ。 自分は仕事柄、論文を読むことが多く、ほとんどの場合PDFで保存されているのだが、その管理が今までは非常に大変であった。ファイル名やフォルダでの分類に気を使って管理していたのだが、これだと手間が掛かり、ファイル数が多いとあ...

Python: はてなブックマークのコメント一覧非表示機能について

はてなブックマークのコメント一覧を非表示にする機能 が追加された。しかし、 新着ブックマーク からはコメントが読めてしまう。 例えば、 はてなブックマークのコメント一覧非表示機能テスト のページは コメントを非表示 に設定しているが、 その新着ブックマークのページ を開くとコメントが表示されていることが分かる。さらに、下記のPythonスクリプトを hatena_get_comments.py http://d.hatena.ne.jp/fk_2000/20080829/p1 のように実行させると、すべてのコメントとそのユーザ名を表示することができる。 これをGoogle App EngineでWebサービスとすることは簡単だろう。Webサービスの公開はモラルに欠けるようにも思うのでやめておくが、本当にコメントを読めなくするつもりなら今回の非表示機能は中途半端と云わざるを得ない。 因みに、個人的にはコメントを非表示にすることについては賛成とも反対とも考えておらず、あまり関心がない。しかし、はてなブックマークの存在意義にも関わってくるような機能についてはもう少し議論・熟考したほうが良いようにも思える。 hatena_get_comments.py #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os, urllib, urllib2, xmlrpclib from HTMLParser import HTMLParser class HatenaHTMLParser(HTMLParser): is_user = False is_comment = False comments = [] current_user = "" current_comment = [] def handle_starttag(self, tag, attrs): if tag == "dd" and ("class", "bookmarker") in attrs: self.is_user = True e...

Python: はてなブックマークのAPIを使ってみた

最近、はてなブックマークを使い始めたこともあり、 はてなブックマークのAPI について調べてみた。ざっと確認をした後、Pythonで はてなブックマーク件数取得API と はてなブックマークエントリー情報取得API を使ってみた。 はてなブックマーク件数取得APIはブックマークされた件数とAmazonの商品がコレクションされた件数をXML-RPCで取得することができる。一方、ブックマークエントリー情報取得APIでは、はてなブックマークのエントリーの情報をJSON形式で取得することができる。サンプルコードを以下に示す。 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import xmlrpclib import simplejson url = "http://www.hatena.ne.jp/" asin = "4774124966" # はてなブックマークエントリー情報取得API. data = urllib2.urlopen("http://b.hatena.ne.jp/entry/json/%s" % url).read() info = simplejson.loads(data.strip("(").rstrip(")")) if info: title = info["title"] cnt = int(info["count"]) bookmarks = info["bookmarks"] cnt_user = len(bookmarks) cnt_comment = 0 for b in bookmarks: if b["comment"]: cnt_comment += 1 print b["comment"].strip() if cnt_comment > 0: print print u"タイトル: %s...

Google App Engine: Gearsで位置情報を取得してストリートビューで表示させる

Gears に ジオロケーション専用のAPI(Geolocation API) がリリースされたのでGoogle App Engineで実装してみた。まず、Geolocation APIで位置情報を取得し、 Google Maps および Google Street View により表示するWebアプリだ。因みに、アプリを実行させるには予めGearsをインストールしておく必要がある。 Geo View コードは基本的には Street Stroll を使っており、初期位置情報をGeolocation APIのgetCurrentPositionメソッドにより取得している。下記に示すコードが主な変更部分になる。 Gearsのコアであるgears_init.jsの読み込み。 <script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script> 初期化関数initialize()の前にinitialize_geo()を噛ませ、変数lat, lngにそれぞれ緯度・経度が入るようにしている。 function updatePosition(position) { lat = position.latitude; lng = position.longitude; initialize(); } function initialize_geo() { if (window.google && google.gears) { var geo = google.gears.factory.create("beta.geolocation"); geo.getCurrentPosition(updatePosition, function(positionError) { alert(positionError.message); }); } else { if (confirm("位置情報を取得するためにはGearsが必要です。インストールしますか?")) { ...

Google App Engine: mixi OpenIDで認証する

mixiがOpenIDに対応した ということで早速Google App Engineで実装してみた。 以前のエントリ で紹介したが Google App Engineのサンプル集 に OpenID Consumer というWebアプリがあるので、 そのソースコード を利用させてもらった。 しかし、実際に使ってみればわかるのだがこのコードにはいくつかのバグ(とGoogle App Engineの制限)があってちゃんと動かない。下記のリンク先は正常に動くように修正したものだ。 mixi OpenID テスト 以下にバグの箇所とその修正コードを示す。 consumer.py 344-345行目の以下のコードを self.response.set_status(302) self.response.headers['Location'] = redirect_url 以下のように修正する。 self.response.out.write("<html><head><meta http-equiv=\"refresh\" content=\"0;url=%s\"></head><body></body></html>" % (redirect_url,)) これはGoogle App Engineの制限を回避するためで、一度HTMLを表示し同時にリダイレクトを行っている。 fetcher.py 以下の57行目からのコードで、青で示したコードの後ろにある赤で示したコードを青のコードの前に移動させる。 if body: method = urlfetch.POST if 'Content-Type' not in headers: headers['Content-Type'] = 'application/x-www-form-urlencoded' else: method = urlfetch.GET if not headers: ...

「Googleを支える技術」を読んで

Googleを支える技術 を読んでみた。Googleが出している論文を分かりやすく噛み砕いて説明している。基本的には論文を読めば分かることなのだが、それほど分量もなく平易に書かれているので、ざっとGoogleの技術を理解するのには良いと思う。 内容としては、Googleの歴史、Googleファイルシステム(GFS)、分散ストレージ(Bigtable)、分散データ処理(MapReduce)、運用コスト、開発体制について書かれている。GFS, Bigtable, MapReduceあたりは技術的な話で、まあ面白いのだが、大体予想していた通りであった。それに対して、運用コストの話は自分の視点からではほとんど考えない部分であり、Googleが如何に電力を少なくするかに注力しているかが良く分かり興味深い。また、開発体制については自分の考えている理想に近いものであった。 ここのところ、思ったよりも自分がGoogleに傾倒していると感じる。理想としては多種多様な技術をはまんべんなく吸収し使用していくべきだろうが、Googleをベータ版の頃から使っている自分としてはついついGoogleの技術に目が行ってしまう。自分のメイン言語がGoogleと一致していることも大きいのかもしれない。それでも、様々な技術を勉強する姿勢だけは忘れないようにしたい。

GoogleでOpenIDを取得する

Googleのブログサービス Blogger でブログサイトを作れば、そのURLがそのままOpenIDとなる。ブログサイトをわざわざ作りたくない場合は、 OpenID for Google Account というGoogle App Engineのサービスが稼動しているのでこれを利用しよう。これならば、Googleアカウントさえ持っていればOpenIDとしてすぐに使える。 実は、BloggerのURLがOpenIDになっているのを知らずに、日本で最初のOpenIDプロバイダである OpenID.ne.jp でOpenIDを取得したのだが、どうもここのサイトが心もとなく感じたので、少し調べてみると、様々な不安の声が上がっていることを知った。 サーバが落ちる 、 登録確認メールに不具合がある 、 SSLを利用していない 、などなど。そんな声もあってか、ついには究極の個人情報漏洩対策が取られたようで、ここでOpenIDを取得する際、必要な情報はニックネームとパスワードだけになってしまった。メールアドレスさえ必要ないのだ(因みにOpenID作成後に登録・更新可能)。確かに個人情報を登録しなければ漏洩は防げるだろうけど、捨てID作り放題で、OpenIDの信憑性を著しく下げないだろうか。もっとも、OpenID自体は個人の特定には不向きな方法なので、こういうのもありなのか。 と云うわけで、Bloggerを利用している・利用する予定の人や、GmailなどでGoogleアカウントを持っている人は、第三者サイトでOpenIDを作成しなくてもすぐに利用できる。今年はOpenIDが流行るのかなぁ。 追記: 独自ドメインなどでbloggerのOpenIDを利用したい場合、<head></head>内に以下の2行を記述する。 <link rel="openid.server" href="http://www.blogger.com/openid-server.g" /> <link rel="openid.delegate" href="http://ブログ名.blogspot.com/" /> 追記2: OpenID.ne.jpでパスワ...

Google: Livelyの仮想世界でオブジェクトを自作する

Googleグループの Lively Help で Building Stuff for Lively という掲示があった。以下に引用する。 Glad to see so much interest in contributing content! We're gearing up to enable user-created content, but we're not quite there yet so we appreciate you patience. If you're interested in becoming a content devleoper, please email: livelydevelopersignup at google.com (replacing the spaces and "at" w/ @) We'll get in touch with you when we're getting ready to give the green light. ということで、 Lively のコンテンツ開発者になることに興味ある人は上記のメールアドレスにメールを送ると、オブジェクトやアイテム、コンテンツの作成が可能になった時点で連絡をくれるらしい。 詳しいことはまだ分からないけど面白そうだ。 追記: すぐに返事が来たけど、MaxやMayaを使った経験があるかとか、3Dゲームのコンテンツを作ったことがあるかとか訊かれた。んー、OpenGLとC++で分子モデリングソフトウェアとかは作ったことがあるけど、専門的な3Dモデリングツールなどは使ったことないなぁ。この辺が必須だと自分にはちょっと難しいのかな。 追記2: 「高機能な3Dモデリングツールは使ったことがなくて、3D関係では分子モデリングソフトウェアぐらいしか作ったことがない。MaxやMayaが必須だと自分が開発者になるのは難しいと思う」ってメールをしたら、その返事が来た。やはり現在のところ、コンテンツを作成するのにMaxかMayaを使う必要があるらしい。うーん、この辺のツールは数十万円ほどすると思うし、個人では購入できないなぁ。また、現在、GoogleデスクトップガジェットをLively内...

Google: Livelyの簡単な使い方と遊んでみた感想

Googleがセカンドライフに類似したサービス、 Lively (ライブリー)を公開した。クライアントをダウンロードしてインストールするのは同じだが、それ以降は全てウェブ上で操作ができる。実際に使ってみたところセカンドライフよりもかなり簡単だと感じた。 まず、Googleアカウントでサインアップし、もし、自分のルーム(room)を作っていないのであればMy roomsからCreate a new roomボタンでルームを作る。ルームを作成したあと、まずは一番上のアイコン、My Avatarで自分のアバター(分身)を作る。体のパーツなどが複数あるので組み合わせて自分好みのアバターを作ろう。上から2番目のアイコンはMy Wardrobeで衣装棚だ。好みの服装などをここで揃える。3番目のアイコンはPeopleで現在入っている人々の情報を確認できる。4番目のアイコンはInvite Peopleで電子メールなどで知り合いを自分のルームに誘うことができる。5番目のアイコンは調度品・付属品の管理で、ここでルームに置くための様々な品物を選ぶことができる。6番目は調度品などを動かして自由に配置できるようになる。7番目のアイコンは、新しいルームを作ったり、現在のルームの名前や外観を変更することができる。最後のアイコンはほかのルームのリストを表示させる。 以上、簡単な操作方法を説明したが、カタログからはデフォルトで支給されている調度品やルーム外観以外のデータを手に入れることができるのでそちらも確認して欲しい。また、調度品に含まれるTVモニタや写真立てには、それぞれYouTubeの動画を指定したり、Picasaから写真を取り込んだりもできる。なかなか面白い試みだ。 アバターとルームを作ったので、実際にどんなものか確認するために Google Room に入ってみたが、最初の読み込みに時間がかかった。セカンドライフの時もそうであったがうまく処理できないものだろうか。しかし、それを読み込んでしまえば比較的軽快であった。3年以上前のノートPCでも何とかなるくらいだ。 入ってすぐに周りを見回してみたが、そこには20~30人ほどのアバターがいた。どうやら人数制限で入れない人もいるようだ。チャットは吹き出し形式で、画面に映っていないアバターからの発言でも、吹き出しが見えるようになっ...

Facebookに登録してみた

日本語版がリリースされたということで Facebook に登録してみた。実は、mixiを含めいくつかのSNSに加入しているのだが、現在はほとんど利用してない。以前はあるSNSを結構利用していて、そこのブログも毎日更新し、それなりに好評だったのだが、半年ほどでやめてしまった。確かにブログの更新やそれに対するコメントなどは楽しかったのだが、多忙であったり、別のことに興味が移ってしまったりでそれきりと云う感じである。別に義務感などは持っていなかったし、書き込みに疲れたというわけではないのだが。