何時になったら梅雨があけるのでしょうか・・。

なかなか梅雨が明けないどころか、日本では球磨川地域での悲惨な洪水被害、中国でも長江流域でかなりの洪水が起こっているようです。(あまり報道されませんが)

で、気象庁のページの過去の天気図を順に見てみます。

4月中旬くらいから断続的に中国南部に前線(梅雨前線でしょう)がかかるようになります。5月中旬からはよりはっきりと前線が停滞し始めます。 6月になると、中国南部には前線が停滞したままです。7月になってもずーっと停滞したままです。天気図もなんか固定パターン化されてしまっている感じで、梅雨が開ける気配がないですね・・。このままだと1993年みたいに米不足に陥ったりするのかも。

また、観測史上初、7月に台風の発生がない年になりそうだ、というニュースもみかけました。確かに、フィリピンに近いところまで太平洋高気圧の圏内にあるように見えます。ですので、通常この地域で発生する台風が発生しにくい条件になっているのかも?

中華マイクを買ってみた

Zoomなどを使う機会が増えて、ガサゴソした音や息がかかった際の音がしないマイクが欲しいと思い、AmazonやAliexpressを散策していたのですが、手頃なサイズで黒いスポンジ(息がかかってもその音が入りにくい)がついたマイクで手頃なものが意外に少なく、最終的にAliexpressで価格もお手頃なBM-800というマイクを買いました。

で、実物が届いたのですが・・・・でかい。Zoomにちょっと使うサイズじゃない。

で、いろいろ調べるとこのマイク、改造ネタが転がっているマイクでしたw。有名と思われる改造記事はこちらの記事から始まる一連の記事のようです。

その次の記事の写真と、購入したマイクでは基板が異なり、回路自体も若干変わっているように見えます。もっと検索すると同じ基板を解析していると思われる方がいました

ノイズの根源とされるツェナーダイオードも健在のようです。
・・・が、今回はPC直結でプラグインパワーで使用するので、このツェナーダイオード(D1)が動作する9Vには到達しません。ですので、このまま放置します。
まあ、所詮、Zoomでのオンライン会議用なので、電気的な面ではあまり音質にこだわる必要はありません。

また、こちらの記事では、差動伝送時の位相が逆であることを問題とされていますが、パターン上に逆相にするためのパターンが用意されています。(もっとも、FETのバッファをソースフォロアに変更すると位相が逆転するはずなので、そちらをやるなら要らないと思いますが)

で、PCに繋いで、Audacityで録音してみると・・・

となぜかDCオフセットがあります。ケーブル自体をチェックすると、こちらの記事にある「なんじゃこりゃケーブル」と同じ結線なので、LとRはショートされていて差があるのはおかしいのですが・・・?!?
PC側でオフセットが乗っているんでしょうかね。

LinuxMint19.3にMinicondaをインストール

故あって、LinuxMint19.3にMinicondaをインストールしました。

https://conda.io/projects/conda/en/latest/user-guide/install/linux.html
を参考にしてインストールします。

https://docs.conda.io/en/latest/miniconda.html
からPython3.7のMiniconda3 Linux 64-bit installerをダウンロードして、sha256を確認して起動します。

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ sha256sum Miniconda3-latest-Linux-x86_64.sh 
957d2f0f0701c3d1335e3b39f235d197837ad69a944fa6f5d8ad2c686b69df3b Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh

(2)ライセンスの合意

Welcome to Miniconda3 4.8.2

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>

ENTERを入力します。

===================================
End User License Agreement - Anaconda Individual Edition
===================================

Copyright 2015-2020, Anaconda, Inc.
:
:
Last updated February 25, 2020

Do you accept the license terms? [yes|no]
[no] >>> yes

ライセンスを確認してyesを入力します。

Miniconda3 will now be installed into this location:
/home/xxxx/miniconda3

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below

[/home/xxxx/miniconda3] >>> 
PREFIX=/home/xxxx/miniconda3

インストール先(標準では $HOME/miniconda3)を入力

Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>>

