朝食の数値化
2019/07/09
はじめに ここ数年、朝食メニューが固定化されてきたので、価格や栄養素を数値化してみます。 メニュー 毎日の朝食は以下の通りです。 シェイク(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 POWDER 96g(1袋) 8550円/24袋 356円 COMP公式サイトで定期購入 プロテイン 32g 6621円/2270g 88円 iHerbで購入 豆乳 360g 1187円/1リットル*6本 71円 Amazonで定期購入 スムージーで使われる材料の詳細です。 材料 分量 価格 1食分の価格 備考 豆乳 300g 1187円/1リットル*6本 59円 Amazonで定期購入 ほうれん草 40g 150円/1袋(約200g) 30円 スーパーで購入 バナナ 90g(1本) 100円/5本(約450g) 20円 スーパーでで購入 冷凍ブルーベリー 50g 150円/150g 50円 スーパーでで購入 コーヒーです。 材料 分量 価格 1食分の価格 備考 ドリップコーヒー 1パック 430円/18パック 23円 スーパーでで購入 合計697円…家で食べる朝食としては少し高いですかね。…
時計の秒針について
2019/05/04
今回は算数と理科のお話です。 たとえば、文字盤の半径が1cmのアナログ腕時計があるとします。 この場合、文字盤の円周は約6.28cmとなるので、秒針の先端は1分間で約6.28cm進みます。 (実際は文字盤の内側を秒針が通るので、秒針が進む距離は少し短くなりますが、面倒なのでここでは文字盤の端を秒針が通るということで話を進めます。) 半径15cmの柱時計の場合は、文字盤の円周は約94.2cmとなるので、秒針の先端は1分間で約94.2cm進むことになります。 時計の文字盤が大きいほど、円周も大きくなるので、秒針の先端のスピードも上昇します。 つまり…大きなアナログ時計を作れば、秒針が音速や光速を超えるのでは…🤔ということです。 スカイツリー(634m)を秒針にした場合、秒針の先端は時速約95km(秒速66m)で進みます。 逆に、音速(秒速340m)を超えるのに必要な秒針の長さは約3.25km、光速(秒速300,000km)を超えるのに必要な秒針の長さは約2,866,242kmとなります。 太陽の半径が約700,000kmなので、光速を超えるための秒針を用意するのは大変そうです。 実際には特殊相対性理論によると「物質は光速に近づくにつれて質量が増える」ので、どれだけ大きな時計を作っても秒針が光速を超えることはできません。 でも半径が約3.25kmの時計なら国を挙げて頑張れば可能なのでは…と、ちょっと期待してしまいます。 蛇足 最近、factorioというゲームにハマってます。 ある惑星に不時着したプレイヤーが、鉄鉱石や銅鉱石、石炭、木などの資源を使って再び宇宙を目指す、というゲームです。 このゲームは採掘、運搬、加工を自動化し、効率的な工場を組み上げるのが楽しさの1つとなっています。 このゲームは止め時が難しく、もう少しもう少しとラインを改良していく内に、どんどん時間が溶けていきます。 週末にゲームを立ち上げたら10時間が経っていた、ということも珍しくありません。 海外のインディーズゲームでは珍しく、日本語にも対応しています。 それも自動翻訳のようなカタコトではなく、有志が翻訳したものを公式が取り込んでくれたので非常に自然な日本語になっています。 さらにMODにも寛容で、ゲーム内からMODをインストールすることも可能です。 MDOなしでも充分に長時間遊べるのですが、MODを入れることで無限に遊ぶことが可能です。 まだ今年のGWは数日ありますので、みなさんもすぐにDLして時間を溶かしましょう。
Golangのスコープについて
2019/02/09
はじめに 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].…
ChromebookにUbuntuをインストールしようとした愚か者のお話
2019/02/03
はじめに 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。今まで楽しかったよ。
Golangでテストコードを書く少年のお話
2019/01/22
はじめに お仕事でGolangのテストコードを書くことになったのでお勉強しました。 テスト対象は以下のプログラムです。 毎朝のルーティンを明文化し、以下の処理をしています。 降水確率40%以上なら傘を装備する。 冬、もしくは最低気温が5度以下ならコートを装備する。 以下の通り、4つの命令と2つの条件分岐で構成されています。 項 種別 やってること ① 命令 持ち物を入れるカバンを用意 ② 条件分岐 降水確率による判定 ③ 命令 カバンに傘を入れる ④ 条件分岐 季節、最低気温による判定 ⑤ 命令 カバンにコートを入れる ⑥ 命令 カバンを持ち出す テストの種類 カバレッジとはテストの網羅率のことを指しています。 「どのパターンのテストを行えば、必要な範囲のテストが完了したのか?」の指標となります。 「必要な範囲」については、C0カバレッジ、C1カバレッジ、C2カバレッジ…とカバレッジの種類によって異なります。 それぞのカバレッジについて簡単に説明していきます。 ※C3以降もありますが、よく使われるのはC2までみたいなので、今回は省略します。 C0カバレッジ(命令網羅) すべての命令を最低1回は実行する、というテストケースを満たせばカバレッジが100%になります。 以下のパターンを実行すれば、すべての命令を実行することができるので、C0カバレッジ100%になります。 「降水確率が50%、季節は冬、最低気温12度。」 C1カバレッジ(分岐網羅) すべて条件分岐の組み合わせを通る、というテストケースを満たせばカバレッジが100%になります。 今回はTrue/Falseの分岐が2つあるので4パターンの組み合わせでテストを行う必要があります。 パターン ② ④ 具体例 パターン1 True True 降水確率が50%、季節は冬、最低気温12度。 パターン2 True False 降水確率が50%、季節は春、最低気温12度。 パターン3 False True 降水確率が20%、季節は冬、最低気温12度。 パターン4 False False 降水確率が20%、季節は春、最低気温12度。 具体的には以下のパラメータでテストをやればOKです。 C2カバレッジ(条件網羅率) すべての条件の組み合わせを通る、というテストケースを満たせばカバレッジが100%になります。 C1カバレッジと似ていますが、C1カバレッジは条件分岐の結果をすべて通ればOKですが、C2カバレッジではすべての条件の結果を通る必要があります。 今回のケースだと、「冬か?」と「最低気温が5度以下か?」という2つの条件のそれぞれに対してTrue/Falseの組み合わせを試す必要があります。 そのため、④の条件分岐を2つに分割し、以下のパターンのテストが必要になります。 パターン ② ④-1 ④-2 具体例 パターン1 True True True 降水確率が20%、季節は冬、最低気温2度。 パターン2 True True False 降水確率が20%、季節は冬、最低気温12度。 パターン3 True False True 降水確率が20%、季節は春、最低気温2度。 パターン4 True False False 降水確率が20%、季節は春、最低気温12度。 パターン5 False True True 降水確率が50%、季節は冬、最低気温2度。 パターン6 False True False 降水確率が50%、季節は冬、最低気温12度。 パターン7 False False False 降水確率が50%、季節は春、最低気温2度。 パターン8 False False True 降水確率が50%、季節は春、最低気温12度。 具体的には以下のパラメータでテストをやればOKです。…
退職エントリ
2018/12/29
12月いっぱいで今の会社を退職します。 次の職場でもがんばるぞい!
コーヒー美味しい
2018/12/25
コーヒーサーバを手に入れました。 ありがとうサンタさん、来月はクレカ支払い頑張るよ。 マグカップが汚い…黒色のマグカップを使えば汚れが目立たなくていいのでは🤔 ステンレスフィルタを使うのは初めてなのですが粉が残りますね。フィルタを洗うのも手間なので、普段はペーパーフィルタを重ねて使った方が手軽そうです。 電気ケトルから直接お湯を注いでいるのですが、注ぎ口が広いのでまともに「の」の字を書いてドリップすることができませんでした。 注ぎ口が細くなっている電気ケトルかヤカンが欲しくなります。 どうせなら、自宅でコーヒー豆を挽いたり、焙煎したり…沼が広がります。
Pocketからお祝いされました -2018-
2018/12/23
Pocketから以下のメールが届きました。 2016年、2017年には上位5%になったことを祝福するメールが届きましたが、ついに2018年は上位1%のユーザになれたようです。 自分が登録した記事の中から人気がある記事をピックアップしてみるとQiitaの記事が多いみたいです。 やはりQiitaはSEOに力を入れているのか閲覧者が多いようですね。 ちなみに、2018年12月21日時点では全記事数が9,720ページ、未読記事が2,289ページ、既読率76.5%という状況です。 2017年2月4日時点では全記事数が4,887ページ、未読記事が800ページ、既読率83.6%でしたので積読が捗っているようです。 毎日、未読率を出したり、未読記事からランダムでSlackに投稿するようにしましたが、まだ手緩いようです。todoリストと連携して毎日記事を読むように仕向けましょうか… しかし…プレミアム会員にもなっていない自分が上位1%のユーザになれてしまうとは… 若者のPocket離れが深刻ですね。 Pocketなら気になる記事を後から読み返すことも簡単に出来るし(実際は読み返さないけど)、PocketのArticle Viewなら邪魔くさい広告が表示されないから集中して記事が読めて便利ですよ! みんな使いましょう!!
Golangのpanicのお話
2018/11/21
はじめに Golangというと、クロスコンパイルが特徴の1つとして挙げられます。 クロスコンパイルにより、Macで書いたコードからLinuxやWindows向けの実行ファイルを簡単に生成することができます。そのため、業務で使う便利ツールを作ってチーム内に配る、といったことも容易に行えます。 今回は僕がGolangを書き始めたばかりのころ、他の環境で動かすツールを作ったときに驚いた思い出ばなしです。 サンプルコード 実際のコードとは違いますが、当時は以下のようにエラーが発生したらpanic()で処理を中断させるコードを書いていました。 で、このコードを以下のようなディレクトリ構成の中に配置していました。log_analysisが1つのプロジェクトというイメージです。 tmp └── tanaka └── azunyan_prpr └── tools └── log_analysis └── main.go このコードをmitchellh/goxを使ってクロスコンパイルすると、以下のように各プラットフォームに対応した実行ファイルが生成されます。 $ gox Number of parallel builds: 3 --> freebsd/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> netbsd/arm: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> linux/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> darwin/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> windows/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> openbsd/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> openbsd/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> windows/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> netbsd/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> freebsd/arm: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> darwin/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> linux/arm: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> linux/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> freebsd/386: _/tmp/tanaka/azunyan_prpr/tools/log_analysis --> netbsd/amd64: _/tmp/tanaka/azunyan_prpr/tools/log_analysis $ ls -1 log_analysis_darwin_386 log_analysis_darwin_amd64 log_analysis_freebsd_386 log_analysis_freebsd_amd64 log_analysis_freebsd_arm log_analysis_linux_386 log_analysis_linux_amd64 log_analysis_linux_arm log_analysis_netbsd_386 log_analysis_netbsd_amd64 log_analysis_netbsd_arm log_analysis_openbsd_386 log_analysis_openbsd_amd64 log_analysis_windows_386.…
Tweetボタンでつぶやく内容を動的に変更する
2018/11/11
はじめに 今回はWebページ設置するTwitterの共有ボタンからTweetを行う際、Tweetする内容を動的に変更する方法をご紹介します。 本文 Twitterの共有ボタンを設置するだけなら、Twitter公式サイトで生成できる以下のコードをHTMLに埋め込むことで簡単に実現できます。 <a href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="twitter-share-button" data-text="ハローワールド" data-show-count="false">Tweet</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> しかし、この方法だとTweetする文章を動的に変更することはできません。 そこで、JavaScriptでTweetする内容を生成して、window.openメソッドでTweet共有用のURL(https://twitter.com/share) を呼び出すことで対応します。 URLに以下のパラメータを追加することで、ハッシュタグやアカウントを含めたTweetを行うことができます。 パラメータ 説明 text Tweetする文章 url Tweetに含めるURL via Tweetに含めるアカウント hashtags Tweetに含めるハッシュタグ related Tweet後にフォローを勧めるアカウント サンプルコード 以下がサンプルコードになります。 JavaScriptのコードが18行ありますが、ほとんどは現在時刻を求めているだけで、実際にTweetを行うのに必要なのは17行目のwindow.open(...);だけです。 Tweetボタンを押すと、以下のようなTweetを投稿できます。 ※追記 Tweetが140文字を超えたらどうなるか確認したところ、以下のように403エラーとなりました。 実際に使うなら、文字数チェックの処理が必要ですね。 その他 最近Ultimate Chicken Horseをはじめました。 このゲームは4人対戦の2Dアクションゲームです。スタートからゴールまで早く到着したプレイヤーが勝ち、というシンプルなルールなのですが、試合ごとに足場やトラップを自由に設置できるので、後半になるほどカオスなコースになり、ワイワイと楽しむには最適なゲームです。 オンライン対戦に対応しているので、今は知らない人たちと野良で遊んでいるのですが、ボイチャをしてこそ真価を発揮するゲームだと思います。 おそらく年末のsteamセールの対象になるので、誰か買って一緒に遊んでください。 …作品名をアルティメイト・チキン・ヒーローズだと思っていたことは内緒です。