きしだのはてな このページをアンテナに追加 RSSフィード

2017-11-08(水) Thymeleaf3は2より3倍速く、JDK9では3割遅くなる

[]Thymeleaf3は2より3倍速く、JDK9では3割遅くなる 04:53 Thymeleaf3は2より3倍速く、JDK9では3割遅くなるを含むブックマーク

Thymeleaf3がどのくらい2より速くなってるか、あとJDK9のcompact stringは有利に働くかどうか、ベンチマークを取ってみました。

結果として、Thymeleaf3は2より3倍速く、JDK9では遅くなっていて、compact stringは関係なさそうという感じ。

あと、Pebble速い。(というかThymeleaf遅い)


まとめると、こう。単位はops/sで、大きいほど良い。

Thymeleaf cache on no cache
3.0.2 on JDK1.8 16378.948 376.295
3.0.2 on JDK9 11239.364 404.544
2.1.5 on JDK1.8 4621.328 1690.995
2.1.5 on JDK9 4185.943 1505.521
Pebble on JDK1.886571.846
Pebble on JDK9 79746.853

キャッシュなしだとThymeleaf2のほうが速いというのも面白い。

ついでにPebbleも試したけど、いずれにせよThymeleaf遅いな。


JDK1.8の設定はこんな感じ

# VM version: JDK 1.8.0_112, VM 25.112-b15
# VM options: <none>

JDK9の設定はこんな感じ

# VM version: JDK 9.0.1, VM 9.0.1+11
# VM options: <none>

compact stringをはずしてみたらこんな感じ

Thymeleaf cache on no cache
3.0.2 on JDK9 cs 11239.364 404.544
3.0.2 on JDK9 no-cs11502.128 383.660
2.1.5 on JDK9 cs 4185.943 1505.521
2.1.5 on JDK9 no-cs4175.685 1541.948
Pebble on JDK9 cs 79746.853
pebble on JDK9 no-cs87707.230

Thymeleafは差はなさそう。Pebbleはcompact string外した方が速くなってる。


no-csがcompact stringなしで、VMオプションはこんな感じ。

# VM version: JDK 9.0.1, VM 9.0.1+11
# VM options: -XX:-CompactStrings

ついでに、パラメータが英語だけの場合も試してみたけど、compact stringの効果はなさそう。en付のデータ。

Thymeleaf cache on
3.0.2 on JDK9 cs en12934.452
3.0.2 on JDK9 no-cs en12877.672
2.1.5 on JDK9 cs en4286.138
2.1.5 on JDK9 no-cs en4287.446
Pebble on JDK9 cs en83942.007
Pebble on JDK9 no-cs en92066.631

あと、テンプレートキャッシュが効かないと劇的に重いので、サーバーレスでやろうとするならテンプレートもプレコンパイルの仕組みが必要そう。


ソースはこちら

https://github.com/kishida/thymeleaf-bench

2017-11-06(月) 電子工作たのしー!ブラウザで回路シミュレーション。Arduinoも簡単

電子工作たのしー!ブラウザ上で回路シミュレーション。Arduinoも簡単 22:59 電子工作たのしー!ブラウザ上で回路シミュレーション。Arduinoも簡単を含むブックマーク

ブレッドボードを使った練習回路をちょっといじろうと思って、たぶんいいツールがあるはずだと探してたら、ブラウザで回路シミュレーションできるTinkercad circuitというのをみつけました。

https://www.tinkercad.com/circuits

f:id:nowokay:20171106132505p:image:w400


もともとはサンハヤトのキットでタイマーICを使ったブザーを作って、これをArduinoに対応させたかったのだけど、電子回路は不慣れなので、なにかシミュレーションできるツールを探していたのでした。


まずはそのままWeb上で動かしてみる。


それから、LEDを追加します。いろいろ試行錯誤して、結局トランジスタを使わないとダメだったので、これは実配線でやってたら絶対にできなかったなという感じ。

