2011年11月27日日曜日

[oracle]DBの値をバイナリでダンプする方法

DUMP関数を使用して、
任意の値をバイナリでダンプすることができる。

構文

dump(任意の値(列名), フォーマット, スタートポジション, 長さ)
  • 任意の値(列名)
  • 文字列をリテラルで指定するか、カラム名を指定する。
  • フォーマット(任意)
  • 以下の値を指定する。
    8→8進数でダンプ
    10→10進数でダンプ
    16→16進数でダンプ
    上記の値に1000をプラスすると、ダンプ時にキャラクタセットを表示してくれる。
  • スタートポジション(任意)
  • ダンプの開始位置
  • 長さ(任意)
  • ダンプする長さ

使用例


普通にSQLを実行した場合
SQL> select col1 from test;

COL1
----------
12345

16進数でダンプした場合
SQL> select dump(col1, 16) from test;

DUMP(COL1,16)
--------------------------------------------------------------------------------
Typ=1 Len=5: 31,32,33,34,35

キャラクタセットを表示しつつダンプした場合

SQL> select dump(col1, 1016) from test;

DUMP(COL1,1016)
--------------------------------------------------------------------------------
Typ=1 Len=5 CharacterSet=AL32UTF8: 31,32,33,34,35

macでIntellijのpluginプロジェクトを実行出来なかった場合の対処

macでIntellijのpluginプロジェクトからpluginの実行したら、実行時エラーがでて実行できない・・・
本来であれば、新たにIntellijが起動してそこでpluginの挙動を確認出来るのに。

原因なんだろと思って調べてたら、実行時のvmoptionがとんでもないことに。
下の画像のように、なんかxmlになってるし。

なにが正しいかよくわかんなかったので、Windowsで起動したときのvm option(以下のオプション)をもってきたら、うまいこと起動した。
-Xms128m -Xmx800m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=64m -XX:+UseCompressedOops

Intelijのバグチケットに同じ事象のがあがってて、中の人のコメントによるとworkspase.xml($PROJECT_HOME$/.idea配下にある)を削除してからプロジェクト起動するとよいらしい。
http://youtrack.jetbrains.net/issue/IDEA-76854?projectKey=IDEA&query=plugin+run

2011年11月13日日曜日

[Scala]値の遅延評価

val定義にlazy修飾子をつけることによって、右辺の初期化処理の実行を遅延させることが出来る。

lazyなvalは、初めてその変数にアクセスが行われたときに初期化(右辺の初期化式の実行)が行われる。
2度目にアクセスした時には、既に初期化されているので初期化は行われない。

サンプルコード

object Hoge {
  val hoge = {
    println("init hoge")
    "hoge"
  }
  
  lazy val lazyHoge = {
    println("init lazyHoge")
    "lazyHoge"
  }

  def main(args: Array[String]) {
    println(Hoge)
    println("========== hoge ==========")
    println(Hoge.hoge)
    println("========== lazy hoge ==========")
    println(Hoge.lazyHoge)
    println("========== lazy hoge2 ==========")
    println(Hoge.lazyHoge)
  }
}

実行結果

以下の点を確認出来る。
  • 通常のvalは、クラス参照時に初期化されていることがわかる
  • lazyなvalは、その変数に初回にアクセスしたときに初期化されていることがわかる
init hoge
Hoge
========== hoge ==========
hoge
========== lazy hoge ==========
init lazyHoge
lazyHoge
========== lazy hoge2 ==========
lazyHoge

2011年11月6日日曜日

Excel列名変換

また、こちらのブログを見てチャレンジ。

http://d.hatena.ne.jp/JunichiIto/20111102/1320253815


Scalaで書いてみたけど、Scalaっぽいのかわからない。

object Main {

  val cols = Range('A'.toInt, 'Z'.toInt + 1, 1).map {
    n => n.toChar
  }

  val stringPattern = "[A-Z]+".r

  def toNumber(alpha: String, num: Int): Int = {
    if (alpha.isEmpty) {
      num
    } else {
      toNumber(alpha.drop(1), num * 26 + (cols.indexOf(alpha.head) + 1))
    }
  }

  def toAlpha(num: Int, alpha: String): String = {
    if (num <= 0) {
      alpha
    } else {
      (num % 26) match {
        case 0 => cols(25) + alpha
        case n: Int => toAlpha(num / 26, cols(n - 1) + alpha)
      }
    }
  }

  def main(args: Array[String]) {
    args(0) match {
      case stringPattern() =>
        println(toNumber(args(0), 0))
      case _ =>
        println(toAlpha(args(0).toInt, ""))
    }
  }
}

2011年11月5日土曜日

Oracle NoSQLをCentOSインストール


NoSQL Databaseのダウンロード

Oracleのサイト(下記リンク)から、NoSQL Databaseのアーカイブをダウンロードする。
http://www.oracle.com/technetwork/database/nosqldb/downloads/index.html

ダウンロードしたファイルは、任意のディレクトリに解凍してあげる。

インストールされたことを確認

以下のように、kvclient-1.1.100.jarを実行して標準出力に「11gR2.1.1.100」が出力されればOK
$ KVHOME=/opt/kv-1.1.100 
$ export KVHOME 
$ java -jar $KVHOME/lib/kvclient-1.1.100.jar 
11gR2.1.1.100

データベースの作成

testディレクトリを作成し、そこをルートとしてデータベースを作成。
-portには、データベースにアクセスするためのポートを指定。(Oracle Databaseの1521みたいなものかな?)
-adminには、管理者用のポートを設定。このポートにアクセスすれば、GUIベースの管理ができる。
-hrangeには、ノード自身が通信で使うポートの開始位置と終了位置を指定するらしい。(あんまりよく分かっていない。。)
$ mkdir test
$ $KVHOME/bin/kvctl makebootconfig -root test -port 5000 -admin 5001 -harange 5010,5020

データベースの起動

下記コマンドで起動する。
-rootには、データベースのルートディレクトリを設定する。
$ $KVHOME/bin/kvctl start -root test

起動されたことは、tnsping的な下記コマンドで確認する。
$ $KVHOME/bin/kvctl ping -port 5000

成功していると、こんなメッセージが出力されるみたい。
SNA at hostname: localhost.localdomain, registry port: 5000 is not registered.
        No further information is available

ためしに管理者用ポートにブラウザからアクセスしたらこんな画面が表示されました。

データベースの停止

$KVHOME/bin/kvctl stop -root test