2023年3月の日記

Unknown programmer's programming note.

2023年3月31日 (金)

晴れ

今日の読書

  • コードコンプリート 第2版 下 32章
  • コードコンプリート 第2版 下 33章
  • コードコンプリート 第2版 下 34章
  • コードコンプリート 第2版 下 35章 (完)

ついに読破した。
正直きつかった。
早く読み終えてコードを書きたいというはやる気持ちを抑えるのが大変だった。
しかし、得られたものは大きい。
プログラミングとはコードを書くだけのものではない。
最終的なコードを生み出すことを目標とした、大きなアクティビティだと認識できるようになった。
これからコードを見る目が変わりそうだ。

2023年3月30日 (木)

晴れ

今日の読書

  • コードコンプリート 第2版 下 27章
  • コードコンプリート 第2版 下 28章
  • コードコンプリート 第2版 下 29章
  • コードコンプリート 第2版 下 30章
  • コードコンプリート 第2版 下 31章

かなり進んだ。
3月中に読み終えて、4月からは新しいスタートを切りたいのでがんばってみた。

2023年3月29日 (水)

晴れ

今日の読書

  • Pythonチュートリアル 第4版 完了
  • Python Game Programming By Example 1章
  • Python Game Programming By Example 2章

1時間でゲームを作った動画を考えている。
CrystalでやったPongはまったく再生されない。
もともと再生回数を気にしているわけではなかったのだが、0回となるとちょっと不思議に思っている。
Pythonでやるとどうなるのか、実験してみたくなってきた。
そういうわけで、ちょっと手を出してみた。

コーディングにはSpacemacsを使っている。
SPC p u に projectile-run-project というのがバインドされていて、プロジェクトディレクトリから任意のコマンドが実行できる。
これでスムーズに実行できる。
Pythonに限らず、例えば、C++のプロジェクトや、最近やっていたCrystalのプロジェクトでも何でも使えるだろう。
知らずにいて損した。

ThonnyというPythonのIDEをインストールしてみた。
ラズパイOSでデフォルトインストールされているので存在は知っていた。
初心者向けということだが、かなり良い感じだ。

2023年3月28日 (火)

晴れ

今日の読書

  • 教養としてのコンピューターサイエンス講義 第2版 1章
  • Modern C++ チャレンジ 2章

「教養としての〜」はカーニハン先生の書いた本なのだけど、攻撃者の文脈でハッカーと呼んでいるのが引っかかった。

「Modern C++ チャレンジ」は、いったん自分で書いてから解答を読むことを心がけてはいる。
しかし、問題の意図が掴みづらかったりする。
単純なコードとは言えない、結構な量のコードだったりで、模範解答に近づけるのは至難の技だ。

Physically Based Rendering 4th edition の発送が4月29日だった

予約して支払い済みなのだが、発送が4月29日となっていた。
3月28日発売になっていたので、29日と書かれているのを見て翌日だろうと思いこんでいた。
Amazon出品、販売なのだが、こんなことは初めてだ。

2023年3月27日 (月)

晴れ、曇

本を買った

病院に行ったついでに本屋によってきた。
アルゴリズムCの第5部だけを目当てに行ったのだけど、良さそうな本が目に入ってきて、買ってしまった。
あと雑誌も2冊買った。
合計¥17,000と、高い買い物になってしまった。

今日の読書

  • コードコンプリート 第2版 下 25章
  • コードコンプリート 第2版 下 26章

コードチューニングの章だった。
25章はどういう構えでチューニングに挑むかが書かれている。
チューニングをすれば、コードの可読性が下がる。
当然というべきか、慎重に行うべきで、施す場所には必ず測定を行うことが繰り返し警告されている。
決して憶測でやってはいけない。
26章は、具体的なコードのチューニングのテクニックが書かれている。
複数の言語で試して、全てに対してどのような変化が得られたか、時間測定の結果が書かれている。
前章の必ず測定すべしという方針に徹底して従っている。
言語の環境によって、同じチューニングを行っても、改善したり変化がなかったり、さらには悪くなったりすることがある。
計測の方法は書かれていない。
自分で行うときは、おそらくGoogle Benchmarkあたりに頼ることになるだろう。
手段を確立しておきたい。

