eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

Thinkpad X1 Carbon 2018を購入~OSセットアップまで

セットアップ Ubuntuを基本にしつつ、Windows 10 Proを併用するつもりだったので、購入してすぐにいろいろ弄り倒す。 失敗1 初期セットアップ時にMicrosoftログインをしてしまった Users/<メアド>/Home ディレクトリになってしまう 任意のディレクトリ名にす…

ライブラリプロジェクトでFirebase SDKを使ったUnitTestを動作させる

なぜコレが必要か? Firebase SDKを組み込んだ処理は、通常 Google Services Plugin と google-services.json をアプリに組み込むことで動作する このPluginはApplicationビルド用のプロジェクトでしか動作しない ライブラリプロジェクトにFirebase SDKを組…

30代がエンジニアを続けるための第一歩

なにがあったのか 仕事や確定申告やアレやコレで寝不足だった それでも子どもは元気だった 子どもが保育園から病気もらってきてしばらく登園禁止になった それでも子どもは元気だった 確定申告も待ってくれなかった なにがおきたか 3週間ちかく風邪の症状に…

実質2日でDatastoreをFirestore移行した話

謝罪 ごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさい。 本番環境のFirestoreをONにしてしまったのは僕です。 何が起こったのか アプリから利用されるサーバーをGAE/Goで開発していた GCPプロジェクトは…

Androidアプリエンジニアが触れたAngularDartの所感

なぜWebアプリを作ることになったか Androidアプリ内でオープンソースライセンスを表示するためのUIが必要だった アプリとブラウザ両方からアクセスできるようにしたかった 規模が小さいため、Webアプリ開発の勉強としてちょうどよいので、作ることにした GA…

Swagger 2.0は枯れた技術か負債なのか

swagger 2.0 2014年にリリース 多くのソリューションで使われている メジャーで1つバージョンが古い かなりの数の言語で吐き出せる しかし対応ライブラリの選定が古い Android用の出力はVolleyが使われてるぞ swagger 3.0(OpenAPI) 最新!新しい! Kotlin用…

FlutterとXamarinとAndroid Nativeと

Flutter を使う機会があったので、所管をざっくりと。 個人的に思うFlutterを使う際に留意すべき点 Flutterのレンダリングは Skia ベースの独自エンジンで動いている Android的に言えば、どんな画面もView1枚である Plugin実装を読むと、 TextureId を取得…

AS3.2系から3.3系へのマイグレーション

graldeバージョン更新 before: gradle-4.10 after: gradle-4.10.1 google-services Plugin更新 3.2系ではGoogle Services Plugin 4.1 系じゃないと正常動作しなかったけど、3.3系では 4.2 系じゃないと正常動作しない。 同時に複数バージョンAndroid Studio…

GolandでGAE/Goのコードにブレークポイントを貼る

for Ubuntu root権限で /etc/sysctl.d/10-ptrace.conf を編集して、 kernel.yama.ptrace_scope = 0 に変更 -> 再起動 あとは普通にdebugアイコンでApp Engineを起動するとブレークポイントで止まる さすがに init() は止まらなかった

Kotlin Android-Parcelize拡張の後方互換問題を考える

Parcelize拡張概要 Androidアプリ開発者にとってメンドウな Parcelable の定形実装を自動化できる Annotationをつけるだけで、フィールドを全部Parcelableに突っ込んでくkれる 突っ込めないオブジェクトは警告が出る Annotationで除外を指定できる Example /…

Androidアプリのmicro-module設計

サーバーサイドの世界では、micro-servicesとか流行ってるね Androidの世界で、microな設計思想は取り入れられるのか? Androidアプリのmoduleはどこまで分けられるのか? Domain Bridge ドメインで定義したServiceの実装詳細を書く Factory どのブリッジを…

AndroidManifestやApplicationIDに記述されるPackage名にsnake_caseはアリかナシか

Package名の命名規則を、メジャーな形に統一したい プロジェクト内で統一したかった package.name.hoge.fuga package.name.hoge_fuga package.name.hogeFuga あたりの競い けど snake_case はLintで怒られる allword は単語登録が毎度必要になる cammelCase …

AndroidでWrite Once Test Anywhereは成功しなかった

経緯 JetpackにRobolectricが統合されたことにより、 @RunWith(AndroidJUnit4::class) にJUnit Runnerが統一された うまいこと実行できれば、CIで検証しやすくなる(Instrumentation TestをCIでやるのは金か手間か実行時間が必要) 駄目だった箇所 こういうE…

AndroidでKotlin1.3-RCへの移行を試みる

