【Scala】【ScalikeJDBC】 Config設定方法
環境 Scala 2.11.8 ScalikeJDBC 2.5.0
基本的にはこの内容 Configuration - ScalikeJDBC
scalikejdbc-conifg, application.confは設定方法によって必要
build.sbt
libraryDependencies ++= Seq( "org.scalikejdbc" %% "scalikejdbc" % "2.5.0", "org.scalikejdbc" %% "scalikejdbc-config" % "2.5.0", "mysql" % "mysql-connector-java" % "6.0.5", "ch.qos.logback" % "logback-classic" % "1.1.7" )
- src/main/resourcese/application.conf
development { db { sandbox { driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="sa" password="" } } }
/** * ConnectionPool config sample */ package main.scala.com.example import scalikejdbc._ import scalikejdbc.config._ import com.mysql.cj.jdbc.Driver object Db1{ /** * Pattern 1 */ def ex1 = { // Initialize ConnectionPool.singleton("jdbc:mysql://localhost:3306/test", "sa", "") implicit val session = AutoSession // Query val r = sql"""select * from a""".map(_.toMap).list.apply() println(r) } /** * Pattern 2 * necessary import scalikejdbc.config._ */ def ex2 = { // Initialize Class.forName("com.mysql.cj.jdbc.Driver") val settings = ConnectionPoolSettings( initialSize = 5, maxSize = 20, connectionTimeoutMillis = 3000L, validationQuery = "select 1") ConnectionPool.add('example, "jdbc:mysql://localhost:3306/test", "sa", "", settings) implicit val session = AutoSession // Query val r = NamedDB('example) readOnly { implicit session => sql"""select * from a""".map(_.toMap).list.apply() } println(r) } /** * Pattern 3 * necessary import scalikejdbc.config._ * necessary main/resources/application.conf */ def ex3 = { // Initialize DBsWithEnv("development").setup('sandbox) // addで別の設定を追加する事も可能 implicit val session = AutoSession // Query val r = NamedDB('sandbox) readOnly { implicit session => sql"""select * from a""".map(_.toMap).list.apply() } println(r) } }
【Scala】 sealedとパターンマッチ
環境 Scala 2.11.8
シールドクラス(トレイト)を継承したサブクラスは、すべて同一のソースファイルに定義される。
そしてシールドクラスをパターンマッチに使用されると、match式の網羅性をコンパイラがチェックできる。
sealedなし
このときはcaseのパターンが全て網羅されなくてもエラーは出ない。
が当然、網羅されていないパターンを投げると実行時エラーになる
trait Msg case class TxtMsg() extends Msg case class ObjMsg() extends Msg case class ErrMsg() extends Msg object Msg { def message(m: Msg): Unit = m match { case TxtMsg() => println("Text") } }
$ scalac Msg.scala $ # エラーは出ない
scala> :load Msg.scala Loading test.scala... defined trait Msg defined class TxtMsg defined class ObjMsg defined class ErrMsg defined object Msg scala> Msg.message(ErrMsg()) scala.MatchError: ErrMsg() (of class ErrMsg) at Msg$.message(<console>:16) ... 33 elided
sealedあり
こうすると、コンパイルエラーになるので安全。
sealed trait Msg case class TxtMsg() extends Msg case class ObjMsg() extends Msg case class ErrMsg() extends Msg object Msg { def message(m: Msg): Unit = m match { case TxtMsg() => println("Text") case ObjMsg() => println("Text") // case ErrMsg() => println("Text") } }
$ scalac test.scala test.scala:8: warning: match may not be exhaustive. It would fail on the following input: ErrMsg() def message(m: Msg): Unit = m match { ^ one warning found
【Scala】 sbt, activatorのproxy設定
環境 Scala 2.11.8 CentOS7.0
sbtやactivatorを実行してmoduleをダウンロードしてくるときに、proxyで引っかかる時の対策。
内部で実行されるjavaコマンドがproxyで引っかかってるので、起動スクリプトを編集する手もあるが、以下の環境変数を設定する事で解決できる。
export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"
これで実行可能になった。
~/.sbt/config/
に設定ファイルを作るとか、HTTP_PROXYを設定しておけばOKとか色々見かけるが、私の環境では上手く動作せず。
最終的にこの方法で無事動作した。
【参考】
【Scala】 空Listの表記
環境 Scala 2.11.8 CentOS7.0
なんか忘れるのでメモ
scala> val l1: List[Int] = Nil l1: List[Int] = List() scala> val l2 = Nil:List[Int] l2: List[Int] = List() scala> val l3 = List.empty[Int] l3: List[Int] = List() scala> val l4 = List[Int]() l4: List[Int] = List()
全部同じ
【tmux】 TPM(Tmux Plugin Manager)で現在の状態を保存
環境 tmux 2.1
Tmux、便利ですよね。
そんなTmuxをもっと便利にするTPMというプラグインマネージャー。
github.com
使い方
ほとんどマニュアルそのままだけど
まずTPMをgit clone
$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
そして以下のように.tmux.confに使いたいプラグインを記述
set -g @tpm_plugins ' \ tmux-plugins/tpm \ tmux-sensible \ tmux-plugins/tmux-resurrect \ tmux-plugins/tmux-pain-control \ ' run-shell '~/.tmux/plugins/tpm/tpm'
そしてtmuxを起動してprefix + I
でTPMがプラグインをインストールしてくれる。
最後に.tmux.confをリロードすれば完了。
現在の状態を保存するtmux-resurrec
で、もともと何をやりたかったかというと、ウィンドウやペインの状態は大体いつも同じ配置なのに、tmuxを終了すると再設定するのが大変という事で、状態を保存できるものを探してたどり着いたのがこちら。
ウィンドウとペインの状態をローカルに保存するので、PCを終了しても再度同じ配置に復元できる。
使い方は
状態の保存
prefix + Ctrl-s
状態の復元
prefix + Ctrl-r
とコレだけ。素晴らしい。
また復元するプログラムはデフォルト
vi vim nvim emacs man less more tail top htop irssi mutt
と設定されているが、
tmux-resurrect/restoring_programs.md at master · tmux-plugins/tmux-resurrect · GitHub
にあるように.tmux.confに以下のように記述すれば
set -g @resurrect-processes 'ssh psql mysql sqlite3'
他のプログラムも復元可能。
ちなみにsshでログインした先のサーバで開いていたプログラムもなんとか復元できないものかと、試行錯誤してみたがさすがに無理っぽかった。
素直にログイン先でtmux-resurrecを使う事にする。
そこを抜いても、十分に便利なのでオススメ。