« 2011年8月 | トップページ | 2011年10月 »

2011年9月24日 (土)

[本] 傑作にあと一歩足りない本格ミステリを読んで惜しいと思った

夏の王国で目覚めない(彩坂美月)


本格ミステリの舞台として用意された作中劇の世界。ミステリー・ツアーの中の犯人は誰か、そしてミステリー劇を仕掛けたジョーカーの企みは? ジョーカーの正体は? 計算され尽した世界のミステリ。


現実世界を舞台にして本格ミステリーをやろうとすると警察の介入やら何やら障害がある。そこで嵐の孤島のような外界と断絶された世界が用意される。


作者が用意したのは、ミステリー・ツアーの世界。主人公の女子高生の美咲は、幻想的なミステリ作家、三島加深のファン。ある日、ジョーカーと名乗る人物から、「架空遊戯」という名のミステリー・ツアーに誘われる。ミステリー劇の登場人物の役を演じながらツアーに参加し、劇中の謎を解けば、加深の未発表作がもらえるというもの。


作中作とかが大好物な本格ミステリーファンである自分は、この設定だけでもうワクワクしてしまう。


ミステリーツアーに参加したメンバーは「ジョーカー」の指示通りの役を演じ、指示された台詞を喋る。当然、ミステリ小説なので、劇中の中だけで起こるはずの事件がそれで終わることはなく、作品の中の現実世界での事件が起こってしまう。美咲たちは、ミステリー劇の登場人物を演じながら、事件の謎を推理する。


ストーリーの展開も飽きないしテンポも良い。謎の仕掛けも魅力的。どんでん返しも用意している。伏線の張り方も丁寧。一つだけ残念なところが。


それは、読んでいる自分が結末を予想できてしまい、予想が当ってしまったところ。惜しい。これだけの設定を用意したんだから、もっと読んでいて頭がクラクラするような破天荒な話にしてほしかった。


この作家の作品を読むのは2度目なんだけど、どこか行儀の良いミステリという印象を受ける。アクの強さがないというかクセがないというか。もっとムチャクチャして、もっと冒険すれば、もっとすごい傑作が生まれるんじゃないかと思う。今後に期待。

| | コメント (0) | トラックバック (0)

[本] ロマンス作家が書いた本格ミステリーを読んで Hello のもう一つの綴りを知った

Death in the Stocks (Georgette Heyer)


ロマンス作家として有名らしいジョージェット・ヘイヤーの本格ミステリ『紳士と月夜の晒し台』の原書。


紳士の刺殺死体が発見され、遺産の相続人など殺人の動機を持つ者たちがうじゃうじゃと現われる。


この殺人の動機を持つ者たちが一筋縄ではいかない人物ばかり。自虐的に「自分が殺したかも」とうそぶいてみたり、「あんたが殺したの?」とストレートに他人に聞いてみたり。


長い間、行方不明だったのに、タイミング良く途中から登場する曰くありげな被害者の弟は、「弟が殺害された日は、オウムの販売の商談に行っていた、オウムは商売になる。」などと訳のわからんアリバイを主張した次の瞬間に「それは嘘でした」と白状したり。警部が逆切れする前に、読んでいる私が思わず「嘘かよっ!」と突っ込んでしまった。


「俺がどこにいたかあんたはとっくに調べ上げて、もう知っているんだから、今更、俺がどこにいたか喋る必要はないだろう。」と警部の尋問に答えるのを拒否したり。


容疑者達は好き勝手言いたい放題。警部同様に煙に巻かれてしまい、最後の最後まで、犯人はわからず。


ミステリーとして肝心の謎解きは、意外な犯人ではあったものの、こちらの英語力が不足していたためか伏線がわかっていなくてすっきりしなかった。


本格ミステリ風味のユーモア小説と思えば悪くない。


読む分には、イギリス英語とアメリカ英語の違いは気にならないんだけど、英語はちょっと難しく感じた。
Hullo ってのは、Hello のことだろうと想像できたのだけど、後から調べてみて、イギリス英語でHulloと綴ることがあることを初めて知った。


