2022年2月の日記

Unknown programmer's programming note.

2022年2月28日 (月)

曇り

mcppcookbook chapter 8

並行処理の話。
やはり苦手だ。
これまで読んだものよりかは、ずっと読み易い。
しかし、実際のプログラムの中で、どのように応用すれば良いのかが分からない。
意識して使って、経験を積まないといけない。
知識として持っているだけではあまり意味がない。

ゲームプログラミングにおける、EntityとComponentというパターン

ゲームプログラミングC++という本で知ったものだが、結構広く使われているようだ。
PacktのSFMLの本を2冊目を通していると、両方ともにでてきた。
Game Programming Patternsでも、良く似たものが取り上げられている。

2022年2月27日 (日)


何もしてない

処分したい本をピックアップしていた。
それだけ。
何もしていない。

2022年2月26日 (土)

曇り

Modern C++ Programming Cookbook 第7章 読み終えた

filesystem がメイン。
初めて触った。
そんなに難しくない。

ストリームのところでは、ロケールも登場した。
put_timeとかput_moneyなるものの存在を知った。

2022年2月25日 (金)


本を少し処分した

30冊くらい手放した。
本を手放すのは久々だ。
数年前、ブックオブを回って手当りしだい気になる本を買い漁っていた時期があった。
そのときの収穫で、特にコンピュータ関係の、不要な本がたくさんある。
今回処分できたのはその一部だ。
まだまだある。
しかし、なかなか手放す決断ができない。
せめて1回読んでからとか、いつか役に立つかもとか思ってしまう。

2022年2月24日 (木)


今月のpsplusフリープレイ

フリープレイを獲得するために、久しぶりにPS4を起動した。
ドラゴンズクラウンProがあった。
これは嬉しい。
PS3のを持っているが最初の方で止まっている。
やってみよう思ってダウンロードを始めた。
終わるのを待っている間に寝てしまった。
やっぱゲーム熱が下がっている気がする。
来月(3月)は、void terarium();という日本一ソフトウェアのが含まれる。
以前、買おうか迷っていたタイトルで、かなり嬉しい。

2022年2月23日 (水)

小雪

休み

祝日で休みだった。
ほとんど寝てた。

Modern C++ Programming Cookbook 第6章 読み終えた

最後の第11章は既読なので、残り200ページくらい。

2022年2月22日 (火)

曇り、雪

2

2が並んだ日。
記念すべき日だ。
特に何もなかった。

明日休み

嬉しい。

働かない2人 24巻 読んだ

なんでだろう。
23巻までは5週するくらい面白かったのに、今回はそれほどでもなかった。
内容は下ネタがいつもより多かったような気がする。
それが原因という訳でもない。
もしかして、飽きてしまったのだろうか。

Modern C++ Programming Cookbook 第5章 読み終えた

標準ライブラリのコンテナ、アルゴリズム、イテレータ。
さほど目新しいことは書かれていなかった。
partial_sortとか、nth_elementとか、あまり使わないので曖昧だったのを復習できてよかった。
大体、復習。

2022年2月21日 (月)


寝まくった

10分休憩のつもりでベッドに入ると、そのまま数時間寝てしまう。
その繰り返しで、朝までずっと寝ていた。

2022年2月20日 (日)


projectileでプロジェクトのルートを指定する

CMakeLists.txtがあるディレクトリをルートと認識するようだが、ちょっと問題がある。
サブプロジェクトからならプロジェクトの場合、そのサブプロジェクトごとにCMakeLists.txtを配置する。
こうすると、projectileは、そのディレクトリをプロジェクトのルートとして認識してしまう。
この方が便利な場合があるかもしれないが、大抵は間違っている。
projectile-compile-project を実行したら、プロジェクト全体をビルドして欲しいものだ。
解決策は簡単だった。
本当にプロジェクトのルートであって欲しいディクレクトリに .projectile というファイルを配置すれば良い。

Spacemacsのフォントが欠けているときの対処

アップデートしたらアイコンのフォントが表示されなくなった。
特にホームのファイルの種類のアイコンが表示されなくなった。
all-the-icons-install-fonts とすればインストールしてくれる。
これだけで解決した。
参考

2022年2月19日 (土)

曇り

cmake-ideを使うのを止めた

