Microsoft が Managed DirectX 2.0(.NET Framework 2.0 用の DirectX)の開発をやめてしまい、それに依存していた Rmake が動かなくなるという事件が発生しました。そこで、Managed DirectX 1.1 へ戻す作業を行っていた(メインは Dycoon 氏が作業していますが)関係で、久々に Visual Studio を触りました。

最近は Eclipse 上に載せた RAD Rails(Rails 開発用プラグイン)しか触っていなかったので、Subversion と統合していない(AnkhSVN とかありますが)から開発しにくいとか、ビルドしなきゃいけないからめんどくさいとかいろいろ違和感を感じていますが、どうにか作業を進めることはできました。

さて、今回は Managed DirectX のバージョンを戻す(2.0 -> 1.1)という悲しい作業を行ったのですが、本当は XNA(Windows でも XBox360 で動作するマネージドなゲーム開発用フレームワーク)を使いたかったわけです。しかし、既存の Window アプリとの親和性があまりよくないらしく、泣く泣く断念しました。

とはいえ、これは一時的な対処で、将来的には XNA かネイティブに乗り換える必要が出てくると思います。(大方の予想通り、Managed DirectX の未来は暗いのです。)あーあ、どうしたもんだろ。

Posted by あかさた
ひがさんのブログにスクリプト言語とタイプセーフな言語の生産性という記事が載っていて、Ruby と Java の生産性に関する話題に触れていました。SOA をやってて強く思ったのですが、やはりこの世界 Java な人は多く、タイプセーフな言語の強みを語って Ruby などのスクリプト言語の盛り上がりに対抗しようとする人が多い気がします。
# 会社でもそういう人の話を何回も聞かされたし。

ひがさんの指摘されているとおり、いろいろ道具立てがそろってきた今、Ruby(Rails)と Java の間に生産性の有意な差があるとは思えません。というか、最近仕事で軽くではありますが、Eclipse + Ruby(Rails)と Eclipse + Java(Seasar)を使いましたが、生産性という観点でそれほどの差は感じませんでした。

どっちがアジャイルかと聞かれると、「うーん、似たり寄ったりかなぁ」と答える気がします。プログラミング 2.0でオライリーの意見を紹介したとおりです。この記事にしても、あくまでマーケティング的な意味合いで、書かれているのでしょうね。

もっとも、無理に対決話に持っていく必要はないですけど。

Posted by あかさた
ウェブ進化論の梅田 望夫氏と小説家の平野 啓一郎氏の対談を記録した、ウェブ人間論という本を読みました。Web 2.0 以降の人間がどのように生きていくのかまじめに語った良い本だと思います。

本書は、上記の二人が、ブログ、匿名問題、本と本の中見検索、グーグル、はてな(というか近藤社長)、教養、人間の魅力(顔のない?)などの観点から、ウェブと人間について対談したものをまとめたものです。

物書き同士の対談ということもあり、話題の少なくない部分が、本だとか物書きにとって重要なものに閉められていることは少し残念です。もっとも、ネットはまだブログなどのテキストが多いから仕方がないかなという気もします。逆に、ウェブ時代の教養とか、物書きが混ざらないと出てこなさそうな議論がされているのは興味深かったです。

また、対談を通じてバーチャルとリアルを分けすぎている感があり、ちょっと違和感を感じました。ネットなんて、道路(単なるインフラって言いたい)みたいなものになりつつあるのに。(そういう目に見えないところの変化は、この本的にはどうでもいいのかもしれませんけど。)

今の現実逃避先みたいな感のあるネットに焦点を当てすぎていることも少し気になりますね。なんかもっと面白い変化は起こらないのかな。Web 2.0 なんてそんなものなのか。読むとわくわくするのがウェブ進化論で、読むと現実に引き戻されるのが本書かも。でも悪い意味じゃないです。本書に書かれている内容は、かなり体感に近いものになっています。

欲を言えば、もう一、二回対談をして、お互いの理解が深まってから本に起こしてほしかったですね。

ちなみに、小説家の平野氏は、「葬送」という小説を書いています。この小説はショパンとドラクロワを取り扱ったものです。私はまだ読んだことがないので、そのうち読んでみたいものです。

Posted by あかさた
この記事によると、Second Life がオープンソースになったとのことです。Second Life とは、3D の仮想空間を提供するサービスです。ありとあらゆるものが拡張可能で、しかも通貨さえ持つある意味、リアルに近い仮想空間です。

で、記事にあるとおり、P2P みたいな概念で世界が拡張できるようになるといいのにね!

オープンソース・・・というか、フリーウェアと異なり、オープンソースという言葉にはわずかに戦略というか意図というか、何か別の響きが加わる気がします。これからどうなるのかちょっと注目ですね。

