CoroutineContextのお話

KotlinAdventcalendarの24日の記事になります。 今回はcoroutineのCoroutineContext/CoroutineDispacherについて書きたいと思っています。 サンプルコードなどが少なくなってしまったので後ほど詳しいものは上げたいと思っています...

CoroutineContextとは?

現在のJobなどの情報をもっているものです。 またlaunch/asyncを実行する時にCoroutineContextを引数に取ることができます。 こんな感じですね。

launch(coroutineContext){

  //do something…

}

また現在実行しているJobなどをcoroutineを実行する際に渡すことができます。(詳しいJobの説明 ) coroutineContextを使用して新しいcoroutineを生成すると、親子関係になります。 なので、子の中でも親のcontextを使用することができ、親がJobの実行を中断すると子のJobも中断されます。 詳しいことはこちらに載っています。

CoroutineDispatcher - kotlinx-coroutines-core

CoroutineDispacherとは?

coroutineの実行するスレッドを指定することができ、CoroutineContextに含まれているものです。CoroutineDispacherの指定には複数の方法があり、 指定の方法によってdispacherの動作が異なります。

Unconfined

A coroutine dispatcher that is not confined to any specific thread. It executes initial continuation of the coroutine right here in the current call-frame and let the coroutine resume in whatever thread that is used by the corresponding suspending function, without mandating any specific threading policy.

Unconfinedを指定すると、特定のスレッドの指定をしなく、そこに実行されているスレッドで実行することになります。

CommonPool

Represents common pool of shared threads as coroutine dispatcher for compute-intensive tasks. It uses java.util.concurrent.ForkJoinPool when available, which implements efficient work-stealing algorithm for its queues, so every coroutine resumption is dispatched as a separate task even when it already executes inside the pool. When available, it wraps ForkJoinPool.commonPool and provides a similar shared pool where not.


CommonPoolでは名前の通り、共有スレッドであるプール内で処理を行なっています。プール内では可能な時にwork-stealingアルゴリズムが使用されており、それぞれのcoroutineの再開処理などは別タスクとしてdispachされます。 ここでwork-stealing algorithmについて自分がよく知らなかったので調べてみました。 このアルゴリズムを使用しているのが ForkJoinPoolというものです。プール内の全てのスレッドがプール内にあるタスク(他スレッド・プールに送信されたタスク)を見つけて実行する仕組みになっており、サブタスクが多く発生される場合などに効率的な処理が可能になります。

またCommonPoolにCoroutineNameをつけることでPoolを作成する事ができます。

launch(CommonPool + CoroutineName("mycoroutine")){...}

work-stealing algorithmとは?

このアルゴリズムは並行処理などのスケジューリングのアルゴリズムなどに使用されているものです、 このアルゴリズムによって新しい実行プロセスを途中で生成することで、実行時間などを短縮することができます。 このスケジューラーの中では、それぞれのプロセスが連続して実行されるようになっていますが、実行途中で新しいプロセスを生成して並列に実行することもできます。

実行モデルの例

Work stealingは fork-join modelという並行処理に必要なモデルで実行されます。 forkとjoinを繰り返すことで内部で新しいプロセスを生成・実行し、joinすることで結合しています。

function f(a, b):
    c ← fork g(a)
    d ← h(b)
    join
    return c + d

function g(a):
    return a × 2

function h(a):
    b ← fork g(a)
    c ← a + 1
    join
    return b + c

f:id:sasamihoo:20171224165221p:plain

今回はCoroutineStartについても触れられなかったので、実際に実行してどのような違いがあるのかなど年末にまた書ければ良いなと思っています。 それでは良いクリスマスを!!

*引用: Work stealing - Wikipedia

Geek Women Japanアドベントカレンダー5日目 micro:bitのおはなし

Geek Women Japanアドベントカレンダー5日目の記事になります!
技術系の話をブログに書くのは初めてなので分かりづらかったらごめんなさい。。!
今回はmicro:bitについて紹介したいと思います!
私は全くハードに詳しくなく、ハードコワイ。。と思っていたのですが、micro:bitを触ってみてちょっと面白そうかもと思ったので共有させていただきます:)

micro:bitについて

micro:bitとはこの写真のようなポケットサイズのシングルボードコンピューターと呼ばれるものです。イギリスでは11,12歳の子どもたちに無償で配布されるものであり、子供向けのプログラミング教材に使われています。

