2020-02-29

Pe 0.87.001

致命的にバグってたので緊急リリース。
コマンドライン引数が設定されていない場合に ps1 実行で死んでいた。

しんどい。

2020-02-26

PowerShell AA Pe 0.86.0 版

こーいう配列があって、
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 9, 2, 9, 2, 9, 2, 2, 2, 9, 2, 2, 9, 9, 9, 2, 9, 9, 2, 2, 2, 9, 2, 2, 2, -1
9, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 9, 2, 9, 2, 9, 2, 3, 2, 9, 2, 3, 2, 9, 2, 3, 2, 9, 3, 2, 3, 9, 2, 3, 3, -1
9, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 9, 2, 9, 2, 9, 2, 9, 2, 9, 2, 9, 2, 9, 2, 9, 2, 9, 9, 2, 9, 9, 2, 9, 9, -1
9, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 9, 2, 9, 2, 9, 2, 2, 2, 9, 2, 9, 2, 9, 2, 9, 2, 9, 9, 2, 9, 9, 2, 2, 2, -1
9, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 9, 2, 9, 2, 9, 2, 3, 3, 9, 2, 9, 2, 9, 2, 2, 2, 9, 9, 2, 9, 9, 2, 3, 3, -1
9, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 2, 9, 2, 9, 2, 9, 9, 9, 2, 9, 2, 9, 2, 3, 2, 9, 9, 2, 9, 9, 2, 9, 9, -1
9, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 9, 2, 2, 2, 9, 2, 9, 9, 9, 2, 2, 3, 9, 2, 9, 2, 9, 9, 2, 9, 9, 2, 2, 2, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 3, 3, 3, 9, 3, 9, 9, 9, 3, 3, 9, 9, 3, 9, 3, 9, 9, 3, 9, 9, 3, 3, 3, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, -1
こー言う処理に食わせて
foreach ($dot in $appIcon) {
    switch ($dot) {
        0 { Write-Host '   ' -NoNewline -ForegroundColor White -BackgroundColor White }
        1 { Write-Host '|||' -NoNewline -ForegroundColor Black -BackgroundColor Black }
        2 { Write-Host '===' -NoNewline -ForegroundColor Red -BackgroundColor Red }
        3 { Write-Host '---' -NoNewline -ForegroundColor DarkRed -BackgroundColor DarkRed }
        9 { Write-Host '   ' -NoNewline }
        -1 { Write-Host '' }
    }
}
こーなる











こういう実装中の暇つぶしは好きです。。。

2020-02-25

Pe 0.84.0 リリースで分かったこと

  • まぁ動くだろ的なノリで適当にリリースするとやっぱ泣く
  • Nuget から落としてきたライブラリでも依存ライブラリがある
    • CefSharp が Microsoft Visual C++ 再頒布可能パッケージ が必要なのを完全に見落としていた
    • 見落としていたというかまっさら Win7 で動かなかったのを .NET Core のなんかだろと軽視していたツケ
    • VSで開発してるからライブラリあって当たり前でまったく気にならなかった
  • 自環境でダウンロード検証したが、帯域絞るなりしてみた方がよかった
    • 0.83.0付属のアップデート処理機能だと落としきる前にタイムアウトしてるっぽい
      • これに関してはもうどうしようもないが、リリースノートの差し替え差し替えでぐっだぐだ
  • もうまじ💩

2020-02-24

Pe 0.84.0 リリース!

Pe を .NET Framework から .NET Core に変更した。
以下文書は酔っぱらいながら書いてる🍶。

移行に当たり git log を確認すると諸々の流れはこんな感じ
  1. 2017/06/11 0.83.0 リリース
  2. 2018/11/19 バージョンアップに着手
  3. 2019/01/06 バージョンアップ諦め
  4. 2019/03/02 バージョンアップに再着手
  5. 2019/06/08 バージョンアップ再諦め
  6. 2019/08/20 バージョンアップに再々着手しつつ .NET Core に唾を付ける
  7. 2020/02/24 .NET Core にて 0.84.0 のリリース
まぁ色々あった。

.NET Framework から .NET Core への移行

まぁ気になる人はこれだと思う。
基本的には問題ない、と言いたいが対象ユーザー層との相談が必要になると思う。

サーバーサイドならなんも考える必要はないけどデスクトップ界隈ならば、
  • 対象端末に .NET Core ランタイムはあるか
  • ランタイムがないのであれば自己完結型で💩レベルに膨れ上がるバイナリを許容できるか