環境設定を勝手にやるか?ということみたいですが、yesのほうが良かったかも。

noを選んだら、手作業で、

xxxx@hostname:~/miniconda$ eval "$(/home/xxxx/miniconda3/bin/conda shell.bash hook)" 
(base) xxxx@hostname:~/miniconda$ conda init
no change     /home/xxxx/miniconda3/condabin/conda
no change     /home/xxxx/miniconda3/bin/conda
no change     /home/xxxx/miniconda3/bin/conda-env
no change     /home/xxxx/miniconda3/bin/activate
no change     /home/xxxx/miniconda3/bin/deactivate
no change     /home/xxxx/miniconda3/etc/profile.d/conda.sh
no change     /home/xxxx/miniconda3/etc/fish/conf.d/conda.fish
no change     /home/xxxx/miniconda3/shell/condabin/Conda.psm1
no change     /home/xxxx/miniconda3/shell/condabin/conda-hook.ps1
no change     /home/xxxx/miniconda3/lib/python3.7/site-packages/xontrib/conda.xsh
no change     /home/xxxx/miniconda3/etc/profile.d/conda.csh
modified      /home/xxxx/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

とする必要があります。

もとに戻す場合、

$ conda config --set auto_activate_base false

もとに戻しても、 新しいシェルでは conda コマンドは使えるみたい。

仮想環境を作る前に、miniconda の環境をアップデートしておきます。

$ conda update -n base -c defaults conda

仮想環境を作ってみます。

$ conda create -n sample

仮想環境をアクティベーションします。

$ conda activate sample

モジュールのインストールはこんな感じです。

$ conda install xlrd

minicondaのチートシートはここにありますので参考になるかも。

MicroServerにOpenMediaVaultをインストール(2)

4.ディスクのマウントと共有の作成

(1)「ストレージ」→「ファイルシステム」で、作成したRAIDボリュームをマウントして共有できるようにします。
(2)「アクセス権の管理」→「共有フォルダ」で、RAID領域の下に共有領域を作ります。このときに適当にその領域の共有名を付けます。
(3)「アクセス権の管理」→「ユーザ」で、Windowsファイル共有のユーザーを登録します。ここでユーザーを選んで「特権」をクリックすると共有ごとのアクセス権限を設定できるようです。
(4)「サービス」→「SMB/CIFS」で、まず「一般設定」で機能を有効化、ワークグループ名を適当に付けます。その後、「共有」で「+追加」をクリックして、共有されるフォルダを登録します。共有フォルダは先程作った共有名で指定します。

5.旧サーバから新サーバへのデータのコピー

自分はすべてのファイルにアクセス権があるので、Windows上でROBOCOPYでコピーすることにしました。

robocopy /copy:DT \\旧サーバ\共有名 \\新サーバ\共有名 /MIR /R:3 /W:5

でミラーリングします。

NanoPi NEO2にOpenMediaVaultをインストール

今度は、NanoPi NEO2にArmbian+OpenMediaVaultをインストールします。

1.Armbianのインストール

イメージはArmbianのNanoPi NEO2のページからArmbian Busterのイメージをダウンロードしてきました。これをMicroSDにディスクイメージライタで書き込んで、NanoPi NEO2にセットします。

電源投入して少し待ったら、SSHで接続します。ユーザー名はroot、初期パスワードは1234です。接続したら、rootパスワードの変更とユーザーの作成を聞いてきますので、適当に設定します。

一度ログアウトしてログインし直してから、apt-get update & apt-get upgrade をかけます。理由がよくわかりませんが、異常に時間がかかりました。、

再起動したら、再度 armbian-config を起動して、タイムゾーンをAsia/Tokyoにセット、ロケールにja_JP.UTF-8を追加、デフォルトロケールはen_US.UTF-8にセット、ホストネームを適当にセットして、一旦リブートします。

2.ArmbianのルートファイルシステムをHDDに移動

MicroSDだといつかブッ飛ぶので、ルートファイルシステムをHDDに移動します。

まず、fdiskでHDDのパーティションを作成します。

