プログラミング

10進数からn進数への基数変換を行う筆算の数学的な理解

本記事では、基本情報技術者試験などでおなじみの「10進数からn進数への基数変換」の筆算に関して、あの計算で基数変換が行える理由を数式を用いて整理してみました。 なお、基数変換そのものや具体的な筆算の方法については、以下の記事などをご参照くださ…

Kotlinでビット操作

Kotlinでビット操作を行うときのメモ。 よく使うビット操作をユーティリティメソッドとして以下にまとめました。 object BitwiseOperation { // numのiビット目の値(0もしくは1)を取得する fun getBit(num: Int, i: Int): Int = (num and createMask(i, i)).…

MockKでモックオブジェクトが生成できない条件

Unit Testでダミーを用意するために、MockKでString型のモックオブジェクトを生成しようとしたところ、以下のエラーが発生しました。 io.mockk.MockKException: Can't instantiate proxy for class kotlin.String String型のモックオブジェクトが生成できな…

JUnit 5の@TestInstance(Lifecycle.PER_CLASS)を指定したクラスでのモックオブジェクトの生成とスタブメソッドの設定は別の場所で行う

JUnit 5 × Kotlinで@BeforeAllや@AfterAllを使いたかったり、Parameterized Testで@MethodSource用のstatic相当なメソッドを宣言したかったりするときなどは、対象のクラスに@TestInstance(Lifecycle.PER_CLASS)を指定します。 このアノテーションを指定した…

AndroidのActivityやFragmentで文字列と文字列リソースを一括して扱うためのsealed classの作成

Androidで文字列を扱う場合、以下の2パターンのいずれかであることが多いと思います。 クライアント側で定義した文字列リソースを使用する サーバー側から受け取った文字列を使用する これらをActivityやFragmentで一括して扱うために、以下のようなsealed c…

TabLayout + ViewPager2でScroll To Topを実現する方法

本記事では、現在選択されているタブを再度タップしたときに、タブ内のリストを先頭までスクロール(以下、Scroll To Topと呼びます)させる方法について記載しています。 なお、本記事の最後にサンプルコードのリンクを記載しているので、実行環境の詳細につ…

Swiftのextensionを利用してクラス名の衝突を解決する

iOSアプリのコードをいくつか見ていて、名前空間の扱いがKotlinとSwiftで異なり困惑する場面があったので、その解決方法に関する備忘録です。 名前空間とは Swiftではグループによるクラス名の識別はできない Nested Typeによる解決 extensionの利用による解…

KotlinではComparableインタフェースを実装したクラスのオブジェクト同士を比較演算子で直接比較できる

タイトル通りの内容ですが、地味に初めて知ったので備忘録として。 Dateクラスを例として 比較演算子はcompareTo()メソッドに変換される? 比較演算子は「compareTo()メソッド + 期待される値の範囲」の組み合わせに変換される

Kotlinでよく使う記法をSwiftで記述する方法

久々にiOSアプリのコードを書く機会があったのですが、「KotlinのあれってSwiftではどう書くんだっけ?」となる場面が結構多かったので、順次まとめていこうと思います。 Smart Cast nullチェックによる早期return when式 値に対応するenumの取得 Sealed Cla…

V8ランタイムに対応したGoogle Apps ScriptでGoogleカレンダーの予定をLINEに通知するスクリプトを書いた

Google Apps Scriptがいつの間にかV8ランタイムに対応し、新しいECMAScriptの構文が使えるようになっていました。 developers.google.com ちょうどGoogleカレンダーの予定をLINEに通知するスクリプトを書こうと思ったタイミングでこのことに気づいたので、新…

<merge>タグ内のレイアウトのプレビューを適切に表示する方法

タイトル通りの内容です。 結論から言うと、<merge>タグのtools:parentTag属性に追加先のレイアウトのLayoutを指定すればOKです。</merge>

asyncAll()という拡張関数を作ってKotlinのリスト操作の中で並列処理を実行する

前回の記事でawaitAll()を使ったリスト操作の中で並列処理を実行した結果の待ち合わせについて書きました。 tkhs0604.hatenablog.com その中で、並列処理を実行するときに毎回map { async { hoge() } }と書くのは辛いと思ったので、asyncAll()という拡張関数…

Kotlinのリスト操作の中でCoroutinesのasync()で並列処理を実行した結果を待ち合わせる方法

タイトルが非常に分かりづらくて申し訳ないです🙇‍♂️ Kotlinのリスト操作の中でネットワーク通信のような時間のかかる処理を並列に実行したい場面があったのですが、Coroutinesを使ってその結果を待ち合わせる方法が最初分からなかったので、本記事はそのメモ…

OSバージョン間の差分を考慮したAndroidのThemeの定義方法

OSバージョン間の差分を考慮したAndroidのThemeの定義方法について整理してみました。基本的にはAppCompatライブラリの定義方法を参考にしています。 Themeについては以下の公式ドキュメントをご参照ください。 developer.android.com 以降は、Android 7.0で…

AndroidでHaptic Feedbackを実装する

本記事では、iOSではおなじみのHaptic Feedback(触覚フィードバック)をAndroidで実装する方法について記載しています。 「Android Dev Summit 2019」の動画で実装例が紹介されていたので、こちらを参考にしました。 www.youtube.com Haptic Feedbackについて…

ディスプレイにおける解像度の話

解像度についていろいろと調べてみました。 解像度の表し方が分野によって異なることが調べていて分かったので、本記事ではPCやスマートフォンのディスプレイにおける解像度についてだけ取り扱います。 なお、本記事は各用語の大まかな意味を理解することを…

ConstraintLayout下でlayout_widthにwrap_contentを指定したTextViewが制約を無視してはみ出すときの対処法

(タイトルが長い…笑) 以下のようなレイアウトを作成するときにハマった話です。 左右に可変テキストがあり、テキストが長くなって画面に収まらなくなるときに左側の可変テキストの末尾が省略される仕様を想定しています。 (余談ですが、Layout Editorではand…

Dartのコンストラクタの書き方

最近Flutterの勉強を始めたのですが、Dartのコンストラクタの書き方が今まで触ってきた言語(主にKotlin、Java)に比べて少しとっつきにくく感じたので、基本的な部分を整理するために書いている記事です。 内容としては、主に以下のページから関連する箇所を…

ターミナルでzshにPATHを通す方法

macOS Catalina以降でデフォルトのシェルがzshになってからPATHを通す作業を初めて行ったので、備忘録を兼ねて。 なお、MojaveなどからOSアップデートした場合はデフォルトのシェルがbashのままになっているようですが、公式サイトにzshへの変更方法が記載さ…

ConstraintLayout下でGroup指定したViewのvisibilityは個別には変更できなくなる

分かってしまえば確かにその通りなのですが、地味にハマってしまったのでメモ。 ConstraintLayout下でGroup指定したViewのvisibilityは個別には変更できなくなるので気をつけてくださいという話です。

Data BindingライブラリのBinding Methodについて

AndroidのData BindingライブラリのBinding Methodに関する記事がなかなか見つからなかったので、簡単にですがまとめてみます。 Data BindingライブラリやBinding Adapterについては公式ドキュメントなどをご参照ください。 developer.android.com

BottomSheetをフルスクリーン状態で表示する方法

タイトルのような実装を行う機会がたまにあるのですが、毎回やり方が分からなくなっている気がするので、メモとして残しておきます。 結論から言うと、以下の対応をソースコード上で行うことによって実現できます。

UIの文言の決め方とOOUIの話

Webサービスの開発をしていて、UIの文言について悩むことはありませんか? 個人的には、あるボタンのラベルを名詞か動詞のどちらにするべきかで悩むことが多かったです。 そんなときに「他のサービスでもこうなってるし、xxがいい気がする」などと経験則に基…

KotlinでCustom Viewを作成するときのコンストラクタの書き方

KotlinでCustom Viewを作成するときのコンストラクタの書き方がよく分からなかったので、これを期にKotlinのコンストラクタとCustom Viewについて調べてみました。 Javaに慣れているエンジニアからすると、Kotlinのコンストラクタの書き方は若干とっつきにく…

「Kotlin Fest 2019」で発表しました!

昨日開催された「Kotlin Fest 2019」のLT枠で発表してきました! kotlin.connpass.com 昨年の「Kotlin Fest 2018」のときは「金沢アカペラタウン」というイベントに出演していて参加できなかったので、1年越しの悲願達成となりました。 まさか発表側として参…

「Bonfire Android #5」に参加しました

ヤフー株式会社(LODGE)で開催された「Bonfire Android #5」に参加してきました! yj-meetup.connpass.com 今回のテーマは「Jetpackとサービス」で、以下5件の発表がありました。 個人的にどうしても聞いておきたいテーマだったので、「ブログで感想枠」で申…

Kotlinで値オブジェクト用のクラス作成

見様見真似でKotlinで値オブジェクト用のクラスを作成してみたらいろいろと学びがあったので、そのメモです。 値オブジェクトの定義 自然数を表現するNaturalNumberクラス ①data class を利用したクラス宣言 ②initブロックを利用したプロパティのバリデーシ…

「集まれKotlin好き!Kotlin愛好会 vol.14」で発表しました

ウォンテッドリー株式会社で開催された「集まれKotlin好き!Kotlin愛好会 vol.14」で発表してきました! 卓球台もある最高のオフィスでした笑 love-kotlin.connpass.com 前回参加したのはクックパッド株式会社で開催されたvol.5でした。いわゆるつよつよな方…

GitHubにホストされているGitからの個人情報流出を防ぐために

※2021/5/13 追記 git filter-repoコマンドを使用する方法を追記しました。 言いたいこと GitHubとGitの設定によっては世界中の人々に意図せず個人情報を晒すことになるので、みなさまお気をつけください…‍♂️ プロローグ 私の元に1通のメールが届きました。内…

「Androidアプリ設計パターン入門」を読んで(その3)

今回の記事では、MVP(Model-View-Presenter)と呼ばれるアーキテクチャについて説明していきます。