試したこと、読んだ本について書いていくブログです。

アイマスクのすすめ


最近、寝付きが悪くなってきたのでアイマスクを使い始めました。

Read more ⟶

Hugoの記事にコンテンツを埋め込む


ブログに埋め込んだGistのコードやYouTubeが表示されなくなっていたので対処法メモです。

Read more ⟶

Human Fall FlatとSteam Remote Play Together


友人とHuman Fall Flatというゲームを遊びました。

Read more ⟶

TOMLをGolangで読み込もうとして躓いた話


GolangでTOMLファイルに書かれた設定を読み込もうした時に躓いたのでメモを残しておきます。

Read more ⟶

渋谷落語を観てきました


渋谷で毎月開催される初心者向け落語会、渋谷落語を観てきました。

5日間で10公演開かれるのですが、今回は上のツイートで紹介されている5公演目を観てきました。
まともに落語を観るのは初めてだったのですが、演者さんを紹介するペーパーも配られており、初心者へのハードルを下げている感じがしました。
4組とも面白かったのですが、柳家わさびさんに垂乳根が特に気に入りました。寿限無のような感じでしょうか。
柳家わさびさんの別の演目や、他の演者さんの垂乳根も観てみたいです。

落語は声色だけでキャラクターを使い分けて場面を想像させるのですが、同じ話を聴いても観客ごとに異なる世界を想像するのは読書に近い体験でしょうか。

8月の落語会では創作落語のネタを初披露する会が予定されているようです。創作落語では現代を舞台にした話もあるようなので観に行こうかと思っています。

Read more ⟶

朝食の数値化


はじめに

ここ数年、朝食メニューが固定化されてきたので、価格や栄養素を数値化してみます。

メニュー

毎日の朝食は以下の通りです。

  • シェイク(COMP POWDER+プロテイン+豆乳)
  • スムージー(ほうれん草+バナナ+ブルーベリー+豆乳)
  • コーヒー

液体ばかりですね。

COMP POWDERは株式会社コンプが出している完全栄養食です。
http://www.comp.jp/products/powder.html

プロテインはゴールドスタンダードシリーズを飲んでいます。ダブルリッチチョコレート味が美味。 https://www.optimumnutrition.jp/goldstandard.html

豆乳はマルサンの調製豆乳です。
https://www.marusanai.co.jp/lineup/detail-63005/

メニュー詳細

シェイクで使われる材料の詳細です。

材料分量価格1食分の価格備考
COMP POWDER96g(1袋)8550円/24袋356円COMP公式サイトで定期購入
プロテイン32g6621円/2270g88円iHerbで購入
豆乳360g1187円/1リットル*6本71円Amazonで定期購入

スムージーで使われる材料の詳細です。

材料分量価格1食分の価格備考
豆乳300g1187円/1リットル*6本59円Amazonで定期購入
ほうれん草40g150円/1袋(約200g)30円スーパーで購入
バナナ90g(1本)100円/5本(約450g)20円スーパーでで購入
冷凍ブルーベリー50g150円/150g50円スーパーでで購入

コーヒーです。

材料分量価格1食分の価格備考
ドリップコーヒー1パック430円/18パック23円スーパーでで購入

合計697円…家で食べる朝食としては少し高いですかね。

Read more ⟶

時計の秒針について


今回は算数と理科のお話です。

たとえば、文字盤の半径が1cmのアナログ腕時計があるとします。

この場合、文字盤の円周は約6.28cmとなるので、秒針の先端は1分間で約6.28cm進みます。 (実際は文字盤の内側を秒針が通るので、秒針が進む距離は少し短くなりますが、面倒なのでここでは文字盤の端を秒針が通るということで話を進めます。)

半径15cmの柱時計の場合は、文字盤の円周は約94.2cmとなるので、秒針の先端は1分間で約94.2cm進むことになります。

時計の文字盤が大きいほど、円周も大きくなるので、秒針の先端のスピードも上昇します。
つまり…大きなアナログ時計を作れば、秒針が音速や光速を超えるのでは…🤔ということです。

See the Pen 秒針 by foresukecom (@foresukecom) on CodePen.

スカイツリー(634m)を秒針にした場合、秒針の先端は時速約95km(秒速66m)で進みます。

逆に、音速(秒速340m)を超えるのに必要な秒針の長さは約3.25km、光速(秒速300,000km)を超えるのに必要な秒針の長さは約2,866,242kmとなります。
太陽の半径が約700,000kmなので、光速を超えるための秒針を用意するのは大変そうです。

実際には特殊相対性理論によると「物質は光速に近づくにつれて質量が増える」ので、どれだけ大きな時計を作っても秒針が光速を超えることはできません。
でも半径が約3.25kmの時計なら国を挙げて頑張れば可能なのでは…と、ちょっと期待してしまいます。

蛇足

最近、factorioというゲームにハマってます。
ある惑星に不時着したプレイヤーが、鉄鉱石や銅鉱石、石炭、木などの資源を使って再び宇宙を目指す、というゲームです。 このゲームは採掘、運搬、加工を自動化し、効率的な工場を組み上げるのが楽しさの1つとなっています。

このゲームは止め時が難しく、もう少しもう少しとラインを改良していく内に、どんどん時間が溶けていきます。 週末にゲームを立ち上げたら10時間が経っていた、ということも珍しくありません。

Read more ⟶

Golangのスコープについて


はじめに

