名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

【初開催】事前準備の要らない読書会「リーダブルコード」【サポーターズ勉強会】に参加した

最近、ABD(Active Book Dialogue)の手法自体が気になっており、参加してみることにした。リーダブルコードは過去に何度か読んだことがあるが、あまり記憶に残っていないので、改めて集中してそこだけ読むことによって、発見があるといいなと思った。

勉強会URL

【初開催】事前準備の要らない読書会「リーダブルコード」【サポーターズ勉強会】 - サポーターズCoLab https://supporterzcolab.com/event/958/

メモ

  • リーダブルコードは全15章あり、好きなのを選ぶ形でスタート。僕は一番最後の15章を手にとった。
    • 他の人は真ん中あたりの章をとっていた印象
    • 最後の章はまとめなので、難易度が高く失敗した感じはする
  • もくもく読み開始、スライドの作成も並行して行う(30分)
    • 紙にまとめていった
      • 10枚くらいA4の紙がなくなった
      • 普段のスライドづくりの癖が出るなって気持ち
    • 読むのには20分くらいかかった
    • 改めてまとめを読むと、名前によって適切な意味になることによって、コードがモジュールを意識した形になり、柔軟に使い回せるものになることがよく分かる
    • 名前付け最優先の本、という印象だったが、名前が設計も決めるものであることを認識した
  • 最後、全員で発表し合う
    • 1人3分でまとめを話す
    • 僕の章は長かったので頑張ってアジェンダを書いて話す
    • なんとかなりました
    • 他の人の話を聞いていると、ド・モルガンとかなるべく真条件で書くとか、メソッドに分割するとか、そういう話もあったなあと思う次第
    • 少し知りすぎている本だったのがそういう意味では新鮮さを持って学べなかったのかも
  • 感想戦をする

こういう流れでしたが、とても面白く、良かったです。

本を破って分割するのってもったいないなとこれまで思っていたのですが、いまは全く逆で破って分割したほうが絶対読みやすいだろこれ、みたいなことを思うようになりました。ただ、ガチガチの技術書みたいなのには向いてないのかな、というのは若干思います(数学とかもそうで、前からの積み上げで成り立ってる本は理解がしづらい、各章完結型のノウハウ本がちょうどよい)

これまで読むのサボってた本とか、いっそのことバラバラにしてしまって読んでしまおうかな、と思うほどでした。とてもよかったです。

まとめ

よても良かったので、どこかで実践できる機会があれば実践していきたいですね。(なるべく会社のお金が出る場所が良いですが、まあ、自分でもやぶきたい本がないわけではない)

次回もあるみたいなので、参加してみようと思います。次回の本は全く中身知らないので、知らない人視点での知識のキャッチアップができるといいな、と思っています。

事前準備の要らない読書会「SOFT SKILLS」【サポーターズ勉強会】 - サポーターズCoLab

Python3.8をいれた

リリースされてた

Python Release Python 3.8.0 | Python.org https://www.python.org/downloads/release/python-380/

一応ローカルは pyenv ベースで管理しているが、PRが受け付けられたのがついさっきだったので、MacのHomebrewで試したけれども、まだ入らなかった。

PRはこれ https://github.com/pyenv/pyenv/pull/1416

普段リリースされてからどれくらいかかるのかわからないが、だいたい1日以内にはmasterにマージされるっぽい?のかなっていうのを掴む。

そのあと、最新版の pyenv を brew 経由で無理やり入れた。過去に自分で書いた記事が役に立った。

qrunch.net

[10/15 23:17:37] $ brew install --HEAD --force pyenv
Updating Homebrew...
Error: pyenv 1.2.13_1 is already installed
To install HEAD_1, first run `brew unlink pyenv`.
Warning: Skipping (old) /usr/local/Cellar/pyenv/1.2.13_1 due to it being linked

[10/15 23:18:34] $ brew unlink pyenv
Unlinking /usr/local/Cellar/pyenv/1.2.13_1... 4 symlinks removed
pyenv:11: command not found: pyenv                                                                                      

