ラズパイ初心者向けのエディタにJupyter notebookって結構いいんじゃない？　って話

# 概要
初参加で開始直後までウキウキしていたラズパイもくもく会で無線LANドライバ黙々させちまったので、環境再構築をもくもくやるだけで1日が終わりそうだったから声掛けた人とペアプロしてたら楽しかったよっていう感想文。

# そもそもWindowsユーザにプログラはミング環境構築させるの難しくない？
## 横で聞いていて立ち止まっていたように感じたポイント

1. SSHってなんぞ
1. エディタの設定難しくない？


### SSH接続ってなんですか
Windowsユーザでコマンドプロンプト使ってたり「Win10上でUbuntuが動くようになったぞわーい」って言っていた人、PCユーザ全体から見たらごく少数だと思うんです。
なんとなくMacという人も含めた大多数の人類はターミナルとかCUIとか触れることなく一生を終えるのではないでしょうか。

#### TeraTerm入れてー。xxxx入れてー。
Linux(apt系列やyumとか）やMac(brew)と違って、`Chocolatey`みたいなものなんぞ普通のWindowsユーザは知らないのが現状です。
コマンド叩いたらインストールできるなんて恵まれた環境はゲームというオアシス以外はサバンナで生活しているWindows使いには想像もできない世界です。`conda`も似たようなものです。
究極統合開発環境Excel様がいればIDEもDBも何もかも手に入って設計も書ければプレゼン資料だって作れて救われるし、Winの方が（Macより）安いし（ハードウェアメーカー）サポートあるし。
`VLOOKUP`使える程度でウィザード級名乗れる世界もあるんやぞあっち側。[^1]

それにコマンドプロンプトやPowershellの説明から接続プロトコルだなんだ言うより五感に訴えかける方が多分だけどわかりやすい。
彼と僕には半日も時間がないんです。
今、目の前で何かわかりやすいことが起きた方が刺激になる＝ラズパイ楽しい→〇〇できるんじゃない？　と私が知らない世界を見せていただけるという当時の下心を書き連ねたのが以下のポエムです。

### プログラムを書くなら何使う？
ご本人はもくもく会に来る前からとりあえず程度にatom入れてました。
でもSSH接続もよく分からない状態でラズパイ触るなら、リモートから　**実行**→即→**結果**　って環境の方が面倒が少なくてきっと刺激が強いよね。
ってことでatomからリモートで***自分でできる気がする範囲でほとんど設定せず***実行する方法を調べてもらったんですけど、どうもいい感じのが見つからない様子。
私が見つけたプラグインもなんか古くなっていたか設定がよく分かんなかったかしていたみたいで思い通りになっていなかったっぽい。
本人が調べても設定方法がよく分からないものをやれっていうのは無理があります。
何か、何か手間のない
私に負担がない
方法はないか。

彼は.acアカウントのメールアドレス持ちなのでアカデミックライセンスでPyCharm Professional[^3] を入れることも考えましたけど、設定でいろいろ時間食うのも嫌だなと思いました。
登録で何分使うか覚えてないから、PyCharmから抜け出せなくなるのは今回はパスね。

今回は幸運なことに、ご本人が心理学専攻の院生で**実験でJupyter notebookを使っている**以外はPythonどころかプログラムの経験がほとんどないという恵まれた星の下に生まれた人でした。
ローカルでJupyter立ち上げて計算機にしてグラフ描いたりしてたのね。
OKOK。**経験者**じゃん。イイヨイイヨー。
エディタとしてRaspberryPiで立ち上げたサーバで動かしているJupyter notebookを母艦PCから操作していただくことに決めました。

### RaspbianでJupyter notebookを使う方法
画面左上のラズベリーアイコン→「設定」→「Rappberry Piの設定」から
SSH（と多分リモートGPIOも）を有効にしときましょう。
Jupyterをラズパイ本体から起動させるだけならSSH無効でもいいかもしらん。
そうだとしたらラズパイ本体から直接GPIOへメッセージ送れるんだからリモートGPIOもいらんのやろか。

それはそれとして。

端末から

```
$ sudo apt install jupyter-notebook
$ jupyter notebook --generate-config
```

`vi`でもいいんだけど、Winユーザを想定しているので操作が比較的わかりやすい`nano`を使いますね。[^4]

```
$ sudo nano ~/.jupyter/jupyter_notebook_config.py

144行目あたりの
## The IP address the notebook server will listen on. 直下にある
#c.NotebookApp.ip = 'localhost` を
c.NotebookApp.ip = '0.0.0.0'　に変更
```

これで初期設定ならポート8888から、Jupyterを通じてRaspberyPiのGPIOも含めてLAN内からコントロールできます。
Raspbian上のPythonをそのまま使うため、gpiozeroなどを別途インストールする必要はありません。[^5]
Jupyter notebookのセルに

```
!pip freeze
```
と入力するとインストール済みのパッケージ一覧が出てくるので、`gpiozero`などが入っているのを確認してください。
その他、ターミナルでなにかやりたいことがあればnotebook上のセルに "!" 始まりで実行すると直接叩けるのでWin機（コード打つ方のマシン）で端末触ることはなくなります。
pipで何か入れたければ

```
!pip install spam
```
これをセルに入力したらspamパッケージが入ります。
その他のコマンドも"!"から始めて入力したら全部実行できます。
TeraTermなんていらなかったんや。

#### 初心者の躓きポイント
ネットワークの仕組みだコマンドだなんだよりもっと大切なことがあると思うんです。
**詰まったら質問しない限り自分の中に答えはない。**
自分がわからない状態にいることを他人にわかってもらえることってほとんどないので、検索しても分からなかったら質問しないと一生わかんないと思う。
私この件でたくさん叱られたので、前に進みたいなら質問しましょう。[^2]
他の人に質問するのが怖いなら、会社の後輩ならとりあえず私に質問振ってと言って
私が他の人に質問を投げた後ドヤ顔で
回答するようにしています。
後日でいいならエンジニア仲間に質問投げまくってますし、自分でも喋っていて疑問になったところは友人知人に相談しまくってます。

## 非エンジニアがラズパイを触るにあたってJupyter notebookが優れている点のおさらい

- 環境構築が楽
    - RaspberyPi上でjupyterの設定ファイルを生成→1行書き換えだけでPython実行環境もエディタも手に入る
- デバッグが楽
    - notebookそのものの利点だけど、セル毎の実行結果が返ってくるので何がおかしいのか分かってもらえやすい

もとからnotebookに慣れていたからってアドバンテージがでかすぎるという理由は大いにある。

### 所感
Lチカなんてしょーもない。
きっと皆さん何度も何度も何度も何度も見てきたことでしょう。
何度も何度も何度も何度も思ってきたことでしょう。
そんな目をした人を見てきましたし、Qiitaでも最近クズ記事ゴミ記事は作るなって話題が出ていますもんね。
私も素人レシピだのワイドショーな「〇〇さんは××だそうです。今後が気になりますね」だののゴミ記事は検索結果から消えてほしいと思いながらここでゴミのようなポエムを書き綴っています。

でもねでもね。

- ただただLEDを光らせることに**成功**した
- `time.sleep`を使って明滅させることに**成功**した
- 関数を作って明滅させる時間を変化させることに**成功**した
- `random`を使って明滅時間に幅を持たせることに**成功**した
- 2色LEDを使って赤・緑・橙を不規則に明滅させることに**成功**した

自分で悩んで考えて、それが思い通りの結果を返してきた。
こんなに楽しくて嬉しくてワクワクしたことって人生の中で何回あるんでしょうか。

***「こんにちは、世界！！」***

初めてデジタルワールドに没入したときの気持ちも忘れて死んだ魚のような目をして打ち込むあの合言葉みたいな僕と違って、いろんなことを**成功**したのを目の当たりにしたら心駆動開発やってる人間としてはお気持ちをシェアしたくなるってものです。

帰るときにハロウィンパーティーか何かの帰りな人々に出くわしたのですが、彼が言っていた「クリスマスの電灯みたいなの作れそう」という心駆動開発でパリピも沸き立つものが作れそうな気がしませんか。したよ私は。
将来的にはロボットを作りたいとのことで秋葉原歩きながらどんな部品があってどんなセンサーがあってどんなことができそうか。
という話をしたら色々考えていたので心駆動開発が捗ってくれたらうれしいなと思う次第です。

## おわりに
こっちの方が楽だよっていう最適解があれば教えてください。
彼じゃなく僕の生活水準が向上します。
以上、何卒よろしくお願いいたします。


### おわれない
Jupyter notebookがラズパイの電源入れたら自動起動するように設定しておくべきでしたね。
毎回コマンド叩きたくないし、そのためだけにSSHつないでもらうのもなんだかな。

### おわらせない
Lチカだけじゃ終われないでしょ。
何ができるかじゃなくて、何がしたいかでラズパイ触っていたいです僕も。

### はじまり
やりたいことが現実味を帯びてくるときの目っていいよね。
ワクワクしますね。
ゾクゾクしますね。

#### はじまった
自分のラズパイ再セットアップ終わらせてコードも入れなおした。
床でゴロゴロしてから僕のもくもく会がはじまる。

[^1]: 事務方のおじさんが進化したいなら「闇の関数おじさん」か「闇のVBAおじさん」の二択でした。Excelは非エンジニアでも簡単に直接触れるDBという優位点だけは揺るぎません。
[^2]: 私は「10分調べて分からなければ周りに質問することを考えはじめろ」と言われたのですが、30分考えるというお話を伺いました。偉いなって思いました（こなみ
[^3]: 大学発行のacドメインなメールアドレス持ちはJetBrains社のIntelliJとかPyCharmとか無料で使えるから、卒業以降も買い続ける沼にどっぷりと浸かるためにも今から使っとこう。
[^4]: その後、別の人と食事しながら「Lispって面白いんですよ」と宗教勧誘していました。
[^5]: venv使うより新しいラズパイ買う方がいいよね。って場面が多い気がする。初心者だし。金で解決できる苦労は金で解決しろ。