大雪

大阪では、かなり珍しい、朝から大雪でした。

いや、雪国からしたら、それぐらい普通や!と怒られそうですが、久しぶりに、Σ(゚д゚lll)ガーン と言う感じでしたね。汗

 

交換しておいてよかったです。もし、夏タイヤだったら、「いけません」と言っていたと思いますが。。汗

 

途中、道の選択を間違って、道が車で詰まっていたのは誤算でした。

当然、迂回したのですが、遅れてしまいました。汗

 

冬タイヤしていることもあり、そこまで怖くなかったです。ドライと勘違いするほどでしたが、確かに、道は銀色に輝いていますし、コンビニの中で、一瞬空回りしたのと、停止しながら、ハンドルを切ると、やけに軽かったのと、降りた時の踏み締めた感覚で、雪を実感しました。

 

これが踏み固められて、夜まで残ったり、二日目に持ち越して、凍結??

なんてなってしまうと、どうなるかは、不明ですが。。

がーん

 

大阪で積もるのは1シーズン1ー2日あるか?と言う感じで、多くても4日ぐらいだと思われます。そして、翌日も道路に雪があることはあまりありません。冬の装備を、用意している率はかなり低いと思います。。

 

教訓としては、遠回りになろうが、道の選定は慎重にする。11月終わりの方になったら、冬タイヤに交換する。冬タイヤでも過信せずに、車間距離をあけてゆっくり走る。などでしょうか。。

ぶっちゃけ、冬は来てほしくないですが。。。汗

 

本当に気をつけたいです。。ただ、こっちが対策していても、周りがしているとは限らないので、基本的に、周りの車には近寄らないことが鉄則ですね。。。

 

 

 

ソースリスト整形ソフト

ソースリスト整形ソフトで、iP6 Plus とか整形したいです。有名なのは、Clang-Format というのらしいです。どのフォーマットにするのがいいのでしょうか?

 

それにしても、オプションが多すぎます。。

とりあえず、下記を実現してほしいです。

 

これを、

if( hoge == 123)

{

     printf("hogehoge");

}

 

これにしてほしい

if( hoge == 123) {

     printf("hogehoge");

}

他にも、コメント書いてないのを書くようにするとかもありますが。。

 

ただ、clang-format は、Macには入っているのを確認しましたが、Windowsは入ってませんでした。(MSYS2 + mingw には入ってませんでした。)

llvm を入れる必要性があるそうです

 

Clang-Formatの書式について - Qiita

Visual Studioのコード整形にClang Formatを適用してみた | ぺんぎんや

 

 

*****************************************************************

追記1

Windows のMsys2 で使う場合は、

% pacman -S mingw-w64-x86_64-clang
で入れるようです。
うーん。

Windows (Msys2)でclang-formatを使う | うどんコード

 

*****************************************************************

追記2

どうしても、下記のよう(関数の後は改行して、制御ぶんの後は、改行入れない)にならなかったのですが、

 

int func1(void)

{

     func2();

     if( true) {

     ....

    }

}

 

下記のページを見てようやくわかりました。

 "BreakBeforeBraces: Custom" が必要なようです。


# { } の位置 # "BreakBeforeBraces: Custom" の場合に有効となる # true なら独立行にする BraceWrapping: AfterControlStatement: false # 制御文の後 AfterEnum: true # enumの後 (単一行にしないため) AfterFunction: true # 関数の後 AfterStruct: true # structの後 (単一行にしないため) AfterUnion: true # unionの後 (単一行にしないため) AfterExternBlock: false # externの後 BeforeCatch: false # catchの前 BeforeElse: false # elseの前 # { } の位置をカスタム設定する BreakBeforeBraces: Custom

 

 

Visual Studio Code で clang-format を使用する - suimin-busoku

 

とはいえ、ある程度形ができてしまっている、某 iP6 Plus に適用するのは問題がありますね。。もしやるなら、いじり出した2002年頃、最初にやるべきでした。。

二つ問題があります。一つは、バグが出た場合、普通はいじったところを見るわけですが、今から整形ソフトを全部適用すると、どこが原因か分かりにくくなる。。。

 

