いつブロ

いつまで続くか分からないブログ(仮)主に趣味やプログラミングに関するメモを書いています。

Kotlin勉強会に行ってきた

f:id:koichi0814:20150920122158j:plain
画像提供@backpaper0さん。ありがとうございます。
 
 
もう2週間も前の事ですが・・・
Kotlin勉強会に行って来ました。
connpass.com  
 

なんで行ったの?

Java8を知ってしまった今、Java7でAndroidの新規開発する気にもなれないし、
じゃあScalaはどうなの?と考えてみたけど、Scalaって難しそうなイメージがあるし・・・
そこにKotlinって言語がまもなくリリースされるという事を知ったので、
じゃあちょっと行ってみるかという感じでした。
 

1. Kotlinメジャーver.リリースを前に

www.slideshare.net
@yy_yankさん。
第2回関西Kotlin勉強会に参加&発表してきました - Javaプログラマーのはしくれダイアリー
 
そもそもKotlinって?

  • JetBrainsが開発するJVM言語
    JVM上で動く言語
  • null安全
    nullになりそうな場合はコンパイルエラー。(これは嬉しいかも)
    nullになる可能性のあるときに!!演算子(呼び名不明)を使うとNullPointerException発生。
  • ScalaとGroovyの良い点を吸収
    ただしScalaが使いこなせているならそっちを使えという公式見解。
  • IntelliJ IDEAに標準Bundle
    15からサポートされる。(今は14.1)
  • Android開発でも注目を浴びている
    Androidアプリ作ってる会社(有名所多い)はこういうのやってるっぽい。

その他、2015年の動向や日本での活動内容に触れられていました。
Kotlin全く知らずに参加したのでこういうのが最初にあって良かったです。
 

2. Kotlinのdata classへJacksonでデシリアライズしようとして苦労した話

@ngsw_taroさん。
 
TL上に資料とか出ていなかった&メモ残せていなかったので、
(Kotlinナントカおじさん)https://twitter.com/vreshetnikov/status/613487198801780736しか残っていません。。。
なので、ご本人のブログを参照ということでお願いします。
taro.hatenablog.jp  
 

3. KotlinでDoma

@backpaper0さん。
 
ほとんどDomaの話でした(笑)
私は普段からDomaを使っているので置いてきぼりにならずに済みました。
Kotlinでもaptが使えるライブラリがあるとのことで、
それを使った場合の思わぬ落とし穴の話が面白かったです。
資料はこちら。
 
KotlinでDoma  
 

4. Kotlinで関数拡張しちゃうぞ!

@s_kozakeさん。
 
DevLOVE関西の時のこざけさんをイメージして行きましたが、
なんかちょっと違う?どっちが本物?という感じでした。
この時は色んな方からツッコミがあって、あれ?あれれ?という感じで・・・
ブログはこちら。。(スライドの初版は速攻で非公開になっていたので第2版が載っています)
kozake.hatenablog.com  
明日も関ジャバで登壇されるとのことで、
どちらのこざけさんか楽しみです。
勝手にDevLOVE寄りじゃないかと期待しています。
kanjava.connpass.com  
 

5. LT

@takuji31さん。
 
飛び入り参加だそうですが、レベルが高くて付いていけませんでした。。
Kotlinの拡張ライブラリだそうです。

www.slideshare.net
 
 

余談

これを書きながら調べてみたけど、Scalaに対する誤解があったみたい。
簡単に書ける! postd.cc  
 
じゃあ、実務でも行けるの?と思ったら出来なくはないみたい。

www.slideshare.net
 
 
下書きのまま結構放置していたので駆け足で書きました!

現場のアーキテクチャの話を聞いてきた #Devkan

f:id:koichi0814:20150917061637j:plain
画像提供@753_nawaさん。ありがとうございます。

はじめに

平日にもかかわらず勉強会に行って来ました。
初DevLOVE関西です。
発表者の資料は順次アップされると思いますのでここで紹介しきれていない分はこちらを参照ください。
devlove-kansai.doorkeeper.jp
 
 

