August 31, 2005

MT 3.2 and StyleCatcher

mt_styles_remixer_thumb.gif

先週の木曜になりますが、Movable Type 3.2 がリリースされました。バージョン番号こそ小さな違い (3.17 → 3.2) ですが、アーキテクチャや UI にいたるまで大幅に改良されたメジャーバージョンアップです。(日本語版はもう少しお待ちください)

たくさんの機能追加や不具合の修正がありますが、その中でも注目なのがテンプレートと CSS の改善でしょう。MT 3.2 から、TypePad や LiveJournal でも最近採用された Six Apart standard な XHTML をデフォルトテンプレートとして採用しています。今日の Everything TypePad では TypePad エンジニアの Randy のインタビューでその話が。

Everything TypePad - Just Your Style

The Six Apart standard HTML was a project I started last December to fix a number of bugs in TypePad.

3.1x からアップグレードした場合でも、Template Refresh and Backup プラグイン(デフォルトでインストール済み)を使うことで、3.2 のテンプレートに一発で移行できます。また、このデフォルトテンプレートにすると、新プラグイン StyleCatcher (これもデフォルト) の恩恵にあずかれます。

Movable Type - News - StyleCatcher: Easy Styles for Movable Type 3.2

And while we're very proud of the work that goes in to making an attractive style, we realize it can still take work to apply a design to your blog. So we've reduced the work of switching styles by making StyleCatcher, a new plugin that lets you change designs with just a few clicks, any time you want.

StyleCatcher は、TypePad などのホスティング Blog ツールが提供するようなデザイン選択画面を CMS から提供して、簡単に CSS (theme) が切り替えられるプラグイン。これはかなりカッコイイです。デフォルトでは、TypePad で採用している Six Apart Standard HTML 対応の Theme 一覧 から選ぶことができます。またレポジトリを自分でもったり公開することもできて、その仕様は qootas.org さんとこですでにハックされてますね。

qootas.org/blog - StyleCatcher build for MT3.2

StyleCatcher デフォルトでは 米Six Apart のサイトにあるテーマを探しに行きますが、 Theme or Repository URL に自分で作成したテーマやレポジトリのURL を指定することで使うこともできます

ということで、はやく時間を作ってこの Blog を 3.2 にアップグレードしたいところですw たぶん 2.51 からのアップグレードは最長記録(?) になるんだろうなあ。

Posted by miyagawa at 04:23 PM | Comments (0) | TrackBack (5)

Gmail で Bloglines つづき

アカウント一時停止 とか食らってしまって利用をとりやめていた Bloglines via Gmail ですが、ちょっといじって利用を再開しました。一番のポイントは、フィードごとの更新を1つのメールで通知するオプションをつけたことで、これにより、

* 送信されるメールの数がへる
* メールの Subject: をフィードのタイトルとしたので、フィードごとの更新が1つの Conversation (スレッド)として扱われ、閲覧性が大幅に向上

というメリットが得られます。ほかにもアイコン画像を右はりつけにしたり、時刻表示のタイムゾーン変更に対応したりと、こまい変更をしてますので、使ってる方は svn で svn://svn.bulknews.net/public/bloglines2email/trunk を追いかけてみてください。

Posted by miyagawa at 04:03 PM | Comments (3) | TrackBack (1)

August 30, 2005

Perl6 で配列操作

いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C

プログラムを書いていると、他のプログラミング言語の記憶とごっちゃになって、「配列の後ろに要素を追加するのは push だっけ、 append だっけ」などと混乱することがあります。特に Ruby, Python, JavaScript はコードの書き方が似ているので、この問題が起きがちです。

ということで perl6 (pugs) で調べてみました。

RubyPerl6
a = [1, 2, 3]@a = (1, 2, 3)
a.length@a.elems
a.empty?@a.elems == 0
a.push(x)@a.push($x)
a.unshift(x)@a.unshift($x)
a.pop@a.pop
a.shift@a.shift
a.concat( b )@a.push(@b)
a.clear@a = ()
a.insert(i, x)@a.splice($i, 0, $x)
a.delete(x)
a.delete_at(i)@a.splice($i, 1)
a.nitems { |e| e == x }@a.grep({ $_ == $x })
a.include?(x)any(@a) == $x
a.index(x)
a.first@a[0]
a.last@a[-1]
a[i, l] or a.slice(i, l)@a[$i..$i+$l-1]
a[i..j] or a.slice(i..j)@a[$i..$j]
a[i...j] or a.slice(i...j)@a[$i..$j-1]
a.sort@a.sort
a.sort!@a = @a.sort
a.reverse@a.reverse
a.reverse!@a = @a.reverse
a.uniq@a.uniq
a.uniq!@a = @a.uniq
a.join(d)@a.join($d)
a.eachfor @a => $x { ... }

