2012年6月14日木曜日

Javaのメモリ領域

Javaでは、以下の3つのメモリ空間が存在する。
パーマネント領域
ヒープ領域
スタック領域

まず、パーマネント領域。
これは、クラス情報や、staticな情報を格納する領域。
JVMがクラスをロードする際に、クラス情報をここの領域に展開する。

次にヒープ領域。
これは、パーマネント領域のクラス情報を元に作られたインスタンスのデータが格納される。

最後にスタック領域。
ここには、ローカル変数のデータや、メソッド呼び出しの際に、呼び出し側の番地のデータが格納される。
例えば、レシーバオブジェクト(呼び出された方のオブジェクト)のメソッドがreturnする際に、スタックに保持しておいた呼び出し側の番地を参照して、呼び出し側のコードに戻る。

ちなみに、オブジェクトにあたるデータは言語によって異なる。
定義としては、クラス情報を元に生成されたインスタンス=オブジェクト。

例えば、JVM上にロードされたクラス情報はオブジェクトではないが、インスタンスはオブジェクトである。
また、Objective-Cでは、クラスをロードすると、Classクラスのインスタンスが生成されるので、これはオブジェクトと呼べる。

2012年6月13日水曜日

Gmailが送れない。

Console上では、Errorとかでてないのに、GmailがRoRからおくれません。
以下のサイトを元に、app/config/environments/development.rb
を書き換えてみたけど、ダメでした。
また、明日考えます。

http://d.hatena.ne.jp/shunsuk/20110110/1294657636

2012年6月7日木曜日

ダイジェスト認証ではまった。


以前も紹介させて頂いた以下の本を読んでます。
で、ダイジェスト認証使っているので、本の通りに実装したのだけど、うまく動かない。

Digest::SHA1.hexdigest(password)


ってところで、hexdigestなんて文字列ねーしって怒られます。
あれこれ試したけど、全然動かないので、パスワードをそのままDBに突っ込んで次へ行きました。
原因は不明ですが、恐らくバンドルが足りてないのでは?と思います。
また、後ほど原因を究明しようかと思います。(時間があれば。。。)

2012年6月5日火曜日

XMLからXSLTへ

大容量のXMLを生成してからXSLTに変換する時に、ボトルネックになりうる所が、2カ所あります。
1.XMLを生成する所
2.XSLTを生成する所

です。まぁ当たり前ですが、問題は、生成の仕方です。
大量のデータを持つXMLを生成する時は、DOMを使ったらOutOfMemoryしちゃう可能性があります。
だって、DOMは処理する前にすべてのデータを一旦メモリに展開しちゃうんですもの!

なので、逐次にデータを読み込みながらXMLを生成します。
これは、JavaSE6から導入されたStAXというパーサーを使えば解決できます。

次に、2.のXSLTの生成ですが、StAXで逐次に生成したXMLを逐次にXSLTに突っ込みたいんですが、APIが受けられるような作りになっていませんでした。

こちらは調べた所、逐次で生成ができないみたいです。
つまり、XMLが完成している状態じゃないとXSLTのAPIは受け付けてくれません!

ということで、今私が作成しているモジュールの構成は、XMLを一旦逐次でFileに落として、再度XSLTのAPI使ってFileを読み込むようにする予定です。
#はー、絶対パフォーマンス下がるよなー、XSLT生成のところ。。。


参考にさせて頂いたとても詳しいページです。
http://moyolab.blog57.fc2.com/blog-entry-29.html

2012年6月4日月曜日

hamlメモ1

よく使うコマンドと文法をメモメモ。

1.rake haml:convert_erbs
2.< div class="field" >
3.<p style="color: Red"><%= @error %></p>
4.<br />

これらを翻訳すると、以下な感じ。

1.これで、project内のerbファイルをすべてhamlに変換!
2..field だけでok
3.%p{:style => "color: Red"}= @error
4.%br/

他にも色々あるけど、取りあえずこれだけ。