スワップ領域をファイル化

ここに書かれた内容は、sudo apt install dphys-swapfile (導入)、sudo apt purge dphys-swapfile (除去)でも可能。以下は、マニュアルで設定する場合を示す。私はマニュアル派。


Ubuntuをインストールする時、スワップ領域を指定しなければ/swapfileが自動的に作成される様子だが、ここではマニュアルでの対応を整理する。スワップ領域をファイル化しても、SSD/MicroSD/eMMC等のNANDフラッシュメモリ系ストレージのウェアレベリング効果は上がらないというのが定説のようではある。しかし、ウェアレベリングの実装はデバイスマターであり、パーティションで物理的なスワップ領域に区切られるとウェアレベリングが偏る可能性は否定できない。ファイル化するメリットは、ext4ファイルシステム上で調整できる利便性と、TRIMコマンドによる何らかの効果を期待できる点にあるが、ケースバイケースであろう。なお、ラズパイ上でDarknetを実行する時、このスワップファイルを用意しておかないと、OOMキラーが発動するケースがある。

/swapfile 実体を作る。

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 ## 1GBの場合
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

/etc/fstab を編集する。

### SSDへのスワップの例
/swapfile swap swap sw,discard 0 0

適用

sudo mount -a



/etc/initramfs-tools/conf.d/resumeがある場合、initrdの⼀部を処置し更新しないと、OS起動が30秒遅くなる。
/etc/initramfs-tools/conf.d/resume:

RESUME=/swapfile

initrd更新:

update-initramfs -u -k all

参考情報:ここ

Darknet YOLOv3で組込ベンチマーク環境構築

既に情報は多く、今更感もあるが、Darknet YOLO v3 で組込ベンチマーク環境を構築する手順をメモする。

目的:
AI処理を使っての、組込CPUでのオフロード(CPU負荷外出し)効果を検証するための環境構築手順を確立する。

オフロード先候補(興味無い順):
 ・GPU
 ・Neon 演算コプロセッサ
 ・RTプロセッサ(Xilinx MPSoC RPU)
 ・FPGAプロセッサ(MicroBraze, Nios)
 ・FPGA

まずは、私のホビーマシン(Core i7-4790 @3.60GHz / 16GB MEM / ubuntu 5.0.0-36-lowlatency)で検証する。あっさり5行、3分で終わってしまう。

git clone https://github.com/pjreddie/darknet
cd darknet
git checkout <hash値> ## 特定のコミットを使う場合
make
wget https://pjreddie.com/media/files/yolov3.weights  ## 80の物体を識別する重みファイル
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

備考:重みファイルはCOCO というフレームワークに基く80 thing classes の学習データと思われる。

結果:

Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 18.518765 seconds.
dog: 100%
truck: 92%
bicycle: 99%

predictions.jpgが結果を示す画像。AI初心者向け資料では高確率で登場するワンちゃんのようです。名前は何かな?
犬・自転車・トラックを認識するまでの時間:
 18〜21秒 (dog: 100%)/ Darknet hash:61c9d02
 7〜9秒 (dog: 99%)/ Darknet hash:f6d8617
* Kernelのバージョンアップで数値が少し変わるケースがある。

考察:
sudo chrt -r 50 ./darknet detect ... (ラウンドロビンで優先度増)で実行すると、数値が悪化かつ不安定となるのは興味深い。AI処理が直線的なのか?今回使ったUbuntu StodioはLow Latency (CONFIG_PREEMPT)がデフォルトで、メディアのリアルタイム処理には向いているが、AIの推論処理とは相性が悪い可能性が高い。
また、Darknetのコミットによって結果が大きく変わる様子を見ると、これは、オフロード実装の工夫や調整を頑張った分だけ成果になる感じがする。つまり、純粋にオフロードのトレードオフ評価を行うのは困難であり、適用先・条件等を狭くを絞った上でトレードオフしないと、意味が無さそう。

感想:
やばい、やばすぎる。時代に乗り遅れた感MAX!! CPU負荷の動きを見ていると改善余地が有りそうにも見えたが、そのネタも既にMakefile冒頭に仕込まれていた。。。_| ̄|◯

