Monologue

日々の考えたこと

ThinkPad E495のメモリを32GBに増設

サブPCとして使用していたThinkPad E495のメモリを増設しました。

普段は、メインPC(デスクトップ)を使っているのですが、 子供が生まれてからリビングで過ごすことが多くなり、サブPCの利用頻度が増えました。 特に重い作業を行らないのですが、メモリが8GBと控えめで流石に不足感が否めません。

Amazonにて、CrucialのDDR4-3200 SO-DIMM(16GB×2枚セット)を購入しました。最安時より少し値上がりしていますが、今でも1万円前後で入手できます。

分解の手順や様子などは、他サイトでも紹介されているので端折りますが、ネジを緩めてこじ開けるだけ。底板はツメで固定されているため、ヘラやギターピック、スパッジャーと呼ばれるツールで少しずつ開けるのが良いでしょう。

底板を開けた様子。購入してから4年近く経つが、使用頻度が低いので比較的綺麗。

8GB⇒32GBの大幅パワーアップ

約4年前に格安で購入したPCですが、私の用途だとまだまだ現役で使えます。 メモリも増設したので、買い替えはまだまだ先かな。

製品の進化が停滞しているのか、私の物欲がなくなりつつあるのか、デジタルガジェットの買い替えサイクルが長くなっているこの頃です。

電験三種を受けにいった

昨日、第三種電気主任技術者試験(通称 電験三種)を受験してきました。 最近は、CBT(パソコンを使ってテストする形式)でも受験可能なようですが、 あえての筆記方式での受験です。

立命館大学びわこくさつキャンパス(BKC)に初来訪。あいにくの超曇天。

実は受験は2回目で、前回は「理論」と「機械」が受かっていました。 なので、今回は「電力」「法規」の受験になります。

自己採点したところ、電力は90点、法規は81点ぐらいなので、おそらく合格ラインだと思います(マークミスとかがなければ…)。

久しぶりの資格試験だったので、昨日はクタクタでした。 どうでもいいですが、めちゃくちゃお尻が痛くなる大学の教室の椅子が懐かしかったです。

読書記録: 電子・光材料(第2版)

誘電体、半導体といった電子材料や、ディスプレイで使われる光材料などを扱っている教科書です。 下員の教育を行うのに参考にしました。

背景

職務内容の詳細は避けますが、私の職場では多種多様な材料を扱います。 一方で、それらの物性や応用を理解している人は少なく、 「言われた通りの作業をこなすだけ」の方が多いのが悩みでした。 そのような状況では、仕事の面白さも感じられないでしょうし、組織に対するエンゲージメントが失われるばかりです。 そこで、ちょっとした勉強会を画策・実施しました。その際の参考にしたのが、この教科書になります。

本の内容について

「電気電子材料」「固体物性」「電子物性」などのタイトルがついた教科書は、電磁気学量子力学の知識が前提とされており、複雑な式を経て解説されているものが多いですが、この教科書は数式がほぼ現れません。 高校物理・化学程度の知識さえあればスムーズに読み進められる内容になっています。

私の所属している係には、自然科学以外の学部・学科を卒業された方や、高卒の方も所属しています。数式なしで上手く説明しているこの本は大変参考になりました。

内容としては、各種材料の定性的な性質や代表的な物質、製造プロセスの紹介がされています。製造プロセスについては、私自身も知らない知識も多く、興味深く読めました。

おすすめしたい人

初学者向けの内容となっているため、電気電子系や材料を扱う学生の方は、より高度な教科書を読む必要があるでしょう。ただ、学校の授業で面食らってしまった方は、この教科書で全体の概要を把握するのも良いと思います。

また、上述の通り高校物理、化学の知識で読み進められる内容となっているため、理工系以外の方が読むのにも適していると思います。具体的には、電子産業に関わる営業の方とかでしょうか。最近の半導体産業の盛り上がりから、電子部品、電子デバイスの分野への関心が高まっている方にもオススメです。

読書記録: 改訂新版 電子工作の素

良い本でした。

この本との出会いは学生時代の頃。 当時から電子工作に関心がありましたが、偉い人の作製例をマネしたり、キットを組み立てるので精いっぱい。 自分のアイデアで、自由に設計・工作するなど、一生経っても出来る気がしませんでした。 そんな心理的障壁を大きく下げてくれたのがこの本です。

改訂新版が発刊されたことを知り、今月初めに購入。夢中になって読んでいました。

この本のすごいところ

回路図の読み方から、各種電子部品の基礎知識、回路の設計方法、工作のノウハウまで、 電子工作に関するトピックスを網羅的に取り上げていることでしょう。

特に、第2章「電子部品の知識」は、受動/能動部品、アナログ/デジタルを問わず、 あらゆる電子部品の種類と特徴がまとめられており(100ページ超!)、この章だけでもお腹一杯といった感じです。

個人的に好きなのが、第4章「自作のノウハウ」です。 基板のエッチングから、部品の取り付け、ケース加工など、 実務の様子が写真や図で解説されており、非常に参考になります。また、工作に関わる様々なテクニックが紹介されており、DIY欲が掻き立てられる内容になっています。

改訂新版では、シングルボードコンピュータや、マイコンボードの紹介が新たに加わりました。 第6章の工作例も、ラズパイ、Arduinoを用いたものが多く紹介されており、時代を感じます。

おすすめしたい人

