Apr 30, 2009

オレンジカードを使い切りました

ずっと死蔵していたオレンジカードを使い切りました。ご存知ない方のために説明しておくと、オレンジカードは、SUICAの前のイオカード登場以前に流通していたプリペイドカードです。現在でもこっそり売られており、SUICAで完全にリプレースされたイオカードより結果的には長生きしています。

東海道新幹線開業25周年ですから、1989年発行のオレンジカードです(不人気の100系)。おそらく受験の下見か何かで新幹線に乗ったときにアンケートに答えたら謝礼にくれたものだったと思います。20年も前のオレンジカードが使えるってすごいですね。

この調子で死蔵しているテレフォンカードも使い切りたい…。

Apr 28, 2009

Bloggerへの移行を開始しました

Bloggerへの移行を開始しました。旧URL (http://as-is.net/blog/) にアクセスするとこのブログにリダイレクトされるはずです。

「開始しましたって?」と疑問に思われるかもしれません。実は面倒くさいことに巻き込まれています。

基本的には下の記事で書いたmt2bloggerを使って移行します。

Ogawa::Buzz: MTからBloggerへの移行についての覚え書き(2)

が。

スパムブログ対策のため、Blogger Data APIはスロットリングされており、一日あたり50件までしかポストできません。しかもこの制限に2回引っかかるとアカウントがロックされます。ロックされてもWeb UI経由ならCAPTCHAコードを入力することでポストできます(そうじゃないとこの記事自体ポストできませんよね)。

「ロック解除の確認をリクエスト」というところからリクエストすれば2営業日くらいで解除されます。一旦解除されれば、それ以降アカウントロックされることはなくなりますが、一日あたり50件という制限は残ります。残りのすべてのエントリをBloggerに移行するにはひと月近くかかることになります。

そういうわけで気長に移行するつもりです。

Apr 26, 2009

読売 - 中日 第6回戦

今シーズン初めて東京ドームに足を運びました。東京ドームの巨人戦は日曜でもナイトゲームばかりでしたが、今日はデーゲームでした。確か先々週の阪神戦もデーゲームでしたが、今年から休日のデーゲームが増えたんですね。とてもいいことです。

ざっくり試合結果。

Yahoo!プロ野球 - 2009年4月26日 巨人vs.中日

滅多にない快勝でした。先発の川井ちゃん(川井ちゃんは今年から登録名が「川井進」から「川井雄太」に変わりました)とリリーフ陣がランナーは出すものの粘り強く投げてくれました。振り返ってみればこの三連戦、小笠原・ラミレスを封じ切ったわけですから我が軍の投手陣はかなり優秀です。打撃陣も好調を維持しています。荒木の三割とかいったいいつ以来ですかって感じ。あと井端の守備範囲が回復してきたみたいです。去年は怪我の影響でちょっと狭くなってたんですがそれだけでも中日ファンは絶望していました。

そうそう、いつものようにローソン端末で買った内野C席三塁側のチケットだったんですが、たまたまほぼバックネット裏でした。これはとてもラッキーでした。


まるでテレビゲームのような視界。


いいよいいよ川井ちゃん。

Apr 25, 2009

Movable Type逆引きデザイン事典

小粋空間の荒木さんらの共著による「Movable Type逆引きデザイン事典」のいただきました。

この本は、とりあえずMovable Typeをセットアップしてブログを始めてみたけど自力でカスタマイズしてみたい人、Web制作の仕事をしていてカスタマイズする必要に迫られている人に向けた、辞典風に使う本です。頭から読もうとすると挫折します。4部を斜め読みした限りでは、MultiBlogとかMotionとかActionStreamとか私がもう把握していない(笑)事柄について書かれていて勉強になりました(正直に言うと、mt:Entriesにuniqueという引数ができてたのも知りませんでした)。

Apr 23, 2009

祝・Google AppEngine SDK 1.2.1リリース

Ogawa::Buzz: AppEngineからはてなブックマークAPIを叩くと403 Forbiddenになる件で書いたGoogle AppEngineではてなの提供するAtom APIの一部にアクセスできない問題ですが、AppEngineの方で対応してくれました。

Google App Engine Blog: SDK version 1.2.1 released

urlfetch.fetchでUser-Agentがセットできるようになっていました。素晴らしい!他にもいくつかの改善点があり、上記から確認できます。

でもなんでこのタイミングで?Issue Trackerには一年前くらいから上がってた問題だったんですけどね。

Issue 342 - googleappengine - Change the user agent of URL Fetch API - Google Code

さて、Ogawa::Buzz: hatena-bookmarker-appengine (だが動かない)のコードを使うと、403 Forbiddenを食らっていたのが、401 Unauthorizedを食らうようになりました orz

先が見えてきた感じですね。 パスワード、間違ってたww というわけで、SDK 1.2.1とhatena-bookmarker-appengineの組み合わせなら動作するようになりました。めでたしめでたし。

Office 2008 for Mac: PowerPointのお気に入り機能

Office 2008 for Macモニターキャンペーンのレビュー。えーと何回目でしたっけか。前回のは番外編だったので3回目ということで。

やっぱり私はPowerPointを使っている時間が一番長いので、Office 2008 for MacのPowerPointで「お!これは!」と思った機能を二つ紹介しておきます。

ひとつ目は、画面切り替えで3-Dの切り替えができるようになっている点です。エレメンツギャラリーの「画面切り替え」を選択し、続いて「3-D」を選択すると、8種類の中から3-D切り替えモードをページに割り当てることができます。3-Dのキューブにページを割り当てて回転させているだけで技術的に難しいことをやっているわけではありませんが、単純にかっこいいです。無駄に多用してしまいそうです。

もうひとつは、SmartArtグラフィックです。これは説明図などを作るのに便利なツールで、やはりエレメンツギャラリーから呼び出すことができます。SmartArtグラフィックでは、まず既製のリスト、手順、循環、階層構造、集合関係、マトリックス、ピラミッドの中からレイアウトを選択し、その後にそのレイアウトに流し込む構造化テキストを入力することで、図を完成させます。

秀逸なのは、入力されたテキストの構造に応じてレイアウトが更新される点です。例えば、双方向循環のレイアウトを選択すると、デフォルトで三角形の(つまり3頂点の)ブロック図が表示されます。

テキストウインドウにアイテムを入力していくとそれに応じてブロック図が更新され、6アイテム入力すれば、下のように六角形のブロック図が自動的に作られます。

もっと愉快なのは階層構造を持った図の場合です。

こんな調子で、均衡二分木を延々描いていると、緩衝剤をプチプチつぶしているときのような快感を覚えるのは私だけですか。そうですか。

Apr 22, 2009

hatena-bookmarker-appengine (要SDK 1.2.1以降)

一応、Ogawa::Buzz: AppEngineからはてなブックマークAPIを叩くと403 Forbiddenになる件の検証用みたいなコードを書いてみました。

hatena-bookmarker-appengine - Google Code

動かないので動作確認もしていません。Pythonドシロウトなのでとんでもないミスをしている可能性もあります。 SDK 1.2.1で動作確認しました。ちゃんと動きます。

意図としてはAtom/RSSフィードをフェッチしてきては、それに含まれるエントリをはてなブックマークに投げ込むという動作を期待しています。使い方は、hatena_bookmarker.yamlに下のように書いておき、

hatena_username: hogawa
hatena_username: passwd
feeds:
 - http://feeds2.feedburner.com/ogawa
 - http://...
 - http://...

http://app-id.appspot.com/hatena_bookmarkerというURLを手で叩くか、cronの設定をcron.yamlに書いておいてAppEngineに叩いてもらうかすることで動作します。

AppEngineの1リクエストあたりの処理時間にリミットがあるはずなので、フィードをたくさん書くとタイムアウトしていやんとかいろいろ要改善点はあります。

AppEngineからはてなブックマークAPIを叩くと403 Forbiddenになる件

真偽のほどは定かではないのですが、はてなブックマークAPIがUser-Agentをチェックしているっぽいですね。

JavaでAtom APIでのはてなブックマークPOSTが403 Forbidden - higebu325の日記

これが本当なら困りましたぞ。Google AppEngineからはてなブックマークAPIを叩くと必ず403 Forbiddenを食らうことになりますぞ。

AppEngineのurllib2.urlopenやurlfetch.fetchを使うと、User-Agentはデフォルトで空になっています。しかも、URL Fetch Python API Overview - Google App Engine - Google Codeに書いてあるように、セキュリティ上の理由からUser-Agentをオーバーライドできないようになっています。もう少し正確に書くと、たとえオーバーライドしたとしてもAppEngineのSandboxが適当なものに書き換えてしまいます。

うぐぐ、はてなの方で何とか特別扱いしてAppEngineからのPOSTリクエストを通してくれないものですかね。

追記: Ogawa::Buzz: 祝・Google AppEngine SDK 1.2.1リリースで書きましたが、SDK 1.2.1ではUser-Agentを設定できるように変更されています。ですので、このポストに書いた問題は解決済みです。

Apr 20, 2009

NHK Style up スタイルアップ

最近気になっているのは、NHK教育の木曜21:30の枠はいったいどうなってるのか、ということだ。

NHK Style up スタイルアップ

まさかNHK教育でBrovo TVのリアリティショーが観られる時代が来ているとは思わんかったわ。プライムタイムのニュースショーの裏番組としてこっそりやってりゃバレないとでも思ったか。

NHK教育はじまったな。

Apr 19, 2009

feedflare-appengineがlivedoorクリップに対応

ついでなのでfeedflare-appengineをlivedoorクリップにも対応させました。

feedflare-appengine - Google Code

パーソナル・フィードフレアのURLとして「http://feedflare.as-is.net/livedoor」を指定するだけで、使い方はまったく同じです。

feedflare.as-is.netでホスティングしているFeedFlareのカタログは、以下のURLで確認できるようにしてあります。

http://feedflare.as-is.net/

他にあったらいいなというFeedFlareのアイディアがありましたらコメントをお願いしますね。feedflare-appengineのコミッターになっていきなり追加してくれる人も募集中。

ちなみにFeedBurner側でFeedFlareの内容を1時間くらいキャッシュするみたいです。すぐに反映されなくてムッキー!となりますが我慢してください。

Google AppEngineでホスティングするはてなブックマークFeedFlare

FeedBurnerにはFeedFlareという機能があります。平たく言うとフィードのContentの末尾に任意のリンクを生成する機能なのですが、Webサイトにリンクを生成する用途にも使えます。例えば、この記事の直下にFeedFlareを使ったリンクが表示されているのが見られるはずです。

FeedFlareにはAPIが用意されていてユーザが新しいFeedFlareを作って追加することができるようになっています。

FeedFlare Developer Guide - FeedBurner API - Google Code

誰か作っているだろうと思ってはてなブックマーク用のFeedFlareを探したのですが見つかりません。FeedBurner.jpにはあったような気もしていたのですが、Googleにアカウントが統合されてしまっていて見当たりません。じゃあ作ろうと思って一旦はPerlで書いたのですが、自前でホスティングするのが面倒なのでPythonで書き直してGoogle AppEngineでサービスすることにしました。

以下が作ったFeedFlareのUnit URLです。どなたでもご自由にご利用ください。

"Save to hatena" FeedFlare: http://feedflare.as-is.net/hatena

ソースコードは以下にあります。

feedflare-appengine - Google Code

FeedBurnerでの設定の手順は以下の通りです。

まず、設定したいFeedBurnerフィードのダッシュボードから「最適化」タブを選択し、左のメニューから「FeedFlare」を選択します。

「パーソナル・フィードフレア」という項目があるので、「http://feedflare.as-is.net/hatena」と入力して「新しいフレアを追加」ボタンをクリックします。

すると、パーソナル・フィードフレア「Save to hatena」という項目が追加されます。「フィード」と「サイト」のチェックボックスの一方または両方にチェックを入れます。

画面を一番下までスクロールしたところにある「有効にする」ボタン(フィードフレアが無効な状態だった場合)、または「保存」ボタン(フィードフレアが有効な状態だった場合)をクリックして設定を保存します。

以上で設定は終わりです。この設定画面では、フレアの表示順の制御することもできますし、ブログなどへの設置方法についても詳しく説明してあるのでよく読んでいろいろ試してみてください。

Apr 17, 2009

MTからBloggerへの移行についての覚え書き(2)

Ogawa::Buzz: MTからBloggerへの移行についての覚え書き(1)の続き。

Blogger Data APIを使ってMTからBloggerにデータを移行することもできます。

ひとまず、Blogger Data APIを使った簡単な移行ツールをPerlで書いてみました。

mt2blogger - Google Code

以下のように実行します。

$ ./mt2blogger --blog_id=1 --username=foo@gmail.com --password=passwd \
  --postURI=http://www.blogger.com/feeds/<blogger_blog_id>/posts/default

postURIに指定するのは、Bloggerブログのヘッダの<link rel="service.post">に書いてあるURLです。

このスクリプトを実行すると、公開状態のMTエントリをBloggerに一件ずつポストした上で、各MTエントリのkeywordsフィールドにポストされたエントリのEditURIを格納します(keywordsフィールドに何か格納されていた場合上書きします)。EditURIは下のような形式になっているはずです。

http://www.blogger.com/feeds/<blogger_blog_id>/posts/default/<blogger_post_id>

このEditURIを使うことで、MTエントリとBloggerポストの間のリンケージを実現できます。例えば、下のような簡単なプログラムで移動前後のURLを表示できます。

#!/usr/bin/perl -w
use strict;
use warnings;
use lib qw( lib extlib );

use MT;
my $mt      = MT->new;
my $blog_id = 1;

use MT::Entry;
my $iter = MT::Entry->load_iter(
    {
        blog_id => $blog_id,
        status  => MT::Entry::RELEASE(),
    },
    {
        sort      => 'authored_on',
        direction => 'ascend',
    }
);

use LWP::Simple;
use XML::Atom::Entry;
while ( my $entry = $iter->() ) {
    my $editURI = $entry->keywords or next;
    my $content = get($editURI);
    my $gentry  = XML::Atom::Entry->new( Stream => \$content );
    my @link =
      grep { $_->rel eq 'alternate' && $_->type eq 'text/html' } $gentry->link;
    print $entry->permalink . ' -> ' . $link[0]->href . "\n";
}

1;

いいじゃん、できるじゃんと言いたいところですが、現状のBlogger Data APIは完全なものではありません。コメントを追加するAPIは存在するのですが、生成されたコメントのオーナーがAPIのauthenticated userになってしまいます。mt2bloggerでコメントの移行を実装していないのはそのためです。この点に関してはいずれAPIが修正されるのを待って、実装しようと思っています。

MTからBloggerへの移行についての覚え書き(1)

MTからBloggerにデータを移行する方法はおおまかに言って2つあります。一つは「設定」→「基本」→「ブログツール」の「ブログをインポート」を使う方法、もう一つは言わずもがなですが、Blogger Data APIを使う方法です。この覚え書きでは前者について説明します。

何らかの方法でMTデータをBloggerのインポートファイル形式(Atomフィード形式)で書き出しておき、「設定」→「基本」→「ブログツール」の「ブログをインポート」でインポートすれば、MTからBloggerにデータを移行できます。MTのエクスポートファイルをBloggerのインポートファイルに変換するPythonスクリプトもあります。

google-blog-converters-appengine - Google Code

ただし、このスクリプトはまだまだ品質が低いです。多言語の取り扱いが不完全、コメントデータがインポートできない、すべてのエントリのフォーマッタとしてconvert_breaksを使うことを前提にしている、などの問題があります。コメントデータを無視して良いなら、わざわざこのツールを使わなくてもMTのインデックステンプレートとして以下のものを使っても同じ効果が得られます。

<?xml version="1.0" encoding="<$mt:PublishCharset$>"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title><$mt:BlogName remove_html="1" encode_xml="1"$></title>
    <link rel="alternate" type="text/html" href="<$mt:BlogURL encode_xml="1"$>" />
    <link rel="self" type="application/atom+xml" href="<$mt:Link template="feed_recent"$>" />
    <id>tag:<$mt:BlogHost exclude_port="1" encode_xml="1"$>,<$mt:TemplateCreatedOn format="%Y-%m-%d"$>:<$mt:BlogRelativeURL encode_xml="1"$>/<$mt:BlogID$></id>
    <updated><mt:Entries lastn="1"><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></mt:Entries></updated>
    <mt:If tag="BlogDescription"><subtitle><$mt:BlogDescription remove_html="1" encode_xml="1"$></subtitle></mt:If>
    <generator>Blogger</generator>
<mt:Entries lastn="2000">
<entry>
    <title><$mt:EntryTitle remove_html="1" encode_xml="1"$></title>
    <link rel="alternate" type="text/html" href="<$mt:EntryPermalink encode_xml="1"$>" />
    <id><$mt:EntryAtomID$></id>
    <published><$mt:EntryDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
    <updated><$mt:EntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>
    <author>
        <name><$mt:EntryAuthorDisplayName encode_xml="1"$></name>
        <mt:If tag="EntryAuthorURL"><uri><$mt:EntryAuthorURL encode_xml="1"$></uri></mt:If>
    </author>
    <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/blogger/2008/kind#post" />
    <mt:EntryCategories><category term="<$mt:CategoryLabel encode_xml="1"$>" scheme="http://www.blogger.com/atom/ns#" /></mt:EntryCategories>
    <mt:EntryIfTagged><mt:EntryTags><category term="<$mt:TagName normalize="1" encode_xml="1"$>" scheme="http://www.blogger.com/atom/ns#" /></mt:EntryTags></mt:EntryIfTagged>
    <content type="html" xml:lang="<$mt:BlogLanguage ietf="1"$>" xml:base="<$mt:BlogURL encode_xml="1"$>"><$mt:EntryBody encode_xml="1"$><$mt:EntryMore encode_xml="1"$></content>
</entry>
</mt:Entries>
</feed>

この方法には致命的な問題があります。それは(まとめてインポートしてしまうので)後からMTの元のエントリとBloggerのエントリを対応づける方法がなくなってしまうことです。古いURLから新しいURLへリダイレクトすることができませんし、後からコメントをインポートする方法が見つかったとしても、どのBloggerのエントリに対応づければよいのか分からなくなってしまいます。個人的にはお勧めできません。

Apr 16, 2009

カーシェアリングって正直どうなの?

自宅のポストにcomuca(コムサとしか読めないけどコミューカと読むらしい)というカーシェアリングサービスのチラシが入っていました。

カーシェアリング 東京 世田谷 目黒 カーシェアリング 【comuca】コミューカ

経営陣がネット界隈の人たちなのでもうちょっと話題になっていても良さそうですが、私はチラシで初めて知りました。IT長者が満を持して実業に乗り出したのか、赤字のままある程度の会員規模を達成した段階での転売を目論んでいるのか、それはよく分かりません。ともかく、本社は三茶の雑居ビルにあり、ステーションも三茶一円に10カ所展開しているようです。

端的に言うと、オーナーによる共同保有でも何でもないカーシェアリングというのは、レンタカー業者の別業態でしかないです。レンタカー業者が専用の営業所を持ち、比較的長め(だいたい6時間から)の時間貸しをするのに対して、カーシェアリング業者は市中の契約駐車場などを使い、短めの時間貸しをするというだけです。良い言い方をするとレンタカーとカーシェアリングは補完し合う関係、そうでない言い方をするとレンタカーの隙間(の実需があるのかどうかよく分からないゾーン)を狙ったのがカーシェアリングということになります。

また、カーシェアリング業が営業所として使用する市中の契約駐車場についても、不特定多数に貸すことを前提とし、その管理を営業所側が負担しなければならないという点において、コインパーキング業と競合します。コインパーキングのうち実入りの良くないエリアを営業所に充てられるという点では、相互補完というか隙間というか、まあそういう関係になりそうです。

comucaのサービスに関して一番気になるのは、Webページには「ガソリン代・駐車場代・保険・車検などの維持費が0円」と書いてあるけれども、実際には走行距離に応じたチャージ(20kmまで無料、以降1kmあたり20円)がかかることです。これはプリウスがリッター20km走るとしてガソリン代にリッター400円払うのと同じです。つまり、ガソリン代は利用に応じてかかり、それもかなり割高であると言ってよいですよね。

Apr 15, 2009

Feed Redirection機能を試す

Google BloggerのFeed Redirectionは、フィードURLへのアクセスを指定したURLにリダイレクトできる機能です。

Feed Redirection - Blogger Help

でもちょっと考えると分かるんですが、リダイレクト先をFeedBurner URLにしておき、FeedBurner側では元のフィードURLを指すようにしておくと、ループしますよね。

どうなるんでしょうね。エントリをポストしてもFeedBurnerフィードは更新されないのでしょうか、無限増殖するのでしょうか。あるいは特定のUserAgentからアクセスした時だけリダイレクトされずに中身をGETできるようになっていて、正常に更新されるのでしょうか。

このエントリが正しく見られたとすれば、正常に更新されているということになります。

追記: 正常に更新されているようですね。ただ、Google Readerの更新が超遅いです。なんで?

定額給付金の申請書類

定額給付金の申請書類が世田谷区から届きました。

定額給付金申請書兼請求書に必要事項を記入し、振込銀行口座のキャッシュカードか通帳のコピーを添付して送り返すだけ。

コピーを添付するのは誤記を防ぐ手立てがないためですね。それでも添付を忘れる人が続出しそうですけど。コピー需要で案外コンビニが繁盛するでしょう。地方などでコピー機が使える場所が離れている場合にはどうやってコピーを添付するのかという問題もありそうです。

あと申請書類は2月1日時点の住民基本台帳に基づいて作られているようです。ということは既に亡くなった人の分も受け取れるってこと?それとも受け取ると詐欺になるのかしら?もしそうだとすると給付を遅らせれば遅らせるほど支払いが少なくて済むことになって問題がありそうですね。

追記: 5月19日に無事振り込まれました。世田谷区の場合、早い人だと5月1日くらいに振り込まれたらしいです。まちBBS情報。

Apr 14, 2009

Line Breaksの取り扱いに悩む

Google Bloggerの問題の一つは改行の取り扱い。

How are line breaks treated? - Blogger Help

「設定」→「フォーマット設定」→「改行の変換」で改行を<br />に展開できるかどうか制御できます。ここで問題があります。

  • 変換規則が貧弱。Movable Typeのconvert_breaksが提供しているフォーマット規則よりかなり貧弱です。例えば、MTでは<pre>〜</pre>内の改行を変換しないなどといった除外規則がありますし、改行文字が2文字続くと直前の文を<p>〜</p>で囲むなどといった比較的インテリジェントな処理規則もあります。それに比べて、Google Bloggerの「改行を変換」はかなりnaiiveです。
  • 改行の変換の設定がグローバル。つまり、エントリごとに変換するかどうかを制御できません。言い換えると、MTから持ってくるデータは「改行を変換しない」、Bloggerで書くエントリは「改行を変換する」といった使い分けはできません。

平たく言うと、2つのアプローチがあります。

  • 改行を変換する。MTから持ってくるデータは正常にフォーマットされませんが、諦めることになります。
  • 改行を変換しない。その代わり、MTから持ってくるデータは、convert_breaksフォーマッタでフォーマット(他のフォーマッタを使っている場合にはそのフォーマッタでフォーマット)してからインポートし、Google Bloggerでエントリを書くときに手でマークアップすることになります。後者の作業は致命的に煩雑ですが、適当なアプリケーションを使ってエントリを書けば済む問題でもあります。

というわけで、後者のアプローチを採るのが私にとっては正着でしょう。

Apr 13, 2009

Hatena Starの設置

とりあえずHatena Starを設置してみました。

テンプレートに簡単なJavaScriptを書くだけですが、Google Bloggerに特有の事情があります。それはテンプレートには正しくHTMLしか書けないということです。このため、テンプレートにJavaScriptのコードを普通に書くと「'」が「&quote;」に自動的に変換されてしまったりします。ものすごく読みにくくなります。

そういうわけで、<![CDATA[...]]>でコード部分を囲んでやるのがコツ。

こんな感じですね。

<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>
<script type="text/javascript">
//<![CDATA[
Hatena.Star.Token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
Hatena.Star.SiteConfig = {
 entryNodes: {
   'div.post': {
     uri: 'h3 a',
     title: 'h3',
     container: 'h3'
   }
 }
};
//]]>
</script>

Movable TypeからGoogle Bloggerへの移行をこっそり目指すブログ、始めました。

こっそりですが、Movable TypeからGoogle Bloggerへの移行を目論んでいます。ここのところレンタルサーバの信頼性の低さに苦労させられていて、それならばいっそreliableでpersistentなストレージとしてBloggerを使ってしまえと思ったからです。いろいろあって連休明けくらいまでに移行を完了する、もしくは移行を諦める、予定です。

私のブログのMTの記事を楽しみにされている読者がいることは十分理解しています。MTのユーザを辞めるわけではないので今後もプラグインなどの記事も書くつもりです。さしあたっては、MTからBloggerへのtransparentな移行を実現するためのツールをどんどん作っては公開していく予定です。

ちなみに私は、MTやWordpressがユーザをロックインしてしまうことを結構問題視しています。

こうしたAll-in-oneシステムでは、ユーザインタフェース、バックエンドのデータストア、アクセスサーバなどの構成要素の一部に機能や性能や信頼性上の問題があったとしても、それぞれを独立の問題として解決することができません。例えば、アクセス数が異常に増加したとき、必要なのはアクセスサーバの性能向上であって、データストアに投資するのは無駄です。また、気の利いたユーザインタフェースが使いたいだけなのに、データストアが共有できないのなら一方のシステムから他方のシステムに移行しなくてはなりません。

Google(や他の企業)が信頼性があって高速なデータストアやCDNを提供するのであれば、そうしたインフラを有効に使ったブログシステム・CMSとしてMTを再設計するのが今後の方向性かなと思っています。もちろん、AppEngine上にMTを移植するというstraightforwardな解もありだと思いますけどね。

Apr 9, 2009

Office 2008 for Mac: Spacesとの相性が...

Office 2008 for Macモニターキャンペーンのレビュー、番外。

番外として書いておきますがOffice 2008 for MacとSpacesの相性は最悪で、結構困っています。特にSpacesを切り替えるだけでツールパレットがどうにかなってしまうのは勘弁してもらいたいです。

実際、英語版のMactopiaにはこういう項目が掲載されています。

Help and How-To for Microsoft for Mac Office Products | Mactopia

これを信じるならSpacesの実装上の問題があって、いずれはLeopard側のパッチによって修正されるべき問題なのでしょう。日本語でも情報提供されることを望みます(見つけられなかったので)。

次善の策は、ツールパレットを自動的に非アクティブにする設定をすることでツールパレットがアクティブな状態でSpacesの切り替えをしてしまう確率を下げることです。

ツールパレットの右上の矢印アイコンをクリックすると、

非アクティブにするための設定ができます。

でも問題はこれだけではないので単なる気休めでしかないのです。

ヤクルトスワローズの選手の出囃子の選曲が渋すぎて卑怯

昨日、今日と神宮球場のレフト自由席で東京ヤクルト対中日の第1回戦、第2回戦を観戦してきました。

Yahoo!プロ野球 - 2009年4月7日 ヤクルトvs.中日

第1回戦の方はほぼ運だけで勝ったという試合。投手陣は先発の朝倉が6回1/3を9安打されながらも3失点で抑え、あとは豪華リレー。打撃陣はいつもはさっぱり打てない館山から効率良く点を取ってぎりぎりイーブンな展開にでき、たまたま9回の時点で勝ち越していたというだけです。9回ヤクルトが押本ではなく松岡をマウンドに送っていれば間違いなく延長になっていました。勝って気分はいいものの釈然としません。

Yahoo!プロ野球 - 2009年4月8日 ヤクルトvs.中日

第2回戦の方はヤクルト・木田が先発するということなので観に行きました。結構躍動感あるピッチングをしていました。でも球速が148km/hとか神宮のスピードガンは無茶苦茶ですね。開幕以来貧打の続くドラゴンズは木田すら打ち崩すことができず、もちろん松岡を攻略することもできませんでした。今年は連敗が始まると止められないかも。投手陣では今年も中田と平井は計算できないことを確認しました。ネルソンの試運転が案外うまくいきました。森岡に生暖かい拍手が送られました。

今年からヤクルトのファンクラブに入ったのでそこそこのペースで観に行こうと思っています。


ところでいつも神宮で思うのは、ヤクルトスワローズの選手の出囃子の選曲が渋すぎて卑怯、ということです。

福地がいきなりDoobie BrothersのLong Train Runnin'。イントロの超有名なギター・カッティングを聴くだけで目の奥が熱くなります。

川島のTOTOのAfricaも80s耳の持ち主にははまる。

この1,2番がヤクルト出囃子ラインナップのキープレイヤーです。

「次はいったいどのAOR、70s、80sの曲がかかるのか」

と期待せずにはいられません。

青木のOrffのCarmina Buranaは自己演出が過ぎる選曲ですが、プロなので自己演出してなんぼの世界です。この曲で登場しながら初球ポップフライ打ち上げたりすると恥ずかしさ倍増ですよね。某荒木にもお勧めしておきます。

新しいデントナさんのはよく分からないけど、ガイエルのはNew Orleans is Sinking。これも80s。アメリカの良心のような「ダルいい」曲です。The Hipはカナダのバンドですけどね。

宮本慎也や田中浩康の曲は...ま、どうでもいいです。RihannaのUmbrellaとヤクルト応援の雨傘をかけて...とか口に出すのもほんとに寒いので勘弁してほしいです。武内、飯原あたりの選曲にも知性を感じられません。あ、相川忘れてた。多分どうでもいい曲です。

あとは代打に出されてもかなり高い確率で左投手にスイッチされて結局打席に立てないユウイチの、DuffyのMercy。因果な感じでぐっと来ます。お願いだから打席に立たせて、I'm begging you for mercy〜。もちろん60sの現代調みたいな曲ですから「趣旨」にもよく合ってます。

畠山のはよく分かりません。80s風ハードロックだけど結構最近の曲かも。あとで調べておきます。

全体的に見て(一部趣旨を理解していない連中はいるものの)渋い良い選曲になっています。でもって、これって球場に足を運ぶ人たちの嗜好と全然噛み合ってないと思うんですよね。

球場に足を運ぶ人たちの典型的な嗜好と思われるリストが下にあります。

中日ドラゴンズ 公式サイト - 選手テーマ曲

我が軍のDQNぷりは...。

Apr 7, 2009

Office 2008 for Mac: Apple Remoteってのを使ってみたかったんだよね!

Office 2008 for Macモニターキャンペーンのレビュー、2回目。

Apple Remoteというリモコンを持っています。

Apple Remoteって普通にMac使っている分には特に使い道ないんですよね...。そのせいかどうかアルミボディのMacBookの標準付属品からは外されてしまっています...。どうやらこのリモコンを使ってFront Rowとかいうメディアランチャーアプリを操作して遊ぶみたいなんですが、私にはこの手の(S○NYが昔からVAI○にバンドルしていたりするような)アプリの意義が1ピコたりとも理解できません。どちらかと言えば私は、

$ find . -type f -a -name '*Beelzebub*' -exec open {} +

とかTerminal.appから実行して選曲することも状況によっては厭わない、いたって健康な成人男子です。

さて、Office 2008 for MacのPowerPointでは、スライドショー時にApple Remoteを使って操作できるようになっているご様子。さっそく試してみました。

「システム環境設定」の「セキュリティ」を開いて、

「登録...」をクリックして、

Apple Remoteの「メニュー」ボタンと「次へ」ボタンをしばらく同時押しするだけです。画面に「このリモコンとそのMacがけこーんしたよ」的な表示が出るはずです。

プレゼンするときは、PowerPointを開いてCmd+Enterでスライドショーを開始するだけで、Apple Remoteリモコンでスライドショーを操作できます。ご機嫌です。メニューボタンを押したときにPowerPointのコンテキストメニューを操作できれば、もっとご機嫌度が上がったんですが、このあたりの改善は次バージョンに期待しています。

そうそう、発表者ツールもなかなか使いやすいです。

Keynoteの発表者ツールだと次の1ステップ分しか確認できない(カスタマイズすると色々できるのかもしれないけれど分からない)のに対して、PowerPointだともう少し広い範囲を確認できるのがありがたいです。これはPowerPointの良き伝統でもありますね。

というわけで、第2回も恙無く終了。

Apr 3, 2009

Office 2008 for Mac: モニターキャンペーン当選

Agile Media NetworkのOffice 2008 for Macモニターキャンペーン(Office 2008 for Mac Power Blogger's Review)に当選しました。これから何回かに分けてレビュー記事を書く予定です。

私のMacユーザ歴は半年くらいです(10数年前バイトで使っていたこともあるので正確じゃないんですけど)。オールアルミボディのMacBookが発売されて飛びついた口です。それまではWindowsマシンやさまざまなUNIXマシンを仕事・個人用に使い分けてきました。MacがIntelプラットフォームに移行し、その結果としてVMware Fusionというキラーソフトウェアが登場することがなかったとしたら、私が(再び)Macユーザになることはなかったかもしれませんね。今はMac OS X、Windows XP、Ubuntu、CentOSなどを併用して論文執筆、プレゼン、報告書・仕様書書き、コーディング、スケジュール管理、デジカメデータや音楽データの管理、家計簿管理などなど(ベンチマーク実験を除いた)ほとんど全てのことをMacBook一台でこなしています (*'ω'*)

Microsoft Office歴に関しては、Windows版をOffice 95から順に97、2000、XP、2003とずーっと使い続けています(2007は除く)。私の仕事柄一番使うのは何といってもPowerPointですね。プレゼンだけでなく、論文などに挿入する図の描画ツールとして重宝しています。

いきなり脱線しますが、私が初めてPowerPointを使ってプレゼンしたのは、Pittsburghで開催されたSupercomputing '96のTechnical Paperの発表だったと記憶しています。その頃はまだ液晶プロジェクタがそれほど普及していなくて、OHPシートに印刷するためのインクジェットプリンタを持ち込んで本番に臨んだものでした(手書きOHPの猛者もたくさんいた時代の話ですよ)。まだ若かった私は、PowerPointにすっかり魅了され、調子に乗ってつい背景をダークブルーにしてしまったのでした。その結果、直前に気がついたミスを修正できず、泣く泣くそのままプレゼンするはめになり(つたない英語でフォローも十分できず...)、次回からは絶対背景は無地に以外にはすまいとカーネギーメロンの空に誓ったのでした(嘘です)。そんなエバーグリーンな思い出もある、PowerPointです。脱線終了。

えーともちろん、Excelも実験データの整理やグラフ描画に使用しますし、Wordで報告書、たまにWordの耐久テストなんじゃないかと思えてくるようなやたら長い仕様書も書きます、というか書かされてます><

さてここからが本題。

4月2日にモニターキャンペーンのOffice 2008 for Mac Special Media Editionのパッケージが届きました。

ちょwwwたかっwwww

とりあえずインストールして、Excelで3D円グラフを作ってみました。

数式バーやツールパレット(書式パレット)がメインウインドウとは独立に描画されるのが馴染まないと言えば馴染まない感じですが、動作がとにかくサクサク速いっすね。

ツールバー直下にある、ライトグリーンのゾーンはエレメンツギャラリーと呼ばれていて、シートやチャートの種類を指定したりといった簡単なタスクを実行できるわけですね。目的別でメニューで選択するだけなので、Office 2003 (Windows)でよく分からんアイコンをクリックさせられるのに比べたらずっと直感的ですね。

今回はこれくらいで。

ねんきん特別便

昨日ようやく届いた。

まさか年度をまたぐことになるとは思わなかったよ。

Apr 2, 2009

TagSupplementals Plugin 0.22公開

TagSupplementalsプラグインをアップデートしました。

今年の一月になってからMT 3.21から4.2にアップデートして以来、タグ検索をmt-search.cgiに依存していたのですが、やはり全然使い物にならないです。検索ワードをいちいちログに書き出すせいで気がつくとログが数万件に達していたり、検索処理自体が遅いせいでCGIプロセスが貯まりすぎてOOM Killerが発動してmysqldを殺してしまったり。

「お話にならない」

というわけで3.21時代から慣れ親しんできたMT-XSearchを使ったタグ検索に戻りました。その過程でいくつかの問題を見つけ、修正したのが0.22です。

TagSupplementals - ogawa - 「タグ」機能を追加・拡張するプラグイン。 - Google Code

具体的には以下のバグを修正してあります。

  • そもそもMT-XSearchとの組み合わせで動かない。
  • mt:RelatedTagsブロックタグが正常に動作しない。

どちらも動作確認すらしていなかったせいです。

TagSupplementalsとMT-XSearchを使ってタグ検索を実現する方法については以下を参考にしてください。

Ogawa::Buzz: Tagwire とMT-XSearchによる動的タグアーカイブ

基本的にはTagwireのときとまったく一緒です。異なるのは、テンプレートモジュールの名前を「XSearch TagSupplementals」にする点だけです。

Amazon Elastic MapReduce

これは本格的にやられてしまったという感じ。

Amazon Elastic MapReduce

Amazon EC2+S3上でHadoopベースのMapReduceアプリを動作させるサービス。

これまでもEC2上でHadoopを動かすこと自体はいろいろな人がやっていましたが、このサービスを使うと、EC2インスタンスを自分で設定・起動することなく、S3上に格納したデータとプログラムを用いてMapReduce操作を実行してもらうことができます。計算結果もS3上に格納されます。

で、実はこれ、単純にクラウド上のMapReduceサービスの実現というだけではなく、より包括的なアプリケーション実行フレームワークの実現だとも言えると思うんです。別にMapReduceしてもらう必要はないんです。例えば、シングルプロセスで実行できるプログラム(つまり何らかのデータをプログラムに食わせて結果を出力する)を考えてみれば明らかなように、このフレームワークは一般的なジョブサブミッションエンジンとして使えます。しかも、このプログラムの実行時間+αしかEC2のCPU時間を消費しないわけですから非常に経済的です。

HPC分野でもEmbarrassingly Parallel (EP)タイプのアプリを実行している人たちには直接的な恩恵があるでしょう。parameter sweepをする場合でも、parameter setだけ(とは限りませんが)をdistributeしてMapフェーズで計算してもらい、Reduceフェーズで回収すればいいわけですし。

では、MPIのようなSPMDなプログラミングモデルで書かれた一般的な並列プログラムはどうかというとちょっと話は厄介になります。この話はそのうちもう少し突っ込んで書くかもしれません。

別の興味としては、Hadoopを使って本当に課金に値するようなロバストなサービスを提供できるのかという疑問もあります。あっちこちでストールしたEC2インスタンスができてしまったりはしないのか、とかですね。

book.cls で oneside のときに \cleardoublepage を有効にする

book.clsでは、twoside, oneside, openright, openanyの組み合わせで組版をいろいろ制御できる。

  • twoside: 両面印刷用。奇数ページが左に、偶数ページがオフセットする。
    • openright: \cleardoublepageしたときに、\clearpageした上で、奇数ページから始まるように空ページを挿入する。
    • openany: \cleardoublepageしたときに、\clearpageしかしない。
  • oneside: 片面印刷用。twosideのようなオフセットはない。\cleardoublepageしたときに、\clearpageしかしない。openrightやopenanyを指定しても無視される。

このbook.clsで問題となるのは、(1) 両面印刷したいのだけどオフセットはさせたくない、(2) onesideの場合でも\cleardoublepageの振る舞いをtwosideの場合と同じにしたい、というときにスマートな解決法がないことだ。

なので私は仕方なく、documentclassにoneside, openrightと指定した上で、

\documentclass[oneside,openright,a4paper,draft]{book}

以下のようにpreambleに追加することで、\cleardoublepageの定義を上書きしている。

% force to enable \cleardoublepage for oneside books
\makeatletter
\renewcommand{\cleardoublepage}{\clearpage\ifodd\c@page\else
    \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi}
\makeatother

もっとうまい方法はないかな。twoside時の\evensidemargin, \oddsidemarginを変更するのでもいいけど計算するのが面倒くさい。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com