参加理由

聞くだけの勉強会はあまりオススメしていなかった自分がなぜ行ってみたかと言うと、
内容がSIer寄りっぽかったのと、Java界隈で有名なこざけさん(@s_kozake)を
生で見てみたかったというのが大きな理由です。
 
単に勉強会に参加してやった感だけ得たとしても何も残らないので
本当に行きたい勉強会を取捨選択するのが大事かなと思います。
 
 

1.レイヤードアーキテクチャを意識したPHPアプリケーションの構築 Updateバージョン

www.slideshare.net
 
PHPはこの業界に入って最初に覚えた言語だったのですが、
10年以上使っていないので最近のPHPってどうなん?という気持ちで聞いていました。
 
PHP3の頃しか知らなかったのですがPHPでもMVCをちゃんとやってると知って面白かったです。
Controllerが分厚くなるBad cake!やModelに処理を寄せるGood cake!の話や、
それだとModelが肥大化し過ぎてごちゃーっとなるから、 そこはControllerとModelの間にServiceを置いて各レイヤーの役割をはっきりさせると良いですよという話があって、
これはPHPに限らずやなーと思いました。
 
フレームワークの流行りはもうCakeではないという事も
長年離れていると知らなかったので、最近の技術動向が知れて良かったです。
 
 

2.とある現場のシステムアーキテクチャ

www.slideshare.net
 
こざけさん登場。
Twitterでよく見かける有名人が発表するということなので来てみました。
私が普段Javaを使った開発が多いので同じSI業界としての安心感もありました。
 
スライドがきっちりまとまっててとても見やすかったのが印象的でした。
普段から図表や文章をよく書かれているんだなぁと思いました。
自分がこういう事を考えるときに役立ちそうです。
 
アーキテクチャは様々な視点と品質特性から検討され、取捨選択により決定する」
この頭を使う部分がアーキテクトの醍醐味だなぁと思いました。
 
「UI層は柔らかい技術 ロジック・データ層は固い技術を」
「UI層に近づくほど技術変化が激しい。UI層とロジック層を分離した方針設計を心がけると変更に強いシステムになりやすい。」
確かにそうですね。
そもそもレガシーな開発環境では分離がやりにくかったので、
個人的にはJavaEE7のJSFなどは上手く分離出来るので開発し易いなぁと思っています。
(JavaEE8のMVCはどうなんでしょ?)
 
「オレオレフレームワークは存在そのものが悪いのではなく、その品質が一般的に悪いのが問題です。」
存在を否定されていなかったのでホッとしました。
業務要件が変われば適用範囲も変わるのでそのまま流用は禁物ですね。
 
30代前半から自称シスアーキを名乗って来られたというだけあって資料良し発表良しという感じでした。
 
 

3.私のアーキテクチャルディシジョン

前2つの発表は言語が読めていたので安心感があったのですが、
こちらは正直全く見当が付かなかったので期待していませんでした。
 
 
が、前2つの発表の総まとめ的な内容(事前打ち合わせあったの?と思ってしまうぐらい)
かつ、深く心に訴えかけられる内容でした。
良い意味で完全に期待を裏切られました。
(今回来て良かった。ほんまに良かった。)
 
「それアカンやろ!」と思う事は既にアーキテクトとしての芽が芽生え始めている。
が、それが独りよがりの「俺のディシジョン」になっていないか。
グサッと来ました。ここ。
 
発表に聞き入ってしまったのでメモが全然残せていません(笑)
@kazuhito_mさんのこちらのブログを参照ください。。
 
NBM2 - 勉強会行ってみた「現場のアーキテクチャの話をしてみませんか?」#Devkan
 
 
【2015/10/04 追記】
3つ目のスライドが公開されたのでリンクを貼っておきます。
(アップされたのは知っていたのですが更新を放置していました。。)

www.slideshare.net

英語の勉強会に参加

f:id:koichi0814:20150901234131j:plain Photography by Junichi Ito
 
今回は英語の勉強会に参加して来ました。
nishiwaki-koberb.doorkeeper.jp  
 
