しおしお

IntelliJ IDEAのことなんかを書いてます

素数の時にJOJO -Oacle SQL編-

Oracle SQLで素数の時にJOJOと出力してみたよ。

PL/SQL版はこちら→素数の時にJOJO -Oacle PL/SQL編- - しおしおの雑記帳

ポイントは、select句の素数判定部分。
1と2の場合は、PL/SQLでも同じようにやっているけど、3以上の場合の判定方法はサブクエリを使って判定してます。
判定方法は、自身の平方根をsqrt関数で取得して、その値以下(2より大きい値)で自身の値を割り切れるかで素数かどうか判定してます。

IDEの機能比較:ローカル変数の抽出

Eclipseを入れちゃったので、IntelliJとどれぐらい違うのかなと思って比較してみたよ。NetBeansも仲間にいれてます。

id:masanobuimai さんのコメントを元にEclipseにQuick Fixを使用した場合の操作を追加しています。

使ったバージョン

  • Eclipse Juno(ビルドば番号は見つかったけどバージョンがどこにあるかわからず)
  • NetBeans7.2
  • IntelliJ IDEA 12 EAP(120.305)

比較した機能

リファクタリング機能で最も使うローカル変数の抽出機能を比較してみたよ。個人的には、この機能はかなり重要だと思ってます。

Eclipse

Eclipseでローカル変数の抽出をするには、抽出する部分を事前に選択します。選択範囲でローカル変数が抽出できないとエラーになってしまいます。なんか残念すぎますね・・・
下の例だと、「map.get("USER_ID")」の戻り値をローカル変数に抽出します。
f:id:sioiri:20120810224259p:plain

範囲選択をしたら、Refactorメニューからローカル変数の抽出を選びます。下の画像のような感じですね。f:id:sioiri:20120810223749p:plain

変数名を入力するダイアログが表示されるので、好きな変数名を入れてあげます。
f:id:sioiri:20120810224523p:plain

これで変数の抽出が完了です。型をインタフェースに変えたりってこともできないみたいですね。
f:id:sioiri:20120810224700p:plain

QuickFixを使用したローカル変数の抽出

EclipseもQuickFix(command + 1やctrl + 1)を使用すると、リファクタリングメニューから行くよりも便利なリファクタリングができます。

ローカル変数を抽出したいステートメントにカーソルを移動し、Quick Fixを表示します。そうすると、ローカル変数を抽出するメニュー(〜new local variable)が出てくるので選択します。
f:id:sioiri:20120811002816p:plain

ローカル変数が宣言され、変数名及び型を変更できます。型と変数名の移動はtabで行います。
f:id:sioiri:20120811003148p:plain

リファクタリングメニュとは異なり型も選択できるようになります。
f:id:sioiri:20120811003258p:plain

NetBeans

抽出範囲は、カーソルの位置によって変わるようです。現在のカーソル位置以降でローカル変数に抽出可能なものを候補として出してくれます。IntelliJと同じ動きですね。

map変数の部分にカーソルがあると、map以降でローカル変数に抽出可能なものがリストされます。
f:id:sioiri:20120810225509p:plain

map変数より後にカーソルがあると、mapをのぞいたものがリストされます。
f:id:sioiri:20120810225617p:plain

ローカル変数の抽出はリファクタリングメニューの変数の導入から行います。
f:id:sioiri:20120810225847p:plain

Eclipseと同じように変数を入力するダイアログが表示されるので、好きな変数名を入れてあげます。
finalにできたりもするようですね。
f:id:sioiri:20120810230133p:plain

これで終わりです。型はEclipseと同じように選べないんですね。
f:id:sioiri:20120810230354p:plain

IntelliJ

IDEといったらIntelliJIntelliJですね。

抽出範囲の選択は、基本的にNetBeansと同じ動きですね。見た目はこんな感じです。
f:id:sioiri:20120810231120p:plain

