Bye Bye Moore

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

2016-11-01から1ヶ月間の記事一覧

"if __name__ == '__main__':"という構文

"if __name__ == '__main__':"という構文をよく見かけますね。 これは、公式だと以下のように説明されています。 A module’s __name__ is set equal to '__main__' when read from standard input, a script, or from an interactive prompt. まぁ、要するに…

psycopg2で画像データを読み書きする

psycopg2で画像データを読み書きする方法です。 実際のところ 画像データの格納にはbytea型を使います。 PostgreSQLのbytea型はmemorybuffer型を返すので、ちゃんとbytes関数なりで整形しないといけません。 import psycopg2 DSN = "dbname=postgres user=sh…

psycopg2でデータをINSERTする

前回に引き続き、psycopg2でデータをINSERTする方法です。 実際のところ imageというbytea型のbyte_dataカラムを持っているテーブルに対し、バイナリデータを叩き込む方法は以下の通り。 import psycopg2 DSN = "dbname=postgres user=shuzo_kino" SQL3 = "I…

psycopg2を使ってPostgreSQLにあるデータを読み出す

psycopg2を使ってPostgreSQLにあるデータを読み出す 実際のところ 以下のSQL文を叩くケースを考えます。 固定の時間値を返す。 imageテーブルからとりあえず一個引っ張り出す せっかくwith節を使う事ができるので使ってみます。 import psycopg2 DSN = "dbna…

postgresで現在のユーザ名を知る

あんまり参照する機会もないですが、PostgreSQLで現状のログインしているユーザ名を表示する方法です。 実際のところ 現状のユーザ情報はCURRENT_USER変数に格納されています。 というわけで、全部出したい場合は、こう # select * from pg_user where usena…

psqlも-cオプションでSQL文を直接叩きつけることができる。

sql

psqlも-cオプションでSQL文を直接叩きつけることができます。 実際のところ 基本的な使い方 postgresというDBに対し、"select byte_data from image where id = 0;"というSQL文を叩きつけたい場合は以下の通り。 $ psql postgres -c "select byte_data from …

Python系の導入時に"BUILD FAILED (OS X x.x.x using python-build y.y.y)"などと出る場合、xcode-selectがうまく導入できていないのかも

今回はmacOSのお話。 多分、他のOS Xでも同じです。Python系の導入時に"BUILD FAILED (OS X x.x.x using python-build y.y.y)"などと出る場合、xcode-selectがうまく導入できていないのかも知れません。 実際のところ 背景 postgresqlをpythonで使うpsycopg2…

バイナリファイルをHEX文字化してローカルに保存

xxdコマンドをつかうと、バイナリファイルをHEX文字化することができます。 そのままファイルとしてローカルに保存する事も可能です。 実際のところ ここで大活躍するのがxxdコマンド。 $ xxd -p image.jpg | tr -d '\n' > dump.hexオプションpは以下にある…

postgresをbrewで入れ直し

sql

postgresをbrewで入れ直し 実際のところ $ brew cleanup postgresql $ brew remove postgresql $ brew install postgresqlDBを新造 $ rm -rf /usr/local/var/postgres $ initdb /usr/local/var/postgres -E utf8$ pg_ctl -D /usr/local/var/postgres -l logf…

pillowで画像を回転させる

# 時計回りに45度 out = im.rotate(45) #左右反転 out = im.transpose(Image.FLIP_LEFT_RIGHT) #上下反転 out = im.transpose(Image.FLIP_TOP_BOTTOM) #90度、180度、270度回転 out = im.transpose(Image.ROTATE_90) out = im.transpose(Image.ROTAT…

python3のprintf関数のオプション

python3のprintf関数のオプションでは改行文字や、イテレータ形式のくっつける文字を指定できたりします。 これはPEP3105文章で設定された話です。 実際のところ くっつける文字はsepで指定。 str = "hoge" print(*str, sep="+") #>> h+o+g+e 終端文字をつけ…

python3でも使える画像操作ライブラリPillow

Pillowはpython3でも使える画像操作ライブラリです。 参考もと サムネイル from __future__ import print_function import os, sys from PIL import Image size = (128, 128) for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbn…

0.0.0.0は来るもの拒まずの特殊なIPv4アドレスである

0.0.0.0は来るもの拒まずの特殊なIPv4アドレスです。IPv6だと::128*1になります。というわけで、bottleで以下のようにやると簡易的に自分のPCを外からアクセスできるWEB鯖にすることができます。 run(host='0.0.0.0', port=8080) たとえば、自前のアドレスが…

Bottleで直接送りつけられる画像データを受け取る

以前の例ではformリクエストに載った画像ファイルを扱いました。 ただ、送信デバイスの都合によっては直接データを叩きつけるような奴もあります。 この場合は、どうしたらいいのでしょうか? 実際のところ esp8266で以下のように指定URLに対し直接画像を叩…

標準ライブラリのargparseでCLIパーサ

$ python -m serial.tools.list_ports --help usage: list_ports.py [-h] [-v] [-q] [-n N] [regexp] Serial port enumeration positional arguments: regexp only show ports that match this regex optional arguments: -h, --help show this help message…

Pythonでディレクトリ中のファイルをソートし最新版をとってくる