【小学生】2018年から学校での英語教育はどう変わるの?によると、
いよいよ小学校でも本格的に英語の授業が始まるそうですね。
 
思い起こせば中1から始まった英語の授業で最初から躓いたのは
小4の時のローマ字の所為だったかも知れません。
ローマ字≒英語と思っていたので、
なんで英語はローマ字みたいにはっきりしないんだろうと思っていました。
ローマ字と英語の違いというか文字と言語の違いをきちんと教えてもらっていたら
もう少し何とかなったんじゃないかと今更ながら思います。
(それぐらい分かるやろうと言いたい気持ちも分かります・・・)
 
そんな訳でローマ字脳で英語を学んだ為全く分からないのです。
でも仕事上英語は良く目にしますね。
 

英語を勉強したくなった訳

  1. 何となく仕事できそうに見える(カッコ良く見える)
    →コレに尽きます。
  2. 仕事で新しい事をやろうとしたらドキュメントが大体英語
    →使っているライブラリは英語圏で作られているし。
  3. 周りで英語をやっている人とやっていない人の2極化が進みつつある
    →どうせならやっている側に立ちたい。

そんなに必要に迫られている訳でもないし、
自分からは絶対勉強しないと思うので勉強会に参加して、
これをキッカケに継続出来たら良いなという感じで参加して来ました。
 

ストレスのない英語勉強会

英語の勉強会というとまず英語で自己紹介をして・・・という感じになることが多いですが、
そもそも英語が苦手なので英語で喋るなんて無理です。
この勉強会もそっち系かと心配していましたが、幸い英語で自己紹介がなくて良かったです。
 
その代わりというか各々どういう英語のレベルかテストするために、
Weblio語彙力診断テストをやりました。
 
f:id:koichi0814:20150905155427p:plain
 
凄い結果が出ました。
初めてやった場合と2回目で結果に大きな違いがあるようなので、
これがすべてではないと思いますが気にしない事にします。
それにしてもレベル2とか…
 

語彙力を高める

そもそも英単語を殆ど知らないので、
英文を日本語に置き換える事も大変で単語一つ一つを翻訳サイトで変換したり、
全文を翻訳したりして、恐らく間違っていると思われる訳から本来の意味を推測して・・・
という効率の悪い変換をやっていました。
その所為で目的の場所まで遠回りして時間が掛かる事も屡々。
 
語彙力を高める方法としてこんなサイトが良さ気という事を知りました。

 
この勉強会は勉強会後に感想などをgithubに書くのが通例なんですが、
そこに「語彙力を高める方法が結局分からなかった」と元も子もないコメントをしていたら
会場となったnilquebeの山本さんから「キクタンとかユメタンとかピーナッツが有名ですよ。」という事を聞きまして、
毎日お昼休みに近くの本屋で立ち読みした結果、自分にはコレが一番合ってそうでした。
電子書籍じゃない本は久しぶり。
しかもニューバージョンが出たばっかりとか。

当然文法も分からないので、単語の次はこっちかな。
I my me mine から始まってますからね(笑)安心です。

ユメブン0 中学総復習?高校入門レベル (アルク学参シリーズ)

ユメブン0 中学総復習?高校入門レベル (アルク学参シリーズ)

 
他にもこの勉強会をネットで知ったという英語学習サービスiKnow!の高橋さんから
ぜひサービスを使って欲しいという旨の連絡があったそうで、
こんなサービスもあるんだなぁと勉強会に参加したからこそ得られた事がたくさんありました。
スマホで出来るのが面白そうでした。
 

Rubyistは英語を使う

私は仕事柄Javaを使う事が多いんですが、
DBのカラム名やクラス名などにはヘボン式を良く使います(笑)
多分Javaだからという訳じゃなくて、SIerって英語よりヘボン式が多い気がします。(経験上)
ところがこの勉強会ではヘボン式のへの字も出て来ませんでした。
 
