八角研究所の技術連載で、実践バグ管理の執筆を時系列に紹介しながら、本企画提案から出版までの流れを執筆者の視点から紹介する記事の連載「書籍「実践バグ管理」執筆体験記」を開始しました。実践バグ管理は、クジラ飛行机さんとの共著であり、本連載では複数人による執筆やり方について深く触れています。

八角研究所 : 書籍「実践バグ管理」執筆体験記(1) - 執筆の開始と出版社への提案

そのうち技術系の本を書いてみたい方におすすめです。また、実践バグ管理については、こちらの記事を参照してください。

Posted by あかさた
Railsでクラス数が増えてくるとフォルダ分けしたくなることがあります。その場合、Javaのパッケージと同じように、モデルをフォルダ分けして、モジュール下に宣言してやることになります。以下のような感じです。

class ModuleName::ModelName < ActiveRecord::Base
end


ところが、belongs_toとかhas_manyとかの関連を解決する際に、以下のようなエラーが出て手がつけられなくなることがあります。悪名高きActiveSupportの「XXX is not missing constant YYY」ですね。

ArgumentError in Hogehoge/Fugafuga#nanika
ModuleName is not missing constant ModelName

<<中略>>

c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:253:in
 `load_missing_constant'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:468:in
 `const_missing'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:486:in
 `send'
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:486:in
 `const_missing'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/base.rb:1912:in `compute_type'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/reflection.rb:133:in `send'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/reflection.rb:133:in `klass'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/
belongs_to_association.rb:44:in `find_target'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/
association_proxy.rb:192:in `load_target'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/
association_proxy.rb:99:in `reload'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations.rb:1092:in `image'

<<中略>>


Railsのソースコードを追った感じでは、load_missing_constantメソッドの中でModuleName.const_defined?(ModelName)していて、これtrueを返すと、上記の例外を投げます。嫌なにおいがぷんぷんとするのですが、あまり深追いしないようにします。

で、この現象、モデルやコントローラの中で、「ModelName」で呼び出していると発生するのですが、「ModuleName::ModelName」と書いてやると発生しなくなります。必ず再現するわけでもないようで、結構長いこと私はこの現象が発生していることに気づきませんでした。

結構はまったのが、本現象は、単一テーブル継承でtypeにモジュール名無しのモデル名を書き込んでしまっても発生することです。

本現象はRails2.1.2で発生していますが2.3.2でも発生しているっぽいです。この問題で2時間くらい悩んでしまった。。。

Posted by あかさた
RailsでSubdomainFuとRestfulAuthenticationを組み合わせて使おうとしたら、ログイン後のリダイレクトの処理(redirect_back_or_default)でサブドメインが渡らないことに気がつきました。(あたりまえですが・・・。)

とりあえずの処置として、AuthenticatedSystemのstore_locationを書き直すことにしました。RestfulAuthenticationでは、ユーザーが認証が必要なページにアクセスする際にstore_locationを呼び出して、ログイン処理後のリダイレクト先を保存するので、このタイミングにサブドメインも(というかURL丸ごと)保存することにしました。

def store_location
  session[:return_to] = request.protocol + request.env['HTTP_HOST'] + request.request_uri
end

def redirect_back_or_default(default)
  redirect_to(session[:return_to] || default)
  session[:return_to] = nil
end



意外とサブドメインを扱うのは面倒です。。。

Posted by あかさた
なでしこのクジラ飛行机さんと一緒に実践バグ管理という本を書きました。なかなかバグ管理のやり方(レポートの書き方からバグの管理まで)をまとめた本がないなぁと思い書いた本です。詳しい紹介は以下から。

そろそろバグ管理についてひとこと言っておくか - 平凡なエンジニアの独り言

Posted by あかさた
今まで作ってなかったのが不思議なくらいでしたが、某本の執筆で必要になったので、Kodougu にロバストネス図をつけました。とりあえずクラス図由来のものを作っています。コミュニケーション図由来のものも近いうちに出したいと思います。