実際の回路はこれです。

https://www.tinkercad.com/things/3fwKikMQvyt


実装するとき、横着してトランジスタをそのままGNDに落としていて音がならなかったのだけど、修正してちゃんと音がなるようになりました。これも、最初から配線してたらわからなかっただろうな。


Arduinoもすごく簡単。スクリプトも、左側のブロックを組み立てるだけで自動的に記述されます。

回路はこちら。

https://www.tinkercad.com/things/6AJg7BYWND4


ただ、実際には、LEDとブザーを同時につなぐと音が出ませんでした。LEDの抵抗が大きいのかな


Autodesk circuitsがTinkercadに移行したものなので、この本とかが参考になると思います。

2017-11-04(土) OpenJDK/amberをビルドしてパターンマッチングの世界を体験する

[][]OpenJDK/amberをビルドしてパターンマッチングの世界を体験する 08:55 OpenJDK/amberをビルドしてパターンマッチングの世界を体験するを含むブックマーク

ほんとはjdk10をビルドしてvarの世界を体験するエントリだったのだけど、ここでバイナリが提供されたので、Amberの話にします。

Project Amberは、Javaにパターンマッチングを導入するプロジェクトです。

varによるローカル変数型推論もAmberの一部だったのだけど、これはjdk10に取り込まれました。jdk10はリポジトリ名で、実際のリリースがJDK10になるかどうかは不明です。


Amberのパターンマッチングがどうなるかというのは、以前ブログにまとめています。

http://d.hatena.ne.jp/nowokay/20170103#1483451037

で、これを試してみるために、ソースをビルドして動かしてみます。今回は、LinuxMacUbuntu on Windowsで試します。


Linux(Ubuntu)でのビルド

ソースをとってきて、ブランチを切り替えて、configureしてmakeというのがビルドの流れです。

ちなみに、OSと必要なライブラリなどあわせて15GBくらいディスクを使うので仮想環境では20GBくらいディスクをとっておく必要があります。ソースとビルド生成物はあわせて6GBくらい。


ビルドにはJDK 9が必要です。

~$ mkdir java
~$ cd java
java$ wget http://download.java.net/java/GA/jdk9/9.0.1/binaries/openjdk-9.0.1_linux-x64_bin.tar.gz
java$ tar zxf openjdk-9.0.1_linux-x64_bin.tar.gz

Mercurialをインストールします。

java$ apt update
java$ apt install mercurial

ソースをとってきて、patternsブランチに切り替えます。cloneは結構時間がかかるので、お風呂とか入るといいと思います。

java$ hg clone http://hg.openjdk.java.net/amber/amber
java$ cd amber
amber$ hg update patterns

今までのビルド手順だとget_source.shを動かしてソースをとってきていましたが、リポジトリ一本化によってcloneだけでよくなったみたいです。amber/amber10-oldなどだと古いパッケージ構成なので、get_source.shが必要のはず。


必要なパッケージをインストールします。

amber$ apt install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
amber$ apt install lib-cups2-dev  lib-freetype6-dev lib-asound2-dev

では、ビルドを。ビルドにはかなり時間がかかるので、ごはんの支度とかするといいと思います。

amber$ bash configure --with-boot-jdk=~/java/jdk-9.0.1
amber$ make images

configureのときに足りないパッケージはエラーメッセージで教えてくれるので、うまくconfigureできないときは確認してインストールしてください。


さて、ごはんもできたと思うので、おいしくいただきましょう。ついでにJShellも起動してみます。

f:id:nowokay:20171104075418p:image

というか、matches???聞いてないよーーー

matches、キーワードがどうなるかはともかく、かなりキモい仕様になっています。ということで、あとでこのあたりまとめてみます。

ここで試してないけど、ステートメントとしてのswitchもパターンマッチができています。いまのところ、ソースをみる感じswitch式については実装されてない感じです。

※ matchesが使えないときは、patternsブランチに切り替え忘れてないか確認してください。