フォロー:
ガートナーのハイプ・サイクルによれば、エッジAI、まだ黎明期を脱したばかり。AI処理のオフロード/HWアクセラレートは、今後、組込エンジニアのお仕事となっていくのは間違い無さそう。AIを深く知る必要は無いが、AI組込/最適化のテクニックは要チェック。YOLOv3デモ動画を見ていると、馬と牛とラクダを区別しろとか、carだけ認識させろとか、いろいろ面白そうな要求が出て来そうだが、組込エンジニアのお仕事の本質はそこではなさそう。

関連:
1) 【FPGA】最強Ultra96ボードでAI「YOLO」高速化 - YouTube
2) YOLOv3 - YouTube
3) Darknet: Open Source Neural Networks in C

ストリート・ピアノで聴きたい名曲

ストリート・ピアノが流行っているのでしょうか? 都庁など、名所がいくつかあるようなので、近くに寄ったら聴きに行こうと思います。もしリクエストできるなら・・・

  

1位:ショパン 幻想即興曲
お手本
 
月並みですが、ピアノではこれが一番です。

 

2位:リスト ラ・カンパネラ
お手本  お手本  川崎  パリ  パリ
 
ピアノで難易度MAX級のようですが、その割には聴きやすい名曲です。

 

3位:ショパン 英雄ポロネーズ
お手本  都庁  銀座  岡山  パリ  神戸  名古屋

途中、スペースインベーダーからの侵略があることにお気付きでしょうか。そこをどう弾くか、その個性を聴き分けるのも楽しいです。

 

4位:ベートーベン 月光第3楽章
お手本  都庁  日比谷  ?!
 
ただただ、かっこいい。

 

5位:坂本龍一 戦場のメリークリスマス
新宿  京都
 
ただただ、平和を祈って。

 

・・・音楽の道は、親からの強力な押し付けに反発し、徹底的に反抗して止めた経緯があります。こんな楽しみ方もできたのかと思うと、今になって少しかなり後悔しています。

 

参考:全国ストリートピアノ設置場所

足底筋膜炎

足底筋膜炎は、文字通り足裏の筋肉の膜の炎症で、競技スポーツ選手にとっては深刻な問題となるが、一般人は中高年期に発症するようである。20代の頃の私は、マラソンサブスリーを目指して硬いアスファルトの上を駆け回り、コンクリートのテニスコートで朝から晩までテニスをしていた。その頃は何ともなかったが、今はもう、分厚い靴底/ソフトインソール/屋内スタジオでも駄目らしい。

9月中旬から、右足土踏まずのあたりが痛みはじめた。体が温まっている間は気にならないので、できれば今のペースのまま対処していきたいが、腰痛や四十肩/五十肩と同レベルで情報が錯乱していて、自分に合った治療・リハビリ方法を見つけるのはかなり難しそうだ。

----

令和2年1月1日追記:
足底筋膜炎は、まだ完治していない。ただ、この症状のおかげで、エアロ・ダンスではこれまで以上に軸と流れを丁寧に意識するようになった。他のシーンでも、仕事、人間関係、技術、教育、健康、車の運転・・・ 全ての分野において、軸とバランスを意識する機会が増えた。私の令和時代のテーマは、『軸を意識し、バランスをとりながら、流れに乗る/乗せる』というところにありそうだ。それに合わせて『少しばかりの勇気を持って一歩前に出る』で行こうと思う。
そういえば、男子トイレには『一歩前へ』とよく書いてある。

----

令和2年のとある日追記:
ちゃんと設備の整った整形外科へ行き、エコー検査やMRIをとってもらえば、あてずっぽではない効果的な治療方法は見つかると思う。但し、MRIは高額になるので、ネットでお値段の目途をしっかり確認してから。たいていはエコーで済むと思うけど、足裏のエコー検査は想像しただけでくすぐったい。
その後:
完全に忘れていましたが、緊急事態宣言(1回目)によるステイホームのおかげで治ったようです。
----
さらにその後:
その後もくすぶっていた時があったのですが、Youtube「足底筋膜炎 ボールペン」でヒットする内容で救われました。

