結婚一周年 (紙婚式)

ちょうど 1 年たちました
二人仲良く無事にこの日を迎えられてよかったです。


式場となったホテルから First Aniversary のお誘いがあったので、二人で行ってきました。式前は準備のために足繁く通っていたものの、その後はすっかりご無沙汰だったのでとてもなつかしい感じでした。



ビュッフェ形式のランチをいただきました。チョコレートフォンデュなんかもあって充実した品揃えでした。
#タダではないですよ(笑)



おなかが満たされたあとは、館内を軽く散歩がてら、結婚式をあげたアトリウムにも足を伸ばしました。1年前には、向かって右の階段をわたし、左の階段を新譜が降りて入場してきました。



ホテルをあとにして、そのままモノレールに乗ってディズニーシーへ。入口をはいるといきなりドナルドが熱烈な歓迎をしてくれました。久しくキャラクターに絡まれたことはなかったので、ちょっとびっくり。



午後からの入場でしたが、混雑もほとんどなく一通りアトラクションやショーを楽しむことができました。ストーリーがしっかりつくり込まれたタワー・オブ・テラーは面白いですね。偶像「シリキ・ウトゥンドゥ」 から目を離しちゃいけません(笑)




いろいろ歩きまわったんで疲れもしましたが、とても充実した楽しい記念日になりました。

また一年健やかに過ごせますように。 (-人-)

復刊ドットコムで 「Java 並行処理プログラミング」の復刊投票

幸運にも会社にありましたが、手元においておきたい本なので、ぜひ復刊してくれるとよいです...


Java並行処理プログラミング ―その「基盤」と「最新API」を究める― Brian Goetz, Joshua Bloch, Doug Lea, 岩谷 宏(訳)  復刊リクエスト投票


復刊を求めるコメントの一覧はこちらから。
これまでにコンピュータのカテゴリで復刊が決定したものを検索してみると、130 票くらい集まることが目安になるだろうか。



Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―



追記: 2009-09-08

復刊交渉がはじまったようです。リクエスト数は、現在 200 票越えでコンピュータジャンルのなかではかなり上位ですね。

Java並行処理プログラミング」にリクエストいただいた皆さまにお知らせです。

《交渉結果》出版社へ復刊の可能性を打診

出版社へ交渉を開始いたしました。皆様へお伝えできる情報が入りましたら、ブログにてお知らせいたします。
なお、出版社や著者へ直接お問い合わせされることはご遠慮くださいますようお願い申し上げます。

Poken

Poken しませんか?」 と聞かれて、恥ずかしながら、はじめて知りました。 (^^;

ポーケンはスイス生まれのデジタル名刺ガジェット!
いつでもどこでも携帯できる、ストラップ型の新しいコミュニケーションツールです。

...(snip)...

ポーケンは、自分のプロフィール情報、例えば名前やメールアドレスだけではなく、自分のブログやホームページのアドレス、色々なSNSソーシャルネットワークサービス)での登録 IDなどを、簡単に相手と交換することができます。

使い方はとてもシンプル。
お互いのポーケンの手を1~2秒かざしあって「ハイタッチ」します。緑のランプがつけばデータ交換成功!これであなたの情報は相手に、相手の情報はあなたのポーケンに伝わります。


MOO に続くアイテムになるのでしょうか? Amazon あたりをみると、在庫切れになってる種類が多いので、流行りはじめてる...!?

[ポーケン / Poken] - Voodoo

[ポーケン / Poken] - Voodoo

[ポーケン / Poken] - Bee

[ポーケン / Poken] - Bee


個人的には最初の「ハイタッチ」は楽しめそうですが、何人もやってると大変そう。でも 1回はやってみたいかな...。
あと、交換した内容がその場で見れないのが、ちょっと残念。名刺や MOO だとそこに書かれていることをネタに話が展開することもあると思うのですが。


以下、気になったとこのメモ。

  • 本体 USB コネクターの白いタブを引き抜いて取ればアクティベートが完了 (ハイタッチ可能、こちらの情報はユーザー登録後に見えるようになる)
  • オフラインで「いつ」「誰」に会ったかという履歴をとれる
  • Poken で他の人のポーケンカードを見ると、その人が登録しているサイトのアイコンが表示される
  • ポーケン本体には個人情報は保存されず、ポーケン ID と呼ばれるランダムな番号と、ハイタッチをしあった情報に関連する暗号化した番号だけが保存される (もちろん、落としたらサイトで紛失ステータスに要変更)
  • 現在の仕様では64人の情報まで保存可能 (新しいバージョンで増える予定)

