記録

主にAndroidアプリ開発に関する知見やその周辺に関わることについて記事をかいています

Kotlinで数値を単位付きの数字にする

仕事で開発をしていて、数値を次の要件のように単位表示することになった

要件

  • 1万未満はそのままの数値を表示(例:7,777)
  • 1万以上は単位をつけた数字として表示(例:770,000→77万)
  • 単位表示時に1桁の場合は小数点第1位まで表示(例:77,000→7.7万)
  • 4桁の場合は3桁のカンマ区切りを行う(例:77,770,000→7,777万)

技術的な要件

  • 複数の画面で利用したいのでLongの拡張関数にする
  • 単位文字は Context.getString(stringRes) で取得できる

実装

まずは単位をつけた場合の数値を文字列として返すようにする

fun Long.toUnits(): String {
    var num = this
    while ("$num".length > 4) {
        num /= 10000
    }
    return "%,d".format(num)
}

fun main() {
    println(7777L.toUnits()) // 7,777
    println(770000L.toUnits()) // 77
    println(77000L.toUnits()) // 7
    println(77770000L.toUnits()) // 7,777
}

これに単位表示1桁の場合の小数点第1位表示をつける

fun Long.toUnits(): String {
    var num = this
    var rem = 0L
    while ("$num".length > 4) {
        rem = num % 10000
        num /= 10000
    }

    val numString = if ("$num".length == 1) 
        "${num}.${rem / 1000}" else 
        "%,d".format(num)

    return numString
}

fun main() {
    println(7777L.toUnits()) // 7,777
    println(770000L.toUnits()) // 77
    println(77000L.toUnits()) // 7.7
    println(77770000L.toUnits()) // 7,777
}

次に単位をつけるようにしてみる

fun Long.toUnits(): String {
    val units = arrayOf("万", "億")
    var num = this
    var rem = 0L
    var index = -1
    while ("$num".length > 4 && index < units.lastIndex) {
        rem = num % 10000
        num /= 10000
        index += 1
    }
    
    val unit = if (index > -1) units[index] else ""
    val numString = if ("$num".length == 1) 
        "${num}.${rem / 1000}" else 
        "%,d".format(num)

    return numString + unit
}

fun main() {
    println(7777L.toUnits()) // 7,777
    println(770000L.toUnits()) // 77万
    println(77000L.toUnits()) // 7.7万
    println(77770000L.toUnits()) // 7,777万
    println(770000000L.toUnits()) // 7.7億
    println(7777770000000L.toUnits()) // 77,777億
}

だいたい完成したようなものなので、あとは単位文字を外部から受け取るようにする

fun Long.toUnits(units: Array<String>): String {
    ...
}

fun main() {
    val units = arrayOf("万", "億")
    println(7777L.toUnits(units)) // 7,777
    println(770000L.toUnits(units)) // 77万
    println(77000L.toUnits(units)) // 7.7万
    println(77770000L.toUnits(units)) // 7,777万
    println(770000000L.toUnits(units)) // 7.7億
    println(7777770000000L.toUnits(units)) // 77,777億
}

最終版

昇降デスク仙人になりました

前から欲しかった昇降デスクを大きい天板を使ってつくりました

昇降デスク仙人になるまでの修行の様子

はじめに以前まで使っていたL字デスクを解体して部屋を綺麗にしました

チェアマットも新しくするため剝がしたら跡が残って剥がすのが大変でした

デスクの組み立ては友達にお願いして二人で行いました、フレームめちゃめちゃ重たいです

天板には桐で軽く穴をあけてからネジで固定していきました

PC等をセッティングした

f:id:m4kvn:20210706061157j:plain

購入した物

FLEXISPOT 昇降デスクのフレーム

プライムデーで33,600円とめちゃ安くなってました

かなでものの天板

天板は180x80の最大サイズで、天板面取りオプションにR5 加工を選択しました

作業している机を変えたい

今はこういう環境になってる

f:id:m4kvn:20210603195353j:plain

現状の不満

狭い

ルンバが快適にすごせるように、PCとか配線を床に置きたくないので机の上のスペースが足りない、圧倒的に足りない。すでにパソコンの上にウーハーおいてたりしてるしこれもやめたい。

危うい

モニターアームとかを設置することが考慮されてないフレームとかがあって、モニターアームを設置している部分がこんな感じになってる。いつか絶対壊れる、地震のたびに危ない気持ちになる。

f:id:m4kvn:20210603200727j:plain

改善案

いまの机を処分して新しい机を買おう!!

そしてこれと同じ感じにしたい。もうL字のデスクはやめたい~。

www.youtube.com

計画

かなでもので天板をオーダーする

実際にオーダーしてみると 6/15 おとどけ目安となった。6/5 に試したので注文からだいたい10日で届くらしい。32,800円

THE BOARD / ラバーウッド ナチュラルkanademono.design

f:id:m4kvn:20210605011332p:plain

FLEXISPOT 電動昇降スタンディングデスクE7脚フレームを購入する

カラーはブラックで天板はなしにする。ドライバーや定規、メジャーなんかはそろってるから買わなくて良い。51,700円

flexispot.jp

いま使っている机の処分

個人的にはこれが一番面倒くさい。解体しないといけないし、板がガラスだからめちゃめちゃ重たい。誰かが引き取ってくれ~という気持ち。捨てる場合は基本は粗大ごみ。もしくはお金払って不用品回収の業者に回収してもらうまである。

【Android】Java8(JDK_1_8)からJava11(JDK_11)にした場合のBitriseの設定変更

AndroidStudio Arctic Foxで新規にプロジェクトを作成するとプロジェクトのJavaSDKのバージョン情報が書かれている .idea/misc.xml で11が指定されています。

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
</project>