Pythonでディレクトリ中のファイルをソートし最新版をとってくる方法です。 実際のところ Bottleで"/tmp/img"にある時間の画像の最新版を取るスクリプトは以下の通り。 タイムスタンプをファイル名として居る時、logfiles[-1]が最新です。 import os @get('/…

Bottleで画像を受け取る/送る

python用超軽量WEB鯖Bottleで画像を受け取る方法です形式としては、formで添付ファイルとして来ているようなケースを想定します。 このスクリプトでは組込み機器との連携を前提にしているので投稿フォームは無し。 実際のところ Jpeg画像を受け取るケースを…

スイッチサイエンスさんのesp8266開発ボード「ESPr Developer」とgroveカメラを繋ぐ

スイッチサイエンスさんのesp8266開発ボード「ESPr Developer」とgroveカメラを繋ぐ方法です。 開発ボードだと面倒ごとが大分緩和されます。 実際のところ カメラで画像を取る POSTはしない。ブラウザで確認するだけ。 必要資材 ESPr Developer(ESP-WROOM-0…

Python組み込み関数filterは条件にあったものを抽出する

Python組み込み関数filterはiterableなオブジェクトから条件にあったものを抽出します。 Rubyで言うところのselectみたいなモンですかね 実際のところ def flt(x): return x > 4 list(filter(flt, [9,1,5,4,2,2,0])) #>> [9, 5] 参考もと 2. 組み込み関数 — …

findall関数やfinditer関数でゴチャゴチャした文字列から必要なものだけ引っ張り出す

finallやfinditerは標準付属の正規表現ライブラリにくっついている関数です。 何やらゴチャゴチャした文字列がある その中でほしいのは一部 結果は文字列型にしたい というような要件で役に立ちます。 実際のところ findall 最も雑な方法はfindallで指定して…

モータドライバTA7291Pで遊ぶ

東芝のTA7291Pは直感的に使いやすいモータドライバです。モータードライバー TA7291P 2個セット出版社/メーカー: 株式会社東芝セミコンダクター社(TOSHIBA)メディア: その他この商品を含むブログを見る 性能表は公式によるとこんな塩梅です。 今回使ったTA72…

Bottleで簡易なデータ受信用鯖をつくる

とりあえずデータを受信したか確認したい時のための簡易API鯖です。 form形式とjson形式を受け取る方式を考えてみます。 実際のところ bottleなら最小構成で楽々。 from bottle import post, request, run @post('/') def receivedata(): body = request.par…

Pythonの"-m"オプションが探しに行っている場所

Pythonの"-m"オプションが検索しているパスは sys.pathで確認できます。 実際のところ ためしに、REPLでみてみましょう。 import sys sys.path #>> ['', '/Users/shuzo_kino/.anyenv/envs/pyenv/versions/3.4.3/lib/python34.zip', '/Users/shuzo_kino/.anye…

format関数の文字詰めについて

format関数には文字詰め用オプションがあります。 実際のところ 中央は「^」、左詰めは「」 '{:=^30}'.format('Sample string') #>> '========Sample string=========' '{:=<30}'.format('Sample string') #>> 'Sample string=================' '{:=>30}'.f…

ビルトイン関数zipの使いみち

Pythonのビルトイン関数zipはiterate可能なモノをくっつける 実際のところ 試しに、rangeと文字列をくっつけてみます。 形態としてはzipオブジェクトとして格納されるみたいです。 zp = zip(range(0,100,20), 'abcde') #>> <zip object at 0x1014386c8> ビルトインのlist関数を使ってあ</zip>…

16進数文字列をbytesarray型に

前回は文字列をそのままBytes型に変換する方法でした。 今回は16進数文字列をbytesarray型にする方法です。 実際のところ bytearrayのfromhex関数に渡すだけです。 "0x"とか入っていると使えないので注意してください。 bytearray.fromhex('00DE00AD00BE00EF…

encode関数を使って、String型をBytes型に変更する

Pythonで文字列整形といえば……formatですね。 こいつをつかえば、ビット芸もこの通り。 "{:04X}{:04X}{:04X}{:04X}".format(0xde,0xad,0xbe,0xef) #>>'00DE00AD00BE00EF' とはいえ、諸般の都合でbyte型じゃないと困るケースもあるでしょう。 シリアル通信に…

subとグループの参照を使って、順番を並び替えた新データをつくる

Pythonの正規表現ライブラリ"re"は機能が充実しています。 文字列の置き換えに使うsub関数とグループ参照を併用すると必要部分を抽出して並び替え……みたいな事は割りとスマートにいけます。 実際のところ こんな例があったとします。*1 データは次の形式でく…

pySerial付属のターミナル上シリアル

PySerialには簡易的シリアル通信ソフトが備わっています。 実際のところ なんもやらないと、ポートの指定画面から入ります。 $ miniterm.py --- Available ports: --- 1: /dev/cu.Bluetooth-Incoming-Port n/a --- 2: /dev/cu.GMSPP01-101E-SerialPort n/a -…

pySerial付属のシリアルポートリストコマンド

python用のシリアル通信用ライブラリpySerialには現状接続している周辺機器のリストを出すコマンドが付属しています。 実際のところ $ python -m serial.tools.list_ports -v /dev/cu.Bluetooth-Incoming-Port desc: n/a hwid: n/a /dev/cu.GMSPP01-101E-Ser…