Spacemacsではcmake-ideを使っていた。
cmake-ideは、CMake関連のコマンドを自動化してくれるもので、手軽にIDEのような操作感を提供してくる。
もともとはEmacsのrtagsを簡単に使えるようにするものだった。
Spacemacsではcmakeのレイヤーにオプションで追加することができる。
lsp-modeともうまく連携できていた。
しかし、最近になってなぜかヘッダを開くとき、同名のソース(.cpp)が存在しないと「Find or Create foo.c」と問合せが発生するようになった。
ここで適当に選択しても意味不明な動作をする。
原因は、cmake-ideがfind-fileをフックしているのだが、cmake-ide-maybe-run-cmakeという関数でおかしなことになっているようだ。
解決策が思いつかない。
CMakeレイヤーのドキュメントを見ると、projectileを使う方法も書かれていた。
そっちを使ってみることにした。
projectileではcmake-ideほど自動化されない。
CMakeLists.txtを変更したら、毎回 projectile-configure-project をやらないといけない。
ちょっと面倒だ。
makeのビルドメッセージも冗長で見難い。

.dir-localsには次のような記述が必要になる。

((nil . ((eval . (setq
               projectile-project-test-cmd #'helm-ctest
               projectile-project-compilation-cmd #'helm-make-projectile
               projectile-project-compilation-dir "build"
               helm-make-build-dir (projectile-compilation-dir)
               helm-ctest-dir (projectile-compilation-dir)
               ))
      (projectile-project-name . "My Cool Project")
      (projectile-project-run-cmd . "./run.sh")
      (projectile-project-configure-cmd . "cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..")
      (helm-make-arguments . "-j7"))))

もちろん、こんなものを毎回書いてはいられないので、スクリプトにしておく。

project_path=$(pwd)
project_name=$(basename ${project_path})

function file_not_exists {
  [ ! -e $1 ]
}

if file_not_exists .dir-locals.el
then
    echo 'generating .dir-locals.el...'
    cat <<EOF > .dir-locals.el
((nil . ((lsp-clients-clangd-args . ("--compile-commands-dir=build"
                                     "--pch-storage=memory"
                                     "--background-index"
                                     "-j=4"))
         (eval . (setq
                  projectile-project-test-cmd #'helm-ctest
                  projectile-project-compilation-cmd #'helm-make-projectile
                  projectile-project-compilation-dir "build"
                  helm-make-build-dir (projectile-compilation-dir)
                  helm-ctest-dir (projectile-compilation-dir)
                  ))
         (projectile-project-name . "${project_name}")
         (projectile-project-run-cmd . "./run.sh")
         (projectile-project-configure-cmd . "cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..")
         (helm-make-arguments . "-j7"))))
EOF
fi

さらに、これらのファイルローカル変数が安全であるとEmacsに認識させるために .spacemacs に次の記述が必要になる。

