<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="ja-JP" xmlns="http://www.w3.org/2005/Atom">
  <title>revamping - blog</title>
  <id>tag:blog.wrap-trap.net,2010:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  <link href="http://blog.wrap-trap.net/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blog.wrap-trap.net/" rel="alternate" type="text/html"/>
  <updated>2009-12-11T18:41:29Z</updated>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-12-11:457</id>
    <published>2009-12-11T18:41:00Z</published>
    <updated>2009-12-11T18:41:29Z</updated>
    <link href="http://blog.wrap-trap.net/2009/12/11/blog" rel="alternate" type="text/html"/>
    <title>blog&#31227;&#21205;</title>
<content type="html">
            &lt;p&gt;どうもサーバが安定しないので、はてなに戻ります。&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://d.hatena.ne.jp/hsyd/&quot;&gt;http://d.hatena.ne.jp/hsyd/&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-11-08:373</id>
    <published>2009-11-08T08:19:00Z</published>
    <updated>2009-11-08T08:20:33Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/11/8/arel" rel="alternate" type="text/html"/>
    <title>arel</title>
<content type="html">
            &lt;a href=&quot;http://github.com/rails/arel&quot;&gt;rails's arel at master - GitHub&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;Arel is a Relational Algebra for Ruby. It 1) simplifies the generation complex of SQL queries and it 2) adapts to various RDBMS systems. It is intended to be a framework framework; that is, you can build your own ORM with it, focusing on innovative object and collection modeling as opposed to database compatibility and query generation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「Relational Algebra」を辞書でひくと「関係代数(の演算子)」と出てきますが、arelはRDBMSのクエリを簡単に記述する為のライブラリです。使い方のイメージとしては、&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb386976.aspx&quot;&gt;LINQ to SQL&lt;/a&gt;が一番近いと思います。ドキュメントには、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The long term goal, following both LINQ and DataMapper, is to have Arel adapt to engines beyond RDBMS, including XML, IMAP, YAML, etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;と書かれてます。&lt;/p&gt;