[10/15 23:18:45] $ brew install --HEAD --force pyenv
Updating Homebrew...
==> Cloning https://github.com/pyenv/pyenv.git
Cloning into '/Users/yumechi/Library/Caches/Homebrew/pyenv--git'...
==> Checking out branch master
Already on 'master'
Your branch is up to date with 'origin/master'.
==> src/configure
==> make -C src
🍺  /usr/local/Cellar/pyenv/HEAD-d6d6bc8_1: 656 files, 2.4MB, built in 27 seconds
Removing: /usr/local/Cellar/pyenv/1.2.13_1... (650 files, 2.4MB)
Removing: /Users/yumechi/Library/Caches/Homebrew/pyenv--1.2.13_1.mojave.bottle.tar.gz... (625.3KB)

[10/15 23:19:29] $ pyenv install 3.8.0
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.0.tar.xz...
-> https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
Installing Python-3.8.0...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.8.0 to /usr/local/var/pyenv/versions/3.8.0

無事インストールできましたとさ。

[10/15 23:34:10] $ python 
Python 3.8.0 (default, Oct 15 2019, 23:23:09) 
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'aaaaa'
>>> if (n := len(a)) > 10:
...     print(f"List is too long ({n} elements, expected <= 10)")
... 
>>> n
5
>>> exit()

新機能はベータ版とかRC版の時点で、様々な人がQiita記事に色々書いてたのが見えたので、リリースノートと照らし合わせながらサンプルコードでも眺めてみようかな。

最近、家に眠っていたラズパイを取り出した話

なんか急に思い立って、家にあったRaspberry Pi 2 Model B+ を取り出し(古い)、なんか使えないかなーと思ってセットアップしてみた。

というのも、Raspberry Pi 4の発表を見て、スペックを見て、えっメモリ4GBもあるんか…(普通にワーカーとか、ちょっとしたアプリ動かすのに使いたい)となったので、やる気が急に出てきたという話です。技適も通ったという話が最近ではありましたしね。

www.raspberrypi.org

技適の検索はこれ。

https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jk01&NUM=&NAM=%82q%82%81%82%93%82%90%82%82%82%85%82%92%82%92%82%99&FOM=&PC=&YAR_FROM=&MON_FROM=&DAY_FROM=&YAR_TO=&MON_TO=&DAY_TO=&RAD=00-00-00-00&TEC=1&TEC=2&TEC=3&TEC=4&TEC=5&TEC=6&TEC=7&SK=0&DC=0&SC=1&as_fid=d9eaa82597076b0e2ad67cda372a7ae296301e30#searchlist

なお、僕がやりたかったのはバッチサーバーみたいなのを立てておこうっていうモチベーションだったので、まだLチカもクリアしていません! 残念!(そのうちやります)

雑多なメモ

yumechi.qrunch.io

やったこと

Ubuntu Mate のダウンロード

とりあえずとっととつかいたかったので、Ubuntu系のディストリビューションを探したらUbuntu Mateがあるという情報に至ったので、調べる。

Mac Raspberry Pi Ubuntu Mate とかでググりつつ、下記の記事とかを見た。

ちょこちょこ自分のニーズに合わない部分もあったので、記憶を頼りにやったことを書く。

事前の買い物

色々機材が足りませんでした。特にMicro SDが切れていたのが痛い。ついでにSDカードをUSB経由で読み込めるようなやつを買った。(64GBのMicro SDがわずか1000円ちょっとであることに衝撃を覚えている(多分一番最初に買ったSDカード(Microではない)は、256MBとかだったと思う。。。))

HDMLとかマウスとかキーボードは予備があったのでそれを使った。ディスプレイは実は下記の小さいやつを持っていたので、ログ眺めればいいときはそれでログを眺めていた(最初だけ普段遣いの24インチのディスプレイで作業していた)(本音を言うと、3万円くらい出して薄型で建てれるようなやつを使うのが理想だと思う)