ロバストネス図のサンプル

続きを読む

Posted by あかさた
1981年生まれが集う1981sの忘年会(渋谷)に行ってきました。面白い人たちがたくさん集まっていて、盛り上がっているうちについついオールしてしまいました。100人位いたみたいで、何というかカオス。まぁ、何にしてもいろいろと刺激をもらいました。

yusukebeさんをはじめとして幹事の皆様お疲れさまでした。

Posted by あかさた
ここしばらく POSA 本 を片手にアーキテクチャパターンを再勉強して記事にしています。アーキテクチャパターン Blackboard の記事ができたので紹介します。

八角研究所 : POSA 本でアーキテクチャパターンを勉強しよう(4) - アーキテクチャパターン「混沌から構造へ」より「Blackboard」
http://www.hakkaku.net/articles/20080825-262

過去の記事は以下の通りです。

■ 上記連載の趣旨

アーキテクチャパターンはシステムの基本となる構造を定義するための大規模なパターンです。デザインパターンのようにシステムの部分的な設計を支援するものではなく、システム全体の構造を対象にしています。

アーキテクチャレベルの判断は、部分的な設計判断よりリスクが高いことが多いわけですが、その割にはなかなか勉強する機会がありません。

そこで、アーキテクチャ設計を勉強できる数少ない本の一つであるPOSA 本 を片手にアーキテクチャパターンを勉強するための記事を書いてみることにしました。

しかし、パターンに対するイメージはさまざまです。構造を重視しすぎるあまり、「実際の開発で導き出される設計と何か違う」という理由で忌避する人がいることも事実です。パターンの紹介記事の中には、構造や実装のみを紹介することで、こうした傾向をあおっている節もあります。

# 小難しいから回避する人もいますが。。。

本当はパターンは、「なぜそのような設計判断をするか」「どのようなときにその設計を用いるのか」など、意思決定のプロセスを残し、あるいは読み手が学習するためのものです。本記事では、わかりやすさは重視しながらも、できる限りパターンのメリットを殺さないように書くことを心がけています。

Posted by あかさた
ここしばらく、POSA のアーキテクチャパターンを再勉強しているわけですが、前回のLayers に引き続き、Pipes and Filters の記事を書きました。

八角研究所 : POSA 本でアーキテクチャパターンを勉強しよう(3) - アーキテクチャパターン「混沌から構造へ」より「Pipes and Filters」
http://www.hakkaku.net/articles/20080724-252

Pipes and Filters は、普段の開発で採用することは少ないかも知れませんが、利用者に回ることが多い仕組みなので、しっかりと仕組みを抑えておきたいものです。


Posted by あかさた
InfoQ という技術系情報サイトに Kodougu の紹介記事を書きました。主に trac/pukiwiki のようなウェブアプリケーションに Kodougu のモデリング機能を組み込んだらどうなるかという視点で書いてあります。

ソフトウェア開発におけるウェブベースのコミュニケーションにモデリングを導入する
http://www.infoq.com/jp/articles/webmodeling_kodougu

あと 2 本程度記事を書く予定ですが、次回以降は Kodougu の内部技術や、Kodougu キモでありある意味ダークサイドな機能であるモデリング言語設計機能の紹介をします。

Posted by あかさた
Ruby 1.9 のソースコード読書会が 7/6(日)にミラクルリナックスさんの会議室(新橋)であります。次回は RHG で言うところの「第10章 パーサ」に相当する部分を勉強します。参加表明は以下のサイトでできます。

第6回 RHGの逆襲 - RHG片手にRuby 1.9を読む集い
http://qwik.jp/rhg-strikes-back/75.html

■ 7/3 17:50 追記

本勉強会は 7/27 に延期になりました。よろしくお願いします。m(_~_)m

Posted by あかさた