Railsアプリの拡張を通して、コミットメッセージや変数名、メソッド名に適切な英語を使おうというディスカッションをやったのですが、メソッド名の最初に動詞を持ってくるとuser.xxx?のようにしたときに分かりにくくなるとか、なるほどなぁと関心させられました。
 

手を動かしてこその勉強会

カンファレンス系の聴くのがメインの勉強会とは違い、
この勉強会は自分でやるので、また違った意味で学ぶ事が多いです。
私もそうでしたが初めての勉強会には西脇.rb & 神戸.rb
ハンズオン系の勉強会がオススメです。
もちろん何かに特化した技術のカンファレンスでもそれに興味があったら全然OKだと思います。
 

あわせて読みたい 

勉強会の内容は主催者のブログが一番詳しいので(そりゃあ当然)、
興味のある方はこちらもどうぞ。

blog.jnito.com

他の参加者のブログも参考になります。
ブログ初エントリー? gusto.taiyop.com

神山…有名過ぎ!
今回はお話するタイミングがありませんでした…
dany1468.hatenablog.com

勉強会の本編の前には初参加でも入りやすい昼食会があります。
終わったあとはそのままビアバッシュに移行して、そのまま本編の話題で盛り上がりました。 yoshi10.hatenablog.com

余談

今週のお題「いま学んでみたいこと」ということで、ちょうど良いエントリーになりました。

JavaでCSV出力するライブラリを色々探してみた

JavaCSV出力をする必要があって、自分で書くのは嫌なのでライブラリを探しました。
 
最初は、 Commons CSV を検討していました。
Commons CSVは暫く2007年ぐらいから開発が始まっていたようですが、
2014年になって漸くリリースされたライブラリで、
後発な分イケてるのかなーと思って眺めていましたが、
アノテーションで出力する列の指定などが出来なさそうなので却下しました。
 
やりたいのは Entity からサクッと出力する事なんです。
 
続いて見つけたのが、 Super CSV Annotation でした。
こちらは Super CSVアノテーションの機能をプラスしたやつでした。
これはイケそうだと思って検証していると、
ダブルクォーテーションで囲む設定が全項目に対して囲むかどうかしか出来ませんでした。
しかもヘッダーの項目も含めて囲まれてしまうという。。。
(間違っていたらすみません。)
 
ヘッダーはダブルクォーテーションで囲まずに、
データの部分だけ囲んで欲しいんです。
 
折角アノテーションで出来ると思ったのに、
直そうと思ったら Super CSV も直さなくちゃいけないのでこれも却下しました。
 
最後に見つけたのが、 OrangeSignal CSV というライブラリでした。
今度こそ!と思って検証に入りました。
 
このライブラリも Entity にアノテーション付けて出力できたり、
データの部分だけダブルクォーテーションで囲んでくれるようでした。
さらに数値かどうかを判断して囲んでくれるという・・・
と、思っていたのですがどこで見間違えたのか、それは出来ませんでした。
ソースもその部分がコメントアウトされていて未実装でした。。。
 
でもなかなか良さ気で使えそうだなぁと思っていたのですが、
ふと気が付くと、ダブルクォーテーションで囲めるのは、
データ項目全部か途中で改行などがあった場合の2パターンでした。
そして、空文字の部分も囲んでくれていました。。。
 
うーん、ちょっとそこは囲んで欲しくないなぁ。
CSV ってデータ連携に使ったりするので、
数値かどうかでダブルクォーテーションを付けるというのも疑問でした。
 
この列とこの列は文字列だから絶対にダブルクォーテーションで囲んで、
null や空文字のときは、ダブルクォーテーションで囲まないというのが理想でした。
 
幸いソースが綺麗だったで自分で改造して、理想的な CSV が出力できるようにしてみました。
 
プルリクも投げてみましたが、取り込まれるかどうかは別の話。。。
 
(顔のアイコンは出て来なくてもいいのに。。)
 
 
domagen で SQL から Entity を作ってその Entity をライブラリに渡してダウンロード。。。
みたいな使い方してます。

仕事以外でスーツを着た

f:id:koichi0814:20150611213429j:plain