f:id:sasamihoo:20171206010459j:plain

f:id:sasamihoo:20171206010528j:plain

実際にできること

実際とっても小さく、メモリ数も多くないため複雑なことはできませんが、様々な機能を持っています。 入出力端子もバナナクリップで挟めるようになっているのではんだ付けしたりせずに簡単に接続できます。

  • 地磁気センサー
  • 3次元加速度センサー
  • Bluetooth Smart Technology アンテナ
  • 入出力端子(19)
  • 温度センサー など

試しにやってみた

基礎

気温の表示

まず基本としてはここにアクセスし、オンライン上でコードを書くことが可能です。
scratchみたいなもので、ブロック単位でコードを書くことができます。
f:id:sasamihoo:20171206010812p:plain 試しに気温の出力をやってみました!
下のダウンロードボタンを押し、ローカルにファイルをおとします。 .dexファイルがDownloadsフォルダに入ると思うのでドラッグ&ドロップでmicro:bitプロジェクトにファイルを移します。 micro:bitが点滅し、書き込みが始まります。点滅が終われば書き込み終了です。

Aのボタンを押してみると。。!

気温が表示されていますね!部屋の温度は24℃でした

f:id:sasamihoo:20171206010721j:plain

発展

何かもっとライブラリを使用してやりたい!普通にコード書きたい!という場合に2つの方法をご紹介します。

Arduino IDE

iBeacon

主にこちらの記事を参考にさせていただきました。
https://ht-deko.com/arduino/microbit.html#10 Arduino IDEを使ってもmicro:bitに書き込むことが可能になります。
今回はこのライブラリを使用し、micro:bitをiBeacon化してみました!
https://github.com/sandeepmistry/arduino-BLEPeripheral/blob/master/examples/iBeacon/iBeacon.ino

②外部からのイベントの検知

ライブラリを使い書き込むことは可能ですが、前述のBluetoothモジュールを動かすだけでほぼメモリを食い尽くしてしまいます。
なのでmicro:bit側では複雑な処理はせずに、micro:bitのイベントを監視し、ボタンを検知したり、外部からLEDに出力させたりするだけにし、処理は別のところでやるほうが良さそうです。

Node.jsでイベントの検知

よく使われているライブラリとしてnode-bbc-microbitがあります。
使い方はまずmicro:bit側に用意されているdexファイルを書き込み、micro:bitの検知を可能にします。その後ライブラリを使用し、外部からmicro:bitに接続・操作する事が可能になります。
サンプルファイルがたくさんあるのでいろいろ試してみることができます! 私はled-text.jsを動かしてみました!
f:id:sasamihoo:20171206010834p:plain

さいごに

micro:bitを触ってみた所感としては、小さいながらもかなりいろんなことができるなーと思いました。
まだまだ触ったばかりなので、何か作って見たときにはまた記事にしたいなと思います!
ご覧いただきありがとうございました!

どこでもKotlin #3に参加してきました!

m3-engineer.connpass.com

今回はどこことに初参戦してきました! 会場はSpeeeさんのおしゃれなオフィスです。

f:id:sasamihoo:20171025152735j:plain

Kotlin(Deeplearning4j)で機械学習:VGG16モデルで犬猫判断

エムスリー Lukas Prasuhnさん

最初はLukasさんの発表でした! Deeplearning4jを用いて、画像から犬猫の判定をするという実装をKotlinを用いてやってみたというお話でした!

Kotlinでやるメリットとしてはsortmapが使える点・JavaであるとMapperを作って...という面倒なリストの操作が簡単にできるという点です。

そして今回Twitterを使用してProfile画像を判定し、Userごとの犬猫の割合をハッシュタグ付きでつぶやくものを作っており、とても楽しめました! 私はもちろん1位でしたw(猫なので)

special guest

今回special guestとして『Deep Learning』著者の方がいらっしゃっていました! じゃんけんで一人に本がプレゼントされました。羨ましいです...

Kotlin(Deeplearning4j)で機械学習:日本語でもKotlin

エムスリーキャリア 寺田 将規さん

次は寺田さんの発表で、これもDeeplearning4jを使用した機械学習のお話でした! kuromojiを使用して形態素解析を行なっていたとのことで、mecabしか使ったことがなかったので非常に気になりました!

実際のデータでやる際に、やはりデータベースがきれいでないとそもそも学習する部分が難しいというお話もありました。実際のデータで機械学習をしようするとなるとその部分は大変ですよね。

