keyhac
Macをsierraにアップグレードしたらkarabinerが使えなくなったので、かわりにkeyhacを試してみる。
keyhacはkarabinerとちがって、コントロールキーとコマンドキーを交換という定義ができず、常に
keymap["Ctrl-a"] = "Cmd-a"
というふうにメインキーとの組み合わせで定義しなければならないもよう。これは非常の多くの組み合わせがあり、かつ複数のアプリケーションで定義したいので、いちいち全部をconfig.pyに書くのはつらい。そこでメソッド化。
def changeKey(keymap):
keymap["Ctrl-a"] = "Cmd-a"
keymap["Ctrl-c"] = "Cmd-c"
keymap["Ctrl-d"] = "Cmd-d"
keymap["Ctrl-f"] = "Cmd-f"
keymap["Ctrl-p"] = "Cmd-p"
keymap["Ctrl-q"] = "Cmd-q"
keymap["Ctrl-r"] = "Cmd-r"
keymap["Ctrl-s"] = "Cmd-s"
keymap["Ctrl-t"] = "Cmd-t"
keymap["Ctrl-v"] = "Cmd-v"
keymap["Ctrl-w"] = "Cmd-w"
keymap["Ctrl-x"] = "Cmd-x"
keymap["Ctrl-z"] = "Cmd-z"
return keymap
を作り、
keymap_chrome = keymap.defineWindowKeymap(app_name="com.google.Chrome")
keymap_chrome = changeKey(keymap_chrome)
で呼び出すようにする。
EntityManager#createNativeQueryで一部のデータを取り出すとき
EJBのEntityManagerでテーブルをselectしてそのテーブルのエンティティを返すのは普通にやることだが、group byしてキーだけ取り出したい、などのときは以下のようにObjectの配列のリストとして扱う。
val keys = em.createNativeQuery("select t1.key1, t1.key2, t1.key3 " +
"from T1 t1 " +
"group by t1.key1, t1.key2, t1.key3 " +
.getResultList().asInstanceOf[java.util.List[Array[Object]]]
var result = List[fooPK]()
keys.foreach(k => result :+= new fooPK(k(0).toString, k(1).toString.toInt, k(2).toString.toInt))
pythonで正規表現を使った結果の判定
pythonで文字列に数字が含まれているかどうかを判定したいとき、
import reとすると、re.search()がBooleanではなく、re.MatchObjectを返すので使えない。こういうときは、
def hantei(v):
return re.search(\d, v)
return re.search(\d, v) is not Noneとするとすっきり。
オブジェクトの値をコピーする
case class Foo(key:Int, key2:String, key3:Int)のクラスからオブジェクトを生成し、それを他のオブジェクトにコピーしたいとき、scalaではcopyメソッドが使える。
val foo = Foo(100, "test", 200)とすると、keyは300がセットされ、他の値は元のオブジェクトからコピーされる。ただし、この機能はcaseクラスのみで、コピーされる対象は()内のプロパティのみ。val zoo = foo.copy(key = 300)
case class Foo(key:Int) {だと、v1, v2はコピーされない。
var v1:String =_
var v2:Int = _
}
となると、caseクラスのプロパティはすべて()内に書いちゃうほうがいいのかな。キーになる項目だけ(equalsで比較の対象となるべきものだけ)を定義するものだと思っていたんだけど。
KarabinerでEclipseのキーバインドを変更
eclipse-4.4を使ってみる。Cntl+SPACEでいつものように補完をさせようとするとしなくなった。調べると、Karaibnerがeclipse-4.2と4.4を別に識別しているらしい。~/Library/Application Support/Karabiner/private.xmlを修正する。eclipse-4.2はなにもしないでECLIPSEとして認識されていたが、4.4は
を定義して、
ECLIPSE_LUNA
org.eclipse.platform.ide
を
Swap Control-Space and Command-Space
ECLIPSE
private.chrome.swap_controlSpace_and_commandSpace
--KeyToKey-- KeyCode::SPACE, VK_CONTROL, KeyCode::SPACE, VK_COMMAND
--KeyToKey-- KeyCode::SPACE, VK_COMMAND, KeyCode::SPACE, VK_CONTROL
とするとキーバインドを変更できる。
Swap Control-Space and Command-Space
ECLIPSE, ECLIPSE_LUNA
private.chrome.swap_controlSpace_and_commandSpace
--KeyToKey-- KeyCode::SPACE, VK_CONTROL, KeyCode::SPACE, VK_COMMAND
--KeyToKey-- KeyCode::SPACE, VK_COMMAND, KeyCode::SPACE, VK_CONTROL