それから、clang-format だけではできないことがあって、たとえば、下記のformat 変更をしてほしいのですが、

 

(こうなっているのを)

if( true)    // comments

{

 .....

}

 

(こういうのにしてほしい)

if( true) {   // comments

 .....

}

 

clang-format では、語句の入れ替えとかはしてくれないので、変化なしになります。

つまり、上記の変更をしたい場合は、手作業で全部書き換えるとかになります。。。汗

 

 

一部は変更したのですが、(buffer.c とか)基本的には、今後の課題ということになりますね。。。汗 今度から気をつけましょうということでしょうか。。。

 

iP6 Plus

終了したいと思って、幾星霜

 

オープンソース」だと思っていたが、ソースリストの状態がオープンなだけで、(自由ソフトウエアとしての)オープンソースではなかったでござる。。で、やる気が減退。。汗

 

無料だといいけど、有料だと契約してね。」という、大昔だとよくあるパターンらしいが、そういうので縛られているらしい。。

何か面白いのを追加しても、オープンソースじゃないとか。。

 

クローズどソースにすればよかった。。今からでも、クローズどにするとか。。?

 

(でもここだけの話、エミュレータでそういう縛りをするのって、どうなんだろうか?事実上の有償使用禁止。某帝国が黙っているとは思えないが。。。  ((((;゚Д゚))))ガクガクブルブル)

 

最初は、ソースリストの先頭に書いてある文章(もちろん全部英語)が目に入っていたが、「無料」ならいいんでしょ? 有料で使わないから大丈夫ぐらいにしか思ってなかったが。。汗

 

それに、みんな、PC6001V か、PC6001VXか、PC6001VWを使うでしょう?と。。

テープの読み込みに失敗する?あれは、p6top6t を使わないと、いけないが。。。コツがいるので、大変なのはわかる。。。

 

が、Un*x系だと、ソースリストで互換性を維持しているので、ソースリストがないと困るんだ。

Windows系は、20年前のバイナリーでも、涼しい顔をして走ったりするが、あれは変態的だと思う。。滝汗  互換性をなかなか切れないので、変な仕様が残っていたりするが。。

 

Windowsだと、マウスのホイールスクロールが、ガタッガタッと、行単位でしかスクロールしないとか、ドライブ指定(c:、 d:)、オーディオが旧態依然すぎるとか。。汗)

 

 

Macなんて、すぐに仕様が変わるし、Xcode変わりまくるし、CPUのアーキテクチャーが変わるし、なんなら、メインのプログラミング言語ごと変わったりする。。数年前のiOS 簡単にできます本が、ゴミになったりする。。(滝汗)

 

だから、ソースリストは絶対に必要だと思う。

 

でも、Appleの場合は、公証というので、どこそこのだれべえが作りました。という署名をして、Appleに提出しないと、いけない。まだ、公証しなくても、Macだと、実行する穴は開いてはいるが。。。いつまで開いているんだろう? 謎 

 

エミュレータが、iPhoneiPad で動かないの?ということだけど、普通に、Objective-Cや、Swiftで組めば、動くのは動くが、手元では、短期間しか動かせない。AppStoreに出したいが、おそらく、審査で落とされるだろう。。 なので、個人的には、Emscripten などで、Web化して、実行するという、パターンを考えてしまう。

 

ただし、Web化するときに、不特定多数の人に公開する場合、実機のROMファイルを入れるのはまずくて、Webなので、ダウンロードできてしまう? 互換ROMを使わせてもらうのが安全か?

 

 

というわけで、ソースリストがないと、未来の人は困ってしまう。。。

ただ、すごく未来の人が、1980年台のパソコンのエミュレータで遊ぶのか?というと、かなり謎な気がするけど。。。

 

iP6 Plus は、変な機能を入れたかった。。が、

自分で好き勝手いじれるエミュレータはすごくいい。

C言語なので、すごくいい。どこからでもその関数を呼べる。。

C++だと、オブジェクトを渡しておかないと、呼べない。。。

 

ちなみに、iP6 Plus をC++化するのは、骨が折れるというか、それにコミットしても、オープンソースじゃないしな。。。汗