2023年3月26日 (日)


Physically Based Rendering 4th edition を予約する

28日に発売で、予約受付中だ。
17,000弱と高価だが、買わないわけにはいかないだろう。
第3版は買ったのだけど、届いたら状態がひどすぎて返品した。
買い直すにも、また変なのが届いたらと思って保留しているうちに第4版が出た。
今回は気を逃さない。

予約しておいた。
前と出版社が変わっているので、状態はおそらく大丈夫だろう。

今日の読書

  • Crystal Programming
    • 13章 Advanced Macro Usages
    • 14章 Testing
    • 15章 Documenting Code
    • 16章 Deploying Code
    • 17章 Automation

読み終わった。
いい本だった。
13章はかなり難しい。
経験1週間程度の今の段階では、あまり必要性が感じられないので、理解しようという欲求がわかない。
14〜17章は、Crystalに限らず、最近のモダンな開発環境のおさらいとしても有用だ。
実際のプロジェクトでCrystalを採用するときに読み直すと、より高い効果が得られるだろう。

Neovimをちょっと学んだ

すごくいいガイドを見つけたので、やっておいた。
動機は、SpacemacsがCrystalの入れ子になったマクロをちゃんと解析してくれないから、他のエディタだとどうなのだろうと試してみたくなったからだ。
Neovimも、ちょっとした編集にはよく使っている。
ほぼデフォルト状態で、まともにコードを書いたことはない。
Crystalのプラグインを追加したいのだけど、プラグインマネージャーを使わないと、手作業では面倒そうだったので使い方を覚えることにした。

参考にしたのは次の2つのガイド。

1つ目の方だけ読んでおけば、lazy.nvimというプラグインマネージャーを使って、必要なものをインストールできるようになる。
設定は、Luaで書けるのでとても読みやすい。
2つ目の方は、便利なプラグインの紹介がメインとなっている。

Pythonでゲームを作る

1時間で作るのはPythonにしようかと思った。
まずはテトリスだろうか。
もう使い捨てのテトリスはいろんな言語でやってきていて飽きているのだけど、わかりやすさは抜群なので、避けがたい。
とりあえずSpacemacsのPythonレイヤーを有効にしてみた。
流石にサポートが熱い。
何にもしなくてもかなり便利に使える。

2023年3月25日 (土)

曇り

雪囲いの撤去

作業中、爪の間に木片が刺さった。
かなり奥深くに残ってしまう。
なんとか取れたので良かった。
指を怪我するとタイピングに支障がでるのでひやっとした。

今日の読書

  • Test-Driven Development with C++ 5章
  • Crystal Programming 10、11、12章

TDDは、だんだんテストライブラリの体裁が整ってきている。
ようやくこの本の主旨を理解し始めてきた、と思っているのだが、まだ難しく感じるところもある。

Crystal Programmingは、メタプログラミングのパートに突入している。
ようやく終盤に差し掛かってきた。
軽い気持ちで始めたのだけど、つい本気で読み込んでしまった。

2023年3月24日 (金)

曇り

今日の読書

  • Test-Driven Development with C++ 3章、4章

だいぶ馴染んできた。
最初は、テストライブラリ自体を自作するというアプローチにちょっと戸惑っていた。
手っ取り早く、既存のテスティングフレームワーク、例えばGoogle Testなんかの使い方を覚えることができればいいかくらいに思っていた。
なんかちょっと求めてるのと違うかなと思っていた。
しかし、そうではなかった。
テストライブラリの開発にさえTDDを採用して、テストライブラリ自体をそれ自身によってテストするというのは、奇妙に再帰的だが効果的なトレーニング方法だ。
また、読んでいて楽しい。
良い本を見つけたものだ。

