chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Scratchでオリジナルの拡張ブロックを作る(リハーサルというか)

近々IoT勉強会でScratchを簡単に説明する予定。機器制御のためScratchでWebAPIを叩くのだがそのためのオリジナルブロックが必要。以前手順を理解するために一度作ったのだが、最新状況はどうなっているのかを確認。オリジナルの拡張ブロックを作るための手順を確立する(結果、Scratch3.0では前回の試作から特に変化はなかった)。
考えてみたら、ポイントとしてはWebAPIを叩ければいいので、、そんなブロックだれか作ってるのでは??とも思えるのだが。。
ちょっと調べただけだが、、WebAPIを叩くためのブロックは標準では提供されておらず、やはりソースに手を入れて(CLONEして)作らないといけないようだ。まあしょうがないか。

Wikiより引用 (ソースをクローンして、npm i でパッケージインストール。。)(linkはシンボリックリンクらしい)

$ git clone --depth 1 https://github.com/llk/scratch-vm.git
$ git clone --depth 1 https://github.com/llk/scratch-gui.git

$ cd scratch-vm
$ npm i
$ sudo npm link
$ cd ../scratch-gui
$ npm i
$ npm link scratch-vm

上記を生徒用フォルダで実施しているのだが、、/usr/local/xxxの方がいいのだろうか。
だとすると、root権限が必要になるのであった。
(linkオプション実行時はroot権限が必要になった)

DLしたソースに対して、scratch-vm, scratch-guiで拡張ブロックのためのコードを追加する(サンプルが提供されているのでまずはサンプル通りに打ち込む)。途中、typeミス等もあったが、サンプル通りの拡張ブロックまではできた。これをベースに、IoT家電制御ができるように修正する(ECHONET-LiteのWebAPIを叩くように改修)

■参考にした記事

Scratch3.0 Wiki、オリジナルブロックを作るページ(基本的にはこの手順でみんな作ってると思う)
Scratch 3.0の拡張機能を作ってみよう - Japanese Scratch-Wiki


親子でできる!Scratch と AWS を使った "ものづくり" 体験 - 1. 準備 〜 疎通確認編 - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

Scratch 3 Extension の作り方 - Qiita

Scratch 3.0でオリジナルブロックをつくろう - Qiita

Windows Updateができていないようである。。調べて対応

あまり気にしてなかったけど、どうもWindowsUpdateが正しく行えていないようである。パッチありませんと言いながら、OSが最新になっていない。

対応としては、サービススタック更新プログラム(SSU)を手動で適用するべきらしい。

アップデートでデバイスに重要なセキュリティエラー | WindowsFAQ
Microsoft Update Catalog

ダウンロード用の画面は出たが、画面が変わらないのだが。

chromeだと画面が進まなかったが、Edgeで動かすとDLできた。 DLできて、Windowsを再起動して、更新してみたがやっぱりパッチが無いと言って怒られる。どうしたものか。

RPi4にdockerを入れる、コンテナ上でNode-REDとflaskを動かす

講習会ではアプリを同一条件で統一するため、dockerを入れてその上に構築することにする。多分素で入れるより、imageを配布する方が早いだろうと予測(生徒用のRPi(何十台)で各々ビルドしていると全く早くない。教師環境でimageをビルドして配布するようにすると早いかも)。借りるRPiの環境を極力変えてしまわないようにするというのもある。まぁまたRaspbianをSDに焼いてもらったクリーンにはなるのだが。
自分の家のRPi4はUbuntuなのだが、Raspbianに同じ手順で入れられるかは要確認

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

インストール手順(docker 公式ページより)

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list 

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

パッケージ入れただけだとサービスが起動していないので使えない

$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json: dial unix /var/run/docker.sock: connect: permission denied

docker をサービスとして起動

# systemctl start docker

確認するが、一般権限では接続できず、root権限が必要。グループに追加等が必要なんだろう

