「プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ」を読んで

プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ」という書籍を読みました。

普段やっていることや考えていることに具体的な名前や研究結果があることを知ったり、自分の行動の中であまりよくなさそうな習慣を認識できたりと、とても学びが多かったです。
この記事では、この書籍で特に印象に残ったことおよびそこから感じたことをメモとして記録しておこうと思います。

余談ですが、原著のタイトルは「The Programmer's Brain: What every programmer needs to know about cognition」となっており、個人的には日本語のサブタイトルの方が要旨を捉えていると感じました。

続きを読む

2023年をざっくりと振り返る

本記事は、「mhidakaが2つ目を建立した Advent Calendar 2023」の24日目の記事です。
木曜の深夜あたりから体調を崩してしまい絶賛療養中なのですが、この企画を思い出してしまったので笑、ボーッとしながら書いています🤒この記事が公開される頃には全快し、クリスマス・イブを楽しめていることを願っています…🎄

あまり頭も回っていないので、この記事では私自身の2023年の出来事を淡々と綴っていこうと思います。

続きを読む

Navigation ComponentでNested Navigation Graphのrouteを指定してpopBackStackしたときの挙動

TL;DR

Navigation ComponentでNested Navigation Graphのrouteを指定してpopBackStackしたときは、inclusiveの値がtrue/falseいずれの場合もNested Navigation Graphから抜けることができる

続きを読む

最近始めたことたち

2022年に入ってから一度もブログを書いていないことに気付いたので、近況報告も兼ねて最近始めたことについて書いてみようと思います。
「基礎って大事だなー」と感じることが最近は多かったので、自分に欠けていると感じていることを基礎からやっていこうと思い、主に以下のことに取り組み始めました。

続きを読む

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

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

続きを読む

Kotlinでビット操作

Kotlinでビット操作を行うときのメモ。
よく使うビット操作をユーティリティメソッドとして以下にまとめました。

object BitwiseOperation {

  // numのiビット目の値(0もしくは1)を取得する
  fun getBit(num: Int, i: Int): Int =
    (num and createMask(i, i)).countOneBits()

  // numのiビット目に1をセットした整数を取得する
  fun setBit(num: Int, i: Int): Int =
    num or createMask(i, i)

  // numのiビット目を0にクリアした整数を取得する
  fun clearBit(num: Int, i: Int): Int =
    num and createMask(i, i, false)

  // numのiビット目を0もしくは1に変更した整数を取得する
  fun updateBit(num: Int, i: Int, shouldSet: Boolean): Int =
    if (shouldSet) setBit(num, i) else clearBit(num, i)

  // from〜toビット目が1(もしくは0)で、それ以外が0(もしくは1)となる整数を取得する
  fun createMask(from: Int, to: Int, shouldSet: Boolean = true): Int {
    require(from in 0 until Int.SIZE_BITS) { "from must be in the range of int bit size." }
    require(to in 0 until Int.SIZE_BITS) { "to must be in the range of int bit size." }
    require(from <= to) { "Incorrect indices combination. from: $from, to: $to" }

    val mask = (allOneBits shl (to + 1)).inv() and (allOneBits shl from)
    return if (shouldSet) mask else mask.inv()
  }

  // 全てのビットが1となる整数を取得する
  fun getAllOneBits(): Int = allOneBits

  private const val allOneBits: Int = 0.inv()
}

英文法を英語で理解するために覚えておいた方がよさそうな英単語

最近オンライン英会話に取り組んでいるのですが、英語で英語を学んでいると「日本語では理解できるものでも、英単語を1つでも知らないと文全体の意味が全く分からない」ことがしばしばありました。
特に、英文法について説明されるときに使われる英単語を知らないことで、何を指摘されているかが理解できないことが多かったので、本記事では英文法を英語で理解するために覚えておいた方がよさそうな英単語をまとめました。

なお、本記事は私自身の学習の進行に応じて随時更新する予定です。

  • 言葉の単位
  • 文の要素
  • 品詞
  • 文の種類
  • 時制
  • 能動態と受動態
  • 比較表現
  • 類義語と対義語
  • 発音
続きを読む

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

MockKでString型のモックオブジェクトを生成しようとしたところ、以下のエラーが発生しました。

io.mockk.MockKException: Can't instantiate proxy for class kotlin.String

String型のモックオブジェクトが生成できないことを知らなかったので、スタックトレースを辿ったところ、

io.mockk.proxy.MockKAgentException: Failed to create proxy for class java.lang.String.
class java.lang.String is one of excluded classes
at io.mockk.proxy.jvm.ProxyMaker.throwIfNotPossibleToProxy

とあり、String型のモックオブジェクトを生成する過程で、ProxyMaker#throwIfNotPossibleToProxy()内でMockKAgentExceptionがthrowされていました。

ProxyMaker#throwIfNotPossibleToProxy()の処理内容を整理すると、以下のいずれかの条件を満たすときにモックオブジェクトが生成できないことが分かりました。

続きを読む

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

JUnit 5 × Kotlinで@BeforeAll@AfterAllを使いたかったり、Parameterized Testで@MethodSource用のstatic相当なメソッドを宣言したかったりするときなどは、対象のクラスに@TestInstance(Lifecycle.PER_CLASS)を指定します。
このアノテーションを指定したクラスでのモックオブジェクトの初期化処理でハマったので、その内容を備忘録として残しておきます。

続きを読む

Figmaで「方向キーによる選択オブジェクトの移動距離」を変更する方法

Figmaでデザインを行うとき、選択したオブジェクトの位置を方向キーによって微調整することがよくあると思います。

このとき、デフォルトでは

  1. 方向キー: 指定した方向に1pt移動
  2. Shiftキー+方向キー: 指定した方向に10pt移動

という動作をしますが、昨今のデザインでは8ptを基準としたグリッドシステムを採用することが多いため、本記事ではShiftキー+方向キーを押したときの移動距離を8ptに変更する方法を紹介します。

続きを読む