スマホの分解修理

一昨日、いつものように、寝る前に愛用の中華スマホの充電をスタンバイしようとしたら、USBケーブルがなかなか挿さらず、更にグイっとやったら、何か鈍い感覚が走り、充電できない状態となった。あと残り命75%。あぁ、やっちまった ... _| ̄|◯

私にとってスマホは体の一部とまではいかないが、大事な存在。命が尽きる前に対処せねばならない。

 

案1:修理屋に持っていく。

→ 調査したところ、USBサブ基板交換の場合、~15,000円。これは痛い。。。

案2:この機会に政治リスクの無い格安スマホを買う。

→ 格安スマホは、どれも政治リスクを抱えている。

案3:自分で修理する。

→ 破損した箇所はサブ基板となっており、交換可能、かつ、AmazonPrimeでお安く売っていることが判明した。お急ぎ手配したらすぐに届いたので本日さっそく作業にとりかかる。まぁ、失敗したら、通信系組込エンジニアには懐かしいブランド名のg7 plusあたりを速攻で買おう。

 

準備:

  1. 壊したスマホのサブ基板:1000〜1500円。AmazonPrimeでお急ぎ手配。
  2. スマホ専用工具:700〜1200円。手持ちのものでも問題無さそうだったが、買っておくことにした。 iPhone用でもOK。AmazonPrimeでお急ぎ手配。
  3. 使用済テレカ等:QUOカード、ポイントカード等でOK。バックパネルのノリの再接着防止で使う。2~3枚、または、1枚を1/3 x 3にしておく。
  4. ドライヤー:バックパネルのノリをはがす時に使う。
  5. 手袋:あっちっちになるので。基板に触れる時も手袋している方が良い。

格安中華スマホとはいえ、昔のスマホようにツメで開封できるような甘さは無い。なめてかかると失敗しそう。

 

参考にしたサイト:

ここここ
*Teardownサイトの軽快なサウンドに乗って余計な分解までしないように(笑

 

結果:

途中、あぶないシーンが1つあったが、無事、修理できた。手順としては、

  1. 本体とバックパネルの間をドライヤーであたためながら、三角ピックかテレカを使って隙間を開ける。空けた隙間にはテレカをはさみ、再接着させないようにする。テレカは中に入り込み過ぎないように。
  2. 1の作業を続ける。1周したら、注意深くゆっくりと開ける。
  3. 本体下のネジ(黒6, 銀1)を外してから黒いカバーを取り外す。ここで初めて交換対象のサブ基板が見える。
  4. サブ基板のアンテナ線とリード線をピンセット等で外す
  5. 本体からサブ基板を外し、新品のサブ基板を挿入する。
  6. あとは上記と逆の作業。

  

 

あぶなかったシーン:

アンテナ線を外す際に、基板側のコネクタを根こそぎフットパタンごとはがしてしまった。丁度このシーン。これはやばいと思ったが、今回はサブ基板は交換なので、アンテナ線側のコネクタ部さへ壊さなければ大丈夫。冷や汗ものだったが、無事リカバーできた。

 

感想:

Amazon最強! ただし、自己責任で。警告↓
https://www.amazon.co.jp/b/?node=5859744051

 

体に染み付いた古い習慣を一掃

どの分野においても、変化を受け入れ順応していくと、更なる新しい展開を楽しく受け入れられるようになる。

未だにifconfigとか、service samba restartとか、体に染み付いた時代遅れコマンドをつい使ってしまうが、Debian 10やCentOS 8の運用をきっかけに、今時の実装に慣れていきたいと思う。

以下、気付いたコマンド・デーモン。

古い実装 今時の実装 備考
ifconfig
(net-tools)
ip a, ip -s a, ip n, …  
route add -net default gw 192.168.0.1 nmcli c modify eth0 ipv4.gateway 192.168.0.1  
iptables nftables  
ntpd chronyd redhat解説
xorg wayland (GNOME, KDE) XFCExorg
cron systemd.timer man systemd.timer
rsyslog journalctl man journalctl
service, rcconf, chkconfig, ... systemctl  
eth0 enp0s3 命名規則等
AppArmor RedHat系ではSELinux

参考:Debian 10 (buster) リリースノート (64 ビット PC 用)

server-worldさんの備忘録ページで、Debian10や、間もなく出てくるであろうCentOS8に関する記事の設定を見ると良いと思う。

iptables/fireholでNAT/IPマスカレード/ポートフォワディングしている部分をnftablesに乗り換えるところは、いずれ整理したい。 

 

Debian10 でScreenlets

[再掲] Screenletsのようなガジェットは、セキュリティリスクが多分にあって全く推奨できず、標準パッケージはもはや存在しないが、閉塞的な開発PCや仮想マシンでの限定的な用途であれば問題無いであろう、たぶん。


やり方はここと同じノリだが、やはり一筋縄でななかった。
やった後で気付いたのだが、単に、stretchのリポジトリを指定してインストールすればよかった気もするが、試していない。

apt install python-cairo python-gtk2 libwnck22 libwnck-common python-gobject-2 python-tz python-dbus python-xdg gnome-icon-theme
apt install python-gconf  ## GNOMEを使う場合は必要みたい
wget http://ftp.debian.org/debian/pool/main/g/gnome-python-desktop/python-wnck_2.32.0+dfsg-3_amd64.deb
wget http://ftp.debian.org/debian/pool/main/g/gnome-python-desktop/python-rsvg_2.32.0+dfsg-3_amd64.deb
wget http://ftp.debian.org/debian/pool/main/b/beautifulsoup/python-beautifulsoup_3.2.1-1_all.deb
sudo dpkg -i *.deb

## 必要に応じて
sudo apt --fix-broken install

## 以下、UbuntuとDebianで、ScreenletsのPythonコンテンツの対応とフォルダ構成が
## わずかに異なる。過去の資産に合わせて対応すると良い。

## Ubuntu派:screenletsをlaunchpadから入手
wget https://launchpad.net/screenlets/trunk/0.1.7/+download/screenlets-0.1.7.tar.bz2
tar xaf screenlets-0.1.7.tar.bz2
cd screenlets-0.1.7/
sudo make install  ## エラー出るけど無視

## Debian派:screenletsを http://ftp.debian.org/debian/pool/main/s/screenlets/ から入手
wget http://ftp.debian.org/debian/pool/main/s/screenlets/screenlets_0.1.2-8.1.diff.gz
wget http://ftp.debian.org/debian/pool/main/s/screenlets/screenlets_0.1.2.orig.tar.gz
gunzip -d screenlets_0.1.2-8.1.diff.gz
tar xaf screenlets_0.1.2.orig.tar.gz
cd screenlets
patch -p1 < ../screenlets_0.1.2-8.1.diff 
sudo make install  ## エラー出るけど無視

## シンボリックリンクの処置
cd /usr/share/icons
ln -s hicolor/scalable/apps/screenlets-tray.svg 
ln -s hicolor/scalable/apps/screenlets.svg 
ln -s /usr/lib/python2.7/site-packages/screenlets /usr/lib/python2.7/dist-packages/screenlets

## Screenletsのコンテンツにこれまでのコレクションを適用する場合
scp -r <Screenletsが稼働しているPC>:/usr/share/screenlets /tmp
# root権限で
mv /tmp/screenlets /usr/share
chown -R root:root /usr/share/screenlets

## Screenletsの設定を引き継ぐ場合
## Ubuntu派はSが小文字:
cd $HOME/.config/screenlets
scp -r <Screenletsが稼働しているPC>:/home/<user>/.config/screenlets/* .
## Debian派はSが大文字:
cd $HOME/.config/Screenlets
scp -r <Screenletsが稼働しているPC>:/home/<user>/.config/Screenlets/* .


Screenletsウィジェットをマウスで移動できないときの処置:
GNOME環境ではこの処置が必要だが、Cinammon, MATE, XFCE環境では不要(やってもいい)。処置する場合、インストール前のソース __init__.py またはインストール後の/usr/lib/python2.7/site-packages/screenlets/__init__.py を、ここにある内容となるように編集する。
つまり、
 NG: self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
 OK: self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_UTILITY)