六義園に行ってきました

天気もよく、花粉の飛散もだいぶおさまってきたので、お散歩がてらに六義園まで行ってきました。
日陰は若干肌寒いですが、日向はぽかぽかしていて花見日和りでした。新宿御苑と比べるとだいぶ小じんまりとしていて、ビニールシートを広げて宴会という感じはないですが、春を感じるちょっとした気分転換にはちょうどよいくらいです。
# 広すぎると疲れちゃうので...。 (^^;

  • 入口すぐのしだれ桜

P1150057

  • 桜とカラスと飛行機雲

P1150059

  • よーく見ると亀が岩の上で甲羅干し中

P1150069

P1150070

  • 玉藻の磯から蓬莱島と茶屋を背景に

P1150071

  • 2本の桜の見事なコラボレーション?

P1150081

  • と思ったら、実は 1本の木でした!

P1150082

  • 桜に見えるけど梅の仲間

P1150090

  • 南国のフルーツのような、御歯黒の原料

P1150092

  • つつじ

P1150094

P1150096

  • 和紙の原料になります

P1150101

  • 太い幹からも新芽が

P1150103

  • カモと鯉の餌とり合戦

P1150110

  • 藤代峠からの一望

P1150112

  • つばき

P1150118

  • ぐるっと一周して最後にまたしだれ桜

P1150120

ap4r-0.3.7 をリリースしました

追記: 2009-03-24
RubyForge への up がうまくいってなかったのか、サイトから直接 DL はできてたのですが、gem コマンドでのインストールで 0.3.7 がインストールできてませんでした...。さきほど、再度ファイルを up しなおしたところ、問題なく gem コマンドからインストールできました。