ローカル変数の抽出は、RefactorメニューのExtractのVariableから行います。昔は、Introduce Variableみたいな名前だった気がします。
f:id:sioiri:20120810231706p:plain

個人的には、ダイアログ出すよりエディタ上でのリファクタリングが好みだけど、ここは他のIDEとあわせてダイアログを表示するリファクタリングでいきます。

変数を入力するダイアログが表示されます。変数名は、呼び出したメソッドの名前やMapのキー値などを元に候補として幾つか表示してくれます。これがなにげに便利ですよ。
f:id:sioiri:20120810231910p:plain

型も親クラスや実装しているインタフェースを候補で出してくれるので、インタフェースで宣言が簡単に出来ます。下の絵は、new ArrayList()に対してローカル変数の抽出をした場合です。Listなんかも候補にいますよね。
f:id:sioiri:20120810232158p:plain

抽出後はこんな感じです。
f:id:sioiri:20120810232238p:plain

ちなみにIntelliJでは、ダイアログを出さずにエディタ上だけでの操作も可能です。この切替は、「Settings」の「Editor」から行います。右下の方の「Enable in-place mode」にチェックを入れるだけです。

エディタ上だけで行う場合は、こんな感じになります。shift-tabで型選択になってtabで変数名編集にといったりきたりができます。
f:id:sioiri:20120810232523p:plain

まとめ

微妙な違いがあって、Eclipseはちょっと使いづらすぎるかなと。範囲選択を事前にしないとダメってのは使う気がなくなってきてしまいます。
IntelliJNetBeansは型選択ぐらいの差があるぐらいかな?この差が個人的にはものすごい大きいと感じてます。

Eclipseは、リファクタリングメニューからのローカル変数の抽出ではなく、Quick Fixからの操作が圧倒的に便利です。(なぜ、同じローカル変数の抽出なのに違いがここまであるのかわかりませんが・・・)
IntelliJEclipse(Quick Fix)を比較した場合は、そこまで大きな機能差はありません。(最後は好みの問題かな)

おわり。気が向いたら続編書きます。

Macでeclipse.iniが読み込まれない場合は、Info.plistを疑おう

Eclipse.appを使用してeclipseを起動した場合、eclipse.iniの内容が読み込まれない場合があります。
この原因として考えられるのは可能性は、「Eclipse.app/Contents/Info.plist」に対して、vmargsが指定されていることです。

これは、Info.plistにvmargsが指定されている場合は、eclipse.iniの内容は全て無視されてしまうからです。
※Windowsでも、eclipse起動時の引数にvmargsを指定した場合eclipse.iniの内容が無視されます。

Info.plistの確認方法

  • エディタで、Info.plistを開きます
  • Eclipse」が記述されていると部分に移動します。
  • 「array」の子要素に「-vmargs」が書かれていないことを確認します。

例えば、以下のような記述があった場合が該当します。

<string>-vmargs</string>
<string>-Xmx512m</string>
  • 「vmargs」の内容を削除します。(もし必要な起動オプションの場合は、eclipse.iniに移動してあげます)

おわり。

JSLintをGradleから使ってみる

JSLintをantから使ってみる - しおしおの雑記帳のGradle版。

https://github.com/kellyrob99/gradle-jslint-pluginのプラグインを使うと、GradleからもJSLintを呼び出すことができます。
情報少なく、手探り感満載だけどとりあえず動いたので。

buildscript {
  dependencies {
    // jslintのgradleプラグインをクラスパスに設定
    classpath fileTree(dir: 'jslint_lib', include: 'gradle-jslint-plugin-0.2-SNAPSHOT.jar')
  }
}

// jslintのconfigurations
configurations {
  jslint
}
dependencies {
  jslint fileTree(dir: './jslint_lib', include: '*.jar')
}

apply plugin: org.kar.jslint.gradle.plugin.JSLintPlugin

