買い物

今日は(今日も)本をどかどか買ってたら、一緒にいたid:moroさんたちに「何この買いっぷり」みたいな生暖かい視線を浴びせられました。

RESTful Webサービス

RESTful Webサービス

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

Rubyist Magazine出張版 Ruby on Windows

Rubyist Magazine出張版 Ruby on Windows

初めてのFlash Video

初めてのFlash Video

CODE VERSION2.0

CODE VERSION2.0

入門Luaプログラミング

入門Luaプログラミング

PEAR―PHPライブラリ

PEAR―PHPライブラリ

これでも技術書のみに抑えたので冊数としては少ない方なんですが。とはいえ重めの本が多かったので、家で計ったら5kgほどありました。これにノートPCやら普通に読んでる本とかが加わるので、バッグ全体では10kgくらいになってるかも。ちょっと重い。

InstantRailsをRails 2.0.2にする

メモ。

まっさらな状態で試したわけではないので、この通りにやって確実に成功するかは微妙(何か足りないかも)。また、時代はsqlite3らしいので、MySQLではなくsqlite3を使う方法で。

$ gem update --system
$ gem install rails

gem install rails は gem update rails でもいいはず。

  • sqlite3をインストールする

http://www.sqlite.org/download.html よりsqlitedll-3_5_4.zipをダウンロードし、展開して、ruby\bin\ ディレクトリに置く。

2007/12/23追記: Railsで実行するだけならこれでいいですが、コマンドラインも使いたいのでsqlite3.exeも持ってきましょう。上記URLからsqlite-3_5_4.zipもダウンロード&展開して、ruby\bin\ ディレクトリに置くと使えるようになります。

  • sqlite3-rubyをインストールする
$ gem install sqlite3-ruby
  • railsコマンドを実行
C:\InstantRails-2.0pr\rails_apps>rails rails202sample1
      create
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  config/initializers
      create  db
      create  doc
      create  lib
      create  lib/tasks
      create  log
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  script/performance
      create  script/process
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/mocks/development
      create  test/mocks/test
      create  test/unit
      create  vendor
      create  vendor/plugins
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  Rakefile
      create  README
      create  app/controllers/application.rb
      create  app/helpers/application_helper.rb
      create  test/test_helper.rb
      create  config/database.yml
      create  config/routes.rb
      create  public/.htaccess
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/boot.rb
      create  config/environment.rb
      create  config/environments/production.rb
      create  config/environments/development.rb
      create  config/environments/test.rb
      create  script/about
      create  script/console
      create  script/destroy
      create  script/generate
      create  script/performance/benchmarker
      create  script/performance/profiler
      create  script/performance/request
      create  script/process/reaper
      create  script/process/spawner
      create  script/process/inspector
      create  script/runner
      create  script/server
      create  script/plugin
      create  public/dispatch.rb
      create  public/dispatch.cgi
      create  public/dispatch.fcgi
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/index.html
      create  public/favicon.ico
      create  public/robots.txt
      create  public/images/rails.png
      create  public/javascripts/prototype.js
      create  public/javascripts/effects.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log
C:\InstantRails-2.0pr\rails_apps>cd rails202sample1

C:\InstantRails-2.0pr\rails_apps\rails202sample1>ruby script\server
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  INT => stop (no restart).
** Mongrel available at 0.0.0.0:3000
** Use CTRL-C to stop.

結果は↓こんな感じ。

とりあえず今日はここまで。

アジャイルプラクティス

監訳どうもおつかれさまでした! 買ったけど献本ももらいました。ありがとうございました。

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

改めてこの本を読みながら、<泥の中の一歩>のことを考えていました。
http://www.dodgson.org/omo/t/?date=20071103

この本は教科書的ないいプラクティスが満載なのですが、ただ、いかんせん「教科書的」なことは弱点にもなっているように思います。要するに、読んでもなかなか実行できないんですよ、こういうプラクティスは。上の記事から引用してみます。

ソフトウェア開発について言えば, 正解の多くは教科書に書いてある. ただ現実の <泥> の中で教科書どおりに振る舞うのは難しい. 足に絡む <泥> はやる気のない同僚や無能な上司, 不条理な顧客かもしれないし, まあ多くの場合は自分自身の能力不足でもあるだろう. 教科書どおり振舞うには能力が必要で, 能力を身につけるには訓練がいる. しかしフォーマルな訓練を受ける余裕はない.<泥の中で一歩を踏み出す> とは, そうした制限の中で実現可能な定石のサブセットを探すこと, それを実行することを言う. 高速な "単体" テストが無理でも少し時間のかかる自動テストならできるかもしれない, インスペクションが無理でもウォークスルーならできるかもしれない...(略)

ただ、泥の中でもがきながら「実現可能な定石のサブセットを探す」ときのリファレンスとして、この本は役に立つことは確実だと思います。そういう意味で、やはりいざという時に役立つ本であり、その「いざという時」はもちろん「まさに今」以外にないので、手ごろな分量的にもまず読んでおくべき一冊だと思います。

……と思ったらomoさん本人がレビュー書いているんですね(http://www.dodgson.org/omo/t/?date=20071222)。なんかこっちを読んでいただいた方が早いかも。

あと、この本に限った話ではないですが、アジャイルを進める人たちにとって、「アジャイル(であること)」が価値判断を含んでいることが気になりました。アジャイルでないと駄目、とはいわなくても、少なくともアジャイルであることが問題を引き起こすことはないように書かれています。こういった考え方は、うまくいかない環境を「ちゃんとアジャイルしていない・なっていない」と判断するような論法にのっとっているような気もします。あるいは、「よい開発」を単に「アジャイルな開発」と呼び変えているとか。でも、それって言葉の使い方としてどうなの? という気もします。