2023年7月の日記

Unknown programmer's programming note.

2023年7月31日 (月)


PythonのC API

次の動画に向けて調べていた。
リクエストをもらったうちの一つ、PythonとC++、Rustを連携するというもの。
なんとなく感じはつかめてきた。
もっとも基本になるのはPythonと一緒に配布されているPython.hを利用する形態になる。
これはPythonのC APIと呼ばれている。
まずはここから始めるのが良さそうだ。
PythonとCなどを併用するには大きく分けて2つのケースがある。

  1. PythonからCを利用する → Pythonを拡張する
  2. CからPythonを利用する → アプリケーションをPythonで拡張可能にする

1の場合、次のような動機が考えられる。

  • コードの一部を高速化したい
  • 別の言語で提供される機能を利用したい 例えば、OSのシステムコールなど
  • 既存のライブラリを利用したい

2の場合、実質、アプリケーションにPythonインタープリタを組み込むことになる。
動機は、例えばアプリケーションのプラグインをPythonで書けるようにしたり、ゲームエンジンのスクリプト言語としてPythonを採用したいなどが思いつく。
ゲームエンジンといえば、LÖVEのPython版なんか作れたら面白そうだ、などとちらっと思いついた。

Pythonの本をちょっと読んだ

Packtのライブラリから「Expert Python Programming」という本を見つけた。
お目当ては、9章の「Bridging Python with C and C++」だった。
そこだけ読んでみた。
PythonからCを利用するケースについてのみ書かれていて、Pythonを組み込み言語として利用するケースについては触れられていない。
Pythonの本なので、それは自然なことだ。
スタートを切りには十分な情報が得ることができた。

7月が終わる

YouTubeしかしてなかった。
おかげでC++入門は完走できたし、気持ち新たに8月を迎えることができる。
来月はちゃんと他のやらないといけないことを回していこう。

2023年7月30日 (日)


2023年7月29日 (土)


C++入門動画 おまけ 投稿

これでほんとに終わり。
C++の入門書を紹介するという動画。
やってみたかっただけ。
どこが良いとか悪いとか、こんな人におすすめとか、もうちょっと具体的に言えたら良かった。

2023年7月28日 (金)


C++入門動画 #42 #43 投稿

完走できた。

#42 画像を適用する
SDL_imageを使って画像ファイルからテクスチャを生成する。
四角形を描画しているところをテクスチャに置き換えるだけ。
テクスチャのポインタを流し込むように転送しないといけない。

#43 リセットできるようにする
付け焼き刃的な方法をとった。
ブロックの形と位置をリセットするのと、積まれたブロックのリストとコマンドキューをクリアするだけ。
理想的には、ゲームを構成するオブジェクトをすべて生成し直したいところだ。
そうしなかったのは、現在の作りではスマートにそれをやる方法がなかったからだ。
一つの関数ですべてを生成するには、かなり醜いものになってしまう。
もし、オブジェクトをポインタで管理しているならば簡単にできた。
そのように変更するのは簡単だけど、やったところで動作に影響がないので、やめておいた。

2023年7月27日 (木)


2023年7月26日 (水)


C++入門動画 #41 投稿

昨日に続けて深夜作業。
午前5時頃にアップした。
消えるようにした。
積み上がったブロックのリストの操作のみで完結する。
他のところに影響が及ばないので、コードの変更は少なく、今までで一番シンプルな回だった。
余裕があったので、かなり丁寧にやってみた。
ゲームや設計に影響されない、純粋にC++とプログラミングの問題だったと言える。
問題を単純化すると、値のリストに対して、特定の条件を満たす要素について、それらをリストから取り除き、その値を基準にした別の条件を満たす要素の値を更新する、というものだ。
コンテナとイテレータとアルゴリズムを使って解ける問題であり、C++とSTLの格好の練習課題だった。
STLマスターならもっとコードを凝縮できることも可能だろうけど、今でできるところまではやったつもりだった。
こんな感じで毎回C++の練習にだけ集中できる動画であれば、動画のタイトルに偽りのないものになったのに、と思う部分もある。

GIFアニメーション

コードアップロードしているWikiに、スクリーンショットを貼り付けていた。
画像だけでは、これまでとの違いがわからず、もの寂しい感じなので、GIFアニメーションが欲しくなった。
せっかく消えるようになったので、それをアピールしたかった。
Windows Vistaでも使えるものとして、LIEcapというのが完璧に仕事をしてくれた。
これで満足のいくページになった。

眠くて動画を作れなかった

やっぱり夜は寝るべきだ。
睡眠は大事だ。

2023年7月25日 (火)


C++入門動画 #40 投稿

深夜作業。
回転できるようにした。
資料に2D回転の数式を入れたくなった。
簡単なものなので、LibreOffice Mathでやってみた。
微妙に気食わないところがあるのと、PDFにしかエクスポートできないので諦めた。
org-modeのLaTex埋め込みを調べた。
思うようにいかずに苦戦した。
いくつかtexliveのパッケージをpacmanでインストールしたら解決した。

