2014年4月10日木曜日

Vert.xでScalaのサンプルをとりあえず動かす

Vert.x が最近気になっているので、サンプルを動かすところまでやってみたいと思います。
Javaのサンプルでもいいのですが、多言語対応がウリの1つで、Scalaでも書けるということなので、せっかくだからScalaを使ってみたいと思います。

使用する Vert.x のバージョンは現在最新の 2.1RC3 を使います。

Vert.x のインストール


公式サイトの手順を参考に進めます。

2.1RC3のダウンロード後、解凍する。
$ tar -zxf ~/Downloads/vert.x-2.1RC3.tar.gz
$ ~/vert.x-2.1RC3/bin/vertx version
2.1RC3 (built 2014-04-02 10:07:26)

Scala モジュールのインストール


2.1RC3の時点では、 Scala は標準では使えず、別途言語モジュールとして提供されているようです。
詳しくは知らないですが、 Vert.x Module Registry
io.vertx~lang-scala~1.0.0
が登録されているので、どうやらこれのようです。

公式のモジュールマニュアルを参考にインストールしてみます。

$ ~/vert.x-2.1RC3/bin/vertx install io.vertx~lang-scala~1.0.0
Attempting to install module io.vertx~lang-scala~1.0.0 
Downloading io.vertx~lang-scala~1.0.0. Please wait... 
Downloading 100%
Module io.vertx~lang-scala~1.0.0 successfully installed 
Succeeded in installing module

どうやらインストールできたっぽい。

サンプルの実行


Vert.x ExamplesとしてサンプルがGitHubに公開されているので、 Scala の Route Match を動かしてみたいです。
$ git clone https://github.com/vert-x/vertx-examples.git
$ cd vertx-examples/src/raw/scala/
$ ~/vert.x-2.1RC3/bin/vertx run route_match/RouteMatchExample.scala
Failed in deploying verticle 
java.lang.ClassNotFoundException: route_match/RouteMatchExample.scala
 at org.vertx.java.platform.impl.ModuleClassLoader.loadFromModule(ModuleClassLoader.java:127)
 at org.vertx.java.platform.impl.ModuleClassLoader.loadClass(ModuleClassLoader.java:108)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at org.vertx.java.platform.impl.java.JavaVerticleFactory.createVerticle(JavaVerticleFactory.java:55)
 at org.vertx.java.platform.impl.DefaultPlatformManager$21.run(DefaultPlatformManager.java:1723)
 at org.vertx.java.core.impl.DefaultContext$3.run(DefaultContext.java:175)
 at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
 at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
 at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
 at java.lang.Thread.run(Thread.java:724)

Failed in deploying verticle 
java.lang.ClassNotFoundException: route_match/RouteMatchExample.scala
 at org.vertx.java.platform.impl.ModuleClassLoader.loadFromModule(ModuleClassLoader.java:127)
 at org.vertx.java.platform.impl.ModuleClassLoader.loadClass(ModuleClassLoader.java:108)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at org.vertx.java.platform.impl.java.JavaVerticleFactory.createVerticle(JavaVerticleFactory.java:55)
 at org.vertx.java.platform.impl.DefaultPlatformManager$21.run(DefaultPlatformManager.java:1723)
 at org.vertx.java.core.impl.DefaultContext$3.run(DefaultContext.java:175)
 at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:370)
 at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
 at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
 at java.lang.Thread.run(Thread.java:724)
module のインストールがうまくいってない気がしてくるエラーです。
http://vertx.io/mods_manual.html をもう少し丁寧に読んでみると、 lang-impl に書いてあることが参考になりそうでした。
~/vert.x-2.1RC3/conf/langs.properties を覗くと
groovy=io.vertx~lang-groovy~2.0.0-final:org.vertx.groovy.platform.impl.GroovyVerticleFactory
のような記述があり、これにならって Scala の設定も書けば動きそうな気がしてきます。

# ~/vert.x-2.1RC3/conf/langs.properties に以下を追加
scala=io.vertx~lang-scala~1.0.0:org.vertx.scala.platform.impl.ScalaVerticleFactory
.scala=scala

再度サンプルを実行。
$ ~/vert.x-2.1RC3/bin/vertx run route_match/RouteMatchExample.scala
Compiling route_match/RouteMatchExample.scala as Scala script 
Starting route_match/RouteMatchExample.scala 
Succeeded in deploying verticle
うまく実行されたので、 localhost:8080 を開いて動作を確認するところまでできました。


とりあえず動かすとこまでできたので、次はパフォーマンスの検証などしてみたいです。

2014年3月2日日曜日

画像に文字を上書きできるようなものを作ってみた

WEBにある画像の文字だけ書き換えたいなーってときに、一度保存してからペイントで編集して〜っていう作業が面倒だと思ったので、それっぽいものを作ってみた。


実は1年くらい前から公開してたのですが、放置してました。
デザインももっとマシにしようとは思いつつも手をつけてないので察してください。

どういうことができるかというと、

URLのパラメータをぽちぽち変更するのは大変だったので、JavaScriptで簡単なURLメーカーもつくりました。

機能しょぼいですが、クソ文字コラメーカーぐらいにはなるのかなーという気はします。
Twitter Cardsにも対応させた気がするので、Twitterでの画像展開もされるかも。