スーツを着る場面といえば、仕事か冠婚葬祭ぐらいだと思います。
もし他にあるとすれば、何かの授賞式とか。
学生であれば入学式や卒業式や就職活動でしょうか。
 
私の場合は仕事も私服なので、本当にスーツを着る機会が少ないです。  
そんな私ですが、今回はGW中に冠婚葬祭以外でスーツを着ました。
※注 転職活動ではないです(笑)
 
どんな理由でスーツを着たのかというと、
会社訪問でスーツを着ました。
 
誤解のないよう繰り返しますが、転職活動ではないです。
 
個人的な会社訪問です。
 
 
いち企業に所属しておきながら全く取引の無い会社に訪問してみました。
そうです。一つ前に書いたAipoの開発元を訪ねて来ました。
 
SNSが発達しているので、会ったことはないけどお互い知っている・・・
ような感じだったのですが、新しいアプリの開発の話がしたかったので対面で話をした方が
やり易そうだったので今回の初訪問になりました。
Aipoリマインダーをリリースして6年、初めてAipoを使ったのが6年半前だったので、
今思うとそれまで訪問していなかったのが逆に不思議です。
 
というか、完全に個人的な訪問だったのに
気軽に訪問OKして下さって感謝です。
 
打ち合わせそのものは1時間ぐらいでしたが、
こちらのアプリの内容も熟知されていてとてもスムーズでした。
 
気になっている事の確認や今後のやり取りの仕方等々、
整理出来たので良かったです。
 
一人開発にはこういったモチベーションを高く保つ事はとても大切だと思いました。
 
 
普段の仕事でも、直接やり取りはしていなくても
エンドユーザーに会いに行ってみるというのも大切かも知れません。
仕様のニュアンスとか文章や人伝いだと伝わりにくいときってありますから。
でもそういう事やってのけるリーダーの人には今のところ会った事はありません。
工数が掛かりますしね!
(最後は話が逸れました。)

Aipo8への移行とAipoリマインダーの設定

www.aipo.com
 
4/8にAipo8がリリースされたので早速アップデートしてみました。
今回は7.0.2から8.0にアップデートしてリマインダーを設定し直してみました。
※注 Aipoリマインダーは個人で開発しているアプリでAipo開発元の正式アプリではありません。  

  1. http://free.aipo.com/update.html にアクセスして
    64bit版の aipo-update7.0.2to8.0-windows-x64.msi をダウンロードします。
     
    f:id:koichi0814:20150412101943p:plain  

  2. アップデートプログラムを実行する前にAipoが起動している事を確認します。
    Aipoのデータベースが起動していないとアップデートが失敗します。
    現在、開発元が対応中との事です。
     
    f:id:koichi0814:20150412102230p:plain  

  3. アップデートが完了するとこのようなフォルダ構成になっています。
    dpl8000フォルダが追加されました。
     
    f:id:koichi0814:20150412102558p:plain  

  4. 続いてリマインダーの設定を行います。
    先ずは、データベースにアクセス出来るように設定します。
    リマインダーを使用されている方にはお馴染みの設定です。
     
    f:id:koichi0814:20150412102747p:plain  

  5. pg_hda.conf をテキストエディタで開きます。
    図のようにリマインダーのクライアント認証設定を行います。
    ここでは、
     
    host all aipo_reminder 192.168.1.0/24 md5
     
    としました。
     
    f:id:koichi0814:20150412102936p:plain  

  6. postgresql.conf をテキストエディタで開きます。
    図のようにデータベースにアクセス出来るクライアントアドレスを設定します。
    ここでは、
     
    listen_addresses = '*'
     
    としました。
    全クライアントからアクセス出来るので、各々の環境に合わせて下さい。
     
    f:id:koichi0814:20150412103719p:plain  

  7. リマインダーの実行ファイルと同じ場所にある
    postgres_setting(Aipo6,7).bat をテキストエディタで開きます。
     
    f:id:koichi0814:20150412104149p:plain  

  8. 7行目のパスをAipo8用に設定します。
    標準のインストール先であればCドライブにインストールされているので、
    C:¥aipo¥dpl8000¥postgresql¥bin¥psql.exe に変更します。
     
    f:id:koichi0814:20150412110757p:plain  

  9. postgres_setting(Aipo6,7).bat をダブルクリックします。
    Aipo7.0.2でも使えていれば問題は発生しないと思います。  

  10. Aipo8のURLを確認します。
    8からパスが変更されいて、/aipoがなくなっています。
     
    f:id:koichi0814:20150412111430p:plain
     

  11. 最後にリマインダー側のURLを変更して終わりです。
    このURLを変更しておかないと自動ログインが出来ません。
     
    f:id:koichi0814:20150412111533p:plain  
     

