Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

evalメソッドでJSON文字列をよろしくパースしFunctionとして実行

JSONで記述された動作レシピがあり、こいつを何とかして
Rubyをバリバリ書いていた時はevalとかlambdaをやってたな~と思いだし、Pythonでも同じアプローチ方向でやってみる事に

実際のところ

Functionとして呼ぶ場合、カッコが必要なのでお忘れなく……。

import json

def Move():
   print("moved!!")

f = open("target.json","r")

for i in json_data:
   "{Order} :: {Action}".format_map(i)
   eval(Action)

【読書メモ】いちばんやさしいブロックチェーンの教本 人気講師が教えるビットコインを支える仕組み 「いちばんやさしい教本」シリーズ

D405で遊ぶ その2:librealsence for Pythonの環境を構築する

説明を半端に読んでなかったせいでそこそこ苦労したのでメモ

実際のところ

$ git clone https://github.com/IntelRealSense/librealsense

か、
Releases · IntelRealSense/librealsense · GitHub
からソースコードを入手

以下はgitから落とした場合なので、ソースコードの人は解凍したディレクトリを

$ cd librealsense
$ mkdir build
$ cd build
$ cmake ../ -DBUILD_PYTHON_BINDINGS:bool=true

buildディレクトリのまま、ビルドを実施。
ご多分に漏れずソコソコ時間がかかるので気長に待ちましょう。

make -j4
sudo make install

パスを通す

$ echo "export PYTHONPATH=$PYTHONPATH:/usr/local/lib" >> ~/.bashrc

ミス記録

冒頭に書いた通り、説明の読み込みが中途半端で何度か引っ掛かったので……

pyrealsense2を入れて読んだら"ImportError: failed to enable the udev monitor"とか言われたが
>>> import pyrealsense2 as rs
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/shuzo/.local/lib/python3.8/site-packages/pyrealsense2/__init__.py", line 2, in <module>
    from .pyrealsense2 import *
ImportError: failed to enable the udev monitor

何らかの理由でudevの変更ができていないので、管理者権限でPythonを実行する。
ただし、WSLの場合そもそもudev……というかUSB周りが残念なのでバーチャルマシン等々を使うのが吉です。

PythonディレクトリでCMakeしようとしたら"third-party/pybind11"がないとか言われたが
CMake Error at CMakeLists.txt:22 (add_subdirectory):
  add_subdirectory given source
  "/home/shuzo/librealsense/wrappers/python/build/third-party/pybind11"
  which is not an existing directory.

おめでとうございます。私と同じミスです。
マニュアルにはTOP LevelでCMakeしろと書いてあります。
SDK対象の指定はCMakeのオプションでやるので、wrapper/pythonまで潜らなくてよいのです。

Bottleで特殊ヘッダーつきPOSTコマンドの受け口をつくる

curlコマンドのヘッダーの要素を追加 - Bye Bye Moore
で扱った、ヘッダに固有命令である旨をつけてPOST命令で結果を返す方法を自分でもやってみる
Bottleで画像を受け取る - Bye Bye Moore
を拡張する形で作っていきます

bottleでヘッダを呼び出すには"request.headers.raw(KEY)"で呼び出します。

実際のところ

tmpディレクトリにあるfoobar.jpgというファイルを/showに特殊ヘッダshowimageつきのPOSTで呼び出すには、以下の様に

from bottle import route, request, run, post, static_file

@post('/show')
def send_image():
  if ( request.headers.raw("showimage") == "True" ):
    filename="foobar.jpg"
    return static_file(filename, root='/tmp', mimetype='image/jpeg')
  else:
    return

if __name__ == '__main__':
  run(host='0.0.0.0', port=8080)

上記に対しコマンドを送って画像を1234.jpgとして受け取るには

$ curl -o 1234.jpg -X POST -H "showimage: True" http://127.0.0.1:8080/show

curlの速度を制限する"limit-rate"オプション

妙に帯域が細かったり、あまり優先的でない処理を行う際、limit-rateオプション使うと速度制限ができます。

実際のところ

速度を1k/secに制限した状態で"http://foobar/download"からfile.extという名称でダウンロードするには

$ curl -o file.ext --limit-rate 1k http://foobar/download

ちなみに内部ネットワークでも使えます。

参考もと