Marginal engineer blog

マージナル エンジニア ブログ

Android Kotlin Kodeinを使ってみました。

こんばんは! 堀田です。
カープ負けましたね。。。
でも、明日はきっと勝ってくれると思います!
3勝2敗で本拠地広島で日本一になってくれると信じています!

何かと忙しく日が経ってしまいましたが
どんなに忙しくても月に1回は更新していきたいですね。。。

今回もKotlinネタです。 前回は、res/array.xmlにちょっとしたデータを管理するものを
題材にしましたが、assetsにjsonまたはxmlでデータを置くやり方もありますよね。

AndroidではDIライブラリとしては、Dagger2などが有名ですが、
Kotlinで書かれているDIライブラリにはKodeinというものがあります。
今回はKodeinも絡めて書きたいと思います。

AlbumのデータをJSONで定義したいと思います。
assets/data/album.json

上記データを管理するクラスを定義してみます。
DataManager.kt

各Activity、FragmentでInjectできるようにApplicationを定義してみます。

今回はMVPでAlbumsContract Interfaceを定義します。

以下がAlbum用Presenter、AlbumFragmentとBaseFragment、AlbumsAdapterです。

上記の様な感じです。。。

すみません。急に眠くなったので、今日はここまで。

次回は、Scalaネタを書こうと思います。
それでは。

Android Kotlinで楽しく楽々開発①

こんばんは〜
飲み会の予約を取りに行ったついでに、月曜日からそのお店で
ビール一杯飲んで、焼き鳥を食してしまった堀田です。

弊社では少人数のためサーバサイドのWebアプリケーションからスマホ開発、サーバ構築などいろいろやらないといけません。
Android開発においては、Javaを採用するのは当たり前ですが、案件的に特に問題がなければ、 1年前のBetaの頃からKotlinという言語を採用しています。

Kotlinは開発環境のIntelliJAndroid Studio、PHPStormなどを開発しているJetBrains社が開発したプログラミング言語です。
JavaAndroid開発する場合、通常ではLambda式が使えないのでRetrolambdaを導入したりしていました。
ちなみにAndroid N以降であれば Lambda式が使用できるそうです。

Kotlinを採用すると、Lambda式はもちろん、Closure、Extensions、Delegate、Nullable等のモダンな機能が使用できます。
Scala同様型推論があり、必要のないところでは変数の型宣言が不要です。 また、Runtimeも小さいので、Android開発において最適な言語ではないかと思っています。
Kotlinについては、情報がたくさんあると思いますので、ぐぐってください。

今回はExtensionsを取り上げたいと思います。
RubyScalaJavascript、Swift等は既存クラスにメソッドを生やすことが可能です。 Kotlinで既存クラスにメソッドを生やそうと思う場合、Extensionsを使用します。

今回は、アルバム(CD)を管理するアプリを例に書きたいと思います。 Androidでは、よく固定の情報をres/array.xmlなどのリソースファイルなどで 定義したりします。
しますよね?

ResoucesからTypedArrayを使用してぐるぐるfor文でリソース情報を扱うのもいいですが、 KotlinのCollection機能を使用してクールな感じ?で扱いたいと思います。
それでは、TypedArrayにメソッドを生やしてみます。

それでは上記のExtensionsを使用して、リソース情報を管理するクラスを作成してみたいと思います。

以下は、AlbumsServiceを使用したRecyclerViewのサンプルです。

みたいな感じです。
Scala同様、Kotlinも勉強していきたいと思っています。

眠くなってきたので、今日はここまで。
それでは、また〜

PHP TraitがUseされているかをチェックする方法

カープ優勝おめでとうございます!!!
優勝の余韻に浸って、ブログを更新することを忘れていた堀田です。
弊社自社サービスにScalaを使用していますが、
実を言うと受託案件、DocGenerator、今月末にリリース予定のサービスは
PHPを使用しています。

PHP5.4以降、言語機能としてTraitが使えます。
TraitによりRubyScalaのMixinに比べて制限はありますが、
PHPでもMixinが可能となっています。

あるクラスで親クラス含め、あるTraitがUseされているかチェックしたい時って
ありませんか?きっとありますよね?

そういうValidationをベタで書くのもいいですが、共通化してみました。
名前は微妙ですが、無視してください。

弊社では、PHP案件にはCakePHP3をよく使用しているので、
namespaceは\App\Utilsとしています。

使用例としては、以下の様な感じです。

弊社ではこれからも言語は絞らず、その時々で最適なプラットフォームを
採用していきます!

酔っぱらいついでに更新しました〜
ではまた。

Playframework 小ネタ そのに

こんばんは

広島カープの事ばかり考えていたら、
ブログを更新することを忘れいていた堀田です。

今回もまた小ネタです。。。

都道府県情報(コードと都道府県名)を設定ファイルで管理したい場合、
playframeworkでは、application.confなどの設定ファイルに記述して管理できます。

そのファイルをScalaで読み込んで、Seq[(String, String)]の形式で情報を保持したいとします。 その場合、以下の様なコードでScala内に都道府県情報を保持可能です。

上記のものを使って、HTML内のselectタグを展開することやValidationなど可能となります。

ブログで書くことでもないですね 。。。
更新しないよりましということで。

では、また。

Playframework 小ネタ そのいち

こんにちは! はじめまして。

おとぼけエンジニアの堀田です。

あまり大層なことは書けませんが、本日よりぼちぼち更新していきます。

弊社では、自社サービスに一部、Scala+Playframework2+Slick3を採用しています。
当分は、Slick3で苦労したことやPlayframework2.4から2.5に移行した時にいろいろと戸惑ったことを 備忘録的に小ネタとして書いていこう思います。

今回はサーバーの状態を監視し、WebSocketを使用して、クライアントに通知する処理を 移行した時の内容を書いていこうと思います。

例えば、S3上にあるファイルが作成されたかを監視し、クライアントに通知したい時、WebSocketを使用して実現可能です。 (ChunkedとEventSourceを使う方法もあります。)
2.4まではPlayframework同梱のIteratee/Enumeratorを使用してごにょごにょとしていました。

以下のような感じです。

2.5からはIterateeは非推奨となり、Akka Streamsを使用することが推奨されています。 そのため、Iterateeに依存していたWebSocket.usingなどのメソッドも同様に非推奨となっています。

上記コードを2.5ベースに変更すると以下のようなコードになります。

S3のファイル監視については、AWS Lambda使用も考えられますが、 ひとまずは簡易に対応しております。

Akkaはまだまだ知らないことも多いので、 もっとフル活用できるようにしていきたいと思っております。

簡易ではありますが、 今後もこんなゆるい感じでぼちぼち更新していきます。

あ、忘れてた。。。(汗)
弊社サービスもどうぞ、よろしくお願いいたします!!

https://biograph.jp