ことりんでAndroid ThingsかIoT系(仮)

FiNC Matthew Vernさん 3人目はMattewさんで、IoT×Kotlinについての発表でした!

まずkotlinのdataクラスで自己紹介を書いているのがいいですね! 家の電気のスイッチが遠いため、何とかしてベットから操作できないかという問題をIoTで解決しようとするものでした。

実装はFirebaseのRealtimeDatabase×architecture component×Android thingsでしたが、ちょっと大変?ということで、2つ目のtryはKtorで! でしたが、KtorはJava 8をdefaultでサポートしているので、Androidとはそのままでは使えず。。。

自分で指定してあげると、使用できるようになりました!

他にはActionsOnGoogleというものがあり、HTTPなどをtriggerとしてgoogle homeにfunctionを追加できるもので実装していました。

最後にデモの動画と、「寝るぞ!」で締めくくられました。

speakerdeck.com

Kotlin x SendGridでメール送信してみた

構造計画研究所 菊田 洋一さん

4人目は菊田さんのお話で、タイトルの通りSendGridでメール送信するというものでした。

kotlinでサポートしているkotlin-mailというものはありましたが、現在imapの機能しかなく... そこでJavaMail(Java EE 8リリース)をkotlinから呼び出せ..ました!

またメールサーバーを立てるのが大変..ということでインフラ周りの構築を簡単にしてくれるSendGridというものがあるそうです! SendGridではSendGrid Java SDKがあるそうなので、それを利用し、Web APIの方はFuelを使用し、良い感じに実装されていました。

サンプルコードもあるということなので後で見てみようと思います。

github.com

Kotlinで型安全なSQLを書こう

Retty 石田 憲幸さん 次は石田さんで、型安全なSQLについてでした!

Kotlinでアプリ用のAPIを書いているそうで、今回はdbからデータを取ってくるときにkotlinの恩恵を受けつつ(型安全で)呼び出したい!というお話でした。 Kotlin標準のパッケージJDBCを使えば柔軟にクエリは書けるが型安全ではない。

JPAやORMを使えばいいのでは?という話がありましたがテーブルが多い(992個?!)・小分けされたテーブル達・indexが謎/ない環境だと難しい... ということでQueryDSLを使用し、きれいにsqlがかけていました。 Expressionに拡張関数を使用することができる・infixでsqlっぽく補完できる点でKotlinで書くと良さそうです!

infix後で調べて見ます..(知らなかった) サンプルコードはこちら!

github.com

運用中のJavaプロジェクトにKotlinを導入した話

サイバーエージェント 木村 正弘さん 最後は木村さんで社内でのKotlin導入のお話でした!

それぞれの言語のメリット・デメリットを洗い出し、勉強会を開き、最終的にKotlinに決まったそうです。 議論だけでなく実習課題などで使ってみるというアプローチがすごいなと思いました。

サンプルコードを見てもKotlinはやはりスッキリ書ける印象がありますね!

導入にあたって決めたこととしては、

  • サブシステムとして独立させない
  • 既存JavaコードをKotlinに置き換えるということはしない
  • Gradleの導入はしない が挙げられます。

テスト書き換えのコストなどを考えると大変ですよね。。

developers.cyberagent.co.jp

懇親会

懇親会はお寿司でした!!!

いろいろな方とお話できてとても楽しかったです。話しかけるのが苦手なので話しかけていただいた方ありがとうございましたっ!

どここと初参戦でしたが、Android開発におけるKotlinの話が多いのかなーと思いきや機械学習・IoT・サーバーサイドなどにも運用されていてとても驚きました。

すてきな会場・ビール&お寿司をご提供くださりありがとうございました! 次回もぜひ参加したいと思っております。

最後に

参加ブログを書くということでもらっちゃいました! たろーさんありがとうございます!!

potatotips#41に参加してきました!

potatotips#41にAndroidブログ枠で参加してきました!
今回はヤフーさんの会場でした。イベントスペースの隣には話題のLODGEがあり、とてもオシャレな感じでした(今度行ってみたい)

f:id:sasamihoo:20170620225851j:plain

Android

Physics-based animation

qiita.com

