-
20090923
001591
- ペールエール - 箕面ビール
- ベルジャンペールエール - 箕面ビール
渋谷の東急東横店で開催中の第五回なにわうまいもん市にて。
[ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ] -
20090921
001590
- ゴールデンエール - サンクトガーレン
- アンバーエール - サンクトガーレン
- ブラウンポーター - サンクトガーレン
- 湘南ゴールド - サンクトガーレン
- YOKOHAMA XPA - サンクトガーレン
- スイートバニラスタウト - サンクトガーレン
- ◎ペールエール - サンクトガーレン
- ボヘミアンピルスナー - 横浜ビール
- ヘーフェヴァイツェン - 横浜ビール
- 開港ラガー - 横浜ビール
- 横浜ホワイト - 横浜ビール
- ◎なまはげボック - あくらビール
- ビスケットヴァイツェン - あくらビール
- 秋田美人のビール - あくらビール
- レッドエール - みちのく福島路ビール
- ニヘデビール(ソフト) - 南都サンゴ地ビール
- ニヘデビール(ハード) - 南都サンゴ地ビール
- スタウト - 杉能舎麦酒
- シェーンアルト - ホテルオークラ福岡
- 明石海岸ビール - 明石麦酒
- 明石浪漫ビール - 明石麦酒
- 明石黒ビール 悠久の刻 - 明石麦酒
- レッドラガー - モクモクビール
- グランブルー - 城端麦酒
- 俺の味 - 城端麦酒
- 俺の黒 - 城端麦酒
- 十字峡 - 宇奈月ビール
- ポーター - スワンレイクビール
- アンバースワンエール - スワンレイクビール
- 越乃米こしひかり仕込み - スワンレイクビール
- スワンレイクエール - スワンレイクビール
- ベルギーホワイト - こぶし花ビール
- ピルスナー - こぶし花ビール
- ◎メルツェン - こぶし花ビール
- とちのめぐみ - とちのめぐみ
- スタウト - 那須高原ビール
- ヴァイツェン - 猪苗代地ビール
- ピルスナー - 猪苗代地ビール
- ゴールデン エンジェル - 猪苗代地ビール
- ラオホ - 猪苗代地ビール
- スパークリングフルーツ 赤ぶどう - 鳥の海
- スパークリングフルーツ 白ぶどう - 鳥の海
- なまらう米!!ビール - シャトービール
- 社長のよく飲むビール - はこだてビール
- ケルシュ - 大沼ビール
- アルト - 大沼ビール
- インディアペールエール - 大沼ビール
- モール温泉ビール - 十勝ビール
- ヴァイツェン - オホーツクビール
- WEIZEN - NORTH ISLAND BEER
- ◎IPA - NORTH ISLAND BEER
- ◎コリアンダーブラック - NORTH ISLAND BEER
- 赤鬼レッドエール - 鬼伝説地ビール
- ◎フルーティートマト - 鬼伝説地ビール
- ◎金鬼ペールエール - 鬼伝説地ビール
- ◎宍道湖MOON スイーツヴァイツェンボック - 松江地ビールビアへるん
- ペールエール - 松江地ビールビアへるん
- ◎ショコラ No.7 (4.5年熟成) - 松江地ビールビアへるん
- ◎ショコラ No.7 (3.5年熟成) - 松江地ビールビアへるん
- ピルスナー - 大山Gビール
- ヴァイツェン - 大山Gビール
- 大山ゴールド - 大山Gビール
- バーレーワイン2008 - 大山Gビール
- ピルスナー - 海軍さんの麦酒
- アルト - 海軍さんの麦酒
- バーレーワイン - 海軍さんの麦酒
- 太陽のラガー - 宮崎ひでじビール
- もぐら (スモーキングモールエール) - 宮崎ひでじビール
- ブルーマスター - ブルーマスター
- ◎かぼす&ハニー - ブルーマスター
- スタウト【黒糖】 - 城山ブルワリー
- ベルギーホワイト【桜島こみかん】 - 城山ブルワリー
- ペールエール【枇杷茶】 - 城山ブルワリー
- ハーブエール - 城山ブルワリー
- バーリーワイン '09 - ハーベストムーン
- ◎スモークエール - ハーベストムーン
- ブラウマイスターオリジナル - 牛久シャトービール
- ◎Brooklyn Lager - Brooklyn Lager (木内酒造ライセンス醸造)
- ◎W-IPA - 箕面ビール
- スタウト - 箕面ビール
- ヴァイツェン - 箕面ビール
- ペールエール - 箕面ビール
- ◎ブロンシュ - 梅錦ビール
- ヴァイツェン - 梅錦ビール
- ボック - 梅錦ビール
- ◎ゴールデンエール - 南信州ビール
- デュンケルヴァイツェン - 南信州ビール
- オクトーバーフェスト - 南信州ビール
- アップルホップ - 南信州ビール
- サンサンオーガニックビール - ヤッホーブルーイング
- 英国古酒 (2006) - ヤッホーブルーイング
- ナショナルトラスト - ヤッホーブルーイング
- シーズナル - ヤッホーブルーイング
- IPA ハーベストブリュー - 志賀高原ビール
- Harvest ale - 志賀高原ビール
- ペールエール - 志賀高原ビール
- ◎Miyama Blonde - 志賀高原ビール
- Not So Mild Ale Harvest Brew - 志賀高原ビール
- Takashi Imperial Stout 2009 - 志賀高原ビール
- インディアペールエール - 金しゃちビール
- 抹茶ドラフト - 金しゃちビール
- IPA - 反射炉ビア
- ダークラガー - 御殿場高原ビール
横浜大さん橋で開催されているジャパン・ビアフェスティバル2009にて。 今日9/21が最終日、まだ間に合いますよー。
-
20090917
001589
最近、勉強会などに顔を出すことが多くなってきて、そのときに名刺交換をすることもあるのだけれど、なにやら普通の名刺の 1/2 サイズくらいの小さな名刺を持っている人がちらほらと。 へーなんだろうなぁ、と思っていたら、ミニ名刺作成サービスっていくつかあるみたいね。 仕事とは関係なく興味の近さとかで会う人たちと、会社のメールアドレスでやり取りすることなんてまずないから、会社の名刺を出すのもあまり意味がない気はしてたところだったので、ぼくも作ってみました。 利用したのはここのサービス。
Web 上で表面の文言 (6行 x 半角約40文字) と書体、裏面のデザインを選んで注文すると、中3,4営業日くらいで届けてくれます。 紙もしっかりして質が良いです。 裏面のデザインは、既存のものから選んでも良いのだけれど、自分で画像をアップロードすることもできます。 いずれにしてもお値段は同じ。 ぼくは自分で撮った写真を使い、50 枚で 1,980 円のセットにしました。 一枚あたり 40 円程度なので、写真をプリントに出すのとそんなに違わない感覚です。
自分で撮った写真を使う場合は、画像編集ソフトなどで事前に彩度を目一杯上げておくと良いようですよ。 表面がマットな質感になっているからか、想定したよりも落ち着いた色味に仕上がる感じがあります。
せっかく作ったのだけれど、今月は何かと忙しくてあまり勉強会に顔を出す余裕がなく、実はまだ一枚も渡せていません。 今度会った方、名刺交換させてください。
-
20090914
001588
- ヴァイツェン - 網走ビール
実家から送ってもらったもの。 祝杯的な。
-
20090912
001587
- Gosser
- 城山 ベルギーホワイト
新橋 DRY-DOCK にて。 明日に備えておとなしく帰るはずが「一杯だけ」とお店に足を運び、一杯だけのはずが「もう一杯」となり。 でも二杯で我慢しただけえらいと思う。
-
20090910
001586
明日 09/11 は Apache CouchDB の勉強会に参加してきます。
話を聞きながら実際に触れる環境があったほうが良かろうと、自宅サーバーに最新の Apache CouchDB をセットアップし直しました。 最初は Windows XP が動いている NetBook にインストールしようとしたのですが、いろいろとハードルがあって断念。 勉強会の会場はルノワールなので、Wi-Fi が使えて自宅サーバーにアクセスできるからまあ良いかと。
Apache CouchDB は Erlang で書かれている RESTful なデータベースシステムで、アクセスに使用するプロトコルは HTTP です。 key-value を JSON の形投げ込み、Map-Reduce で取り出すことができます。 Map-Reduce の記述は JavaScript です。 データベースといっても ACID なトランザクションモデルではなく、いわゆる BASE で Eventually Consistent なイマドキ風です 元々は伝統的なほうのデータベースのエンジニアだった身としては、眉毛にツバをつけたくならなくもないんですが、どれも魅力な技術要素なのでつい手を出してしまいました。 特に RESTful なあたりはぼくの好みです。
インストールの手順はこちらが詳しいです。
必要なパッケージの準備必要なパッケージのいくつかは EPEL (EExtra Packages for Enterprise Linux) のリポジトリーから取得できるので、まずは EPEL を使えるようにセットアップします。
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm $ sudo rpm -Uvh epel-release-5-3.noarch.rpm
これで /etc/yum.repos.d 以下に epel.repo と epel-testing.repo の二つのファイルが作成されます。 ぼくの環境は CentOS 純正以外のリポジトリは /etc/yum.repos.d/extra に分けているので、二つの *.repo ファイルを extra ディレクトリに移動しました。 これで、以下のように必要なパッケージをインストールできます。
$ sudo yum install unixODBC unixODBC-devel $ sudo yum install -c extra.conf js js-devel erlang
"js" というのは SpiderMonkey という Firefox が使用している JavaScript エンジンの Standalone 版です。
icu のインストールEPEL には icu も用意されているのですが、一部コマンドが不足していたので別途ソースからインストールしました。
$ wget http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz $ tar zxf icu4c-4_2_1-src.tgz $ cd icu $ ./configure && make $ sudo make install
Apache CouchDB のインストールさて、いよいよ Apache CouchDB 本体のインストールです。 前回は Erlang などもソースから入れたりしたので結構手間取ったのですが、今回は yum で入れられたのであっさりです。 2009-09-10 時点で最新の 0.9.1 をインストールします。
$ wget http://ftp.kddilabs.jp/infosystems/apache/couchdb/0.9.1/apache-couchdb-0.9.1.tar.gz $ tar zxf apache-couchdb-0.9.1.tar.gz $ cd apache-couchdb-0.9.1 $ ./configure && make $ sudo make install
インストール後の設定デフォルトでインストールすると /usr/local 以下に設定ファイルなどが配置されます。 今はよいですが、いずれ絶対に忘れてしまうので、Linux の標準的な位置から参照できるようにしておきます。
$ sudo ln -s /usr/local/etc/couchdb /etc/couchdb $ sudo ln -s /usr/local/etc/rc.d/couchdb /etc/rc.d/init.d/couchdb
続いて Apache CouchDB 起動用のユーザーを追加します。
$ sudo /usr/sbin/adduser -r \ > --home /usr/local/var/lib/couchdb \ > -M --shell /bin/bash \ > --comment "CouchDB Administrator" couchdb
起動と動作確認さきほど symbolic link を張っておきながら何なんですが、/etc/rc.d/init.d/couchdb はうまく機能してくれません。 今のところ定常的にサービスを提供する必要はないので、デーモンではなくターミナルから起動してお茶を濁します。
$ sudo couchdb
これでエラーが出ずに起動すれば成功です。 こんな感じにしておけば静かに動いてくれます。
$ sudo couchdb > /dev/null 2>&1 &
Apache CouchdDB へは HTTP でアクセスします。 curl を使って動作を確認して見ます。
$ curl http://127.0.0.1:5984/ {"couchdb":"Welcome","version":"0.9.1"}"Welcom" の文字と Apache CouchDB のバージョンが返ってきます。 終了するときは、不本意ですがこれで。
$ fg ^C
その後以上の手順でひとまず Apache CouchDB を動かすことはできるようになりました。 これからここにデータを入れたり、Map-Reduce で取り出したりする必要があります。 そのあたりはこれを読むと良いでしょう。
紹介した本人もまだ読み切ってはいないのですが、O'Reilly から出ている書籍の Web 版です。 これが無償とは、なんとも太っ腹。 ありがたく活用させていただきましょう。
-
20090906
001585
- アルト - 網走ビール
- ピルスナー - 網走ビール
実家から送ってもらったもの。 ありがたし。
-
001584
諸事情で Ruby 1.8.6 と Aptana を使う必要があったため、Ruby 環境を構築しなおしました。 たまにやると、毎回同じようなことでいろいろと引っかかっている気がするので、手順をメモ。
Ruby のインストール上記サイトからリンクされているダウンロード・サイトから ruby-1.8.6-p369-i386-mswin32.zip をダウンロードします。 zip を展開し、適当なディレクトリに配置します。 環境変数 PATH に Ruby の bin ディレクトリを追加しておきます。
RubyGems のインストール上記サイトから rubygems-1.3.5.zip をダウンロードし解凍します。 解凍したディレクトリで以下のコマンドを叩きます。
$ ruby setup.rb
rubygems 本体のインストールが終わったら、引き続き rubygems が使用するライブラリを導入します。
- zlib.dll
- ssleay32.dll / libeay32.dll
- iconv.dll
zlib.dll は zlib123-dll.zip をダウンロードして解凍すると現れる "zlib1.dll" をリネームして利用します。 ssleay32.dll / libeay32.dll は Win32 OpenSSL v0.9.8k Light (Win32OpenSSL_Light-0_9_8k.exe) をダウンロードしてインストールすると、インストール・ディレクトリ直下に現れます。 iconv.dll は libiconv-1.9.2-1-bin.zip をダウンロードして解凍すると現れる "libiconv2.dll" をリネームして利用します。 これら四つのファイルを Ruby の bin ディレクトリにコピーしてください。 これが終わると gem コマンドが動くようになります。 念のため update --system をかけておきましょう。
$ gem update --system
ぼくの環境では HTTP Proxy を使わなければならないため次のようにする必要がありました。
$ set http_proxy=http://proxy.example.com:8080 $ gem update --system
rails のインストール次のように rails をインストールします。
$ gem install rails
Aptana のインストールEclipse の派生で Ruby も使える統合開発環境、Aptana をインストールします。
Aptana_Studio_Setup_1.5.1.exe をダウンロードし、インストールします。 rails の開発環境を入れるには、起動して "Help" > "Install Aptana Features..." から "Web Application Platforms" > "Aptana RadRails" を導入します。 HTTP Proxy を経由する場合は "Window" > "Preferences" を選択し "General" > "Network Connections" から設定を行います。
ぼくは vi (の操作性) じゃないとものを書けないのでエディタ部分は使いませんでしたが、動作確認環境やデバッグ環境としてはなかなか便利でした。
-
20090904
001583
Slashdot かどこかでたまたま目にした Google Code Jam 2009 に参加してみました。
今回、2009-09-03 08:00 JST から 09-04 10:00 JST の 26 時間で qualification round が行われました。 当初は 24 時間の予定だったのですが、システムトラブルで解答提出ができない時間があったので 2 時間延長されたようです。 qualification round の結果は 26 時間が完了してから発表されまして、ぼくは無事に通過していました。 残念ながら全問正解ではありませんでしたが、反省も込めて問題を振り返ってみます。 使用した言語は Java です。
A. Alien Language形式言語の問題。 与えられた幾つかの文字列のうち、何個がその言語として受け入れられるか、という設問です。 正規表現とかオートマトンとか、あのあたりですね。 言語の文法はこの例のように与えられます。
- (ab)(bc)(ca)
- abc
- (abc)(abc)(abc)
同じ括弧に入っている文字集合は、そのうちのいずれであっても良いと定義されています。 生成規則ではなく、n 文字目に取り得る非終端文字の集合で決定されているので、パターンの分岐などがありません。 まずは与えられた文法を頭から分解していって n 文字目に取り得る終端文字を List に突っ込みました。 そうして、与えられた文字列の頭から一文字ずつとり、先ほど解析したパターンの頭から合致するかどうかをテストしました。 ここは List ではなく Set が良かったなと反省です。 contains による照合が線形探索になってしまい非効率でした。
今振り返ると、"()" を "[]" に置き換えると、そのまま正規表現として解釈できましたね。 Java の正規表現ライブラリを使えば一発だったかな。
B. Watersheds水系の塗り分けの問題です。 標高が行列として与えられているので、同じ水系に属する領域に同じラベルを付与するようにという設問です。 地点 (x, y) に対して (x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1) の上下左右四箇所を調べると、水の流れが決定できるように定義されています。 ぼくは最初に水の流れる方向を全域に対して計算して、その後に全域のラベルを決定するというステップを踏みました。
水の流れの決定は、x と y をインクリメントしながら走査していくだけなので、ごく単純です。 続くラベリングはいくつかのやり方で試行錯誤しましたが、最終的にこういう手順になりました。
- ラベルが決まっていない地点のうち、y がもっとも大きなものを選ぶ。y が最も大きいものが複数ある場合は、その中で x が最も小さいものを選ぶ。
- そこから水の流れを辿り、もう水が流れられない地点 (sink) に至る
- そこに新たなラベルを付与する
- ラベルが決まっていない地点をすべて走査し、その地点から sink まで到達可能であれば同じラベルを付与する
- 以上を繰り返す
全域走査が複数回走るのはあまりスマートではありませんね。 (0, 0) から (n, k) まで順に、水の流れを一度ずつ辿るだけでラベリング可能なアルゴリズムを後から思いつきました。
実はこの問題が解くのに一番時間がかかりました。 というのも、出力の形式を間違っていて、何度挑戦しても通らなかったためです。 一休みして、問題を読み直したら気付きました。 「出力形式に注意!」と、以降の round への良い反省となりました。
C. Welcome to Code Jam文字列マッチの亜種。 長い文字列 A から A[x0], A[x1], ... A[x18] (x0 < x1 < ... < x18) を取り出して "welcome to code jam" という文字列が作れるような (x0, x1, ... , x18) の組がいくつあるか、という設問です。
最初ぼくは、A の頭から走査していき、"w" であるものが見つかったらそれ以降の文字列に対して "e" を探し …… 、以降の文字列の処理が返ってきたら引き続き "w" を探す、という再帰処理で行いました。 これは比較的簡単に実装できて、small の入力はあっさりと解けました。 気をよくして large に挑戦すると、これが大失敗。 処理が終わらない……。 今思うと、このやり方は O(m^n) というとんでもない時間計算量でした。 そりゃ終わらんわな。 残念ながら 8 分という制限時間には間に合わず、C-large は time-up でした。
その後、時間は過ぎたもののプログラムを修正し、末尾側から走査していって一度なめれば終了するアルゴリズムに行き着きました。 これであれば時間計算量は O(mn) でさほど悪くありません。
String line = nl(); int[][] grid = new int[len(line)][len(W)]; for(int y : Range.down(0, len(W))) { for(int x : Range.down(0, len(line))) { grid[x][y] = 0; if (W[y] == line.charAt(x)) { if (y == len(W)-1) { grid[x][y] = 1; } else { for(int i : Range.up(x+1, len(line))) { grid[x][y] += grid[i][y+1]; grid[x][y] %= 10000; } } } } } int result = 0; for (int i : Range.up(0, len(line))) { result += grid[i][0]; result %= 10000; }
反省点は多々ありましたが、以降の round に向けて良い勉強ができたかなと思っています。
-
20090903
001582
Amazon の アソシエイト Web サービス (AWS) って、Amazon Product Advertising API と名前が変わってたんですね。 AWS で検索しても Amazon EC2 あたりにしかたどり着けずに四苦八苦しました。
この Amazon Product Advertising API を Ruby から叩いてみました。 2009/08/15 から Product Advertising API の認証の方式が変更になったそうで、これまでは Access Key ID のみで接続できていましたが、今後は Secret Access Key を使った署名を付加しないとつながらないようです。 認証の詳細はこちらをどうぞ。
今回はこの新方式に対応した amazon-ecs というライブラリ (version 0.5.7) を使って Amazon Product Advertising API を試してみます。
amazon-ecs のインストールamazon-ecs を RubyGems でインストールします。 ぼくの環境では HTTP Proxy を使う必要があるので、環境変数 http_proxy を設定します。
$ set http_proxy=http://proxy.example.com:8080 $ gem install amazon-ecs
これで、amazon-ecs およびそれが必要とするライブラリがインストールされます。
RoR 部分の準備今回ここはあまり本質じゃないのでさくっと。 プロジェクトを作成して、コントローラーを一つ定義します。
$ rails AmazonEcsTest -d sqlite3 $ cd AmazonEcsTest $ script/generate controller amazon
Access Credentials の取得Amazon Web Services の次の二つの値を取得します。
- Access Key ID
- Secret Access Key
"Access Key ID" はこれまでも使用されていた ID で、開発者のアカウントを識別するためのものです。 値は固定で変化せず、そのままネットワークに流れます。 "Secret Access Key" は新たに設けられたもので、署名認証に用いられます。 送信するメッセージのダイジェストを計算する際に使われているようです。 これはこのままはネットワークに流れません。 決して公開しないようにしてください。 これらの値は次のページから取得できます。
Amazon Product Advertising API への接続amazon-ecs を使って Amazon Product Advertising API へ接続してみます。 まずは amazon_controller.rb。
def search Amazon::Ecs.options = { :aWS_access_key_id => [Your Access Key ID], :aWS_secret_key => [Your Secret Access Key], :country => 'jp', } # execute query @res = Amazon::Ecs.item_search('beer') end続いて amazon/search.rhtml。
<html><body> <ul> <% @res.items.each do |item| %> <li><%= item.get('title') %> - <%= item.get('author') %></li> <% end %> </ul> </body></html>Web ブラウザで動作を確認すると、キーワード "beer" で検索した結果が返ってくるはずです。
もうちょっと複雑なクエリーシンプルなクエリーは投げられるようになりました。 クエリーをもう少しいじってみましょう。
ページングはこんなオプションです。
Amazon::Ecs.options = { :aWS_access_key_id => [Your Access Key ID], :aWS_secret_key => [Your Secret Access Key], :country => 'jp', :page => 2, }項目を指定してキーワードを指定します。
Amazon::Ecs.options = { :aWS_access_key_id => [Your Access Key ID], :aWS_secret_key => [Your Secret Access Key], :country => 'jp', :author => 'Michael Jackson', :title => 'beer', }その他、オプションの詳細はこちらを参照してください。 *.rhtml で item.get('hoge') するときに指定可能な値もたどれます。
単一アイテムを取得前項は検索結果を一覧で取得しました。 ここでは ASIN でアイテムを指定して取得する item_lookup を使ってみます。 まずは amazon_controller.rb。
def lookup Amazon::Ecs.options = { :aWS_access_key_id => [Your Access Key ID], :aWS_secret_key => [Your Secret Access Key], :country => 'jp', :ResponseGroup => [Images,ItemAttributes,ItemIds'], } # execute query @res = Amazon::Ecs.item_lookup('0751308137') end続いて amazon/lookup.rhtml。
<html><body> <ul> <% @res.items.each do |item| %> <li><%= item.get('title') %> - <%= item.get('author') %></li> <% end %> </ul> </body></html>返るデータの種類は "ResponseGroup" で指定可能です。 item_lookup および ResponseGroup の 詳細はこちらを参照してください。
-
20090901
001581
- よなよなリアルエール
- 湘南ビール サマーボック
吉祥寺の BICKE にて。