Serifフォント

Packtの所有してる本は、Calibreで読むようにした。
EPUBだとフォントを変更できる。
さらにはCSSでフォント以外も細かく調整できる。
あまりいじくり回しても読みにくくなるので、やらない。
長時間眺めることになるので、フォントは重要だ。
デフォルトはシステムのSerifフォントとなっている。
どれが使われているかわからない。
たぶんNoto Serifあたりではないかと思う。
全然悪くないのだけど、完璧に嗜好にマッチしているとまではいかない。
他にインストールされているものとして、DejaVu Serifがある。
これも全然悪くないのだけど、やはり完璧に嗜好にマッチしているとまではいかない。
おすすめのフォントを紹介しているページを探して、ここを参考に、その中からいくつか試してみた。
完璧に嗜好にマッチするのが見つかった。

  • Merriweather
  • Literata

どちらもGoogleフォントからダウンロードできる。
読んでいて気持ちが良い。
これで読書が捗りそうだ。

2023年3月23日 (木)

曇り

今日の読書

  • Crystal Programming 8章、9章

WebフレームワークであるAthenaを使う。
かなり大掛かりなフレームワークだ。
Webサイトを作るのだが、最初にサイトがどのような見た目になるのかを考えるのではなく、どのようなデータを必要とするかを考えて、Web APIを中心に構築していく。
APIとはURLからJSONでデータでやり取りするものだ。
先にAPIを完成させてから、後でそれを利用してMVCのVであるWebページを書く。
このアプローチは心地が良い。

2023年3月22日 (水)

曇り

風邪を引いたようだ

なんだか身体がだるいし、少し頭がくらくらする。
熱は37.2℃と微熱がある。
大した熱ではない割には、倦怠感が強い。
悪化しなければよいけど。

Crysta日記 #4 を投稿した

1時間でPongを作るのに挑戦した。
2度ほどオフラインで練習してから挑んだ。
3回目から録画して始めたが、5分オーバーしたので取り直すことにした。
4回目は、なんとか間に合いそうなところ、最後の最後でバグに遭遇して没になった。
5回目は、バグの原因と対策を用意して挑み、さらに、きっかり1時間ではなく、大体1時間と敷居を下げて挑んだ。
なんとか1時間以内に終えることができた。
最初だから簡単なものをと思いPongにしたのだが、ほんとギリギリだ。
ブロック崩しはも何度もチャンレンジすれば可能かもしれない。
テトリスは無理ではなかろうか。
やってて苦痛だったし、もうやらないかもしれない。

2023年3月21日 (火)

曇り

今日の読書

  • Crystal Programming 6、7章

Crystal面白い。
これでPart 2が終わった。
基本的なことはここまでだろう。
あとは、アプリケーションを作ってみるとか、メタプログラミングのような高度なな話題とか、装備されているツールとか、より実戦向けになっていきそうだ。
Crystalを使い続けるかどうかはまだ決めかねている。
V、Odin、Elixirの本を消化しておきたい。
それとDの本だ。
Dを採用する予定はないのだが、本の内容が素晴らしいので、読まず置くのはもったいない。

2023年3月20日 (月)

晴れ

今日の読書

  • Crystal Programming 3、4、5章
  • コードコンプリート 23、24章
  • Newton 2019年11月号

まずまずの成果。
だがまだまだいける。
Newtonの特集は周期表で、これは保存版といってもいいかもしれない。
周期表は、高校のときの化学の授業で見たのが最後で、それ以来目にしたこともない。
化学の範疇かと思っていたけど、あらゆる分野の基礎となる大事なものなのではなかろうか。

2023年3月19日 (日)

晴れ

Crystal日記の動画をアップした