Posted by あかさた
XML-RPC を使って更新 Ping を送信する機能をこのブログに実装してみました。

■ 更新 Ping とは?
ブログの更新をブログ検索サイト(Google のブログサーチとかテクノラティとか)に伝えるときに送信するメッセージのことです。これを送信すると、検索サイト(情報サイト)は、新着情報にそのブログの最新記事を載せてくれます。

■ メカニズム
検索サイトなどでは、更新 Ping を受け付けるための Web サービス(XML-RPC)を公開しているので、ブログからはその Web サービスを実行すればよいということになります。
※ weblogUpdates という統一規格があるようです。

ちなみに、REST 形式(POX over HTTP 形式)の Web サービスを公開しているサイトもあるので、XML-RPC 以外の方法も存在します。

■ 実装コード
require 'xmlrpc/client'
server = XMLRPC::Client.new2('http://pingoo.jp/ping/')
server.call("weblogUpdates.ping", 'あかさたのページ', 
    'http://www.rmake-labo.com/akasata/')

Web サービスを公開しているサイトとして、「http://pingoo.jp/ping/」を指定していますが、これは Pingoo! というサイトで、テクノラティなど有名な更新 Ping 受信サイトに更新 Ping を再転送してくれるサービスです。このサービスを使うと、更新 Ping を受け付けるサーバを一つ一つ調べる必要がないので楽です。

■ 動作の説明
動作としては、次のとおりです。
1. XML-RPC で更新ブログ名と URL 名を伝える
2. Pingoo! は、送信元ブログを参照して RSS を取得し、最新の更新情報を取得する(※)
3. Pingoo! は登録してある更新 Ping を受け付けるサーバに最新情報を送信する

※ このため、送信元ブログの HTML のヘッダには、以下のような RSS を指定するコードを実装しておく必要があります。

Posted by あかさた
Ruby on Rails では、Scaffold を生成して、ブログの記事やコメントの追加削除をできるようにするところまでは、Rails に慣れていない人でも数時間で到達します。しかし、それ以上の機能を持ったブログを開発しようとすると、ブログに関する知識がないとスムーズには進みません。

この連載では、Rails(Ruby)を使ってブログの実装を行っている人向けに、ブログに関する周辺知識を交えながら、実装に有用な情報を掲載していきます。

■ 対象読者
・ Ruby の文法の知識は初級 ~ 中級
・ Ruby on Rails の Scaffold を生成したことがある
・ ブログの実装はしたことがない、あるいはそれほど詳しくはない
・ 今、Rails を使ってブログを実装しようとしている

■ 連載
第一回 トラックバックを受信する(2007/1/8)
第一回【補足】 トラックバックを受け付けるために、文字コードを変更する
第二回 トラックバックを送信する(2007/1/8)
第三回 RSS を配信する(Coming soon)
第四回 XML-RPC を使って、更新 Ping を送信する(2007/1/8)

■ 番外編
Ruby on Rails を使用できる国内ホスティングサーバについて(Coming soon)

Posted by あかさた
Ruby on Rails におけるトラックバックの受信に関する実装のポイントを説明します。

(0) 前提知識
トラックバックの仕様を説明します。トラックバックを、受信するということは、以下のパラメータを持った HTTP POST リクエストを受信するということです。
・ title(記事のタイトル)
・ excerpt(記事の要約)
・ url(記事の URL)
・ blog_name(ブログ名)
※ url 以外は省略される場合があります。

ですから、トラックバックは以下のような流れで実装することができます。
(1) 受信したトラックバックを貯めるためのテーブルを準備する
(2) トラックバックを受け取るコントローラにメソッドを作る
(3) レスポンスを返す


(1) 受信したトラックバックをためるためのテーブルを準備する


以下のようなカラムを含むテーブル(例:trackbacks)を作成します。
・ id
・ title
・ excerpt
・ url
・ blog_name
・ article_id
・ date

article_id は、トラックバックを受信した記事の ID です。date は、トラックバックを受信した日時です。

(2) トラックバックを受け取るコントローラにメソッドを作る


以下は、このブログのトラックバックを受け取る URL の例です。説明すると、コントローラ「articles」、メソッド「trackback」、ID は記事の ID です。
http://www.rmake-labo.com/akasata/articles/trackback/34


以下のように書くことで、受信したトラックバックの情報を取得することができます。受信したトラックバックの情報に基づいて、記事の view などを変更してください。

def trackback
  @title = params[:title]
  @excerpt = params[:excerpt]
  @url = params[:url]
  @blog_name = params[:blog_name]
  
  # ここに、DB に受信したトラックバックを挿入するコードを書く。
end


(2.1) 補足