'The trouble is, it was too simple a murder' said Giles.
'Now had you found my cousins's body in a locked room,
the key on the inside, all the windows bolted -'

| | コメント (0) | トラックバック (0)

2011年9月23日 (金)

[本] jQuery の入門書を読んだ

10日でおぼえるjQuery入門教室(山田祥寛)

jQueryがどんなものか知りたいとずっと思っていて、そんなときに図書館で見つけたので借りた。

この本にも書いてあるけど、何の予備知識も無い人がこの本にいきなり手を出すのは厳しいはず。 HTML、CSS、JavaScript のある程度の知識は必要。 一応、この本でも第1章は、入門書ということで、CSSとJavaScriptの解説をしている。 そうはいっても、予備知識があった方が入りやすいことは確か。 特にCSSを知っていると、jQuery のセレクターの部分とかは、馴染みやすいだろう。

JavaScript でゴリゴリとループを回してHTMLのタグをさまよい歩くスクリプトしか今まで書いたことがなかったので、 セレクターによる操作の便利さにちょっと感動してしまった。

jQuery 自体は、JavaScriptのオブジェクト指向をフル活用して実装されているのだろうけど、 この本では、あまりオブジェクト指向に深入りしないで、jQueryの使い方を解説している。 入門書としては望ましいアプローチなんだろうけど、逆に私にとってはそこがちょっと不満だった。

ほとんどのプログラムを(適当に)写経しながら試してみた。 推奨環境とは違っているんだけど、試した範囲ではちゃんと動作した。

試した環境は、

Ubuntu 10.04
Firefox 3.6.22
jQuery 1.6.4
jQuery UI 1.8.16
jQuery Templates 1.0.0pre
Ruby 1.9.4dev (PHPスクリプトとXAMPPの代用)

ちなみに、XAMPPは、Ajaxのサンプルで使う。使うのは、PHPとApache だけ。 こうして見ると何一つとして、この本で推奨されている環境とは一致してない(笑)。

jQueryのサンプルは読む分にはわかりやすかった。 だけど、いざ、写経してみるとちょっと混乱した。 関数オブジェクトをダイレクトに書いているので、インデントが深くなり、ブロックの最後が、) } ; , のどれだかわからなくなってしまうのだ。 jQueryを使ってスクリプトを書くときのスタイルはこうした方がいいみたいな解説が欲しかった。 わかりやすいスタイルでないと、実際に開発するときにつらい気がするんだけど、どうなんだろうか?

Lesson 37のオートコンプリート機能の解説で、PHPスクリプトの

$_GET['term']

がどうして term なのか説明が欲しかった。 HTML側には、term という id も class も登場していない。 termが登場するのは、phpファイルの中だけ。 どこからこのパラメータがわたされてくるのかさっぱりわからない。 PHPが守備範囲外だとはいえ、これは、オートコンプリートの機能をPHPと連携させる上でのキモとなるパラメータだと思う。 一言あっても良かったんじゃない?

10日でおぼえられたかどうかは、ともかく、jQueryがどんなものか、jQueryを使うとどう便利かということがわかったのが収穫。

あと、これは余談だけど、jQuery Templates はテンプレートエンジンっぽいものだけど、最初に適当に写経したものだからハマッた。

jsonp.js

function(data) {
   $('#result').empty();
   $('#template').tmpl(data.Result).appendTo('#result');
}

jsonp.html

<dl id="result">
    <script id="template" type="text/x-jquery-tmpl">
        <dt><a href="${Url}">${Title}</a></dt>
        <dd>${Description}</dd>
    </script>
</dl>

としてしまって動作しなくてちょっと悩んだ。

本当は、

jsonp.html

<dl id="result"></dl>
<script id="template" type="text/x-jquery-tmpl">
    <dt><a href="${Url}">${Title}</a></dt>
    <dd>${Description}</dd>
