読んだ本 2020年2月

今月は読破できたのは1冊だけ。

人生は、運よりも実力よりも「勘違いさせる力」で決まっている

去年の7月くらいに買っていた本。なんか行き詰まってたのかなぁ。

錯覚資産という実力以外の評価についての説明と活用について解説してある。心理学は分からないのでどのくらいの信憑性があるかわからないけど、認知バイアスとかの話。

ハウツー本ではないし、具体例も「フォロワー1万人がなんとか」って話なので、その辺はまぁそっすねという感じ。

実力さえあれば評価されるとは微塵も思ってないし、うまく評価をしてもらえるようにした方が良いのは実際そう。何かしらの成果は勝手に知られることはないので適切なアピールは必要で、周囲にうまく印象づけるようにした方が良いなと思った。

ちょっと心理学の本が挙がっていたのでそっちも読んでみたい。

人生は、運よりも実力よりも「勘違いさせる力」で決まっている

人生は、運よりも実力よりも「勘違いさせる力」で決まっている

  • 作者:ふろむだ
  • 発売日: 2018/08/09
  • メディア: 単行本(ソフトカバー)

読んだ本 2020年1月

久しぶりに読書感想。今年は流し読みでも良いので積読消化していこう。

服が、めんどい

書店で見かけてタイトルに惹かれたので購入した。ファッション誌をもともと読む人ではないので、内容はありきたりなのかもしれない。自分にとっては目新しかったのと基準となるものができたので良かった。

手軽にそこそこの格好を目指すという方向性で服の種類ごとにどういった服を買ったら良いかが書いてある。とりあえず、無地でホワイト、グレー、ブラックの無彩色とネイビーの組み合わせにしておけば外れはないらしい。もう少し体重が落ちてサイズが落ち着いたら私服の制服化みたなものをやりたいと思っていて、その時服を選ぶ基準として採用できそう。

服が、めんどい 「いい服」「ダメな服」を1秒で決める

服が、めんどい 「いい服」「ダメな服」を1秒で決める

雑談のルール

電子版が安売りされていたので購入した。

なんか聞いたことあるなーという話。質問しようとか、そう言うやつ。一方で紹介されているような会話されると自分は不快だなとも思ってしまうし、他の人はこういう会話をされても気にならないんだろうかとか思う。

結局はそういう相手に気後れしないとかそういう心構えなのかな?(そういうメンタル面が知りたかった)

ちなみに昨日社内の送別会で、今まで話したことがない人たちと合流したが、結局適当に相槌を打つくらいしかできなかった。

40代を後悔しない50のリスト

オススメ記事を見たので期待していたものの、冒頭での著者エピソードがめちゃくちゃ共感できないものだったので、やる気をなくしてざっと流し読みにした。

