映画『思い、思われ、ふり、ふられ』感想
あらすじ
偶然出会った同じマンションに住む4人の青春ラブストーリー。 4人とも同じ高1で同級生だが、それぞれ立場、家庭環境、夢、恋愛観が違うことで、交差する互いの感情を描いている。
感想
とにかく浜辺美波が可愛い。『君の膵臓を食べたい』で結構重めの役をやるイメージがついていたが、今回は幸せそうな姿が多くてよかった。
4人が出揃ったとき、「あぁ、4人の四角関係でよくあるやつか」と思ったが、思っていた四角関係ではなかった。いい意味で裏切られておもしろかった。
最初、由奈が気が弱そうで頼りないイメージだったが、途中から芯の強さは見習いたいくらいに感じて、あのくらい強い芯を持った人間になりたいなあと思った。ただ、他人から言われたことを真に受けて、深く考えず納得して突っ走っちゃうようにも見えた。(物語の構成上の都合だと思うが)
終わった時にモヤモヤしなくて見終わって気持ちいい映画だったので、テーマソングのOfficial髭男dism「115万キロのフィルム」もぴったりだった。
SDLログハンドリング
本記事は、SDL(Simple DirectMedia Layer)のログ出力機能の仕様について調べた結果である。
SDLのバージョンは記事執筆時の最新である2.0.20を対象とする。
また、Windows 10でVisual Studio Community 2017で試した。(すべてをテストしたわけではない)
続きを読むbinutilsインストール
Raspberry Pi 3B+のベアメタル環境構築のために、binutilsをインストールした。 いろいろとハマったのではまったことなどをまとめておく。
最終的に、ワーニングがいくつか出たが何とかコンパイルできてインストールが完了した、という次第。
環境はubuntu 18.04.3 LTS (Bionic Beaver)
基本的に以下のページを参考にさせていただいた。
piでベアメタルプログラミング - bobuhiro11's diary
注意:以下に述べるポイントはbinutilsのインストールを100%保証するものではない。あくまで私の環境で試したことをまとめているだけである。
最終的な実行手順
最終的に次の流れでインストールができた。
※2020/02/22 configureのtarget指定をarm-non-eabiからaarch64-elfに修正
64bitで動かしたかったがarm-non-eabiではコンパイルできなかったため。
$su - $ apt install texinfo $ apt install bison $ apt install flex $ apt install gap-core $ apt install gap-grape $ apt install g++ $ export LDFLAGS="-L/opt/local/lib" $ export CFLAGS="-I/usr/local/include -O2" $ cd /usr/local $ mkdir cross-pi $ cd /usr/local/src $ git clone git://sourceware.org/git/binutils-gdb.git $ cd binutils-gdb $ mkdir work $ cd work $ ./configure --target=aarch64-elf --prefix=/usr/local/cross-pi $ make $ make install
以降、はまったポイントを述べる。
はまりポイント1 - 古いソースコード
まずソースコードをダウンロードする。参考サイトではwget
でソースコードのアーカイブをダウンロードしている。
参考サイトが2014年の記事だったため、ソースコードの意図する環境が変わって(新しくなって)いると考えた。なので、gitで公開されていた最新版をダウンロードするようにした。
Binutils - GNU Project - Free Software Foundation
$git clone git://sourceware.org/git/binutils-gdb.git
はまりポイント2 - 不足ツール
makeを実行すると、ツールが足りないとエラーをはいてくる。さすがにすべてコンパイルしてインストールするわけにもいかないので、不足ツールはapt
で追加インストールを行った。
すべてメモっていたわけではないので抜け、重複しているものがあるかもしれない。
$apt install texinfo $apt install bison $apt install flex $apt install gap-core $apt install gap-grape $apt install g++
texinfo
はtextinfo
ではないことに注意すること。
はまりポイント3 - ワークディレクトリ
これが最大のはまりポイント。
make
実行時に次のエラーメッセージに非常に悩まされた。
configure: error: source directory already configured; run "make distclean" there first
これがでるともうmake distclean
し、configure
からやり直すしかない。
詳しい原因は不明だが、ワークディレクトリを作りワークディレクトリでconfigure、makeを行うと解消された。
$cd binutils-gdb $mkdir work $cd work $./configure $make $make install
この後続けてgcc、newlibのインストールも行ったがbinutilsのインストールでベースができていたので問題なく終わった。コンパイルに1時間以上かかったが。
2019の活動
2019年のプライベートは、スーパードンキーコング(ドンキー1)のRTA一色でした。仕事はやっと下積みみたいな期間が終わり、2020から本番という感じ。仕事のことは詳しく書けないので、プライベートをメインに一年間のまとめをします。
飛鳥文化アタックと出会う
飛鳥文化アタック、その言葉のインパクトから興味をもち調べはじめました。Twitterで(冗談のつもりで)今年の目標として飛鳥文化アタックをできるようにすることを呟いたところ、友人に言質をとられ目標にすることを決めました。あくまで目標にするのを決めたのは自分です。これが1月末のできごと。
最初は、自宅にあったミニスーファミで3-3のクレムリンで、飛鳥文化アタックができるかチャレンジしてました。何日かやっててたまたまでたときめちゃくちゃ嬉しかったのを覚えてます。
飛鳥文化アタックを調べるなかで、RTA in JAPAN3のドンキートリロジーの動画に出会い、そこでRTAを知りました。明確に覚えてないけど、解説がおもしろくてバグ技のざっくりした内容がわかりやすくて、自分もやってみたいと思ったような気がします。
RTA in Japan 3 - スーパードンキーコングシリーズ1,2,3完全クリアトリロジーリレー
そこから、ミニスーファミでRTAの真似事を始めました。タイマーソフトのlivesplitなんて知るよしもなかったので、はじめはクリア後にセーブデータ選択画面に表示されるゲーム内時間(インゲームタイム)で早かったか遅かったかを確認していました。
全ステージをインゲームタイム1時間以内で通せるようになってきたあたりで、セーブデータ選択画面をスマホで撮影して結果をTwitterにあげるようになりました。ここまでがだいたい5月までのできごと。
ドンキー新人大会
5月、なぜ見てたか覚えてないけど、たまたまドンキー新人大会の告知にたどり着きました。おそらくGoogleで「スーパードンキーコング RTA」とかで検索してて引っ掛かったとかかな。なにげなしに新人大会出てみたいとTwitterでつぶやいたところ、主催者の方からリプを頂き真剣に考え始めました。
正直、最初はゲーム配信を自分がするなんてあり得ないと思ってたし、ニコニコの内内のイベントなんだからでてもしょうがない、みたいに思ってました。
でも、スーパーファミコンの実機を少しずつ集めたり、Twitchに登録したり、タイマーについて調べたりしてる自分がいることに気づきました。たぶん自分は新人大会出たいと思ってるんだろうなと。なので、出ないと後悔すると思い、走者募集締め切りの一週間前くらいにdiscordで申請しました。ドンキー1の走者が埋まってなかったのが良くも悪くもホントにラッキーだったと思います。これが7月中旬。
このころにはTwitchで配信もはじめていて、少なくとも週1~2回配信してたと思う。大会前には毎日一回はやってましたね。
8月、お盆休みにはいって注文していた海外版ドンキーのROMが届き、新人大会までの目標にしていた40分をなんとか切ることができました。
新人大会の前日、はじめての並走。緊張で手がえげつない震え方してたのをいまでも覚えています。でもそれなりのタイムで走れました。
新人大会当日、努力の結果スーパードンキーコング1の全ステージをまわるall stagesのカテゴリで2位になりました!これはホントに嬉しかった。自分にとって、自分で決めて努力してきたことが実を結ぶ経験ができたと感じました。ホントにいい経験ができたと思います。大会後のバーンアウトを含めて。
新人大会 2位でした。今後も1全ステ頑張ります。1F練習します。 pic.twitter.com/McaYZnVEcY
— じょしだ@ぺんすけ (@momoiro_tj) 2019年8月25日
ドンキーラリー
新人大会が終わってダラダラとプレイしてたところ、1ヶ月の期間中の15回の出走ででたベストタイムを競うドンキーラリー(ゴリラリー)という企画へ申し込みました。ドンキー1 all stagesのカテゴリのみで15回を走ることはきついし、1カテゴリだけでは大会の意図に沿わない、新人大会もおわって他のドンキー1のカテゴリに挑戦してみたい、飛鳥文化アタックのような1フレーム技の練習にもなる、というような理由からプレイ時間の短いドンキー1 any%(最速でラスボスを倒すカテゴリ)の練習を始めました。
1か月で15回走るっていうのは、結構きつくて毎週3~4回を4週やればなんとかなると思ってたけど、1週目で2回しか走れず最終週に土日で6回走るということになってしまいました。
なんとか15回はしることができ、結果的に完走王の表彰をいただくことができました。日々のプレイでもあんまりリセットしないようことを意識しているので、それが評価されたのかな、と思います。
用事でリアタイ視聴できなかった、ドンキーラリーの最終結果発表やっと見れました!
— じょしだ@ぺんすけ (@momoiro_tj) 2019年12月14日
ドンキー1 all stages : 3位
ドンキー1 any% : 2位
総合結果 : 8位 (ドンキー1のみ : 3位)
そして完走王の表彰いただきました!
お疲れ様でした!
詳細 : https://t.co/sDpQxnXPIx pic.twitter.com/81a5gggJ2P
自己ベスト
1年(speedrun.comにのせられる記録を計測し始めたのは6月頃からなので半年)やった結果、以下の自己ベストを出すことができました。
Donkey Kong Country All Stages
— じょしだ@ぺんすけ (@momoiro_tj) 2019年12月7日
00:34:56.80
自己べ!とうとう34分台の世界に片足つっこんだ! pic.twitter.com/7vCkvyoxif
Donkey Kong Country any%
— じょしだ@ぺんすけ (@momoiro_tj) 2019年12月31日
00:08:30.09
2019ラストランで自己べ更新!!!!!!!! pic.twitter.com/5bjj1API92
all stagesはドンキーラリー期間中にでた記録で、any%は年末にでた記録です。まだまだ未熟だけど、個人的には頑張った成果が出たと思います。新人大会のときにはall stagesで35分きれるなんて考えてもみなかったし。
まとめ
冒頭で述べた通り、仕事抜きにするとほんとにドンキーRTA一色に1年間でした。大会などでお世話になった方、ありがとうございました。
これからもRTAは続けようと思います。ドンキー1がおもしろすぎるのでしばらくはドンキー1をもっと詰めていきます。いずれはドンキー2,3とかほかのゲームもやってみたいですね。
仕事はスキルをもっと磨いていかないといけないので、プライベートでも資格とったり自主制作とか個人での活動をやったりしていきたいですね。2020もやりたいことが多すぎて大変な一年になりそうです。
知っておくべきgccオプション
三連休で何かしないとな、とおもいgccのmanページを読んでいた。結局1日では時間が足りず中途半端な感じになってしまった。1日無駄にしたなーなんて思う。なので、とりあえず分かったことだけでもまとめとこうと思う。
今日gccのmanページを読もうと思った理由は、なんとなくgcc極めたいなーと思ったからだ。とりあえず先頭から読み始めたが、正直これ通常の開発とかで使うのだろうか・・・と思ったころにはもう夕方だった。ふとページの先頭に戻ってみたらSYNOSPSISを改めてみてみると、これだけ知ってれば十分じゃないか?と気づいたわけだ。
なので結論はタイトルの通りだと思った。
しかし、コンパイラのオプションってほんとに多い。Visual Studioを初めて触ったとき、デフォルトでいろんなオプションが設定されていて意味が分からなかった。Visual Studioのコンパイルオプションは正直いまでも詳しくはわからない。半面、gccはコマンドラインからソースファイルさえ指定すればそれらしくできるからとてもシンプルに見える。実際は内部でいろんなパラメータが設定されているんだろうが・・・・。
知っておくべきgccオプション
以下はman gcc
で表示したmanページのSYNOPSISに書かれているgccの例。gccのオプションはもっとたくさんあるがこれだけ知っていればいいのでは、というのが今日の結論だ。それぞれのオプションがどういう意味なのか簡単に残しておくことにする。
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-Wpedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...
[ -c | -S | -E ]
オプション
コンパイルの実行を制御するオプション。-c
はプリプロセス、コンパイル、アセンブルをするがリンクはスルーする。-S
はプリプロセス、コンパイルを行うがアセンブル、リンクをスルーする。-E
はプリプロセスはするがコンパイル、アセンブル、リンクをスルーする。
-c
はオブジェクトファイルを出力し、-S
はアセンブラコードを出力し、-E
はプリプロセス済みのソースコードを出力する。
まとめると以下の表になる。-E
のみ、出力がファイルではなく標準出力になることに注意する。
オプション | プリプロセス | コンパイル | アセンブル | リンク | 出力形式 |
---|---|---|---|---|---|
-c |
○ | ○ | ○ | × | file.o(オブジェクトファイル) |
-S |
○ | ○ | × | × | file.s(アセンブラファイル) |
-E |
○ | × | × | × | (プリプロセスを行ったコードを標準出力へ出力) |
[ -std=standard ]
オプション
C99など、C言語で準拠する規格を指定する。プロジェクトで準拠する規格があれば指定する必要がありそう。なお、C/C++のみに適用可能なオプション。
[ -g ]
オプション
デバッグ情報を出力する。GDBを使う場合にこのデバッグ情報を使用する。
[ -pg ]
オプション
gprof
でプログラムを解析する際に使用するプロフィール情報を出力する。
[ -Olevel ]
オプション
-O1
や-O3
などでコンパイルで最適化するレベルを指定する。内部で自動的に各レベルごとに決められた最適化オプション(Optimize Options)を指定してくれているらしい。
[ -Wwarn... ]
オプション
表示する警告の設定。-Wall
などがよく使われているイメージ。
[ -Wpedantic ]
オプション
拡張機能に対して警告を表示する設定。
[ -Idir... ]
オプション
dirに指定したディレクトリをヘッダファイルなどの検索対象に追加する。
[ -Ldir... ]
オプション
dirに指定したディレクトリを、リンクしたいライブラリの検索対象に追加する。
[ -Dmacro[=defn]... ]
オプション
#define
をコマンドラインで設定する。
[ -Umacro ]
オプション
定義済みのマクロをキャンセルする。ソースコード中のマクロまたは、このオプションの前に-D
で定義したマクロのキャンセルができる。
[ -foption... ]
オプション
指定するとoption
を有効にする。いろんなオプションがある。
[ -mmachine-option... ]
オプション
ハードウェア固有のオプションを有効にする。
[ -o outfile ]
オプション
出力ファイル名を指定する。指定しないとa.out
などになる。
[ @file ]
コマンドラインオプションをファイルから読み取る場合に、コマンドラインオプションが記述されたファイルを指定する。
infile...
入力ファイルを指定する。必須。
このベースさえ覚えておけば、あとはmanなりhelpなりを都度参照すれば何とかなりそう。特に-foption
とか-mmachine-option
はハードやソフトに何らかの制約がある場合に指定すると思うので、その都度調べて使うような使い方になりそう。
あとはどれだけ便利に使いたいか、というくらいじゃないだろうか。掘り下げていくといくらでも掘り下げられそうだ。
ブログ名変更しました
とつぜんですが、ブログ名を変更しました。
旧:システムオペレータの週末
↓
新:ぺんぎんノート
理由は、しばらく更新していない間にシステムオペレータを卒業したからです。
現状では仕事としては、ソフトエンジニア?っぽい仕事に携わっています。
以前のブログ名ではシステムオペレータという仕事に寄りすぎていたので、仕事に依存しないものにしたつもりです。
改めまして、よろしくお願いします。