2023年7月24日 (月)


C++入門動画 #39 投稿

ブロックのパターンを用意する。
Pieceクラスに詰め込みすぎている。
ブロックのリストをPieceに直接保持させているのがまずい。
分離してしまうべきなのだが、修正範囲が広く、おっくうなのでこのまま進めてしまうことにした。
非常よくない判断だ。

2023年7月23日 (日)


C++入門動画 #38 投稿

ブロックを積もるようにする。
大変だった。
ブロックの自然落下をマス単位でなく、スムーズにピクセル単位で落ちるようにしているので、横移動の際に積もったブロックとの重なり判定をゆるくすることが必須だった。
リハーサル中、ここに苦戦していた。
結果、理想的なものができて、割と満足している。
たぶん、今回の目標とする範囲では、ここが一番難しいところだったかと思われる。

2023年7月22日 (土)


そろそろC++入門動画を終わりにしたい

15分の制限を撤廃して、一気に進めてしまおうと考えている。
なんとか土日中に終われないかと目論んでいる。

C++入門動画 #37 投稿

ブロックを操作できるようにする。
SDLのキーボード状態を取得する関数、SDL_GetKeyboardStateが中心にある。
この関数は、あまり多くのことはしてくれない。
呼び出したフレームのキーボードの状態を返すだけだ。
前フレームは押されていなくて、現フレームに押されたことだけを検出するためには、ちょっと手の込んだことをしないといけない。
つまり、1回だけ押されたと判定される関数が必要だった。
このためには、前フレームのキーボードの状態を保存しておく必要がある。
少し苦戦したが、スリムなクラスにまとめることができた。

2023年7月21日 (金)


C++入門動画 #35、#36 投稿

#35は、ブロックを作る。
#36は、ブロックが落ちるようにする。

ブロックは、Cellのラッパーのような形を想定していた。
重要な役割は、座標をマス単位で扱えるようにすることだ。
やってみて、この仕組みは失敗だということが分かった。
やり直したほうがいいことは明らかだ。
だめなもの使い続けるのは、典型的な悪いプログラミングの習慣を示しているようでもある。
プロトタイプは捨てるつもりで作るべきと言われる。
動画にしてしまったし、とい言い訳をして、このまま言ってしまうことにする。
どこまでいけるか、修正できるかにも興味がある。

ブロックを落ちるようにするには、ゲームループのフレームレートの制御について考える必要がある。
一度、基本的な情報が欲しくて、Game Programming Patternsのゲームループの章を読んだ。
とてもためになる内容だった。
完璧なものを作るのは難しいが、今回のゲームのようなシンプルなものにはそんなものは必要ない。
単純な固定フレームレートのケースを採用した。
今まで、固定フレームレートでもdelta_timeをupdateの引数にして、移動量などを調整するようなことをしていた。
このやり方は、悪い効果があることが分かった。
固定フレームレートを採用するなら、同じ時間間隔でループされることを信頼して、移動量に調整を加えないほうが、良いようだ。
今まで、カクついたりすることを経験してきていたのは、それが原因だったと思われる。
delta_timeを掛ける必要があるのは、可変フレームレートの場合に限ると考えて良さそうだ。
まだ問題があって、フレーム時間を同期する手段がスリープ以外にない、というか思いつかない。
スリープには、たいていミリ秒で時間を指定できるのだけど、全く信頼が置けない。
空のループを回して時間を消費すると、CPU使用率が大変なことになり、地球に優しくない。
典型的な手段が知りたい。

2023年7月20日 (木)


Solus 4.4がリリースされている

2021年7月から、実に2年ぶりのリリースとなる。
ローリングリリースなので、実用上はたいした影響はないのだが、めでたいことだ。

C++入門動画 #32、#33、#34 投稿

#32は、昨日とったもの。
#33は、ただ壁と床を描くだけ。
#34は、壁と床をCellというクラスで構成するように書き換えた。

15分で終えるのは難しい。
コーディングが入ると、ほぼタイムアタック状態になる。
Cellクラスは、ゲーム盤のブロックの基礎にも使うことを想定した、大事なクラスになる。
継承を使わないつもりでいるので、ストレートな作り方から外れている。

2023年7月19日 (水)


C++入門動画 #32 作成 (未投稿)

ウィンドウを表示するプログラムで使用したSDLの関数の説明。
時間がきつい。
余計なことは一切できず、ひたすらしゃべるだけになった。
2回チャンレンジしたけど、25分くらいになってしまう。
まだ許容範囲だし、端折ってしまうよりはマシかと思い込ませて、これでOKとしておいた。
あまり上手い説明とも思えないし、偉そうになっていないか不安なところはある。
自分の理解の確認のため、言語化してみることを試みることに価値があるのかも知れない。
次は、壁と床を描く動画になる。
今日中にやってしまって一緒に投稿しようと思っていたところ、なかなか手が付けられず、1日が過ぎてしまった。
そのため、未投稿の状態になっている。