うーんそうだなぁそうなんだよなぁと思いつつ、それができたらたしかに後悔はしないけど、実際なぁと思ってしまったり。(なので50になって後悔するのだろう

40代を後悔しない50のリスト 1万人の失敗談からわかった人生の法則

40代を後悔しない50のリスト 1万人の失敗談からわかった人生の法則

2019年振り返り

年末だなぁと思ったので今年も振り返り。

個人

体調悪かったなぁ…。

  • 年始からインフルで休んだ
  • 6月には、下垂体卒中で入院して一年経ったので検査入院してた
  • 10月ごろに痛風になってしまって、それからなんだか足が痛い
  • なんだかんだで11月末には有給休暇がなくなってしまった
  • 最近、良性発作性頭位めまい症というやつになってしまってすでに欠勤したりしている

8月入ってからダイエットを始めたが良い感じに減量できていて、7キロくらい痩せてきた。あと5キロくらい落としたいので、地道にやっていこう。

仕事

前半は、サーバーサイドでKotlinのアプリケーション構築をガッツリやったなぁという印象。

後半はPython使う機会が増えた。GoogleColaboratry触ってたり、バッチ処理書いたり。

PCFを使っているので、サーバーのセットアップとかその辺はほとんどやらなくなった。AWSGCPとかその辺は触る機会が全くない。

地道にアーキテクチャどうしようとか悩んだりしながらアプリ作る感じだったなぁ。浅く広くって感じかな。

おわりに

今まで来年やりたいことみたいなの書いてたけど、仕事については考えてもあんまりだし、今年はもう書かない!

とにかく体調が良くなって欲しい!健康に生きるって難しい。

KotlinのSecondary Constructorsでvalのプロパティを初期化したい

やりたかったこと

firstに依存しているsecondを保持するPairのようなモノが欲しかった。

data class Pair<F, S>(
    val first: F? = null,
    val second: S? = null
)

fun <F, S> newPair(first: F?, block: (F) -> S?) = Pair(
    first = first,
    second = first?.let(block) // firstがnullでなければblockを呼び出す
)

newPairは、以下のような使い方を想定している。

val pair = newPair(getFirst()) {first ->
    getSecond(first)
}

firstsecondともにNullableだがblockの実行はfirstがnullではない状態を保証したい。

別にこのままでも良いんだけど、ちょっとコンストラクタにしてみようと思いたった。このままでも良かったのにKotlin力が高くないので、アレコレ試行錯誤が必要だった。あとcompanion objectという方法もあったけど、まぁやってみたかったんだよ。

thisへの委譲では式が使える

Secondary Constructorsでは、Primary Constructorか他のSecondary Constructorへの委譲が必要になる。thisを使用して呼び出しを行うが、その際には式を利用することができる。なので、こういう呼び出し方ができる。

data class Pair<F, S>(
    val first: F? = null,
    val second: S? = null
) {
    // OK
    constructor(first: F?, block: (F) -> S?): this(first, first?.let(block))
}

このことがわかってなくてあれこれ試行錯誤した。

ダメな例

プロパティがvalであるということが問題になった。

data class Pair<F, S>(
    val first: F? = null,
    val second: S? = null
) {
    // NG: Val cannot be reassigned
    // secondはvalなので書き換えができない
    // コンストラクタなのになんで初期化できんのじゃーとかちょっと思ったりする
    constructor(first: F?, block: (F) -> S?): this(first) {
        second = first?.let(block)
    }

    // NG: Unresolved reference: sec
    // thisの方に変数を渡せるのでは???と思ったけど渡せなかった
    constructor(first: F?, block: (F) -> S?): this(first, sec) {
        val sec = first?.let(block)
    }

    // OK
    // ifも式なのでこれでも問題ない
    constructor(first: F?, block: (F) -> S?): this(first, if (first != null) block(first) else null)

    // OK
    constructor(first: F?, block: (F) -> S?): this(first, first?.let(block))
}

実行例

以下のように期待する動きをしている。

val p1 = Pair("aaa", "AAA")
val p2 = Pair("aaa", String::toUpperCase)
val p3 = Pair<String, String>(null, String::toUpperCase)

println(p1)
println(p2)
println(p3)

// output
// Pair(first=aaa, second=AAA)
// Pair(first=aaa, second=AAA)
// Pair(first=null, second=null)

継承のところで気づいた

リファレンスの継承の辺りを読んでいる時に、以下の記述を見つけて、これはPrimary Constructorの委譲でも使えるのではと思って試したら動いた。

class Derived(
    name: String,
    val lastName: String
) : Base(name.capitalize().also { println("Argument for Base: $it") }) {

...

リファレンスはCollectionの辺りまで読んだつもりだけど、どっか明確に記載されてたかなぁ…

depからgo modへ移行する

昔作ったツールを整理しようと思ったので、ついでにパッケージ管理をgo modにした。

予習

Go Modulesについてふわっとしか知らないので、改めて確認しておく。

以下を参考にした。

とりあえず、

  • 今まで通りGOPATH配下で
  • GO111MODULE=onにする

と良さそうなので、そうした。

作業

ひとまずgo mod initする。

% go mod init
go: creating new go.mod: module github.com/kawaken/funi
go: copying requirements from Gopkg.lock

% cat go.mod
module github.com/kawaken/funi

go 1.12

require gopkg.in/yaml.v2 v2.2.2

go.modが作成された。

不要になるファイルを削除する。

% rm Gopkg.*
rm: remove regular file 'Gopkg.lock'? y
rm: remove regular file 'Gopkg.toml'? y

% rm -fr vendor/

この状態でビルドしてみる。

% go build
go: finding gopkg.in/yaml.v2 v2.2.2
go: finding gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
go: downloading gopkg.in/yaml.v2 v2.2.2
go: extracting gopkg.in/yaml.v2 v2.2.2

 % cat go.sum
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

問題なさそうなので、コミットする。

% git status -s
 D Gopkg.lock
 D Gopkg.toml
?? go.mod
?? go.sum

% git add go.mod go.sum

 % git rm Gopkg.lock Gopkg.toml
rm 'Gopkg.lock'
rm 'Gopkg.toml'

% git commit -m "dep to go mod"
[master e300c2d] dep to go mod
 4 files changed, 8 insertions(+), 51 deletions(-)
 delete mode 100644 Gopkg.lock
 delete mode 100644 Gopkg.toml
 create mode 100644 go.mod
 create mode 100644 go.sum

もともとvendorディレクトリは管理してないんだった。

gopkg.inはどうする?

公式のWikiに以下のように記述されているので問題なさそう。

  1. gopkg.in

Existing code that uses import paths starting with gopkg.in(such as gopkg.in/yaml.v1 and gopkg.in/yaml.v2) can continue to use those forms for their module paths and import paths even after opting in to modules.

おしまい

2018年振り返りと2019年やりたいこと

今年もやっとくか。

2018年振り返り

個人

大きな出来事といえば、やはり下垂体卒中で入院していたこと。入院の原因となった病状自体は治癒したものの、手術の影響で疲れやすいマンになってしまった。(気になる人はこの辺読んでみて)

今でも月一程度で血液検査して数値を確認する、という経過観察を続けている。徐々に回復傾向にあるが波もあり、突然体調悪くなることもあって油断できない。特に先月はかなりしんどかったし、正直言えば一ヶ月くらいまた休みたい。まぁムリだけど。

ともあれ、これがキッカケで色々と環境を変えていく必要があるな、と踏ん切りがついたし、あまり悲観的にはなってない。

あと一時期、ひたすらに自分用アプリのコードを書いていたが、最近は帰ってくると疲れ気味なので進捗が出せていない。

つくるぞ!って年初に書いたキーボードを作れたので良かった。実際には設計からやろうと思っていたけど、自分の思っているものに近いキーボードが手に入ったので、それで満足してる。

仕事

踏ん切りがついたんで、実際に異動した。とりあえず馴染めていると思う。

やはり少人数の方が意思決定が速くて、仕事が進むのも速いんで飽きがこない。仕事するための調整ごととも(マネージャーの采配なのかもしれないが)離れているので、モヤモヤすることもなく、穏やかな気持ちで仕事に取り組めている。

思い切って環境変えて良かった。とはいえ、ちょっとまだ自分ならではの価値が出せてないと感じている。

2019年やりたいこと

個人

作りかけのアプリを完成させたい。アプリ作成はネタが溜まっているので、形にしていきたい。他にも色々やりたいこともあるし、1日の中での時間の作り方を工夫しなければ。あとは、パソコンとかディスプレイとか買い換えたい。

体調面では、体重がまた10キロ増えてしまったので、痩せたい。

仕事

評価の関係もあり、なんかアウトプットしないといけないんだけど、どんなことがいいか悩ましい。最近は、勉強会とかで発表できるほどのこともできていないし。

今後やっていきたい領域に悩みがあるので、その辺もちょっとゆっくりして考えたい。

意外に書くことないな〜。なんかいつもと比べてイライラしてないからかな?まぁとにかくがんばろ。

GradleでIntelliJ IEDAのプロジェクトを作成する(途中まで)

Kotlin入門2日目:Macでの環境構築の続き。IntelliJはインストール済み。

前回はGradle, Kotlinの導入が終わったところで、Gradleから素のKotlinプロジェクトを作成したところだった。今回はIntelliJのプロジェクトを作成する。

Gradleを使ったプロジェクト作成

まずは前回同様、プロジェクトを作成する。

$ cd sample/
$ gradle init --dsl kotlin --type=kotlin-application \
--package=sample --project-name=sample

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 executed

The IDEA Plugin

ここを参考に、作成されたbuild.gradle.ktsプラグインを追加する。コメントを除いて以下のようになった。

plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.10")
    application
    idea    // <- 追加
}

repositories {
    jcenter()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.jetbrains.kotlin:kotlin-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

application {
    mainClassName = "sample.AppKt"
}

プラグインによってタスクが追加されている。

IDE tasks
---------
cleanIdea - Cleans IDEA project files (IML, IPR)
idea - Generates IDEA project files (IML, IPR, IWS)
openIdea - Opens the IDEA project

ideaタスクを実行する。

$ gradle idea

> Task :idea
Generated IDEA project at file:///private/tmp/sample/sample.ipr

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 15s
4 actionable tasks: 4 executed

IntelliJ からはfile:///private/tmp/sample/sample.iprを開くと良いっぽい。

IntelliJで開く

Gradleの方でopenIdeaというタスクがあるので、実行してみる。

$ gradle openIdea

> Task :idea
Generated IDEA project at file:///private/tmp/sample/sample.ipr

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
5 actionable tasks: 5 executed

この後IDEAが開いたがUnlinked Gradle project?と出てきた。

f:id:kentaro_kawano:20181216235205p:plain

時間なくなったんで今日はここまで。