3本目。
1時間でゲームをつくる、というシリーズに挑戦してみたくなった。
最初なので、簡単なもので小手調べをしてみた。
作るのは、以前ブログでも採用した、数当てゲームにした。
時間を測るのに、カウントダウンタイマーアプリを探した。
gnome-clocksというのが見つかって、なかなかいい感じだった。
15分くらいでいけるだろう、と思っていたところ、実際にやってみると45分程度かかった。
もちろん、何も喋らずに集中してやればもっと短縮できるのだけど、それじゃ動画として全く面白くない。
ここはこうこうこうなっているとか逐一しゃべっていくと、すぐに時間が過ぎてしまう。
こんな簡単なゲームで45分もかかるなら、もうちょっとだけ複雑なゲーム、例えば、倉庫番とかPongとかでさえ軽く1時間は超えるだろう。
おそらく2時間近くなることが予想される。
1時間で収めようとするなら、事前にコードを丸暗記しといて、ひたすら書き出すだけにしないと無理だろう。
そこまでして1時間で作ったという肩書、実績を残したいとは思わない。
続けるかどうか迷いが生じている。

Bosque言語が気になる

Packtの「Learn Bosque Programming」という本で知った。
本の手順に従ってインストールを試みたが、ビルドに失敗する。
Microsoftのリポジトリはアーカイブされて、2年前から更新されていない。
プロジェクトは新しい、専用のユーザーのリポジトリに別れたようだ。
古い方のリポジトリには、そのPacktの本専用のブランチがある。
これでビルドすると、ビルドはパスするけど、テストをまったくパスしない。
新しい方のリポジトリの方を使おうとすると、ビルドもテストもパスするが、本とインストール手順が異なるようで、どうすればいいか分からない。
ソースはNode.jsのプロジェクトとなっている。
Node.js、TypeScript、C++が関わってきていて、Node.jsとTypeScriptについてはほぼ経験がないので、いまいち全容が掴めない。
ちゃんと調べれば分かるだろうけど、今はまだいいかな、と思いやめておくことにした。

2023年3月18日 (土)

何もしてない

異様に眠くて、ほぼ何もしなかった。

今進行中の本

今、同時進行でたくさん本を読んでいる。
混乱してきたので、ちょっと整理しておこう。

  • コードコンプリート 第2版 (下)
  • プログラミングElixir 第2版
  • プログラミング言語D
  • Test-Driven Development with C++
  • Crystal Programming
  • SFML Game Development By Example

2023年3月17日 (金)

曇り

再開することにした

今年開けてから仕事が入ったのと、モンハンに忙しくてついに更新が滞ってしまった。
時間がなかったわけではなく、なんとなくPCに向かう気にならなかっただけだ。
PCを新しいPCに移行して、古いPCからデータを取ってくるちょっとした手間が面倒になっていた。
1年間弱欠かさず継続してきたのにもったいないことをした。
今、ようやくデータをとってきてファイルを編集する気になった。
Spacemacsの設定がまだ微妙だ。
前はSKKを使っていたのだけど、設定を移行するのが面倒なのでMozcを試してみることにした。
org-modeの見た目や操作感もちょっと違っている。
見出しの日本語フォントが明朝体になっていて、違和感がある。
SKKをセットアップするのもフォントを調整するのも、ちょっと時間を取れば解決できるだろうけど、なんとなく面倒だ。
慣れればなんとかなるだろうから、このままいくことにする。

1月、2月のまとめ

思い出せる範囲で、かつ、書いても良い範囲で書いておこう。

やったこと:

  • 以前開発したQtアプリケーション改修の仕事を完了した
  • モンハンワールド プレイ時間500時間超
  • シューティングゲームを作り始めた
    • SFML Game Development という本に影響された
    • YouTubeに投稿しながら進行中
  • VTuberの動画を視聴するのが楽しかった

できなかったこと:

  • 2月は、2023年中に読み終えると目標に掲げた本を消化できなかった
  • 1月頭からブログが完全にストップしていた

    こんなところだろうか。

Created: 2024-02-07 水 06:07

Emacs 29.1 (Org mode 9.6.6)

Validate