// jslintへの設定
jslint {
  inputDirs = ['main/web/js']
  haltOnFailure = false
  excludes = '**/*jquery*.js,**/*require*.js'
  options = 'indent=2,plusplus,maxlen=120,bitwise,continue,white,undef'
  formatterType = 'html'
}

Intellij11とrails(3系)でテストが動かない場合の対処法

railsのプロジェクト作って、modelを自動生成してみたのでとりあえず自動テストを流してみようと思って実行したら、いきなりこんなエラーが・・・

MiniTest framework was detected. It is a lightweight version of original Test::Unit framework.
RubyMine/IDEA Ruby plugin test runner requires 'minitest-reporters' (>= 0.4.1) for integration
with MiniTest framework. Or you can use full-featured Test::Unit framework version, provided by
'test-unit' gem, otherwise default console tests reporter will be used instead.

対処法は、下のサイトにかかれてたりしました。

対処法を簡単にまとめると・・・

Gemfileに以下の行を追加

group :test do
  if RUBY_PLATFORM =~ /(win32|w32)/
    gem "win32console", '1.3.0'
  end
  gem "minitest"
  gem "minitest-reporters", '>= 0.5.0'
end

test_helper.rbに以下の行を追加

require 'rails/test_help'の次に追加する。

require 'minitest/reporters'
MiniTest::Reporters.use!

これで何とか動くようになりました。
IntelliJrailsは、もしかして難易度たかいのか?

おわり。

IntelliJのsvnプラグインでBranchを使いこなそう

http://siosio.hatenablog.com/entry/2012/07/28/130010:IntelliJでsvn:リポジトリからプロジェクトの作成の続編?

IntelliJ(バージョン11.1.3)からBranch作ったり、switchやmergeする方法をまとめてみました。

branchリポジトリの設定

Configure Branchesを開きます。

f:id:sioiri:20120804002306p:plain

branchのリポジトリを選択します。

今回は、「branches」がbranchのリポジトリなので、それを選択します。
f:id:sioiri:20120804002441p:plain

選択すると、「branch locations」に追加されるので「OK」してあげます。
f:id:sioiri:20120804002636p:plain

branchの作成

create branch or tagを開きます。

f:id:sioiri:20120804003006p:plain

branchを作ります

ブランチを作る元の指定をCopy Fromに指定します。作業コピーかリポジトリの任意のロケーションを選択できます。リポジトリを選んだ場合は、リビジョンも指定できます。
次に、branchを作る先の指定をCopy Toにします。

リポジトリからブランチを作る場合は、こんな感じになります。
f:id:sioiri:20120804005444p:plain

作業コピーのURLを作成したbranchに変更

Update Projectを開きます。

svn switchに相当する処理は、Update Projectから行います。まさかここにあるとは思わず、かなり探しました。
f:id:sioiri:20120804010130p:plain

switchするbranchを選択します。

選択後OKで、switchの完了です。
f:id:sioiri:20120804010735p:plain

branchで作業

branchでコード編集をしてコミットbranchに対してコミットをしてあげます。
説明することがあまりないので割愛。

branchのコミットをtrunkにmerge

作業コピーのURLをtrunkに戻します。

branchに変更した時と同じ手順でtrunkに変更します。

merge元のbranchを選択します。

f:id:sioiri:20120804082104p:plain

branchリストが表示されるので、今回mergeするnew_branchを選択します。
あるはずのbranchが表示されない場合は、リフレッシュしてあげましょう。
f:id:sioiri:20120804082154p:plain

mergeする対象を選びます

下のダイアログが表示されるので、全てをmergeするかリビジョンを選択するか選びます。
今回はリビジョン選択で・・・
f:id:sioiri:20120804082345p:plain

mergeするリビジョンを選びます

選択するのではなく、チェックをいれていきます。
f:id:sioiri:20120804085958p:plain

コミットダイアログが表示されるのでコミット

必要に応じてコミットメッセージを直しましょう。
f:id:sioiri:20120804090039p:plain

おわり。