Golangを書いてて詰まったことがあったのでメモです。

本文

こんな感じでカテゴリ、商品名、価格を持った構造体のスライスがあるとします。

type product struct {
	category string
	name     string
	price    uint64
}
showcase := []product{
	{"果物", "りんご", 120},
	{"果物", "バナナ", 100},
	{"果物", "みかん", 70},
	{"肉", "鶏もも", 250},
	{"肉", "豚バラ", 300},
	{"肉", "カルビ", 450},
}

で、このスライスから果物の価格だけ10円引きします。

for _, v := range showcase {
	if v.category == "果物" {
	    v.price -= 10
	}
}

こんな感じで書いたのですが、上のfor文だとshowcaseの中身は変更されません。
変数のスコープを考えてなかったのが原因です。 変数vはfor文の中でしか使えないので、いくらvの中身を変更してもshowcaseの中身は変わりません。

for i := 0; i < len(showcase); i++ {
	if showcase[i].category == "果物" {
		showcase[i].price -= 10
	}
}

上のように要素を指定して直接変更すればshowcaseの中身を変更することができます。

Read more ⟶

ChromebookにUbuntuをインストールしようとした愚か者のお話


はじめに

ChromeBookにUbuntu入れようとしたら、キーボードとトラックパッドが反応しなくなりました。
\(^o^)/

[ChromebookのFile Systemへの書込み制限を解除する方法 ― Write-Protect-Screwの外し方 C300MA編] (https://chromesoku.com/rw-filesystem-on-chromebook/)

詳しくはリンク先の記事に書いてありますが、ChromebookはWrite-Protect-Screwというネジで物理的にファイルシステムへの書き込みを制限しているようです。

僕が持っている端末とはモデルが違うのですが、似たような仕組みだろうということで精密ドライバを使って分解してみました。
Write-Protect-Screwらしいネジが見当たらないので、改めて組み直したのですが、キーボードとトラックパッドが反応しなくなってしまいました。
やってしまった…

さようならChromeBook。今まで楽しかったよ。

Read more ⟶

Golangでテストコードを書く少年のお話


はじめに

お仕事でGolangのテストコードを書くことになったのでお勉強しました。
テスト対象は以下のプログラムです。

毎朝のルーティンを明文化し、以下の処理をしています。

  • 降水確率40%以上なら傘を装備する。
  • 冬、もしくは最低気温が5度以下ならコートを装備する。

以下の通り、4つの命令と2つの条件分岐で構成されています。

種別やってること
命令持ち物を入れるカバンを用意
条件分岐降水確率による判定
命令カバンに傘を入れる
条件分岐季節、最低気温による判定
命令カバンにコートを入れる
命令カバンを持ち出す

テストの種類

カバレッジとはテストの網羅率のことを指しています。
「どのパターンのテストを行えば、必要な範囲のテストが完了したのか?」の指標となります。
「必要な範囲」については、C0カバレッジ、C1カバレッジ、C2カバレッジ…とカバレッジの種類によって異なります。

それぞのカバレッジについて簡単に説明していきます。
※C3以降もありますが、よく使われるのはC2までみたいなので、今回は省略します。

C0カバレッジ(命令網羅)

すべての命令を最低1回は実行する、というテストケースを満たせばカバレッジが100%になります。
以下のパターンを実行すれば、すべての命令を実行することができるので、C0カバレッジ100%になります。
「降水確率が50%、季節は冬、最低気温12度。」

C1カバレッジ(分岐網羅)

すべて条件分岐の組み合わせを通る、というテストケースを満たせばカバレッジが100%になります。
今回はTrue/Falseの分岐が2つあるので4パターンの組み合わせでテストを行う必要があります。

パターン具体例
パターン1TrueTrue降水確率が50%、季節は冬、最低気温12度。
パターン2TrueFalse降水確率が50%、季節は春、最低気温12度。
パターン3FalseTrue降水確率が20%、季節は冬、最低気温12度。
パターン4FalseFalse降水確率が20%、季節は春、最低気温12度。

具体的には以下のパラメータでテストをやればOKです。

C2カバレッジ(条件網羅率)

すべての条件の組み合わせを通る、というテストケースを満たせばカバレッジが100%になります。
C1カバレッジと似ていますが、C1カバレッジは条件分岐の結果をすべて通ればOKですが、C2カバレッジではすべての条件の結果を通る必要があります。
今回のケースだと、「冬か?」と「最低気温が5度以下か?」という2つの条件のそれぞれに対してTrue/Falseの組み合わせを試す必要があります。

そのため、④の条件分岐を2つに分割し、以下のパターンのテストが必要になります。

パターン④-1④-2具体例
パターン1TrueTrueTrue降水確率が20%、季節は冬、最低気温2度。
パターン2TrueTrueFalse降水確率が20%、季節は冬、最低気温12度。
パターン3TrueFalseTrue降水確率が20%、季節は春、最低気温2度。
パターン4TrueFalseFalse降水確率が20%、季節は春、最低気温12度。
パターン5FalseTrueTrue降水確率が50%、季節は冬、最低気温2度。
パターン6FalseTrueFalse降水確率が50%、季節は冬、最低気温12度。
パターン7FalseFalseFalse降水確率が50%、季節は春、最低気温2度。
パターン8FalseFalseTrue降水確率が50%、季節は春、最低気温12度。

具体的には以下のパラメータでテストをやればOKです。

Read more ⟶