Debian/Ubuntuでawkを切り替える

Debian等でのインストール直後のawkは mawk が導入されます.
Debianのパッケージでは他にGNU awk(パッケージ名 gawk ), The One True Awk(パッケージ名 original-awk )というものもあります.*BSDなどでよく見る nawk もあるように見えますが,シンボリックリンクだけのようです.
(他にもあるかもしれない?)

mawk は初期状態で入っていて軽量.GNU awk はmawkに比べて多機能で既定値では導入されませんが, byobu などが依存を求めるので入っている人も多いと思います.

複数のawkパッケージが導入されているときに awk と実行したときは update-alternatives で管理されたシンボリックリンク先のいずれかのawkが実行されます.これを切り替えてみます.

cpu情報を表示するcpufetch

cpufetchというscreenfetchインスパイアな感じのcpu情報表示ツールを見かけたので試してみました.

$ git clone https://github.com/Dr-Noob/cpufetch
$ cd cpufetch
$ make
$ ./cpufetch -s retro

                               ################
                       #######                #######
                  ####                              ####
              ###                                     ####    Name:              Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
         ###                                             ###  Microarchitecture: Ivy Bridge
         ###                                             ###  Technology:        22nm
      #                    ###                ###        ###  Max Frequency:     3.300 GHz
    ##   ###   #########   ######   ######    ###        ###  Cores:             2 cores (4 threads)
   ##    ###   ###    ###  ###    ####  ####  ###        ###  AVX:               AVX
  ##     ###   ###    ###  ###    ###    ###  ###       ###   FMA:               No
 ##      ###   ###    ###  ###    ##########  ###     ####    L1i Size:          32KB (64KB Total)
 ##      ###   ###    ###  ###    ###         ###   #####     L1d Size:          32KB (64KB Total)
 ##       ##   ###    ###   #####  #########   ##  ###        L2 Size:           256KB (512KB Total)
 ###                                                          L3 Size:           3MB
  ###                                                         Peak Performance:  52.80 GFLOP/s
  ####                                        ####
    #####                               ##########
      ##########               ################
          ###############################

標準のスタイルでテキストで貼り付けると真っ白になるので retro です.通常の実行結果は以下に.

続きを読む

コマンドライン標準入力からあいまい検索が出来る「pick」

コマンドラインの標準入力をあいまい検索してその結果を主治力出来るpickというコマンドを知ったので試してみました.

たくさんの環境パッケージがあります.今回はDebian sid amd64とRaspberry Pi OS buster armhfで pick パッケージを導入しました.