Pugs の svn からとってきた最新でためしています。 iif (any(@a) == $x) { } が perl6 っぽい。

ここではプリミティブをオブジェクトで扱いましたが、もちろんビルトインの function をつかって、push @a, 1; って書き方もそのまま使えます。perl6 ではプリミティブデータ型とそのリファレンスの操作においての区別はほとんどなく、

$foo = [1, 2, 3]; $foo.push(4);

なんてやれば思ったとおりに動きます。ちなみに perl5 でも CPAN モジュールの autobox を使うと、first-class object を扱えるようになるみたい。2年前の LL Saturday でこのネタしゃべった覚えが。。

Posted by miyagawa at 08:18 AM | Comments (2) | TrackBack (1)

August 28, 2005

Gmail Lock Down

gmail.gif

Bloglines を Gmail で読む のコメントにも書いたんですが、Gmail は1つのアカウントで受信するメールが多すぎると、一時的にアカウントを停止されてしまうみたいです。僕の場合 Bloglines が 940 Feed で、bloglines -> Gmail のツールを使って送信されるメールが1日に 1200 通。US 西海岸時間で夜中は問題ないのですが、14 時ごろになると更新されるフィードが増えてきて、右のような画面でロックアウトされてしまいます。2時間ほどするとアクセスできるようになりますが、また時間がたたないうちにすぐに同じ現象に。

ということでなくなく Bloglines -> Gmail のツールの利用は一時的にやめました。フィードの更新アイテムを1つのメールにまとめるとかして、送るメールの数を減らす工夫をしないとだめかもしれません。

Posted by miyagawa at 07:59 PM | Comments (2) | TrackBack (1)

August 27, 2005

内村プロデュース終了

『内P』が終わる。|Tokyo Ochimasato Land

永い間、
御覧頂いてきました、


『内村プロデュース』



終了します。

うがー、マジですかぁ。。帰国したら2か月分の録画を消化するのが今の一番の楽しみだったのですが、9月の改編で終了みたいです。

Posted by miyagawa at 06:34 AM | Comments (3) | TrackBack (3)

August 26, 2005

SVN レポジトリの公開

長らくやろうと思っていた自作のモジュールやスクリプトの SVN を公開してみました。→ svn.bulknews.net

svnserve でレポジトリの read-only アクセスを公開、viewcvs でディレクトリをブラウズできるようにしてます。ここまで紆余曲折あったので、備忘録代わりにちょっとまとめておきます。

CVS から Subversion へ

今年の2月ぐらいに、CVS から subversion に移行しました。subversion に付属している cvs2svn ツールを使ってほぼ一発で移行が完了したんですが、

* 公開したくないディレクトリがまじっている
* ディレクトリ構造がフラット
* 認証とか面倒だなあ

ということで公開はほったらかしていました。パッチを受け付けたり、こまいツールを公開するときは subversion レポジトリを公開しておいたほうが便利だということで、ちょっくら作業してみました。

ちなみに CVS から Subversion 化のメリットは一言では言い切れないぐらいたくさんありますが、こうした個人のホビープロジェクトなら、どうしても、という決め手になるものはないかもしれません。ただ、仕事のほうではブランチの管理・マージやディレクトリ・ファイルのリネームやアトミックな commit/revert など、subversion でないとお話にならない感じになってきているので、仕事とプライベートで同じツールを使うというのも無駄なノウハウを避けるという意味では重要かもしれません。

まずは SVN 構造を整理

移行時に、CVS でフラットに管理していたのを svn の trunk にそのままつっこんだので、

- trunk
-- foo
-- bar
-- baz

という感じのディレクトリ構成になっています。とくに問題はないのですが、各プロジェクトでブランチや tag を張ることを考えると、

