c++の仕様が巨大化していく理由

ほぼひと月前から初めて、半分消化しましたが、

https://isehara-3lv.sakura.ne.jp/blog/2022/02/15/通読してみることにした/

なぜc++が習得が難しいと言われているかを自分なりに理解したこと。

 

<ハードウェアを扱う機能と抽象的なオブジェクト指向が合体しているから>

コードの品質と生産性を高めるためにはオブジェクト指向が必須だけれども、そこにハード資源を効果的使うという要件も必要条件になっているから、仕様が複雑化。具体的な例で言えば、例えばポインターの概念がオブジェクト指向の中にも拡張されているからと言えるのではないか。もちろんガーベージコレクションなどの概念も無くてリソース管理が全てプログラマの責任というのは、これはc++に限らずcでもハードウェアを扱う言語の本質的かつ必要条件でもあるけれども。

 

<モダンナイズはされて来ている>

特に最近の言語仕様の拡張で、コンテナクラスを標準で使うなど現代的になって来ていると思う。しかし行き着くところはcの殻とc++の殻がそれぞれ独立することはできないからお互いに融合した言語仕様のままであることは変わらないように思う。

 

極端にハードリソースの限られるデバイス、OS開発などではc++以外に代替え手段のない言語だから、この先も複雑化していくことは間違い無いんじゃないかと言えます。

 

admin

 

聴き流しとは言え、

オーディオの編成替えで気づいたこと。プリメインアンプの表示に見慣れない表示があって何かと思って調べると、BI-AMPモードになってた。つまり左チャネルの音でモノラルで聴いてたということ。

BGMとはいえ、今までかなりの長い期間モノラル(変則的な)だったから、もしかしたら何でもいいか?と言われるとそんなことは無い。

何かのはずみで系の右左入れ違うこともあるだろうから、garagebandで左チャネルと右チャネル用に音源作って、何か変更した時はチェックできるようにしました。

 

admin

Unit V2カメラにsshログオン

Linuxで動いているので、当然sshも使えます。

ユーザー権限では色々情報ありますが、root権限では以下のような長ったらしいパスワード入れれば良さそうです。

https://notenoughtech.com/home-automation/m5stack-unitv2/

10.254.239.1はavahiが動いていればunitv2.pyで問題ありません。



<user login>

ssh m5stack@10.254.239.1 
//user: m5stack
//pwd: 12345678

------------------------------------

<file>

unitv2% df
Filesystem           1K-blocks      Used Available Use% Mounted on
ubi:rootfs              419980    297980    122000  71% /
devtmpfs                 57344         0     57344   0% /dev
tmpfs                    58368         0     58368   0% /dev/shm
tmpfs                    58368        92     58276   0% /tmp
tmpfs                    58368        44     58324   0% /run
cgroup                   58368         0     58368   0% /sys/fs/cgroup
/dev/mmcblk0p1        15549952        32  15549920   0% /media/sdcard


<root pw>

7d219bec161177ba75689e71edc1835422b87be17bf92c3ff527b35052bf7d1f

unitv2# who
root            pts/0           00:00   Jan  1 00:07:12  10.254.239.104
unitv2# 


<python>

unitv2# python --version
Python 3.8.6


<network>

unitv2# ifconfig
br0       Link encap:Ethernet  HWaddr 00:30:1B:BA:02:DB  
          inet addr:10.254.239.1  Bcast:10.254.239.255  Mask:255.255.255.0

ログインして幾つかのコマンドを実行してみましたが、外付けのsdカードには何も入っていないようですね。何に使うんだろう?

 

admin

 

 

M5Stack UnitV2 AI カメラ(SSD202D)つないでみる

いつもの通り、switch scienceで購入。これは宅急便(送料650円)扱いだけれども、8,000円以上は送料無料とかで支払い一万円は超えず。

 

macに接続、最初Mac OSでは機能有効にするとインターネット使えなくなった(Linuxでも同じ)ですが、ドライバ不要のLinux(VMware Ubuntu)で使うのが良さそう。

デフォルトのアプリで物体認識してみる。写真にカップ写っているからかdinning tableと認識されてます。

まずは、疎通確認だけですね。

<ドキュメント>

https://docs.m5stack.com/en/unit/unitv2?id=description

https://docs.m5stack.com/en/quick_start/unitv2/v_training

 

admin

NASで使うSSDの寿命

SSDと言ってもいろんなグレードがあるとは思うけれども、最も一般的な低価格品を使ってますが、NAS(Qnap TS-230)の管理画面に予測寿命というのが表示されています。

デスクの2番は元々ノートパソコンで使っていて、始まりは94%と表示されいましたが、最近93%に落ちました。1番はCrucialの新品1TBで、こちらはまだ100%表示。NASはバックアップにしか使ってないから、毎日せいぜい2時間ぐらいでほぼ半年ちょっとの使用だから、累計で400時間ぐらいの電源オン時間。このペース(時間に対してリニアに減少なら)ならばNASのライフを5年ぐらいで考えれば全く問題ないことになります。24時間運転だと状況は変わってきますが。