最後に

今年はAipoリマインダーの大幅バージョンアップを予定しています。
このようにデータベースに直接アクセスしない方法で使えるようになる予定です。
現在はオープンソース版にしか対応出来ていませんが、
クラウド版にも対応予定です。(出来るかな?^^)
 
更新していませんが、最新のAipoリマインダーのダウンロードはこちらから。

www.vector.co.jp

NetBeansにNightly BuildのGlassFishを認識させる

f:id:koichi0814:20150410173034j:plain from https://www.flickr.com/photos/lezarderose/2467952736/
 
NetBeansをインストールすると、
GlassFishも同時に入れる事が出来ますが、
最近のGlassFishもアップデートが結構頻繁に行われているようなので、
正式版ではないNightly Build版を使ってみたくなりました。
 
NetBeansって正式版のGlassFishしか認識してくれないんですが、
やり方が分かったのでその方法をメモっておきます。
 
正式版でもないし、正式なやり方でもないので
何かあっても自己責任でお願いします。
 
 

1. 試した環境

 

2. どうやるのか

https://glassfish.java.net/ からGlassFishを落としてきます。
 
f:id:koichi0814:20150410174639p:plain
 
Nightly Buildsのタブを選びます。
 
f:id:koichi0814:20150410174913p:plain
 
directoryをクリック。
 
f:id:koichi0814:20150410174950p:plain
 
いきなりちゃちい画面になりますが、気にせず nightly/ をクリック。
このとき更新日付も忘れずに覚えておいて下さい。
 
f:id:koichi0814:20150410175708p:plain
 
更新日付でページ内を検索して、最新のものをダウンロードします。
今回は glassfish-4.1-b14-04_09_2015.zip でした。
 
f:id:koichi0814:20150410175839p:plain
 
ダウンロードして解凍したものを適当な場所に置きます。
MacNetBeansのインストール先に置いてみました。
 
f:id:koichi0814:20150410180145p:plain
 
早速、GlassFishNetBeansに設定してみましょう。
 
f:id:koichi0814:20150410180307p:plain
 
名前は適当に GlassFish Server 4.2 としました。
 
f:id:koichi0814:20150410180446p:plain
 
ダメでした。
認識してくれません。
 
f:id:koichi0814:20150410185916p:plain
 
正式版だとどうなるか見てみましょう。
 
f:id:koichi0814:20150410190102p:plain
 
Nightly Buildだけど公式サイトから落としたのに・・・と諦めたらおしまいです。
こうやります。
GlassFishのコアライブラリまで辿っていきます。
/Applications/NetBeans/glassfish-4.1-b14-04_09_2015/glassfish/lib/install/applications/__admingui/WEB-INF/lib/
 
f:id:koichi0814:20150410190147p:plain
 
名前を変えてやります。
console-core-4.2-SNAPSHOT.jar → console-core-4.1.jar
 
f:id:koichi0814:20150410190530p:plain
 
これで再度NetBeansで設定すると、上手く認識してくれます。
あとはこのまま設定を終わらせるといつも通りの方法でちゃんと起動もしてくれます。
 
f:id:koichi0814:20150410190821p:plain
 
名前で判断しているようです。。。
取り敢えずこれで夏頃のベータ版、10月頃の正式版まで一足先に最新のGlassFishで遊べます。

何かあっても知りませんよ。
くれぐれも自己責任で。