- foo
-- trunk
-- branches
-- tags
- bar
-- trunk
-- branches
-- tags
...

というディレクトリ構造が一般的。ということで、ダンプをつくって以下のように作業。

* cd {checkoutdir}; ls > ~/modules
* ~/modules を編集して公開したくないものを削除
* svnadmin dump /path/to/repo > dump
* svndumpfilter `perl -nle 'print "trunk/$_"' ~/modules` < dump > new.dump
* perl -i -nlpe 's|Node-path: trunk/([^/]*)|Node-path: $1/trunk|' new.dump

だんだんバッドになってきましたが、これでディレクトリ構造を入れ替えて、公開したくないディレクトリを除去したダンプができたので、

* svnadmin create /path/to/newrepo
* svn co file:///path/to/newrepo
* cd newrepo
* for i in `cat ~/modules`; do svn mkdir $i; done
* svn ci -m "create new directories"
* svnadmin load /path/to/newrepo new.dump

な感じで新しい SVN レポジトリができました。

SVN レポジトリの公開

で、あとは公開ですが bulknews.net のサーバでは Apache2 が走ってないので、DAV + SVN で公開するのはちょっと面倒です。基本的には自分だけコミット権をもって、anonymous で read-only という形態を考えているので、

* svn+ssh で書き込み
* svnserve -i -r /path/to/svn を tcpserver で起動

という感じにしました。ブラウザでの閲覧は SVN::Web を使おうと思ったんですが、mod_perl 1.x ではイマイチ挙動が不審だったので viewcvs の 1.0-dev (subversion をサポート) を使うことに。

ローカルでは svk を使って colinux 内にミラーを切ってあります。これでいつでもチェックアウトしたりブランチを切って ad-hoc 開発ができますね。svl (PDF) も試してみたいなあ。

Posted by miyagawa at 05:07 PM | Comments (1) | TrackBack (0)

August 25, 2005

Bloglines を Gmail で読む

UPDATE 2006/02/28: 現在このスクリプトは Plagger という名前で開発を継続しています。

Gmail as RSS reader で妄想していた、「Bloglines の未読を Gmail に転送して読む」というのをちょちょいとスクリプト書いて試してみました。(Life Hack ってヤツですね!)

予想通り、これはむちゃくちゃ便利です。





アイデアとしては、Bloglines WebServices の API を使って Bloglines 側の未読記事を持ってきて、HTML メールに整形して Gmail アドレスに送信します。Gmail の方ではフィルタリングを使って、「Bloglines のラベルをつけ、Inbox には残さない」というフィルタをしてやるとかなり便利に使えると思われます。

Gmail に転送することで、Bloglines のもっさりとしたインタフェースとはおさらばできて、過去のエントリを(Archive しておいた分は)全文検索もできますね。Star/Unstar でクリッピングしたり、ラベルで tag づけなんてやると del.icio.us さえもいらなくなるかも?

スクリプト

試してみたい!というチャレンジャーな方向けに、とりあえず動きますなスクリプトを subversion で公開しておきます。Movable Type をインストールできるのと同等ぐらいの権限が必要になります。svnweb は こちら。

svn co svn://svn.bulknews.net/public/bloglines2email/trunk bloglines2email
  • perl 5.8.0
  • WebService::Bloglines (0.06 以上)
  • XML::LibXML, XML::RSS::LibXML
  • YAML
  • Template-Toolkit
  • MIME::Lite

といったモジュールが必要です。libxml がどうしても入らない、という場合は WebService::Bloglines 0.06 をいれて、XML::RSS と XML::XPath の組み合わせでも大丈夫なハズ。

アーカイブをチェックアウトしたら bloglines2email と同一のディレクトリに bloglines2email.conf というファイルを作って Bloglines のユーザ名・パスワードやや Gmail のメールなどを設定します。.sample が置いてあるのでそれを参考にしてください。あとは bloglines2email スクリプトを cron で5分間隔ぐらいで仕込めばよいでしょう。

bloglines2email スクリプトを起動すると Bloglines の未読がクリアされます。初回にテストでやってみたい場合は、--test オプションをつけて実行すれば未読を消しません。メールサーバの設定や、送られてくるメールのテンプレートはスクリプト内に書いてあるので、気に入らない人は適当にいじってくださいませ。ライセンスは Perl と同じです。