@rkowaseさんによるPhysics-based animationの紹介でした。
Physics-based animationはGoogle I/O 2017 の Android Animations Spring to Life で発表された Physics-based Animations (物理ベースアニメーション)というものです。
たとえばspring animationではバネの伸縮が表現できるそうです。今回の例ではdroid君がばねでビヨンビヨンしている例が載せられていました。かわいいですね。
このバウンス・剛性の設定は変えられるようです。
見た感じでは物理ベースの方がなんとなく自然な感じがしました。
使い方はspring animationオブジェクトを生成してanimationをスタートさせるだけなのでシンプルですね。
そのほかのanimationの種類についても詳しく説明がのっておりました。

visual studio for mac でXamarin入門しました

speakerdeck.com

@kumamo_toneさんによるvisual studio for mapの紹介でした。
visual studio for Macが最近正式リリース(2017/05/12)されたとのことで、試しにXamarinを使ってみた感想・使い勝手などの紹介でした。
Xamarin Studioとほぼ同じような仕様になっており、Xamarin以外にも使えるそうです。インターフェースはmac風なのでmacを使っている人にとって馴染みやすくなっており、ただvimodeがないのは少し残念ですね…。
Xamarinについて使った感想としては、async/awaitが使えることで、通信部分がスッキリ書くことができるそうです。XAMLエディタについてはプレビューのみで手書きしなければいけない部分がつらいそうです。
その他の紹介としてXamarin Workbooksの紹介がありました。Markdownでドキュメントが書け、コードブロックごとにシミュレーターで実行していけるもので、(Jupyter Notebookっぽいと私も思いました)実際にデモで紹介していただけました。
オススメの書籍・web資料なども紹介されていたので、少し触ってみようかなと思いました!

icon fonts in XML

@a2kaidoさんのicon font in XMLについてでした。
アイコンをフォントとして表現できるもので、https://material.io/icons/にアイコンの種類などが挙げられていました。
良い点としては、svgなので軽いというのが挙げられます。
main/assets/material_icon.ttfにiconを配置し、カスタムビューを配置することで実現できます。
design tabで表示できないという問題点がありましたがsupport library26からはTextViewのなかでfont familyを指定できるようになっているので、その部分で指定してあげることできちんと表示することができます。
iOSの方でもresourceに配置し、labelの設定をすることで表現することができます。
iOSの画面でもドロイド君が(!?)表示されることが確認されていました。

AsyncLayoutInflator vs litho

speakerdeck.com

keithYokomaさんの発表でAsyncLayoutInflaterとLithoについてでした。
AsyncLayoutInflaterとLithoとどっちがinflateするのが早いのかということで実際に検証をしてみたというお話でした。
AsyncLayoutInflaterはxmlをbackgroundスレッドで生成してくれることで、UIスレッドがブロックされるのを防げるという利点があります。
Lithoに関してはjavaのコードで宣言的にlayoutを書いてくれるということでAsynchoronous layoutを使用しており、UIをmeasure/layoutする部分はbackgroundスレッド、描画の部分はUIスレッドでやってくれるものです。
今回の計測方法としては、1つのViewGroupの中に10,000のTextViewを入れ、inflateして時間を計測するというものでした。
AsyncLayoutInflaterのxmlはTextViewの羅列ですごい感じになっており、一方Lithoは宣言的に書けるのでスッキリとした感じになっていました。
1回目では、Lithoはscrollできるものの中に入れることを想定しているため、ものすごい計算を始めてしまい中止…
2回目では親にscroll viewを追加してあげて再勝負!
結果はAsyncLayoutInflaterが平均4秒、Lithoが平均20秒という結果になりました。
Lithoはまだbeta版なので今後に期待というところだそうです…!

Android Font Updates

speakerdeck.com

@uecchiさんでAndroid Fontについてでした。
Downloadable Fonts・Google phonts・font providerについてのそれぞれの紹介をしていただきました。

  • Fonts in XML

    • フォントをリソースとして利用できる!
  • Downloadable Fonts

    • フォントをfont providerを通じて取得
    • いいこと
      • apkを減らせる
      • インストール率の改善
    • 使い方
      • font familyからmore fontsを選択するだけ
      • コードからも呼び出せる
      • M以下のandroidではfont providerが落ちて使えない
      • Google fonts には有償fontが含まれない
  • Emoji Compat

    • Emoji Compat Libraryでシステムフォントに登録されていなく、tofuになったものを->絵文字に!
    • EmojiAppCompatTextView, EmojiAppCompatEditText,EmojiAppCompatButtonが用意されている
    • CustomView, TextViewでも対応することができる
  • まとめ
    • custom fontがよりお手軽に
    • apk(リソース問題)を減らすことが可能に
    • Emoji Compatでkitkat以上で最新の絵文字が表示可能に…!

