JetBrains社が開発している Java VM や JavaScript 上などで動く、型の強いオブジェクト指向プログラミング言語。 以下の項目を設計目標に掲げている。
エラー防止の機能はよく働いており、Javaですっかりおなじみ「ぬるぽ」ことNullPointerExceptionがこの言語では意図的にプログラミングしないと出てくれないらしい…。
テストかくあるべし、という壮大な話ではなく ただの自戒的なメモです。 テストコードを作成するタイミング なるべく後回しにしない テストコードを書くのは地味に時間がかかります。 かといって「自動テストは別ブランチで作るかぁ」と後回しにするのは良くないです。 クロスレビュー時に、軽微なミスが指摘されたらめっちゃ恥ずかしいです。 そもそもバグを早期検出する仕組みとして自動テストが存在するので、 「開発 + その動作を担保する自動テスト」をセットで用意するべきだと思います。 成果物にきちんと責任を持つということです。 テストコードを書くときの観点 期待する動作を明確にする 大抵のテストは、「入力に対し…
Kotlin でのアンラップの仕方をメモしておきます。 結論 こんな感じで、Swiftの if let っぽくアンラップできる。 var name: String? = "" name?.let { println(it) } また、null合体演算子と組み合わせることで、デフォルト値と合わせてシンプルに値を取り出すことができます。 var name: String? = "" var forceName = name?.let { it } ?: "default" 参考 stackoverflow.com その他の記事 yamato8010.hatenablog.com yamato801…
本日も初歩的な内容ですが、Fragment のイベントを Activity で受け取る実装を行ったので、その方法をメモ程度に残しておきます🏃🏻♂️ それではやっていく Fragment 側の実装は下記のようになります。重要な部分は OnboardSignUpTermsOfServiceListener に関するところで、Activity に通知したいイベントを Interface として定義しています。OnboardSignUpTermsOfServiceListener のインスタンス化は、Fragment の onAttach() メソッドで行います。onAttach() メソッドは F…
明けましておめでとうございます! 今年も OPTiM TECH BLOG を宜しくお願い致します。 3回目の投稿になります。医療チームの山口です。 最近、緊急事態宣言により在宅用に持ち帰る開発用スマホ端末が増えて、ちびっ子による社用端末破壊の危険が爆上がりです。 今回の記事は 前回の記事 にて宣言した通り、Androidの着信通知についての続きになります。 疑問に思ったことを実際に動かして挙動を見てみましょう的な調査がメインです。 調査内容 調査内容は以下の4つです。 着信通知がでている間に通常の通知が来たらどうなるの? 通常の通知と着信通知を同じタイミングで一気に出そうとするとどうなるの? …
移植一覧に戻る やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com ベースになっているバージョン: tag:51 のあたり メモ Java版 からコピーしてきて修正してできあがり。3日くらい。 Kotlin は仕事で少しだけ使って、あと少し前に 「標準入力を読んで行ごとに処理」 と 「四則演算と剰余のみのexprコマンドをKotlinで作ってみた」 を書いたくらいのほぼ初心者 Java と Scala の中間みたいな印象 今回の実験は配列変数の宣言。 trial ブランチで試してみ…
viewModelScopeを使っている関数を持つViewModel 次のRecommendBookViewModelクラスは、loadRecommendBooks関数という内部でviewModelScopeを用いて非同期処理を行う関数を持っている。 import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import k…
TL;DR JMHのベンチマークスコアが安定しなかった (正確に特定はしていないが)全体の実行に5時間かかる内容であるため、途中でバックグラウンド処理が走った結果が原因と推定 start /affinity ${マスク} ${呼び出すプログラムと引数}とすることで、ベンチマークを実行するコアを限定することで、少なくともベンチマーク中のCPU使用率は安定すると思われる 本文 背景と課題 最近ProjectMapK/FastKFunctionとして、KFunction(Kotlinのリフレクションにおける関数)を高速呼び出しするライブラリを作成しています。 github.com qiita.com…
タイトル通りの内容ですが、地味に初めて知ったので備忘録として。 Dateクラスを例として 比較演算子はcompareTo()メソッドに変換される? 比較演算子は「compareTo()メソッド + 期待される値の範囲」の組み合わせに変換される
今回は小ネタ。Kotlinがますます可愛いという話をします。 Kotlin 1.4からsuspend conversion on callable referencesがsupportされました。 これ、Kotlin 1.4.0 にあげたらcompile通るようになった。リリース見てみたらSuspend conversion on callable referencesが1.4.0からsupportされるようになってる! 🎉🎉🎉🎉https://t.co/AKPymXsjms— Atsuko Fukui (@muumuumuumuu) 2020年9月25日 (^ もう数ヶ月も前のtweet..…
Kotlinを書いていて毎回忘れて調べてしまう内容で、自分にとって一番分かりやすかったものをまとめていきます。 目次 目次 文字列比較の早見表 ループ 複数の例外処理 Json Gson公式ガイド Coroutines 公式ガイド 公式 Kotlin Android Developers 文字列比較の早見表 qiita.com ループ with indexについては書いていない。 qiita.com 複数の例外処理 Exception で全例外を取っておいて型を調べればいいっていうのを忘れがち。 blog.beatdjam.com Json ライセンスの関係でGsonを使ったが使いやすかった。…
これは何 Kotlinで競プロするときに役立ったTipsを随時追記します。 Kotlinに関係のない競プロのTipsも含みます。 Tips 出力の高速化 大量に出力すると、場合によってはTLEします。 val ans = List(2_000_000_000) { 1 } ans.forEach { println(it) } 出力は繰り返さず、一回にまとめるとよいです。 println(ans.joinToString("\n")) List, Set, Arrayへの要素追加速度 プリミティブ型配列は要素の追加が速いので、使える場面では積極的に使うとよいです。MutableSetは要素追加…
MainActivity から異なるパッケージにある OnboardActivity に Intent を使用して画面遷移しようとしたところ下記のような Error に遭遇していました 👀 E/AndroidRuntime: FATAL EXCEPTION: main Process: YamatoOtaka.Fidee.debug, PID: 30741 java.lang.RuntimeException: Unable to resume activity {YamatoOtaka.Fidee.debug/YamatoOtaka.Fidee.MainActivity}: android.…
この記事は DroidKaigi 2020, day 1 17:00-17:40で発表される予定だった内容を書き起こしたものです。 droidkaigi.jp 他にも発表予定だった資料のAGENDAを1項目ごとに記事にして公開する予定です。 既存パラダイムとの共存 (この記事) ライブラリーと組み合わせる Activity/Fragmentで利用する ViewModelで利用する LiveDataとの使い分け 例外処理 キャンセル可能な作りにする テスト はじめに 既存パラダイムとの共存 RxJavaとKotlin Coroutines RxJavaをコルーチン内で使う コルーチンを使ってRx…
Gradle何も分からないけど、何とか動くようになったのでまとめておく。 [シェルスクリプトでE2Eテスト] [build.gradle.ktsでE2Eテスト] ▼Gradleタスクを定義する ▼ビルド時にE2Eテストを実行する [まとめ]
早いものでもう1年が終わろうとしています。 ということで去年に引き続き、今年のアウトプットから1年を振り返っていきます。 wrongwrong163377.hatenablog.com アウトプットまとめ まず今年1年で行った主なアウトプットです。 公開したライブラリ: 4つ 外部登壇: 1回 Qiita: 68本 はてな wrongwrongな開発日記: 9本(年内にもう1記事公開予定) 自作PC・PC周辺機器他ハードウェア関連の話を書くブログ: 16本 会社の技術ブログ: 1本 以下いくつか抜き出して見ていきます。 公開したライブラリ この1年間はひたすらKotlin向けのマッピングライブ…
先週にLeetCodeのデイリーをやってて知らなかったことをメモ Kotlinにソートがあったことを知らんかった 今まで使う機会なかったしなぁ 公式ドキュメントを見たら結構色々できることを知った kotlinlang.org Merge Sorted Array Solution Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. The number of elements initialized in nums1 and nums2 are m and n …
高校二年生の時にとある選択をせまられました。 文系 か 理系 どちらを選択するのか選ばなくてはなりませんでした。 しかし、悩む余地などありませんでした。 なぜなら、数学が嫌いだったからです。 中学校まではある程度数学にもついていけましたが、高校に入ってからは数学についていくことができなくなり、成績もどんどん落ちて数学嫌いになってしまいました。 そのため私は迷うことなく文系を選択して、大学受験に臨みました。 その結果、とある大学の経済学部に入学しました。 その中で経済学や経営学などを学んでいくうちに現在の企業で時価総額で世界の上位にいるのはIT企業であることをしりました。 またこれからの世の中で…
現代のWebサービスは、次の3つのプラットフォームに対応づることが求められている。 ・ブラウザ(Webアプリケーション) ・Android ・iOS これらは同じやり方では作れない。 WebアプリケーションとAndroidアプリとiOSアプリの作り方は、考え方として近い部分は随所あるものの、基本的には大きく違うものです。 主な違い ・言語 ・非自動的処理を実現するAPIの使い方 ・日時を計算するAPIの使い方 ・UIを組み立てる方法 ・UIを更新する方法 ・リリースする方法 ・etc... プラットフォームごとに適した標準的なお作法や、仕組み上の課題・問題、それに対するベストプラクティスがあり…
こんにちは。虎の穴ラボのY.Fです。 虎の穴ラボでは定例でLT会を開催したり、毎週社内勉強会を実施したりしています。 (LT会の様子) www.youtube.com 今回の記事では日々技術習得に勤しんでいる、虎の穴ラボメンバーが興味を持っている技術についてご紹介したいと思います。 概要 10月〜3月までに取り組みたい技術についてアンケートを取りました。 アンケートを実施した理由は以下になります。 フルリモートになって誰が何に興味を持っているかわかりづらくなった 雑談での情報共有が減った 仕事で取り組んでいる技術もわかりにくくなった 周りの会話から漏れ聞こえてくるものも少なくなった 評価の一環…
今週は第48回を開催しました。引き続きKotlin Hands-onをすすめています。 前回の様子はコチラ↓ kdnakt.hatenablog.com [第48回の様子] [学んだことや疑問点] [まとめ]
こんにちは、スタメンでVPoE兼プロダクト部の部長 をしている小林です。 1月も前半が終わり、スタメンでは新しいチームやプロジェクトが立ち上がり、本格的に2021年がスタートしています。 昨年末に、CTOの松谷が技術を中心に「スタメン開発チーム 2020年の振り返りと2021年の展望」を投稿しましたので、私は組織面を中心に2021年の方向性をご紹介しようと思います。 現在のプロダクト部について プロダクト部は、2021年1月18日時点で、総勢26名となり、エンジニア、デザイナー、プロダクトマネージャーが在籍する「ものづくり」の部門となっています。 2016年、オフィスに一人で rails ne…
AWS Lambda用にshadow jarをビルドしてたリポジトリで、別のデーモンプロセス*1をDropwizardベースにすることにして依存関係やビルド方法などを書き換えていったところ、設定ファイルに書かれてるLog appenderが見えない、みたいなエラーが出て起動に失敗するという状況に。手元で./gradlew runしたときはうまくいくんだけどサーバにデプロイしたらダメ。 io.dropwizard.configuration.ConfigurationParsingException: /opt/myapp/config.yaml has an error: * Failed t…
新年の目標、全然まとまらない。ぐだぐだ。 [Podcast] [つくりおき] [今週のいいこと3つ] [各種タスク] [読書] [ソフトウェア開発] [囲碁] [まとめ]
前回に引き続きCoroutinesの単体テストの話です。 kotlinx-coroutines-testのDispatchers.setMainについて - sky’s 雑記 今回はrunBlockingTest[1]について取り扱いたいと思います。 ⚠理解が曖昧な状態で記述している可能性があります、間違いがあれば訂正お願いします。 環境 implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.20" testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.…
プログラミングを学び始めた人に伝えたいのは、 「とにかく理解が重要」ということです。 それに比べて暗記は重要ではありません。 なぜ理解が重要で、暗記が必要ないのか。 プログラミング関連の情報は、人が暗記できる量を超えている。 最低限のことを理解して、必要なことは必要な時に調べるのが現実的。 プログラミング中は、インターネットで検索できることを前提にしていい。 職業プログラマーも細かいコードの書き方は仕事中にインターネットで検索することが多い。 例えば「Python 日付 加算」や「Kotlin Exception throw」みたいに。 どのくらい理解すればいい? 「○○って何?」と聞かれたら…
1月も半分過ぎてしまったけれど、改めて2021年の目標、力を入れたいことをまとめる。 とはいえ、2021年はとても予測がつきにくい1年だ。コロナ感染が急拡大するリスク、不況で企業が次々に倒産するリスク、現実経済とかけ離れた株式市場が爆発するリスク、東京オリンピックの開催・中止それぞれのリスクなど、 何が起こるかわからない要因が多すぎる。 それを踏まえた上での、2021年の目標設定にする。 2021年の目標 2021年の目標は以下の3つ。 技術力を高めること 知見を貯めること 生き延びること ほとんど2020年の目標と変わらないが、3つ目を「健康に過ごすこと」から「生き延びること」に変えた。この…
バージョン この記事の目的 内容 gradle の buildscript で記述を共通化したい Convention Plugin を書く その他情報 歴史 リンク バージョン Gradle 6.8 この記事の目的 gradle で共通の設定をまとめたい場合にとれる方法について列挙。 実際どれがいいかについては今の利用状況によるので何とも言えないのでそこまでは書かない。 内容 gradle の buildscript で記述を共通化したい 自分の gradle プロジェクトで multi-project を採用しており複数の project が存在するとき、 buildscript で何度も…
ども、@kimihom です。 以下の本でまず Swift の言語を学んでいる。一通り読みきったので、Swift の感想を書こうかと思う。 コンパイルによる厳密性 最近、プログラミング言語全体でよく出てくる話が、コンパイルで事前にエラー把握し、エラーの起きづらいプログラムを書くことの有用性である。型を厳格に管理することで、実行時にエラーが起き辛いプログラムを書こうという流れだ。そんな中で、クラスの継承を使うのではなく、インタフェースを定義していく流れである。 Swift はこの流れを極めるに極めた言語だと感じた。一度定義した型に入れた変数を後で変えることはできない。 nil と int が入る…
Kotlinの Iterable#chunked が便利だな~と思っていた矢先、JavaでListを複数のリストに分割する機会があった。 検索すると独自の実装方法が上位に出てくるが、たぶんCommons CollectionsかGuavaに用意されてるだろうと思ったら、両方にあったのでメモ。 Kotlinのchunked Javaでの実装 Guava Commons Collections4 振り返り Kotlinのchunked Iterable または Sequence の関数。引数として数値を取り、その要素数ごとに分割した List を返す。 Iterable#chunked の戻り値は…
2020/12/01-2020/12/31のリリース内容を記載します。 今月の感想 アドベントカレンダーが非常にたいへんでした。アドベントカレンダーの振り返り記事自体はこちら。 nainaistar.hatenablog.com あと、10月から実施していただいたブログメンタリングも12月で卒業となりました。その振り返り記事もこちら。 nainaistar.hatenablog.com と、たくさん振り返ってきたこともあり、振り返り自体はたくさんしているので別途振り返ることはありません。 先月の話 先月までの目標 最強のテストエンジニアになる! まだまだ目標に悩み中です。 Javaエンジニアと…