$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json: dial unix /var/run/docker.sock: connect: permission denied
$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

root権限でないと接続できないが、hello-worldが動いたのでインストールはOK

$ sudo docker run hello-world
                           *略*
$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
a2416d7c6d40   hello-world   "/hello"   12 seconds ago   Exited (0) 10 seconds ago             xenodochial_nash

先日試した、Node-REDをDocker上に入れる

cd ~/lesson2109/node-red
mkdir  data
sudo chown 1000 data                      #  owner を 1000 に変更(UID問題回避)
sudo docker run -it -p 1880:1880 -v data:/data --name nodered_lesson nodered/node-red

期待したマウントになっているのを確認
(別のパラメータで起動したのでマウントのパスはちょっと違っていますが、まぁホストPCの所定の場所にマウントされている)

$ sodo docker inspect nodered_lesson

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/XXXX/lang/node-red/data_for_nodered",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

RPiでdocker-composeを動かすのが妥当か、、ちょっと分かりませんが、とりあえず入れてみる

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

ARM用のdocker-composeがリリースされていないようで、上記手順だと入らない。ビルドが必要らしい。
以下でビルドする

git clone https://github.com/docker/compose.git
cd compose
git checkout 1.25.0
./script/build/linux
cp dist/docker-compose-Linux-aarch64  /usr/local/bin/docker-compose

(情報はtkyonezu氏の記事より)

flaskをセットアップする
以下のファイル一式により、flaskの入ったimageをビルドしてコンテナを立ち上げ。imageはwebapi_on_flask(命名規則分かっておらず)としており、一度ビルドしてimageが作られると次回からはimageを優先して使う。

---------------------------
file: docker-compose.yml
---------------------------
version: '3'
services:
   web:
     build: .
     image: webapi_on_flask
     container_name: "echonet_lite_web_api"
     ports:
        - "8020:5000"
     volumes:
        - /home/staff/docker/flask/app:/usr/src/app
---------------------------

---------------------------
file: Dockerfile
---------------------------
FROM python:3.8-buster
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
CMD [ "python" , "app.py" ]
---------------------------

---------------------------
file: requirements.txt
---------------------------
flask
---------------------------

---------------------------
file:  ../app/app.py
---------------------------
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!(v2)'

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
---------------------------
sudo docker-compose up -d

コンテナの停止と開始は以下(imageのビルド、コンテナ作成は行わない)

sudo docker-compose start
sudo docker-compose stop

Raspberry Pi用docker-composeの構築 (1.25.0以降) - Qiita

IoTプログラミング勉強会に向けて準備(Node-REDインストールメモ)

Node-REDをインストールする方法として、Docker上に構築する方法と、素で入れる方法があるのだが、どっちがいいのかちと分からない。Ubuntu/Rasbian上で動かすための推奨スクリプトは以下らしい

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Raspberry Piで実行する : Node-RED日本ユーザ会

もしDocker上で動かすには以下

 docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red

Dockerで実行する : Node-RED日本ユーザ会

ちなみに、MacOSに入れた時は、node.jsをダウンロードした後、以下を実行してNODE-Redをいれた(素で入れている。だから、、実行環境を汚染しているとも言えるが・・・)

sudo npm install -g --unsafe-perm node-red

Interface 2021年 8 月号 ラズパイPico特集

8月号のInterface誌は全面Pico特集です(8月号は連載記事もお休み)。
SDKを使ったLチカやPIO(Programmable I/O)、FreeRTOS、Pico上で動作するTensorFlowも解説されています。編集部の方々が作られた、CircuitPythonによるUSB接続のキーボードという記事もあります。Picoに関していろんな人がいろんな記事を書いていて、気分がウキウキする夏祭りの賑わいでございます。
自分もMicroPython + PIOネタで記事を書きました。MicroPythonを使うと少ないコード量でPIOを簡単に制御できます。興味がありましたら見てみてください。不明な点がありましたら、コメント書いていただいたらできる範囲で回答します。