swagger-codegenpojo生成

@kgmyshinさんはswagger-codegenについての発表でした。
swaggerをサーバーサイドに使用している場合、pojoを自動生成してくれるという便利なツールですね。
apiがネストしているときなどには大変便利ですね..!

Instant Apps

www.slideshare.net

@bina1204さんはinstance appについてのご紹介でした。 Instant Appsの使い方・実際の導入方法などを紹介していただきました。導入にあたり、update error -27というエラーが出た際の対処法・またapkファイルが4MB以下という規定についてもお話いただきました
android studio 3 canary 4にするとbuildできなくなってしまうという問題にぶつかっているそうで、どなたか解決された人を募集しているそうです…

自動テストが無ければDeviceFarmを使おう

androidの最後はToshiyuki Hirataさんで、テストの自動化についてでした。
テスト自動化ツールとして、代表的なものについて実際に検証し、比較してみたものに関してご紹介頂きました。

  • openSTF
    • テストコードがない
    • android monkeyテストツール(monkeyみたいなテスト….)
    • リモートデバッグができる
    • タッチイベント・モーションイベント
    • アプリ以外の部分も叩いてしまう(音量などを勝手に…)
  • AWS Device farm
    • ランダムにアプリを動かす(モンキーテスト)
    • Event count・event throttleを設定することができる
    • テスト結果
      • loginできなかった
  • Firebase Test lab/Robo
    • テストのタイムアウト
    • 最大深度の設定
    • カスタムログインを入れてくれる
    • テスト結果

loginを自動でテストするのはなかなか難しいんですね。。

iOS

App Startup Time Optimization and Monitoring

speakerdeck.com

@d_dateさんでWWDCにて紹介されていたApp Start Timeについての紹介でした。
去年から行われているセッションで、App Startup Time: Past, Present, and FutureOptimizing App Startup Timeなどで動画を見ることができるそうです。

UIテストコードの保守性を上げるリファクタリング

speakerdeck.com

@tobi462さんで、テストコードのリファクタリングでした。
コードを共通化することも大事ですが、共通化した結果どこでエラーが起きているかわからなくなっては調査コストがかかってしまいます。
今回はXCTAssertの指定をすることにより、fileとlineの指定・エラーの位置を変えることができるようになり、どこでエラーが起きているのか判定できるようになるそうです。これはUIテスト以外でも使えるそうです。

iOS で View 用に Entity を Struct に変換するってそれ Protocol で出来ることではないんでしょうか

qiita.com

@yimajoさんで、『iOS で View 用に Entity を Struct に変換するってそれ Protocol で出来ることではないんでしょうか』でした。
発表スライドに#potatotipsのtimelineがリアルタイムで流れており、スレイドの一部とかぶってしまい、一時会場が笑いに包まれていました(お寿司が流れてきた時の写真を収めたかった…)
structに変換する際にコストがかかってしまうため、protocolで解決できないのか?というお話でした。

Hashableを誤解していました

speakerdeck.com

@takasekさんで、HashValueについてでした。アルゴリズムをきちんと知っておくことで、実装においても正しい判断をすることができるというお話でした。
アルゴリズム図鑑というアプリがあるらしく、ダウンロードしてみたところそれぞれのアルゴリズムのフローが可視化されていてとてもわかり易かったです。

SwiftPM - コマンドラインツール入門

speakerdeck.com

Nonchalantさんで、アイコンの解像度書き出しツールについての発表でした。 解像度ごとにアイコンを書き出す作業を自動化してくれるツールをリリースし、もうすぐ1000starに届きそうとのこと…!! Homebrewからお手軽にインストールすることができます。
そしてSwiftPMの紹介がありました。SwiftPMはAppleが提供しているCocoaPodsのようなライブラリ管理ツールで、外部ライブラリを利用してコマンドラインツールも作成可能だそうです。
Package.swiftに具体的な設定ファイルを記述していくのですが、依存ライブラリも書くことができるので便利な点・swiftで書くことができるので、学習コストも低い点がよいとのことです。

How I struggle with SiriKit

speakerdeck.com

@tachibanakaoruさんでSirikitについてでした。実際にアプリでSirikitに対応する際に様々なつらみがあるそうです。
そしてAppleの担当の方も「僕達も困っている」らしいです…。