Posted by miyagawa at 04:47 PM | Comments (10) | TrackBack (7)

August 23, 2005

Podcasting Hacks

Podcasting Hacks
Podcasting Hacks
posted with amazlet at 05.08.23
Jack Herrington
Oreilly & Associates Inc (2005/11/30)
売り上げランキング: 61,568

やっぱりきたかという感じの Podcasting Hacks。もう amazon で予約可能になってますね。Beta Hacks を見る限り、Podcast を聴く・作る・配信するというそれぞれの側面からの Hack がいろいろ収録されている感じで面白そう。

Posted by miyagawa at 03:20 PM | Comments (0) | TrackBack (2)

Nintendogs U.S.A

Nintendogs for Nintendo DS

US でもようやく Nintendogs が発売。今回の出張でもってきたけど1回もプレイしていない飼い主失格なワタシですが、こっちで互換性があるんだったら遊んでみたいなあ。Six Apart のオフィスにはリアルドッグがいっぱいいるので、特に買う人すくなそうですが。こちらでは Nintendo DS より PSP の方がガジェット的に人気は高いようです。

Nintendo DS Blog やってる Mark がもしかしたら買わないかな。大合奏バンドブラザース も持ってたし。。

Posted by miyagawa at 02:15 PM | Comments (0) | TrackBack (0)

August 22, 2005

Gmail as RSS reader

GMail as an RSS reader

After toying around with a bunch of RSS readers I concluded that using GMail as an RSS reader is a very good option, for the following main reasons:

これ僕も以前考えてたんですが、Gmail を RSS リーダーとして使おうというアイデア。Bloglines より Gmail のほうがサクサクと動くし、Label や Star で管理する方がより使いやすそうな気もします。

WebService::Bloglines を使って HTML メールを送信するスクリプト書いて Gmail アドレスに送っちゃえば簡単にできますね。

Posted by miyagawa at 06:22 PM | Comments (0) | TrackBack (1)

TypePad Scratchathon Release

先週の水曜日に US TypePad がバージョンアップしました。今回のリリースは 7月に本社で行った Scratchathon で実装された機能が中心になっています。

Six Apart - News and Events

So we decided to have a one-day hacking session that we called a Scratchathon--as in, scratching an itch. We stopped the usual project work for a day, and engineers on all of our products spent the day working on features like those described above. The focus for this session was on implementing relatively small features and/or fixes that would have a big impact for ourselves, our customers, and our support staff, and the explicit goal was to quickly channel these features into a product release.

Six Apart では San Francisco・東京・パリでたくさんのプロジェクトが同時に動いていますが、この作業を1日だけ停止して、全プロダクトのエンジニアがハックマラソンに集中します。今回は San Francisco オフィスだけで、TypePad, MT, LiveJournal のエンジニアが参加しました。

この1日で実装する機能は、「長い間カスタマーが要望してきたちょっとした修正」や「誰もがほしいと思いながら実装してこなかった機能」のうち1つを選びます(社内の Wiki や FogBUGZ でリストが定期的に更新される)。その1日で実装をある程度完了できることが重要になってきます。(リリースまでには完全な QA や各国語への翻訳、ユーザにどう伝達するかのマーケティングプランやその結果のフィードバックなどを内部で経るため、実際には1ヶ月ほどかかります)

はてなの近藤さんが 連続的・非連続的な開発 ということで合宿での開発の話をよく出されていますが、こういう日常的なタスクから開放されての定期的 Hackathon はかなり効率的ですね。(はてなの場合は新プロダクトを合宿で、というケースが多いようですが、Six Apart では既存プロダクトの改善を Scratchathon でやっているところが面白い違いかもしれません) 用事のない週末は Ben の家にいって Hack したりしてます。

私はこの Scratchathon の日は San Francisco にいなかったのですが、日本にいる間にブランチで開発していた Podcasting サポートをこのリリースに取り込むことができました。インタビューも掲載 されていますが、MP3 ファイルをエントリ中にアップロードしてリンクするだけで、RSS 2.0 が生成されて Podcast をはじめることができます。ストレージや bandwidth の拡張を消費するにはもってこいでしょう。そのほかの機能は Everything TypePad から。