ちなみに、SSDの温度上昇は環境温度プラス10℃と言ったところで、HDDだともっと過酷になるでしょう。

 

admin

timemachineで旧ファイル削除発生

qnapのtimemeachineバックアップで、ようやく旧ファイルの削除発生。残り領域20GB切ったあたりで、旧ファイルの削除発生して容量が40GBぐらいまで増えてます。

 

admin

CMake(c++ ビルドツール)

M5stackとかだと、VScode使うとアドオンでPlatformIO入れればビルドツールにもなりますが、それ以外のプロジェクトだとやはり専用のビルドツールが必要だと思う。RaspberryPIも開発はパソコン上でやるのが効率的なわけだし、クロスプラフォームで統一的に使えるツールとしてはCMakeが便利そうなので、これを使ってみます。

以下の実行環境はMacBookです。

インストールしたのはGUI版とCUI版ですが、実用的にはCUI版の方が使いやすそうだから、実際に使ったのはそちら。

<ディレクトリ構造>

<header.hpp>

2行目は実装されていません。

void show_val(int val);
void show_val();

extern int val_e;

<header.cpp>

#include "header.hpp"

#include <iostream>

using namespace std;


int val_e = 98;

void show_val(int val){
    cout << "val = " << val << endl;
}

<main.cpp>

#include "header.hpp"

#include <iostream>

using namespace std;


int main(){
    show_val(19);
    cout << "val_e " << val_e << endl;
}

 

作業はbuildディレクトリを作成してその中で行います。

<CMakeLists.txt>

cmake_minimum_required(VERSION 3.22)
project(build_sample CXX)
add_executable(main main.cpp)

例を参考に、こんなmake条件を設定しています。ソースファイルは2個あるのでそれを指定、ヘッダーファイルはソース中で#includeされるから設定不要。

<実行コマンド>

configure & generate

% cmake ..
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: ~~~~~省略~~~~~/build

build

ディレクトリを一階層上に移動して、

% cmake --build .
Consolidate compiler generated dependencies of target main
[ 33%] Building CXX object CMakeFiles/main.dir/header.cpp.o
[ 66%] Linking CXX executable main
[100%] Built target main

作成された、実行ファイルmainを実行(./main)するときちんと実行できました。

% ./main
val = 19
val_e = 98

 

P.S. 2022/11/6

ディレクトリの移動は必ずしも必須ではなくてコマンドのパラメータ次第で、buildディレクトリに移動しなくともビルドはできます。

覚書から、

https://qiita.com/tchofu/items/69dacfb93908525e5b0b

% cmake [<options>] -S <path-to-source> -B <path-to-build>

-例-

% cmake -S . -B build // @upper dir of the build dir

% cmake –build <dir> –target <tgt>… [<options>] [– <build-tool-options>]

-例-

% cmake –build build // @upper dir of the build dir, <dir> is build

 

admin

timemachineがqnapの閾値に到達

割とギリギリ(95%)設定していましたが、そこに到達。アラームが出るだけでバックアップされないわけではないのですが、アラームが目障りなので、しきい値を100%に変更。timemachineのアルゴリズムでは最古を削除してから追加と言われているので、どうなるのかはあと十日ぐらい経過すればわかるはず。ディスク全体ではまだ2割以上の空き領域は確保できているから、パーフォーマンス的には問題ないだろうと思う。

 

admin

VScodeのCode Runnerの設定

C++のVScode環境でほぼハマるのが、コンパイラーのバージョン互換問題。ほぼ3年毎にメジャーチェンジがあるので、新しい機能はデフォルトのままでは動かない。

具体的にはラムダ式がデフォルト設定ではダメでした。error以外にもwarningがそれ以前には出ていましたが、とりあえず前には進めるから放置してました。

を参照して、① コンソール入力可能にするのはメニューから設定して、② コンパイラーバージョン設定はcode-runnerのsettings.jsonファイル中の最後部分、”code-runner.runInTerminal”: true以下に点線で挟まれた部分を追加。ただし、以下の太字($fileName)のところは参照内容から変更してます。

———————————————————–
,
“code-runner.executorMap”: {
“cpp”: “cd $dir && runFiles=`ls *.cpp` && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt”,
},
“clang.cxxflags”: [
“-std=c++20”
]
———————————————————–
これで新しい機能もコンパイルできるようになりました。
admin

M5Stack UnitV2 AI カメラ(SSD202D)

M5stackにつながるカメラにそれほどの選択肢はありませんが、これは面白そうです。A.I機能がビルトインされてて購入時点で使えるとのことなので、画像認識系のアプリを簡単に作成するには便利そうです。

https://www.switch-science.com/catalog/7160/

Linux系らしいので、多少モディファイするのも難易度は高くはなさそうです。

(画像はスイッチサイエンスのwebから)

 

admin