早期移行する理由 coroutinesのstable版へ移行したい 移行時の問題点を洗い出しておきたい 対応箇所 /build.gradle buildscript { // 本体とcoroutinesのそれぞれのバージョン // coroutinesは標準機能に昇格したが、Android(及びJVM)用ライブラリは別途配…

いつか書きたいMVVM/BFアーキテクチャの話

MVVM/BFによるAndroidアプリのClearn ArchitectureとDomain Driven Design導入 今年一番スッキリした設計パターン いつかアウトプットしたい いつだろうか? Toc MVVM/BF解説 各層の役割 Model ドメインやサブドメイン、Serviceなど、プラットフォーム非依存…

CircleCIの無料プランでメモリが足りずにgradleタスクが失敗する場合の対処

タスクを分割する 重いタスクがあったら、細分化してやる # 変更前(全タスクが一度に実行) ./gradlew test # 変更後(個別に実行) ./gradlew :app_domain:test ./gradlew :app:test config.ymlを見直す メモリ量は4GB以内で調整 environment: _JAVA_OPTIO…

Kotlinの拡張関数とUtilクラスの使い分け ver 2018.09

最初にやるべきこと Jetpack-KTXを探す 公式拡張関数を探す 拡張関数(プロパティ)を使う場合 単体で存続できるケースは拡張関数を許可する 仮にこの拡張関数が属するライブラリと離婚することになっても、この処理は容易に移行できる // DO val Context.de…

kotlin-coroutines 0.26.1での破壊的更新

coroutines 0.26.1の変更点 多くのクラスやトップレベルfunctionやプロパティがdeprecatedになった 変更から見える方針 トップレベルの関数やプロパティを、いずれかのobject等に所属させることが主な目的に見える 主なDeprecated UI, CommonPool 等の標準Di…

Google Play Services Gradle Plugin 4.1.0の問題点

既知の問題点 Gradle Pluginバージョンは com.android.tools.build:gradle:3.3.0-alpha10 google-services.jsonを検索しない 考えうる限りいろんなpathにおいたけど反応なし ログも --debug オプションで見たが吐き出されない 完全にnot workingらしい 4.0.2…

AS3.3 canary-11の問題点

問題点 Find Action(Ctrl + Shift + A)が正常動作しない たまに正常動作する だいたい正常動作しない Crash Reportが吐き出されてるので、どっかのPluginと競合している Reportは送った 以前はFlutter Pluginと競合していたので、uninstall済み Dartも怪し…

QRコードをスキャンする仕様で注意すべきこと

QRコードもカメラも物理デバイスである QRコードは対象物の物理サイズにも留意して作成する 小さすぎると、カメラに映ってもオートフォーカスが正常動作しない場合がある レンズが汚れていると更に辛い フロントカメラは概ね低スペックなので、バックカメラ…

VIVITA社に転職しました

FROM 以前のエントリーの通り、8月31日で TOPGATE社 を退職しました。 TO 9月1日から、 VIVITA 所属となり、子どもたちがアイディアを形にするための環境づくりを行います。 Androidアプリ開発やサーバー開発といった形で参加する予定です。 ほしいものリス…

CIや開発時のビルドタスク管理にfastlaneを導入した

導入前 shellスクリプトを必要に応じて書いていた どういうビルドタスクやスクリプトがあるのか、ドキュメントが面倒だった 導入した理由 ビルドタスクの一覧性を担保できる fastlane list でタスク一覧が表示される タスクを分類できる fastlane platform_f…

coroutines 0.24.x runBlockingの仕様変更と対策

変更されたこと runBlockingがUIスレッドからの呼び出しで例外を投げるようになった UnitTestの内部とかで使ったり、無理矢理coroutinesのChannelとかを待ち合わせる用途に使えなくなった 特にJVMでのUnitTestで使ってたので、全部死んだ // この呼び出しは…

Huawei P20 Proの所感

購入 / 選定理由 会社に開発端末(普段使いを兼ねる)を返却するにあたり、新規に端末が必要になった 選定で重視した点 ARCoreが使用できる 基本スペックが良い カメラ性能が良い 端末サイズは問わない 今まではサイコンにする兼ね合いからXperia Compact系…

TOPGATE社を退職します

今日社内で情報が公開されましたが、2010年から勤めていた TOPGATE社 を8月末で退職することとなりました。 トップゲートにいた7年10ヶ月 IT業界としては、かなり長く居たかと思います。 入社時点からAndroidがやりたくて転職して、基本的にはずっとAndroid…

Android Navigation Componentsのファーストインプレッション

本当に動くの? AS3.2.x系のNavigation Componentsは不安定で、だいたいNavigation Editorが正常動作しなかった AS3.3.x系でNavigation Components自体がExperimental機能として隠し扱いになった 今後もしばらくは不安定だと思う 末永く頑張っていただきたい…

Android Emulator(KVM/Ubuntu)でサウンドを有効にするとノイズが乗ることに対する対策

問題点 SMPlayerで動画を再生しながらエミュレータを起動するとプチプチとノイズが乗る コマンドラインからサウンド無効で起動する # ついでにCold Bootしたければ -no-snapshot オプションでできる emulator @your_avd_name -no-audio -no-snapshot Desktop…

Android エミュレータのAMD CPU(Hyper-V)サポートの所感

公式情報 android-developers.googleblog.com 書いてあるとおり、 Windows Hypervisor Platform を有効化しないと起動できない Hyper-Vを有効化しているだけだと、Hypervisorは有効化してない場合があるので注意 動作の感想 ちゃんとDocker for Windows環境…

システムレイヤーにOpenGL対応Viewを追加する

Manifest設定 システムレイヤーへの描画は専用のPermissionがある <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> WindowManagerでViewを登録 レンダリング用のViewとタップ用のViewを分けると設計が楽になる場合がある SurfaceViewは軽量だが、View移動ができない OpenGL側でViewportを調整してあげると</uses-permission>…