ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

「朽ちる散る落ちる―Rot off and Drop away」読了

朽ちる散る落ちる (講談社文庫)

朽ちる散る落ちる (講談社文庫)

Vシリーズ9巻。もう一気にここまできました。ちょっと急ぎすぎ?
本作は、「六人の超音波科学者―Six Supersonic Scientists」の続編にも当たるのですが、なんだかいきなりスケールが壮大になって、シリアスさが増大してます。まさにハードボイルドって感じかも。
章タイトルの読みがぜんぶ「かける」になってるのがちょっと面白いです。いや、この作品に関わらず、森博嗣の作品の章タイトルは、言葉遊び的なものが多いですが。
今回のトリックはかなり理系な上に、計算式で埋め尽くされているので、もーわからんよ!って感じです。うーん、物理とか好きな人にはいいかも。

Rails2.0からsqliteがデフォルトになったのはいいが、どうやって中身みるんだ?

sqlite3コマンドが、フロントエンドになっているらしい。

>sqlite3 development.sqlite3
SQLite version 3.5.4
Enter ".help" for instructions
sqlite> .databases
seq  name             file

---  ---------------  ----------------------------------------------------------

0    main             rails_apps/depot/db/development.sqlite3

sqlite> .tables
products     schema_info  sessions
sqlite> .schema sessions
CREATE TABLE sessions ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "session
_id" varchar(255) NOT NULL, "data" text DEFAULT NULL, "created_at" datetime DEFA
ULT NULL, "updated_at" datetime DEFAULT NULL);
CREATE INDEX "index_sessions_on_session_id" ON sessions ("session_id");
CREATE INDEX "index_sessions_on_updated_at" ON sessions ("updated_at");
sqlite> select * from sessions;
sqlite> select * from products;
6|Pragmatic Project Automation|<p>
       <em>Pragmatic Project Automation</em> shows you how to improve the
       consistency and repeatability of your project's procedures using
       automation to reduce risk and errors.
      </p>
      <p>
        Simply put, we're going to put this thing called a computer to work
        for you doing the mundane (but important) project stuff. That means
        you'll have more time and energy to do the really
        exciting---and difficult---stuff, like writing quality code.
      </p>|/images/auto.jpg|2008-05-01 21:20:23|2008-05-01 21:20:23|29.95
7|Pragmatic Version Control|<p>
         This book is a recipe-based approach to using Subversion that will
         get you up and running quickly---and correctly. All projects need
         version control: it's a foundational piece of any project's
         infrastructure. Yet half of all project teams in the U.S. don't use
         any version control at all. Many others don't use it well, and end
         up experiencing time-consuming problems.
      </p>|/images/svn.jpg|2008-05-01 21:20:24|2008-05-01 21:20:24|28.5
8|Pragmatic Unit Testing (C#)|<p>
        Pragmatic programmers use feedback to drive their development and
        personal processes. The most valuable feedback you can get while
        coding comes from unit testing.
      </p>
      <p>
        Without good tests in place, coding can become a frustrating game of
        "whack-a-mole." That's the carnival game where the player strikes at a
        mechanical mole; it retreats and another mole pops up on the opposite si
de
        of the field. The moles pop up and down so fast that you end up flailing

        your mallet helplessly as the moles continue to pop up where you least
        expect them.
      </p>|/images/utc.jpg|2008-05-01 21:20:24|2008-05-01 21:20:24|27.75
9|abcdefghih|dflkasdf|http://hoge.com/abc.png|2008-05-01 21:48:34|2008-05-01 22:
02:10|250
sqlite>
sqlite> .quit

>

なるほど。

「RailsによるアジャイルWebアプリケーション開発」8章まで読了

↑のsessionの問題以外は特になし。自由課題をやる。

新しい変数をセッションに加えて、ユーザが何回indexアクションにアクセスしたか記録してみましょう。

store_controller.rbのindexに処理を追加。

  def index
    @products = Product.find_products_for_sale

    if session[:counter].nil? then
      session[:counter] = 1
    else
      session[:counter] += 1
    end
  end

上記のカウンタをテンプレートに渡して、カタログページの上部に表示してみましょう。

views/store/index.html.erbに一行追加。

<h1>Pragmaticカタログ</h1>

<%= session[:counter] %>回目の表示です。

<% for product in @products -%>

ユーザがカートに何か入れたときにカウンタが0にリセットされるようにしましょう。

store_controller.rbのadd_to_cartに一行追加

  def add_to_cart
    begin
      product = Product.find(params[:id])
    rescue ActiveRecord::RecordNotFound
      logger.error("無効な商品#{params[:id]}にアクセスしようとしました")
      redirect_to_index("無効な商品です")
    else
      @cart = find_cart
      @cart.add_product(product)
      session[:counter] = nil
    end
  end

エラーの時はリセットしない仕様です。

テンプレートを変更して、カウンタの値が5を超過したときにだけカウンタが表示されるようにしましょう。

views/store/index.html.erbを今度はこうしてみる。

<h1>Pragmaticカタログ</h1>

<% if session[:counter] >= 5 then %><%= session[:counter] %>回目の表示です。
<% end %>

<% for product in @products -%>

JSPチックやなあ。