今回は30GBをルートパーティション、4GBをスワップ、残りをデータ領域にすることにしました。

Device        Start      End  Sectors Size Type
/dev/sda1      2048 62916607 62914560  30G Linux root (ARM-64)
/dev/sda2  62916608 71305215  8388608   4G Linux swap

フォーマットしておきます。

$ sudo mkfs.ext4 /dev/sda1
$ sudo mkswap /dev/sda2

次にルートファイルシステムをUSB-HDDに移動します。

$ sudo armbian-config

でarmbian-configを起動、systemメニューを選択して「Install」を選択して「1 Boot from SD – system on SATA, USB or NVMe」でUSB-HDDに /dev/sda1 にシステムを移動します。

移動が完了すると、再起動を勧められるので、再起動します。

3.OpenMediaVaultをインストール

$ sudo armbian-config

でarmbian-configを起動、softwareメニューを選択、Softy を選択して 3rd party のソフトウェアをインストールします。

ソフトウェアの一覧の中に「OMV」があるので、これにチェックマークをつけて、インストールします。(かなり時間がかかります)

4.OpenMediaVaultにログイン

完了したらブラウザでOpenMediaVaultにログインします。avahiが動いているので、http://(ホスト名).local でアクセスできます。ユーザー名は admin 、パスワードは openmediavault です。ログインしたら、以下の作業を行います。

(1)パスワードの変更とネットワーク設定を行います。
(2)sshでログインして、fdiskでHDDの空き領域をLinuxのファイルシステム領域にして、ext4でフォーマットしておきます。(OpenMediaVaultでできるかと思ったけど、できなそう)
加えて、e2labelコマンドでラベルを付けておきます。

$ sudo mkfs.ext4 /dev/sda3
$ sudo e2label /dev/sda3 mirror

(2)「ストレージ」→「ファイルシステム」で、/dev/sda3 をマウントして共有できるようにします。
(3)「アクセス権の管理」→「共有フォルダ」で、/dev/sda3 の下に共有領域を作ります。このときに適当にその領域の共有名を付けます。
(4)「アクセス権の管理」→「ユーザ」で、Windowsファイル共有のユーザーを登録します。
(5)「サービス」→「SMB/CIFS」で、まず「一般設定」で機能を有効化、ワークグループ名を適当に付けます。その後、「共有」で「+追加」をクリックして、共有されるフォルダを登録します。共有フォルダは先程作った共有名で指定します。

PINE64にOpenMediaVaultをインストール

ちょっと脱線してOpenMediaVaultのドキュメントを見ていると、Armbian Busterの場合には、armbian-configからインストールができるようなことが書いてあるので試してみました。

今回のターゲットはArmbian Busterをインストールしたまま放置していたPine64(1GB)です。ここにUSB接続で先程取り外した2TB HDDのうちの1台を取り付けました。

1.USB-HDDにパーティションを作成

今回は50GBをルートパーティション、4GBをスワップ、残りをデータ領域にすることにしました。

Device     Boot     Start        End    Sectors  Size Id Type
/dev/sda1            2048  104859647  104857600   50G 83 Linux
/dev/sda2       104859648  113248255    8388608    4G 82 Linux swap / Solaris
/dev/sda3       113248256 3907029167 3793780912  1.8T 83 Linux

sda3は

$ sudo mke2fs -t ext4 /dev/sda3

でフォーマットしておきます。

2.ルートファイルシステムをUSB-HDDに移動

$ sudo armbian-config

でarmbian-configを起動、systemメニューを選択して「Install」を選択して「1 Boot from SD – system on SATA, USB or NVMe」でUSB-HDDに /dev/sda1 にシステムを移動します。

移動が完了すると、再起動を勧められるので、再起動します。

3.OpenMediaVaultをインストール

$ sudo armbian-config

でarmbian-configを起動、softwareメニューを選択、Softy を選択して 3rd party のソフトウェアをインストールします。

ソフトウェアの一覧の中に「OMV」があるので、これにチェックマークをつけて、インストールします。(かなり時間がかかります)

