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は開発環境のIntelliJ、Android Studio、PHPStormなどを開発しているJetBrains社が開発したプログラミング言語です。
JavaでAndroid開発する場合、通常ではLambda式が使えないのでRetrolambdaを導入したりしていました。
ちなみにAndroid N以降であれば Lambda式が使用できるそうです。
Kotlinを採用すると、Lambda式はもちろん、Closure、Extensions、Delegate、Nullable等のモダンな機能が使用できます。
Scala同様型推論があり、必要のないところでは変数の型宣言が不要です。
また、Runtimeも小さいので、Android開発において最適な言語ではないかと思っています。
Kotlinについては、情報がたくさんあると思いますので、ぐぐってください。
今回はExtensionsを取り上げたいと思います。
Ruby、Scala、Javascript、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によりRubyやScalaの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はまだまだ知らないことも多いので、 もっとフル活用できるようにしていきたいと思っております。
簡易ではありますが、 今後もこんなゆるい感じでぼちぼち更新していきます。
あ、忘れてた。。。(汗)
弊社サービスもどうぞ、よろしくお願いいたします!!