Posted by miyagawa at 02:42 PM | Comments (0) | TrackBack (1)

August 11, 2005

Foo Fighters - Everywhere But Home

Everywhere But Home (Dts)
Everywhere But Home (Dts)
posted with amazlet at 05.08.11
(2003/11/25)
売り上げランキング: 1,182

ふらっと San Francisco Apple Store の向かいにある Virgin MEGASTORE で見かけた Foo Fighters の DVD を買ってみました。ジャケットにはリージョンが書いてなかったので店員に聞いたら「リージョン1だ」と言われたのですが、帰ってきてみるとフリーみたいですね。

2年前の作品で、前作 One By One からの曲が多めですがかなりカッコイイですね〜。DTS サラウンドだけどこっちのレジデンスにあるしょぼテレビでは再現できないので、帰国してもっかい聴くのが楽しみ。

Posted by miyagawa at 03:58 PM | Comments (0) | TrackBack (0)

August 09, 2005

Google Maps on mobile devices

ほぼすべて O'Reilly Make BlogEngadget 経由。

Google Maps の画像イメージを PSP, iPod Photo, Nintendo DS から見ちゃおうというネタ。Nintendo DS は GPS とかつないじゃってますね。PSP だったら、WiFi のアクセスポイントつかって、MSN Virtual Earth ハックが使えそうですねえ。

Sanctum mekkanicum: Google Maps on Sony PSP

Inspired by Ian Meyer's Google Maps on iPod Photo, I decided to do the same on Sony PSP.

natrium42 - Weblog Blog Archive GPS for DS

GBAMP (GBA Movie Player) is used to store the program and data on a CompactFlash card (special thanks to chishm and DarkFader).

Google Maps on iPod Photo

The screen may be small, but its dern handy. Toss on a couple different zoom levels, and you can quickly go from street-level to city-wid...

Posted by miyagawa at 05:41 PM | Comments (0) | TrackBack (3)

HTML::Template::Plugin::Dot (and Class::Trigger)

Journal of rhesa (5696)

He also started on HTML::Template::Plugin::Dot, which hooks into param to provide the magic-dot notation you might know from the Template Toolkit. I am currently enhancing that to allow mixing hashes and objects and more.

HTML::Template の変数名に <TMPL_VAR name=feed.title> のように書いて Template-Toolkit 風のオブジェクトコールを実現するプラグイン HTML::Template::Plugin::Dot つーのがあるそうです。

というか、それのベースになっている HTML::Template::Pluggable の作者の人から、プラグインシステムの仕組みとして拙作の Class::Trigger 使ってるよということでした。Class::Trigger は Sledge のプラグインとか、Class::DBI の hook にも使われていて、Perl Phalanx QA Project にも選出されているすばらしいモジュールなのです。

こういうフレームワークとか、モジュールを拡張する、とかいう用途でもない限り、なかなか自分で使うことはないですけどね。。。 しかし、こうしてたくさんの人に使ってもらっているのは単純にモチベーションとしてありがたいことです。

Posted by miyagawa at 05:36 PM | Comments (0) | TrackBack (0)

Google News added RSS and Atom

Ego Food: Google News all Feedy Like

In short: Google news now has Atom and RSS 2.0 feeds for all the catagories and for custom news searchs. I suspect we'll see a good amount of uptake from this, especially when combined with the Maps API.

Google News が RSS と atom フィードをついにサポートした模様ですね。トピック別や、キーワード検索結果、カスタムニュースページにそれぞれ RSS, Atom でのフィードが追加されてます。

これで gnews2rss-jp も(訴えられることなく)用なしになりそう。

About Feeds and Terms of Use

Google News search results feeds: You can also get a feed for any search you do on Google News. First do any search on Google News, then simply use the Atom or RSS link on the left-hand side of your search results page to generate the feed.

しかし、フィードをみてみると HTML コードがまじりこんで Validation エラーになっちゃってますね。すぐに直るんでしょうけど。

Posted by miyagawa at 05:22 PM | Comments (0) | TrackBack (1)

August 05, 2005

GPS つき SA700iS

GPSナビ機能を搭載した「SA700iS」

