2011年4月25日月曜日

google日本語入力の候補移動キーの変更

IMEの変換候補の移動を矢印キーでってのがどうにも面倒だったので、
vimの補完候補の移動で使っているCtrl+nとCtrl+pで移動できるように変更してみた。
これで生産性がだいぶ上がる気がすると、自己満足してみる。

変更方法は、google日本語入力のなんでマイクロソフトのIMEでは出来るかはよくわからない。

google日本語入力の設定画面を表示

下記画像の工具のアイコン?を左クリックして、プロパティを選択する。






キー設定の編集画面を開く

キー設定の編集画面へ移動する。(赤枠のボタン)





















キー設定を編集する

変更するのは下記の3点。(変更ポイントは画像参照)
  • 変換前入力中の予測変換
  • 変換中の次候補へ移動
  • 変換中の前候補へ移動


2011年4月7日木曜日

rubyからoracle接続

rubyからOracleへアクセスする方法

まずは、下記コマンドでOracleへのアクセスインタフェースを提供してくれるruby-oci8をインストールする。
gem install ruby-oci8

実際にOracleに接続して、select文を実行するコード(接続先ノDBは、OracleXE)
# encoding: utf-8
require "oci8"

# データベースへ接続
con = OCI8.new("hoge", "hoge", "xe")

begin
  # SELECT文の実行
  cur = con.exec("select id, name from hoge")

  # fetch_hashを呼び出すと、レコードをHashで取得できる。
  # fetchだと、各レコードがArrayで返却される。
  # 個人的には、Hashのが好きなんだよな・・・
  while rec = cur.fetch_hash    
    puts "rec['ID'] = [#{rec['ID']}]"
    puts "rec['NAME'] = [#{rec['NAME']}]"
  end
  cur.close
ensure
  # データベース接続を閉じる
  con.logoff
end

プリペアドステートメントやPL/SQLの実行なんかも出来るらしい。その辺は、今度ちゃんと調べてみよう。

2011年4月4日月曜日

rubyのローカル変数とブロックローカル変数の注意点

ローカル変数とブロックローカル変数に、同一の名前をつけた場合の動きのまとめ。

  1. ローカル変数をブロック内で参照できる。
  2. ローカル変数と同名の変数を宣言するには、ブロックパラメータのリストに宣言する。
  3. ローカル変数と同名の変数をブロック変数に使用した場合、ブロックローカルな新しい変数となる。

ローカル変数をブロック内で参照した場合

#coding:utf-8

array = ["h", "o", "g", "e"]
hoge = ""

array.each do |s|
  hoge += s
end
puts hoge

実行結果

ローカル変数がブロック内で参照でき、値が代入されていることがわかる。
hoge

パラメータリストで変数の宣言

#coding:utf-8

array = ["h", "o", "g", "e"]
hoge = "hoge"

array.each do |s;hoge|
  hoge = s
  puts hoge
end
puts "original hoge = [#{hoge}]"

実行結果

ローカル変数が上書きされていないことがわかる。
h
o
g
e
original hoge = [hoge]

ローカル変数と同名の変数を、ブロックパラメータで指定した場合

#coding:utf-8

array = ["h", "o", "g", "e"]
hoge = "hoge"

array.each do |hoge|
end
puts hoge

実行結果

ローカル変数が上書きされていないことがわかる。
hoge
実行時に『-w』を指定して実行すると、ブロックパラメータで同名の変数を使用した場合にワーニングを出すことができる。
実行結果はこんな感じになる。
test.rb:6: warning: shadowing outer local variable - hoge
hoge

javaしかやってないと、なんとなく分かりづらい動きをするもんだなと思ってしまう。
個人的には、この辺の仕様を覚えておくのは大事だと思うけど、同じ名前の変数使わなければいいんじゃねと思ってしまう。
変数使い回すのすきじゃないし・・・。

2011年4月2日土曜日

IntellijがJDK7に対応してきた

Intellijの10.5のEAPがリリースされてJDK7に早くも対応してきたから、どんな感じか少しためしてみた。
いくつかは、早速quick-fixにも対応していて完成度の高さを感じたな。
JDK7の正式リリースは夏ぐらいだから、その頃にはかなりクオリティが高くなってそう。

2つほどquick-fixの動作を載せてみます。

Stringのswitch文

JDK6までの文法で書くと、こんな感じにif文にしないといけない。












このコードをJDK7対応のswitch文に置き換えるには、quick-fix機能を使うと簡単にできる。
if文にカーソルを移動すると、quick-fixのヒントアイコンが表示されるので、
左クリックするかAlt+Enter(デフォルトのキーバインドの場合)で、対応方法がリストされる。
ここで、Replace 'if' with 'switch'を選ぶとif文をswitch文に変換してくれる。














変換されたコードは、こんな感じになる。
















ジェネリクスの型推論

型推論もquick-fixに対応している。






変換後は・・・
こんながん時に、コンストラクタ呼び出しのジェネリクス型が削除される。