独り言


// GachaScreen.kt

val step = rememberGachaStep()
val gachaState = rememberGachaState()

Gacha(
  state = gachaState,
  onRotate = {
    step.next()
  },
)

Button(onClick = { gachaState.rotate(45) }){ 
  Text("ガチャを回す") 
}

// Gacha.kt

@Composable
fun Gacha(
  state: GachaState,
  onRotate: ()->Unit,
) {
  val scale by aniamteFloatAsState(state.scale)
  val handleRotate by animateFloatAsState(state.handleRotate) { onRotate() }
  
  Box(Modifier.scale(scale)) {
    StandImage()
    HandleImage(
      modifier = Modifier
        .rotate(handleRotate),
    )
  }
}

data class GachaState(
  val scale: Float,
  val handleRotate: Float,
) {
  fun rotate()
}

07月25日 03:56

ふむふむ

https://developer.android.com/training/sign-in/biometric-auth?hl=jahttps://developer.android.com/training/sign-in/biometric-auth?hl=ja

build.gralde
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05"

val executor = ContextCompat.getMainExecutor(this)
val biometricPrompt = 
    BiometricPrompt(this, executor,
        object : BiometricPrompt.AuthenticationCallback() {
            override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
            super.onAuthenticationError(errorCode, errString)
                Toast.makeText(applicationContext,
                    "Authentication error: $errString", Toast.LENGTH_SHORT)
                .show()
            }

            override fun onAuthenticationSucceeded(
                result: BiometricPrompt.AuthenticationResult) {
                    super.onAuthenticationSucceeded(result)
                    Toast.makeText(applicationContext,
                        "Authentication succeeded!", Toast.LENGTH_SHORT)
                        .show()
            }

            override fun onAuthenticationFailed() {
                super.onAuthenticationFailed()
                Toast.makeText(applicationContext, "Authentication failed",
                    Toast.LENGTH_SHORT)
                    .show()
           }
        })

val promptInfo = BiometricPrompt.PromptInfo.Builder()
    .setTitle("Biometric login for my app")
    .setSubtitle("Log in using your biometric credential")
    .setNegativeButtonText("Use account password")
    .build()

biometricPrompt.authenticate(promptInfo)

07月21日 12:26

?!

07月21日 12:01

知らん間に「kill-8080-port.cmd」なる便利なファイルありけり

07月21日 10:46

割り算はなるべく最後に持ってくるー

07月19日 09:37

const list = []

最悪ー


P.S.
何のリストかわからんねん

07月07日 09:55

「おいおいそんな書き方したら後で事故りそうだぞ...」→数分後→「ほら言わんこっちゃない」

になってるお

06月23日 09:54

MutableTransitionStateの拡張プロパティデフォでほちい

val MutableTransitionState<Boolean>.visible :Boolean
  get() = isidle && currentState
val MutableTransitionState<Boolean>.invisible :Boolean
  get() = !isidle && !currentState

from ここ

06月19日 10:28

データベースという名のSQLの授業大っ嫌い

P.S.
SQLがわかるだけでデータベースできるみたいな面するのやめろ

06月19日 12:08

こういう書き方めっちゃ好き

doSomething(arg1) { do() }
06月16日 01:05

チャットツールは表情が見えんって言って否定する大人ほど絵文字使わんのムカムカするー

06月16日 10:45

空catchはろくなめにあわんけどなあ

06月14日 09:03

モジュールの切り方おおミスかましたー

06月12日 11:36

メソッドの中身コピペは許さん

06月12日 10:36

探しています...

  • wikiツール
  • セルフホストでもいい
  • チーム(4-6人くらい)でも無料で使える
  • マークダウンで書きたい
  • できれば静的エクスポートできると幸せ
06月12日 10:36

オブジェクト指向って何?って聞かれて一言目に「カプセル化」「継承」「多様性(ポリモーフィズム)」のいずれかが入ってる人なんもわかってない説

06月09日 12:10

絶対C#のTaskクラスの中にCancelメソッド作ったほうがよかったって。
なぜ CancellationTokenSource とかいうわけわからんクラスに分離した???


P.S.
複数のタスクを同時にキャンセルしたいみたいな時のためかな。
そう考えると Kotlin Coroutine の発想は神やなって感じる今日この頃

06月07日 10:23

見たらわかるものにいちいち名前つけるのは違うよな

sql = "SELECT * FROM users";

とか右辺明らかにsqlなんだから変数名sqlはあかんやろって感じ

06月05日 10:28

勉強が進むにつれて学校の授業がつらくなるの何とかならんかな

06月05日 10:28

アーキテクチャが残念でつらい

06月05日 10:28

