「やれやれ」って言いたい 読書感想「ノルウェイの森」

7月 22nd, 2009 admin

ノルウェイの森〈上〉
ノルウェイの森〈上〉
posted with amazlet at 09.07.22
村上 春樹
講談社
売り上げランキング: 3076
ノルウェイの森〈下〉
ノルウェイの森〈下〉
posted with amazlet at 09.07.22
村上 春樹
講談社
売り上げランキング: 3102

新潮文庫の表紙にあるタグを規定枚数集めるともらえるパンダのグッズが欲しいから本を買うわという人に付き合って買った本。家に帰ってよくみてみたら新潮文庫ではなく講談社でショックを受けました。

あらすじ

37歳の主人公はドイツに向かう飛行機の中で「ノルウェイの森」を耳にし、20年近く前の恋人を思い出す。

感想

作品中でも登場人物がわざわざ発言しているのだが、主人公がライ麦畑のホールデンに非常に似ている。村上春樹がThe catcher in the ryeを翻訳するのはノルウェイの森をかいたずっと後なのだが、それでもこの作品を読んでいると村上春樹がThe catcher in the ryeを翻訳したというのは村上春樹ファンには本当に素晴らしい出来事だったんだなと、この奇跡の共演に感謝したくなりました。(村上春樹にとっては偶然でも奇跡でもないでしょうが)

そしてお話の内容もやはりホールデンのような主人公がでてくる以上はライ麦畑のようなお話になる。村上春樹版のライ麦畑なんだなーと思いました。
最近は女性にこそ読んで欲しいと思うような小説を読むことが多かったのだけど、これはとても男の子向け。僕は男なので体験もしたこと無いようなことでも「わかるわかる、その気持ち」とタフな主人公の気分にひたるのは痛快だ。久しぶりにライ麦畑をよみたくなってきたので探してみようかな。

★★★★☆

全491回 蟹工船をTwitterで読む with Ruby

7月 15th, 2009 admin

蟹工船