4.OpenMediaVaultにログイン

完了したらブラウザでOpenMediaVaultにログインします。avahiが動いているので、http://(ホスト名).local でアクセスできます。ユーザー名は admin 、パスワードは openmediavault です。ログインしたら、以下の作業を行います。

(1)パスワードの変更とネットワーク設定を行います。ネットワークは設定前に再起動すると無効に設定されてしまうようなので、コンソールからしか直せなくなります。
(2)「ストレージ」→「ファイルシステム」で、/dev/sda3 をマウントして共有できるようにします。
(3)「アクセス権の管理」→「共有フォルダ」で、/dev/sda3 の下に共有領域を作ります。このときに適当にその領域の共有名を付けます。
(4)「アクセス権の管理」→「ユーザ」で、Windowsファイル共有のユーザーを登録します。
(5)「サービス」→「SMB/CIFS」で、まず「一般設定」でワークグループ名を設定して機能を有効化、ワークグループ名を適当に付けます。その後、「共有」で「+追加」をクリックして、共有されるフォルダを登録します。共有フォルダは先程作った共有名で指定します。

これで、Linux上からはWindowsファイル共有として見えるようになりました。後ほど、Windowsから実際に見えるか試してみたいと思います。

まとめ

ほぼ同じ手順で、NanoPi NEO2 NASキットもOpenMediaVault化できると思います。FriendlyElecで配布しているNASキットのイメージ(OpenMediaVaultのイメージ)では、ルートファイルシステムをMicroSDに取っているからか、あるいは、ベースとなっているArmbianに何か問題があるのかわかりませんが、長期間運用するとMicroSD上のシステムが破損するという傾向がありました。(過去2年で3回)
そのため、3台あるNASキットのうちの1台はHDDにルートファイルシステムをインストールして、手作業でSambaの設定を行って運用してきました。他の2台はFreeNASのコピーを保持しているだけ(夏場に高温だろうが雷がなりまくろうがデータ参照できるように電源を入れっぱなしにするのが目的)なので、放置していました。
今回の方法であれば、ArmbianやOpenMediaVaultなどのBugFixも取り込めますし、ルートファイルシステムもHDD上にあるのでMicroSDの破損の心配もありません。

MicroServerにOpenMediaVaultをインストール(1)

昔HPのMicroServerを購入して長くFreeNASで運用してきました。途中、単身赴任していた時期に単身赴任先にも設置していた関係でMicroServerは2台導入していて、1台をマスターとしてZFSで3TB HDD×2台のミラー構成、もう1台をスレーブとして、ZFSでお古の2TB HDD×4台でRAID10相当の構成で運用して、rsyncでマスターからスレーブに同期してバックアップという運用をしてきました。(何重にバックアップとってんだw)

で、起動に使用しているUSBメモリが死んでしまったのか、このスレーブ側がまともに立ち上がらなくなってしまったので、これを気にSTAY HOMEな2020年ゴールデンウィークに再整備して、こちらをマスター側に、それが完了したら、元のマスター側をスレーブ側にすることにします。

メモリは8GBとはいえ、さすがにCPUが古いので、今回は負荷がかかると言われるFreeNASではなく、OpenMediaVaultで構築することにしました。

HDDは4TB×2台、本来ならNAS用を入れたいところですが、どうせ24/365運用ではなく週末しか起動していないので、安価に済ませるためにWDとSeagateの安い4TBを2台調達しました。(どうせしつこいくらいバックアップとってるわけですから)

1.Debianのインストール

OpenMediaVaultはDebian上にインストールしますので、まずDebianを入れます。
まずは、古い2TBのHDDを4本とも撤去し、溜まったホコリを掃除しました。その後、システムドライブとして、ほとんど使っていないまま放置していたWD Black 500GBを取り付けました。まだ、4TB×2は取り付けていません。

まずは、amd64用のnetinst.isoをこちらからダウンロードしてきて、Linux上のディスクイメージライタでUSBメモリに書き込みます。

