2013年5月26日日曜日

[CoffeeScript]クラスメソッドとクラス変数

CoffeeScriptでは、クラス内の変数に「@」をつけて宣言するとクラスメソッドになる。

class Hoge
  #クラスメソッド
  @classMethod = (param) ->
    "param is #{param}."

  #クラス変数
  @count = 0

  constructor: ->
    # コンストラクタ内で、クラス変数の値をインクリメント
    Hoge.count += 1;

console.log Hoge.classMethod "パラメータ"

new Hoge();
console.log Hoge.count
new Hoge();
console.log Hoge.count

実行結果

param is パラメータ.
1
2

JavaScriptへの変換結果

クラスメソッドや変数は、CoffeeScriptで定義したクラスに対応するfunctionのプロパティとして宣言される。
var Hoge;

Hoge = (function() {

  Hoge.classMethod = function(param) {
    return "param is " + param + ".";
  };

  Hoge.count = 0;

  function Hoge() {
    Hoge.count += 1;
  }

  return Hoge;

})();

console.log(Hoge.classMethod("パラメータ"));

new Hoge();

console.log(Hoge.count);

new Hoge();

console.log(Hoge.count);

2013年5月18日土曜日

railsのルーティング設定をリスト表示する

rakeコマンドの引数に「routes」を指定して実行することでルーティング設定をリスト表示することができる。

%rails_project%/bin/rake routes

実行結果例

Prefix Verb   URI Pattern               Controller#Action
   users_new GET    /users/new(.:format)      users#new
       users GET    /users(.:format)          users#index
             POST   /users(.:format)          users#create

2013年5月12日日曜日

[Oracle]DATE型の計算

日付の加算/減算

NUMBER値を加算(減算)しての日付計算。
-- 現在日時の1日後
select sysdate + 1 from dual;

-- 2013/05/11の1日前
select to_date('2013-05-11') - 1 from dual;

-- 閏年も問題なし(3/1になります)
select to_date('2012-02-28') + 2 from dual;

期間値(INTERVAL)を使って日付の加算(減算)を行うこともできます。
-- 現在日時の1日後
select sysdate + to_dsinterval('P1D') from dual
select sysdate + interval '1' day from dual;

月の加算/減算

期間値(INTERVAL)を使って計算します。
-- 1ヶ月後を計算
select to_date('2012-02-28') + interval '1' month from dual;

このようにINTERVALを使うと、日付の計算を非常に簡単に行うことができます。
INTERVALのリテラル定義の方法は、以下のOracleのドキュメントを見ると良いでしょう。
http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements003.htm#i38598

2013年5月6日月曜日

CSSでテーブルの行の背景色を交互に変更する方法

CSSの定義のみで、テーブルの行の背景色を交互に変更する方法

IE8ではこの方法を使えないので、IE8をサポートする場合にはjQueryなどを使って回避する必要があります。
[jQuery]テーブルの行の背景色を交互に変更する方法

CSSのみでの背景色の変更は、nth-child擬似クラスを使用して行います。
下の例のように、trの何番目の子要素に対して背景色を適用するかみたいな使い方をします。
テーブルの場合、タイトル行をthで定義したりするので、tdのみに背景色を適用するようにセレクタを定義しています。
    /* 偶数行の背景色を変更 */
    tr:nth-child(even) td {
      background-color: #eee;
    }

    /* 奇数行の背景色を変更 */
    tr:nth-child(odd) td {
      background-color: #eee;
    }

    /* 任意の行数毎に背景色を変更(この例だと4nと指定しているので4行ごと) */
    tr:nth-child(4n) td {
      background-color: #eee;
    }

2013年4月21日日曜日

[CoffeeScript]戻り値のないメソッドを作る方法

CoffeeScriptでメソッドを作ると、必ず最後の文の結果が戻り値として返されてしまいます。

例えば、下のメソッドの場合「2 * 5」がメソッドの最後の文なので、このメソッドは必ず「10」を結果として戻します。
method = ->
  2 * 5

このように、常に最後の文の結果が返されてしまうので、基本戻り値のあるメソッドになります。
もし、どうしても戻り値のないメソッドを作りたい場合、下のメソッドのように明示的に「undefined」を返すと戻り値のないメソッドを作れます。
method = ->
  return undefined

2013年4月11日木曜日

[Oracle]V$SESSIONに接続元を識別する情報を格納する方法

JDBCでOracleデータベースに接続した場合に、セッション情報を確認するビュー(V$SESSION)のPROGRAM列に任意の値を設定する方法。

OracleDataSourceの接続プロパティに対して、キー:v$session.program、値:接続元を示す値を設定することで、任意の値をV$SESSIONのPROGRAM列に表示出来る。
※デフォルト(thin接続の場合)の場合、'JDBC Thin Client'と表示される。

実装例

この例の場合、PROGRAM列には「任意の値」が表示される。
dataSource.setURL("jdbc:oracle:thin:@localhost:1521:hoge");
dataSource.setPassword("hoge");
dataSource.setUser("hoge");
Properties properties = new Properties();
// v$session.programをキーにして、クライアントを識別する値を設定する。
properties.setProperty("v$session.program", "任意の値");
dataSource.setConnectionProperties(properties);

2013年4月7日日曜日

[CoffeeScript]ヒアドキュメント

coffeescriptでのヒアドキュメントのまとめ。

コメント

ブロックコメントなだけなので、ヒアドキュメントではないかもしれませんが。
1 ###
2   console.logにメッセージを出力する。
3 ###

JavaScriptに変換されると
1 /*
2   console.logにメッセージを出力する。
3 */

文字列

例を見るとわかりますが、変数を展開することもできます。
1 str = "さしすせそ"
2 here = """
3 あいうえお
4 かきくけこ
5 #{str}
6 """

JavaScriptに変換されると
1 str = "さしすせそ";
2 
3 here = "あいうえお\nかきくけこ\n" + str;

正規表現

文字列と同じように変数の展開ができます。複雑な正規表現を定義するときに便利な気がします。
1 str = "い"
2 pattern = ///
3 # コメントも書ける
4 #{str} # 変数の展開もできる。
5 6 7 8 ///

JavaScriptに変換されると
1 str = "い";
2 
3 pattern = RegExp("あ" + str + "うえお");