</script>

と dlタグの外に template を出しておかないといけない。

dlタグの中に入れておくのなら、jsonp.js を

function(data) {
   $('#result > dt, #result > dd').empty();
   $('#template').tmpl(data.Result).appendTo('#result');
}

として、jsonp.html の template を消さないようにしないといけない。 jQuery Templates は第一印象でいいかもと思ったんだけど、こういうハマり方をすることがあると、ちょっと使いにくいかも。 なんかうまい回避策があるのかな。

| | コメント (2) | トラックバック (0)

2011年9月22日 (木)

[Ruby] jQuery の勉強のために Webrick を使った超簡易手抜きサーバーを準備した(4)

または、サーバーにWebrickを使っているから、 10日でおぼえるjQuery入門教室(山田祥寛) のPHPのサンプルを適当なRubyスクリプトに置き変えてみようのコーナー。

lesson 37 のサンプルは、autocomplete.php の代わりに、autocomplete.cgi を作ることにした。

autocomplete.cgiの中身は、こんな感じ。 手抜きでエラーチェックはしてないし、 いい加減な正規表現を使って実装しています。 ruby のバージョンは、1.9.4devです。

PHP は全く知らなくて、json_encode とか array とか配列(ハッシュ?)はよくわからないんだけど、 期待通りに lesson 37のサンプルが動いたので、よしとする。

#!/usr/local/ruby-trunk/bin/ruby
# encoding:utf-8
Encoding.default_internal = Encoding.default_external = 'UTF-8'
 
require 'cgi'
require 'json'
 
keywords = {
    'append(c)' => '要素cをカレント要素の子要素末尾に追加',
    ...
}
 
cgi = CGI.new
print "Content-Type:application/json\n\n"
print keywords.select{|k, v|
  /^#{cgi['term']}/i =~ k
}.map {|k, v|
  {id:v, label:k, value:k}
}.to_json

| | コメント (0) | トラックバック (0)

2011年9月19日 (月)

[Ruby] jQuery の勉強のために Webrick を使った超簡易手抜きサーバーを準備した(3)

10日でおぼえるjQuery入門教室(山田祥寛)のサンプルでは、PHP を使っているんだけど、Ruby の Webrick を使っているので、 lesson 30 のサンプルは、yahoo.php の代わりに、yahoo.cgi を作ることにした。

yahoo.cgiの中身は、こんな感じ。手抜きでエラーチェックはしてません。 ruby のバージョンは、1.9.4dev。

#! /usr/local/ruby-trunk/bin/ruby
#- encoding:utf-8 -
require 'cgi'
require 'open-uri'
require 'uri'
 
cgi = CGI.new
page = cgi['page'] != '' ? cgi['page'] : 1
num = 20
 
params = {
  appid:'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  query:cgi['keywd'],
  start: (page.to_i - 1) * num + 1,
  results: num,
}
 
param = params.map{|k, v| "#{k}=#{URI.encode(v.to_s)}"}.join('&')
url = 'http://search.yahooapis.jp/VideoSearchService/V2/videoSearch?'+param
 
print  "Content-Type: text/xml;charset=UTF-8\n\n"
open(url) {|f|
  f.each_line{|line| print line}
}

| | コメント (0) | トラックバック (0)

[Ruby] jQuery の勉強のために Webrick を使った超簡易手抜きサーバーを準備した(2)

10日でおぼえるjQuery入門教室(山田祥寛)のサンプルでは、PHP
を使っているんだけど、Ruby の Webrick を使っているので、
ここは、lesson 29 のサンプルは、php.php の代わりに、ruby.cgi を使うことにした。


ruby.cgiの中身は、こんな感じ。


#! /usr/local/ruby-trunk/bin/ruby
#- encoding:utf-8 -
require 'cgi'
str =<<DOCUMENT
content-type:text/html
 
Rubyは初心者でも簡単に習得できるスクリプト言語です。<br />
DOCUMENT
puts str