書き込んだUSBメモリを取り付けて電源ONすると、確かインストーラの選択画面が出ます。とにかく最小限でインストールせよ、というのがOpenMediaVaultのドキュメントに記載があるので、TUIのインストーラでインストールを行いました。

(1)言語の選択で日本語を選択
(2)場所の選択で日本を選択
(3)キーボードの設定で日本語を選択
(4)ホスト名で「server1」を設定
(5)ドメイン名を適当に設定
(6)rootのパスワードを設定
(7)ユーザを作成(本名、アカウント名、パスワードを入力)
(8)パーティショニングの設定
ディスク全体を使用して、以下の通り分割。ガイドだとルートパーティションが30GBになったので、これを倍のサイズにしました。スワップはガイドの通り。
領域1 基本 60 GB ext4 /
領域5 論理 8.6 GB スワップ
領域6 論理 431.5 GB ext4 /home

以上を設定するとベースシステムのインストールが行われます。

(9)アーカイブミラーの選択
自分は ftp.riken.jp を設定しました。
(10)プロキシの設定
(11)インストールするソフトウェアパッケージの選択
デスクトップ環境とプリンタサーバを外して、SSHサーバと標準システムユーティリティを選択して次へ進みます。

(12)GRUBブートローダのインストール

でインストール完了。USBメモリを抜いて次へ進む

2.OpenMediaVaultのインストール

こちらの指示に従ってインストールします。

まず、コンソールからログインして、 ip addr コマンドでIPアドレスを確認、別のPCから作成したアカウントを使ってSSHでリモートログインします。su コマンドでルートになってから以下の作業をします。

apt-get install --yes gnupg
wget -O "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc" https://packages.openmediavault.org/public/archive.key
apt-key add "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc"

リポジトリを追加します

cat <<EOF >> /etc/apt/sources.list.d/openmediavault.list
deb https://packages.openmediavault.org/public usul main
# deb https://downloads.sourceforge.net/project/openmediavault/packages usul main
## Uncomment the following line to add software from the proposed repository.
# deb https://packages.openmediavault.org/public usul-proposed main
# deb https://downloads.sourceforge.net/project/openmediavault/packages usul-proposed main
## This software is not part of OpenMediaVault, but is offered by third-party
## developers as a service to OpenMediaVault users.
# deb https://packages.openmediavault.org/public usul partner
# deb https://downloads.sourceforge.net/project/openmediavault/packages usul partner
EOF

インストールします

export LANG=C.UTF-8
export DEBIAN_FRONTEND=noninteractive
export APT_LISTCHANGES_FRONTEND=none
wget -O "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc" https://packages.openmediavault.org/public/archive.key
apt-key add "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc"
apt-get update
apt-get --yes --auto-remove --show-upgraded \
    --allow-downgrades --allow-change-held-packages \
    --no-install-recommends \
    --option Dpkg::Options::="--force-confdef" \
    --option DPkg::Options::="--force-confold" \
    install openmediavault-keyring openmediavault

omv-confdbadm populate

3.ログイン

しばらくするとインストールが完了します。途中で avahi もインストールされるので、ブラウザで http://server1.local にアクセスすると、OpenMediaVaultのログイン画面に到達できます。

デフォルトのパスワードはこちらに書いてありますが、ユーザー名 admin、パスワード openmediavault です。最初に管理者パスワードを設定する必要があります。また、ネットワークの設定もやりおなします。どうも、再起動か何かのタイミングで無効に設定されるようです。(無効になるタイミングがよくわかりません)

また、OpenMediaVaultをインストールすると以下の変更がされていますので、適宜設定が必要です。

  • root での ssh ログインが許可されています
  • ホスト名がopenmediavaultに変更されています

インストールは無事に完了したので、一旦シャットダウンして、4TBのディスク2台を取り付けて、再度起動します。

起動したら、ディスクを認識していることを確認したら、SMARTの設定をスタンバイに設定変更して、RAIDデバイス作成を行います。

今回はミラーで設定します。対象ディスク2台を選択して適用するとしばらく時間がかかります。RAID管理で状態を見ると、resyncingが少しづつ増えていって、6時間強かかることがわかります。