$ sudo apt install pick (1)
$ ls ~/Downloads/*.pdf | wc -l (2)
181
$ ls ~/Downloads/*.pdf | pick | xargs -I{} xpdf "{}" (3)
rpi (4)
/home/matoken/Downloads/rpi_DATA_CM_3p0.pdf
/home/matoken/Downloads/rpi_MECH_3b_1p2.pdf
/home/matoken/Downloads/RPi-Camera-User-Manual.pdf
/home/matoken/Downloads/rpi_SCH_3b_1p2_reduced.pdf
/home/matoken/Downloads/rpi_SCH_4b_4p0_reduced.pdf
/home/matoken/Downloads/rpi_SCH_ZeroW_1p1_reduced.pdf
/home/matoken/Downloads/RPi_Pi Pico_Digital Edition.pdf
  1. pick パッケージ導入
  2. pdfファイルがたくさんある
  3. lsの結果をpickを挟んでxpdfに渡す
  4. 「rpi」とキーワードを入力することで絞り込まれる

pick 01

上下カーソル入力で結果を選択,Enterで確定.確定された行はSTDOUTに出力され,今回の例では xpdf で開かれる.

コマンド結果が多くて grep を繋いでいくみたいなときに pick を使うとインタラクティブに絞り込まれたりしてわかりやすいです.

似たものに sysboxchoose-stdin というものもあります.

環境1
$ dpkg-query -W pick
pick    2.0.2-1.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
環境2
$ dpkg-query -W pick
pick    2.0.2-1
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ uname -m
armv7l
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

盆栽楽しい

cbonsai

盆栽が表示できるアプリです.

sourceとx86_64用の.debがあります.armhf環境でsourceからbuildしてみました.

$ sudo apt install libncurses-dev build-essential
$ git clone https://gitlab.com/jallbrit/cbonsai
$ cd cbonsai
$ make
$ install ./cbonsai ~/bin/

いくつかの実行例です.

$ cbonsai (1)
$ cbonsai -p (2)
$ cbonsai -l (3)
$ cbonsai -l -t 0.01 (4)
$ cbonsai -c '<>' (5)
$ cbonsai -m "hello BONSAI" (6)
$ cbonsai -i -w1 (7)
  1. 盆栽を表示(なにかキー入力で終了)
  2. 盆栽をプリントして終了
  3. ライブモード
  4. ライブモードで速度を1/3に(既定値0.03で単位は秒)
  5. 葉っぱを変更
  6. メッセージを表示(マルチバイト文字は不可)
  7. 無限に表示,間隔を1秒間隔に(既定値は4.00秒)

楽しいです🌳

ログイン時に盆栽とfortuneのメッセージを表示したいときはこんな感じで.

$ echo 'cbonsai -p -m "`fortune`"' >> ~/.profile

環境
$ git log -1
commit 15e19580ddc58741291386000076928b2e591ef2 (HEAD -> master, origin/master, origin/HEAD)
Author: John A <jallbritten6@gmail.com>
Date:   Thu Mar 4 10:37:32 2021 -0500

    Update install instructions and add bashrc notice

$ dpkg-query -W libncurses-dev build-essential
build-essential 12.6
libncurses-dev:armhf    6.1+20181013-2+deb10u2
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ arch
armv7l
$ cat /proc/device-tree/model && echo
Raspberry Pi 3 Model B Rev 1.2

いくつかの”sl”コマンドを試す

ノーマル?sl

なんとなくジョークプログラムのslを導入しました.

$ sudo apt install sl

sl pkg

しかし物足りません🤔

Izumiさん改造版

昔はSunOS上でとても長い編成だったり通り過ぎて遮断器が上がったかと思うとまた下がって折り返したりするpatchを当てていました.探してみると恐らくこちらのもの.

しかしpatchがリンク切れ.Wayback Machineにも見つかりません.

検索するとこちらのページを発見.patch適用済のものをGitHubにアップロードされています.こちらを試してみました.

$ sudo apt build-dep sl (1)
$ git clone https://github.com/gmkou/sl (2)
$ cd sl
$ make (3)
$ install ./sl ~/bin/ (4)
$ which sl (5)
/home/matoken/bin/sl
$ sl
  1. slのビルドに必要なパッケージを導入
  2. sourceをclone
  3. make
  4. 適当な場所にインストール
  5. slのパスを確認

sl long

30両くらいのなが〜いslも出現するようになりました😻これでlsのTypo矯正が捗る……かもしれません.

ミラー版sl

こちらのslはミラーバージョンでlsの結果を反転させて表示します.これも楽しい

$ /tmp/sl -l
04                                                         latot
dm.ETALPMET_EUSSI 70:60 2  raM 044  nekotam nekotam 1 --r--r-wr-
elifekaM          70:60 2  raM 868  nekotam nekotam 1 --r--r-wr-
dm.EMDAER         70:60 2  raM 0351 nekotam nekotam 1 --r--r-wr-
itg               70:60 2  raM 0079 nekotam nekotam 1 x-rx-rxwr-
6.itg             70:60 2  raM 8001 nekotam nekotam 1 --r--r-wr-
c.itg             70:60 2  raM 2258 nekotam nekotam 1 --r--r-wr-
$ ls -l
total 40
-rw-r--r-- 1 matoken matoken  440 Mar  2 06:07 ISSUE_TEMPLATE.md
-rw-r--r-- 1 matoken matoken  868 Mar  2 06:07 Makefile
-rw-r--r-- 1 matoken matoken 1530 Mar  2 06:07 README.md
-rwxr-xr-x 1 matoken matoken 9700 Mar  2 06:07 gti
-rw-r--r-- 1 matoken matoken 1008 Mar  2 06:07 gti.6
-rw-r--r-- 1 matoken matoken 8522 Mar  2 06:07 gti.c

おまけ)gti

そういえばslインスパイアなgitに対するgtiというものもあります.これはgitと打とうとしてgtiと入力してしまったとき車が走っていきます🚗

楽しいですね.

$ git clone https://github.com/rwos/gti
$ cd gti
$ make
$ install ./gti ~/bin/
$ gti

sl gti

環境

$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ uname -a
Linux raspberrypi 5.10.11-v7+ #1399 SMP Thu Jan 28 12:06:05 GMT 2021 armv7l GNU/Linux
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

GitHub.comのリポジトリの特定のディレクトリ以下をダウンロードできる「GitHub clone」

大きなGitリポジトリをcloneすると時間がかかります.最新のものだけが欲しい場合は --depth オプションがありますが,リポジトリの一部のディレクトリ以下だけが欲しい時には使えません.そういうときにGitHub cloneを使うと,特定のディレクトリ以下だけをダウンロードできて便利そうです.

少し試してみました.

$ pip3 install git+git://github.com/HR/github-clone#egg=ghclone (1)
$ ghclone (2)
Usage:
  ghclone <url> [-t | --token=<token>]
  ghclone (-h | --help)
  ghclone (-v | --version)
$ ghclone https://github.com/torvalds/linux/tree/master/tools/usb/usbip (3)
Cloning into 'usbip'...
done.
$ cd usbip
$ ls -A (4)
.gitignore  AUTHORS  COPYING  INSTALL  Makefile.am  README  autogen.sh  cleanup.sh  configure.ac  doc  libsrc  src  vudc
$ git status (5)
fatal: not a git repository (or any of the parent directories): .git
$ cd ..
$ ghclone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/usb (6)
Invalid GitHub URI
  1. pipで導入する(もしPATHが通ってなければ ~/.local/bin を加える)
  2. USAGE
  3. Linux Kernelの一部だけをダウンロード
  4. ダウンロード内容確認
  5. Git管理はされていない
  6. GitHub以外のGitリポジトリに対して実行すると失敗する

GitHub.comのAPIを利用しているのでGitHub.com以外では使えませんが便利そうです.

似たものにBitBacketで同様のことができる,「bb-clone」というものもあるようです.

環境
$ ghclone -v
1.2.0
$ dpkg-query -W git python3-pip python3
git     1:2.20.1-2+deb10u3
python3 3.7.3-1
python3-pip     18.1-5+rpt1
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ uname -a
Linux raspberrypi 5.10.11-v7+ #1399 SMP Thu Jan 28 12:06:05 GMT 2021 armv7l GNU/Linux
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

センサーのログをNextcloudのSensorloggerで記録してみる

この記事は 日本Androidの会秋葉原支部ロボット部 Advent Calendar 2020 の20日分の記事です.
日本Androidの会秋葉原支部ロボット部は現在月に一回勉強会を行い様々な話題で盛り上がっています.
次の勉強会はちょうど今日(20日)です.興味のある方は覗いてみてください.

センサーのログなどをアップロードするのに色々なwebサービスを使ったり,Googleスプレッドシートに書いたりしています.
便利なんだけどロックインになるのは嫌だなって思ったりします.

Nextcloudというファイル共有サービス+αなOSSがあります.アプリケーションを追加して機能を増やすことが出来ます.例えばテレビ電話や,オンラインオフィスとか,マップサービスとか様々なアプリがあります.
これを個人的に立てて便利に使っています

この中のアプリを眺めているとSensorloggerというセンサーのログを保存できそうなものを見つけたので試してみました.

まずNextcloudですが,とりあえず試すだけならsnapを利用するのがお手軽です.Raspberry Pi + Raspberry Pi OSなどでもOKです.

Debian sid amd64/Ubuntu 20.04 LTS/Raspberry Pi OS armhfでは以下の手順でOKでした.

$ sudo apt update && sudo apt upgrade   (1)
$ sudo apt install snapd    (2)
$ sudo snap install nextcloud   (3)
  1. システムのパッケージを最新にする
  2. snapを使えるように snapd パッケージを導入
  3. snapでnextcloudを導入

10分位待つと導入が終わります.ウェブブラウザにIPアドレスを入力するとセットアップ画面が表示されるので管理者ID/PASSWORDを設定します.

これでとりあえず使えるようになったと思います.

この後Sensorloggerを導入します.
管理者権限のアカウントでNextcloudの右上のメニューから「アプリ」を開きます.

20201219 20:12:45 2014278

次に上の検索バーに「Sensorlogger」とかの文字列で検索して「有効」ボタンを押して導入します.

20201219 20:12:42 2017785

Tip
Nextcloudのアプリケーションはコマンドラインから導入することも出来ます.
$ sudo -u www-data occ app:install sensorlogger #通常導入した場合
$ sudo /snap/bin/nextcloud.occ app:install sensorlogger #snapで導入した場合

ここからは一般ユーザでOKです.

Nextcloudの上部から「Sensorlogger」のアイコンをクリックするとSensorloggerの画面が表示されます.

20201219 20:12:03 2021911

はじめはデータがないのでまっさらです.「Device」辺りでデバイスの登録をするのかな?と思いましたが出来ません.
「Read SensorLogger Wiki Devices」と書かれているのでWikiを参照してみます.

データを送ると自動的にデバイスが出来るようです.Simple, Complexの2種類のデータタイプがあるようです.Simpleは温度,湿度のようでとりあえずこれを試してみます.

以下の辺りから post.php を持ってきて使います.このscriptはダミーのランダムな温度と湿度データを作ってSensourloggerにデータを投げます.

何箇所か書き換えます.
* $url = ` を自分のNextcloudのURLに変更します.
* `$array = array("deviceId" ⇒
uuidgen コマンドなどで生成したUUIDに変更します.
* $username = をNextcloudの自分のユーザーに変更します.
* $token = に「設定」「セキュリティ」ページの「デバイスとセッション」の一番下の「新しいアプリパスワードを作成」で作成したトークンに修正します.

そしてphpとphp-curlが必要なので導入します.

Debian sid amd64/Ubuntu 20.04 LTS/Raspberry Pi OS armhfでの例
$ sudo apt install php-cli php-curl

この状態で post.php を実行して成功すると以下のようなメッセージが帰ってきます.

$ php ./post.php
{"success":true,"message":"Sensor Log successfully stored","data":null}

Sensorloggerのページの List を見るとエータがアップロードされているのが解ります :)

手動で実行するのは大変なのでcrontabにこんな感じで登録してみます.5分に一回データを送信します.

$ crontab -e (1)
$ crontab -l | grep post.php (2)
*/5 * * * *     php ~/tmp/post.php 2&>1 > ~/tmp/post.php.log
  1. crontabの編集
  2. crontabに登録されたか確認

同様にRaspberry Piの温度も送ってみます.温度の $temperature を以下のような感じで書き換えて,UUIDも書き換えるとOK.これもcrontabに登録します.

    $temperature = system( '/opt/vc/bin/vcgencmd measure_temp | awk -F "[=\']" \'{print $2 }\' | tr -d \'\n\'' );

しばらく動かしてからダッシュボードを設定するとこんな感じのチャートが表示できました.

20201219 20:12:13 2035392

密集してよくわからない部分はマウスドラッグで矩形選択するとその部分がズームされます.

20201219 22:12:30 2180945

という感じでとりあえず動きました.ドキュメントが未だ充実していな買ったり使い勝手も悪いですが最低限の機能はあるかなという感じです.
興味があったら試してみてください.
若しくはおすすめのアプリやサービスを教えてください.