Jupyter LabにExtentionを導入しようとしたらNode.jsとnpmが無いと怒られる

事象

Jupyter LabにExtensionを導入しようとしたら以下の様なエラーが発生した。

root@096e8b5bcfb1:/usr/src/app# jupyter labextension install jupyterlab_vim
An error occured.
ValueError: Please install Node.js and npm before continuing installation. You may be able to install Node.js from your package manager, from conda, or directly from the Node.js website (https://nodejs.org).
See the log file for details:  /tmp/jupyterlab-debug-lniy1xvy.log

対応方法

記載の通り、Node.jsとnpmをインストールする

# dockerfileに書き足した内容
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs
RUN npm install npm@latest -g

間違えた内容

・pipでnode.jsとnpmをインストールしていた
 →利用したいのは、あくまでもOS側

・普通にapt-getなどでnode.jsをインストールする
 古いNode.js(v10系)がダウンロードされる。
 Jupyter Extentionは最低v12系が必要との事で動かなかった。

その他

利用したかったExtensionが現時点では利用できそうになかった。。
(別途開発版とかでごにょごにょすればいけるかもか)

# jupyter labextension install jupyterlab_vim
An error occured.
ValueError: The extension "jupyterlab_vim" does not yet support the current version of JupyterLab.

docker-composeで共有ディスクの指定をして起動しようとするとエラー

事象

以下の記事を参考にdocker-composeでJupyter Labを起動させたい。
qiita.com

しかしながら、以下の様なエラーが発生してしまい、起動しない。
(一部ディレクトリ変更はしているが、その部分のエラーではない)

C:\dockerfile\JupyterLab>docker-compose up
Creating network "jupyterlab_default" with the default driver
Creating jupyterlab_jupyterlab_1 ... error

ERROR: for jupyterlab_jupyterlab_1  Cannot start service jupyterlab: error while mounting volume '/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data': 
failed to mount local volume: mount C:\c\jupyterlab:/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data, flags: 0x1000: no such file or directory

ERROR: for jupyterlab  Cannot start service jupyterlab: error while mounting volume '/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data': 
failed to mount local volume: mount C:\c\jupyterlab:/var/lib/docker/volumes/jupyterlab_jupyterlab-dir/_data, flags: 0x1000: no such file or directory
ERROR: Encountered errors while bringing up the project.

発生している環境

  • Windows10 pro
  • WSL2
  • Docker Desktop for Windows

原因

不明(調べきれなかった)

対応方法

パスを直接指定する事にした

[docker-compose.yml]

version: '3'
services:
  jupyterlab:
(中略)
    volumes:
#      - jupyterlab-dir:/home/JupyterLab/codes
       - c:\jupyterlab:/home/JupyterLab/codes
(以下略)
共有ディスクとして設定した内容確認方法
ボリューム一覧
docker volume ls
ボリューム詳細
docker volume inspect ボリューム名
ボリューム削除
docker volume rm ボリューム名

上記の例であれば、jupyterlab-dirというボリューム名が作成されているので、削除する。
なお、設定したボリュームの中身更新したい場合は、一度削除した方が良さげ。

分からなかった事

volumesで動くマシンと動かないマシンの違い

実は直接パスを指定しなくても動く端末もあった。
しかし、別の端末では同じエラーが発生し続けた。
dockerのバージョンから始まり、色々見比べたが差異が見つけれなかった。。
オプション指定とか今はしたい訳でもないので、一旦忘れる。

C:\c\jupyterlabとドライブレターが複数指定されている件

volumesでするとどうしてもドライブレターが二度表示され、c:\cフォルダが必要であった。
これも解決できておらず、動くマシンではc:\cフォルダを掘っていた。

driver_optsの"type: none"と"o: bind"の意味

docker-composeのマニュアルや仕様には、その様な記載は見つけれなかった。
Compose Specification(仕様) — Docker-docs-ja 24.0 ドキュメント
github.com
しかし、Issueの対応に同じ記載を見つける事はでき、またどちらかを削ると動かなかった。
github.com

その他

  • WSL2の場合は、Docker Desktop for WindowsにShared Drivesという設定は存在しない。
  • Docker Desktop for Windowsをインストールしていても、docker-compose使うならあまり意味がない。コマンドを憶えるか、バッチファイルを作成して叩いて利用した方が良い。Docker Desktop for Windowsは起動・停止位の意味合いで利用すると割り切る。
  • Anacondaを使わなかったのは、ライセンス問題があるし、ちょこっと集計する程度に使えればいい位なので。

qiita.com

ハンガリアン記法とハンガリアン汚染

ハンガリアン記法

クラス名や変数名に特別な接頭字や接尾字を付与する事で、データ型情報・スコープなどが分かるようにするための命名
ハンガリアン記法にもアプリケーションハンガリアンとシステムハンガリアンが存在
アプリケーションハンガリアンは、実装をしている事で気づく様に仕向ける記法
(ex. 摂氏はc、華氏はfを付けるとしておけば、c_hoge1+ f_hoge2と実装しようとしているとおかしい事に気づける)
システムハンガリアンは、システム的に決まっているクラス名や変数名に対して、それを伝達する情報を付加すること
(ex. Javaのインタフェースなら接頭辞にIを付与、Javaの実装クラスなら)
ハンガリアン記法 - Wikipedia

ハンガリアン汚染

ハンガリアン記法が含まれてしまうこと
clean codeに記載有
moderatemisbehaviour.github.io

システムハンガリアンが嫌がられる理由(推測含む)

・クラス名や変数名の特徴を表す内容を変更したのに、名称を変更し忘れて意味が間違えてしまう事が多い
 (ex. BigDecimalからDoubleに変更したのに、BigDecimalを表す接頭辞を付与している)
・過去はIDEなどが無い、貧弱であったが、昨今ではそれらツールでカバーできる
 結果、可読性が落ちる
・上記ツールでカバーできる範囲なのに、無駄に覚えるべきルールが増える
・ソート順序が狂う

所感

  • 基本的にはハンガリアン汚染と呼ぶことに賛成(システムハンガリアン記法は不要)
  • アプリケーションハンガリアンは、みんなが守れるレベルの内容であればすべきだけど、拘りすぎると可読性を失う可能性あるかも
  • とはいえ、スタックトレースをぱっと読む際に、ハンガリアン記法で書かれていると便利な時は多い

 (eclipseはあんま昔からここ変わってないが、InteliJやNetBeansではうまくハンドリングしてくれるのやろか)

Azureのサブスクリプションに紐づけたライセンスの表示方法

【事象】
Azureポータルの検索で、ライセンスとか製品と入力しても、該当画面にたどりつけない

【対応方法】
以下を辿る(2021.2.19現在)
 Azure Active Directory → ライセンス → 管理 - すべての製品

上記ステップにより、Azure ADやWindows10など購入したライセンス一覧が現れる。

f:id:yoneyore:20210227192906j:plain
知らぬ間に検索できる様になっている可能性は高いかも

Azureの仮想マシンのサイズや料金に関して

サイズ・料金

仮想マシンの料金表一覧を見たい場合

LinuxWindowsで料金表が異なる
こちらから選択した内容を元に料金表に画面遷移もできる
料金 - Linux Virtual Machines | Microsoft Azure
料金 - Windows Virtual Machines | Microsoft Azure

仮想マシンの価格を詳しく見たい場合

料金計算ツールで仮想マシンやディスクなどを追加して計算する
OSも選択できる
料金計算ツール | Microsoft Azure

関連事項

D v4とDs v4の違い

基礎スペックは同じで、Ds v4 サイズの価格および課金の計算方法は、D v4 シリーズと同じ。
Ds v4にしか対応していない機能がいくつかある
・Premium Storageに対応
VM世代のサポートがDs v4は第二世代(※1)も対応

※1 第2世代VMに関する説明は、以下のリンクを参照
第 2 世代 VM に対する Azure のサポート - Azure Virtual Machines | Microsoft Learn

D v4とDd v4とDa v4の違い
シリーズ D v4 Dd v4 Da v4
CPU Intel Xeon Intel Xeon AMD EPYC
ACU 195-210 195-210 230-260
VM世代 第1 第1・2 第1
エフェメラルOSディスク 未サポート サポート 未サポート
従量課金[円/時間] 13.888 16.352 13.888
1年予約[円/時間] 8.1951 9.6533 8.1951
3年予約[円/時間] 5.2764 6.2138 5.2764
スポット[円/時間] 1.6347 4.2860 2.5902

(価格は2021/2/26 日本-東日本リージョン D2 v4/D2d v4/D2a v4の場合)

[補記事項]
・D v4とDd v4は基本一時ストレージの無/有の差で、性能は同じ
・D v4とDa v4はCPUの差異であり、AMDで一時ストレージ有というのは今は無さそう
・従量課金とリザーブドはDa v4が得そうだけど、スポットは高そう
 但し、リージョンによっては価格差があったため、利用時にきちんと確認する必要有 

B1lsとB1sとB1msの違い

マシンスペック自体は同じで、異なる点は以下の通り
・利用できるメモリ量
・通常CPUのリソース最大量
・CPUクレジットのたまり方
・ディスクの最大スループット
なお、B2にはB2lsみたいなのはなく、B4ms、B8msと以後はmsが必ず付くタイプしかない。
負荷の急増に対応できる B シリーズ - Azure Virtual Machines | Microsoft Learn

マシンタイプの選定方法

あまりCPUパワーを使わないのであればBシリーズ、
それなりに使うならDv4シリーズ辺りから検討開始すれば良いかも。
但し、Bシリーズはクレジットという概念があるので、利用には注意が必要である。

EC2のインスタンスタイプとの対比(自身が良く使う分のみ)
タイプ AWS EC2 インスタンスタイプ Azure 仮想マシン マシンタイプ
汎用 M D
CPU最適化 C F
メモリ最適化 R・X E・M
バースト T B

AWSでいうsmallやlargeなどのサイズは、AzureではD2やD4など頭文字の後ろの数値を指す
AWSでいうt2やt3などの世代は、AzureではD2v3やD2v4など"v+数字"で表す
・上記頭文字に加えてaがついてたら、AMDプロセッサ利用と覚えれば良い
 なお、AWSの場合は、aの代わりにg(ARM Graviton)というのもある

仮想マシン上でWindows10を利用する方法

通常の仮想マシンの様に、ライセンスドな仮想マシンを立ち上げる事ができない。
基本的には別途ライセンス(Windows Enterprise E3等)を調達する必要がある。
よって、利用したい時にすぐ使えない可能性が非常に高い
Windowsのライセンスは、AzureのサブスクリプションがCSP/EA/etc...により購買方法が変わる。
また、VisualStudio サブスクリプションや、Microsoft Gold コンピテンシーなどの特典ライセンスが利用できる場合がある。
そのため、利用する可能性あるのであれば事前に調べておく必要がある
後、AzureのサブスクリプションはEAだが、WindowsのライセンスはCSPという状態になったり、契約関連は年度によって色々変わることが多い。
そのため、ネット上で調べる際には、出来るだけ新しい情報、1次ソース or 信頼できるところを元に調査する事。
(自分自身も3次や4次ソースとかであるし、今書いているこの文自体既に陳腐化している部分あるかもしれない…)
また、用途的に自前で仮想マシンにWindows10を立てるのではなく、WVD(Wndows Virtual Desktop)を利用した方がいいのかについても検討を行うこと。

仮想マシンのサイズ変更は起動中でも可能か?

可能である。
但し、再起動は行われる。
AWSに比べると停止→変更→起動の手間がない分便利。

なお、ライブマイグレーションでは再起動は行われないが、メンテナンスの際に利用される機能でありユーザーが選択して使える機能ではない。
メンテナンスと更新 - Azure Virtual Machines | Microsoft Learn

Aシリーズの一部が2024年8月31日に廃止

Virtual Machines シリーズ | Microsoft Azure

Basic および Standard の A シリーズの VM は、2024 年 8 月 31 日に廃止されます。

ややこしいが、AシリーズのBasicであり、Bsシリーズのことではない。

参考資料

Microsoft:意外と知らない仮想マシンの新常識

2018年11月5日~7日に開催されたMicrosoft Tech Summit 2018の資料のため、古い内容は多々有り。
但し、これより纏まった資料がWeb上では見つからなかった。
https://eventmarketing.blob.core.windows.net/mstechsummit2018-after/CI22_PDF_TS18.pdf

ForgeVision Engineer Blog:EC2インスタンスタイプの種類や選び方

AWSで利用している各インスタンスのCPUや特徴などの一覧が良く纏まっていた。
techblog.forgevision.com

mysqldumpの/*!50001や/*!500013はコメントではない

【失敗した内容】
mysqldumpの/*!50001 ~ */や/*!50013 ~*/と出力されていた箇所をコメントと勘違いして削除していた。

【意味】
50001であれば、MySQL 5.00.01以上であれば実行するという意味である。
そのため、削除するともれなくmysqldumpで取得した時と異なる結果になってしまう。

ホワイトボード Webサービス・ソフトウェア

なんか色々あって覚えきれないので、個人的評価を纏める

Webサービス

Metro Retro

metroretro.io

長所
  • 直感で使える

miro

miro.com

長所
  • 高機能
  • アクセス制御などもできる
短所
  • 少し操作に癖があり、一定学習コスト必要そう

Mural

www.mural.co
まだ利用した事がない

ソフトウェア

Apache Openmeetings

openmeetings.apache.org

長所
  • 外部にデータを漏らさず利用可能
  • 多機能(Web会議システムに分類するのが適切)
短所
  • 見た目がださい
  • 重たい
  • サーバ用意したり、通信ポートなど色々設定しないといけない

 dockerイメージを用意してくれており、穴開けなど簡単にできる環境であればデメリットでない

BigBlueButton

bigbluebutton.org
こちらもWeb会議システムに分類するのが適切
あまり調べてないのでスペックは未知数
なお、デージーネットさんのサイトで分かりやすい概要説明有
www.designet.co.jp

リモートワーク段取り仕事術 (アスカビジネス)

リモートワーク段取り仕事術 (アスカビジネス)

  • 作者:相原 秀哉
  • 発売日: 2020/12/11
  • メディア: 単行本(ソフトカバー)