前回リリースからだいぶ間があいてしまいましたが、ようやくリリースしました。 (^^;

主な変更点

  1. Rails から AP4R サーバに接続する際の、可用性の向上および負荷分散
  2. メッセージの永続化先として、PostgreSQL を使用し、PostgresPR でつなぐ場合の不具合
  3. async_helper.rb を vendor/plugins 以下から移動
  4. サンプルの HelloWorld アプリを Rails-2.3.2 に対応

1. については以前、Rails から AP4R サーバへの接続の可用性とか、負荷分散とか... のエントリーに書きましたが、Rails -> AP4R の接続部分が SPoF (Single Point of Failure) になっていたので、障害時に別の AP4R サーバにフェイルオーバーするような設定を可能にしました。


2. については、id:cypher さんよりバグレポートをあげてもらってました。
ありがとうございます & 対応がとても遅れてしまってすみません。


3. の変更により、ap4r-0.3.7 以降を使用する場合は、vendor/plugins/ap4r 以下の async_helper.rb を削除してください。新規にインストールする場合は以下のとおりです。

%ruby script/plugin install http://ap4r.rubyforge.org/svn/tags/ap4r-0.3.7/samples/hello_world_for_rails2/vendor/plugins/ap4r


4. については、app/controllers/application.rb の名前が変わったくらいでしょうか。 :-p


注意点

rails-2.1.2 以前と rails-2.2.x 以降が混在した環境だと、下記のような GemException が発生する可能性があります。

% ruby186 script/mongrel_ap4r start -A config/queues_disk.cfg
/var/lib/gems/1.8/lib/rubygems.rb:149:in `activate': can't activate activesupport (= 2.1.2, runtime), already activated activesupport-2.3.2 (Gem::Exception)
        from /var/lib/gems/1.8/lib/rubygems.rb:165:in `activate'
        from /var/lib/gems/1.8/lib/rubygems.rb:164:in `each'
        from /var/lib/gems/1.8/lib/rubygems.rb:164:in `activate'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:37:in `require'
        from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/message-store.rb:389
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:32:in `gem_original_require'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:32:in `require'
        from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue-manager.rb:23
         ... 8 levels...
        from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:6
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:38:in `gem_original_require'
        from /var/lib/gems/1.8/lib/rubygems/custom_require.rb:38:in `require'
        from script/mongrel_ap4r:2


reliable-msg/message-store.rb で active_record/vendor/mysql を require していますが、このファイルが rails-2.2.x 以降でなくなった影響で、発生するようになりました。
# Rails の混在してない環境、あるいは mysql-ruby がインストールされている環境では発生しません。


メッセージの永続化先に MySQL を使用しない場合にも、こんなエラーがでてしまうのはちょっと嫌なので近いうちになんとかしようと思います。とりあえずの対応としては、reliable-msg/message-store.rb の 386 行目あたりを次のように修正してしまってください。 <(_ _)>

begin
  require "mysql"
rescue LoadError => le
  #require "active_record/vendor/mysql"
  raise le
end

require の呼び出しを表示

ふと気になって、起動時になにがどういう順に require されてるのかを簡単に確認してました。
以下のようなコードをパスの通ったとこに用意しておいて、起動時のコマンドに挟み込みます。

  • show_require.rb
require 'rubygems'

module Kernel
  alias __require gem_original_require
  def gem_original_require(path)
    puts "#{path.ljust(30, " ")} from #{caller(1)[1]}"
    __require path
  end
  private :__require
  private :gem_original_require
end

load ARGV.shift

たとえば、AP4R の起動であれば、いつもは下記のような感じですが...、

% ruby186 script/mongrel_ap4r start -A config/queues_disk.cfg


それを次のようにします。

% ruby186 show_require.rb script/mongrel_ap4r start -A config/queues_disk.cfg


すると、require が呼ばれるごとに、なにが require されたのかと、どこから呼び出されたかが表示されます。

% ruby186 show_require.rb script/mongrel_ap4r start -A config/queues_disk.cfg
rubygems                       from ./script/mongrel_ap4r:1
ap4r                           from ./script/mongrel_ap4r:2
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
etc                            from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/fileutils.rb:973
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
ap4r                           from ./script/mongrel_ap4r:2
rubygems                       from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:5
reliable-msg                   from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:6
reliable-msg/queue             from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg.rb:9
drb                            from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue.rb:11
drb/drb                        from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb.rb:1
socket                         from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:54
thread                         from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:55
fcntl                          from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:56
drb/eq                         from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:57
drb/drb                        from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/eq.rb:1
drb/invokemethod               from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:1562
reliable-msg/client            from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue.rb:12
drb                            from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/client.rb:11

  (snip)

** Starting AP4R Handler with config/queues_disk.cfg
Loaded queues configuration from: /Users/kiwamu/work/temp/my_ap4r/config/queues_disk.cfg
Using message store: memory
Accepting requests at: druby://localhost:6438

  (snip)
   

RubyGems の require でわらわら出るのもうざいので、require 'rubygems' のあとで require をひっかけるようにしています。caller のあたりはもうちょっとまともに書いたほうがいいかも... (^^;


ちなみに Rails だとこんな感じ。
あらためて見てみると、(同じものが何度も登場してるとはいえ) いろいろ require してますね...。

% ruby186 show_require.rb script/server
./script/../config/boot        from ./script/server:2
rubygems                       from ./script/../config/boot.rb:85:in `load_rubygems'
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
etc                            from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/fileutils.rb:973
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
fileutils                      from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories'
initializer                    from ./script/../config/boot.rb:55:in `load_initializer'
logger                         from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:1
monitor                        from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/logger.rb:4
set                            from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:2
pathname                       from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:3
railties_path                  from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:6
rails/version                  from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:7

  (snip) # 500行くらい

action_controller              from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
dispatcher                     from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
action_controller/dispatcher   from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
rack/utils                     from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
time                           from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
rack/utils                     from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
rack/mime                      from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'

=> Call with -d to detach
=> Ctrl-C to shutdown server

RubyForge で gem リリースの RSS 配信がはじまりました

ruby-talk でも流れていましたが、RubyForge での gem リリースが RSS 配信されるようになったそうです。
日次で更新されて、直近 2日分の情報を保持しているみたいですね

Thanks to the assistance of Tom Copeland, RubyForge now has an RSS feed of recent gems:

http://gems.rubyforge.org/index.rss

The feed is updated daily and contains the last two days of releases. If you forget, you can also access the feed via RSS autodiscovery on http://rubyforge.org


すでに Project News は配信されてましたが、リリースされてもニュースとして投稿されてないと分からなかったので、あわせて見ておくとよいかもしれません。 :-)

http://rubyforge.org/export/rss_sfnews.php


# いずれもトップページから自動検出されます。