2023年7月18日 (火)


ペンタブレットが届いた

Amazonのセール中に購入したXP-Penが届いた。
安かったのと、Linuxをサポートしているのが決め手になった。
絵は全然描けないし、うまくなりたいという願望もない。
ちょっとしたところで、自力で絵を用意できないことに不便さを覚えることがある。
例えば、プロフィールのアイコン画像とかがそうだ。
そんなのをちょいちょいと描けたらいいなくらいの気持ちがある。
ちょこちょこ練習していこおうと思う。

C++入門動画 #31 投稿

SDLのウィンドウを表示するところまで。
コードを書くだけで時間いっぱい。
タイムアタックをやるわけでもないので、最初から用意しておいても良かった。
しかし、今まで全部書いてきたので、ここでもやはり実況を交えて書くことにしておいた。
スムーズに進むように、何度かオフラインで練習しておいた。
その成果として、ほとんど暗記してしまうことができた。
コードを暗記することに意味があるのかどうかと言われると微妙ではある。
一応、軽い説明を加えながら書いていたけど、自分なりにちゃんとした解説もやっておきたいので、次はその動画にする。

2023年7月17日 (月)


C++入門動画 #29 #30 投稿

#29は、w64devkit (MinGW-w64)をアップデートするという内容。
ほとんど需要のなさそうな限定的なトピックで、動画にするほどでもなかった気もする。
一応、やったことは漏れなく公開しておきたいので、記録しておいた。
GCCが13になり、std::formatが使えるようになるので、それをアピールしておきたかったというのもあった。
std::printが使えればなお良かったのだけど、それはC++23まで待たないといけない。

#30は、SDLのインストール。
ようやくSDLを使い始めることができる。
15分程度に収めると制約を設けたので、あまりゆっくりと細々したところまで話している時間はない。
本来なら、ウィンドウを表示するところまでやるところだけど、時間が足りないので、次回に回すことにした。
どういうふうに進めていくのがいいのかまだ定まっていない。
この動画はC++入門であって、SDLの使い方の動画ではないので、SDLのAPIを中心にするのはちょっと違う気がする。
かといって、SDLのAPIに対して、こう書けばとりあえず動くと適当に流してしまうのも違う気がする。
C++を中心に据えつつ、適当な詳細さでSDLを扱っていくように、バランスよくできれば理想だ。
なかなか難しいかも知れない。

SDLのWikiがおかしい

カテゴリ別のAPIリファレンスが壊れている。
例えば、ここなど。
動画で情報源として取り上げるのに不便だ。

2023年7月16日 (日)

晴れ

再開する

今日からまた毎日ちゃんと記録していくことにする。
7月に入ってからYouTubeばかりやっていて、他のことはほっぽりだしていた。
プログラミングと同様に、どうも現実でも平行処理が苦手なようで、なにか一つをすると他のことに手が回らなくなる。
この日記の負荷はとても軽いので、最低限、ここだけは維持するようにしたい。

YouTubeのC++入門が少し進んだ

次はC++の参照について、というところで1ヶ月ほど止まっていた。
あんまり話すことないなと思うと、億劫でなかなか着手できずにいた。
いくつかのシリーズは途中でほっぽりだしている。
これもそうなるのかと危ぶまれてきた。
もう中断して別のテーマに移りたい気持ちは大いにあった。
しかし、こんな中途半端なことばかり繰り返してもいられない。
クオリティはどうでもいいから、とにかく完結してしまおうと、それだけを考えて、再開することにした。
始めてみると意外と進めることができた。
形だけ取り繕った感じではあるが、一応、テトリスを作るくらいな十分そうな範囲はカバーできたかもしれない。
それで、言語基礎編は完結にしておいた。
これからやっとテトリスを作り始めるとこに入ることができる。
YouTubeは、ブログ感覚で利用しているところがある。
そんなに多くの人に見られたいとか、ましてや収益化したいなどとはまるで思っていない。
それにしても、再生回数が0に近いのは、ちょっと虚しい。
誰にも見られないから、止めてしまうつもりはないけど、もうちょっと工夫したほうがいいなと思っていた。
そう考えていたところ、昨日、初めてコメントをもらって、やる気が出てきた。
なので、やはりもうしばらくはYouTubeの優先度を上げたままにしておきたい。
同時に、他にやらなければいけないことを並行して進める能力にも身につけたい。

YouTubeの検索の謎

自分の動画が検索にかかるのかどうかをチェックしてみた。
「C++ 入門」で検索すると、ほとんど上がってこない。
ここでは、半角スペースで区切っている。
これが一番検索されそうなワードに思える。
しかし、「C++ 入門」で検索すると、結構上に、しかも複数上がってくる。
ここでは、全角スペースで区切っている。
また、スペースを入れずに、「C++入門」としても、同様に上がってくる。
この微妙な違いは何なのか気になるところだ。

Created: 2024-02-07 水 06:05

Emacs 29.1 (Org mode 9.6.6)

Validate