名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

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

なんか急に思い立って、家にあった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いらないので、色々もやもやしています。そのうちそっちに切り替えるかも。

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

Pythonでスクレイピングしようとして寄り道をしていた私用メモ

これをしたかっただけなのだが

yumechi.qrunch.io

どうせPythonでものを作る機会はこれからもあるだろうと思ったので寄り道してまとめた。

yumechi.qrunch.io

GitHubリポジトリはここ。今の所Pythonしか設定おいてない。そのうち真面目に他の言語とかでよく使いそうなものを突っ込むとかしたい。Devツール系だけ追加して、普通のものは普通に各プロジェクトで使えばいいと思う。

github.com

あとついでに調べてたこと。昔これで大ハマリしたので、多分相性悪目というか、Mypyでサポートできるのは標準ライブラリ+本当の意味でのメジャーなもの、な気がしている。 昔Pandasか何かの解析が一生通らず動かないというのを経験したので、なんかもうこれらはスルーするのが正解っぽく、小さいものであれば頑張って型をつけてPRを出してみるとかがいいのかもしれない。

もう少し詳しい人に教えてもらいたいところ。。。

yumechi.qrunch.io

で、スクレイピングしているものをそのうちBotに流せるようにしたいので、今はそのデータがちゃんと取れるよね?っていうのを検証しているところ。

データとっとと取って、連携するものに投げつけたいぞ〜。ということでモチベーションが高いうちに完遂したい。

Qiitaに上がってたFirebaseハンズオンをやってみる

そういえばFirebase何も知らないので、少し手を動かしながら理解しなければと思っていたのだが、ちょうど良さげなものがなかったので放置していた。

ちょうどこれが目についたので、やってみることにした。

qiita.com

感想

  • ちょっと本題から外れるけど、 Google cloudshell の Editor すごい
    • あんまりオンラインのIDE使ったことがないのだが、ホント(素の)VSCodeくらいの機能はありそう
  • CloudShellでFirebaseプロジェクトを紐づけるの、むずい
    • CLIといったり来たりしたので微妙な気持ち。
    • ローカルでやっても良かったかもしれない。認証情報を使いまわしたり、CLIから叩くやつは普通にありそう。
    • とはいえ、これ以上ローカル環境汚すのは…(Docker上からデプロイするとか?)
  • DBが簡単にできてすごいと思った。ユーザー個別でJSONで書き込みあるやつはここに逃がすとかの使い方あるって話聞いてたけど、普通にありだなあと。
  • Google認証が簡単にできてすごい。ポチポチしたらすぐ認証のやつできた。

展望

  • ローカルからの開発方法を調べとく
    • オンラインIDEからだとコード管理や開発画面めんどくさそう
    • デプロイとか、認証を通す方法とかも調べとく
  • FirebaseDBの活かし方を考えてみたい(チャットやTODOアプリ以外で)
  • その他の認証を調べてみる
  • ハンズオンのコードは適当にコメントアウトする感じでほとんど読んでないので、何をしているのかを読み直す。

まあでもあんまり複雑じゃないデータベースをサクッと作ったりするのには本当に向いてそう(ハッカソンとかでも使われがちなのがよくわかった)