&lt;p&gt;arelを動かそうと思ったのですが、0.1.0はgemで入るもののうまく動かなかったので、0.1.3で試しました。0.1.3はactivesupport(3.0.pre)に依存してる為、&lt;a href=&quot;http://drnicwilliams.com/2009/11/03/first-look-at-rails-3-0-pre/&quot;&gt;Dr Nic ’s First look at rails 3.0.pre&lt;/a&gt;を見て3.0.pre環境を作成しています。&lt;/p&gt;
script/consoleで動かしてみました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&amp;gt;&amp;gt; require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;arel&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; []&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; tickets = Table(&lt;span class=&quot;sy&quot;&gt;:tickets&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class=&quot;c&quot;&gt;#&amp;lt;Arel::Table:0xb796f5c0 @engine=#&amp;lt;Arel::Sql::Engine:0xb7803e84 @ar=ActiveRecord::Base&amp;gt;, @name=&amp;quot;tickets&amp;quot;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; tickets.where(tickets[&lt;span class=&quot;sy&quot;&gt;:name&lt;/span&gt;].matches(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;test%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)).each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |t|&lt;tt&gt;
&lt;/tt&gt;&amp;gt;? puts t[tickets[&lt;span class=&quot;sy&quot;&gt;:name&lt;/span&gt;]]&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;上記のように、SQLを気にすることなくオブジェクトの集合に対して処理を行うことができます。&lt;/p&gt;
ただ、値の取得に関する記述(t[tickets[:name]])や、下記に示すようにレコードの関連を使おうとすると、その記述はまだ冗長なカンジがします。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&amp;gt;&amp;gt; tickets.join(categories).on(tickets[&lt;span class=&quot;sy&quot;&gt;:category_id&lt;/span&gt;].eq(categories[&lt;span class=&quot;sy&quot;&gt;:id&lt;/span&gt;])).where(categories[&lt;span class=&quot;sy&quot;&gt;:name&lt;/span&gt;].matches(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;%2&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))\&lt;tt&gt;
&lt;/tt&gt;.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |t|&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;i&quot;&gt;?&amp;gt;&lt;/span&gt; puts t[tickets[&lt;span class=&quot;sy&quot;&gt;:name&lt;/span&gt;]]&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;LINQ to SQLは仕事で使っていたのですがとても便利でした。arelも同じくらい使い勝手が良くなるポテンシャルがあると思います。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-10-10:49</id>
    <published>2009-10-10T10:16:00Z</published>
    <updated>2009-10-17T19:10:54Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/10/10/agile_and_iterative_development" rel="alternate" type="text/html"/>
    <title>&#21021;&#12417;&#12390;&#12398;&#12450;&#12472;&#12515;&#12452;&#12523;&#38283;&#30330;</title>
<content type="html">
            &lt;p&gt;2部構成になっており、前半はアジャイル開発の基本的な考え方、後半はスクラム・XP・UP・Evoの各開発スタイルについて記述されています。&lt;/p&gt;
&lt;p&gt;アジャイル開発というと、契約が分割されてないと無理、とか、顧客が付きっきりで開発に参加してもうらうのは無理、とよく言いがちです。僕も最初はよくそう思ってました。&lt;/p&gt;
&lt;p&gt;例えば、本書の中に『「予想可能な製造」というパラダイムは、ソフトウエアには合わず、そのパラダイムに根ざしたプラクティスや価値はあまり役に立たない』という部分があります。&lt;/p&gt;
&lt;p&gt;確かに実際は思うように行かないことが多いのも事実なのですが、ビジネスを行っていく上で計画は必要であり、それに根ざしているITが予想不可能というわけにもいかないので、うまく合わせていく必要があります。&lt;/p&gt;
&lt;p&gt;そういった溝がある中で、顧客に対して価値を提供できることが自分たちのビジネスの根幹であり、その溝を小さくする為の手法の1つがアジャイル開発だと考えています。&lt;/p&gt;
&lt;p&gt;だから、最近は自分たちの開発が「アジャイル開発」かどうかは気にならなくなりました。ただ、良い手法は取り入れたい、それだけです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「予想可能な製造」というパラダイムは、ソフトウエアには合わず、そのパラダイムに根ざしたプラクティスや価値はあまり役に立たない&lt;/li&gt;
&lt;li&gt;イテレーションが始まる直前に最善の判断にもとづいて適応型計画(状況に適応した計画)を立てること&lt;/li&gt;
&lt;li&gt;イテレーションのタイムボックス化とは、イテレーションの終了日を固定し、変更させないというプラクティスである&lt;/li&gt;
&lt;li&gt;反復型ではこの不確実性に対応するため、費用や工数やスケジュールの詳細な見積りを、2,3回のイテレーションが終わるまで待って(おそらくプロジェクトの10%から20%が終わる頃に)作成する&lt;/li&gt;
&lt;li&gt;固定価格の入札で進化型の見積りを行う場合に関して、IID手法の中には(UPなど)、プロジェクトを2つの契約フェーズに分けて実行し、それぞれタイムボックスを適用したイテレーションを複数回行うよう、進めているものがある
  &lt;ul&gt;
    &lt;li&gt;最初のフェーズは、比較的短い固定時間・定額の契約であり、2,3回のイテレーションを行って、早期のうちに部分的なソフトウエア開発および進化型の要求分析を行うことが目標である&lt;/li&gt;
    &lt;li&gt;フェーズ1の成果物を確認して行う為、フェーズ2の見積りに役立つ質の高いデータが集まり、しかもプロジェクトのソフトウエア開発も進む&lt;/li&gt;
  &lt;/ul&gt;
&lt;li&gt;
&lt;li&gt;アジャイル宣言
  &lt;ul&gt;
    &lt;li&gt;プロセスやツールよりも、個人相互作用&lt;/li&gt;
    &lt;li&gt;包括的なドキュメントよりも、動作するソフトウエア&lt;/li&gt;
    &lt;li&gt;契約交渉よりも、顧客との協調&lt;/li&gt;
    &lt;li&gt;計画に従うことよりも、変化に対応すること&lt;/li&gt; 
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;アジャイル原則
  &lt;ul&gt;
    &lt;li&gt;最も重要なことは、価値のあるソフトウェアを早い段階から継続的に納品し、顧客を満足させること&lt;/li&gt;
    &lt;li&gt;たとえ開発が進んだ後であっても要求の変更を歓迎する。アジャイルなプロセスとは、顧客の競争優位のために変化を生かすもの&lt;/li&gt;
    &lt;li&gt;動くソフトウエアを頻繁に納品する。その間隔は2、3週間から2、3ヵ月月の単位で、短いほど良い&lt;/li&gt;
    &lt;li&gt;ビジネスサイドの人間と開発者が、プロジェクト全体を通じて毎日一緒に仕事をする&lt;/li&gt;
    &lt;li&gt;やる気のある個人を中心にプロジェクトを構築する。環境を整え、必要なものを提供し、仕事をやり遂げてくれる信じること&lt;/li&gt;
    &lt;li&gt;開発チームに対して、あるいは開発チーム内で情報を伝えるために最も効率的かつ有効な方法は、直接の対話である&lt;/li&gt;
    &lt;li&gt;動くソフトウエアこそが進捗を測る一番の尺度である&lt;/li&gt;
    &lt;li&gt;アジャイルなプロセスは、継続的な開発を促進する。スポンサー、開発者そしてユーザが一定のペースを無期限に保たなければならない&lt;/li&gt;
    &lt;li&gt;技術卓越性と優れた設計に常に注意を払うことが、アジャイルさを向上させる&lt;/li&gt;
    &lt;li&gt;簡潔性(できるかぎり作業をしないですませる術)こそ本質である。&lt;/li&gt;
    &lt;li&gt;最も優れたアーキテクチャ、要求、設計は、は自己組織化されたチームから創発されるものである&lt;/li&gt;
    &lt;li&gt;チームは定期的に、より効果的な方法を検討し、自分たちのやり方を調整し適合させる&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;アジャイルプロジェクトマネジメント
  &lt;ol&gt;
    &lt;li&gt;クライアントにとって有用なものを出荷する。何が重要視されるかを確認する&lt;/li&gt;
    &lt;li&gt;利害関係者が熱心に参加するように育てる&lt;/li&gt;
    &lt;li&gt;リーダーシップ-コラボレーション方式を採用する&lt;/li&gt;
    &lt;li&gt;有能且つ協調的なチームを作り上げる&lt;/li&gt;
    &lt;li&gt;チームが意思決定できるようにする&lt;/li&gt;
    &lt;li&gt;タイムボックスを短く区切ったイテレーションを行って、早期にユーザ機能を出荷する&lt;/li&gt;
    &lt;li&gt;適応性を高める&lt;/li&gt;
    &lt;li&gt;技術的卓越性を擁護する&lt;/li&gt;
    &lt;li&gt;プロセスに準拠するための作業ではなく、出荷するための作業を重視する&lt;/li&gt;
  &lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;オーガスティンとウッドコックの6つのプラクティス
  &lt;ul&gt;
    &lt;li&gt;指針となるビジョン: プロジェクトの指針となるビジョンを打ち立て、言葉と行動の両方から継続的に補強する&lt;/li&gt;
    &lt;li&gt;チームワークとコラボレーション: 関係とコミュニティを通してコラボレーションとチームワークを活性化する&lt;/li&gt;
    &lt;li&gt;シンプルなルール: スクラムやXPなどのようにチームの指針となる一連のプラクティスを設定し、サポートする&lt;/li&gt;
    &lt;li&gt;情報の公開: プロジェクトマネジメントなどの情報を公開してアクセスできるようにする&lt;/li&gt;
    &lt;li&gt;軽いタッチ: 自律的チームの創発的な振る舞いを促進するために最低限の管理だけを行う&lt;/li&gt;
    &lt;li&gt;アジャイルな自戒: ビジョンを補強し、ルールをそのまま、あるいはカスタマイズして適用し、人の言うことに耳を傾ける&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;健全な開発チームは複雑適応系である。一羽一羽の鳥は限られた中の単純なルールに従って振舞っているが、マクロの視点では、群れは秩序と集団の創発的振る舞いを示す&lt;/li&gt;
&lt;li&gt;プロジェクトの要求変更の割合は、中規模で25%、大規模では35%を超える&lt;/li&gt;
&lt;li&gt;スプリントバックロググラフ(タスクの推定残作業時間をグラフに纏めたもの)を用いる&lt;/li&gt;
&lt;li&gt;広域デルファイ法を使った見積りを検討する&lt;/li&gt;
&lt;li&gt;ムーア式ビジョン記述
  &lt;ul&gt;
    &lt;li&gt;(ニーズや機会の記述)であるところの&lt;/li&gt;
    &lt;li&gt;(対象顧客)向けに作られた&lt;/li&gt;
    &lt;li&gt;この(製品/システム名)は(製品/システムカテゴリ)である&lt;/li&gt;
    &lt;li&gt;これによって(主な利点、つまり購入せざるをえない理由の記述)が得られる&lt;/li&gt;
    &lt;li&gt;主な競合製品/システムとは異なり&lt;li&gt;
    &lt;li&gt;この製品/システムは(主な差異の記述)という点で優れている&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281914/rektunpe-22/&quot;&gt;初めてのアジャイル開発　～スクラム、XP、UP、Evoで学ぶ反復型開発の進め方～&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281914/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;日経BP社  2004-09-09&lt;br /&gt;売り上げランキング : 23894&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;はじめて手にしたアジャイル本&lt;br /&gt;アジャイル開発してないの？&lt;br /&gt;本当のソフトウェア開発者に必要なもの&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281914/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-09-28:45</id>
    <published>2009-09-28T18:43:00Z</published>
    <updated>2009-09-28T18:44:02Z</updated>
    <category term="dev"/>
    <category term="continuation"/>
    <category term="wee"/>
    <link href="http://blog.wrap-trap.net/2009/9/28/wee" rel="alternate" type="text/html"/>
    <title>Wee&#12391;&#32153;&#32154;</title>
<content type="html">
            &lt;p&gt;InfoQに、Weeという継続ベースのWebアプリケーションフレームワークが紹介されていたので、試してみました。&lt;/p&gt;
&lt;p&gt;gemでインストール後、インストールディレクトリ下のexamples/demo.rbを実行すると、自動的にWEBrickが起動します。&lt;/p&gt;
&lt;p&gt;Counterというカウントの増減ができるページが表示され、++で1増加、--で1減算となるのですが、途中で戻るボタンを押下し、その後++/--を押下しても戻った地点から計算されます。&lt;/p&gt;

&lt;p&gt;同じことをHTTP Sessionを使ってやると、戻るボタンを押下しても最後にsubmitした値からの加減値となり、挙動が異なります。数値をhiddenに埋め込むとできるので、この例だとメリットを感じづらいところはありますが。&lt;/p&gt;
&lt;p&gt;Weeのアプリケーションではaction実行時にbacktrackというメソッドが呼ばれ、そこでステートを保存することができます。&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;backtrack&lt;/span&gt;(state)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;super&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    state.add_ivar(&lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:@count&lt;/span&gt;, &lt;span class=&quot;iv&quot;&gt;@count&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;それがURLのpage-idと関連付けられることで、戻るボタン押下時にステートが戻るようになっているとのこと。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
The solution to this problem is to take snapshots of the components state after an action is performed and restoring the state before peforming actions. Each action generates a new state, which is indicated by a so-called page-id within the URL. 
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;次にexamples/continuation.rbを動かしてみました。こちらは、callccメソッドにMessageBoxコンポーネントを引数で渡して呼ぶと、htmlが表示されます。表示されたページにはOK/Cancelボタンがあり、どちらかを押下するかによって次の処理が決まる、というものです。&lt;/p&gt;
&lt;p&gt;clickメソッドが1回呼び出されると、その中のcallccメソッドの呼び出し回数分(条件によって2～3回)ページが表示されている、ということになります。&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;gv&quot;&gt;$LOAD_PATH&lt;/span&gt;.unshift &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;../lib&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rubygems&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;wee&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;demo/messagebox&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;MainPage&lt;/span&gt; &amp;lt; &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Component&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;initialize&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;super&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    add_decoration(&lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;PageDecoration&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Test&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;))&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;click&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; callcc &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;MessageBox&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Really quit?&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;      callcc &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;MessageBox&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;You clicked YES&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      callcc &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;MessageBox&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;You clicked Cancel&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;      callcc &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;MessageBox&lt;/span&gt;.new(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;render&lt;/span&gt;(r)&lt;tt&gt;
&lt;/tt&gt;    r.anchor.callback_method(&lt;span class=&quot;sy&quot;&gt;:click&lt;/span&gt;).with(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;.runcc(&lt;span class=&quot;co&quot;&gt;MainPage&lt;/span&gt;)&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;あまり継続の良さを理解できていませが、複数のリクエストに跨ってステートフルなコンポーネントを簡単に扱うことができるのがWeeの特徴の1つなのだと思います。&lt;/p&gt;
&lt;p&gt;上記ソースのcallccはWeeのメソッドで、Kernel.callccとは異なりますが、その実装は以下のようにKernel.callccを呼び出していました。&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;    &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;# Similar to method #call, but using continuations.&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;callcc&lt;/span&gt;(component)&lt;tt&gt;
&lt;/tt&gt;      delegate = &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Delegate&lt;/span&gt;.new(component)&lt;tt&gt;
&lt;/tt&gt;      answer = &lt;span class=&quot;co&quot;&gt;Wee&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;AnswerDecoration&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      add_decoration(delegate)&lt;tt&gt;
&lt;/tt&gt;      component.add_decoration(answer)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      answ = &lt;span class=&quot;co&quot;&gt;Kernel&lt;/span&gt;.callcc {|cc|&lt;tt&gt;
&lt;/tt&gt;        answer.answer_callback = cc&lt;tt&gt;
&lt;/tt&gt;        session.send_response(&lt;span class=&quot;pc&quot;&gt;nil&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;      remove_decoration(delegate)&lt;tt&gt;
&lt;/tt&gt;      component.remove_decoration(answer)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt; *answ.args&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-09-20:44</id>
    <published>2009-09-20T14:33:00Z</published>
    <updated>2009-10-17T19:12:41Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/9/20/productive_programer" rel="alternate" type="text/html"/>
    <title>&#12503;&#12525;&#12480;&#12463;&#12486;&#12451;&#12502;&#12539;&#12503;&#12525;&#12464;&#12521;&#12510;</title>
<content type="html">
            &lt;p&gt;SIの仕事をしていく中で、歳を重ねる毎に様々なことを経験していきます。反面、プログラムをジックリ書くというのが年々難しくなってきていると感じてます(プログラマとしては、もう定年を過ぎているので:-))。だからこそ生産性には拘らなければなりません。&lt;/p&gt;
&lt;p&gt;個人的にはどちらかというとツールに拘らないスタンスを取ってきました。あまりツールと生産性の相関を気にしてきませんでしたし、何より、ツールに拘らないで仕事をしている人達の仕事に憧れた、というのが単純な理由でした。&lt;/p&gt;
&lt;p&gt;ただ、『&lt;a href=&quot;http://www.amazon.co.jp/gp/product/4894714418?ie=UTF8&amp;amp;tag=rektunpe-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=1211&amp;amp;creativeASIN=4894714418&quot;&gt;ソフトウェア職人気質&lt;/a&gt;』にて「欠けているのは、既存のツールを使う為のスキルと能力」といった趣旨の記述があり、何となく気に留めていました。&lt;/p&gt;
&lt;p&gt;そんな中で本書が紹介されているサイトを見て、偏った考え方を直す為にも一回は読んでみようと思い、購入しました。(ペンホルダーのついでですが)&lt;/p&gt;
&lt;p&gt;結果として、本書内で紹介されているツールを導入したり、または別のツールを使って実現したりすることで、色々と整理することができました。特にデスクトップが。それだけでも読んだ甲斐がありました。&lt;/p&gt;
&lt;p&gt;前半はツールの話が中心で、後半はコードデザインやコーディングについて記載されていますが、これはこれで別の書籍として纏められている方が良いと思いました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;気をちらす要因を排除する&lt;/li&gt;
&lt;li&gt;「沈黙の時間」を作る&lt;/li&gt;
&lt;li&gt;ナビゲーションより検索&lt;/li&gt;
&lt;li&gt;ルートビューを使う&lt;/li&gt;
&lt;li&gt;仮想デスクトップを使って、作業毎にデスクトップを切り替える&lt;/li&gt;
&lt;li&gt;自動化する為にスクリプトを書く
  &lt;ul&gt;
    &lt;li&gt;Excelで複数のワークシートを開く&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Webアプリケーションの操作記録にSeleniumを利用する&lt;/li&gt;
&lt;li&gt;バッチファイルではなくWindows PowerShellを使う&lt;/li&gt;
&lt;li&gt;コードを基に図を生成する&lt;/li&gt;
&lt;li&gt;コード解析を使う
  &lt;ul&gt;
    &lt;li&gt;PMD&lt;/li&gt;
    &lt;li&gt;Panopticode&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Calendarの代わりにJodaライブラリを使う&lt;/li&gt;
&lt;li&gt;DSLを導入する(Neptune)&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4873114020/rektunpe-22/&quot;&gt;プロダクティブ・プログラマ -プログラマのための生産性向上術&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4873114020/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;島田 浩二 (監訳) &lt;br /&gt;&lt;br /&gt;オライリージャパン  2009-04-27&lt;br /&gt;売り上げランキング : 34387&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;Javaに偏っているのが -1&lt;br /&gt;気軽に読めて役に立つ、中級？ソフトウェア開発者向けの良書&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4873114020/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-09-12:43</id>
    <published>2009-09-12T18:20:00Z</published>
    <updated>2009-09-12T18:26:20Z</updated>
    <category term="dev"/>
    <category term="jquery"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/9/12/jgrowl" rel="alternate" type="text/html"/>
    <title>jGrowl</title>
<content type="html">
            &lt;p&gt;&lt;a href=&quot;http://stanlemon.net/projects/jgrowl.html#samples&quot;&gt;jGrowl&lt;/a&gt;は、Mac &lt;span class=&quot;caps&quot;&gt;OS X&lt;/span&gt;のGrowlをモチーフとしたメッセージを表示してくれるjQueryのプラグインです。
jQuery自体のバージョンは、1.3以上が推奨されてます。&lt;/p&gt;


	&lt;p&gt;今回はrailsのflash内のメッセージをjGrowlで表示させてみます。&lt;/p&gt;


	&lt;p&gt;1. ファイルを配置します。
  &lt;ul&gt;
  &lt;li&gt;$RAILS_ROOT/public/javascripts/jquery.jgrowl.js&lt;/li&gt;
  &lt;li&gt;$RAILS_ROOT/public/stylesheets/jquery.jgrowl.css&lt;/li&gt;
  &lt;li&gt;$RAILS_ROOT/public/stylesheets/jgrowl_custom.css(サンプルから一部切り出したテーマの設定)&lt;/li&gt;
  &lt;li&gt;$RAILS_ROOT/public/images/iphone.png(サンプルにあったiphoneライクなメッセージボードの画像)&lt;/li&gt;
  &lt;/ul&gt;
&lt;br /&gt;
2. railsのflashの内容が表示されるよう、.html.erb内にJavaScriptを記述します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;script type=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;text/javascript&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;er&quot;&gt;$&lt;/span&gt;.jGrowl.defaults.position = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;% &lt;span class=&quot;kw&quot;&gt;if&lt;/span&gt; flash[:notice] %&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;er&quot;&gt;$&lt;/span&gt;.jGrowl(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;%= flash[:notice] %&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, { header: &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;notification&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, theme: &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;iphone&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, life: &lt;span class=&quot;i&quot;&gt;1000&lt;/span&gt; });&lt;tt&gt;
&lt;/tt&gt;&amp;lt;% end %&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/p&gt;


	&lt;p&gt;&#8216;life&#8217;で表示期間(ミリ秒)を指定します。ユーザが閉じるまで表示させたままにすることも可能です。&lt;/p&gt;


メッセージボードの画像とテーマ(iphone)は、jGrowlに付属しているサンプルをそのままjgrowl_custom.cssとして切り出して使っています。また、メッセージボードの表示位置について、デフォルトだとあまり選択肢がない(top-left, top-right, bottom-left, bottom-right, centerの計5種類)ので、同ファイル内で&#8217;center&#8217;の設定を上書き、表示位置を調整しました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;body &lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; div.jGrowl.center {&lt;tt&gt;
&lt;/tt&gt;        top:                            250px;&lt;tt&gt;
&lt;/tt&gt;        left:                           250px;&lt;tt&gt;
&lt;/tt&gt;        width:                          0%;&lt;tt&gt;
&lt;/tt&gt;}&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;あとはflash[:notice]にメッセージを入れると、以下のように表示されます。&lt;/p&gt;


	&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-09-09:42</id>
    <published>2009-09-09T17:54:00Z</published>
    <updated>2009-10-17T19:14:38Z</updated>
    <category term="life"/>
    <category term="moleskine"/>
    <link href="http://blog.wrap-trap.net/2009/9/9/2-5" rel="alternate" type="text/html"/>
    <title>&#12488;&#12521;&#12505;&#12521;&#12540;&#12474;&#12494;&#12540;&#12488;&#12288;&#12506;&#12531;&#12507;&#12523;&#12480;&#12540;</title>
<content type="html">
            &lt;p&gt;モレスキンを持ち歩くようになって2ヵ月位経ち、大分馴染んできた感があります。ただ、ペンをどう一緒に持ち歩くかだけがシックリこないので、以前&lt;a href=&quot;http://blog.wrap-trap.net/2009/6/23/moleskine&quot;&gt;MOLESKINEのエントリ&lt;/a&gt;のコメントで教えてもらった、ペンホルダーを買いました。&lt;/p&gt;
&lt;p&gt;今回買ったのはトラベラーズノートのペンホルダーで、MOLESKINEにうまく合うのかちょっと心配でしたが、全く問題なく付きました。良かったー。&lt;/p&gt;
&lt;p&gt;ただ、ホルダーを付けても、ペンをどこかに置いてきてしまいそうな気はします。その心配は無くなりませんが・・・。&lt;/p&gt;
&lt;a href=&quot;http://photozou.jp/photo/show/247676/25977196&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://photozou.jp/photo/show/247676/25977196&quot;&gt;ペンホルダ&lt;/a&gt; posted by &lt;a href=&quot;http://photozou.jp/user/top/247676&quot;&gt;(C)masayuki&lt;/a&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001BMT12Y/rektunpe-22/&quot;&gt;トラベラーズノート　ペンホルダーM【黒】 14298&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001BMT12Y/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;ミドリ  &lt;br /&gt;売り上げランキング : 2471&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001BMT12Y/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-30:41</id>
    <published>2009-08-30T17:19:00Z</published>
    <updated>2009-10-17T19:17:14Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/8/30/lean_development" rel="alternate" type="text/html"/>
    <title>&#12522;&#12540;&#12531;&#12477;&#12501;&#12488;&#12454;&#12456;&#12450;&#38283;&#30330;&#65374;&#12450;&#12472;&#12515;&#12452;&#12523;&#38283;&#30330;&#12434;&#23455;&#36341;&#12377;&#12427;22&#12398;&#26041;&#27861;&#65374;</title>
<content type="html">
            &lt;p&gt;近所の図書館にあったので読んでみました。&lt;/p&gt;
&lt;p&gt;アジャイル系の開発プロセスを解説した本よりも一段上から、ソフトウェアの品質やプロセスについて記載されています。トヨタの話も出てきますが、トヨタ式が素晴らしいとかそういう話ではなく、製造と開発の違いも踏まえた上で良い部分をソフトウェア開発に用いようというスタンスで、面白かったです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「原則」が、ある分野についての指針となる考えや洞察であるのに対し、「プラクティス」は、原則を実行するために、何をするか&lt;/li&gt;
&lt;li&gt;ソフトウェア開発の7つの無駄
  &lt;ul&gt;
  &lt;li&gt;未完成の作業のムダ&lt;/li&gt;
  &lt;li&gt;余分なプロセスのムダ&lt;/li&gt;
  &lt;li&gt;余分な機能のムダ&lt;/li&gt;
  &lt;li&gt;タスク切り替えのムダ&lt;/li&gt;
  &lt;li&gt;待ちのムダ&lt;/li&gt;
  &lt;li&gt;移動のムダ&lt;/li&gt;
  &lt;li&gt;欠陥のムダ&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;プロジェクトのトラッキングが複雑なら、おそらくそのシステムには、ほかの種類のムダが大量にある&lt;/li&gt;
&lt;li&gt;開発(レシピを設計する)
  &lt;ul&gt;
  &lt;li&gt;実践利用に適していることが品質の基準&lt;/li&gt;
  &lt;li&gt;バリエーションがある結果は善&lt;/li&gt;
  &lt;li&gt;反復は価値を無味出す&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;高レベルの設計と詳細な解法の間を行き来する&lt;/li&gt;
&lt;li&gt;フィードバックを増やすことが、問題のあるソフトウェアプロジェクトや環境に対処する唯一の効果的な方法
  &lt;ul&gt;
  &lt;li&gt;欠陥をためこまず、コードを書いてすぐにテストすること&lt;/li&gt;
  &lt;li&gt;ドキュメントや詳細な計画を増やすのではなく、コードを書くことによって考えが正しいことを確認する&lt;/li&gt;
  &lt;li&gt;多くの要求をユーザから集めるのではなく、どのようなことができるかをユーザに見せ、ユーザから入力を得ること&lt;/li&gt;
  &lt;li&gt;どのツールを使うかを入念に調べるのではなく、組織内での候補を3つ選び、それらを試してみる&lt;/li&gt;
  &lt;li&gt;システム全体を一度に置き換える方法を見つけようとするのではなく、レガシーシステムにウェブインターフェースをつける、という新しいアイデアを試してみる&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;あきらかに多くのリソースを費やして、多数のコンセプトを検討する。それにより、開発プロセス全般に渡って多数のオプションを選択できる状態に保ち、サブシステムのプロトタイプを多数作り出す&lt;/li&gt;
&lt;li&gt;ウェブサイトの構造について合意できない場合、2,3バージョンを用意し、それぞれ異なる画面遷移やページレイアウトを行うようにして、最終的に最高の機能を寄せ集めることで、優れたユーザビリティの点数が取れる&lt;/li&gt;
&lt;li&gt;深さ優先のシーケンシャル開発と、広さ優先のコンカレント開発がある&lt;/li&gt;
&lt;li&gt;ソフトウェア開発でのコミットメントを遅らせるための戦略
  &lt;ul&gt;
  &lt;li&gt;モジュールを使う&lt;/li&gt;
  &lt;li&gt;インターフェースを使う&lt;/li&gt;
  &lt;li&gt;パラメータ化する&lt;/li&gt;
  &lt;li&gt;抽象化を使う&lt;/li&gt;
  &lt;li&gt;シーケンシャルプログラミングを避ける&lt;/li&gt;
  &lt;li&gt;フレームワークは成功した実装を集めた中から抽出されるべきで、推測で作らない&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ソフトウェア開発の7つのシンプルルール
  &lt;ol&gt;
  &lt;li&gt;ムダをなくす&lt;/li&gt;
  &lt;li&gt;学習効果を高める&lt;/li&gt;
  &lt;li&gt;決定をできるだけ遅らせる&lt;/li&gt;
  &lt;li&gt;できるだけ速く提供する&lt;/li&gt;
  &lt;li&gt;チームに権限を与える&lt;/li&gt;
  &lt;li&gt;統一性を作り込む&lt;/li&gt;
  &lt;li&gt;全体を見る&lt;/li&gt;
  &lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;チームでプロセスをチェックする
  &lt;ol&gt;
  &lt;li&gt;何があなたをスピードダウンささているのか、また、何がいい仕事をするじゃまをしているのか&lt;/li&gt;
  &lt;li&gt;もっと速く、よく、安くするためには、何が役立つか？いいプラクティスと悪いプラクティスを作ること&lt;/li&gt;
  &lt;/ol&gt;
&lt;/li&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281930/rektunpe-22/&quot;&gt;リーンソフトウエア開発～アジャイル開発を実践する22の方法～&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281930/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;平鍋 健児 &lt;br /&gt;&lt;br /&gt;日経BP社  2004-07-23&lt;br /&gt;売り上げランキング : 22163&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;和訳が酷過ぎ&lt;br /&gt;ムダを排除する&lt;br /&gt;自分で考えるための本です&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281930/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-28:40</id>
    <published>2009-08-28T16:46:00Z</published>
    <updated>2009-10-17T19:19:24Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/8/28/software_project_risk_management" rel="alternate" type="text/html"/>
    <title>&#12477;&#12501;&#12488;&#12454;&#12455;&#12450;&#38283;&#30330;&#12503;&#12525;&#12472;&#12455;&#12463;&#12488;&#12398;&#12522;&#12473;&#12463;&#31649;&#29702;</title>
<content type="html">
            &lt;p&gt;『熊とワルツを』が面白かったので、もうちょっと専門的な書籍にチャレンジしてみることに。&lt;/p&gt;
&lt;p&gt;ソフトウェア開発プロジェクトの、ということで踏み込んだ内容を期待したのですが、別の分野でもそのまま当てはまるような一般的な内容でした。&lt;/p&gt;
&lt;p&gt;ただ、リスク特定の手法や分析方法については『熊とワルツを』よりも詳しく紹介されており、その点で実践寄りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロジェクトの主要な原因は、管理的課題65%、技術的課題35%
&lt;li&gt;組織でリスクを管理する仕組みを作る&lt;/li&gt;
&lt;li&gt;リスク軽減シナリオ
  &lt;ul&gt;
  &lt;li&gt;プロジェクトの範囲を定める&lt;/li&gt;
  &lt;li&gt;初期のシナリオを作成する&lt;/li&gt;
  &lt;li&gt;シナリオを分析する&lt;/li&gt;
  &lt;li&gt;問題と課題を位置づける&lt;/li&gt;
  &lt;li&gt;主要リスク領域&lt;/li&gt;
  &lt;li&gt;軽減戦略を作成し、公表する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスクパラダイム
  &lt;ul&gt;
  &lt;li&gt;特定&lt;/li&gt;
  &lt;li&gt;分析&lt;/li&gt;
  &lt;li&gt;計画&lt;/li&gt;
  &lt;li&gt;追跡&lt;/li&gt;
  &lt;li&gt;制御&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;計画を策定する
  &lt;ul&gt;
  &lt;li&gt;リスク発生時の不測事態態対応計画を作成してリスクの影響を軽減する&lt;/li&gt;
  &lt;li&gt;製品の設計あるいは開発プロセスを変更することによりリスクを回避する&lt;/li&gt;
  &lt;li&gt;リスクを受容する。問題が発生した場合は受け入れ、特別な行動をとらない&lt;/li&gt;
  &lt;li&gt;多くの情報を取得し、リスクの特性をさらに研究する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスク特定の手法
  &lt;ul&gt;
  &lt;li&gt;プレーンストーミング&lt;/li&gt;
  &lt;li&gt;SWOT分析&lt;/li&gt;
  &lt;li&gt;マップ&lt;/li&gt;
  &lt;li&gt;チェックリスト&lt;/li&gt;
  &lt;li&gt;ピアインタビュー&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスク対応にかかわる3つの重要な要因
  &lt;ul&gt;
  &lt;li&gt;要員数、期間、費用、影響部門数などのプロジェクト規模&lt;/li&gt;
  &lt;li&gt;技術的熟練レベル、用いられる新技法、設計の技術的困難性や類似プロジェクトの経験等&lt;/li&gt;
  &lt;li&gt;明確な要求、確定的で確定な成果、プロジェクト期間中における仕様変更がないなどのプロジェクト構造&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスクレビューのタイミングは早い方が良いが、リスクについて十分に考察されていない時点で行ってもいけない&lt;/li&gt;
&lt;li&gt;デシジョンツリー分析の6つの基本ステップ
  &lt;ol&gt;
  &lt;li&gt;なされるべき決断とその決断により起こりえ結果を示す&lt;/li&gt;
  &lt;li&gt;各不確定事象に発生確率を指定する&lt;/li&gt;
  &lt;li&gt;起こりえる結果に対して価値を割り振る&lt;/li&gt;
  &lt;li&gt;それぞれの代替案について期待値を計算する&lt;/li&gt;
  &lt;li&gt;なされるべき決断に関連するソフト要因を解く手する&lt;/li&gt;
  &lt;li&gt;最善の代替案を決定する&lt;/li&gt;
  &lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;定量市場調査
  &lt;ul&gt;
  &lt;li&gt;リスクについて、どのようなデータを収集する必要があるか&lt;/li&gt;
  &lt;li&gt;データをどのように取得すべきか&lt;/li&gt;
  &lt;li&gt;どのように実行するか&lt;/li&gt;
  &lt;li&gt;結果をどのように解釈するか&lt;/li&gt;
  &lt;li&gt;結果をどのように利用するか&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4320097475/rektunpe-22/&quot;&gt;ソフトウェア開発プロジェクトのリスク管理&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4320097475/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;富野 壽 &lt;br /&gt;&lt;br /&gt;構造計画研究所  2006-05&lt;br /&gt;売り上げランキング : 389288&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4320097475/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-15:39</id>
    <published>2009-08-15T17:41:00Z</published>
    <updated>2009-10-17T19:21:00Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/8/15/dancing_waltz_with_bear" rel="alternate" type="text/html"/>
    <title>&#29066;&#12392;&#12527;&#12523;&#12484;&#12434;</title>
<content type="html">
            &lt;p&gt;前に読んでいた本の中で『ピープルウェア』について記述があって、確か会社にあったなぁと思って探すものの見つからず、手近にあった本書を読んでみました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;目の前にある証拠をもとに、そのスケジュールが可能だと信じる権利があったのか&lt;/li&gt;
&lt;li&gt;リスクのないプロジェクトには手をつけるな&lt;/li&gt;
&lt;li&gt;リスク管理は、問題が発生する前の、抽象的な概念の段階で対策を考えるプロセス&lt;/li&gt;
&lt;li&gt;リスク管理の反対を「危機管理」といい、問題が発生した後に何をするべきかを考えることを意味する&lt;/li&gt;
&lt;li&gt;リスク管理の各構成要素
  &lt;ul&gt;
  &lt;li&gt;リスク発見: まずリスクに関するブレストを行い、次にリスクを選別する。さらにプロセスを継続する仕組みを導入する&lt;/li&gt;
  &lt;li&gt;エクスポージャー分析: それぞれのリスクが発生する確率と、それによる影響を数量化する&lt;/li&gt;
  &lt;li&gt;危機対応管理: リスクが実現した場合に、何をするべきかを計画する&lt;/li&gt;
  &lt;li&gt;軽減: 計画した危機対応措置が必要な時に実行でき、効力を持つように、移行前にとるべき対策をとる&lt;/li&gt;
  &lt;li&gt;継続的な移行監視: 管理するリストを追跡し、実現しないかどうかを監視する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;不確定性を口に出すことができない企業文化の中では、リスク管理はできない&lt;/li&gt;
&lt;li&gt;リスクについてできること
  &lt;ul&gt;
  &lt;li&gt;避ける&lt;/li&gt;
  &lt;li&gt;抑制する&lt;/li&gt;
  &lt;li&gt;軽減する&lt;/li&gt;
  &lt;li&gt;かわす&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスクを評価するツールを使う(RISKOLOGY)&lt;/li&gt;
&lt;li&gt;ソフトウェア・プロジェクトのコアリスク
  &lt;ul&gt;
  &lt;li&gt;内在的なスケジュールの欠陥&lt;/li&gt;
  &lt;li&gt;要求の増大(変更)&lt;/li&gt;
  &lt;li&gt;人員の離脱&lt;/li&gt;
  &lt;li&gt;仕様の崩壊&lt;/li&gt;
  &lt;li&gt;生産性の低迷&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リスクを特定するためのプロセス
  &lt;ul&gt;
  &lt;li&gt;破滅的結果についてのブレスト&lt;/li&gt;
  &lt;li&gt;シナリオの構築&lt;/li&gt;
  &lt;li&gt;根本原因の分析&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;インクリメンタル開発
  &lt;ul&gt;
  &lt;li&gt;開発計画及び詳細設計と、インプリメンテーションが時間的に重複しないようにする&lt;/li&gt;
  &lt;li&gt;作業分割を最低レベルまで行い、進捗メトリックを計測する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ショーストッパー(権限を越えたリスク)を見極める&lt;/li&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281868/rektunpe-22/&quot;&gt;熊とワルツを - リスクを愉しむプロジェクト管理&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281868/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;日経BP社  2003-12-23&lt;br /&gt;売り上げランキング : 45937&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;リスク管理のコア。スッキリ理解したい方に&lt;br /&gt;リスク管理とは&lt;br /&gt;リスクを理解するなら、これ１冊で十分！&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281868/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-07:38</id>
    <published>2009-08-07T18:14:00Z</published>
    <updated>2009-08-07T18:15:17Z</updated>
    <category term="tips"/>
    <category term="ubuntu"/>
    <link href="http://blog.wrap-trap.net/2009/8/7/adduser" rel="alternate" type="text/html"/>
    <title>adduser</title>
<content type="html">
            &lt;p&gt;adduserで--systemと指定すると、systemユーザを作ることができる。systemユーザっていうスキームがあるんですね。付与されるUIDの範囲以外に何か違うんだろうか。&lt;/p&gt;

&lt;blockquote&gt;
       &lt;p&gt;adduser will choose the first available UID from  the  range  specified
       for  system  users  in  the  configuration  file  (FIRST_SYSTEM_UID and
       LAST_SYSTEM_UID). If you want to have a specific UID, you  can  specify
       it using the --uid option.
&lt;br /&gt;&lt;br /&gt;
       By default, system users are placed in the nogroup group.  To place the
       new system user  in  an  already  existing  group,  use  the  --gid  or
       --ingroup  options.   To  place the new system user in a new group with
       the same ID, use the --group option.
&lt;br /&gt;&lt;br /&gt;
       A home directory is created by the same rules as for normal users.  The
       new  system user will have the shell /bin/false (unless overridden with
       the --shell option), and have logins disabled.  Skeletal  configuration
       files are not copied.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;併せて、--no-create-homeを指定するとhomeディレクトリを作らない。--systemと併せて--groupを指定すると同じ名前でグループを作成してくれるので、バックグラウンドで動かすプロセスの実行ユーザを作成する場合、&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt; adduser --system --group --no-create-home ユーザ名(グループ名)&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;で良いと。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-04:37</id>
    <published>2009-08-04T17:40:00Z</published>
    <updated>2009-10-17T19:22:09Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/8/4/facts-and-fallacies" rel="alternate" type="text/html"/>
    <title>&#12477;&#12501;&#12488;&#12454;&#12456;&#12450;&#38283;&#30330; 55&#12398;&#30495;&#23455;&#12392;10&#12398;&#12454;&#12477;</title>
<content type="html">
            &lt;p&gt;以前&lt;a href=&quot;http://blog.wrap-trap.net/2009/7/8/test&quot;&gt;『ソフトウエア開発プロフェッショナル』&lt;/a&gt;を読んだ際に、amazonでレコメンドされていて、レビューの内容が良かったので読んでみました。&lt;/p&gt;
&lt;p&gt;「55の真実」としつつも、その内容には否定的な表現が多く、改善方法等について明確に記載されているケースがあまり無く、個人的には忙しい時間を使ってまで読むことをお勧めしません。まだ目の前の問題に対する改善方法を考えた方が有意義でしょう。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ソフトウエアの世界は、人的資質の研究が最も重要&lt;/li&gt;
&lt;li&gt;人がじっくり考えた結果の見積りは、かなり精度が高い&lt;/li&gt;
&lt;li&gt;実現できそうもない工程を何とか間に合わせるあまり、プログラムの完全性や品質を犠牲にする&lt;/li&gt;
&lt;li&gt;プログラマを制御することに重点を置くマネジメントでは、最高のプロジェクトになりえないし、生産性も低くなる&lt;/li&gt;
&lt;li&gt;「成功したプロジェクトとは何か」を定義できないならば、整理が必要な大問題が残っていることになる&lt;/li&gt;
&lt;li&gt;大規模な再利用は当分うまくいかない。本来、この問題は、ソフトウエアの多様性に根ざした解決困難な問題なのである&lt;/li&gt;
&lt;li&gt;非常に狭いドメインでは、大規模な再利用が成功する確率は大きくなる。色々なプロジェクトをまたがったり、異なるドメインを横断するような再利用は、失敗する可能性も高い&lt;/li&gt;
&lt;li&gt;対象となる問題の複雑度が25%増加するたび、ソフトウエアによる解法の複雑度は100%上昇する&lt;/li&gt;
&lt;li&gt;インスペクションをしっかり実施すれば、実機でプログラムを走らせる前に、最高90%の不良を摘出できる&lt;/li&gt;
&lt;li&gt;優れたプログラムが備えるべき7つの属性
  &lt;ol&gt;
    &lt;li&gt;移植性&lt;/li&gt;
    &lt;li&gt;信頼性&lt;/li&gt;
    &lt;li&gt;効率&lt;/li&gt;
    &lt;li&gt;人間工学(UI)&lt;/li&gt;
    &lt;li&gt;検証性(プログラムを容易にテストできる特性)&lt;/li&gt;
    &lt;li&gt;理解容易性&lt;/li&gt;
    &lt;li&gt;変更容易性&lt;/li&gt;
  &lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;規模が大きく、基幹ソフトウエアの開発において、プロジェクト内の規則をきちんと定めたケースでは、アジャイル開発よりも効果があるケースもある&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281906/rektunpe-22/&quot;&gt;ソフトウエア開発 55の真実と10のウソ&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281906/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;日経BP出版センター  2004-04-08&lt;br /&gt;売り上げランキング : 44755&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;ソフトウェア開発の暗黙知を明文化&lt;br /&gt;一人の技術者としての魂&lt;br /&gt;ソフトウェア開発に携わる方は必ず読むべき名著&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822281906/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-08-02:36</id>
    <published>2009-08-02T16:33:00Z</published>
    <updated>2009-08-02T16:34:27Z</updated>
    <category term="hikidoc"/>
    <link href="http://blog.wrap-trap.net/2009/8/2/hikidoc-1" rel="alternate" type="text/html"/>
    <title>HikiDoc&#12391;1&#34892;&#12391;&#12418;&#27573;&#33853;&#12392;&#12377;&#12427;</title>
<content type="html">
            HikiDocでは、改行だけの行か、他の要素(ヘッダーやリスト等)が見つかるところまでを段落としています。例えば、&#8221;ふー\nばー\nほげ\n&#8221;だと1段落になります。
今回、これを3段落にしたい、つまり改行があったらそこまでを段落としたい、ということになり、HikiDocのソースを読んでみた結果、以下の変更を加えることでできました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;--- lib/hikidoc.rb     (&lt;span class=&quot;er&quot;&gt;リ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ビ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ジ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ョ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ン&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;82&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;+++ lib/hikidoc.rb     (&lt;span class=&quot;er&quot;&gt;作&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;業&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;コ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ピ&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;ー&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;-352&lt;/span&gt;,&lt;span class=&quot;i&quot;&gt;8&lt;/span&gt; +&lt;span class=&quot;i&quot;&gt;352&lt;/span&gt;,&lt;span class=&quot;i&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                                   &lt;span class=&quot;co&quot;&gt;INDENTED_PRE_RE&lt;/span&gt;, &lt;span class=&quot;co&quot;&gt;BLOCK_PRE_OPEN_RE&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt; &lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;compile_paragraph&lt;/span&gt;(f)&lt;tt&gt;
&lt;/tt&gt;-    lines = f.break(&lt;span class=&quot;co&quot;&gt;PARAGRAPH_END_RE&lt;/span&gt;)\&lt;tt&gt;
&lt;/tt&gt;-        .reject {|line| &lt;span class=&quot;co&quot;&gt;COMMENT_RE&lt;/span&gt; =~ line }&lt;tt&gt;
&lt;/tt&gt;+    &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;iv&quot;&gt;@options&lt;/span&gt;[&lt;span class=&quot;sy&quot;&gt;:one_line_paragraph&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;+      lines = [f.gets]&lt;tt&gt;
&lt;/tt&gt;+    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;+      lines = f.break(&lt;span class=&quot;co&quot;&gt;PARAGRAPH_END_RE&lt;/span&gt;)\&lt;tt&gt;
&lt;/tt&gt;+          .reject {|line| &lt;span class=&quot;co&quot;&gt;COMMENT_RE&lt;/span&gt; =~ line }&lt;tt&gt;
&lt;/tt&gt;+    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;     &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; lines.size == &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\A&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\0&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\d&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;+)&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\0&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt; =~ strip(lines[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;       &lt;span class=&quot;iv&quot;&gt;@output&lt;/span&gt;.block_plugin plugin_block(&lt;span class=&quot;gv&quot;&gt;$1&lt;/span&gt;.to_i)&lt;tt&gt;
&lt;/tt&gt;     &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

オプションに、{:one_line_paragraph =&amp;gt; true}を指定すると、1行を段落としてくれます。

	&lt;p&gt;HikiDocのコードはとても読みやすい。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-26:35</id>
    <published>2009-07-26T17:52:00Z</published>
    <updated>2009-10-17T19:23:49Z</updated>
    <category term="book"/>
    <category term="concurrent"/>
    <link href="http://blog.wrap-trap.net/2009/7/26/java_designpattern_multithread" rel="alternate" type="text/html"/>
    <title>Java&#35328;&#35486;&#12391;&#23398;&#12406;&#12487;&#12470;&#12452;&#12531;&#12497;&#12479;&#12540;&#12531;&#20837;&#38272;&#12304;&#12510;&#12523;&#12481;&#12473;&#12524;&#12483;&#12489;&#32232;&#12305;</title>
<content type="html">
            &lt;p&gt;以前、仕事でマルチスレッドで動くアプリケーションを開発していたのですが、同期化の部分が思っていた以上に難しく、改めて勉強しなおせねば、と思っていました。&lt;/p&gt;
&lt;p&gt;特に困難なのは、どういう構造で同期を取るのが良いかを決めること。同期を取る部分はもちろん言語(Java)にその機構があるので簡単なのですが、全体を考えた上で同期化の構造をスッキリした形で持たせるのはスキルが必要です。&lt;/p&gt;
&lt;p&gt;今回はそのあたりを学習するのに最適な本として、『Java言語で学ぶデザインパターン入門【マルチスレッド編】』を選びました。&lt;/p&gt;
&lt;p&gt;序盤は結構簡単で、今までスレッドプログラミングをしたことがあれば経験的に知っていることがパターンとして記載されています。後半は、概念は知っているけど実装したことはなかったり、概念自体もよく知らなかったり、というものが大半を占めていました。&lt;/p&gt;
&lt;p&gt;他にもJava言語に備わっているスレッドや同期化の詳細な説明や、java.util.concurrentを使った場合の解決方法、Swingのイベントディスパッチまわりの話など、色々と勉強になります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single Threaded Execution
  &lt;ul&gt;
  &lt;li&gt;クリティカルセクションを見極める&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Immutable
  &lt;ul&gt;
  &lt;li&gt;finalを使った宣言&lt;/li&gt;
  &lt;li&gt;インスタンスフィールドがimmutableかどうか&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Guarded Suspension
  &lt;ul&gt;
  &lt;li&gt;Spin Lock&lt;/li&gt;
  &lt;li&gt;ガード条件が満たされていなければスレッドを待たせる&lt;/li&gt;
  &lt;li&gt;ガード条件のテストにwhileを、待たせる為にwaitを使う&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Balking
  &lt;ul&gt;
  &lt;li&gt;ガード条件が満たされていなければ実行を中断&lt;/li&gt;
  &lt;li&gt;ガード条件のテストにifを、balkにはreturnかthrowを使う&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Producer-Consumer
  &lt;ul&gt;
  &lt;li&gt;Channel役を配置する&lt;/li&gt;
  &lt;li&gt;データの安全性をChannelが管理する&lt;/li&gt;
  &lt;li&gt;安全にデータを受け渡しする部分では、Guarded Suspentionを使う&lt;/li&gt;
  &lt;li&gt;executionのキャンセル可能&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Read-Write Lock
  &lt;ul&gt;
  &lt;li&gt;Readのみであれば排他は不要&lt;/li&gt;
  &lt;li&gt;Readしている時はWriteできない&lt;/li&gt;
  &lt;li&gt;Writeしている時はRead/Writeができない&lt;/li&gt;
  &lt;li&gt;Writeしている時はRead/Writeができない&lt;/li&gt;
  &lt;li&gt;Read/Writeを管理するReadWriteLock役を置く&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thread-Per-Message
  &lt;ul&gt;
  &lt;li&gt;処理の順序を気にしないときに使う&lt;/li&gt;
  &lt;li&gt;戻り値が必要な場合はFutureを使う&lt;/li&gt;
  &lt;li&gt;スレッドは要求の度に起動する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Worker Thread
  &lt;ul&gt;
  &lt;li&gt;処理を実行するスレッドを予め起動しておく&lt;/li&gt;
  &lt;li&gt;ワーカスレッドに渡すリクエストは継承を意識する&lt;/li&gt;
  &lt;li&gt;リクエストをワーカスレッドに安全に渡す(Producer-Consumer)&lt;/li&gt;
  &lt;li&gt;invocationとexecutionの分離&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Future
  &lt;ul&gt;
  &lt;li&gt;処理の実行結果を後から取得する&lt;/li&gt;
  &lt;li&gt;処理が非同期(Thread-Per-MessageやWorker Threadの場合に用いる&lt;/li&gt;
  &lt;li&gt;実行結果取得時にはGuarded Suspensionを使用する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Two-Phase Termination
  &lt;ul&gt;
  &lt;li&gt;どこで処理が中断されても安全に終了する&lt;/li&gt;
  &lt;li&gt;Thread#stopを使わない&lt;/li&gt;
  &lt;li&gt;Thread#isInterruptedを使わない&lt;/li&gt;
  &lt;li&gt;終了要求が来たことをラッチを使って判断する&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thread-Specific Storage
  &lt;ul&gt;
  &lt;li&gt;Thread Localの他に、スレッドの属性として保存する方法もある&lt;/li&gt;
  &lt;li&gt;スループットに主眼を置かれているというよりも、
    &lt;ul&gt;
    &lt;li&gt;プログラムの構造を変えずにすむ&lt;/li&gt;
    &lt;li&gt;排他制御が表に出てこないので、誤りをおかす危険がすくない&lt;/li&gt;
    &lt;/ul&gt;という再利用性に主眼を置いている
  &lt;/li&gt;
  &lt;li&gt;コンテキストは処理に本当に使われている情報が何かが曖昧になる危険性がある&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Active Object
  &lt;ul&gt;
  &lt;li&gt;自分固有のスレッドを持つ&lt;/li&gt;
  &lt;li&gt;非同期メッセージの実現&lt;/li&gt;
  &lt;li&gt;Scheduler役を置く&lt;/li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4797331623/rektunpe-22/&quot;&gt;増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4797331623/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;ソフトバンククリエイティブ  2006-03-21&lt;br /&gt;売り上げランキング : 29630&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;デザインパターンとは型紙（かたがみ）のことです。&lt;br /&gt;分かりやすさがいい&lt;br /&gt;マルチスレッドを利用するなら事前に読んでおくべき本&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4797331623/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-25:34</id>
    <published>2009-07-25T14:59:00Z</published>
    <updated>2009-07-25T15:06:23Z</updated>
    <category term="dev"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/25/plugin-init-rb" rel="alternate" type="text/html"/>
    <title>plugin&#12398;init.rb&#12391;&#12513;&#12477;&#12483;&#12489;&#12434;&#20877;&#23450;&#32681;&#12391;&#12365;&#12394;&#12356;&#29702;&#30001;</title>
<content type="html">
            &lt;p&gt;「&lt;a href=&quot;http://blog.wrap-trap.net/2009/7/19/2-2&quot;&gt;日付コントロールを変える&lt;/a&gt;」の最後で、プラグインの読み込みをconfig/environment.rbに記述しました。&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;yads&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;その後調べてみたら、vendor/plugin/(プラグイン名)/init.rbで上記コードを記述すれば良いことが分かりました。各プラグインのinit.rbはrailsの初期化プロセスから自動的に呼び出される為、script/plugin install ～ でインストールすれば、フレームワークのメソッド(前回の場合はActionView::Helper::DateHelper)を再定義することができます。
&lt;/p&gt;

&lt;p&gt;でもinit.rbが自動的に呼び出されるのであれば、最初からinit.rbでメソッドの再定義を行えば良いはず。&lt;/p&gt;

&lt;p&gt;ということで、vendor/plugin/yads/lib/yads.rbの中身をvendor/plugin/yads/init.rbに移動して実行したところ、メソッドが再定義されておらず、元々のドロップダウンリストを使った日付コントロールが表示されていました。コードは以下のとおりです。&lt;/p&gt;

[vendor/plugins/yads/init.rb]
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Include hook code here                 &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;ActionView&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Helpers&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;DateHelper&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;date_select&lt;/span&gt;(object_name, method, options = {}, html_options = { })&lt;tt&gt;
&lt;/tt&gt;        options[&lt;span class=&quot;sy&quot;&gt;:size&lt;/span&gt;] ||= &lt;span class=&quot;i&quot;&gt;12&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        html = &lt;span class=&quot;co&quot;&gt;InstanceTag&lt;/span&gt;.new(object_name, method, &lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;, options.delete(&lt;span class=&quot;sy&quot;&gt;:object&lt;/span&gt;)).to_input_field_tag(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, options)&lt;tt&gt;
&lt;/tt&gt;        js = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;lt;&amp;lt;EOS&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;script&amp;gt; &lt;tt&gt;
&lt;/tt&gt;$('#&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;object_name&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;method&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;').datepicker({  dateFormat: 'yy-mm-dd'});&lt;tt&gt;
&lt;/tt&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;EOS&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        html.concat(js)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;init.rbの中でrequireして再定義するのと、init.rbの中で直接再定義することの違いが分からず、webで調べてみたところ、以下のようなページがありました。&lt;/p&gt;

&lt;a href=&quot;http://daddy.platte.name/2007/05/rails-plugins-keep-initrb-thin.html&quot;&gt;Platte daddy: Rails plugins: keep init.rb thin&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;Rails plugins' initializer script, init.rb, is currently invoked via eval, not require—so it inherits whatever module-space Rails calls it from. If you reopen any classes in init.rb itself (like the will_paginate guys quite reasonably attempted to define Hash#slice), your changes will be made—but to the wrong module.

So, to avoid strange gotchas, consider init.rb just a generic hook point to kick things off, and always require in any code that's to do actual work at plugin load time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;「If you reopen any classes in init.rb itself, your changes will be made—but to the wrong module.」と記述されているので、init.rbで再定義してもダメなのはどうも正しいようですが、その理由がわからない…。そもそもプラグインの初期化時にはフレームワークのメソッドが定義されていないのか、と考えましたが、init.rbでrequireされるファイル内で再定義してもタイミングは同じはずだし…。&lt;/p&gt;

&lt;p&gt;requireに何か特殊な仕掛け(たとえば遅延評価とか)があるのかと思い、Rubyのrequireメソッドを再定義しているActiveSupport::Dependenciesのログを出力させてみたりしたものの、プラグインの初期化時にはログが出力されていないことから、あまり関係あるようにも思えない、という結論に至り。&lt;/p&gt;

&lt;p&gt;プラグインのinit.rbはどのように呼び出されているか調べてみると、以下のようになっていました。&lt;/p&gt;

[rails-2.3.2/lib/rails/plugin.rb]
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;evaluate_init_rb&lt;/span&gt;(initializer)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; has_init_file?&lt;tt&gt;
&lt;/tt&gt;    silence_warnings &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;c&quot;&gt;# Allow plugins to reference the current configuration object&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      config = initializer.configuration&lt;tt&gt;
&lt;/tt&gt;      &lt;tt&gt;
&lt;/tt&gt;      eval(&lt;span class=&quot;co&quot;&gt;IO&lt;/span&gt;.read(init_path), binding, init_path)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;evalでinit.rbを評価しているので、普通に再定義できそう…と暫く気がつかなかったのですが、evalで評価ということは呼び出し側の名前空間(今回の場合はRails::Plugin)を引き継いでしまうので、それを考慮に入れる必要がありました。つまり、init.rbで以下のように記述すると、&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;ActionView&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Helpers&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;DateHelper&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

「Rails::Plugin::ActionView::Helpers::DateHelper」を定義していることになるという…。なので、「::ActionView」と書けば再定義することができます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; ::&lt;span class=&quot;co&quot;&gt;ActionView&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Helpers&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;DateHelper&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;結論としては、プラグインのinit.rbでメソッドの再定義はできるものの、lib下のファイル内で再定義してinit.rbでrequireすべき。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-25:33</id>
    <published>2009-07-25T12:58:00Z</published>
    <updated>2009-07-25T12:59:54Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/25/dependencies-logging-2" rel="alternate" type="text/html"/>
    <title>Dependencies&#12398;&#12525;&#12464;</title>
<content type="html">
            &lt;p&gt;クラスやモジュールが定義されるタイミングを知りたくてコードを追っていたところ、Rails2.3.2のCHANGELOGに以下のような記述があることに気がつきました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;* Add debugging logging to Dependencies. Currently can be enabled with Dependencies.log_activity = true; adding to Initializer and documenting is forthcoming. [Nicholas Seckar]&lt;/p&gt;
&lt;/blockquote&gt;

RAILS_ROOT/config/environment.rbで以下のように設定すると、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;co&quot;&gt;ActiveSupport&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Dependencies&lt;/span&gt;.logger = &lt;span class=&quot;co&quot;&gt;Logger&lt;/span&gt;.new(&lt;span class=&quot;co&quot;&gt;STDOUT&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;ActiveSupport&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Dependencies&lt;/span&gt;.log_activity = &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


以下のように、ロードまわりがロギングされます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;Processing HogesController#index (for ::ffff:192.168.181.1 at 2009-07-25 20:24:45) [GET]&lt;tt&gt;
&lt;/tt&gt;  Hoge Load (1.5ms)   SELECT * FROM &amp;quot;hoges&amp;quot; &lt;tt&gt;
&lt;/tt&gt;Rendering template within layouts/hoges&lt;tt&gt;
&lt;/tt&gt;Rendering hoges/index&lt;tt&gt;
&lt;/tt&gt;Completed in 22ms (View: 11, DB: 2) | 200 OK [http://192.168.181.3/hoges]&lt;tt&gt;
&lt;/tt&gt;Dependencies: called new_constants_in(Object)&lt;tt&gt;
&lt;/tt&gt;Dependencies: New constants: &lt;tt&gt;
&lt;/tt&gt;Dependencies: called new_constants_in(Object)&lt;tt&gt;
&lt;/tt&gt;Dependencies: New constants: &lt;tt&gt;
&lt;/tt&gt;Dependencies: called load_missing_constant(Object, &amp;quot;HogesController&amp;quot;)&lt;tt&gt;
&lt;/tt&gt;Dependencies: called require_or_load(&amp;quot;/home/masayuki/work/rails/generator/test1/app/controllers/hoges_controller.rb&amp;quot;, nil)&lt;tt&gt;
&lt;/tt&gt;...(省略)...&lt;tt&gt;
&lt;/tt&gt;Dependencies: called clear()&lt;tt&gt;
&lt;/tt&gt;Dependencies: removing constant ApplicationHelper&lt;tt&gt;
&lt;/tt&gt;Dependencies: removing constant HogesHelper&lt;tt&gt;
&lt;/tt&gt;Dependencies: removing constant ApplicationController&lt;tt&gt;
&lt;/tt&gt;Dependencies: removing constant HogesController&lt;tt&gt;
&lt;/tt&gt;Dependencies: removing constant Hoge&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Processing HogesController#new (for ::ffff:192.168.181.1 at 2009-07-25 20:24:47) [GET]&lt;tt&gt;
&lt;/tt&gt;Rendering template within layouts/hoges&lt;tt&gt;
&lt;/tt&gt;Rendering hoges/new&lt;tt&gt;
&lt;/tt&gt;Completed in 20ms (View: 8, DB: 0) | 200 OK [http://192.168.181.3/hoges/new]&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-22:31</id>
    <published>2009-07-22T17:24:00Z</published>
    <updated>2009-10-17T19:25:34Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/7/22/peerreview" rel="alternate" type="text/html"/>
    <title>&#12500;&#12450;&#12524;&#12499;&#12517;&#12540;</title>
<content type="html">
            &lt;p&gt;レビューの時間を有効活用したい、という動機から読んでみました。というのも、レビューの時間はなかなか効果的に時間を使えていないと感じるからです。&lt;/p&gt;
&lt;p&gt;正しいレビューの仕方を知ることがその一番の近道だと考えたのですが、読み進めていくうちに、レビューの意義は多様な側面(品質保持の他に、情報伝達、教育、意識統一等)があって、実施意義を品質保持のみをターゲットとした場合のROIという切り口だけでは捉えきれないと考えるようになりました。&lt;/p&gt;
&lt;p&gt;まずはレビューの時間を意識的に捉え、時間当たりの成果をより多く出せるようなプラクティスを身に付けていきたいと思います。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;手戻りは総開発工数の40～60%を占める&lt;/li&gt;
&lt;li&gt;ROIは、データが十分蓄積されて自分自身のROIが示せるようになるまでは、ある程度信じるしかない&lt;/li&gt;
&lt;li&gt;欠陥修正のコストは増幅効果があるため、最大のレバレッジ効果が得られるのは、初期フェーズのプロジェクト成果物のレビュー&lt;/li&gt;
&lt;li&gt;「今、時間が無いと言うなら、いつ再び時間があるのだろうか？」&lt;/li&gt;
&lt;li&gt;レビューをプロジェクトのスケジュールもしくはWBSに組み込むようにする&lt;/li&gt;
&lt;li&gt;成果物全てをインスペクションするのは無理なので、最も効果の出そうなところにインスペクションのリソースを振り分ける&lt;/li&gt;
&lt;li&gt;作業成果物が大きくて全体を調べることができない場合、あるいは時間が限られている場合は「選択的サンプリング」が妥当である&lt;/li&gt;
&lt;li&gt;ミーティング中に欠陥をどうやって修正するかを決めるのに、約1分以上かけてはいけない&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/489100388X/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/489100388X/rektunpe-22/&quot;&gt;ピアレビュー―高品質ソフトウェア開発のために&lt;/a&gt;&lt;br /&gt;Karl E.Wiegers&lt;br /&gt;&lt;br /&gt;日経BPソフトプレス  2004-02&lt;br /&gt;売り上げランキング : 86489&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/489100388X/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-19:30</id>
    <published>2009-07-19T16:27:00Z</published>
    <updated>2009-07-19T16:28:45Z</updated>
    <category term="dev"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/19/2-2" rel="alternate" type="text/html"/>
    <title>&#26085;&#20184;&#12467;&#12531;&#12488;&#12525;&#12540;&#12523;&#12434;&#22793;&#12360;&#12427;</title>
<content type="html">
            &lt;p&gt;前回、「scaffoldした際に、引数で指定される各フィールドの型によって自動的に決まるwebのコントロールを、自分の都合の良いように変えてみたい」と思い、scaffoldのコードを見てみました。&lt;/p&gt;


	&lt;p&gt;その後よく考えてみると、field_typeによってコントロールを表示するメソッドがあるのだから、それ自体を上書きすればよいことに気がつきました。これだとscaffoldするかどうかは関係なく、既存のプロジェクトにも使えます。&lt;/p&gt;


	&lt;p&gt;ということで、今回は日付コントロールをカスタマイズしてみます。&lt;/p&gt;


	&lt;p&gt;scaffoldの引数に「date」というsql_typeを指定すると、new/editでは以下のようなコントロールが表示されます。&lt;/p&gt;


&lt;div&gt;

&lt;/div&gt;

	&lt;p&gt;これを、&lt;a href=&quot;http://marcgrabanski.com/pages/code/jquery-ui-datepicker&quot;&gt;jQuery UI Datepicker&lt;/a&gt;に変えてみます。&lt;/p&gt;


scaffoldによって生成されたnew.html.rbで、このコントロールを表示するためのコードは以下になります。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;&amp;lt;%= f.label :atdate %&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;&amp;lt;%= f.date_select :atdate %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;「f.date_select」を上書きすれば良いことがわかります。上書きする手段はいくつかあると思いますが、今回はそれ用のプラグインを作成しました。(今回はYADS[=Yet Another DateSelect]という名前のプラグインにしています)&lt;/p&gt;


vendor/plugins/yads/lib/yads.rb
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;ActionView&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Helpers&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;DateHelper&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;date_select&lt;/span&gt;(object_name, method, options = {}, html_options = { })&lt;tt&gt;
&lt;/tt&gt;        options[&lt;span class=&quot;sy&quot;&gt;:size&lt;/span&gt;] ||= &lt;span class=&quot;i&quot;&gt;12&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        html = &lt;span class=&quot;co&quot;&gt;InstanceTag&lt;/span&gt;.new(object_name, method, &lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;, options.delete(&lt;span class=&quot;sy&quot;&gt;:object&lt;/span&gt;)).to_input_field_tag(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, options)&lt;tt&gt;
&lt;/tt&gt;        js = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;lt;&amp;lt;EOS&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;                                                                               &lt;tt&gt;
&lt;/tt&gt;&amp;lt;script&amp;gt;                                               &lt;tt&gt;
&lt;/tt&gt; $('#&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;object_name&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;method&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;').datepicker({dateFormat: 'yy-mm-dd'});  &lt;tt&gt;
&lt;/tt&gt;&amp;lt;/script&amp;gt;                                                                      &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;EOS&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        html.concat(js)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

date_selectメソッドではドロップダウンリストが表示されるのですが、それをテキストボックスを表示するように変更しています。datepickerの表示はjavascriptの部分だけです。
javascriptの埋め込みは大分強引ですが、取り合えずということで。

今回はjQueryUIを使う為、datepickerを含むスクリプトを予めダウンロードしておき、スクリプトとスタイルシートを読み込むように設定しておきます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;  &lt;span class=&quot;c&quot;&gt;&amp;lt;%= stylesheet_link_tag 'scaffold', 'jquery/ui-lightness/jquery-ui-1.7.2.custom.css' %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;script&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;text/javascript&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;src&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/javascripts/jquery/jquery-1.3.2.min.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;script&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;text/javascript&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;src&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/javascripts/jquery/jquery-ui-1.7.2.custom.min.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

あとは、config/environment.rbの最後で、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;yads&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

として作ったスクリプトを読むようにし、サーバを起動します。

	&lt;p&gt;&lt;/p&gt;


	&lt;p&gt;日付の入力がドロップダウンリストからテキストボックスへと変わり、テキストボックスをクリックするとdatepickerが表示されます。&lt;/p&gt;


	&lt;p&gt;config/environment.rbでrequireしているのがイマイチなので、時間があれば自動的にロードさせられないか調べてみます。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-14:29</id>
    <published>2009-07-14T17:37:00Z</published>
    <updated>2009-07-14T17:38:03Z</updated>
    <category term="dev"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/14/scaffold-1" rel="alternate" type="text/html"/>
    <title>scaffold&#12398;&#12467;&#12540;&#12489;&#12434;&#35501;&#12416;(&#12381;&#12398;1)</title>
<content type="html">
            &lt;p&gt;scaffoldした際に、引数で指定される各フィールドの型によって自動的に決まるwebのコントロールを、自分の都合の良いように変えてみたいと思います。その為に、scaffoldに関連するコードを読んでみます。&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://blog.wrap-trap.net/2009/7/9/scaffold-view&quot;&gt;前回&lt;/a&gt;railsからコピーしてきたtemplateから、view_edit.html.erbを見てみます。&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;編集 &lt;span class=&quot;c&quot;&gt;&amp;lt;%= singular_name %&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;%% form_for(@&amp;lt;%= singular_name %&amp;gt;&lt;/span&gt;) do |f| %&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;c&quot;&gt;&amp;lt;%%= f.error_messages %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;% for attribute in attributes -%&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;&amp;lt;%%= f.label :&amp;lt;%= attribute.name %&amp;gt;&lt;/span&gt; %&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;br&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;&amp;lt;%%= f.&amp;lt;%= attribute.field_type %&amp;gt;&lt;/span&gt; :&lt;span class=&quot;c&quot;&gt;&amp;lt;%= attribute.name %&amp;gt;&lt;/span&gt; %&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;% end -%&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;c&quot;&gt;&amp;lt;%%= f.submit 'Update' %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;%% end %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;%%= link_to 'Show', @&amp;lt;%= singular_name %&amp;gt;&lt;/span&gt; %&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; |&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;%%= link_to 'Back', &amp;lt;%= plural_name %&amp;gt;&lt;/span&gt;_path %&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;attribute.field_typeによって、コントロールが決まる仕組みになっています。field_typeは以下のようになっていました。&lt;/p&gt;


[rails-2.3.2/lib/rails_generator/generated_attribute.rb] 
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;field_type&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;iv&quot;&gt;@field_type&lt;/span&gt; ||= &lt;span class=&quot;r&quot;&gt;case&lt;/span&gt; type&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:integer&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:float&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:decimal&lt;/span&gt;   &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:text_field&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:datetime&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:timestamp&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:time&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:datetime_select&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:date&lt;/span&gt;                        &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:date_select&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:string&lt;/span&gt;                      &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:text_field&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:text&lt;/span&gt;                        &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:text_area&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:boolean&lt;/span&gt;                     &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:check_box&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;sy&quot;&gt;:text_field&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;      &lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;変数typeは、script/generate scaffoldの引数に指定する「名前:sql_type」のsql_typeになります。&lt;/p&gt;


ちなみに、同ファイルにはdefaultというメソッドが含まれており、以下のようになっています。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;default&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;iv&quot;&gt;@default&lt;/span&gt; ||= &lt;span class=&quot;r&quot;&gt;case&lt;/span&gt; type&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:integer&lt;/span&gt;                     &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:float&lt;/span&gt;                       &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;fl&quot;&gt;1.5&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:decimal&lt;/span&gt;                     &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;9.99&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:datetime&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:timestamp&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:time&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Time&lt;/span&gt;.now.to_s(&lt;span class=&quot;sy&quot;&gt;:db&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:date&lt;/span&gt;                        &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Date&lt;/span&gt;.today.to_s(&lt;span class=&quot;sy&quot;&gt;:db&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:string&lt;/span&gt;                      &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;MyString&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:text&lt;/span&gt;                        &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;MyText&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:boolean&lt;/span&gt;                     &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;pc&quot;&gt;false&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;      &lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;先ほどのfield_typeメソッドの定義から、scaffoldの引数にoneday:dateと指定すると、「f.date_select :oneday」というコードが生成されます。&lt;/p&gt;


	&lt;p&gt;このfという変数は何かと&lt;a href=&quot;http://railsapi.com/doc/v2.3.2/classes/ActionView/Helpers/FormHelper.html#M001308&quot;&gt;form_for&lt;/a&gt;やその先の&lt;a href=&quot;http://railsapi.com/doc/v2.3.2/classes/ActionView/Helpers/FormHelper.html#M001309&quot;&gt;fields_for&lt;/a&gt;を辿っていくと、デフォルトではActionView::Base.default_form_builder(=FormBuilder)のインスタンスになります。&lt;/p&gt;


[actionpack/lib/action_view/helpers/form_helper.rb]
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;fields_for&lt;/span&gt;(record_or_name_or_array, *args, &amp;amp;block)&lt;tt&gt;
&lt;/tt&gt;...&lt;tt&gt;
&lt;/tt&gt;  builder = options[&lt;span class=&quot;sy&quot;&gt;:builder&lt;/span&gt;] || &lt;span class=&quot;co&quot;&gt;ActionView&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Base&lt;/span&gt;.default_form_builder&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;yield&lt;/span&gt; builder.new(object_name, object, &lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;, options, block)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;上記コードより、指定されたsql_typeによって任意のwebのコントロールを配置するには、カスタムFormBuilderを作ってform_forのoptionsに:builderを明示するか、FormBuilderの各メソッドを上書くことにより実現できそうです。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-09:28</id>
    <published>2009-07-09T17:27:00Z</published>
    <updated>2009-07-09T17:29:00Z</updated>
    <category term="dev"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/9/scaffold-view" rel="alternate" type="text/html"/>
    <title>scaffold&#12398;view&#12398;&#12486;&#12531;&#12503;&#12524;&#12540;&#12488;&#12434;&#12459;&#12473;&#12479;&#12510;&#12452;&#12474;&#12377;&#12427;</title>
<content type="html">
            &lt;p&gt;昨日の『ソフトウエア開発プロフェッショナル』を読んだ後、エンジニアリングを軽視してはいけないと思いました。本書中にあった簡単に石を運ぶような仕組みというのは、事前準備の賜物でしょう。ということで、railsのscaffoldをカスタマイズしてみることに。
ActiveScaffoldみたいなものを自前で用意できたら便利かと思い、ちょっとやってみました。バージョンはRails 2.3.2です。まずはviewのテンプレートのカスタマイズから。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;mkdir -p &lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT/lib/generators/my_scaffold/templates (my_scaffoldの部分は任意の名前で良い)&lt;/li&gt;
		&lt;li&gt;cp &lt;span class=&quot;caps&quot;&gt;RUBY&lt;/span&gt;_HOME/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb &lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT/lib/generators/my_scaffold/my_scaffold_generator.rb&lt;/li&gt;
		&lt;li&gt;cp &lt;span class=&quot;caps&quot;&gt;RUBY&lt;/span&gt;_HOME/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/rails_generator/generators/components/scaffold/templates/* &lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT/lib/generators/my_scaffold/templates&lt;/li&gt;
		&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT/lib/generators/my_scaffold/my_scaffold_generator.rbを開き、クラス名をMyScaffoldGeneratorに変更する&lt;/li&gt;
		&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT/lib/generators/my_scaffold/templates下のテンプレートファイルを適当に編集する&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;my_scaffoldを実行します。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;cd &lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ROOT&lt;/li&gt;
		&lt;li&gt;script/generate my_scaffold Hoge name:string another_day:datetime&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;これで編集したテンレプートが適用されていることを確認できます。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-08:27</id>
    <published>2009-07-08T16:45:00Z</published>
    <updated>2009-10-17T19:26:57Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/7/8/software_professional" rel="alternate" type="text/html"/>
    <title>&#12477;&#12501;&#12488;&#12454;&#12456;&#12450;&#38283;&#30330;&#12503;&#12525;&#12501;&#12455;&#12483;&#12471;&#12519;&#12490;&#12523;</title>
<content type="html">
            &lt;p&gt;正直、あまりタイトルには惹かれなかったのですが、思ったよりも面白かったです。&lt;/p&gt;
&lt;p&gt;ソフトウエア開発についての本なのですが、技よりも工程や品質にフォーカスしており、十分な品質を持つソフトウエア開発を行う為のエンジニアリング、さらにプロセスや組織だけでなく資格・免許といった仕組みまで提唱されています。&lt;/p&gt;
&lt;p&gt;記述されていることはソフトウエア開発を行っていれば一度は聞いたことがあるようなことなのですが、日々開発をしているとどうしてもこういった部分に意識が向かなくなってしまうので、こういう本を読み返すのも大事。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「作ってから直す」開発方式は、どんな分野のプログラムでも、ごく小規模のプロジェクトでない限り、効率は上がらない&lt;/li&gt;
&lt;li&gt;プロとしてのソフトウエア開発は「エンジニアリング」であるべき&lt;/li&gt;
&lt;li&gt;ソフトウエア・エンジニアリングを適用すれば、バグを作り込まなくなるし、バグが潜り込んでも、早く、簡単に見つけて修正できる&lt;/li&gt;
&lt;li&gt;エンジニアリグの欠乏こそが、美的可能性を制約する&lt;/li&gt;
&lt;li&gt;ソフトウエアをエンジニアリングの専門分野として扱うことは、ソフトウエア開発を真のプロのレベルに引き上げる、効果的な方法である&lt;/li&gt;
&lt;li&gt;再利用可能なプロジェクトの成果物の一部
  &lt;ul&gt;
    &lt;li&gt;アーキテクチャそのものと、ソフトウエアの開発手順&lt;/li&gt;
    &lt;li&gt;デザイン・パターン&lt;/li&gt;
    &lt;li&gt;要求定義そのものと、そのエンジニアリング手段&lt;/li&gt;
    &lt;li&gt;ユーザ・インターフェース要素と、その設計手段&lt;/li&gt;
    &lt;li&gt;見積もり値そのものと、見積もり手段&lt;/li&gt;
    &lt;li&gt;計画するためのデータ、プロジェクト計画、および設計手順&lt;/li&gt;
    &lt;li&gt;テスト計画、テスト・ケース、テスト・データ、およびテスト手順&lt;/li&gt;
    &lt;li&gt;技術的レビューの手順&lt;/li&gt;
    &lt;li&gt;ソース・コード、システム構築手順、およびシステム統合手順&lt;/li&gt;
    &lt;li&gt;ソフトウエア構成管理手順&lt;/li&gt;
    &lt;li&gt;プロジェクト完了報告、およびプロジェクト・レビュー手順&lt;/li&gt;
    &lt;li&gt;組織の構造、チームの構造、および管理手順&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;プロジェクト成果物の目標
  &lt;ul&gt;
    &lt;li&gt;バグの数を最小にする&lt;/li&gt;
    &lt;li&gt;顧客満足度を最大にする&lt;/li&gt;
    &lt;li&gt;レスポンス・タイムを最小にする&lt;/li&gt;
    &lt;li&gt;プログラムの保守性を上げる&lt;/li&gt;
    &lt;li&gt;プログラムの拡張性を上げる&lt;/li&gt;
    &lt;li&gt;システムの堅牢性を上げる&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;プロジェクトの目標
  &lt;ul&gt;
    &lt;li&gt;工程の短縮&lt;/li&gt;
    &lt;li&gt;出荷日程の予測精度向上&lt;/li&gt;
    &lt;li&gt;低コスト&lt;/li&gt;
    &lt;li&gt;プロジェクト人員数の最小化&lt;/li&gt;
    &lt;li&gt;開発途中での仕様変更に対応できる柔軟性&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822282155/rektunpe-22/&quot;&gt;&lt;/em&gt;.jpg&#8221; border=&#8221;0&#8221; alt=&#8221;ソフトウエア開発プロフェッショナル&#8221; /&amp;gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;スティーブ・マコネル&lt;br /&gt;&lt;br /&gt;日経BP社  2005-01-20&lt;br /&gt;売り上げランキング : 62161&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;アバウトな契約に悩める技術者へ&lt;br /&gt;「トム・デマルコ本が難解に思えるならこちらから読んでみては」&lt;br /&gt;問題の解析に優れている&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4822282155/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-07:26</id>
    <published>2009-07-07T15:28:00Z</published>
    <updated>2009-07-07T15:28:16Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/7/ruby1-8-7-rails2-1-1-ruby1-9-1-rails2-3-2-2" rel="alternate" type="text/html"/>
    <title>Ruby1.8.7+Rails2.1.1&#8594;Ruby1.9.1+Rails2.3.2(&#12381;&#12398;2)</title>
<content type="html">
            &lt;p&gt;昨日の続きを。&lt;/p&gt;


&lt;b&gt;7.  incompatible character encodings: &lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT and &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8&lt;/b&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT外の文字を使っているソースの先頭に「#coding: utf-8」をつけた&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;https://rails.lighthouseapp.com/projects/8994/tickets/1988&quot;&gt;patch&lt;/a&gt;をあててみた&lt;/li&gt;
		&lt;li&gt;&amp;lt;%= collection_select … %&amp;gt;で展開される文字がASCII-8BITの外だと「incompatible character encodings: &lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT and &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8」 ← いまココ
以下のようなエラーがでます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt; Showing app/views/layouts/application.html.erb where line #45 raised:&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;incompatible character encodings: ASCII-8BIT and UTF-8&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Extracted source (around line #45):&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;42: &lt;span class=&quot;ta&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;43: &lt;tt&gt;
&lt;/tt&gt;44: &lt;span class=&quot;ta&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;45:   &lt;span class=&quot;c&quot;&gt;&amp;lt;%= yield %&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;46: &lt;span class=&quot;ta&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;47: &lt;tt&gt;
&lt;/tt&gt;48: &lt;span class=&quot;ta&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

DB(sqlite3)から取ってきた文字列に対してencodingメソッドを呼び出してみると…
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;    &lt;span class=&quot;iv&quot;&gt;@categories&lt;/span&gt;.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |c|&lt;tt&gt;
&lt;/tt&gt;      p c.name.encoding &lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&#8220;ASCII-8BIT&#8221;でした。database.ymlのencodingの指定が適用されないらしい。エンコーディングをforce_encodingで変えてやると、エラーは出なくなりました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;    &lt;span class=&quot;iv&quot;&gt;@categories&lt;/span&gt;.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |c|&lt;tt&gt;
&lt;/tt&gt;      p c.name.encoding&lt;tt&gt;
&lt;/tt&gt;      c.name = c.name.force_encoding(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;utf-8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;sqlite3のアダプタがNGなのかと思い、MySQL + MySQL/Ruby(2.8.1)で試してみましたが、やはり同じエラーになります。2.8.1はRuby1.9.1に対応していると書いてあるのですが、M17Nは未対応なのかな。
&lt;a href=&quot;http://d.hatena.ne.jp/tmtms/20090322/1237719050&quot;&gt;Ruby/MySQL 3.0.0 alpha&lt;/a&gt;の方曰く、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;MySQL/Ruby と比べて遅かったり、非互換があったりしますが、Ruby 1.9 の M17N がちゃんと扱えるのはこれだけなので、Ruby 1.9&lt;tt&gt;
&lt;/tt&gt;な人はこれを使ってみるのもいいと思います。&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

やはり厳しいみたい。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-06:25</id>
    <published>2009-07-06T17:36:00Z</published>
    <updated>2009-07-06T17:37:56Z</updated>
    <category term="dev"/>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/6/ruby1-8-7-rails2-1-1-ruby1-9-1-rails2-3-2-1" rel="alternate" type="text/html"/>
    <title>Ruby1.8.7+Rails2.1.1&#8594;Ruby1.9.1+Rails2.3.2(&#12381;&#12398;1)</title>
<content type="html">
            &lt;p&gt;これまで作ってきたものを、Ruby1.8.7+Rails2.1.1の環境からRuby1.9.1+Rails2.3.2に移行してみたいと思います。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;1.  rake rails:update:configsで失敗&lt;/b&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;masayuki&lt;span class=&quot;iv&quot;&gt;@ubuntu&lt;/span&gt;-vm&lt;span class=&quot;sy&quot;&gt;:~&lt;/span&gt;/work/rails/shrimp&lt;span class=&quot;er&quot;&gt;$&lt;/span&gt; rake rails&lt;span class=&quot;sy&quot;&gt;:update&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:configs&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;(&lt;span class=&quot;r&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mod&quot;&gt;m&lt;/span&gt;&lt;/span&gt;asayuki/work/rails/shrimp)&lt;tt&gt;
&lt;/tt&gt;rake aborted!&lt;tt&gt;
&lt;/tt&gt;undefined method &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;gt;=' for nil:NilClass&lt;tt&gt;
&lt;/tt&gt;/home/masayuki/work/rails/shrimp/Rakefile:4:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;require&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;(See full trace by running task with --trace)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

config/boot.rbで、rubygemsのバージョンの取得がうまくできず、失敗しているようでした。
dummyのプロジェクトを作成し、そこからconfig/boot.rbをコピーしてrake rails:update:configsを実行。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;2. gettextで失敗&lt;/b&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;masayuki&lt;span class=&quot;iv&quot;&gt;@ubuntu&lt;/span&gt;-vm&lt;span class=&quot;sy&quot;&gt;:~&lt;/span&gt;/work/rails/shrimp&lt;span class=&quot;er&quot;&gt;$&lt;/span&gt; rake rails&lt;span class=&quot;sy&quot;&gt;:update&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:configs&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;(&lt;span class=&quot;r&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;home&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mod&quot;&gt;m&lt;/span&gt;&lt;/span&gt;asayuki/work/rails/shrimp)&lt;tt&gt;
&lt;/tt&gt;rake aborted!&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;local/ruby-&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;-p129/lib/ruby/gems/&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;/gems/gettext-&lt;span class=&quot;fl&quot;&gt;1.93&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;/lib/gettext/iconv.rb:&lt;span class=&quot;i&quot;&gt;102&lt;/span&gt;: invalid multibyte char…&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;local/ruby-&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;-p129/lib/ruby/gems/&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;/gems/gettext-&lt;span class=&quot;fl&quot;&gt;1.93&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;/lib/gettext/iconv.rb:&lt;span class=&quot;i&quot;&gt;102&lt;/span&gt;: invalid multibyte char…&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;local/ruby-&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;-p129/lib/ruby/gems/&lt;span class=&quot;fl&quot;&gt;1.9&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;/gems/gettext-&lt;span class=&quot;fl&quot;&gt;1.93&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;/lib/gettext/iconv.rb:&lt;span class=&quot;i&quot;&gt;102&lt;/span&gt;: syntax error, &lt;span class=&quot;er&quot;&gt;…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  puts &lt;span class=&quot;co&quot;&gt;Iconv&lt;/span&gt;.iconv(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;EUC-JP&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;UTF-8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;ほげ&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).join&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

gettextは事情があって&#8212;version &#8216;&amp;lt; 2.0.0&#8217;としてきたのですが、上記のエラーで動かないので、最新バージョン(2.0.4)をインストール。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;3. gettext/rails→&lt;a href=&quot;http://github.com/mutoh/gettext_rails/tree/master&quot;&gt;gettext_rails&lt;/a&gt;&lt;/b&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;gettext_rails provides the localization for Ruby on Rails-2.3 or later using Ruby-GetText-Package. &lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

とのこと。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;4. config.cache_template_extensions&lt;/b&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;undefined method &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;cache_template_extensions=' for ActionView::Base:Class&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

このメソッドはdeprecatedということで、コメントアウト。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;5. app/controllers/application.rb→app/controllers/application_controller.rb&lt;/b&gt;&lt;/p&gt;


	&lt;p&gt;Rails2.3から、application.rbというファイル名が変更になっている為。リリースノートを読むと、rake rails:updateとすれば良かったらしい…。&lt;/p&gt;


	&lt;p&gt;&lt;b&gt;6. jrailsの更新&lt;/b&gt;&lt;/p&gt;


	&lt;p&gt;jrailsは&lt;a href=&quot;http://github.com/cheald/jrails/commit/8cafe41c82617539bc03bf8a4aa1ed31e2bdcaec&quot;&gt;Ruby1.9対応&lt;/a&gt;にする必要があります。&lt;/p&gt;


&lt;b&gt;7.  incompatible character encodings: &lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT and &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8&lt;/b&gt;
	&lt;ul&gt;
	&lt;li&gt;&lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT外の文字を使っているソースの先頭に「#coding: utf-8」をつけた&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;https://rails.lighthouseapp.com/projects/8994/tickets/1988&quot;&gt;patch&lt;/a&gt;をあててみた&lt;/li&gt;
		&lt;li&gt;&amp;lt;%= collection_select … %&amp;gt;で展開される文字がASCII-8BITの外だと「incompatible character encodings: &lt;span class=&quot;caps&quot;&gt;ASCII&lt;/span&gt;-8BIT and &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8」 ← いまココ&lt;/li&gt;
	&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-05:24</id>
    <published>2009-07-05T17:50:00Z</published>
    <updated>2009-07-05T17:51:11Z</updated>
    <category term="dev"/>
    <category term="tips"/>
    <category term="vmware"/>
    <link href="http://blog.wrap-trap.net/2009/7/5/vmware-player-ubuntu-8-04-lts" rel="alternate" type="text/html"/>
    <title>VMware Player&#12392;Ubuntu 8.04 LTS</title>
<content type="html">
            &lt;p&gt;これまでずっとcoLinuxで開発をしてきました。が、ゲストOSとして使用してきたUbuntu7系のサポートが終わり、また容量もかなりギリギリになってきたので、この機会にUbuntu8に乗り換えようとcoLinuxのサイトに行ってみたところ、ダウンロードページが表示できませんでした・・・。&lt;/p&gt;


	&lt;p&gt;ということで、これを機にVMwareに乗り換えようと思い、VMware PlayerとUbuntu 8.04 &lt;span class=&quot;caps&quot;&gt;LTS&lt;/span&gt;をダウンロード。&lt;/p&gt;


	&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;NAT&lt;/span&gt;で外部に接続できるようにする為、ホストOSのネットワーク接続(「ローカルエリア接続)のプロパティ→「共有」タブにて、「VMnet8」(「ローカルエリア接続4」でした…)を選択し、「ネットワークのほかのユーザに、このコンピュータのインターネット接続をとおして接続を許可する」にチェック。この際、VMnet8のIP4のアドレスを書き換えてしまい、ゲストOS側から外に出ることができず大分はまりました。&lt;/p&gt;


	&lt;p&gt;VMware Playerがインストールされているディレクトリに「vmnetcfg.exe」というファイルがあり、これを実行するとNATサービスの設定の一部がわかるのですが、このサービスのアドレスがVMnet8の書き換える前のアドレスになっていた為、NATサービスに接続できなかったようです。&lt;/p&gt;


	&lt;p&gt;結局ホストOSとVMnet8のネットワークアダプタのアドレスを元に戻し、ホストOSから外部に接続できることを確認することができました。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-05:23</id>
    <published>2009-07-05T04:26:00Z</published>
    <updated>2009-07-05T04:27:52Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/5/webrick" rel="alternate" type="text/html"/>
    <title>WEBrick&#12398;&#20572;&#27490;&#12434;&#12501;&#12483;&#12463;&#12377;&#12427;</title>
<content type="html">
            &lt;p&gt;前回プロファイリングの話で、当初はプロファイリングの終了をサーバの停止のタイミングで行いたいと考えていました。(結局その必要は無かったのですが)&lt;/p&gt;


	&lt;p&gt;その際に調べてみると、WEBrickはStopCallbackというコールバックを登録しておくことで、サーバ終了時に任意のコードを実行することができるようになっています。&lt;/p&gt;


ただ、rails-2.1.1のコードを見る限り、rails側からこのStopCallbackを登録する術が無いようで、結局うまい解決方法が見つからず、直接webrickのコードを修正してStopCallbackを登録できるようにしてみました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;iv&quot;&gt;@ubuntu&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;usr/local/ruby-&lt;span class=&quot;fl&quot;&gt;1.8&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;7&lt;/span&gt;-p72/lib/ruby/gems/&lt;span class=&quot;fl&quot;&gt;1.8&lt;/span&gt;/gems/rails-&lt;span class=&quot;fl&quot;&gt;2.1&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;/lib&lt;span class=&quot;c&quot;&gt;# diff -u webrick_server.rb.org webrick_server.rb&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;--- webrick_server.rb.org       &lt;span class=&quot;i&quot;&gt;2008&lt;/span&gt;-&lt;span class=&quot;i&quot;&gt;09&lt;/span&gt;-&lt;span class=&quot;i&quot;&gt;15&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;19&lt;/span&gt;:&lt;span class=&quot;i&quot;&gt;57&lt;/span&gt;:&lt;span class=&quot;fl&quot;&gt;55.000000000&lt;/span&gt; +&lt;span class=&quot;i&quot;&gt;0900&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;+++ webrick_server.rb   &lt;span class=&quot;i&quot;&gt;2009&lt;/span&gt;-&lt;span class=&quot;i&quot;&gt;07&lt;/span&gt;-&lt;span class=&quot;i&quot;&gt;05&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;13&lt;/span&gt;:&lt;span class=&quot;i&quot;&gt;04&lt;/span&gt;:&lt;span class=&quot;fl&quot;&gt;34.000000000&lt;/span&gt; +&lt;span class=&quot;i&quot;&gt;0900&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;-54&lt;/span&gt;,&lt;span class=&quot;i&quot;&gt;6&lt;/span&gt; +&lt;span class=&quot;i&quot;&gt;54&lt;/span&gt;,&lt;span class=&quot;i&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;@&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class=&quot;sy&quot;&gt;:ServerType&lt;/span&gt;  =&amp;gt; options[&lt;span class=&quot;sy&quot;&gt;:server_type&lt;/span&gt;],&lt;tt&gt;
&lt;/tt&gt;                &lt;span class=&quot;sy&quot;&gt;:BindAddress&lt;/span&gt; =&amp;gt; options[&lt;span class=&quot;sy&quot;&gt;:ip&lt;/span&gt;] }&lt;tt&gt;
&lt;/tt&gt;     params[&lt;span class=&quot;sy&quot;&gt;:MimeTypes&lt;/span&gt;] = options[&lt;span class=&quot;sy&quot;&gt;:mime_types&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; options[&lt;span class=&quot;sy&quot;&gt;:mime_types&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;+    params[&lt;span class=&quot;sy&quot;&gt;:StopCallback&lt;/span&gt;] = options[&lt;span class=&quot;sy&quot;&gt;:StopCallback&lt;/span&gt;] &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; options[&lt;span class=&quot;sy&quot;&gt;:StopCallback&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt; &lt;tt&gt;
&lt;/tt&gt;     server = &lt;span class=&quot;co&quot;&gt;WEBrick&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;HTTPServer&lt;/span&gt;.new(params)&lt;tt&gt;
&lt;/tt&gt;     server.mount(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;co&quot;&gt;DispatchServlet&lt;/span&gt;, options)&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

rails側からStopCallbackを指定するには、RAILS_ROOT/config/environment.rbあたりに、以下のようなコードを記述します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;# Bootstrap the Rails environment, frameworks, and default configuration       &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.join(&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.dirname(&lt;span class=&quot;pc&quot;&gt;__FILE__&lt;/span&gt;), &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;boot&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# ここから&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;OPTIONS&lt;/span&gt;[&lt;span class=&quot;sy&quot;&gt;:StopCallback&lt;/span&gt;] = &lt;span class=&quot;co&quot;&gt;Proc&lt;/span&gt;.new &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;called StopCallback&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# ここまで&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

script/serverでWEBrickを起動し、CTRL+cで停止すると、StopCallbackが呼ばれていることが確認できます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;masayuki@ubuntu:~/work/rails/shrimp$ script/server&lt;tt&gt;
&lt;/tt&gt;=&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; Booting WEBrick...&lt;tt&gt;
&lt;/tt&gt;=&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; Rails 2.1.1 application started on http://0.0.0.0:3000&lt;tt&gt;
&lt;/tt&gt;=&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; Ctrl-C to shutdown server; call with --help for options&lt;tt&gt;
&lt;/tt&gt;[2009-07-05 13:23:06] INFO  WEBrick 1.3.1&lt;tt&gt;
&lt;/tt&gt;[2009-07-05 13:23:06] INFO  ruby 1.8.7 (2008-08-11) [i686-linux]&lt;tt&gt;
&lt;/tt&gt;[2009-07-05 13:23:06] INFO  WEBrick::HTTPServer#start: pid=2853 port=3000&lt;tt&gt;
&lt;/tt&gt;[2009-07-05 13:23:08] INFO  going to shutdown ...&lt;tt&gt;
&lt;/tt&gt;called StopCallback&lt;tt&gt;
&lt;/tt&gt;[2009-07-05 13:23:08] INFO  WEBrick::HTTPServer#start done.&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

ただし、プロセスをkillされるとどうにもなりませんが。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-04:22</id>
    <published>2009-07-04T15:31:00Z</published>
    <updated>2009-07-04T15:32:13Z</updated>
    <category term="tips"/>
    <category term="profile"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/4/perftools-rb" rel="alternate" type="text/html"/>
    <title>perftools.rb</title>
<content type="html">
            &lt;p&gt;前回、&lt;a href=&quot;http://blog.wrap-trap.net/2009/6/20/ruby-prof&quot;&gt;ruby-profを使って&lt;/a&gt;みたのですが、今回は&lt;a href=&quot;http://github.com/tmm1/perftools.rb/tree/master&quot;&gt;perftools.rb&lt;/a&gt;というプロファイラを使ってみました。&lt;/p&gt;


もともと、&lt;a href=&quot;http://code.google.com/p/google-perftools/&quot;&gt;google-perftools&lt;/a&gt;というプロファイリングツールがあり、それをRubyで使用できるようにしたのがperftools.rb。現在はCpuProfilerのみですが、TODOにはHeapProfilerと記述されています。
まずはインストール。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;gem install -s http&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/gems.github.com tmm1-perftools.rb&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

サンプルコードで試してみます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rubygems&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;perftools&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;PerfTools&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;CpuProfiler&lt;/span&gt;.start(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/tmp/add_numbers_profile&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;i&quot;&gt;5_000_000&lt;/span&gt;.times{ &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;+&lt;span class=&quot;i&quot;&gt;2&lt;/span&gt;+&lt;span class=&quot;i&quot;&gt;3&lt;/span&gt;+&lt;span class=&quot;i&quot;&gt;4&lt;/span&gt;+&lt;span class=&quot;i&quot;&gt;5&lt;/span&gt; }&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

/tmpの下に、add_numbers_profile、add_numbers_profile.symbolの2ファイルが生成されます。これが結果ファイルになるので、pprof.rbというレポートツールを使用して内容を確認します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;Total: 134 samples&lt;tt&gt;
&lt;/tt&gt;     116  86.6%  86.6%      134 100.0% Integer#times&lt;tt&gt;
&lt;/tt&gt;      18  13.4% 100.0%       18  13.4% Fixnum#+&lt;tt&gt;
&lt;/tt&gt;       0   0.0% 100.0%      134 100.0% PerfTools::CpuProfiler.start&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

これをrailsのアプリケーションに適用してみます。今回は、railsの初期化後からプロファイルを開始してみました。まず、RAILS_ROOT/config/environments/(実行するモード).rbに、以下を追記します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;config.after_initialize &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;perftools&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;PerfTools&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;CpuProfiler&lt;/span&gt;.start(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/tmp/shrimp_profile&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

あとはscript/server -e (実行モード)でサーバを起動し、アプリケーションを適当に操作した後、サーバを停止します。今回試してみた結果、以下のように出力されました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ pprof.rb --text /tmp/shrimp_profile&lt;tt&gt;
&lt;/tt&gt;Total: 73 samples&lt;tt&gt;
&lt;/tt&gt;      22  30.1%  30.1%       26  35.6% Thread.start&lt;tt&gt;
&lt;/tt&gt;      15  20.5%  50.7%       15  20.5% IO.select&lt;tt&gt;
&lt;/tt&gt;       4   5.5%  56.2%        4   5.5% Module#constants&lt;tt&gt;
&lt;/tt&gt;       3   4.1%  60.3%        3   4.1% garbage_collector&lt;tt&gt;
&lt;/tt&gt;       2   2.7%  63.0%        2   2.7% SQLite3::Driver::Native::API.sqlite3_prepare&lt;tt&gt;
&lt;/tt&gt;       2   2.7%  65.8%        2   2.7% SQLite3::Driver::Native::API.sqlite3_step&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  67.1%        1   1.4% String#sub&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  68.5%        1   1.4% WEBrick::Cookie.parse&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  69.9%        2   2.7% Array#map&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  71.2%        1   1.4% ActiveRecord::Associations::AssociationProxy#initialize&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  72.6%        1   1.4% Regexp#===&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  74.0%        1   1.4% Proc.new&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  75.3%        1   1.4% ActionController::Routing::RouteSet::NamedRouteCollection#define_url_helper&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  76.7%        1   1.4% IO#write&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  78.1%        1   1.4% Array#-&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  79.5%        1   1.4% ActiveSupport::Callbacks::CallbackChain#find&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  80.8%        1   1.4% Object#ticket_path&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  82.2%        1   1.4% Object#detect&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  83.6%        1   1.4% Object#options_for_select&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  84.9%        1   1.4% ActiveRecord::Associations::AssociationProxy#load_target&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  86.3%       49  67.1% Kernel#gem_original_require&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  87.7%        1   1.4% Object#instance_variable_set&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  89.0%        1   1.4% Time#initialize&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  90.4%        1   1.4% ActionController::Routing::RouteBuilder#separator_pattern&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  91.8%        1   1.4% Hash#[]&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  93.2%        6   8.2% Module#local_constants&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  94.5%        1   1.4% Hash#key?&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  95.9%        1   1.4% Object#kind_of?&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  97.3%        3   4.1% TicketsController#search_tickets&lt;tt&gt;
&lt;/tt&gt;       1   1.4%  98.6%        1   1.4% ActionController::AbstractRequest#ssl?&lt;tt&gt;
&lt;/tt&gt;       1   1.4% 100.0%        1   1.4% ActiveRecord::Base#column_for_attribute&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

pprof.rbでは、結果からコールグラフをgif画像等で出力されることができます。今回、gif画像を生成するにたりGraphvizが必要ということで、別途インストールしました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;pprof.rb --gif /tmp/shrimp_profile &lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; /tmp/shrimp_profile.gif&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

上記コマンドを実行後、以下のgifが生成されました。

	&lt;p&gt;&lt;a href=&quot;http://wrap-trap.net/assets/shrimp_profile.gif&quot;&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;今回は初期化後から終了までの間をプロファイルしましたが、最初のサンプルコードのようにコードの一部をプロファイリングすることも可能なはずです。これは別の機会に試してみたいと思います。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-07-04:21</id>
    <published>2009-07-04T12:16:00Z</published>
    <updated>2009-07-04T12:19:15Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/7/4/2" rel="alternate" type="text/html"/>
    <title>&#12354;&#12427;&#12514;&#12540;&#12489;&#12391;&#12398;&#12415;&#36969;&#29992;&#12373;&#12428;&#12427;&#12501;&#12451;&#12523;&#12479;&#12434;&#23450;&#32681;&#12377;&#12427;</title>
<content type="html">
            &lt;p&gt;productionモードの時だけ実行されるフィルタが必要になり、いつどこで定義するのが良いか調べてみましました。&lt;/p&gt;


githubを見て回ったところ、RAILS_ROOT/config/environments/production.rbで、config.after_initializeの中で定義すれば良いみたい。下記のコードで確認できました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;config.after_initialize &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;application&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;unless&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Object&lt;/span&gt;.const_defined?(&lt;span class=&quot;sy&quot;&gt;:ApplicationController&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;TicketsController&lt;/span&gt;.class_eval &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    before_filter &lt;span class=&quot;sy&quot;&gt;:start_action&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:only&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:index&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:search&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;    after_filter &lt;span class=&quot;sy&quot;&gt;:end_action&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:only&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;sy&quot;&gt;:index&lt;/span&gt;, &lt;span class=&quot;sy&quot;&gt;:search&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;start_action&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      logger.info &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;action start.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;end_action&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      logger.info &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;action end.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-25:20</id>
    <published>2009-06-25T19:04:00Z</published>
    <updated>2009-06-25T19:05:01Z</updated>
    <category term="tips"/>
    <category term="capistrano"/>
    <category term="passenger"/>
    <link href="http://blog.wrap-trap.net/2009/6/25/cap-deploy-restart-application" rel="alternate" type="text/html"/>
    <title>cap deploy&#12391;restart application</title>
<content type="html">
            capistranoでdeployするところまではできていたものの、アプリケーションの再読み込みについて調べるのが面倒で、ついついapacheをrestartしてました。
mephistoもpassengerで動かしているので、apacheを再起動せずに何とかならないものかと、調べてみました。
passengerのドキュメントを見ると、deploy後のアプリケーションのrestartについて以下のように記述されています。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;Deploying a new version of a Ruby on Rails application is as simple as re-uploading the application files,&lt;tt&gt;
&lt;/tt&gt;and restarting the application.&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;There are two ways to restart the application:&lt;tt&gt;
&lt;/tt&gt; &lt;tt&gt;
&lt;/tt&gt;1.By restarting Apache.&lt;tt&gt;
&lt;/tt&gt;2.By creating or modifying the file tmp/restart.txt in the Rails application’s root folder. Phusion Passenger&lt;tt&gt;
&lt;/tt&gt;will automatically restart the application during the next request.&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

ということで、deploy.rbに以下の記述を追加。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;namespace &lt;span class=&quot;sy&quot;&gt;:shrimp&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  task &lt;span class=&quot;sy&quot;&gt;:restart&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;touch &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;current_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/tmp/restart.txt&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;after &lt;span class=&quot;sy&quot;&gt;:deploy&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;shrimp:restart&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

以降、cap deployすると自動的に更新後のアプリケーションが再読み込みされます。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-23:16</id>
    <published>2009-06-23T18:17:00Z</published>
    <updated>2009-10-17T19:28:07Z</updated>
    <category term="life"/>
    <link href="http://blog.wrap-trap.net/2009/6/23/moleskine" rel="alternate" type="text/html"/>
    <title>MOLESKINE</title>
<content type="html">
            &lt;p&gt;半年程前からメモ帳を持ち歩くようになりました。当初は、ちょっと空いた時間に何か考えたことを書き留める、というつもりでしたが、最近ではすっかり生活の中に溶け込んでます。&lt;/p&gt;
&lt;p&gt;まず、会社に行く前にコーヒーショップに立ち寄り、10分程度、その日の仕事、また1週間先の仕事まで考えて、その日にやるべきことをピックアップして書き込みます。書き込んだ内容は、会社に着いてからタスクとしてスケジューリングしたり、簡単なものはすぐにやってしまいます。1年半前くらいまでは、会社に着くとまずメールを見始めて、RSSリーダをチェックし、その他ニュースサイトを見て回る等してから仕事に入っていたのですが、今のやり方だと会社に着く前からその日やることがほぼ分かっているので、すぐに仕事に取り掛かることができます。その結果、午前中だけでなく終日、ニュースサイト等を見ることが無くなり、非常に集中して仕事ができるようになりました。&lt;/p&gt;
&lt;p&gt;また、メモ帳を持ったことで、これまでよりも紙を使って考える習慣ができました。昨年はロジカルシンキング等の書籍を読み、考え方から結論に至るまでのプロセスを多少なりとも学習してきたので、それを実践する為の媒体としてメモ帳を有効活用しています。&lt;/p&gt;
&lt;p&gt;さらに、メモ帳を持つことでスキマ時間に考えることができるので、例え移動に時間がかかったり待ち時間が長くても、その時の課題について考えて何かしらのアウトプットを出すことで、消費される時間に対するストレスが減りました。&lt;/p&gt;
&lt;p&gt;今使用中のメモ帳も残すところあと数枚となったので、今日モレスキンのプレーンノートを購入しました。半年前の時点でモレスキンも考えたのですが、その時には恐らくすぐに飽きるだろうと考え、￥200のメモ帳に新書のブックカバーをつけて使ってました。値段だけなら約9倍…。でも馴染めなかったらまた安いメモ帳にブックカバーをつけて持ち歩きたいと思います。&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001ANHZPO/rektunpe-22/&quot;&gt;Moleskin/モレスキン クラシック プレーンノートブック(無地) QP012JP&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001ANHZPO/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;Moleskin/モレスキン  &lt;br /&gt;売り上げランキング : 4367&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/B001ANHZPO/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-20:15</id>
    <published>2009-06-20T17:52:00Z</published>
    <updated>2009-06-20T17:53:02Z</updated>
    <category term="tips"/>
    <category term="profile"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/6/20/ruby-prof" rel="alternate" type="text/html"/>
    <title>ruby-prof</title>
<content type="html">
            &lt;p&gt;railsアプリのレスポンスがたまに物凄く悪くなることがあり、ruby-profを試してみました。
ruby-profのバージョンは現在0.7.3なのですが、railsアプリをプロファイルする際に、従来のproductionモードで実行した結果をログに出すアプローチから、&lt;a href=&quot;http://cfis.savagexi.com/2008/11/13/profiling-your-rails-application-take-two&quot;&gt;プロファイリングしたい部分をtestで実行するアプローチに変わっている&lt;/a&gt;ようです。今回はログに実行結果を出力する0.6.0を使うことにしました。&lt;/p&gt;


ruby-profをインストールします。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ sudo gem install ruby-prof --version=0.6.0&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

インストールされたgemにrails-pluginというフォルダがあるので、それをプロファイリングしたいrailsアプリのvendor/pluginsの下に置きます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ cd /opt/shrimp/current/vendor/plugins/&lt;tt&gt;
&lt;/tt&gt;$ cp -ipr /usr/local/lib/ruby/gems/1.8/gems/ruby-prof-0.6.0/rails_plugin/ruby-prof .&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

アプリケーションをproductionモードで再起動後、リクエスト毎にlog/production.logに計測結果が出力されます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;co&quot;&gt;Processing&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;TicketsController&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#index (for 59.156.119.10 at 2009-06-21 02:05:52) [GET]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;Session&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;ID&lt;/span&gt;: &lt;span class=&quot;co&quot;&gt;BAh7CDoLZmlsdGVybzoQUXVlcnlGaWx0ZXIJOgxAZXJyb3JzbzoZQWN0aXZl&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;UmVjb3JkOjpFcnJvcnMHOwd7ADoKQGJhc2VABjoWQGF0dHJpYnV0ZXNfY2Fj&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;aGV7ADoYQGNoYW5nZWRfYXR0cmlidXRlc3sAOhBAYXR0cmlidXRlc3sOIg9j&lt;tt&gt;
&lt;/tt&gt;cmVhdGVkX2F0IhgyMDA4LTA5LTI4IDIzOjI0OjUzIhBwcmlvcml0eV9pZCIG&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;MyIPdXBkYXRlZF9hdEl1OglUaW1lDZFWG4D3ZcgWBjofQG1hcnNoYWxfd2l0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;aF91dGNfY29lcmNpb25GIgl3b3JkIgAiDW93bmVyX2lkIgYxIgdpZCIGMSIQ&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Y2F0ZWdvcnlfaWRpBiIMdXNlcl9pZCIGMSIOc3RhdHVzX2lkIgctMzoJdXNl&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;cmkGIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hI&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;YXNoewAGOgpAdXNlZHsA&lt;/span&gt;--ec1abaf426ea3d2f998bd9de5c10852c8499891a&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;co&quot;&gt;Parameters&lt;/span&gt;: {&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;=&amp;gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;=&amp;gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;tickets&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Rendering&lt;/span&gt; template within layouts/application&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Rendering&lt;/span&gt; tickets/index&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Completed&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;fl&quot;&gt;0.36246&lt;/span&gt; (&lt;span class=&quot;i&quot;&gt;2&lt;/span&gt; reqs/sec) | &lt;span class=&quot;co&quot;&gt;Rendering&lt;/span&gt;: &lt;span class=&quot;fl&quot;&gt;0.05925&lt;/span&gt; (&lt;span class=&quot;i&quot;&gt;16&lt;/span&gt;%) | &lt;span class=&quot;co&quot;&gt;DB&lt;/span&gt;: &lt;span class=&quot;fl&quot;&gt;0.03879&lt;/span&gt; (&lt;span class=&quot;i&quot;&gt;10&lt;/span&gt;%) |&lt;tt&gt;
&lt;/tt&gt; &lt;span class=&quot;i&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;OK&lt;/span&gt; [http&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/xxxxx.wrap-trap.net/tickets]&lt;tt&gt;
&lt;/tt&gt; [http&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/xxxxx.wrap-trap.net/tickets]&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Thread&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;ID&lt;/span&gt;: &lt;span class=&quot;i&quot;&gt;3084116400&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Total&lt;/span&gt;: &lt;span class=&quot;fl&quot;&gt;0.140000&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt; %&lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;     total     &lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;     wait    child    calls  name&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.05&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.04&lt;/span&gt;       &lt;span class=&quot;i&quot;&gt;26&lt;/span&gt;  &amp;lt;&lt;span class=&quot;co&quot;&gt;Class&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Base&lt;/span&gt;&amp;gt;&lt;span class=&quot;c&quot;&gt;#find_every&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;        &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Transactions&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;ClassMethods&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;140&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Associations&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;AssociationProxy&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.03&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.02&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;251&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Hash&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#each&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;140&lt;/span&gt;  Ticket(id: integer, name: string, owner_id: integer,&lt;span class=&quot;er&quot;&gt;…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;793&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;SQLite3&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Driver&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Native&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Driver&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#column_type&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;212&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;ActionController&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;AbstractRequest&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#relative_url_root&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;       &lt;span class=&quot;i&quot;&gt;47&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#to_param&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;       &lt;span class=&quot;i&quot;&gt;83&lt;/span&gt;  &amp;lt;&lt;span class=&quot;co&quot;&gt;Module&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;SQLite3&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Driver&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Native&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;API&lt;/span&gt;&amp;gt;&lt;span class=&quot;c&quot;&gt;#sqlite3…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;i&quot;&gt;2094&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Kernel&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#is_a?&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;164&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Symbol&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#to_sym&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;       &lt;span class=&quot;i&quot;&gt;28&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;ActiveSupport&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;CoreExtensions&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Array&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Extract…&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.03&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.02&lt;/span&gt;       &lt;span class=&quot;i&quot;&gt;80&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#times&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;fl&quot;&gt;7.14&lt;/span&gt;      &lt;span class=&quot;fl&quot;&gt;0.09&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.01&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.00&lt;/span&gt;     &lt;span class=&quot;fl&quot;&gt;0.08&lt;/span&gt;      &lt;span class=&quot;i&quot;&gt;681&lt;/span&gt;  &lt;span class=&quot;co&quot;&gt;Kernel&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#send-2&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

なかなか便利なので、暫く仕込んだままにしておこうかと。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-18:14</id>
    <published>2009-06-18T19:26:00Z</published>
    <updated>2009-06-18T19:27:04Z</updated>
    <category term="dev"/>
    <link href="http://blog.wrap-trap.net/2009/6/18/heroku-com" rel="alternate" type="text/html"/>
    <title>heroku.com</title>
<content type="html">
            &lt;p&gt;herokuというrailsアプリケーションのホスティングサービスを使ってみました。以前はブラウザでrailsアプリが開発できる、ということでしたが、今はheroku gardenという名前になっています。ブラウザを使った開発も面白そうですが、まずはheroku.comを使ってみます。
heroku.comを使用する場合は、自分の環境でrailsアプリを作成したものをgit pushすると、herokuにdeployされます。料金はストレージと通信料、そして各種オプションで決まるようです。ストレージ5Mで通信がほとんど無ければfreeなので、その範囲内で試してみます。&lt;/p&gt;


まずはherokuをインストール。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ gem install heroku&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


gitのremoteリポジトリを使用する為に、公開鍵をアップします。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ heroku keys:add&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


railsアプリを作成し、git commitまでします。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ rails foobar&lt;tt&gt;
&lt;/tt&gt;$ cd foobar&lt;tt&gt;
&lt;/tt&gt;$ git init &amp;amp;&amp;amp; git add . &amp;amp;&amp;amp; git commit -m &amp;quot;first commit&amp;quot;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


heroku側にアプリケーションのdeploy先を作成します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ heroku create&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


createの後にアプリケーション名を入れないと、変な名前(今回はhollow-ice-37でした)を付けられてしまいます。ちょっと嫌なのでやり直し。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ heroku destroy hollow-ice-37&lt;tt&gt;
&lt;/tt&gt;$ heroku create foobar(実際はアプリの名前)&lt;tt&gt;
&lt;/tt&gt;$ git push heroku master&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


git pushすると、自動的にdeployされます。deployされたアプリケーションをブラウザで確認したところ、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;Missing the Rails 2.1.1 gem. Please `gem install -v=2.1.1 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

と。config/environment.rbの「RAILS_GEM_VERSION」をコメントアウトし、再度git pushしたところ、railsのデフォルトの画面が表示されました。
これだけだとよく分からないので、ローカルでscaffoldして、herokuにアップしてみます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ script/generate scaffold task name:string start:datetime end:datetime owner:integer&lt;tt&gt;
&lt;/tt&gt;$ rake db:migrate&lt;tt&gt;
&lt;/tt&gt;$ script/server&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


普通に動くことを確認し、git push。ただ、これだけだとdeploy先でdb:migrateが実行されないらしく、ブラウザで確認するとエラーが出てました。
deployされたアプリケーションのログを見る為には、heroku logsを実行します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;er&quot;&gt;$&lt;/span&gt; heroku logs&lt;tt&gt;
&lt;/tt&gt;==&amp;gt; log/production.log &amp;lt;==&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;c&quot;&gt;# Logfile created on Thu Jun 18 11:14:08 -0700 2009&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;Processing&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;TasksController&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#index (for 59.156.119.10 at 2009-06-18 11:14:17) [GET]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;StatementInvalid&lt;/span&gt; (&lt;span class=&quot;co&quot;&gt;PGError&lt;/span&gt;: &lt;span class=&quot;co&quot;&gt;ERROR&lt;/span&gt;:  relation &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;tasks&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; does &lt;span class=&quot;r&quot;&gt;not&lt;/span&gt; exist&lt;tt&gt;
&lt;/tt&gt;: &lt;span class=&quot;co&quot;&gt;SELECT&lt;/span&gt; * &lt;span class=&quot;co&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;tasks&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; ):&lt;tt&gt;
&lt;/tt&gt;  app/controllers/tasks_controller.rb:&lt;span class=&quot;i&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;index'&lt;tt&gt;
&lt;/tt&gt;  /home/heroku_rack/lib/static_assets.rb:9:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;call&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  /home/heroku_rack/lib/last_access.rb:15:in `call&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (&lt;span class=&quot;fl&quot;&gt;1.0&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;) lib/thin/connection.rb:&lt;span class=&quot;i&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;pre_process'&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/connection.rb:78:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;catch&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/connection.rb:78:in `pre_process&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (&lt;span class=&quot;fl&quot;&gt;1.0&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;) lib/thin/connection.rb:&lt;span class=&quot;i&quot;&gt;57&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;process'&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/connection.rb:42:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;receive_data&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  eventmachine (0.12.6) lib/eventmachine.rb:240:in `run_machine&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  eventmachine (&lt;span class=&quot;fl&quot;&gt;0.12&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;6&lt;/span&gt;) lib/eventmachine.rb:&lt;span class=&quot;i&quot;&gt;240&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;run'&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/backends/base.rb:57:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;start&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/server.rb:150:in `start&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (&lt;span class=&quot;fl&quot;&gt;1.0&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;) lib/thin/controllers/controller.rb:&lt;span class=&quot;i&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;start'&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/runner.rb:173:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;send&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) lib/thin/runner.rb:173:in `run_command&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  thin (&lt;span class=&quot;fl&quot;&gt;1.0&lt;/span&gt;.&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;) lib/thin/runner.rb:&lt;span class=&quot;i&quot;&gt;139&lt;/span&gt;&lt;span class=&quot;sy&quot;&gt;:in&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;run!'&lt;tt&gt;
&lt;/tt&gt;  thin (1.0.1) bin/thin:6&lt;tt&gt;
&lt;/tt&gt;  /usr/local/bin/thin:19:in &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;`&lt;/span&gt;&lt;/span&gt;load&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  /usr/local/bin/thin:19&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


PGError…。どうやらPostgreSQLを使っているようです。
deploy先でrakeを実行したい場合はheroku rakeコマンドを使います。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ heroku rake db:migrate&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

これでscaffoldした内容を確認できました。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-15:13</id>
    <published>2009-06-15T16:51:00Z</published>
    <updated>2009-06-15T16:56:13Z</updated>
    <category term="dev"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/6/15/rolerequirement" rel="alternate" type="text/html"/>
    <title>rolerequirement&#12503;&#12521;&#12464;&#12452;&#12531;</title>
<content type="html">
            &lt;p&gt;roleを取り入れたいと思い、プラグインを探してみたところ、&lt;a href=&quot;http://code.google.com/p/rolerequirement/&quot;&gt;rolerequirement&lt;/a&gt;というプラグインが見つかったので、早速試してみました。&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;script/plugin install git&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/github.com/timcharper/role_requirement.git&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;インストール後、roleを表すRoleクラスを作成します。すでにrestful_authenticationを使用していた為、userというモデルができており、下記を実行後に「rake 
db:migrate」を行うことにより、roles、roles_usersという2つのテーブルが生成されます。&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;script/generate roles &lt;span class=&quot;co&quot;&gt;Role&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;User&lt;/span&gt; &lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;mysql&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; desc roles;&lt;tt&gt;
&lt;/tt&gt;+-------+--------------+------+-----+---------+----------------+&lt;tt&gt;
&lt;/tt&gt;| Field | Type         | Null | Key | Default | Extra          |&lt;tt&gt;
&lt;/tt&gt;+-------+--------------+------+-----+---------+----------------+&lt;tt&gt;
&lt;/tt&gt;| id    | int(11)      | NO   | PRI | NULL    | auto_increment | &lt;tt&gt;
&lt;/tt&gt;| name  | varchar(255) | YES  |     | NULL    |                | &lt;tt&gt;
&lt;/tt&gt;+-------+--------------+------+-----+---------+----------------+&lt;tt&gt;
&lt;/tt&gt;2 rows in set (0.00 sec)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;mysql&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; desc roles_users;&lt;tt&gt;
&lt;/tt&gt;+---------+---------+------+-----+---------+-------+&lt;tt&gt;
&lt;/tt&gt;| Field   | Type    | Null | Key | Default | Extra |&lt;tt&gt;
&lt;/tt&gt;+---------+---------+------+-----+---------+-------+&lt;tt&gt;
&lt;/tt&gt;| role_id | int(11) | YES  | MUL | NULL    |       | &lt;tt&gt;
&lt;/tt&gt;| user_id | int(11) | YES  | MUL | NULL    |       | &lt;tt&gt;
&lt;/tt&gt;+---------+---------+------+-----+---------+-------+&lt;tt&gt;
&lt;/tt&gt;2 rows in set (0.00 sec)&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;あとはroleをuserに割り当てます。今回はroles、role_usersに対してSQLで直接レコードをinsertしました。
次に、各コントローラに対して必要なroleを設定していきます。&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;RolesController&lt;/span&gt; &amp;lt; &lt;span class=&quot;co&quot;&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  layout &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;master&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  before_filter &lt;span class=&quot;sy&quot;&gt;:login_required&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  require_role &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;admin&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

あとは、roleが付与されたユーザ、付与されていないユーザを使用してテストを行います。権限がない場合は「You don&#8217;t have access here.」と表示されます。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-08:12</id>
    <published>2009-06-08T15:18:00Z</published>
    <updated>2009-06-08T15:19:27Z</updated>
    <category term="tips"/>
    <category term="rails"/>
    <link href="http://blog.wrap-trap.net/2009/6/8/nomethoderror-undefined-method-responds_to_parent" rel="alternate" type="text/html"/>
    <title>NoMethodError (undefined method `responds_to_parent'</title>
<content type="html">
            &lt;p&gt;何かファイルのアップロードがおかしいな、とログを見てみたら、responds_to_parentメソッドが見つからない、というエラーが出てました。&lt;/p&gt;


vendor/plugins/responds_to_parent/rails/init.rbを確認したところ、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;co&quot;&gt;ActionController&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;Base&lt;/span&gt;.send &lt;span class=&quot;sy&quot;&gt;:include&lt;/span&gt;, &lt;span class=&quot;co&quot;&gt;RespondsToParent&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;parent_selector_assertion&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

となっており、問題無さそう…と思ったものの、ローカルの開発環境を見てみたらinit.rb→rails/init.rbへのシンボリックリンクが貼られていました。覚えにないなぁ…。

	&lt;p&gt;rails/init.rbは自動的に読みこまれないんでしたっけ？取り合えず気をつけておきます。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-06:11</id>
    <published>2009-06-06T19:34:00Z</published>
    <updated>2009-10-17T19:30:58Z</updated>
    <category term="book"/>
    <category term="cloud"/>
    <category term="haas"/>
    <category term="paas"/>
    <category term="saas"/>
    <link href="http://blog.wrap-trap.net/2009/6/6/3books_about_cloud" rel="alternate" type="text/html"/>
    <title>&#12463;&#12521;&#12454;&#12489;&#12395;&#38306;&#12377;&#12427;&#26412;3&#20874;</title>
<content type="html">
            &lt;p&gt;先週から今週にかけて、クラウドに関する書籍を3冊読みました。&lt;/p&gt;
&lt;p&gt;このところ社内外でクラウドに関する話をよく聞くようになり、実際にどういったことができるのか、どういうメリットがあるのかを、SIerのエンジニアである自分の立場から他のエンジニアや顧客に対して話ができる必要があると考えています。&lt;/p&gt;
&lt;p&gt;クラウドという言葉は抽象的ですが、この3冊を読んだ後に感じたのは、クラウドをHaaS、SaaS、PaaSの3つの軸で考え、それらをどのようにソリューションの中で活用していくか掘り下げていくことが、これからのSIerのエンジニアにとって必要であると考えました。&lt;/p&gt;
&lt;p&gt;1つは、インフラコストをサービスの規模や品質により見極める力を持つこと。Amazon EC2のようなHaaSを利用した方がコスト面、リソース面で有効なケースは出てくると思います。&lt;/p&gt;
&lt;p&gt;1つのサービスに必要なシステムを全部作成するのではなく、SaaSを活用することにより作るモノ/作らないモノを分け、作るモノについて注力する、という姿勢も重要になってくると思います。その為には、ソフトウェア開発という括りではなく、自分達にとって何が得意なのかを提示できなければなりません。&lt;/p&gt;
&lt;p&gt;PaaSは正直まだ分かりませんが、今回読んだ本の中ではGoogle App EngineとSalesforceのForce.comがよく出てきました。これらのプラットフォーム上でアプリケーションを構築することがユーザ企業によって価値を生むようになってきていると思います。まずは何ができるのかを知る為に手を出していこうと思います。&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4798116211/rektunpe-22/&quot;&gt;クラウド化する世界&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4798116211/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;村上 彩 &lt;br /&gt;&lt;br /&gt;翔泳社  2008-10-10&lt;br /&gt;売り上げランキング : 3591&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;この世界観が参考となった。&lt;br /&gt;時代の流れを感じることのできる一冊&lt;br /&gt;類書の中ではダントツにいい&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4798116211/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4844326783/rektunpe-22/&quot;&gt;クラウド グーグルの次世代戦略で読み解く2015年のIT産業地図&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4844326783/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;石田 晴久 國領 二郎 &lt;br /&gt;&lt;br /&gt;インプレスR&amp;D  2009-02-26&lt;br /&gt;売り上げランキング : 2464&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;クラウドの全貌というよりかはクラウド時代までのいきさつになっている&lt;br /&gt;ICT業界のマーケター向きかなと思います。&lt;br /&gt;良い本だと思います。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4844326783/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4492580824/rektunpe-22/&quot;&gt;クラウドの衝撃――IT史上最大の創造的破壊が始まった&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4492580824/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;野村総合研究所 城田 真琴&lt;br /&gt;&lt;br /&gt;東洋経済新報社  2009-02-06&lt;br /&gt;売り上げランキング : 570&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;デファクトスタンダードになるのかも&lt;br /&gt;■最新の業界動向に短時間でキャッチアップできます！&lt;br /&gt;世の中が変わるかもしれませんね&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4492580824/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-05:10</id>
    <published>2009-06-05T15:31:00Z</published>
    <updated>2009-06-05T15:31:57Z</updated>
    <category term="tips"/>
    <category term="sqlite"/>
    <link href="http://blog.wrap-trap.net/2009/6/5/sqlite3-unable-to-open-database" rel="alternate" type="text/html"/>
    <title>sqlite3: unable to open database</title>
<content type="html">
            &lt;p&gt;capstranoを使用してapacheを再起動し、アプリケーションにアクセスしてみると…&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;co&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;StatementInvalid&lt;/span&gt; (&lt;span class=&quot;co&quot;&gt;SQLite3&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;SQLException&lt;/span&gt;: unable to open database file: &lt;span class=&quot;co&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;filters&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;co&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;updated_at&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;2009-06-05 01:47:06&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; = &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;):&lt;tt&gt;
&lt;/tt&gt;...&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;というエラーが発生しました。database.ymlに記載されているsqlite3のファイルパスは問題がないので困りましたが、調べていくにつれて、ジャーナルファイルの作成に失敗しているようでした。
ジャーナルファイルはsqlite3のデータベースファイルと同じ階層に作成されるのですが、railsのプロセスの所有者がそのディレクトリに対して書き込み権限を保持していませんでした。
これまでジャーナルファイルを意識してきませんでしたが、update文等を発行すると確かに生成されていました。&lt;/p&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;sqlite&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; begin transaction;&lt;tt&gt;
&lt;/tt&gt;sqlite&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; update users set login='hoge' where id=1;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ ls -la shrimp*&lt;tt&gt;
&lt;/tt&gt;-rw-r--r-- 1 masayuki dev 112640 2009-05-20 10:50 shrimp_production.sqlite3&lt;tt&gt;
&lt;/tt&gt;-rw-r--r-- 1 masayuki dev   2056 2009-06-06 00:20 shrimp_production.sqlite3-journal&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.sqlite.org/lockingv3.html#rollback&quot;&gt;http://www.sqlite.org/lockingv3.html#rollback&lt;/a&gt;&lt;/p&gt;


&lt;blockquote&gt;
Any time a process wants to make a changes to a database file, it first records enough information in the rollback journal to restore the database file back to its initial condition. Thus, before altering any page of the database, the original contents of that page must be written into the journal. The journal also records the initial size of the database so that if the database file grows it can be truncated back to its original size on a rollback.

The rollback journal is a ordinary disk file that has the same name as the database file with the suffix &#8220;-journal&#8221; added.
&lt;/blockquote&gt;

	&lt;p&gt;Oracleでいうところのロールバックセグメントのようなものなのでしょう。ディレクトリに対して書き込み権限を付与したところ、前述のエラーはでなくなりました。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-04:9</id>
    <published>2009-06-04T17:26:00Z</published>
    <updated>2009-06-04T17:27:11Z</updated>
    <category term="dev"/>
    <category term="tips"/>
    <category term="capistrano"/>
    <link href="http://blog.wrap-trap.net/2009/6/4/capistrano-deploy" rel="alternate" type="text/html"/>
    <title>&#31227;&#34892;&#20808;&#12395;capistrano&#12391;deploy</title>
<content type="html">
            &lt;p&gt;さくらで動かしていたアプリケーションを移行しているのですが、capifyされたrailsのアプリケーションについては、capistoranoで移行してみました。&lt;/p&gt;


まずは、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ apt-get install subversion&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

でsvnを使用できるようにします。

次に、deploy.rbを移行先の環境に合わせて書き換えました。その後、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ cap deploy:cold&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

としたところ、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;..&lt;tt&gt;
&lt;/tt&gt; ** [wrap-trap.net :: out] svn: Can't make directory '/opt/shrimp/releases/20090604151717': Permission denied&lt;tt&gt;
&lt;/tt&gt;..&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

と怒られてしまいました。
ディレクトリの作成で失敗しているようなので調査してみると、確かに権限の問題はあるようですが、そもそも/opt/shrimpというディレクトリ自体も無い…。もうちょっと調べてみると、いきなりdeploy:coldが間違っていたようです。最初はdeploy:setupを行う必要がありました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ cap deploy:setup&lt;tt&gt;
&lt;/tt&gt;  * executing `deploy:setup'&lt;tt&gt;
&lt;/tt&gt;  * executing &amp;quot;sudo -p 'sudo password: ' mkdir -p /opt/shrimp /opt/shrimp/releases /opt/shrimp/shared&lt;tt&gt;
&lt;/tt&gt; /opt/shrimp/shared/system /opt/shrimp/shared/log /opt/shrimp/shared/pids &lt;span class=&quot;er&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;er&quot;&gt;&amp;amp;&lt;/span&gt; sudo -p 'sudo password: '&lt;tt&gt;
&lt;/tt&gt; chmod g+w /opt/shrimp /opt/shrimp/releases /opt/shrimp/shared /opt/shrimp/shared/system /opt/shrimp/&lt;tt&gt;
&lt;/tt&gt;shared/log /opt/shrimp/shared/pids&amp;quot;&lt;tt&gt;
&lt;/tt&gt;    servers: [&amp;quot;wrap-trap.net&amp;quot;]&lt;tt&gt;
&lt;/tt&gt;    [wrap-trap.net] executing command&lt;tt&gt;
&lt;/tt&gt; ** [out :: wrap-trap.net] &lt;tt&gt;
&lt;/tt&gt;    command finished&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

その後、再度deploy:coldを実行したものの、やはりmkdirでPermission deniedは変わらず。権限がないということで色々と調べてみたところ、deploy:setup後にchownを実行してディレクトリの所有者を変更すれば良いことがわかりました。deploy.rbに以下を追加して再実行し、ディレクトリの所有者を変更します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;set &lt;span class=&quot;sy&quot;&gt;:runner&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;masayuki&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;set &lt;span class=&quot;sy&quot;&gt;:group&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;users&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;set &lt;span class=&quot;sy&quot;&gt;:use_sudo&lt;/span&gt;, &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;...&lt;tt&gt;
&lt;/tt&gt;after &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;deploy:setup&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  try_sudo &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;chown -Rf &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;runner&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;group&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;deploy_to&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

「try_sudo」というコマンドは知らなかった。というかcapistranoのコマンドにどんなものがあるか知らない。そういったドキュメントを見たことがないのですが、rdoc見るしかないのかな。

	&lt;p&gt;&lt;a href=&quot;http://lee.hambley.name/capistrano-2.5.0/rdoc/&quot;&gt;http://lee.hambley.name/capistrano-2.5.0/rdoc/&lt;/a&gt;&lt;/p&gt;


ちなみに、deploy先の環境に合わせて、after_symlinkでファイルを上書いています。これが普通のやり方なのかわかりませんが。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;task &lt;span class=&quot;sy&quot;&gt;:after_symlink&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%w{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;database.yml envrinment.rb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |f|&lt;tt&gt;
&lt;/tt&gt;    run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;cp -f &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/files/&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;f&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;current_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;f&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%w{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;production.rb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |f|&lt;tt&gt;
&lt;/tt&gt;    run &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;cp -f &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;shared_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/files/&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;f&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;current_path&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/config/environments/&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;f&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

passengerとの連携はまだできてないので、後日試してみたいと思います。
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-06-01:8</id>
    <published>2009-06-01T18:02:00Z</published>
    <updated>2009-10-17T19:34:21Z</updated>
    <category term="book"/>
    <link href="http://blog.wrap-trap.net/2009/6/1/method_of_intelligent_production" rel="alternate" type="text/html"/>
    <title>&#21644;&#30000;&#31168;&#27193;&#12398;&#8220;&#26368;&#32066;&#26368;&#24375;&#8221;&#30693;&#30340;&#29983;&#29987;&#34899;</title>
<content type="html">
            &lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4620318922/rektunpe-22/&quot;&gt;和田秀樹の“最終最強”知的生産術 (Mainichi Business Books)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4620318922/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;和田 秀樹&lt;br /&gt;&lt;br /&gt;毎日新聞社  2008-06-28&lt;br /&gt;売り上げランキング : 289498&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;相変わらずの「単一的」価値観は健在の様子です&lt;br /&gt;今までのまとめ&lt;br /&gt;満足な1冊&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4620318922/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;最近はビジネス書よりも技術に関する書籍(特にタイトルに「クラウド」とついているもの)を優先的に読んでいます。&lt;/p&gt;
&lt;p&gt;そんな中で、たまたま目に留まったのがこれ。ということで、気になったところを。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;頭がいい&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;問題解決能力が高いかどうかで決まる。より幅広いシチュエーションの問題に対して、より妥当な答えが出せる人こそ頭がよい。&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;記憶のプロセス&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;第一段階 - 理解と注意&lt;/li&gt;
&lt;li&gt;次の段階 - 貯蔵(保持)&lt;/li&gt;
&lt;li&gt;次の段階 - 出力(想起)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;推論の幅を広げる&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;他人の立場に立ってものを考えてみる&lt;/li&gt;
&lt;li&gt;今の考えと逆を考えてみる&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;メタ認知&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;メタ認知的知識 - 自分の知識状態(得意・不得意)を知る&lt;/li&gt;
&lt;li&gt;メタ認知的活動 - 自分の認知パターンをモニターし、自分の思考や知識状態を修正する&lt;/li&gt;
&lt;li&gt;メタ認知力をつけるには、習慣や態度がもっとも大切&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;理系発想&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
実験や統計的な裏づけのほうが大切だという考え方をすること。試しにやってみてうまくいけば、それを全店でやってみる。駄目ならすぐにやめて別の仮設を試してみる
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;傾向と真の命題を区別する&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;100%そうなのか(真の命題)、単なる傾向や確率の高さを示すものなのかを区別する&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;知的体力の三要素&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;仮説や提案をいくつも思いつける知性&lt;/li&gt;
&lt;li&gt;実際にあれこれと試してみる体力&lt;/li&gt;
&lt;li&gt;うまくいかない際に、それでも続けられる精神力&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;不安&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;振り回されるのではなく、それとつきあっていればいいのだという逆転の発想があれば、そう怖いものではない&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;感情のコントロール術&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;食事において、より多くの品目を取る&lt;/li&gt;
&lt;li&gt;肉を取らなさ過ぎると、セロトニン不足になりやすい&lt;/li&gt;
&lt;li&gt;うまくいかない際に、それでも続けられる精神力&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;自分なりに知識を加工して得られた新たな知識は、自分のオリジナルの引き出しとなる&lt;/li&gt;
&lt;li&gt;スキマ時間にやれる仕事を持つ&lt;/li&gt;
&lt;li&gt;時間あたりの効率性を意識する&lt;/li&gt;
&lt;li&gt;外面を変える、行動を変えることは予想以上に人間を変える&lt;/li&gt;
&lt;li&gt;一冊の本を速読するのではなく、一部を熟読する&lt;/li&gt;
&lt;li&gt;出力できる知識を増やす方法としては、それを実際に出力してみることである&lt;/li&gt;
&lt;li&gt;自分の長所を前面に出せば、できるように見せるのはそう難しくない&lt;/li&gt;
&lt;li&gt;負けから学ぶ&lt;/li&gt;
&lt;li&gt;相手の自己愛を傷つけない、相手の顔に泥を塗らない&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-30:7</id>
    <published>2009-05-30T10:13:00Z</published>
    <updated>2009-05-30T10:13:45Z</updated>
    <category term="tips"/>
    <category term="git"/>
    <category term="github"/>
    <link href="http://blog.wrap-trap.net/2009/5/30/pull-request" rel="alternate" type="text/html"/>
    <title>&#21021;&#12417;&#12390;pull request&#12434;&#21463;&#12369;&#21462;&#12387;&#12383;</title>
<content type="html">
            &lt;p&gt;久々にgithubを見たら、pull requestが来ていました。userstampのfork元が修正され、それに伴ってfork先にpull requestが発行されたようです。メール見てませんでした。&lt;/p&gt;


	&lt;p&gt;他の人の変更を取り込んだことが無かったので、&lt;a href=&quot;http://github.com/guides/pull-requests&quot;&gt;Guides: Pull Requests&lt;/a&gt;を見ながら差分をmergeしてみます。&lt;/p&gt;


まず、今回の変更が行われたリモートリポジトリを登録しようとしたところ、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git remote add -f korobkov git://github.com/korobkov/userstamp.git&lt;tt&gt;
&lt;/tt&gt;fatal: Not a git repository&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

と怒られてしまいました。以前作業したgitフォルダとは別のフォルダで作業しようとした為、.gitフォルダが無くてNGのようです。git initしないといけないらしい。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git init&lt;tt&gt;
&lt;/tt&gt;Initialized empty Git repository in /home/masayuki/work/rails/tmp/test/.git/&lt;tt&gt;
&lt;/tt&gt;$ ls -la&lt;tt&gt;
&lt;/tt&gt;合計 12&lt;tt&gt;
&lt;/tt&gt;drwxr-xr-x 3 masayuki dev 4096 2009-05-30 16:55 .&lt;tt&gt;
&lt;/tt&gt;drwxr-xr-x 4 masayuki dev 4096 2009-05-30 16:55 ..&lt;tt&gt;
&lt;/tt&gt;drwxr-xr-x 7 masayuki dev 4096 2009-05-30 16:55 .git&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

.gitフォルダができました。remote addはうまくいったので、ファイルを取り込む為のbranchを作成します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git checkout -b korobkov/master&lt;tt&gt;
&lt;/tt&gt;fatal: ou are on a branch yet to be born&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

また怒られてしまいました。READMEというファイルを作成しcommitした後、再度試してみると、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git checkout -b korobkov/master&lt;tt&gt;
&lt;/tt&gt;Switched to a new branch &amp;quot;korobkov/master&amp;quot;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

うまくいきました。次に、先ほどのbranchにファイルを取り込もうとしたところ、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;git pull korobkov master&lt;tt&gt;
&lt;/tt&gt;fatal: empty ident  not allowed&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

またまた怒られてしまいました。configに、user.nameの指定が無かった(user.namaになっていた)為でした。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git config --global user.name &amp;quot;masayuki038&amp;quot;&lt;tt&gt;
&lt;/tt&gt;$ git pull korobkov master&lt;tt&gt;
&lt;/tt&gt;Automatic merge failed; fix conflicts and then commit the result.&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

取り込めたものの、READMEファイルがconflictしました。修正して、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git commit -a -m&amp;quot;update merge&amp;quot;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

でコミット。

次に、以前forkして変更を加えたremoteリポジトリを登録します。この際、remoteリポジトリの場所にPublic Clone Urlを指定してしまうと、pushする際に、
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git push origin master&lt;tt&gt;
&lt;/tt&gt;You can't push to git://github.com/user/repo.git&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

とエラーがでます。その為、remote addにはYour Clone Urlを指定します。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git remote add origin git@github.com:masayuki038/userstamp.git&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

branchをmasterに切り替えます。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git branch&lt;tt&gt;
&lt;/tt&gt;* korobkov/master&lt;tt&gt;
&lt;/tt&gt;  master&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;$git checkout master&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

あとはmasterにpullし、branchにpullしたファイルをmergeします。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git pull origin master&lt;tt&gt;
&lt;/tt&gt;$ git merge korobkov/master&lt;tt&gt;
&lt;/tt&gt;warning: refname 'korobkov/master' is ambiguous.&lt;tt&gt;
&lt;/tt&gt;warning: refname 'korobkov/master' is ambiguous.&lt;tt&gt;
&lt;/tt&gt;Auto-merged README&lt;tt&gt;
&lt;/tt&gt;Merge made by recursive.&lt;tt&gt;
&lt;/tt&gt; README                                 |    8 ++--&lt;tt&gt;
&lt;/tt&gt; lib/stampable.rb                       |   54 ++++++++++++++++--------------&lt;tt&gt;
&lt;/tt&gt; test/compatibility_stamping_test.rb    |    2 +-&lt;tt&gt;
&lt;/tt&gt; test/helpers/functional_test_helper.rb |   10 +++--&lt;tt&gt;
&lt;/tt&gt; test/helpers/unit_test_helper.rb       |   58 ++++++++++++++++---------------&lt;tt&gt;
&lt;/tt&gt; test/stamping_test.rb                  |    2 +-&lt;tt&gt;
&lt;/tt&gt; test/userstamp_controller_test.rb      |   24 +++++++------&lt;tt&gt;
&lt;/tt&gt; 7 files changed, 84 insertions(+), 74 deletions(-)&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

自動的にcommitされるらしく、リモートリポジトリにpushして完了です。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;$ git push origin master&lt;tt&gt;
&lt;/tt&gt;Counting objects: 50, done.&lt;tt&gt;
&lt;/tt&gt;Compressing objects: 100% (22/22), done.&lt;tt&gt;
&lt;/tt&gt;Writing objects: 100% (38/38), 7.78 KiB, done.&lt;tt&gt;
&lt;/tt&gt;Total 38 (delta 21), reused 25 (delta 14)&lt;tt&gt;
&lt;/tt&gt;To git@github.com:masayuki038/userstamp.git&lt;tt&gt;
&lt;/tt&gt;   af36e03..7df7841  master -&lt;span class=&quot;er&quot;&gt;&amp;gt;&lt;/span&gt; master&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-30:6</id>
    <published>2009-05-30T07:22:00Z</published>
    <updated>2009-05-30T07:22:50Z</updated>
    <link href="http://blog.wrap-trap.net/2009/5/30/phusion-passenger-2" rel="alternate" type="text/html"/>
    <title>Phusion Passenger&#12398;&#12522;&#12477;&#12540;&#12473;&#28040;&#36027; &#12381;&#12398;2</title>
<content type="html">
            &lt;p&gt;数日様子を見てみたのですが、間隔を空けてアクセスすると非常に長い時間待たされるので、
PassengerPooledTimeを0にすることでapplication instanceを落とさないようにしてみました。&lt;/p&gt;


/etc/apache2.conf
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;PassengerMaxPoolSize 1&lt;tt&gt;
&lt;/tt&gt;PassengerPoolIdleTime 0&lt;tt&gt;
&lt;/tt&gt;PassengerStatThrottleRate 3600&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;メモリリーク等の要因でジリジリとメモリの使用率が上がっていく懸念はあるので、その場合はPassengerMaxRequestsを指定するつもりです。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-25:5</id>
    <published>2009-05-25T14:43:00Z</published>
    <updated>2009-05-25T16:00:58Z</updated>
    <category term="tips"/>
    <link href="http://blog.wrap-trap.net/2009/5/25/phusion-passenger" rel="alternate" type="text/html"/>
    <title>Phusion Passenger&#12398;&#12522;&#12477;&#12540;&#12473;&#28040;&#36027;</title>
<content type="html">
            &lt;p&gt;Phusion Passengerを使うようにしたのですが、リソースの消費量は気になるところ。チューニングの方法については、以下のページにあります。&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://www.modrails.com/documentation/Users%20guide.html#_resource_control_and_optimization_options&quot;&gt;5.12. Resource control and optimization options&lt;/a&gt;&lt;/p&gt;


上記ページを見る限り、チューニングパラメータは以下の5点です。
	&lt;ol&gt;
	&lt;li&gt;PassengerMaxPoolSize&lt;/li&gt;
		&lt;li&gt;PassengerMaxInstancesPerApp&lt;/li&gt;
		&lt;li&gt;PassengerPoolIdleTime&lt;/li&gt;
		&lt;li&gt;PassengerMaxRequests &lt;/li&gt;
		&lt;li&gt;PassengerStatThrottleRate&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;最初の&lt;a href=&quot;http://www.modrails.com/documentation/Users%20guide.html#_passengermaxpoolsize_lt_integer_gt&quot;&gt;PassengerMaxPoolSize&lt;/a&gt;はrailsのインスタンスの最大値で、VPSでメモリが256MBでMySQLのような他のサービスも立ち上がっている場合は2が推奨とのこと。最後の&lt;a href=&quot;http://www.modrails.com/documentation/Users%20guide.html#_passengerstatthrottlerate_lt_integer_gt&quot;&gt;PassengerStatThrottleRate&lt;/a&gt;は、config/environment.rb等のファイルの存在をチェックする間隔(秒)で、デフォルトの0だと毎リクエスト毎にチェックするらしい。&lt;/p&gt;


ということで、/etc/apache2.confの最後に以下の指定をしました。
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;PassengerMaxPoolSize 2&lt;tt&gt;
&lt;/tt&gt;PassengerStatThrottleRate 3600&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;apache2起動後にblogにアクセスしてみると、どーんと120MBくらいメモリを使用します。うーん、どうなんだろう。あまり変化がないようであれば、PoolIdleTimeを0にしてプロセスを常駐させることも検討してみます。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-25:4</id>
    <published>2009-05-25T14:01:00Z</published>
    <updated>2009-05-25T14:02:09Z</updated>
    <category term="life"/>
    <link href="http://blog.wrap-trap.net/2009/5/25/inkscape" rel="alternate" type="text/html"/>
    <title>Inkscape</title>
<content type="html">
            &lt;p&gt;仕事では、デザインや画像を作成する仕事は基本的にデザイナの方々に任せてしまっているのですが、たまたま機会があって、&lt;a href=&quot;http://www.inkscape.org/&quot;&gt;Inkscape&lt;/a&gt;を使って画像を作ってます。PhotoshopやIllustratorはほとんど使ったことはありませんし、Inkscapeにしても最初は操作の仕方等全然わかりませんでしたが、慣れてくるにつれ自分のやりたいことができるようになってくるから不思議です。&lt;/p&gt;

&lt;p&gt;最初は以下の書籍を読んで何度か練習し、今ではちょっとした操作であれば何も見ずに行うことができるようになりました。自分には縁遠いと思っていた描画ツールでこんなに楽しめるとは正直思いませんでした。&lt;/p&gt;

&lt;p&gt;自分にとって得意なことをやる、ということも大事ですが、普段手を出さないことにチャレンジする姿勢は保ち続けたいと思います。仮にシステム構築が担当でも、デザインの良し悪しを感じられる感性を育むことがNGではありません。画像の作成を他者に任せる場合でも、どこまでイメージを細かく説明できるかによって、出てくるアウトプットの質は異なります。大事なのは、機会を逃さないことだと思います。&lt;/p&gt;

&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883808548/rektunpe-22/&quot;&gt;Inkscapeスーパーテクニック―無料で使える高性能ベクタードローツール (100%ムックシリーズ)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883808548/rektunpe-22/&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;水上 淳嗣&lt;br /&gt;&lt;br /&gt;晋遊舎  2008-11-26&lt;br /&gt;売り上げランキング : 7628&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;おすすめ平均  &lt;/strong&gt;&lt;br /&gt;解説書とは？&lt;br /&gt;テクニック満載で分かり易い&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4883808548/rektunpe-22/&quot;&gt;Amazonで詳しく見る&lt;/a&gt; by &lt;a href=&quot;http://www.goodpic.com/mt/aws/index.html&quot;&gt;G-Tools&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-24:3</id>
    <published>2009-05-24T04:23:00Z</published>
    <updated>2009-05-24T04:23:46Z</updated>
    <category term="tips"/>
    <link href="http://blog.wrap-trap.net/2009/5/24/coderay" rel="alternate" type="text/html"/>
    <title>CodeRay</title>
<content type="html">
            &lt;p&gt;よくコードを貼り付けるので、コードハイライトは欲しいところ。&lt;a href=&quot;http://mephisto.com&quot;&gt;Mephisto&lt;/a&gt;には、デフォルトでCodeRayというコードハイライト用のライブラリと、それを使用するプラグインが入っているようなので、早速使ってみます。&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;adminページにログインし、「Design」タブをクリックする&lt;/li&gt;
		&lt;li&gt;CodeRayのcssフィルを「Template source code」に貼り付け、coderay.cssという名前で保存する&lt;/li&gt;
		&lt;li&gt;そのままlayout.liquidを開き、スタイルを読み込む場所に「{{ &#8216;coderay&#8217; | stylesheet }}」を追加&lt;/li&gt;
		&lt;li&gt;以下のようにハイライトしたいコードのところで&amp;lt;macro:code&amp;gt;タグを挿入する&lt;/li&gt;
		&lt;li&gt;&amp;lt;macro:code&amp;gt;タグの内側に表示させたいコードを書く&lt;/li&gt;
	&lt;/ol&gt;


&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Hello, World.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class=&quot;co&quot;&gt;Time&lt;/span&gt;.now&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;&amp;lt;macro:code&amp;gt;タグを記述したコードを表示したいのですが、preタグ下でmacroを記述するとmacroの展開が先に来てしまうらしく、うまく表示できないので諦めました。&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.wrap-trap.net/">
    <author>
      <name>masayuki</name>
    </author>
    <id>tag:blog.wrap-trap.net,2009-05-23:1</id>
    <published>2009-05-23T14:35:00Z</published>
    <updated>2009-05-24T18:01:52Z</updated>
    <category term="life"/>
    <link href="http://blog.wrap-trap.net/2009/5/23/blog_server" rel="alternate" type="text/html"/>
    <title>&#12469;&#12540;&#12496;&#24341;&#36234;&#12375;</title>
<content type="html">
            &lt;p&gt;blog(日記)は、はてなダイアリで始めて、&lt;a href=&quot;http://rektunpe.sakura.ne.jp/diary/&quot;&gt;さくらインターネットのレンタルサーバ&lt;/a&gt;に移り、今回で3つ目となりました。&lt;/p&gt;


	&lt;p&gt;さくらインターネットに乗り換えたのは、blogの記事の管理を自分でやりたかったことと、作成したアプリケーションを配備できるサーバが欲しかった、という2点からでした。実際にRubyで作成したアプリケーションを置いて使ってきましたが、railsがcgiでしか動かせず、またapacheのerror.logが見れない為にcgiでエラーが出ると解決に時間がかかることから、いつかまた引越ししたいと思っていました。&lt;/p&gt;


	&lt;p&gt;ちょうど4月頃に仕事が落ち着いてきて引っ越し先を探していたところ、&lt;a href=&quot;http://jinorin.exblog.jp/10440709/&quot;&gt;会社の先輩のblogに書いてあったNYNOCのVPSの件&lt;/a&gt;を思い出して、今回の引っ越しとなりました。さくらインターネットで契約していたレンタルサーバのスタンダードプランとほぼ同じコストながら、サーバを自由に使えるということでapt-get installばかりしております。&lt;/p&gt;


	&lt;p&gt;今回の引っ越しに伴い、さくらインターネットは解約します。さくらインターネットに置いていたtDiaryも移設しました。今後は更新しませんが、アーカイブとして見れるようにしておきます。&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://wrap-trap.net/~masayuki/diary/&quot;&gt;http://wrap-trap.net/~masayuki/diary/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;今回は&lt;a href=&quot;http://mephistoblog.com/&quot;&gt;Mephisto&lt;/a&gt;というRailsの上で動くCMSを使用することにしました。デフォルトでインストールされているapacheからmod_proxyを使ってmongrelに繋げようと思ったのですが、Mephistoをサブディレクトリ下で動作させる為にパッチを当てる必要があるらしく、面倒なのでpassengerを入れてバーチャルホストで分けるようにしました。&lt;/p&gt;


	&lt;p&gt;今後どのくらいの頻度で書けるかまだ分かりませんが、せっかく場所を作ったので、時間を作って書いていきたいと思います。&lt;/p&gt;
          </content>  </entry>
</feed>
