JJUGのLT会に行ってきた
JJUGのLT会に行ってきました。いつも薄い感想を抱いてこういうセミナーって終わっちゃうので、せっかくの機会なので感想をしっかり書いてみようと思います。ただし、書く気力が続いたら(現在、AM2:42)。
ピザとビールを片手にみなさんの発表を聞く会でした。ほんっっとどうでもいいですけど、カマンベールチーズが入ったピザが超おいしくて、また食べたいな〜なんて思いながら(そのピザの名前がわからない)書いてます。
freemakerの人(って私のメモには書いてある)
[Slide Shareとかに上がってませんでした]
timeleafと同系列で、freemakerなるものがJavaにはあるらしい。timeleafは知ってたけど、freemakerは知らなかった。Webデザイナーをしていた自分としては、React.jsとかと比較したときに、freemakerを始めとするJava系のテンプレートエンジンを使うメリットがよくわかりませんでした。どなたか詳しい方教えてください…
この前Webアプリの開発をしたのですが、そのときはSpring Bootとdurandal.jsを使ってやりました。durandal.jsにはknockout.jsも入っていて、HTMLを非常に綺麗に書けるのでとてもおすすめです。後継のAureria.jsが今後は主流になるみたいですけど…
JDBCでつながるSaasの世界
「ざっくりまとめると、CData JDBC Driversの宣伝」と私のメモには書いてあります。多分そうだったかと思います。SQLからTwitter API経由でツイートできちゃうんですね。ちょっと遊んでみたいな〜と思いました。
Javaとメールで遊んでみた話
私は金融業界の人なので、Javaでメールを送るという業務要求がありません。まず、Javaでメールを送れるということを知りませんでした(笑)。これ、便利ですね。ちょうど、社内で毎回同じような文面で送るメールを自動化したいな〜なんて思って、入力項目をコンソールで入力すると自動で文章を補完してくれる、みたいなプログラムを勝手に作って遊んでました。メールを送るところまで自動化できると、よりできることの幅が広がりますね。
Microsoft Cognitive Serviceと組み合わせて、メールの文面から感情を読み取る一連の作業をやってくれるデモもやってました。ただ、Text Analyticsとか諸々が結構Javaに対応してなくて、悲しい思いをする…というあるあるな話に妙に共感しました。最近はPythonばっかりですしね。なんでなんでしょう?
ArrayListをじっくり読んでみた
LTの中で一番おもしろかったです。ArrayListのSDKを真面目に読んでみた結果、発見できたことをシェアします、という話でした。ArrayListって普段よく使うんですけど、実際の実装ってほーとんど見たことないですよね。
ArrayListの実装ってめちゃくちゃ省エネしてるらしくて、たとえばインスタンス変数をローカル変数に置き換えて、後続の処理ではすべてローカル変数を使うようにして省エネしたり、値と参照と代入を同時に実行して省エネしたりと、数々の省エネ対策を行っているようです。また読んでみよ、と思いました。
JDIの話
これもArrayListの話と同じくらい興味深かったです。まず私の勉強不足だったのですが、JDI (Java Debug Interface) なるものがあるということを初めて知りました。これ、Eclipseとかのデバッグを起動すると実行されるやつみたいです。へー。
たとえば、JDIを使うとこんなコードが書けるらしい。Javaを実行すると数秒後に落ちて終わる、みたいなもの。
public class Main { public static void main(String... args) { Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("shut down hook") )); System.out.println("processed"); } }
これを実行すると、ランタイムを落とすことができます…云々、です。デバッガって普段何でできてるかを意識することはほぼないと思うのですが、JDIを見るとデバッガってこういうものでできてるんだ、ふーん!という気持ちになれるので、ちょっと読んでみることをおすすめします。
synchronizedの怖い話
あるあるすぎてまじ!!!!と叫びたい気持ちになりました。64コアとかの巨大CPUでsynchronizedすると、とにかく重い!しぬ!という話でした。Java の HashTable とかは、synchronized を使っちゃってるので気をつけましょう。ConcurrentHashMap とかを使うようにしましょう。
ちなみに、 Properties は HashTable を継承してしまっているので注意だそうです。知らなかった。