respond_withを使って、リクエストのContent-Typeを限定する

Rails 3から、リクエストのContent-Typeごとに描画する処理を分けているコードを、respond_withメソッドを使って簡単に書けるようになりました。

class UsersController < ApplicationController::Base

  def index
    @users = User.all
    respond_to do |format|
      format.html
      format.xml { render :xml => @users }
      format.json { render :json => @users }
    end
  end

  def create
    @user = User.create(params[:user])
    respond_to do |format|
      format.html { redirect_to users_url }
      format.xml { render :xml => @user }
      format.json { render :json => @user }
    end
  end
    
end

このように書いていたのを、

class UsersController < ApplicationController::Base
  respond_to :html, :xml, :json

  def index
    respond_with(@users = User.all)
  end

  def create
    @user = User.create(params[:user])
    respond_with(@user, :location => users_url)
  end
end

respond_toとペアで使って上のように書くことができます。

respond_withメソッドを使うときは、respond_toメソッドとペアで使う必要があります。
respond_toメソッドで指定していないフォーマットでアクセスされると、406 Not Acceptableエラーを返します。

ソリューションエクスプローラーのフィルターの使い方

Visual StudioC++の開発を行うとき、ソリューションエクスプローラーでファイルの整理に使う「フィルター」と呼ばれる機能についての考察です。

具体的には、これどうやって使うのが正解なの?とかそういった話ですが、
こういうものは工夫次第で色々な使い方ができるので、あくまで私の考察です。

フィルターを使うと何ができるのか?

はじめに、フィルターを使うと何ができるのか?です。

1. ソリューションエクスプローラー上で、ファイルの整理を行うことができる。
2. フィルター単位で新しいソリューションエクスプローラーを立てることができる。
3. なんかフィルター単位でいろいろ切り替えられる。

時間かけて調べてないので、もっと他にあるかもです。

どのように使うのが良いのか

続いて、どんなふうに使っていくのが良いのか?という話です。

そもそもこの話を書こうと思ったきっかけは、VisualStudioでプロジェクトを作成した時、
自動生成される「ソースファイル」「ヘッダーファイル」「リソースファイル」等のデフォルトのフィルターで、この下か同じ階層に自分でフィルターを設定していくことになるのですが、
クラス・モジュールごとにフィルターを設定しようとした時に、

「ソースファイル」「ヘッダーファイル」両方に同じ名前のフィルターを用意するのか、
それとも.h/cpp両方一緒に入れるフィルターを一つだけ用意するのか、
そしてそれをどこに配置するのが綺麗なのか?と悩んだ次第です。

調べてみると、自動生成された「ソースファイル」「ヘッダーファイル」フィルターを無視する内容が見られました。

かと言ってこの「ソースファイル」「ヘッダーファイル」等のフィルター、消すとちょっと困ったことになるみたいです。

結果、自分はどのように使うか

「ソースファイル」「ヘッダーファイル」と同じ階層にプロジェクト名のフィルターを作成し
その下に整理した形でファイルを配置することにしました。

ディレクトリみたいな機能を持っていたりしますが、仮想的なもので、実際のファイル構成には一切関係のないものなので、自由に使ったらいいんじゃないですか(適当)

_In_opt_ とは?

最近コード書いてなくて、数年ぶりにWin32いじるかー、とか思ってコード自動生成したら
エントリポイントからガッツリかわっててびっくりしました。

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)


… _In_ とか _In_opt_ って何?

これはSALと呼ばれるもので、引数の使用方法に関して使用出来る一種のコメントであり、
C++のコード障害対策として用いられています。

例えば、 _In_ であれば、呼び出された関数の入力、読み取り専用として扱われます。

_In_がついた引数は、次のコードを示しています。

・パラメーターは有効である必要があり、変更されない。
・関数は、単一要素のバッファーから読み取る。
・呼び出し基がバッファーを提供し、初期化する必要がある。

反対に、_Out_ であれば、書き込み専用として扱われます。

また、_In_opt_ は、 意味的には _In_ と同義ですが、 _In_opt_の場合、参照がnullである場合があり、
関数側でチェックしなければなりません。


詳細なドキュメントはこちらです。

SALについて。
http://msdn.microsoft.com/ja-jp/library/hh916383.aspx

SAL注釈を使ってコード障害を減らす方法
http://msdn.microsoft.com/ja-jp/library/vstudio/ms182032.aspx

講演

情熱プログラマー 〜スピードの向こう側に〜


なんか、「世界を取る」から、「世界を変える」に変わってる気がする。
気がするだけで前からそうだったのかもしれないけど。


「世界を変えられるのは政治家とエンジニア」っていうのは、凄く共感できました。
間接的に世界に関わる職業はたくさん有るけど、直接変える職業ってそれぐらいしか無いんですよね。


ただ、エンジニアのすべてが世界を変える可能性を持っているかというとそうは言えなくて、
他人の模倣をして他人の人生を生きることに何の意味もないように、
自分の考えを持って行動できるかどうかで大きく変わってきます。


O社の僕が好きなところの一つがそこで、O社は自分たちの考えで世界を変えようとしています。
ステマです。

HTML5


「うみさまー!」 これ、恒例にしましょう
HTML5と言いますけどCSS3もやります。

チーム開発におけるタスクとソースコード管理


TracSVNを使ったマネジメントを実演

O社プログラミング勉強会に参加した

12/22で品川の某O社のプログラミング勉強会に参加してきました。

実は今回は学生側というよりスタッフ側での参加だったのですが、
スタッフなのに「○○から来た××です!」みたいな自己紹介して初っ端から爆死しました。

当日は、
1.自己紹介
2.講演3つ
3.グループディスカッション
4.懇親会
と進行していきました。


特筆すべきは講演と懇親会で、個人的にこれがメインだと思ってます。
ここから個人的に思ったことをつらつら書きます
(参加してないと分かんない事書いてるかもしれません)

Xtion(エクシオン)の開発環境の構築

ASUS製のKinectのようなもの。
Xtionの開発環境の構築方法です。

OpenNIの公式ページから、Download -> OpenNI Modules から、
OpenNI Packagesの自分の環境にあったものをインストールしてください。

Development Editionはサンプルコード付き。(推奨)
Redist Editionはバイナリのみとなっています。

Windowsであればインストーラーだけで、OpenNI+NITE+Xtionのドライバがインストールされます。

ただし、Kinectのドライバ(avin2/SensorKinect)と、
Xtionのドライバ(Sensor)は共存できないらしいので、
Kinectのドライバがインストールされている場合は消しましょう。

以上です。