amzn.to

前回ブルースクリーンになったが、戻ってこれるのか・・・

頼まれ仕事があって、PCをフリーズさせるわけにいかないので、WindowsUpdateをずっと止めていた。当初のUpdateしない期限が切れたので再起動しろと言ってくる。前回ブルースクリーンになってえらいことになったけど、今回は戻ってこれるのだろうか。。

021-06 .NET Framework 3.5 および 4.8 の累積的な
更新プログラム (x64 向け Windows 10 Version 20H2 用) 
(KB5003254)

では一旦失礼して再起動・・
20H2は正しくパッチ適用できた。次は、21H1なのであった。

21H1は当たってるようなのだが、、

ダウンロードして更新しろと催促が出ている。

2021-06 x64 ベース システム用 Windows 10 Version 21H1 の
累積更新プログラム (KB5004476)

6/16時点での最新状態となった

シンセ教育アプリ Syntorialでシンセの音作りを学ぶ

シンセのボタンやスイッチの使い方が分かっても自分が聴きたいと思う音をどうやったら作り出せるのかが分からない。試行錯誤しても全然違う音になる。。HowTo本を少し読んだけど、説明の音にならない。。というわけで、、シンセの音作りを学ぶSyntorialというアプリがあり、これを買ってみた。
アプリは全33のコースから成っていて*1、まず機能と出てくる音についてデモがあり、デモの後は実際に音だけが再生されて、それをシンセを使って作り出す。最後に答え合わせをして、同じ音が出る正しい設定かどうか、間違っていたら間違った設定が赤く表示される。このような、、(1)機能説明とデモ->(2)音を聴く->(3)同じ音になるよう操作する->(4)答え合わせを、繰り返して、使える機能を増やして最後は、Syntorialのシンセの全機能を使って音を作れるようになるという、よく考えられたStepByStepで学ぶソフト。

コースの最初は、矩形波(Pulse波?)でdutyを変えながらどう音が変わるのか、2つのOSC(同じ矩形波)の組み合わせかた、次は、矩形波とノコギリ波、波形とエンベロープと、コースが進むにつれて機能の組み合わせが変わります。今は4番目のレッスン中(レッスン時間は4時間ぐらい)。音色を聞き分けるのは非常に難しい。
33のコースなので、全部終わるにはそれなりに時間がかかりますが、全部終えたらかなり力が付くと期待。
扱ってるのは減算方式のシンセ(と自分は理解)で、今風のシンセが持っている機能のうち、どれだけが身につくのか(今風シンセの機能に対するカバー率)は不明。だけど、、Syntorialで勉強していると、(減算方式の)シンセの基本は、OSCで生成する波形として、(矩形波、ノコギリ波、三角波)のどれを使うか、倍音にするのか、混ぜる比率はどうか、そういった事が基本中の基本で、この機能を十分に使いこなることが最重要では?と思うに至りました。だから。。。2つのOSCと、3つの波形と混ぜ方と、LPFだけで、どれだけ音のバリエーションを生み出せるのか、単純に組み合わせて音を出してみたい。手でやると大変なので、、CircutPythonでMIDI信号を生成して、Spireを自動演奏させて、パラメータを5次元ぐらいでループを回すと。。スクリプトを使うことで単純作業が秒単位で正確に実施できるので助かる。

■ご参考URL
SyntorialのWebページ、お試しレッスンは無料(ツールを使ってどんな風に勉強するのかが分かる)
https://www.syntorial.com/

*1:カタログには、129 CHALLENGES、147 VIDEOSとあります。これだけ見てもまぁ、教材の充実っぷりは分かるかと。音の違いは実に微妙なので、全てを習得できるかどうかは分かりません。ちなみに、全部英語なので、自分は細かい説明は聞き取れません。オッシレータ1は矩形波で、、ぐらいは分かりまますが、、追加説明や注意点が分からない