クローズドにしたら、別に自分しか見ないので、動けばいいということになる。汗

 

骨の髄までC言語なので、多分無理で、処理とデータを同じソースに固めて記述して、どうしても、ソースを跨らないといけないところだけ、ゲッター、セッターなどで受け渡しして、extern を減らす方向性とか??

 

そこまでやるなら、作り直すとか、もっとクリエティブなことに使った方がいいかも。。

 

過去記事に追記する方法

記事を書くを押す

 

左上の、< 文字を押す

 

最近書いた記事が、表示されるので、その下の、目的の記事タイトルを押す

これで、過去記事が編集可能になるようです。汗

 

いつも、悩むので、メモ

って、ここにメモしてもしょうがないような。。。汗

 

 

PC6001V をWindows でビルドしようぜ (失敗の巻)(追記あり)

あまりいらっしゃらないと思いますが、一応メモっておきます。

下記を参考にして、MSYS2 と、mingw を入れます。

Windows development (MSYS2)

 

下記を参考にして、x86_64 のミラーを Jaist に変えます。

msys2のミラーにjaistを使いたい - Qiita

 

変えなくてもいけるかもしれませんが、私の環境では、ffmpeg を入れるときに、通信が遅すぎるなどの理由で、途中で止まってしまったので、変えた方が良さそうです。

 

上記のURLを参考にしながら、c:¥msys64¥etc¥pacman.d¥mirrorlist.mingw64 ファイルの先頭に、下記の文言を挿入します。(vim からは挿入できなかったので、Windowsテキストエディタで変更)

Server = https://jaist.dl.sourceforge.net/project/msys2/REPOS/MINGW/x86_64

先頭から順番に使われるためらしいです。

 

必要なライブラリを入れます。

$ pacman -S mingw-w64-x86_64-ffmpeg

$ pacman -S mingw-w64-x86_64-libpng

$ pacman -S mingw-w64-x86_64-SDL2

 

PC6001V のソースリストを落としてきて、適当なディレクトリに展開します。

Makefile のあるところで、make します。

 

。。。が、なぜか、リンクエラーになりますね。。(´・ω・`) ショボーン

-lrav1e とか、-ld1 などが見つからないそうです。。

大体は、あっていると思うのですが。。

 

なぜ?

 

ちなみに、1年前も、同じようなことをやっていたようですが。。この時も同じだったのかな?(´・ω・`)

 

■ - Windy の日記

 

 

追記

 

-lrav1e は、スタティックリンク用の、librav1e.a というファイルを探しているようです(後ろから二文字目は、数字の1)が、ffmpeg を入れても、入ってくれません。ダイナミックリンク用の、librav1e.dll.a ならあるので、とりあえず、リンカーに渡しているオプションから、-static-libgcc -static-libstdc++ --static を削除します。

 

あと、-ldl というのが何回も出てきますが、なくても通るようなので、これも削除すれば、通るように成ります。

 

私は、make -n >ld.sh とやって、ld.sh を編集しました。make でリンクに失敗しますが、そのあと、sh ld.sh とやると通るようになります。

 

ただし、制限があります。起動するときは、Windowsエクスプローラーから、起動しようとすると、dll などが見つかりませんエラーになります。mingw64 のターミナルから、./PC6001V とする必要性があります。

または、必要になるDLLファイルを、実行ファイルと同じところに、全部コピーしておくかですが、それも面倒ですね。

 

おそらく、ゆみたろさんは、なんらかの方法で、librav1e.a ファイルを作成して、リンクしているのか。。。?わかりませんが、ようやく、とりあえずの回避策は、見つけられました。。

ブランチを切る

ブランチを切って、いじって、マージするのは、下記の記事がすごくわかりやすかったです。

なかなか、覚えられないが。。

 

ブランチ切って更新してマージするまでの流れ - Qiita

 

新しいブランチを作る

$ git checkout -b feature-create-api


いじって、リモートに反映
git add .
git commit -am "commit message!"
git push origin feature-create-api


(マージする前に)マージ先のブランチに切り替え
git checkout develop
マージする
git merge --no-ff feature-create-api