基礎入門というタイトルですが、電子工作の経験が全くない人には少し難しいかなと思います。 ある程度の経験がある方が、包括的な知識を得るために読むイメージでしょうか。 学生実験や研究室で、回路工作が必要になった方が、関連する頁を流し読むのも良いと思います。

学校で各種理論や設計法を学んだけど、実際のモノづくりになるとお手上げという方に是非おすすめしたい本です。

Raspberry Pi Zero 2にJupyterLabをインストール

1. 背景

昨年の話になりますが、Raspberry Pi Zero 2 Wを手に入れました。 3000円未満の廉価にもかかわらず、4コアCPUが搭載されているということで爆発的な人気を博した製品です。発売以来、長期に亘って品薄の状態が続いていましたが、昨年の夏頃から供給状態が改善されたようで、今は予約無しで購入できます。

Raspberry Pi Zero 2 W

私も、KSYから2セット入手できたので、しばらく色々と遊んでいました。 値段を考えるとコスパ十分であるものの、各所で指摘されている通り、GUI環境下での使用は厳しい印象です。 Raspberry Pi OSには、ThonnyやGeanyのような軽量なIDEがデフォルトで入っていますが、これらを用いたプログラミングさえも快適とは言い難い状況でした(私が使用しているSDカードの読み込み・書き込み速度が関係しているかもしれませんが)。

故に、CUIでの使用を余儀なくされる訳ですが、実行結果をインタラクティブに確認したい場合にはどうしても不便です。 というわけで、Raspberry Pi Zero 2 W上でJupyterLabを実行し、他のPCからブラウザを通して、Pythonプログラミングを行うことを画策しました。

2. 手順

2.1. OSのインストール

Raspberry Pi Imagerを用いて、SDカードにRaspberry Pi OS Lite(64-Bit)を書き込みました。 なお、書き込み時に、SSHやユーザー名・パスワードの設定、Wi-Fiの設定、ロケールの設定は済ませています。 書き込んだSDカードをボードに挿入・電源を起動。SSHでリモート接続後、sudo apt update, sudo apt upgradeで各種パッケージのアップデートを行いました。

2.2. 各種Pythonパッケージのインストール

2.2.1. pipのインストール

インストール直後は、Pythonのパッケージ管理システム(pip)が入っていないので、下記コマンドでインストールしました。

$ sudo apt install python3-pip

その後、pip --versionを実行し、正常にインストールできているかを確認しました。

2.2.2. JupyterLabのインストール

pipのインストールが無事に済んだので、pip3 install jupyterlabで、JupyterLabのインストールを試みましたが、下記のエラーが発生しました。

error: externally-managed-environment

× This environment is externally managed
mq> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

どうやら、仮想環境以外でのpip installは推奨されていないようです。 --break-system-packageのオプションを付けることで強制的にインストールは可能ですが、今回はエラーメッセージに従って仮想環境を作成しました。

下記コマンドを実行し、jupyterという名前の仮想環境を作成しました(名前は任意でよい)。

$ python3 -m venv jupyter

その後、下記コマンドで、仮想環境を有効にします。

$ source jupyter/bin/activate

仮想環境有効後、JupyterLabをインストールしました。

$ pip3 install jupyterlab

2.2.3. JupyterLabの設定

パスワードの設定を行います。仮想環境下で下記のコマンドを実行し、パスワードを入力します。

$ jupyter lab password

続いて、設定ファイルを生成します。

$ jupyter lab --generate-config

ホームディレクトリ直下に.jupyter(.仮想環境名)というディレクトリが作成されるため、その中の"jupyter_lab_config.py"を編集します。

$ vim ~/.jupyter/jupyter_lab_config.py

今回は、以下の項目について、コメントアウトの解除とパラメータ設定を行いました。

  • 設定項目(jupyter_lab_config.py)
    • c.ExtensionApp.open_browser = False
    • c.ServerApp.allow_remote_access = True
    • c.ServerApp.ip = '*'

設定後、仮想環境上でjupyter labを実行すると、サーバーが起動します。ブラウザから下記のリンクにアクセスすると、見慣れた画面が表示されました。 http://raspberrypi.local:8888/lab

2.2.4. 各種モジュールのインストール

以上で、JupyterLabについての設定は終了しました。引き続き、pipで各種モジュール・パッケージをインストールしました(私の場合、numpy, pandas, matplotlib, RPi.GPIOなど)。仮想環境下なので、Raspberry Pi OSにデフォルトで入っているパッケージもインストールする必要があるので注意です。

$ pip3 install numpy pandas matplotlib RPi.GPIO

3. 動作確認

最後に、Lチカで問題なく動作するかを確認しました。 Raspberry Pi Zero 2 Wの3.3V端子にプルアップ抵抗を経由してLEDのアノードを接続、カソードはGPIO17に接続した上で、下記のコードをノートブックに入力し実行しました。 問題なく動作したので大丈夫でしょう!

import RPi.GPIO as GPIO
import time

LED_PIN = 17

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.HIGH)

def main():
    while True:
        print('LED ON')
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(0.5)
        print('LED OFF')
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(0.5)

def destroy():
    GPIO.output(LED_PIN, GPIO.HIGH)
    GPIO.cleanup()
    
if __name__ == '__main__':
    setup()
    try:
        main()
    except KeyboardInterrupt:
        print('stop')
        destroy()