GPS関連では、撮影画像に位置情報を付加できるほか、メールで友人に現在地を通知することもできる。

EXIF に位置情報入れられるのは geo blogger には萌えですね。しかし SANYO のドコモ端末は数年ぶり、ってあたりがメインに据えるにはこころもとない感じでしょうか。サブとして新しく契約するんだったら AU の方がいろいろよさそうな気もしますし。

Posted by miyagawa at 04:56 PM | Comments (0) | TrackBack (0)

Yahoo! Audio Search

Yahoo! Audio Search

Search for many types of audio files from across the Web including,
Popular and hard to find music
Podcasts
Interviews, speeches and newscasts
Stand-up comedy
Sound Effects

Yahoo! が Audio Search を開始。Podcasts の検索もできて、RSS 2.0 Feed を見つけた場合はそのリンクの表示もしてくれますね。素敵です。Yahoo! Web Services の方もすでに Audio Search 対応ずみ。

Audio Documentation for Yahoo! Search Web Services

Audio Searches
Yahoo Audio Search provides access to music data and audio files using structued and unstructured queries.

Posted by miyagawa at 04:51 PM | Comments (0) | TrackBack (0)

August 04, 2005

iTunes Music Store JAPAN!

とうとう iTunes Music Store の日本版が始まりましたね。普段使っているホームから Store > Japan を選べば見慣れた画面に日本の音楽が出てきます。(フォントが変わっていてなんか雰囲気が違うなあという印象)

購入の方は、日本の Apple Store に登録してある ID を使えばクレジットで決済できました。US ベースのアカウントを普段つかっている人は、アカウントを使い分ければ大丈夫ですね。

iPod & iTunes hacks―デジタルミュージックを自由に楽しむテクニック
Hadley Stern エディックス
オライリー・ジャパン (2005/05)
売り上げランキング: 30,543


結構昔の曲とかも充実してる感じで、歌謡曲のディレクトリとかにいくとカラオケボックスで次何歌おうかなぁ〜という気分を味わえますね。

itms-jp.png

Posted by miyagawa at 12:29 PM | Comments (2) | TrackBack (1)

August 02, 2005

Amazon and Open Source (and Open Data)

Amazon が Perl というネタをちょろっと先日の AWS 記事に書いてみたところ意外と知らなかった方が多いみたいで反響の大きさにちょっと驚いている次第。

Tim O'Reilly が Perl の話をするときにはいつも Amazon の話を出しています。

O'Reilly: Amazon and Open Source

Open source has been a key part of the Amazon story. Linux on commodity hardware has allowed amazon.com to cut its costs by an order of magnitude since it launched, and it is a heavy user of Perl, MySQL, and Mason.

ただ、Tim の話でいつも出てくるのは、オープンソースもそうだけど、Open Data ってのがもっとも重要な Amazon の戦略なのだと。

Stupidfool.org: Open Data

Exactly. In some sense, open data is more important than open source. Your data is more valuable than the tools you use--you can always find new tools, but if you lose access to your data, no tool in the world will give you access to it.

Ben もひさしぶりに Blog に書いていたのですが、Web サービスやコミュニティ全盛の時代においては、ソースがGPL か、なんてことより、データが公開されて API などでアクセス可能であることのほうがより重要だということですね。

エクスポート機能を持たない Web のサービスは多く存在しますが、そういうサービスに重要なデータを預けるというのはなかなか勇気がいり、かつリスクがあることです。

IT Conversations: Tim O'Reilly - MySQL User's Conference

We are moving into a new world where everything is interconnected, where the internet is the platform and where software is a service. Welcome to the new paradigm that is Web 2.0. Tim O'Reilly uses the MySQL User Conference to present another verse of his popular O'Reilly's Radar talk. Find out what the alpha geeks have been up to and why the future belongs to data.

Amazon と Open Data の話は Tim の最近のカンファレンススピーチで毎回でてくる話で、これを Architecture of Participation ていう風に呼んでますね。ITConversations の MySQL Conference のスピーチが集大成っぽいので、ぜひ御一聴を。(しかし MySQL Conference なのに ETech とほぼ同じ内容で、mysql の話はほとんど出てこないのが笑える)

Posted by miyagawa at 12:59 PM | Comments (0) | TrackBack (3)