青空文庫(http://www.aozora.gr.jp/)で公開されている蟹工船をTwitterで毎日1段落づつ読めるようにしました。
読書が苦手な人にオススメです

読み方

https://twitter.com/kanikosen
をフォローしてください。毎朝8時ごろ一段落だけPOSTされます。

コード

botのコードはRubyで書きました。gemのtwitterをつかったわけですが、このライブラリはバージョンごとに結構使いかたが違うようなので、ネットでの情報を探すより英語の公式サイトを見るのがよさそうです(コンストラクタの引数が1つになってるとか)

RUBY:
  1. #!/usr/bin/ruby
  2.  
  3. require 'rubygems'
  4. require 'twitter'
  5. $KCODE = 'u'
  6.  
  7. filename = "kanikosen.txt"
  8. log_file = "published.log"
  9.  
  10. #マルチバイト文字列を指定文字数で分割して配列を返す(なんか方法ないのかな?
  11. def div_string(str,num=140)
  12.   packed = Array.new
  13.   while part = str.slice!(/.{#{num}}/)
  14.     packed.push part
  15.   end
  16.  
  17.   packed.push(str) unless str == ""
  18.   return packed
  19. end
  20.  
  21.  
  22. last_line = File.read(log_file).to_i
  23. httpauth = Twitter::HTTPAuth.new('loginid','password');
  24. twit = Twitter::Base.new(httpauth)
  25.  
  26.  
  27. File.open(filename){|fp1|
  28.   while line = fp1.gets
  29.     if fp1.lineno> last_line
  30.       posts = div_string(line,140)
  31.       posts.each do |post|
  32.         p post
  33.         twit.update(post)
  34.       end
  35.  
  36.       if line =~ /。$/
  37.         File.open(log_file,"w"){|fp2|
  38.           fp2.puts fp1.lineno
  39.         }
  40.         exit
  41.       end
  42.     end
  43.   end
  44. }

行末の「。」までをPOSTしているだけです。
*実行には、POSTした行数を記録しておくファイルが必要です

まとめ

計算してみたところ491日後に終るようです。楽しみですね!

参考サイト

図書カード:蟹工船
3700のつぶやきと48万文字を経て、今Twitterで創作小説が読める
Ruby Twitter Gem by John Nunemaker

明日ジャム作ろうぜ! 読書感想「西の魔女が死んだ」

7月 14th, 2009 admin

西の魔女が死んだ (新潮文庫)
梨木 香歩
新潮社
売り上げランキング: 544
おすすめ度の平均: 4.5

4 健全な死生観
4 自分の足でまっすぐ立って歩く
4 魔女
5 自分で考えて自分で決める
4 愛される喜び

読書が苦手な知合いにプレゼントしようと選びました。
短い話なので数時間あれば読めてしまうが、あなどるなかれ一生ものの愛と知恵のつまった一冊でした。

あらすじ

中学生生活に馴染めない女の子「まい」がイギリス人のお祖母ちゃん(そういえば、お祖母ちゃんの名前は一度もでてこなかった??)と二人きりで暮らすというお話。
短いながらも、実の娘からも魔女と呼ばれるお祖母ちゃんとの愛と知恵に溢れた生活はだんだんとまいを成長させていく。

脳内再生が止まらない

田舎に一人で生活をしている祖母がいる僕にはたまらないお話だった。孫に対する豊かな愛と、自然と上手に(そうとても上手に)付き合うための生活に根ざした深い知恵をもったおばあちゃんというのを僕は知っている。
物語の最初から最後まで僕の頭の中では舞台は岐阜県岐阜市佐野の田舎、そして西の魔女は美濃の魔女である自分の祖母だった。
やさしいおばあちゃんを知っている人、厳しく頑固な母をもつ女性にはそれだけでもうたまらない物語です。

「オールドファッション」な生活

物語は現代の日本なのだが、西の魔女は洗濯機もつかわないず、卵も鶏が産まなければ食べないような半分自給自足の生活をしています。苺が採れればジャムをつくり、ミントが採れればお茶にして、ラベンダーが咲けばシーツに香りを移したりと、ゆっくりをとした時間の流れる豊かな生活は読んでいるだけなのに田舎の空気で呼吸をしているような気持ちになれました。

魔女の愛

人間関係・死・自然との付き合いなど、もうありとあらゆる不安を抱えている主人公を、魔女は「魔女になるための修行」をすることでひとつひとつ救っていきます。どの答えもシンプルでわかりやすく、やさしいものでした。

まとめ

この作品は映画化されており「号泣できる」とかいわれていたのですが、少なくとも小説はそういう話ではないような気がしました。ネタばれとかではなく魔女は小説の1行目でいきなり亡くなってしまうのですが、それに対する悲しさよりも暖かい気持ちになることの方が多かったように思います。
特に最後の魔女からのサプライズは主人公の魂を救ったとも言える大きな大きな愛のプレゼントで、僕は魔女からの明るい前向きなプレゼントに目頭が熱くなりました(やっぱり泣けるわ)

僕は男だけど、この本は特に女性にお薦めしたいなと思いました。小中学生の時に主人公に共感してよし。母親時代に主人公の母親気分を味わってよし、おばあちゃん時代に孫への愛の伝えかたを学んでよしと、人生で少なくとも3度は楽しめる1冊なんじゃないでしょうか。

さて、今週の土日は岐阜に帰ろうかな。
★★★★☆

RubyでHTMLを取得 – 検索エンジンを作ろう

7月 10th, 2009 admin

Rubyでつくる検索エンジン
星澤 隆
毎日コミュニケーションズ
売り上げランキング: 82686

この本を読んだので、僕も自分の検索エンジンを作ってみようと思いました。
しかもせっかくなので本を踏襲しながらもオリジナルで作ってみたいなと思ってしまった(よくある失敗の原因ですね)。

とりあえずdRubyの本を半年ぐらい借りており、持ち主に返したいのでdRubyをクローラーのところに使いたい。

クローラー・スパイダー

RUBY:
  1. require "hpricot"
  2. require "open-uri"
  3. require 'kconv'
  4.  
  5. uri = ARGV[0]
  6.  
  7. class Crowler
  8.   def initialize(uri)
  9.     @uri = uri
  10.     @title = nil
  11.     @description = nil
  12.     @src = nil
  13.   end
  14.  
  15.   def get
  16.     begin
  17.       doc = open(@uri)
  18.       @src = Hpricot(doc.read).toutf8
  19.     rescue => ex
  20.       return
  21.     end
  22.  
  23.     @title = (@src/:title).inner_html
  24.     desc_element = @src.search('meta[@name="description"]').first
  25.     @desc = desc_element ? desc_element["content"] : ""
  26.   end
  27. end
  28.  
  29. Crowler.new(uri).get

まとめ

面倒なところは飛ばしてとりあえず、小さいのを完成させよう