| | コメント (0) | トラックバック (0)

[Ruby] jQuery の勉強のために Webrick を使った超簡易手抜きサーバーを準備した

Ubuntu 10.04の環境で試しながら、
10日でおぼえるjQuery入門教室(山田祥寛)を読んでいる。
この本の中にjQueryを使ったAjaxの準備のための章があって、XAMPPをインストールしている。


jQueryの勉強のために、XAMPPをインストールするのは、大げさな気がしたし、
インストールもしたくない。
そこで、Webrickを使って超簡易手抜きサーバーを用意した。
といっても、webrick.rbの説明そのまま抜き出しただけのサーバープログラム。


require 'webrick'
root = File.expand_path("~/work/jquery")
server = WEBrick::HTTPServer.new :Port => 30030, :DocumentRoot => root
trap 'INT' do server.shutdown end
server.start

サンプルプログラムは、~/work/jquery配下に配置されていることが前提。
Ajaxのサンプルはこれから試していくけど、他のサンプルはブラウザからアクセスして動作したので、良しとする。

| | コメント (0) | トラックバック (0)

2011年9月11日 (日)

[本] ユーモアのある軽いタッチのハードボイルドをさらっと読んだ

探偵稼業は運しだい (レジナルド・ヒル)


重厚長大なダルジール警視シリーズは、日本語で読んでも難しいんだから、
きっと英語で読んだら、全く歯が立たないだろう。
そう考えて、原書に手を出していない作家。
それがレジナルド・ヒルである。


ところが、この作品は、そんなレジナルド・ヒルが書いたとは思えないほど軽快だった。


主人公は、仕事を解雇され、やむなく私立探偵となった冴えない中年男、ジョー・シックススミス。
ハードボイルドの探偵のように腕っぷしが強くもないし、合理的な推理も苦手。
誠実でまっすぐなのが取り柄だけのしがない探偵である。


だが、当てずっぽうで行動したり閃きで聞き込みしたりすると、なぜか、それがあれよあれよという間に
いい方にいい方にと転がっていき、いつの間にか事件を解決してしまう。
このテンポの良さがシックススミスの誠実な人柄もあって、読んでいて心地よかった。
正直者が最後に笑うというのを絵に描いたような結末もまた良し。


重厚なダルジール警視シリーズを敬遠している人にもオススメできる軽いタッチのハードボイルド。


「ほら、まただわ、ジョー。あなたを私立探偵と思ったのはまちがいだった、わかっ
ているのはこれっぽっちしかないと考えていると、いきなり、あなたはぱっと閃く。
わたしのような洗練された法律の専門家は見逃していたことを。」

| | コメント (0) | トラックバック (0)

2011年9月 9日 (金)

[Ruby] やっと Rails 3.1.0 にバージョンアップしたときのエラーを解消できた

やっと、自分の作ったRailsアプリをRails 3.1.0 にバージョンアップしたとき
に出ていたエラー


Started GET "/javascripts/jquery_ujs.js" for 127.0.0.1 at 2011-09-04 18:28:50 +0900
 
ActionController::RoutingError (No route matches [GET] "/javascripts/jquery_ujs.js"):

を解消することができた。


Rails 3.0.10 のときに自動生成される app/views/layouts/application.html.erb は


<%= javascript_include_tag :defaults %>

となっているが、Rails 3.1.0 では


<%= javascript_include_tag "application" %>

となっている。


自動生成された app/views/layouts/application.html.erb を手で修正していたので、
Rails 3.1.0 へのバージョンアップ時、 rake rails:update で、
app/views/layouts/application.html.erb を上書きしないでスキップしちゃったのが敗因。
というよりも、上書きしても修正した内容が消えて困っていただろうから、
スキップした後で、Rails 3.1.0 で自動生成される application.html.erb と比較しなかったのが敗因かな。


Rails 3.1.0 の自動生成に合わせて


<%= javascript_include_tag "application" %>

にしたら、エラーが出なくなった。


あとはルーティングの件。


