習慣化に必要なこと: 頭を使わなくする
しばらく習慣化というものについて色々考えてきて、 頭を使わない ことが重要ではないかと思っている。 つまり毎日やることを予め決めておき、決まったタイミングでただやるだけにしておく。
頭を使ったり考えたりすることはコストが高い。まず 考えなければ
というだけで億劫になりその行動を無意識に避けようとすることがある。これが めんどくさ
とやらなくなってしまう原因だ。
また一日で人間ができる判断の量には制限があり、そのリソースを使い切ってしまうと休んで回復するまで判断ができなくなるという話がある。いざ習慣を行う際に判断が必要となると、そのときのHP次第では習慣達成まで至らなくなってしまう。
また頭を使う必要があるということは習慣達成までの不確定要素が多く、見積もりが行いにくいということである。達成完了までの時間が見えないので 時間なさそう・・・今はやめとこ
となってしまいがちだ。
漫然と 〇〇について考える
ブログを1本書く
のような習慣が続かないのはこれも原因であると思う。
具体的に修正すべき習慣の例を考えてみる。
運動する
やることが曖昧すぎる例。毎日何をどのくらいやるかを考える必要がある。そこであらかじめなにをやるか決めておく。
運動する -> 10分歩く
10分歩くにしても実際に歩く際にはどこを回るか考える必要が出てくる。この際あらかじめ決めておかないと、本当に家の近くを歩いて5分程度で戻ってきてしまう可能性がある。 徒歩で往復10分はかかる公園を目標にして、 どこまで行ってくるかを決定する。
10分歩く -> 公園まで行って返ってくる
やろうと思っても、タイミングによってはできないことがある。例えば仕事まであと20分のタイミングでは、やる時間があるといっても ちょっと忙しいしいいか
となってしまう。
余裕がある時間に行えるように、いつやるかを決めておく。
公園まで行って返ってくる -> 朝起きたら公園まで行って返ってくる
イレギュラーの場合を考慮する。例えば雨が降っていたら散歩に行きたくなるだろう。 プランBを用意しておき、どんな状況でも習慣を行えるようにする。
朝起きたら公園まで行って返ってくる -> 朝起きたら公園まで行って返ってくる 。雨が降っていたら家でFitBoxingを10分やる。
ここまでやれたら習慣にできそうである。
例えば朝起きた直後は頭が働いておらず、 この習慣をやる
という判断さえできないこともある。
前日の夜の段階でランニングシューズと運動着を起きて一番に目につく場所に置いておくのもよいだろう。
夜寝る前にリビングにシューズと運動着を置く
というのを習慣にしておくのもよい。
Jetpack Composeを触る時は
結論
リリースノート開いておけ!
解説
Jetpack Composeは開発中のライブラリであり、新たな機能ができては名前を変えていきます。
あなたが見たJetpack Composeのドキュメントは書かれたときそのバージョンでは正しいものですが、今やろうとしてあなたが入れたバージョンでは正しくない恐れがあります。これは公式ドキュメントでも同様です。
ドキュメント通りに書いてもビルド通らないな?という場合にはまずcomposeのリリースノートを開く癖をつけるのがよいです。
ページ内検索をすればだいたい removed
とか deleted
とか書いてあります。(表記揃えてないんですね)
以下開いておくリリースノート貼っておきます。このとき言語を英語にしましょう。日本語だと翻訳されておらず最新ライブラリの情報が載っていない場合が多いです。
Compose Foundation | Android Developers
Compose Material | Android Developers
useIRとは一体何か
課題
Jetpack Composeを利用する際に、kotlinOptionsに useIR
を設定する必要がある。
kotlinOptions {
useIR = true
}
これは何を表すのか。
調査
https://kotlinlang.org/docs/whatsnew14.html#unified-backends-and-extensibility
intermediate representation、つまり中間表現のこと。
Kotlinには最近では Kotlin/JVM
Kotlin/JS
Kotlin/Native
があって、歴史的に前2つは別々に開発されてきたのでコードの多くは別になっていた。
対して Kotlin/Native
はKotlinの中間表現でビルドされたインフラものに基づいており、前者2つもこのIRにmigrateしていく\。
3つを同じIRのバックエンドで統一できれば多くの機能追加や最適化、バグフィクスが同時に出来るようになる。
最近行っている、悪い習慣を無くすための試み
習慣化は私の最近のテーマだ。怠惰な人間なので、放っておくと無限に時間を使って遊んでいる。最近はウマ娘だ。idは 939647895
。
いくつか習慣化に関する本を読んでいるがその中で取り入れて実行に移していったものを書いていく。
まだ始めたばかりのものがあるが、時間を置いた後どのくらい継続されているか楽しみだ。
悪癖をなくす
トイレに行く時にkindleを読む端末を持っていく
こういうのも何だが他人よりトイレが近く、日中行くことが多い。そのたびにスマホを持ち出すのだがついtwitterやらなんやらを開い無駄な時間を使ってしまっていた。
時間が空いているのが惜しくて、そこをtwitterで埋めようとしていた。
よく考えれば時間が空くのが惜しいならtwitterにする必要はない。読書タイムに当て、1Pでも読むようにしたほうが良い。
Androidエンジニアらしく端末はたくさんあるので、そのうちの一つはkindle専用機にし、トイレに行くときにはいつもの端末の代わりにその専用機を持つようにした。
この方法の良い点としては、今までの習慣である トイレに立つときにスマホを持っていく
というのを変えなかった点である。後述するが普段使いの端末はリビングに置いているので、逆に手元にあるのはkindle専用機である。トイレに向かう時はこの手元の端末を持っていく。
慣れてきたのか、リビングで手元にいつもの端末があるときでも、トイレに立つときには専用機を持ってはいるようになってきている。
スマホをリビングに置く
少し集中力が途切れる・ビルドで待ちが発生するなど、スマホを触るチャンスは至るところに存在している。そして触ったが最後、集中力が復活したりビルドが終わるのより長い時間スマホを触ってしまうことになる。
触るチャンスがあるときにスマホを触れなくする、つまりリビングに置いておく、という単純な方法は思ったより効果的っぽい。
この戦略、環境が変わったことにより有効に働くようになったのかなぁと感じる。
ここでいう環境とは自分の部屋ではない場所に手軽に置けるようになった、ということである。 半年ほど前から2人暮らしを初めていて、自分の家の中にリビングという共同スペースが増えた。
共同スペースなの言ってしまえば公の場である。その意識だと、自分のパーソナルスペースを出てまで空いた時間を潰しに行くか?という気持ちになる。 ちょっと歩いてドアを開けるだけでは有るが、心理的障壁が大きくなっている。
例えば一人暮らしのときでも、同じような戦略としてドアを挟んだキッチンにスマホを置くということも出来ただろう。だがうまくいく自身が無い。 一人暮らしの時はキッチンでもパーソナルスペースの範囲内なので、そこに取りに行くのに心理的障壁はない。
実はタイムロッキングコンテナを持っているので スマホを触れなくする
ことは前からできていた。
ただしタイムロッキングコンテナは少々扱いづらく、何時間ロックするか設定するのが面倒くさい。
またロックすべき時間を決めるのも面倒だ。
使える時間にきっちりロックを外せるように時間を計算するのも手がかかる。
GitHubなどで2段階認証が必要になったときに使えなくなるのも困る。
対して今の方法ならすこし歩いてリビングのテーブルに置くだけだ。スマホをテーブルに置くという僅かなコストの習慣で、辞めたい習慣を困難にしている。割と良い方法だと思っている。
GitlabのMRのStatusを変える
課題
GitlabへのMRをフックしてBitriseでCIを回した時、MRに対してCIの状態を更新したい。 公式のステップだとGitHubは GitHub Status が存在するが、Gitlabは無いため。
解決
以下の curl
コマンドを Script
ステップに設定すると、Gitlabのpipelineに test
という名前で running
のJobができる。 target_url
を指定しているため、このBitriseのビルドへのリンクも行われている。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/17/statuses/$BITRISE_GIT_COMMIT?name=test&state=running&target_url=$BITRISE_BUILD_URL"
参照
jCenterクローズで影響が出るライブラリの一覧を出す
課題
今更ですが。
jCenterクローズの影響調査として、jCenterにだけ上がっててmavenCentralにないライブラリを一覧で出したい。
解決方法
- build.gradleから
buildscript.repositories
に定義してあるjcenter()
を削除、定義していない場合は変わりにmavenCentral()
を入れる - ビルドを走らせエラーログをパースしライブラリ一覧を出す。
./gradlew --refresh-dependencies assemble test 2>&1 >/dev/null | grep "Could not resolve" | grep -v "all files for configuration" | sed 's/> Could not resolve //' | sed 's/ //g' | sort | uniq
スクロールしたらふわっと出るやつの実装
課題
LPとかによくある、スクロールされて画面に入ったらふわっと表示するアニメーションを実装したい。
実装
CSS+JS
.slideup { opacity: 0; visibility: hidden; transform: translateY(40px); transition: all 1s; } .slideup.is-show { opacity: 1; visibility: visible; transform: translateY(0px); }
function showElementAnimation() { element = document.getElementsByClassName('slideup'); if (!element) return; var showTiming = window.innerHeight > 768 ? 200 : 80; // 要素が出てくるタイミングはここで調整 var scrollY = window.pageYOffset; //スクロール量を取得 var windowH = window.innerHeight; //ブラウザウィンドウのビューポート(viewport)の高さを取得 for(var i=0;i<element.length;i++) { var elemClientRect = element[i].getBoundingClientRect(); var elemY = scrollY + elemClientRect.top; if(scrollY + windowH - showTiming > elemY) { element[i].classList.add('is-show'); } else if(scrollY + windowH < elemY) { // 上にスクロールして再度非表示にする場合はこちらを記述 element[i].classList.remove('is-show'); } } } window.addEventListener('scroll', showElementAnimation)