pip3でurllibをインストール
pip3でurllibをインストールするとエラーになった。
mbp:~ kenji$ pip3 install urllib Collecting urllib Could not find a version that satisfies the requirement urllib (from versions: ) No matching distribution found for urllib
バージョンの指定が謝り。
urllib3を指定すればOK
mbp:~ kenji$ pip3 install urllib3 Collecting urllib3 Downloading urllib3-1.22-py2.py3-none-any.whl (132kB) 100% |████████████████████████████████| 133kB 1.6MB/s Installing collected packages: urllib3 Successfully installed urllib3-1.22
homebridge on Raspberry Pi 3 with Docker
ラズパイでhomebridgeを動かす手順は以前ブログで書いた。
今回はラズパイ3にDockerをインストールして、コンテナ上でhomebridgeを動かしてみた。
これでラズパイの環境が壊れても簡単に復旧できる。
手順としてはDocker on ラズパイのDockerfileが公開されているのでこれを利用すれば良い。
config.jsonが/home/pi/homebridge以下に格納している場合は以下のようにする。
# docker run --net=host --name=homebridge -v /home/pi/homebridge:/homebridge oznu/homebridge:raspberry-pi
net=hostにすることでコンテナ上からホストのNICがすべて見えるようにしている。
あと、homebridge用のプラグインを追加する場合はコンテナが起動してから以下のようにする。自分はhomebridge-cmdを使っているので追加でインストールする。
# docker exec [コンテナID] yarn add homebridge-cmd
このあと、docker commitして保存しておけばOK。
Pythonで天気情報を取得する
最近、シェルスクリプトで作業効率化するのがマイブーム。
そんな折、Pythonでシェルスクリプトよりもリッチ(?)なツールを作りたい願望が高まってきたので、本格的に勉強しようと思い立った。事始めとしてPythonで天気情報を取得するプログラムを書いてみた。
今回はlivedoorのWeather Hacks(気象データ配信サービス)から天気情報を取得する。
weather.livedoor.com
リクエストには地域を指定するだけで良い。
以下は神戸市の天気情報を取得する場合のリクエスト。
http://weather.livedoor.com/forecast/webservice/json/v1?city=280010
レスポンスはJSONデータで得られるので、目的のプロパティについて処理すれば良い。
forecastsプロパティには直近3日間の天気情報が含まれる。
というわけで、直近3日間の天気内容(晴れ、曇り、雨など)を表示するプログラムを書くと以下のようになった。
#!/usr/bin/env python # coding: utf-8 import requests import json def get_weather(): url = 'http://weather.livedoor.com/forecast/webservice/json/v1' payload = {'city': '280010'} # Kobe data = requests.get(url, params = payload).json() print(data['title']) for weather in data['forecasts']: print(weather['dateLabel'] + ':' + weather['telop']) return if __name__ == '__main__': get_weather()
実行すると以下のようになる。
兵庫県 神戸 の天気 今日:曇り 明日:雨 明後日:雨のち晴
至極簡単。
これなら、ラズパイで毎朝SlackとかTwitterに天気を投稿するのも簡単にできる。
Gentoo LinuxでNFSマウントする
まず、cifs-utilsをインストールする必要がある。
# emerge net-fs/cifs-utils
これでマウントしようとすると以下のエラーになった。
# mount //xxx.xxx.xxx.xxx/public /mnt/nfs/ Password for hogehoge@//xxx.xxx.xxx.xxx/public: mount error: cifs filesystem not supported by the system mount error(19): No such device Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
これはcifsをLinuxカーネルがサポートしていないから怒られているようだ。
以下を有効にしたカーネルでマウントするとうまくいった。
File systems ---> Network File Systems ---> CIFS support (advanced network filesystem, SMBFS successor)
Node-REDでPhilips Hueを操作する
Node-REDで組んだフロー上からPhilipsのHueを操作したくなったので試してみた。ノードは "node-red-contrib-node-hue" というのが公開されているのでコレを使う。
インストールは以下のようにする。ローカルインストールの場合はグローバルインストールのオプション(-g)を消しておく。
$ npm install -g node-red-contrib-node-hue
インストール後、Node-REDを再起動すると、入力用のnode-hue-inと出力用のnode-hue-outが使えるようになる。パレット上に配置して設定画面を開くと、以下のようにHueのブリッジと操作したいランプを指定する。
ブリッジのテキストボックス右にある編集アイコンを押すとIPアドレスとAPIキー、あとポーリング時間を指定する画面になる。IPアドレスは自動で探してくれるようなので、ブリッジのボタンを押してAPIキーのテキストボックス横のボタンを押せばAPIキーが代入される。
次に元の画面に戻ってランプの設定を行う。ブリッジの設定直後だとランプが見つからないようだが、しばらく待つとブリッジに接続済みのランプを選べるようになるので、操作したいランプを選べば良い。
基本設定は以上。
ランプを消灯したい場合はfunctionノードで以下のようにすれば良い。
msg.payload = { "on": false }; return msg;
逆に点灯したいときは以下のようにする。
msg.payload = { "on": true, "xy": [0.3393, 0.3316], "hsv": [201, 42, 100], "hex": "92D8FE", "color": "lightskyblue", }; return msg;
これで他の機器と連携してHueを点けたり消したりできるようになった。
Linuxデバイスドライバ 第4版
教団X
結構前になるけど「教団X」を読んだ。
https://www.amazon.co.jp/%E6%95%99%E5%9B%A3X-%E4%B8%AD%E6%9D%91-%E6%96%87%E5%89%87/dp/4087715906www.amazon.co.jp
全体的に小難しく理解するのに時間がかかるので、中盤くらいからストーリー展開に着いていけなくなった。。。
けど、仏教や脳科学にもとづいて描かれている世界観はとても印象的で、これから自分の価値観として強烈に意識づけられた表現もあった。正確な表現ではないけど、以下の点はこれからも記憶に残りそう。
・原子の集合体である「私」は日々新しい原子で入れ替わっているのに、「私」というかたちで存在し続けている
・意識より先に体は動いている。意識は「私」というドラマを見ているだけ。
分厚すぎるのでなかなか読み返す気にはならないけど、どこかでまた読み直してみたい。