u-ryo's blog

various information for coding...

Grape on Groovysh

| Comments

groovyshでgrapeを使ってlibraryを使いたい時がありました。

1
2
3
4
5
6
7
groovy:000> :i groovy.grape.*
===> groovy.grape.*
groovy:000> Grape.grab(group:'mysql',module:'mysql-connector-java',version:'8.0.11')
===> null
groovy:000> Grape.grab('mysql:mysql-connector-java:8.0.11')
ERROR java.lang.RuntimeException:
Error grabbing Grapes -- [unresolved dependency: groovy.endorsed#mysql:mysql-connector-java:8.0.11;2.5.0: not found]

versionも文字列でないとならないのに気を付けます。 いつもの'mysql:mysql-connector-java:8.0.11'の形式はダメでした。

@GrabConfig(systemClassLoader=true)はどうやってもダメっぽいので、 結局groovyshからのMySQL accessは諦めましたが。

参考: groovysh で Maven リポジトリにあるライブラリを使う

Drawing Rectangles on an Image for Groovy

| Comments

今まで、「画像を読み込んで線や図形を描く」というのはGroovyFXでやってたんですが、 JavaFXってheadlessで出来ないんですね!? びっくりポンです。 java.awt.headless=trueもそういやAWTなんですね。 うーむ、流石は廃止されるJavaFX、と思ったんですが、 どうせim4java使ってるなら、なんだImageMagickだけで出来るじゃーん、 ということに遅ればせながら気付きました。 ImageMagickってdrawも出来るんですね。

大体、以下の要領です。

  1. import org.im4java.core.*
  2. op = new IMOperation()
  3. op.addImage(...)で画像fileを読み込む
  4. op.fill('rgba(255,100,0,0.5)')等と塗り潰す色を指定
  5. op.stroke('white')等と線の色を指定
  6. op.draw('rectangle 0,10,30,30')で長方形を描画
  7. op.draw('text 0,10 ABCD')で文字を描画
  8. op.quality(80)で圧縮率(品質)指定
  9. もう一度op.addImage(...)で出力画像の名前と形式を指定
  10. new ConvertCmd().run(op)で実行

公式pageにありますけどね。

Ssh With Empty Password

| Comments

某ubuntu起動diskをmountして/etc/passwdのpasswordを潰して、 console login出来るようにはなったんですけれども、 sshでは入れません。 あーそっか、と思って、いい機会だからと後輩氏に課題として与えてみました。

新規user作って乗り越えてくれまして、それはそれで良い解だと思いますが、 /etc/ssh/sshd_configPermitEmptyPasswords yesでも行けるよー (このhostを繋ぐのは内部networkだし)、 と垂れて、試したところ、ものの見事に失敗。

あれー、なんでー?!

更に調べてみると、もう一つ施策が必要でした。

公開鍵なし/パスワードなしでSSHログインする設定にあるようにUsePAM noにするか、 PAMを使っているということなのでならばPAMでempty passwordを許容するように /etc/pam.d/common-authauth [success=1 default=ignore] pam_unix.so nullok_securenullok_secureを消す(Re: nullok_secure option)か、 ですがPAMいじるのは怖いですよねぇ。

Schedulers.newThread() or Schedulers.io()

| Comments

Robolectricでtestを書いていて、 どうも上手く行かないところがありました。 「上手く行かない」というのは「Test class内で(RxJava1系なので)RxJavaHooks.setOnIOScheduler(s -> Schedulers.immediate());しているにも関わらず、 test対象classでsubscriberが動いてしまう」というものです。

どうしてかなぁ、.subscribe(...)の中で.subscribe(...)してるからかなぁ、 RxJava のテスト(1): TestSubscriber, test(), TestSchedulerを見て、 じゃぁっていうんでTestScheduler scheduler = Schedulers.test();して何度かscheduler.triggerActions();しても現象変わらずでした。

悩んだ末、わかったのは、 test対象classでは.subscribeOn(Schedulers.newThread())していた、 ということでした。 なぁんだ。

そういえばちょっと前に書いたところだったので、 まだSchedulers.newThread()にしちゃってたんですね。 今回Schedulers.io()に変えました。 Androidでも効くんでしょうか。