今後 Java8 が使われなくなることを考慮すると Java11 で開発する環境を整えておきたいです。そこでこの新規プロジェクトをBitriseでビルドしようとすると install-missing-android-tools@2 でビルドが失敗します。

Ensure required Android SDK components
Retrying...
Failed to ensure android components, error: output: FAILURE: Build failed with an exception.
* Where:
Build file '/bitrise/src/app/build.gradle' line: 2
* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

Bitriseでは Java8 がプリインストールされていて全てのステップで利用されます。なので、これを Java11 に変更する必要があり、その方法はBitriseのドキュメントに記載されています。

devcenter.bitrise.io

ドキュメントにはスクリプトステップを追加するだけで対応できると書いてあるので、コードをまるまるコピーしてステップを追加するだけでした。

【あつ森】青バラが咲きました

あつ森で青バラを咲かせたいと思いたってから、毎日朝5時に起きてせっせと水やり等を続けた結果、ついに青バラが咲きました!

期間は1か月と1週間で、ほぼ毎日1人以上のフレンドに水やりを手伝ってもらいながら進めたため、比較的早く咲かせることができたんじゃないかなと思います。

m4kvn.hatenablog.com

m4kvn.hatenablog.com

【あつ森】STEP2の確認作業で紫が咲く確率を調べた

以前の記事で、青バラを咲かせるための記事をかきました。

m4kvn.hatenablog.com

ここのSTEP2で咲かせた黄色いバラのなかから紫のバラを咲かせるバラを見分ける必要がある。それを実際にやってみるとなかなか紫が咲かないので「ほんとにこれ見分け作業も25%以上なのか?」と思い、どれくらいの確率で咲くのかを調べた。

STEP2の黄バラと白種バラで紫が咲く確率を計算する

STEP2で見分ける必要のあるバラの遺伝子は 01-11-00-00 で白い種のバラの遺伝子が 01-00-00-00 となり、前半の遺伝子の組み合わせだけ計算すればよい。

① 1つ目の遺伝子の組み合わせ

01-11-00-00
01-00-00-00

0 1
0 00 01
1 01 11
遺伝子 確率
00 25%
01 50%
11 25%

② 2つ目の遺伝子の組み合わせ

黄 01-11-00-00
白 01-00-00-00

1 1
0 01 01
0 01 01
遺伝子 確率
01 100%

結果から2つ目の遺伝子は必ず 01 になることがわかるため、紫が咲く確率は①のみの結果から計算できる。

紫が咲く確率

①と②の結果から、咲く花の遺伝子は次のようになる。

  1. 00-01-00-00 25% 黄
  2. 01-01-00-00 50% 白
  3. 11-01-00-00 25% 紫

紫のバラの遺伝子はつぎのサイトで確認した。

hyperwiki.jp

つまりここでは 25%の確率で紫が咲く ことがわかる。

まとめ

ちゃんと25%で咲く。だが・・・

実際は関係のない黄色いバラも確認テストを行っていて、その花からはずっと紫が咲かない。でも、紫が咲く黄色いバラと同じ色のバラを咲かすので、確認テストをしつづけないといけない。

つまり、この見分けテストでの確率も考慮するとSTEP2で黄色いバラを選択できる確率は、25%の25%である 6.25% になる。

そりゃなかなか咲かないっすわ。

【あつ森】青バラを咲かせたい

12月ぐらいから、あつ森を最初からやりなおしはじめて、そろそろ青バラを咲かせたいと思い調べた。そしたら、3色のバラのみを使って青バラを咲かせる方法があったため、これを参考にすすめることにした。とりあえず、毎回動画をみるのも大変なので重要なポイントのみ文字に起こしておく。

www.youtube.com

進め方

次のSTEPを同時進行させる

  • STEP1 → STEP2 → STEP2見分け作業 → 白③
  • STEP4 → STEP4見分け作業 → 赤④

その後、STEP3 → STEP5 とすすめて次のSTEPを同時進行させる

  • STEP6 →
  • STEP7 →

以下にそれぞれのSTEPの詳細を記載する

STEP1 白種 + 黄種

  • 白 50% 01-01-00-00 を選ぶ ─ ①
  • 黄 50% 00-01-00-00

STEP2 白① + 黄種

  • 黄 25% 01-11-00-00 を選び自己繁殖 ─ ②
    • 見分けテスト: 白種と組み合わせが咲く
  • 黄 25% 00-01-00-00
  • 黄 25% 00-11-00-00
  • 白 25% 01-01-00-00

STEP3 黄② + 黄②

  • 白 25% 11-11-00-00 を選び多く用意 ─ ③
  • 黄 50% 01-11-00-00
  • 黄 25% 00-11-00-00

STEP4 白種 + 赤種

  • 赤 25% 01-00-01-00 を選ぶ ─ ④
    • 見分けテスト : 黄種と組み合わせ白かが咲く
  • 赤 25% 00-00-01-00
  • 桃 25% 00-00-01-01
  • 桃 25% 01-00-01-01

STEP5 赤④ + 白③

  • 赤 25% 11-01-01-00 を選ぶ ─ ⑤
  • 赤 25% 01-01-01-00 を選ぶ ─ ⑥
  • 白 25% 01-01-00-00
  • 紫 25% 11-01-00-00

STEP6 赤⑤ + 白③

それぞれ自己繁殖させたものと交配する

  • 赤 25% 11-11-01-00 → 青 25%
  • 赤 25% 11-01-01-00 → 青 6.25%

STEP7 赤⑥ + 白③

それぞれ自己繁殖させたものと交配する

  • 赤 12.5% 11-11-01-00 → 青 25%
  • 赤 12.5% 11-01-01-00 → 青 6.25%
  • 赤 12.5% 01-01-01-00 → 青 1.56%