ネコと和解せよ

Python

マイクロチップ向けのTBSKmodemをリリースしました(ただし送信のみ)

先日作ったMicropython向けのTBSKmodemの続きです。Arduinoでも動くようにしました。github.com MicroPython TBSKmodemMicro/README.ja.md at main · nyatla/TBSKmodemMicro · GitHubコードからライブラリを分離しました。 セットアップがチョットめんどくさくな…

空中で音波通信できるオーディオモデム

簡単に出来そうでなかなかむずかしい、空気中で安定して通信できるオーディオモデムを作りました。開発用のライブラリと、コマンドライン用のアプリケーションのセットです。www.youtube.com名前をTBSK modemといいます。通信速度は最大1kbpsと低速ですが、…

argparseのhelp引数に%を書くときの注意

Pythonの引数解析ライブラリのargparseでhelp引数に%を書くと、特定条件下でパーサーが正常終了しなくなりました。例えば、次のコードはValueErrorを出して異常終了します。 import argparse parser = argparse.ArgumentParser(description='%%') parser.add…

pythonの符号なしintとバイナリをいい感じに相互変換する

pythonでint128やらint256を扱ったときに、JsonやDBへそのまま書き出せない。 blobに変換して書きだすとよろしいようなので、関数を作った。 import math def toBlobUint(n): """uintをバイナリに変換 """ if n==0: return int.to_bytes(n,1,byteorder="big"…

Pythonでいいかんじに 小数部の桁数を制限する

pythonで小数部の桁数を制限する場合、decimalを使うのが一般的だそうだ。 decimalは有効桁数を制御できるけど、JavaのBigDecimal#setScaleのように小数点以下の桁数を制限する機能がなかった。そんなわけでいい感じに 小数部を成型してくれる関数を作った。…

JSON形式でPickleがしたい!

Pythonオブジェクトのシリアライズにはpickleモジュールがあるが、こいつは独自形式のバイナリを出力する。どこかの超人のようにバイナリをそのまま読めないので、JSON形式でpickleできるようなモジュールを作った。pickle utility to json format . · GitHu…

pypyで高速化したらメモリリークしたお話

Pythonクラスを関数内で定義すると、pypyでの実行時にメモリリークが発生して実行速度が遅くなる。以下のコードをPythonで実行する。 import time class Leak: def proc(self): class Inner: def something(self): i=1+1 for _ in range(10000): a=Inner() a…

Pythonで共有メモリを使った並列処理をするときのメモ

Pythonで大きめのデータ(数百M~数GB)を解析しようとしたときの技術メモ。Pythonを並列処理で高速化しようとするとGILの制約を受ける。この問題は複数の同一プロセスを起動することで回避できるが、巨大なデータを扱う場合、それが読出専用であってもメモリ…

Python3.7をWSLに入れる

apt search Python3.7*で見つからないとき。ppaをこの辺から追加する。 sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get updateそのあとにapt-get install python3.7でOK 参考 How to Install Python 3.7 on Ubuntu 18.04 | Linuxize

pypy3のセットアップメモ

WSLにPyPy3をセットアップした時のメモです。 matplotlibとnumpyとscypyとpandasをセットアップできるようにするのが目標pypyのセットアップhttps://askubuntu.com/questions/441981/how-to-install-pypy3-on-ubuntu-for-newbies sudo add-apt-repository pp…

Jupyter NoteBookとPythonで上位階層のimportをする方法

Jupyter NoteBookで__file__を使って上位ディレクトリをimportしようとすると失敗する。__file__が定義されていないから。 代わりにpathを使えばよいらしい。 import sys import os try: __file__ sys.path.append(os.path.join(os.path.dirname(__file__), …