ってなわけで、やるぞ!って決めてから1週間位経ちました。幸いモチベーションが消えなかったのでよかったです。

OSを焼く

まずMicro SDをフォーマットします。

Macの場合はMicro SDを接続して、こんな感じのコマンド diskutil list で調べて、SDカードを特定します。で、 diskutil unMountDisk /dev/disk2 とかで消します。なお、消すディスクを間違えると大変なことになるので慎重に作業しましょう。

次に、 Ubuntu Mateのサイトにいき、必要なOSをダウンロードします。今回は Raspberry Pi (recommended) にしました。(多分Raspberry Pi2に対応してるのがこれだけ)

それなりに容量が多いので(数G単位)、時間がかかります。

ubuntu-mate.org

で、解凍して焼きます。 sudo dd if=ubuntu-mate-18.04.2-beta1-desktop-armhf+raspi-ext4.img of=/dev/disk2 bs=1m てな感じで。(bsの値はもう少し大きくしたほうがいいと思った)

自分の環境だとホストのマシンがよわよわMBAであることもあり、ここまで2時間位かかった記憶です。

OSを起動する

普通のMicro SDを取り外して、Raspberry Piに刺しなおして、各種ケーブル類をつないで、最後に電源をつなぎます。

であとは普通のLinuxのセットアップみたいなことをします。(キーボード、言語の設定など)

OSのアップデートとか

Linux入れたら基本だと思ってる作業。これくっそ時間がかかった。

sudo apt update
sudo apt upgrade -y

なお、 sudo apt upgrade -y はなんかエラーが出たので、下記を見て解決した。

bugs.launchpad.net

他にはSSHの設定とか。これが一番参考になった。

cutxout.hatenadiary.jp

日本語の入力周りはこれで良かった。

garabakos.sakura.ne.jp

あとはPyenv入れたり、Rust入れたりして便利なコマンドラインツールとかを入れた。

だいたいここまで2日くらいかかった。

今やらせていること

SlackBotを定期発火させるだけのものをおいている。

それ以上のことはしてないので、もう少し活かせると良いなと思う。

が、今色々考えた結果、現在のSlackBotではそもそもこの機構自体いらないのでは? という感じになってきて渋い顔になりました。

辛いこと

メモリが少ないので、GUI使うのはやや無理げ。CUIにしたらaptとかするのも2、3倍速になったのでGUIがいかにメモリをとっているか実感した。

あとRustのツールのコンパイルがうまく行かない感じ。メモリ不足のためか、コンパイルでコケる。

幸い、ARMアーキテクチャ向けのバイナリを配信しているプロジェクトはそれを落としてきて、パスが通る場所に置けばいいため、問題にならないが、そうでないものは入れるのすら難しい状況。

個人的に bat , exa, rg あたりは快適だと思っているのだが、このうち exa が入らなくてやや辛い。

あと starship/starship: ☄🌌️ The cross-shell prompt for astronauts. を入れようとしたが、これもコケたので断念。うーん、これも試したいのだが。。。

なおRustのクロスコンパイルができるようなやつがあるらしいのだが、Dockerが必須で、今自分のPCでDocker立てるのが厳しいので、まずメインマシンを新調してから考えることにします。。。

これからやりたいこととか

実は今住んでいるところ、部屋の温度・湿度がとても激しく変化するので、まずはセンサーで図ってその結果をSlackなりLINEなりに通知するものを作りたいと思います。

それが済んだらエアコンの操作させたりしようかなあ…。あとはなんか小さいデータマート作るとかかなあとか思っています。

でもなんか本当にバッチ動かすだけなら、Lambda使って、DBはFirebaseなりなんなりでごまかすとかやればそもそもDBいらないので、色々もやもやしています。そのうちそっちに切り替えるかも。

なのでやっぱりセンサー組み合わせて面白いものを作りたいですね。