なのでこれを解決する必要がある。

Pe の場合、これは自己完結型でユーザー許可を取らずにぶち込んだ。
ただこれも見映えの話で、自己完結型だと DLL が山ほど出力されるのでユーザーがなんも考えず EXE を起動できる必要がある。
(ユーザー目線で見ると .NET Core 自己完結型の EXE 探してダブルクリックとか結構な無理がある)
Pe では自己完結型の出力先を <Pe>\bin\ にして必要な諸々を bin ディレクトリに委譲したうえでユーザー操作では <Pe>\Pe.exe (と互換性保持用の PeMain.exe)だけに限定した。
起動順序として Pe.exe -> bin\Pe.Main.exe となる。
せっかく .NET Core(C#) で作ってるのにこの起動アプリケーションを C で作るというなんかもう何してんのか分からないことになっているしコマンドライン引数の再受け渡しでさらに何してんのか分けわからんことになってる。
プログラマー様に渡すならどうでもいいけど配布プログラムになるとこうするのが妥協案として一番まともだと思う。

ちなみに UI 系のものはことごとく捨てた。
UI 系ライブラリの .NET Core 対応を待つのもバカっぽいのですてた。
※ .NET Framework 版の .NET Core 上での再使用はなんとなく嫌だったので除外
これに関しては現行(.NET Framework)版の UI 充実度に左右されると思うので .NET Framework ライブラリ を .NET Core 上で動かすのが最適解だと思う。

ていうかサーバー用途じゃなけりゃ .NET 5 になっても MS が互換レイヤー用意するだろうから Windows だと無理くり .NET Core 自己完結型 にする必要ないと思う。

ブラウザに関して .NET Core に移ってまで WebBrowser に心ポキポキ折られると心が持たないので CefSharp を入れたがこれもまたサイズがでっかい。
まぁ .NET Core 自己完結型の中だと誤差だよ、誤差。

リリースに関して

これもうアップデート処理が出来たからリリースしましたとしか言えない。

.NET Core だと 1 exe で MB 単位の EXE 出来上がるのでこれのためにアップデート用 EXE に切り分ける選択肢はなし、本体側で実行できないと💩状態。
.NET Framework でもそうだったけど、 EXE を殺すのはどうでもよくて依存 DLL があるとなんもできなくなるのでこれを実現するためにいろいろ考えた結果 Pe.exe(Pe.Main.exe) から powershell を呼び出して呼び出し先で渡された Pe の PID 終了を待つようにした。

正直一番ましな方法だと思ってる。
ちなみに pwsh を優先して、なければ powershell を呼び出すようにしてるから多分どこでも動く。
これに関しては bat でも何でもよかったけど、 win10 なら bat でも ps1 でもなんでも動くだろっていう安直な想い。

PowerShell

  • Pe の可動部分(アップデート周り)では PowerShell の命令に限定している。
  • ビルドスクリプトは .NET の処理使ったり好き勝手やってる。
ビルド環境(おおよそ CI 環境)は開発者側で何とでもなるのでどうでもいいが、
アップデート環境 = リリース版 = 知らない人 の環境なのでここで動くシェルスクリプトっぽくでコマンドプロンプトより高機能で bash よりどこでも動くとなるともう PowerShell しかないのでこれでやるのが現状最強だと思う(ver 5 だけに限定するなら特に)。

.NET Core(3) への移行について

  • .NET Framework から移行するのは簡単
    • ただし移行だけに専念して .NET Core にまつわるロジック変更以外は何もしない方がいいと思う
    • Pe の場合、組み直し中の .NET Core 移行だったのでかなりしんどかった
  • (非プログラマの)ユーザーがクッソ重いバイナリを許容してくれてクッソ多いファイルから EXE を見つけてくれるなら .NET Core に移行してもいいと思う。無理なら何かしら解決策を提示する必要はある
  • プログラム組む側の人間なら移行していいと思う。たのしい!
  • プログラム組まない人間であれば情シスが .NET Core って言って来たら工数を要件と確認した方がいいともう。さらに言えば 1.5 倍にした方が安全だと思う(はまると死ぬ)

結論

うちは好きにしたけど君はまぁ頑張れ。

2020/02/25 12:00 追記

0.83.0 -> 0.84.0 の自動アップデートがたぶんタイムアウトかなんかで無理な可能性あり。
俺んちではできたけど会社ではだめだった。
0.83.0 までは軽量だったから問題なかったんだろうね、手動だ手動。