(put 'lsp-clients-clangd-args-clangd-args 'safe-local-variable 'listp)
(put 'projectile-project-name 'safe-local-variable 'stringp)
(put 'projectile-project-run-cmd 'safe-local-variable 'stringp)
(put 'projectile-project-configure-cmd 'safe-local-variable 'stringp)
(put 'helm-make-arguments 'safe-local-variable 'stringp)

evalで設定しているやつは、この形式で設定することができない。
safe-local-eval-formsに設定すればいけそうな気がしたので、いくつか試したけど成功しなかった。
仕方ないので、.dir-locals.elがあるディレクトリにアクセスしたときに表示される問合せで「!」を叩いて、カスタマイズに追加することにした。
evalの中では、ほぼ固定の内容なので、さほど問題はないだろう。
しかし、buildという名前以外のディレクトリでビルドしたいときなどはちょっと厄介なことになる。
できれば、.spacemacsで任意の文字列をパスさせるようにしたいところだ。

2022年2月18日 (金)

曇り

一部届いた

さすがAmazon Primeだ。
1日と待たずにこんな田舎まで到達するとは。

ハイスコアガール 完

良かった良かった。

ミスミソウ 完

思ったよりきつくはなかった。
いやそうでもないか。

2022年2月17日 (木)

雪、晴、曇り

押切蓮介の作品を収集

ハイスコアガールが面白過ぎるので他の本も揃えた。
地元の本屋でハイスコアガールDashの1、2巻を新品で買うことができた。
しかし、それだけしかなかった。
昨日とは別の、近場のブックオブでは欠けている部分を補充できた。
これで1巻から7巻までが揃った。
焔の眼は1、2、3、6巻と所有しているのだけど、新品はほぼ出回ってないようで、中古でも都合よく4、5と置いてあるはずもなく、見つからなかった。
なのでアマゾンを頼ることにした。
焔の眼は、新品ではオンデマンドのものが購入可能だった。
オンデマンドっていうのは、注文が来てから印刷するものらしい。
1冊1100円と、オリジナルのものよりかなり高い。
どのような状態のものか見てみたいというのと、ハイスコアガールを中古で安く買えてしまったことに引け目を感じていたので、6冊全部それで揃えてみることにした。
ハイスコアガールの残り8、9、10巻は普通に新品が注文できた。
ミスミソウ完全版 上下セットも新品で注文できた。
あとユリイカの押切蓮介特集というのがお勧めされたので、これも注文した。
やくしまるえつことの対談があるらしい。
KindleのハイスコアガールCONTINUEの1、2巻セットが「あなたへの特別オファー (70%ポイントバック)」に出てきて、1巻は持ってるけど確保しておいた。

働かない2人 24巻をようやく

前々から買わないとなーと思っていた24巻をこの機会に一緒に注文した。

最近全然ゲームやってない

PS5が出てからゲーム熱が低下している。
一番最初の抽選は受けたけど、当然のように落ちた。
FF7の続編が出てしまっている。
前作と同じように、予約して発売日はダウンロード開始の0時備えて寝ておいて、朝までプレイというのをやりたかったのに、できなくなってしまった。
もうPSストアのセールも全然見なくなってしまった。
面白いのは一杯あるんだけど、PS5のせいだ。
この際Xboxの方でもいいので欲しい。

2022年2月16日 (水)

雪、霰、霙

ハイスコアガールを買う

私がモテない続きを探して本屋に寄ったが、18、19、20巻しか置いてなかった。
新品を買うつもりだったのだけど、ないなら仕方ないということで、前回とは別のブックオブまで足を延ばした。
残念ながら6巻くらいまでしか置いてなかった。
ちらっと付近をみるとハイスコアガールというタイトルが目に入った。
このタイトルは知っている。
アニメではやくしまるえつこがオープニングとエンディングをやってるやつだ。
なぜか、という訳でもないが、CDは所有している。
絵柄もどこかでみたことがあって、焔の目と同じだ。
ある分だけ、といっても5冊しかなかったが、買っていった。
ちょっとした収穫だった。

結構変わっていた

足を延ばした先の周辺は、来たのはたぶん1年以上ぶりくらい。
結構雰囲気が変わっていた。
特に、プログラミング教室やサイエンス教室とでかい看板を掲げる、よく分からない塾のような建物が目を引いた。
さらに帰りに通ったところでは、以前、配膳に行っていたことのある、でかい介護施設の建物の一部というか半分くらいが取り壊されていた。
残り半分は稼動しているようだったので、潰れた訳でも、状況が悪い訳でもなさそうではあった。
あとは、新しい銀行ができていた。
そんなところか。
こんな田舎では結構大きな変化だ。

モテないし、OpenGLをやる

OpenGLはモテなさそうだ。
DirectXよりもモテなさそう。
DirectXは12までいくとモテそう。
同じGLの名前を冠していても、OpenGL ESやWebGLはモテないとまではいかなそうだ。
VulkanとかMetalとかはめちゃモテそうだ。

AV Linux MX-21

MX-21というリリースが出ていた
MXとは何のことかというと、MX LinuxをベースにしているのでそのまんまMXのリリース21をベースにしたものということになる。
このような名称に変わったのはこのリリースからのようだ。
以前は「AV Linux MX Edition 2021.05.22」みたいな名称だった。
その以前のリリースではMXがさらにベースにしているDebianのバージョンが11よりも一つ古かった。
これで追い付いたようだ。
そんなことよりも、昨年にインストールしてからほとんど起動していない。
ゲームの音も作ろうと意気込んでインストールしたのだが…
でもこれで環境は完璧になった。
あとは自分しだいといったところだ。

2022年2月15日 (火)

晴、雨

明日祝日かと勘違いしていた

水曜が休みなのは次の週だった。
今日いけば明日休みだと浮かれていたところ、不意打ちをくらった。

本の整理

本を減らしたい。
単に見えないところに収納するのではなく、完全に手放したい。
所有していると、それだけで精神的に負荷がかかる。
思い切って処分して、所有リストからも消去してしまう必要がある。
半分くらいに減らしたい。

2022年2月14日 (月)


私がモテないのはどう考えてもお前らが悪い!

中古で8冊購入できた。
バレンタインデーにこのチョイスは少しおもしろい。
別に狙った訳ではなく、奇妙な偶然だったのだけど。

2022年2月13日 (日)


OpenGL SuperBible 第5章を読み終えた

しんどかった。
mipmap辺りから理解が追い付かなくなってきた。
理解というよりも、解説に対して具体的なコードとレンダリングのイメージができなくなってきた。
一応サンプルがあるので、それを弄くり回して理解を深めることも可能だった。
しかし、やらなかった。
おそらくこの章は特別に難しい章ではないかと思い。
もう少し先に進んでから後で戻ってくることをにしたい。
あまり長い時間を掛けると、また止ってしまう。
以前6thをやっていたときには、この章で止まってしまった。
理解はいまいちなものの、なんとか切り抜けられたということにしよう。

2022年2月12日 (土)

曇り

glMemoryBarrier() や atomic counter など

分からん。
どのような状況で必要になるのかイメージできない。
そもそも、なぜ今、並行処理の話が出て来ているのかすら分からない。

P140-152まで意味不明、要再読。

私がモテないのはどう考えてもお前らが悪い!

1巻と2巻を読んだ
めっちゃ面白い。
全巻揃えよう。
20巻くらい出ているようだ。
タイトルからラノベ原作だと思ってたけど、漫画が原作だった。

GOSICK II 読み終えた

面白い。
続けてIIIを読む。
何か後書きに別の巻のネタバレとまではいかないけど、概要のようなものが入っていた。
後書きは読まないでおこう。

flare.ktx が壊れている

SuperBibleのP174-177で使われているテクスチャのファイル。
テクスチャのラッピングモードによる違いを示すために使われている。
しかし、何も表示されない。
別のテクスチャを使えば表示されるので大した損失ではない。
どうもファイルが壊れているようだ

2022年2月11日 (金)

曇り

SuperBible 第5章「Data」難しい

やはりこの章は難しい。
以前6thを読んでいたときの印象は間違ってなかった。
イメージがぼんやりとしている。
サンプルが少ないことも原因の一つだろう。
あまり気にせず先に進めておく。
全体の理解が深まったところで、もう一度戻ってくることにする。

2022年2月10日 (木)

曇り

Modern C++ Programming Cookbook 第5章を読み終えた

短い章だがなかなか良かった。
constexpr ifの使い方。
SFINAE(要はenable_if)の代わりに使える。
Variadic Templateのコンパイル時再帰を単純化できる。

2022年2月9日 (水)


OpengGL SuperBible 第4章を読み終えた

3D数学の章。
そんなに難しくない。
読み易い。
まだまだ余裕ある。
と言いたいところだけど、Cスプライン(Cubic Hermite Spline)の理解がちょっと怪しい。

2022年2月8日 (火)


本を何冊か貰った

小説をいくつか。
読みきれないだろうな。

2022年2月7日 (月)


Modern C++ Programming Cookbook 第4章を読み終えた

関数の章。
関数型言語のmapやfoldを真似たものが紹介されている。
まずまずといったところ。
劇的に変化をもたらしてくれるといったものではない。

初めてKindleの本を買った

「Rust OpenGL」で検索したら、アマゾンの「RustではじめるOpenGL」という本が引掛った。
アマゾンを開いてみると、Kindleの本だった。
「あなたへの特別オファー」と表示された。
6分くらい以内に購入すれば、約70%の600円分ポイントバックとなっていた。
それでつい買ってしまった。
おそらく、初めての人を対称としたキャンペーンと同一のものだろう。
どうせ買うならもう少し値の張るもので使った方がお得だった。
あまり気にしないでおこう。

iPhoneにKindleアプリをインストールして読んでみると、やはり画面が小さくて見づらい。
Kindle Cloud Readerでブラウザで読めれば良いのだけど、この本は無理です、となる。
PC版のKindleアプリは、Linux版がない。
他に良い本がないか物色していると、Raytracing Gemsという本が、0円で配信されているのが見つかった。

2022年2月6日 (日)


除雪に追われてあまり進まず

Modern C++ Programming Cookbook を進めたかったのだけど、1章も進まなかった。
C++の本を読みながらなんだけど、ぶっちゃけC++をやめたくなってきている。
C++17を少しずつ覚えてきた。
1年前の何も知らなかったころに比べれば、だいぶましになってきたと自分では思っている。
これからが楽しくなってくるところだ。
まだ大量の本をストックしてある。
楽しみなのか苦しみなのかよく分からない。

Rustに乗り換えることをよく考える。
本気ではない。
しかし、ちらりと考えるのは、これだけの時間をRustのトレーニングに当てたらどうなるのだろうかということだ。
プログラミングを始めてから一貫してC++にこだわってきた。
その経験を踏まえて、Rustは本当にC++の代わりになるだけの可能性を感じる。
もとからシステムプログラミングの領域においてCとC++の代わりとなることを目的として設計されているので、そうであるのは不自然なことではない。
悩ましい。

2022年2月5日 (土)


雪が結構降ってきた

今年はもう積らないと思っていた。
今日と明日触るらしい。
おそらくこれが今年最後だろう。

OpenGL SuperBible 第3章を読み終えた

テッセレーションとジオメトリシェーダーを実際にどのように使うのかが想像つかない。
ただ雰囲気だけは掴めた。
今はまだそれだけの理解で十分だろう。
テキストもこの時点での理解はその程度くらいしか求めていないはず。

まだ躓くところはない。
次は3Dグラフィックス数学の章だ。
以前6thを途中まで読んでいて、次の章もすでに一度読んでいる。
そんなに難しかった記憶はない。
確か、次の次の「Data」という章が難しかった記憶がある。
そのときと比べて少しは成長しているはずなので、きっと読めるはず。

Modern C++ Programming Cookbook 第2章を読み終えた

数値と文字列の章。
最初はちょっと頼りないかなという印象だったけど、ちゃんと読むと結構覚えるべきことが多い。
文章は読み易いのでさくさく進む。

Extended ASCII

Modern C++ Programming Cookbook の乱数のところで cout << (char)219 というようなコードがあった。
これは何なのかというと、ブロック文字を出力させることを意図している。
試してみると表示されない。
代用として、U+2587というUnicode文字を出力させることにしてみた。
すると cout << setw(3) << "\u2587" としたとき、setwが効かない。
wcoutを使って wcout << setw(3) << L"\u2587" とするとうまくいく。
しかし、wcoutを使うには、ロケールをセットしないといけないようだ。
そのためには次のようなコードが必要になる。

setlocale(LC_ALL, "en_US.utf8");
std::locale loc("en_US.UTF-8");
std::wcout.imbue(loc);

かなり面倒だ。

Extended ASCIIが使える環境はどうやったら用意できるのだろう。

LSPがstring_viewを認識しない

no type named 'string_view' in namespace 'std'

というフライテキストのエラーがでる。
コンパイルは普通に通る。
CMakeLists.txtでC++17を使うように指定している。

set(CMAKE_CXX_STANDARD 17)

どうもこれだけではだめなようだ。
もう一つ必要になる。

set(CMAKE_CXX_STANDARD_REQUIRED ON)

これでエラーは消えた。
謎。

2022年2月4日 (金)


FF4がやりたくなった

唐突にFF4がやりたくなった。
PSPのを少しだけやった。
リディアを見れて満足した。

2022年2月3日 (木)

雨、曇り

皮膚科に行ってきた

5回目の通院。
さらに一箇所怪しいのを検出したのでそれもやってもらった。
治療後しばらくはかなり痛い。
まだひりひりする。

ダイ67話を見た

ポップが覚醒する場面。
ドラマティックな演出ですごく良かった。

OpenGLのチュートリアル基礎編を終えた

ここのチュートリアルを読んでいた。
一応読み終えたことにする。
テクスチャのところ辺りから理解がやや怪しくなってきた。
「同じようにします」とだけ書かれていて、実際のコードは書かれていない。
これまでのパターンから考えて分かるものでもなかった。
サンプルコードをダウンロードしなければ分からない。
そして、それは同じようなものではなかった。
このチュートリアルは補助的に利用するのが良さそうだ。
明日からSuperBibleに戻ろう。

2022年2月2日 (水)

雨、曇り

OpenGLの学習が少し進んだ

ここのチュートリアルを読んでいた。
使っているバージョンは3.3で、まだ許容範囲だ。
不自然な訳ではあるけど、日本語で読めるのは貴重だ。
その他、見つけた日本語のものは、大抵がバージョンが古すぎる。
SuperBibleに本格的に取り組む前に、さらっと全部やっておく。

2022年2月1日 (火)


もう1月が終わってしまった

やばい、何にもできていない。
この調子だと1年経つのもあっという間だろう。

Created: 2024-02-07 水 06:52

Emacs 29.1 (Org mode 9.6.6)

Validate