雑な交換日記です。学も見識もキャリアもない著者らが、エビデンスも検証も無しに思ったことを書きなぐります。現在の著者はHoriK、りりん、なすし、の3人です。HoriKはコンピュータとプログラミング、りりんはレゴとガンプラ、なすしは音楽とCGに興味を持っています。なお、交換日記を書くことに限らず、画面を長時間見ることは目に大きく負担をかけます。眼精疲労を抑えるために、時々は遠くの山や海を眺めましょう。
書くより読む方が難しいってこと
Study with meの次
バイナリ解析の学習を再開
歩行アニメーションの実装について
おおよそ日報のようなもの。昨日はゲームのプログラムを書いたり、読書をしたり、研究分野の調べ学習をしたりしていた。
ゲームのプログラムの中に歩行アニメーションを描画するためのコードがある。画像が多いのでコード自体は長くなっているが、構造自体はなかなか単純に作れたと思うのでこれについて書いてみる。
Twitchで勉強
高級な漬物石
高級な漬物石を購入したので色々と遊んでいる。パフォーマンスは噂の通りで、普段使いのツールをあれこれまとめて動かしても全然もたつかない。想定外の効能としては、macOSのウィンドウマネジメントが意外に優秀だったことがある。左側に最小したウィンドウがプレビューされていて、これを触ることで今開いているウィンドウ群とまとめて取っ替えることできる。これは実質的に仮想デスクトップを常時利用しているみたいな感じで、これのおかげで1画面でも十分に作業ができるようになった。あとは文字入力のIMEが小気味よい感じ。
ただし、今後macに完全移行できるかというと、実はそうでもない。キーバインドになれないとか、操作面の違いが大きいとかそういうのはどうにでもなるのだが、一つ致命的なのはVirtualBoxが動かない点である。Oracleも一応Apple Silicon向けのVirtualBoxを公開してはいるのだが、まだまだベータ版ということもあって、お世辞にも使えたような品質ではなかった。研究のためにVirtualBoxが快適に動く環境は必須なので、結局これについては以前から使っているデスクトップを使い続ける他ない(操作画面はリモートデスクトップでmacOSに飛ばす形)。
開発ツールについてはまだ何を使っていくか決まっていない。Linuxで動いていた開発ツールがある程度は動くので、愛着のあったものは設定を少し変えて使い続ける形で、そのほかのものは少しずつmacで主流のものに変えていく方針。徐々に慣れていこうと思う。
まぁこれに慣れてしまえば、単にパワフルな環境で開発できるというだけでなく、スーツケースで移動できるワークステーションが構築できるということで、魅力的ではある。今までは実家とアパートで別のPCを置いてあって、それぞれセットアップがあったりして面倒だったが、以降はそれからも解放されるな。
社会的な時差ボケと敵AI
ペンタブとストーカー気質
おおよそ日報のようなもの。昨日は一日中バタバタとしていた。ただし、睡眠不足で午後は意識があまりはっきりしていなかったから、やはり睡眠時間を削って頑張るみたいなことはやめたほうが良い。3時間かかって、普段の30分くらいの生産効率。
夜はT Classの面々で話をしていて、その間に日をまたいだ。主旨としては、ブログメンバーの なすし が液晶ペンタブレットを購入したので使用感がどんなものかライブでレビューする、みたいなもの。見た感じ使いやすそうだったし、イラスト以外にもいろいろ使用シーンが考えられそうだという印象を受けた。またレビューを書くと言っていたので、近いうちに液晶タブのレビューがこのブログに上がるだろうと思う。
レビュー会が終わって、プログラミングの宿題をこなした。課題の説明文を読んでもプログラム自体の動作と目的がよく理解できなかったので、結局課題プログラムをmain()から読んで動作を理解した。3時間位かかってようやく課題が完了。達成感がすごい。某数学の人が数学をやるには問題を追いかけ続けるある種のストーカー気質が必要だ、というようなことを言っていた。これはプログラミングやデバッグ、ログ解析についてもそうだろうと思う。各ステップの処理はそこまで難しいものではないのだが、ステップ数の膨大さによって全体の動きが分かりづらい。ここでステップの膨大さに負けず、下手な省エネ化も図らず、ただひたすらに必要な部分を頭っから追いかけて執拗に解析する。これが結局は動作を理解する王道ルートなのである。
午前中はゼミ資料を読んだりしていたが、眠すぎてほとんど頭に入ってこなかった。ルーティングに関する部分で、RIPでループが発生しないようにするための工夫がいろいろと書いてある。個々の技術のアイデアはそこまで難しいものではないが、結局はこれを使い分けたり併用したりするので、説明も入り組んでいてわかりにくいものとなっている。
午後はゼミに出席したり、講義に出たりして、結局帰ってきたのは18時過ぎくらいだった。帰宅後は即座に就寝した。
画面更新とゲーム制作会議
おおよそ日報のようなもの。昨日は15時に起床した。日報を書いてニュースチェックをすることが今年に入ってから続けていたルーティンであったが、それが初めて途切れた。反省します。まずは生活リズムを戻せよ、という話になるかもしれないが、僕の場合は生活リズムが整ったからと言って必ずしも生産性が上がるわけではないので、実はそこまで生活リズム矯正のプライオリティは高くなかったりする。大切なことをは毎日継続すると決めたことを毎日やるということで、反省して今日からまた日報を書いている次第である。
昨日はミュージックプレイヤーの画面更新の調整と、ReadMeに書く内容を検討したりしていた。画面更新についてだが、Threadから定期的な画面更新をかけようと考えて、そういうコードを書いたのだがうまく動かない。print()を使った出力はできるのだが、py_cuiのコマンドを使っての更新ができない。thread実行後の最初のボタン入力で更新がかかったりする。おそらくpy_cuiの実装に絡む問題だと思うが、仮にそうだとすると、プログレスバーの実装とかはほぼ不可能という話になるから面倒である。これまでpy_cuiにはだいぶお世話になってきているが、やっぱりイベントループを取れないあたりがすごいストレス。tkinterしかり、py_cuiしかり、イベントループ周りを簡素化したものはちょっと手を入れようと思うとその瞬間面倒になるという印象を、今のところ持っている。
夜にはTClassのゲーム制作会議に出席したりした。ゲーム制作会議は毎回ダラダラと長時間やっているが、ほとんどゲームの話はしていなくて、構成員が興味を持っているトピックを延々語り合うことがその主旨となりつつある。現実の身の回りの人とは趣向が合わなくて話ができない、とか言うメンバーもいるようだから、そういうのを発散する場としても機能している感がある。
3分間ネットワーキングとスレッド
おおよそ日報のようなもの。昨日は昼すぎるくらいまでエンジンがかからなくて布団の上でボーッと天井を眺めていた。睡眠も10時間くらい取れたし、休日の過ごし方としてはむしろ良い過ごし方ができたのではないか、とも思う。
午後は先日紹介した「難読化シェル芸の世界」を読み進め、なんとか読了した。この本での難読化の対象はBashであるが、難読化の方針自体は別の言語に移しても適用可能だと思うので、いろいろ試してみたい。
技術書絡みでもう一つ話をすると、この3分間ネットワーキングシリーズを大人買いした。3分間ネットワーキングはネットワーク技術を解説しているWebサイトで、わりと長い歴史がある。休憩がてらに覗いてみたところ、文章が面白く、かつ知らないことも書いてあったりしたので本を買ってみることにした。著者いわく、本の文章は本用できちんと書き直したとのことだ。難読化とthreading.Thread
おおよそ日報のようなもの。昨日は少しやる気を取り戻して作業に取り組めた。手が止まった状態が続くと楽しさは半減し、苦手意識ばかりが動いてしまうから、とにかく集中して状況を打開する手を考えなければならない。それがプログラミングだったり勉強だったといった知的作業のときは、考えていることを全部発言しながら手を動かしてみると目先のタスクに目が向きやすくなるので割といい感じ。
昨日も朝はニュースチェックから。昨日は高リフレッシュレートのゲーミングモニターが発売されるというものや、ルータの安全性をチェックするサイト、ワイヤレス充電の新規格Qi2などがニュースになっていた。
謎挙動git push とクリスマスイブ
プログラムの様子がおかしい、というよりはgitの様子がおかしい。僕自身がgitをあまり良くわかっていないのが一番の原因といえば原因なのだが、リモートブランチにローカルブランチの内容をpushしようとしたときにcommitしていない内容までもがアップロードされるのはなんなのか。調べて解決する必要があるが、時間がなくて昨日は無理だった。多分今日の夜辺りになんとか解決する。
持ってきた本の1冊である、gene著の「ネットワークの基本と仕組み」を読み終えた。以前にも紹介した1冊だが、平易な語り口と豊富な図解、例示を行ってネットワーク全体のことを幅広く書いたもので、マスタリングTCP/IPを読む際に非常に役に立っている。技術者でない人もターゲットに含めて作った感じの本だと思うが、VLANの挙動とか、MACアドレステーブルの挙動とか、一歩踏み込んだ話題も扱っているのがとても良いところである。
ネット修行とミュージックプレイヤー
おおよそ日報のようなもの。昨日もゼミに出席したり、マスタリングTCP/IPを読み進めたりした。夜間にはCUIのミュージックプレイヤーのプレイリストのコードを書き換えたりした。
マスタリングTCP/IP読みの進捗としては、ちょうど4章を読み終えたところである。IPv4、IPv6の説明を終えて、第5章のIP周りのプロトコル群に突入。今週末までにはトランスポート層まで行きたいところである。当初の僕の計画よりもずいぶんと遅い。でも、仕方ない。現実は厳しい。
夜間のCUIミュージックプレイヤーは昨日の段階でようやくプレイリストの編集機能が追加された。まだ再生部分との統合ができていないが、機能的には曲目再生、プレイリスト再生、プレイリストの作成編集、ができるようになっている状態。ただし、プレイリスト再生についてはまだオートでの曲送りができないから、この点については改善を行う必要がある。以前も書いたかもしれないが、これには曲が停止しているかをチェックして停止時には曲をスキップ処理する非同期関数が必要である。あとは、ファイル周りとか、ガイドとかを充実させて、それなりに使えるように調整を行う。そしたらリリースできる。ようやくゴールが見えてきた感がある。簡単なツールではあるが、きちんとソフトウェアを頭から最後まで作ろうと思ったらそれなりに大変なんだなぁということがわかった。
非同期な朝食準備
おおよそ日報のようなもの。昨日は非同期処理について少し勉強したり、TCPについて勉強したり、コンパイラの講義に出たりした。
非同期処理の説明というと、個人的にはマイクロソフトのドキュメントの文章が印象深い。たしかC#の解説ドキュメントだったと記憶しているが、非同期処理を料理に例えて説明している。朝起きて、2枚のフライパンを温めて、トースターにパンをセットし、ベーコンを炒めて、タマゴを炒めて、牛乳を用意する。最後にパンを皿に載せて、ベーコン、タマゴの順で載せて完了。ここでは非同期処理が行われている。例えばトースターにパンをセットして焼くシーンだが、トースターをパンにセットしたあとは、人間は一度トースターに関する処理を手放して、ベーコンやタマゴを炒めるタスクに移行する。以降トースターに関しては、トースターが焼き上がりの通知を入れてくるまではノータッチになる。仮に焼き上がりの通知が上がったとしても、すぐに処理する必要はない。焼き上がり通知が入って、かつトースターのタスクを再度行うだけの時間的余裕があれば、処理を再開する。まさしく非同期処理。非同期処理に対立する概念として同期処理がある。これは逐次的にすべてのタスクをこなして行く方式で、トースターの例で言ったら、トースターにパンをセットしたあと、焼き上がるまでひたすらトースターを眺めて続け、パンが焼き上がったのを確認してからベーコンやタマゴを炒めるタスクに移行する、という状況だ。非常に効率が悪い。これは非同期処理と同期処理の違いを理解し、また、同期処理を非同期処理に置き換えることで効率を改善できる可能性があるということを示すとても良い例えだと思う。いつもいつも非同期に置き換えられるわけではないのだが、基本的に「一度行い、待つタスク」に関しては非同期に置き換えられる、そんな認識。
HSPをmakeするときにSDL2に関するファイルがないと言われる
HSP(Hot soup processer)の環境を作ることにした。HSPの作業環境はWindowsのほかLinux、 Raspberry Piにも対応しているようで、以下のページでインストール方法が紹介されている。
https://www.onionsoft.net/hsp/v36/doclib/hsp3linux_pi.html
僕の環境はUbuntu20.04で、基本的にはaptを使ってインストールを行った。結果から言うと、このページに書かれているとおりにインストールを進めてもうまく行かなかった。
makeを実行したのあとに、SDL2/SDL_ttf.hがないとか、SDL2/SDL_image.hがないとか、SDL2/SDL_mixer.hがないとか言われる。また、curl/curl.hもないとか言われている。
SDLに関しては、ページで紹介するものではなくて、
libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev
をダウンロードしたらうまく行った。
curl.hに関しては、libcurl4-nss-devというのを入れるとうまくいくらしい。あんまり良く調べていないので、このパッケージが何のためのものかはよくわからないのだが、参考ページによるとlibcurlというもののための開発用パッケージらしい。
以上より、実行するコマンドは、
$ sudo apt install libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev libcurl4-nss-dev
近況とpy_cui
プログラミングアイデア。より直感的なUIのCUI音楽プレイヤー
手前1週間くらい、インターネット中毒治療の一環で音楽プレイヤーをローカルで使えるものに変更している。使っているソフトはcmusというソフトで、ターミナル上で使えるミュージックプレイヤーである。僕の場合は常時tmuxを立ち上げているから、音楽プレイヤー用に1枚ウィンドウを増やして、そこでcmusを立ち上げる。切り替えも簡単だし、手軽でよいのだが、UIが馴染めない。すべての動作がボタンに割り当てられているのだが、割り当てられている操作が多すぎるし、操作モードごとに独自の操作があって覚えるのが面倒。そこで、もう少し簡素なUIを備えたCUI音楽プレイヤーを作るのはどうだろうか。cmusは大部分がcで書かれたソフトだが、コンピュータリソースは十分であるわけだし、ここはpythonとかで書いたらライブラリとか使って開発コストを下げられるので良いのではないか。