博物館等の無料バーチャルツアー

新型コロナでみんな籠もってる状況ですが、博物館等で無料バーチャルツアーが流行っている模様。

なかなか(つーか、まず無理)行けない海外の博物館を画面を通してとはいえじっくり眺められるのは嬉しいところ。GWにゆっくりみたいので、とりあえずメモ。

無料で世界中の美術館を楽しみ尽くせる「バーチャルミュージアム」が公開中(GIGAZINE)

無料&オンラインで収蔵品を鑑賞できる超著名な海外美術館・博物館まとめ(GIGAZINE)

無料でエジプトの古代遺跡の中に入って回れる3Dバーチャルツアーが公開中(livedoor NEWS)

Minicondaを使ってみる

これまで、Pythonの環境構築はPythonを単体でインストールして、venvで仮想環境を作って、pyinstaller(exe化する場合)をインストールして・・・とやってきました。

機械学習にPythonを使う場合にはAnacondaという管理ツールが便利だ、という話はよく目にするのですが、なにせ巨大でpyinstallerでexe化するとできたexeも巨大になってしまう、ということで避けてきました。

ところがふとしたことから、Minicondaという最小パッケージのものがあるというのを目にして、それでやってみることにしました。今回はWindowsでやってみます。(インストーラはWindows,Mac,Linux版などがあるようです)

1.Minicondaのインストール

Condaの公式サイトMinicondaのページからインストーラをダウンロードします。まだexeを使用する先に32bitが残っているので最終的には32bit環境を使いたいのですが、まずは64bit版をダウンロードします。

ダウンロードしたインストーラをダブルクリックして、起動します。
途中で、インストール先を聞いてくるので、後で32bit版を入れるときにはここでインストール先を変更すればよいのかもしれません。

インストールを終わると、Webサイトを開くか聞いてきますが、これで開くとAnaconda Cloudのアカウント作成について聞いてきます。

2.起動

スタートメニューに Anaconda(miniconda)ができていました。

コマンドプロンプトとPowershellと2つできています。GIMPは別にインストールしたものです。

今回は下の通常の(?)コマンドプロンプトの方をクリックして起動します。
起動したら、Pythonのバージョン確認、condaのバージョン確認、作成済みの仮想環境(この場合は、デフォルトの環境)の表示をしてみます。

仮想環境を作る前に、condaのアップデートをしておきます。

(base) C:\Users\xxxxx>conda update -n base -c defaults conda

次に、仮想環境を作ってみます。

(base) C:\Users\xxxxx>conda create -n sample
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\xxxxx\miniconda3\envs\sample

Proceed ([y]/n)?

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate sample
#
# To deactivate an active environment, use
#
#     $ conda deactivate


(base) C:\Users\xxxxx>

仮想環境を立ち上げます。

(base) C:\Users\xxxxx>conda activate sample

(sample) C:\Users\xxxxx>py
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

という感じでした。

Bottleというフレームワークを試してみた(2)

あちこち参考にして、もう少し遊んでみました。

test001.py

#!/usr/bin/env python3

from bottle import route, run, view, template, static_file, url

@route('/static/<filename:path>', name='photo')
def server_static(filename):
    return static_file(filename, root='./static')

@route('/hello')
@route('/hello/<name>')
@route('/hello/<name>/<count:int>')
@view('hello_template')
def hello(name='名無し',count=1):
    return dict(name=name, count=count, url=url)

run(host='localhost', port=8080, debug=True, reloader=True)

hello_template.tpl

やあ、<b>{{name}}</b>さん<br />
% if count > 1 :
<br />
{{count}}回表示します<br />
<br />
%   for i in range(count):
{{i+1}}回目<br />
%   end
% end
<img src="{{url('photo', filename="cat.jpg")}}">

そして、./photo/cat.jpg に写真を置いて表示してみるとこんな感じ。

パスにパラメータを入れるとこんな感じ。

写真は フリー素材ぱくたそ(www.pakutaso.com) さんのところから入手したのを縮小して使いました。