「 C言語 は OSの入ってないハード 寄りのプログラム言語という居場所を持ってるのが長所なんで、 オートマチック車ではなく マニュアル車 みたいな趣がむしろ長所であり
Python, JavaScript, Rust言語などにある モジュール・システム という高級言語に付いているやつが無いのは 原理的に理解できるだろう☆」
#include <hoge.h>
#include "fuga.h"
「 ↑ 三角括弧とダブルクォーテーションで何が違うのかとか あるあるネタ だが パスの探し方が違うだけで 知ったところで別に嬉しくない……☆」
「 そして C++言語 は高級言語のくせに 長らく モジュール・システム は付いていない☆
そんなだから ライブラリを参照するのにはトラウマがある☆
NuGet とかで パッケージをインストール すると つまづく☆」
「 #include
は欠陥品なのでは☆ 触って3日目には なんかこいつおかしいな、と気づくだろ☆」
「 35年ぐらい 見て見ぬふりをしている人たちが居るのよ。伝統だから」
「 ↑ 脱線してると1記事書いてしまうので 本題を進めよう☆
単純に 機械学習のパッケージを NuGet でインストールしたのに #include <onnxruntime_c_api.h>
が効くときと、効かないときがあるの
何でなの、だぜ☆」
「 ↑ 最近ではもう ディレクトリ名やプロジェクト名を 深く考えるのが嫌になって Git Hub のローカル・リポジトリ用のディレクトリに
タスケテ何とかマン、ハロー、ナントカ☆! とか名前を付けて 作成☆」
「 ↑ わたしが今作ったのは プロジェクト で、
ソリューション というのは 勝手に作られたものだということに 注意されたい☆」
「 コンピューターの勉強をしたいのに、やっていたことは Microsoft 製品の勉強だった、 ということが 無いようにしたい わね」
「 Microsoft の ビルゲイツというやつが 研究所の中ではなく 民間に普及させて市場を取るための商品としてのコンピューターに BASIC というプログラム言語を
作って与えて以降、コンピューターが普及するほど Microsoft も広がるという 稲からみた人類 みたいな増え方をしたので
民間のコンピューターの勉強 = Microsoftの勉強 というのも 30点ぐらいは 正しい雰囲気だぜ☆」
「 ↑ で、こういう感じに ディレクトリーが作成されたはずだぜ☆」
「 ここで ポイントとしては、 Microsoft は ユーザーからのクレームに対応するのはコストだと考えていると思うので、
賛否両論 よりは 賛とも言い難いが我慢できる程度の否 を狙ってデザインしてくる☆」
「 お父んは 作成先のディレクトリー に既存の GitHub ディレクトリーを選べば もっと すっきりしたのでは☆?」
「 ↑ じゃあ 勝手に作られた *.sln
ファイルを右クリックして、好きなテキストエディターで開いてくれだぜ☆」
「 ↑ なんだか知らんフォーマットだが、プロジェクト・ファイルへの相対パスが書かれているな☆」
「 まあ、良く言えば 伝統 なんだろう……☆
伝統って あまりにも管理コストが高くなると 破棄 されるストーリーが待っているので、良くないんだけどな☆」
「 ちなみに *.sln ファイルをダブルクリックすると、
Visual Studio が紐づいていて 起動するぜ☆」
「 実行ファイルじゃないのに アプリケーションを起動できるの、 GUI の利便性が産んだ コンピューター体験の統一性の破綻だよな☆」
「 ↑ じゃあ、プロジェクト・ファイルを テキスト・エディターで開いてみようぜ☆?」
「 ↑ いっぱい書いてあるが、要は プロジェクト に対して設定したものが並んでるんだぜ☆」
「 ちなみに プロジェクト・ファイルをダブルクリックしても、 Visual Studio は起動するぜ☆」
「 プロジェクトから ソリューションへの方向には 相対パスなどで紐づいていないのに なんで そんなことが……☆?」
「 ↑ プロジェクト・ファイルをコピーして、 ソリューションが近くにないところで ダブルクリックしてみようぜ☆?」
「 ↑ Visual Studio は起動するが、存在しないソリューション・ファイルを指しているぜ☆」
「 Visual Studio を起動してから、ソリューション・ファイルを選んで開きましょう!
それが GUI の利便性を享受しない コンピューターの手堅い使い方なのよ」
「 ↑ じゃあ NuGet を使って Microsoft.ML.OnnxRuntime.DirectML
パッケージをインストールしてみようぜ☆?」
「 ↑ .sln
ファイルと同じディレクトリーに package
ディレクトリーを作成して、
そこへ 欲しいパッケージ、そして 欲しいパッケージを使うために必要なパッケージを ダウンロードしてくれたようだな☆」
「 パッケージ・マネージャー なんて今どきのモダンなプログラム言語には トップ・ディレクトリーからアクセスできるぐらい
重要な機能なのに [ツール] - [NuGet パッケージ マネージャー] - [ソリューションの NuGet パッケージの管理]
と 3回クリックしなきゃいけないの、
イケてなくない?」
「 Microsoft は Windows製品 を売るとともに、 Windowsの基本操作 という 文化 も売っている☆
その文化を変える権限を持っているのは Microsoft社員のうちの誰かを考えてみろだぜ☆」
「 コンピューターの使い方を覚え、それを飯のタネにしている 全国の Windows ファンがそれを許さないだろう☆」
「 ↑ インストール前と、インストール後で変わるのは、
.sln
ファイルと同じディレクトリーに package
ディレクトリーができたことと、
パッケージ ファイルの方に 変更と packages.config
ファイルが追加されたということだぜ☆
もちろん OS の深い所に何か変化があったら 気づかないが……☆」
「 ↑ パッケージが見つからなかった時のエラーメッセージと、その条件がコーディングされてることと……☆」
「 ↑ packages.config
をソリューション・エクスプローラーで見えるようにすることだな☆」
#include "onnxruntime_cxx_api.h"
// #include <onnxruntime_cxx_api.h>
「 ↑ 初回は 読込に十数秒かかるようになってしまったが、 ダブルクォーテーションでも三角括弧でも エラーは無く動くぜ☆」
「 今の 初回実行時だけのその遅さ は、スペックの高いマシンじゃないと気づかなくない?」
「 ↑ じゃあ一旦、インストールしたパッケージを、アンインストールしてみるぜ☆」
「 ↑ packages.config
の中身がだいぶ減ったが、
アンインストールしたのは Microsoft.ML.OnnxRuntime.DirectML
パッケージであって、
それが依存していた Microsoft.AI.DirectML
を名指しでアンインストールしたわけではないので、記述が残ってるのかだぜ☆?
だとしたら 依存性を追いかける機能がそれほど優れていない☆?」
「 ↑ また、プロジェクト・ファイルに記述されているものも消えていないが、条件文によって非表示にはされるみたいだな☆」
「 網の目の 依存関係を 全部記述していたら 指数関数的にオーバーヘッドが増えてくから、
網の目、またはツリー構造の 葉の数だけ書いて 枝は書かずに 条件文付けて終わりで 楽してんじゃないの?」
「 そんな バッド・ノウハウ 溜まってるとしたら Microsoft らしいよな☆」
「 ↑ こうやって 丸ごとコピーを 取り置きしながら 差分を調べることで 1ステップで何が起こるのかを確認していくんだぜ☆」
「 ↑ packages.config
ファイルは もっといろいろパッケージに与えた設定とか書かれるんだが、
インストール直後は こんな感じで ちょびっと だぜ☆」
「 ↑ 初回起動時は デバッグ用のデータベースが作られているから遅いだけか……☆?
packages ディレクトリーに変化はなし☆」
「 packages ディレクトリーの見所を教えてくれだぜ☆」
「 ↑ .props
と .targets
ファイルはどちらも XML形式だぜ☆」
「 ↑ .targets
の方は、CPUの構成が違う時にエラーメッセージを表示するテンプレートなのだろう……☆」
「 ↑ .props
の方は、 環境変数のPATHの書き方に似ていて パスを追加したり☆、」
「 ↑ CPUの構成によって呼び出す .dll を変えているのだろう……☆」
「 そのパスの構成が、何かのタイミングで 全部 オジャン になることがあるんじゃないの?」
「 故意に オジャン にする方法はいくらでもあるが、 不意に オジャン にしてしまうのが 何をしたからなのかが知りたいんだぜ☆」
「 そんなん オジャンにしてるやつを観察 するしかないぜ☆」
「 古ーいプロジェクトから プロジェクトのアップグレード
した時と、 プロジェクトの設定をGUIで操作したとき
に プロパティシートが更新されることがあって、
%(AdditionalIncludeDirectories) = "%(AdditionalIncludeDirectories);追加するpath"
としなければならないところが
%(AdditionalIncludeDirectories) = ""
になってしまうことがあるそうよ」
「 1990年代から 口を酸っぱく書かれて読んでいた パスの通し方の間違え方、わらう☆」
<書きかけ>
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!