何か出来そうな夜更かし
成仏させた詩

ずっと真夜中でいいのに 花一匁

大好き

06月04日 08:43

技術書き大志
丁寧には書かない死 <<< NEW

06月04日 08:39

花一匁大好きいいいいいいいいいいいいいいいいいいいいい

06月04日 08:32

ずっと真夜中でいいのにって溢した午前5時。

ずっと真夜中でいいのに 花一匁

06月04日 08:32

ずとまよ5周年おめおめのおめ👏👏👏🎉🎉🎉

06月04日 11:19

「グフッ尊タヒ」とか
「◯◯でニッコニコ」も使いがち

06月04日 11:19

もうすこしで僕は僕を一つは愛せたのに

ヨルシカ「斜陽」

06月04日 11:19

ステンバイミー 自然体に

ずっと真夜中でいいのに。「あいつら全員同窓会」

06月01日 11:39

Eventを足し算というよりEventHandlerを足し算するんだよなあ

05月31日 11:50

ブランチ "戦略" って言葉なんかわかったかも

05月30日 09:53

構造化って大切だから、インデントできない奴は死んだほうがいいっていうけど、まったく同じ理論で↓みたいに書くやつも死んだほうがいい (と思った)

const url = "/api/hoge"
const options = {
  method: "GET",
}
const response = await fetch(url, options).then(r=>r.json())

こう書くべき

const response = await fetch("/api/hoge", {
  method: "GET",
}).then(r=>r.json())

ただurlとかoptionsが増えていったときも果たしてそうなんだろうか?

05月29日 10:11

技術的な要素ごとにフォルダを区切るの許さないマン
(プロジェクトルートとかにcomponentsフォルダとか見ると発狂)

05月29日 10:11

apply関数の使い方メモ

apply使わないと
val builder = Hoge.Builder()
builder.setFuga("fuga")
builder.setPiyo(123)
val hoge = builder.build()
apply使うと
val hoge = Hoge.Builder().apply {
  setFuga("fuga")
  setPiyo(123)
}.build()

(たくさんBuilderあっても見やすいね!)


多分こんな実装になってる?
inline fun <T> T.apply(block: T.() -> Unit): T {
  this.block()
  return this
}
05月27日 06:59

ワイ  「お!プログラムできる人なんや!ちなみにGitはできる?」
知り合い「ちょっとわからないっすね」

ワイ的にはこの時点でその知り合いは用無しになっちゃう

05月26日 12:11

OSSかそうじゃないかってだけで印象がだいぶちがうー

05月26日 12:08

基本はフラットなデザインだけど、hoverした時にちょっと上に上がって影がつくの好きかもーーー

05月26日 09:37

どこでもドアはイミュータブル

05月25日 09:20

VSCodeの拡張機能にアーニャがおる笑笑

05月24日 04:07

C# のActionデリゲート、絶対16パターンもいらん。せいぜい5つで十分じゃね?

05月24日 12:13

TypeScriptわかってると型周りの話で困らなみ?

05月24日 12:04

C# のデリゲートってメソッドの型定義使いまわせるやつって理解でおけ?

05月24日 11:58

動的型付け言語で1つのオブジェクトの中にいろいろ詰め込んで引数とするの怖すぎる

function getHoge(args){
  // args の中に名に入ってくるかわからん
}

getHoge({
  // 何渡せばいいかわからん
})
05月23日 04:53

木星も月も突き抜けなきゃ

ずっと真夜中でいいのに。 サターン

05月22日 08:29

apply の型宣言すごいで

inline fun <T> T.apply(block: T.() -> Unit): T

applyのドキュメント

05月17日 10:22

jetpack composeの dp 、実は拡張プロパティ

val Int.dp: Dp

dpのドキュメント

05月16日 09:41

どうでもいいから置いてった

ずっと真夜中でいいのに。「あいつら全員同窓会」

05月15日 04:08

進む君と止まった僕の縮まらない距離を何で埋めよう
まだ素直に言葉にできない僕は

164「天ノ弱」

05月12日 08:44

何度もトライ
してもコンティニュー

SEKAINOOWARI 「Play」

05月12日 03:18

変わってくから 私ねもっと

ずっと真夜中でいいのに。 「MILABO」

05月12日 03:06

こんなことできたらいいのにな


val appBar = /* ? */

Scaffold(
  appBar = { appBar.get() } /* 子で指定したAppBar */ 
) {
  NavHost(...) {
    composable("hoge") {
      HogeScreen()
    }
  }
}

fun HogeScreen() {
  appBar.set {
    AppBar { Text("HOGE") }
  }

  ...
}


05月12日 03:06