だけど、CoffeeScript とか SCCS とか jQuery とかを使うなら、最初から作り直した方がいいのかもなと思ったりもする。

| | コメント (0) | トラックバック (0)

2011年9月 4日 (日)

[Ruby] Rails 3.1.0を動作させるためにnodejsをインストールした。

順番が逆だけど、rails 3.1.0を試してみた。


$ rails -v
Rails 3.1.0
$ rails new myapp310
....
run bundle install
...

bundle install が実行されるのか


$ cd myapp310
$ rails server
/usr/local/ruby192p290/lib/ruby/gems/1.9.1/gems/execjs-1.2.4/lib/execjs/runtimes.rb: \
45:in `autodetect': Could not find a JavaScript runtime.
See https://github.com/sstephenson/execjs for a list of available runtimes.
(ExecJS::RuntimeUnavailable)

ということで実行できず。


JavaScript の処理系が必要だということらしい。
で、何が必要かと思ってざっとruntimes.rb を見てみたところ


def self.runtimes
@runtimes ||= [
RubyRacer,
RubyRhino,
Johnson,
Mustang,
Node,
JavaScriptCore,
SpiderMonkey,
JScript
]
end

と書いてあって、どうやら、このうちどれかをインストールすれば良いらしい。


AWDwR 4th Edition を見ると、Ubuntu 11.04 のインストールの例があって nodejs をインストールするように書いてある。
まだ、Ubuntu 10.04を使っている自分は、apt-get で nodejs をインストールできないのだよな。
ああ、もう、なんかいろいろ面倒くさいなあ。


nodejs をインストール。一応 stable 版の 0.4.11 をインストールすることにした。
Python 2.6 以降と、libssl-dev が必要だと書いてある ので
インストールされていることを確認した後で、


$ mkdir ~/work
$ cd ~/work
$ tar zxvf node-v0.4.11.tar.gz
$ cd node-v0.4.11
$ ./configure
$ make
$ sudo make install
$ node -v
v0.4.11

インストールできた。


では改めて


$ cd ~/rails/myapp310
$ rails server
=> Booting WEBrick
=> Rails 3.1.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-09-04 21:24:12] INFO WEBrick 1.3.1
[2011-09-04 21:24:12] INFO ruby 1.9.2 (2011-07-09) [i686-linux]
[2011-09-04 21:24:12] INFO WEBrick::HTTPServer#start: pid=7762 port=3000

やっと動いた。


ちなみに、bundle install の実行をやめたいときには、--skip-bundle を指定して


$ rails new myapp310 --skip-bundle

とすればいい。

| | コメント (0) | トラックバック (0)

[Ruby] Rails 3.0.10 から Rails 3.1.0 へのアップデートして撃沈

自分で作った Rails 3.0 のアプリケーションをアップデートしようとして途中で挫折。


Gemfile の編集


gem 'rails', '3.1.0'

bundle update の実行


$ bundle update

rake rails:update の実行


$ rake rails:update 

上書きされて困るものはスキップ。


実行してみたら、


Started GET "/javascripts/jquery_ujs.js" for 127.0.0.1 at 2011-09-04 18:28:50 +0900
 
ActionController::RoutingError (No route matches [GET] "/javascripts/jquery_ujs.js"):

とエラーが出る。


実行はできるみたいだけど、link_to で作ったリンクをクリックすると


No route matches [GET] "/receipts/227/remove"

と言われる。


GET じゃなくて DELETE のつもりなんだけどな。


$ rake routes

したら


remove_receipt DELETE /receipts/:id/remove(.:format) {:action=>"remove", :controller=>"receipts"}
search_receipts POST /receipts/search(.:format) {:action=>"search", :controller=>"receipts"}
receipts GET /receipts(.:format) {:action=>"index", :controller=>"receipts"}
POST /receipts(.:format) {:action=>"create", :controller=>"receipts"}

リンクのソースは、


<a href="/receipts/227/remove" data-method="delete" rel="nofollow">削除</a>

となっていて DELETEっぽい感じになってるんだけどな。


やっぱり、routes.rb は難しいし、アップデートもハマるなあ。

| | コメント (0) | トラックバック (0)

[本] 2011年現在の今のクラウドの状況をざっくりと知ることができる本を読んだ

クラウドが何か、クラウドに関する技術、利用方法、種類など、2011年現在のクラウド状況をざっくりと知りたい人にオススメ。 利用する立場の人(企業)向けでクラウドサービスを提供する人向けの本ではない。

見開き2ページで1つのトピックスを扱っており、左が文章による説明、右が図による説明となっていて読みやすい。 内容は、基本中の基本のことが書かれている。 クラウドで使われている技術の解説に始まり、どのようなサービスがあるか、どのようの利用方法があるのか、適用事例、 クラウドとコンプライアンス、クラウドと内部統制、 どの企業がどんなクラウドサービスを提供しているかなど、幅広い内容を扱っている。

それぞれのトピックスについての深く突っ込んだ解説はないので、深いことを知りたい人は他の本を読んだ方がよい。 逆に何も知らないのであれば、とっかかりとしてこの本がオススメである。

| | コメント (0) | トラックバック (0)

2011年9月 3日 (土)

[本] SFっぽくないジュヴナイル小説を読んだ

主人公は17歳の少年マーカス。コンピューターやゲームに詳しい普通の高校生。

てっきりSFだと思って読み始めたんだけど、そんなにSFっぽくない。時代設定とかは明記されていないけど、登場してくるガジェットや知識や技術が現代となんら変わりないからである。Baysian SPAM filter とか Xbox とか公開鍵と秘密鍵とか GIMP とかeXtreme Programming とか SMTP とか。主人公の少年も普通の高校生で特殊な能力がある訳でもなくコンピューターに詳しいだけの普通の高校生である。まあ、ハッカーとしてそのハンドル名を知られているぐらいには詳しいんだけど。 なので、SFを読み慣れていない私にもすんなり入り込めた。

主人公の少年はある日、爆弾テロの犯人と疑われ、国家組織DHSに拘束されて拷問まがいの尋問を受けて、携帯電話のパスワードなども洗い浚い喋らされ、疑いが晴れて開放された後もDHSの監視下に置かれてしまう。少年は自由を取り戻すために仲間とともにコンピュータの知識を使って国家権力に闘いを挑むことを決意する。

ここから、国家権力を手玉に取る少年の痛快な冒険物語が始まる...訳じゃなくて割とシリアスな展開。様々な自由を勝ち取るために行われた運動のアメリカの歴史が語られたり、主人公たちによる自由と国家の安全に関する議論があったりする。主人公も、いつまた拘束されるかと怯えたり、弱音も吐くし、泣いたりもする。 その分だけ現実味があって大人も十分楽しめるジュヴナイル小説になっている。

ジュヴナイル小説らしいけど英語はかなり難しかった。

If you've never programmed a computer, you should. There's nothing like it 
in the whole world. When you program a computer,it does exactly what you
tell it to do. It's like designing a machine - any machine, like a car, like
a faucet, like a gas hinge for a door - using math and instructions. It's 
awesome in the truest sense:it can fill you with awe.

で、最初はこんな言語からプログラムを始めるといいらしい。

Start with a languate like Python, which was written to give nonprogrammers
an easier way to make the machine dance to their tune.

自分は、Python を書けないし読めないけど、プログラマーを名乗ってもいいですか?

| | コメント (0) | トラックバック (0)

[Soft] Cygwin gcc 4.5.3

Cygwin gcc4-4.5.3-2 がリリースされた。


This is a stable release of GCC 4.5.3 which replaces the earlier experimental
release of GCC 4.5.0.

アップデートしてからRubyをコンパイルしてみた。問題なくコンパイルできた。

| | コメント (0) | トラックバック (0)

« 2011年8月 | トップページ | 2011年10月 »