Macでのビルド

Macでのビルドには、freetypeをインストールしてFreeType関係のオプションを指定する必要があります。

brew install freetype

configureはこんな感じ

bash configure --with-freetype-include=/usr/X11/include/freetype2 --with-freetype-lib=/usr/X11/lib --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home

※ 11/14 追記 XCodeをインストールしておく必要があるっぽい。XCode8が入ってたので大丈夫だったみたい。あと--disable-warnings-as-errorsをつけたほうがいいのかな。

macOSでOpenJDK(amber)ビルドするとエラーになってたのをクリアしてビルドした - Fight the Future


Ubuntu on Windows

Windows用のビルドがやりたかったのだけど、どうもVisual Studio Express 2010が必要ぽくて、インストールできなかったのであきらめた。

Ubuntuとほぼ同じだけど、makeとかが入ってないのでインストールが必要です。

~$ apt install build-essential

あとはUbuntuと同じ手順でいけるはず


プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

トラックバック - http://d.hatena.ne.jp/nowokay/20171104

2017-10-25(水) 成田から福岡への飛行機で見た夜景がどこだったか調べてみた

成田から福岡への飛行機で見た夜景がどこだったか調べてみた 10:08 成田から福岡への飛行機で見た夜景がどこだったか調べてみたを含むブックマーク

サンフランシスコの帰りに、成田から福岡の飛行機からずっと夜景が見えてて写真を撮っていたので、どこだったか場所を特定してみました。

思いのほか時間がかかってしまった。


名古屋を超えたあたり。四日市周辺

これが名古屋だと思っていたのだけど、名古屋は超えてた。鈴鹿あたりまではひとつながりの都市圏なんですね。

f:id:nowokay:20171008191211j:image

f:id:nowokay:20171016022928p:image:h400

地図は、対応させやすいように反転しています。


ちなみに、名古屋あたりは雲がかかってたので、場所の特定が困難。。。

雲がきれいに光っていて怪しい雰囲気でした。

f:id:nowokay:20171008190919j:image:w400


草津

琵琶湖の南の端です。

f:id:nowokay:20171008191732j:image

f:id:nowokay:20171016022929p:image:w400


京都

そして京都。これは空から見ても一発でわかりました。

下部の逆ハの字になってるところが西大路千本通ですね。その右の暗い中に点があるのは大文字山ですかね。

左の黒い四角が御所で、右上のちょっと暗い区画が二条城、上にいったところのひときわ明るいのが四条烏丸あたりではないかと。

f:id:nowokay:20171008191830j:image

f:id:nowokay:20171017010728p:image:w400


大阪

都会だ。向こうの右端、関空も見えてますね。これだとわかりにくくなってるけど、いったん暗くなった向こう側に和歌山も見えています。

空に明るく光ってるのは飛行機の翼端灯です。

f:id:nowokay:20171008192116j:image

f:id:nowokay:20171016022931p:image:w400

淡路島・徳島

暗いけど、左からのびてるのが淡路島の淡路鳴門自動車道で、そこにつながってる街が徳島ですね。

f:id:nowokay:20171008192832j:image

f:id:nowokay:20171016022932p:image:w400


高松

高松。

f:id:nowokay:20171008193228j:image

f:id:nowokay:20171016022933p:image:w400


倉敷

倉敷の面白い形の湾があって、そこから向こうの四国 丸亀に伸びてるのが瀬戸大橋です。

f:id:nowokay:20171008193420j:image

f:id:nowokay:20171016022934p:image:h400


福山

工場地帯だと思うのだけど、すごく赤かった。

f:id:nowokay:20171008193623j:image

f:id:nowokay:20171016022935p:image:h400


広島

広島です。

f:id:nowokay:20171008194257j:image

f:id:nowokay:20171016022936p:image:h400


厳島・岩国