懇親会

今回はなんと美味しいお寿司を用意して頂きました!!! が、食欲のあまり写真を撮り忘れてしまったのでイメージ画像にて(ごめんなさい)

f:id:sasamihoo:20170620225231j:plain

前回に引き続きブログ枠にて参加させていただきました。 登壇者の方の様々なtipsを聞くことができ、とても充実した時間を過ごすことができました。 会場・美味しいお酒・お寿司を提供していただいたヤフーさん・登壇者の皆様・懇親会でお話ししてくださった方々・参加者の皆様ありがとうございました! また次回も参加できたらと思っております!

potatotips#40に参加してきました!

今回はこちらのイベントに参加してきました!

potatotips.connpass.com

会場はRettyさんになります。

今回はandroidのブログ枠で参加させていただきましたが、iOSの方の発表も下の方に少し載せてあります。。

Android

Modern Java Libraries with Kotlin

speakerdeck.com

Androidのトップバッターは@kobakei122さんの『Modern Java Libraries with Kotlin』からでした。
基本的にJavaのライブラリはKotlinでも使えますが、一部対応が必要なものがあり、それぞれの対処についての説明でした。
それぞれちょっとしたハマリポイントになりそうなのでとてもいいtipsを聞けてよかったです

Kotlin Reflection

qiita.com

hikaru_satohさんのkotlinのリフレクション機能についての説明でした。
kotlinの持つリフレクション機能としてはKClass,KPropertyの2種類あり、それぞれの使い方などを実際のコードで記述していてとてもわかり易かったです。

Instant App Tips

www.slideshare.net

Samさんからの、話題のinstant Appについてのtipsの発表でした。instance appについての仕組み・どんな機能が使えるのかなど、instant Appの全体をつかむのにとてもいいtipsでした。
個人的にはmoduleを4MBに抑えなくてはいけないこと、ContentProviderが使えないことに驚きを感じました。

フル Kotlin で Mastodon クライアントを作ってみて

qiita.com

@tomoya0x00さんからのkotlinについてのお話でした。
マストドンの話…!かと思いきやメインはKotlinを使った際のtipsがメインで多く紹介されていていました!
個人的にcoroutineを知らなかったので勉強になりました。非同期処理をサクッとできそうであれば便利ですね。
ActivityのExtraをlazyで取得するのもいいですね

「Lottie」でお手軽Animation実装

speakerdeck.com

Lottieを利用すればサクッとおしゃれなanimationが作れるよ!という@shanonimさんからのお話でした。Adobe After Effects animationをmobile nativeに読み込んでくれるので、Android/iOS/React Nativeで使うことができるそうです。
使い方は①Adobe After Effectsでanimationを作成し、②bodymovinでJSONに変換し、③最終的にアプリに組み込む(Androidの場合はxml<com.airbnb.lottie.LottieAnimationView />jsonファイルなどを定義するだけ)というシンプルなもので導入できてしまいます!
ただ発表でもあったようにAfter Effectsを誰が作るのかは問題になってきそうですよね。
lottie fileにサンプルがいくつか載っていて、とてもおしゃれです…!

Protocol Buffer

speakerdeck.com

Androidの最後は@takusenbaさんのprotocol bufferでした。
Protocol bufferとは通常json形式でクライアント・サーバー間のやり取りを行うところ、binary形式で行うことで通信が軽量化できるというものですね。
使い方はProto fileを定義した後、server・client側にシリアライズ・デシリアライズ用のファイルを用意する必要があります。client側では今回Retrofitを利用していました。
ツラミとしてはAPI変更時にファイルを書き換えないといけないこと・binaryなのでデバックしづらいということが挙げられます。
後のtwitterでこんなライブラリがあるとの紹介がされていました…!パケットを解析できるんですね。

github.com

こちらのqiitaにも詳しいことが挙げられていました!

qiita.com

iOS

Androidのブログ枠だったのですがiOSの方も資料などを少し載せてみました

どうしたらログがちゃんと管理できるのか?

speakerdeck.com

kosakoさんからの発表でした。
ログをjson fileに集約することで分析しやすくなるというお話でした。
ユーザーの行動分析などをする時にログが分散しているとやはり数字を取ってきづらいですよね…。
jsonだとログの意味も見やすくなるというのも分析するとなるといいですね!