トラックバックは通常の HTTP GET メソッドではなく、POST メソッドで送られてきます。ですから、以下のように、HTTP POST のみを受け付けるように、Controller に記述してやる必要があります。
verify :method => :post, :only => :trackback, 
    :redirect_to => { :controller => :application, :action => :index }


(3) レスポンスを返す


トラックバックを受けたら以下のようなレスポンスを返す必要があります。View(trackback.rhtml)に記述すると良いでしょう。

○ 正常なレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>

○ エラーのレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>The error message</message>
</response>

■ 参考
トラックバックを実装した
http://www.rmake-labo.com/akasata/articles/show/34

トラックバック技術仕様書
http://lowlife.jp/yasusii/stories/8.html


Posted by あかさた
第一回で説明したとおり、トラックバックは以下のパラメータを持った HTTP POST リクエストです。
・ title(記事のタイトル)
・ excerpt(記事の要約)
・ url(記事の URL)
・ blog_name(ブログ名)

そこで、以下のようなコードを書いてやれば、トラックバックを送信できます。このメソッドを、記事を生成するメソッドか更新するメソッドから呼び出してやればよいでしょう。

require 'net/http'
require 'uri'
def send_trackback(url, article)
  Net::HTTP.version_1_2
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, 80)
  data = 'title=' + Article_Title + 
    '&url=' + Url
    '&blog_name=' + Title + 
    '&excerpt=' + Article_Content
  
  response = http.post(uri.path, data)
end


ひとつ注意してほしいことは、同じ記事(URL)に対して同じ内容のトラックバックを複数回送信すると相手先に迷惑になるので、そのような実装は避けてください。

Posted by あかさた
こちらのブログでプログラミング 2.0 という考え方が紹介されています。元ネタはオライリーのブログで、オライリーに送られてきたメールに書かれていることだそうです。

オライリーは、Spring を使えば Java でも Rails 並みにすばやくアプリを構築できるという例を挙げて、リストすべてに共感しているわけではないが、プログラミングの環境がここ最近で激しく変化していることは、認めているようです。

確かに開発スタイルが変わりつつあるのは感じますが、×× 2.0 はあんまり使えないってイメージを持っていたり。(--;
# ソフトウェアはバージョン 3 まで待てっていいますからね。(^^;

リストの中で着目するのはリリース頻度に関するものだと思います。すばやいリリースを実現するための方法として、いくつかの手法がリストに挙げられていますがこれはまだ賛否両論あってしかるべきです。思えば、Delphi が良かったのも、Rails が良いのも、ひとえにすばやいリリースが可能なことだったような。(Delphi はその特徴をだんだん失っちゃいましたけど。)

Posted by あかさた
このブログ(Ruby on Rails)をモバイル対応をしてみました。といっても、まじめにやったわけではなく、before_filter に以下のコードを埋め込んで、携帯ブラウザの場合は左右のメニューを隠したり、一度に表示する記事の量を抑えたりしています。

if user_agent.index(/DoCoMo|J-PHONE|Vodafone|KDDI|UP\.Browser/)

is_mobile = true
end


いくつかバグがあって、大きな画像を記事中に埋め込んでいるときは、容量オーバーで表示が途切れたり、文字コードは UTF8 にしているので、古い携帯や機種によっては見られない(というか見られない機種のほうが多い)という現象が発生します。

テストは AU の W43S で行いました。コメントを書くとかそういうことは一切テストしていないので、ものすごい不具合があるかも・・・。テストしてみました。普通に書き込めました。顔文字とか機種依存文字とか使うとだめだと思いますが、普通に書くぶんには問題なさそうです。

以下、2007/1/7 に追記。
私なりに調べた携帯対応のポイントを書き連ねておきます。(このブログではほとんどできていませんが・・・。)
・ 携帯の機種によって必要な対応項目が異なるので、user_agent を調べて、機種ごとに適切な対応をとる必要があります。(HTML の形式、文字コード、一度に読み込めるページのサイズなど。)
・ 文字コードは昔は Shift-JIS が一般的でしたが最近はいろいろです。私の携帯では UTF8 も対応しています。
・ 携帯は読み込める容量が少ないので、大きな画像は縮小、文章も適切なところで切ってやる必要があります。
・ 携帯は画面サイズ(というか解像度)が小さいので、画面を有効活用するために、カタカナは半角にする必要があります・・・という話がありますが、個人的にはそろそろいいのではないかと考えています。最近の携帯は VGA(昔の PC のディスプレイ)位の解像度はあるので・・・。
・ パケット代を節約するためにも、余分な情報(このサイトで言えば、左右のメニューとか)は極力表示しないようにします。
・ Rails で作ったアプリは、割とそのままでも表示されました。でもこれは、au だけかな・・・?

以上です。

Posted by あかさた