どうしても「あまかいち」と読んでしまう廿日市市と、その対岸にうっすらと厳島、いわゆる宮島が見えます。その向こうに岩国があります。

f:id:nowokay:20171008194431j:image

f:id:nowokay:20171016022937p:image:h400


山口

ここが一番難しかった。海沿いを飛んでいると思ってて、宇部かなと思ってたのだけど、どうにも角度やサイズが違うなと思って、地図に定規をあてたりして航路から見えるところを探して、これは山口だと。

向こうにまっすぐ伸びる道、海の中をいっているように見えるけど、山に囲まれた262号線でした。

手前側の横に走るのが、9号バイパスと宮野線。そこから上側にいくと山口大学もぼわっと見えてます。

f:id:nowokay:20171008195021j:image

f:id:nowokay:20171016022939p:image:w400


宇部のこのあたりだと思ってしまっていた。けどちょっとスケール違う。

f:id:nowokay:20171016022938p:image:h300

(写真は逆転していません。)


菊川

謎だったのが、このすごく光っているところ。空港とか発電所とか悩んだけど、いろいろ調べて、関門菊川ゴルフクラブのナイターゴルフだろうということに。

f:id:nowokay:20171008195345j:image

f:id:nowokay:20171016022940p:image:w400


関門海峡

まんなかから左に切り込んでいくのが、関門海峡です。向こう側が小倉あたり、左の6角形になってるところは下関の彦島の公園ではないかと。

f:id:nowokay:20171008195549j:image

f:id:nowokay:20171016022941p:image:w400


雁ノ巣

そして海の中道をみながら着陸態勢に入りつつ福岡に。

f:id:nowokay:20171008201142j:image

f:id:nowokay:20171016022942p:image:w400


アイランドシティ

アイランドシティ。

f:id:nowokay:20171008201200j:image

f:id:nowokay:20171016022943p:image:w300


福岡

箱崎

f:id:nowokay:20171008201246j:image

f:id:nowokay:20171016022944p:image:h400


そして空港到着。おつかれさまでした。

f:id:nowokay:20171008202851j:image


※ 地図データはOpenStreetMapによるもので CC BY-SA 2.0 でライセンスされています。地図画像に限りCC BY-SA 2.0を引き継ぎます。 © OpenStreetMap contributors

2017-10-21(土) Windowsが起動しなくなったら結局 電源が壊れてた話

Windowsが起動しなくなったら結局 電源が壊れてた話 05:12  Windowsが起動しなくなったら結局 電源が壊れてた話を含むブックマーク

Windows 10でjdk10をビルドしようと思って、Visual Studio Express 2010とかインストールしようと思ってたら、VC++9.0が入らないっていいだして、2度目のインストールを試してみたところ、再起動したらWindowsが起動しなくなった。

なんかセットアップに失敗したかと思ったけど、セーフモードすら起動しない。


いろいろBIOSの設定を試してみたんだけど、OSブートのタイミングで落ちてしまう。

試しにUbuntuが入ってるHDDからブートしてみたんだけど、やっぱりダメ。

ハードディスクからのブートをやめてみても、ブートのタイミングで落ちてしまう。


最初はBIOSに変なデータが書き込まれたかと思ったのだけど、これはなんかハードウェアの問題だなと思いつつ、現実逃避に部屋を片付ける。

んで、とりあえずUSBをキーボードマウス以外全部抜いてみたら、Ubuntuが起動した(ブート順を変えていた)。

やっぱ電源が怪しい。


ということで、ヨドバシに行って電源を買った。ついでにテレビチューナーボード買おうと思って箱を持っていったら品切れっていわれた。品切れなら箱 置くなよ・・・

あと、NAS買った。

電源を入れ替えたら、無事起動。よかった。


Visual Studioインストール中の再起動だったので、Visual Studioが悪いと思い込んでしまっていた。

結局Visual Studioはインストールできてない。なのでjdk10もビルドできてない。


※ 10/24 同じ現象が再発したので、電源じゃないかも。