ゲームアプリの「ドット絵」をディープラーニングで自動生成する

qiita.com DCGAN(Deep Convolutional Generative Adversarial Networks)というデータセットを読み込ませ、その特徴からありそうな画像を自動生成する技術を利用したお話でした!
今回はDCGAN-tensorflowを利用し、ドット絵を学習させて、ありそうな画像を出させようというものです。

シークバーサムネイル表示作成Tips

@satoshi0212さんからはサムネイル作成のtipsのお話でした!
動画の秒数のバーをクリックすると出て来るあれですね。
10秒ごとに1コマ再生しているため、全部を1つづつ取ってくると大変な事になってしまいます。そのためアトラス画像を取得し、そこから画像を取ってくることで軽めに実装することが可能になるそうです…!

Universal Links対応をした話

www.slideshare.net

@Ridwyさんからuniversal linksのお話でした。
universal linkを利用した時の挙動(起動する条件)・仕組み・実際運用してみた部分のtipsなど様々な観点からの説明があり、とても勉強になりました!

いまから使えるSpreadSheetView

speakerdeck.com

@jp_martha_jpさんからはSpreadsheetViewの紹介がありました!
merge cellsが使えるのは今現在このライブラリだけらしく、実際に簡易アプリを作ってみたものの紹介でした。
今度試してみようと思います。

lightweight dependency injection

speakerdeck.com

@motokieeさんで 最初にメルカリカウルについての説明がありました!
dependency injectionについてのお話でした。dependency Injectableを使って抽象化することで楽に書けるようになるそうです!
自分はあまり詳しくないのですが、これから勉強しようと思います…!

LicensePlist - A license list generator of all your dependencies for iOS applications (作ったCLIツールの紹介 + 開発Tips)

www.slideshare.net

最後は@_monoさんのLisensePlistについての発表でした。
LisensePlistはライセンス一覧を表示・自動で管理してくれるという便利なもので、今までライセンス管理の他のライブラリなどがありましたが、それぞれ対応していないものがあったりなど… 今回は全てのものに対応してくれるということで決定版だそうです

懇親会

懇親会ではRettyさんからピザの用意がありました!
とても美味しかったです。

何度かpotatotipsさんのイベントには参加していましたが、ブログ枠では初参戦でした。
なかなか聞くのに必死になってしまいあまりまとめた感じになりませんでしたが、とても充実したイベントでした!
懇親会などでも何人かとお話できて良かったです。
会場・ピザ・飲み物などをご提供いただいたRettyさん・登壇された方・参加者の方々ありがとうございました!
次回も参加したいなーと思っております!

droid girls meeup#5に参加してきました!


記事

大分遅くなりましたが、5/10日に行われたdroid girls meetupに参加してきました!
今回はtakahiromさんが講師で「material design animation」について教えてもらいました。会場はCyber Argentさんのおしゃれなオフィスでした🌟


最初にgoogleが提唱している「material design」ガイドについての説明がありました。
思っていたよりもガイドラインで規定されているモーションなどが細かい...!
遷移する時の速さ・弧の描き方など、実装例とともに説明されていてとてもわかり易かったです。

そしてdroidgirls恒例のもくもくタイム!
今回は、既に用意されているアプリに、かっこいいtransition・アニメーションを入れていくというものでした。既にアプリができているのでtransitionの実装に集中できます...!

最初はこんな感じで、猫の写真がランダムに表示されていて、それぞれの猫を押すと詳細画面に遷移するという感じですね。

Gyazo - 089cad101071416943885f4e3e1b2647.gif

 

課題は1から6まで用意されており、それぞれなかなか手応えのあるものでした。。
結局イベントでは5に入ったところで終わってしまいましたが、適宜分からない・詰まったところはtakahiromさんが直接見てくださったのでとても勉強になりました!!(始終聞きすぎてしまった感...)

最終的に5からの課題は家に持って帰ってから実装し、こんな感じになりました!
おしゃれですね...!

Gyazo - 2cc8782bfd3a35a34fa178f6d8c6067b.gif

6番のNavigation Transitionも頑張りました!

Gyazo - cb746f551933393b3e50ebc188dc35f0.gif


この課題の答えはanswerブランチにあるので、家でやっていて分からないときはちょっと見たりできるので自分やっててわからなくなってもなんとかなりました。
transition1つでアプリの印象がガラリと変わるんだなという印象を受けたので、これから頑張って学んでいきたいです!