みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Python

Pydantic でフィールドの追加を禁止する

Pydantic ConfigDict を使います*1.allow, forbid, ignore から選択します. pydantic.Extra.forbid や Config class を使用する方法もありましたが,Pydantic 2.x では奨励されていません. 動作確認のための unittest は以下の通りです.モデルに text フ…

Python で要素の検索速度の比較

Python で複数の要素から特定のものが存在するかを検索する場合の,効率がよい方法を検討します. 課題 10万個の要素から特定の要素が存在するかどうかを返す. set を使用する方法, list を使用する方法をすぐに思いつきます.list を set に変換してから…

numpy で指定したデータだけを合計する

sum() 関数の where で指定します. numpy.sum — NumPy v1.26 Manual import numpy as np a = np.array( [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] ) b = np.array( [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], ] ) v = a.sum(where=b.astype(boo…

PyTorch の学習速度をなるべく速くする

PyTorch の学習に時間がかかるとイライラするので,利用可能な計算資源をなるべく効率的に使用するための工夫をまとめました. 以下は インテル Core i5 12400 と GeForce RTX 4080 を搭載したパソコンに Ubuntu をインストールした環境で検証しています. G…

Pydantic で JSON を読み込む時に型変換される

例えば dict[int, int] を JSON で記述しようとすると,キーは文字列にする必要がありますが,Pydantic がうまく型変換してくれるので気にせず使えて便利です. % python --version Python 3.11.6 % pip freeze pydantic==2.5.2 test_pydantic.py import jso…

ループの速度を Python, Rust, Node.js で比較する

ループ(繰り返し処理)の書き方はプログラミング言語により様々です.使いやすい書き方を選択すればよいとは思いますが,気になったので処理速度を比較してみました. みーがよく使っている,Python, Rust, Node.js について,1千万個の要素を含む配列を用意…

PyTorch で三角関数を学習する

PyTorch で時系列データを学習させてみたかったので,このサンプルを参考に,long short-term memory (LSTM) cell を使った,Recurrent neural network を作成し,ある区間の sin 関数を学習させて,その続きを予測させてみました. sin 関数は,振幅と周波…

VS Code で mypy-type-checker の設定ファイルを指定する

The mypy configuration file - mypy 1.5.1 documentation 上記のドキュメントに従って,mypy の設定ファイルで細かな調整をしようとしても,VS Code の mypy-type-checker にうまく認識されませんでしたが,以下のような設定を追加することで認識されるよう…

エクセルのセル番号は変則的

エクセルのN番目のセル番号を取得する関数は,少し変則的な表記であることを知りましたので,メモしておきます. エクセルのセル番号は以下のように増えていきます. 1,2,...,26 → A,B,...Z 27,28,29,...,701,702 → AA,AB,AC,..ZY,ZZ 703,704,705,...,18277,…

Rust と Python で文字数を数える

環境 検証に使用した環境は,以下の通りです. Python 3.11.3 (main, Apr 11 2023, 16:14:10) [GCC 10.2.1 20210110] on linux rustc 1.68.2 (9eb3afe9e 2023-03-27) on linux 文字列を数える Python ならば len() 関数を使うだけです. >>> len("りんご") 3…

Dev Container Features で全部入り開発環境を作成する

Dev Container を利用して Docker 環境で開発をすると,それぞれのプロジェクトについて自由に依存関係を構成することが可能になり,大変便利です.しかし,開発に必要なライブラリを1個のコンテナに準備する必要があり,準備が大変でした.それでも一度全部…

2623561561を素因数分解する

www.youtube.com 2623561561 を素因数分解する動画がありました.手計算で頑張っていました.もちろん人間が素因数分解するには大変な計算量だということは分かりましたが,パソコンならばどれぐらいで実行できるのか気になったので試してみました. 最小の…

gRPC の通信を Wireshark で観察する

gRPC の通信の中身が気になったので,Wireshark でパケットキャプチャして観察しました. Wireshark のインストール Wireshark · Go Deep M1 MacOS 用の Wireshark が公開されているのでダウンロードしてインストールします.権限が不足している場合は "Inst…

Python で非同期処理の gRPC を使用する

gRPCが流行っているようなので,アプリケーションの開発に取り入れるために,Pythonで非同期処理に対応したgRPCを使用する方法について,検討してみます. 教科書を読む gRPCは様々な言語に対応しており,多くのライブラリが開発されているため,汎用性が高…

Pythonで現在時刻を取得する関数の比較

Pythonで実際に測定してみました. import datetime from benchmarker import Benchmarker def validate(): native_now = datetime.datetime.now() assert native_now.tzinfo is None # native_utcnow = datetime.datetime.utcnow() assert native_utcnow.tz…

SHA256よりもSHA512が速いらしい

結論はタイトルの通りですが,pythonで実際に測定してみました.16 bytes, 256 bytes, 4096 bytes, 65536 bytes, 1048576 bytes の長さの文字列を用意して,MD5, SHA256, SHA512 の3種類のハッシュアルゴリズムを使用してハッシュ値を取得するまでの時間を計…

Raspberry Pi Pico を購入した

Raspberry Pi Pico を購入しました.秋月電子通商通販で1個税込770円だったので,2個購入しました. セットアップ Get Started with MicroPython on Raspberry Pi Pico という本のPDFが,公式サイトから無料で配布されていたので,読みました.Raspberry Pi …

Raspberry Pi の GPIO をネットワークから操作する

pigpio というライブラリは,Raspberry Pi の GPIO に対応しています. pigpio library このライブラリは,デーモンとインターフェイスから構成されていて,ネットワークを通じてデーモンを操作することができます.つまり,開発用の高性能なパソコンにイン…

Cloud SQL への接続とポイントインタイム リカバリの検証

Cloud SQLは, 豊富な拡張機能コレクション、構成フラグ、デベロッパー エコシステムを備えた、MySQL、PostgreSQL、SQL Server 向けのフルマネージド リレーショナル データベース サービスです。(https://cloud.google.com/sql?hl=ja) Cloud SQL で Postgre…

SQL で NULL との比較が unknown になる

SQL では,NULLに比較述語を適用すると,常にunknownになります.これは分かりにくい印象がありますが,3値論理に準拠すれば明らかです. この性質により,例えば Django で以下のように apple_id に unique と null が共存できます.ここで,apple_id は必…

Djangoでsync_to_asyncの性能を測定する

Djangoで非同期処理を実装するときに,非同期ではない関数を使用するためのアダプター関数 asgiref.sync.sync_to_async() が用意されています*1. sync_to_async()関数は,SyncToAsyncクラスを使って,スレッドプールで実行可能な非同期関数を作成する仕組み…

Django async viewを使用してCloud Runで並行処理をする

一般的にWebサーバーの開発は非同期処理と相性がよいです.Webサーバーは不特定多数の人から任意の時刻にリクエストを受信して処理し,レスポンスを返します.Webサーバーの処理の多くは,データベースなど外部のリソースにアクセスすることなので,I/O boun…

functions-framework-pythonの名前はややこしい

functions-framework-pythonの名前がややこしいという話です. GitHub - GoogleCloudPlatform/functions-framework-python: FaaS (Function as a service) framework for writing portable Python functions プロジェクトの名前はfunctions-framework-python…

Dev ContainerでDocker Composeを使いデータベースを起動する

Visual Studio Codeの拡張機能Remote - Containersを使用して,Dev ContainerでDocker Composeを使いPostgresデータベースを起動して,Pythonから操作してみます. 環境 MacOSからUbuntu ServerのDocker engineにリモート接続してVScodeで操作します. % doc…

SendGridのSigned Event Webhookを使う

SendGridの送信履歴は数週間しか残らないので,履歴を保存するために,Webhookを利用して自分のサーバーに記録する仕組みを用意しなければなりません. Google Cloud Functionsを利用して,かんたんにPythonで実装してみました.とりあえずverifyできるかを…

python-opencvでWebカメラを一覧から取得する

python-opencvのVideoCapture(index)を使えば,Webカメラを気軽に操作できますが,複数のWebカメラを扱う時にindexをどうやって指定するかが問題となります. MacOSならば,system_profilerコマンドがありますので,これを使えば正しいindexを取得できます.…

PythonでDecimalやdatetimeをシリアライズする

Pythonで少し複雑なデータをシリアライズする時に便利な関数を作成しました.MessagePackとJSONに対応しており,srslyというシリアライズのライブラリを使用しています. import datetime import decimal import json from srsly import msgpack # # Message…

Pythonで日時をISO 8601で扱う

Pythonのdatetimeを用いて,日時をISO 8601で表現します. aware (タイムゾーンあり) か native (タイムゾーンなし) を意識し,isoformat()とfromisoformat()の動作を確認するユニットテストを作成しました. import datetime import unittest class ISOForm…

Pythonのvenvまとめ

自分用のvenvまとめです. 環境 % sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 % python3 --version Python 3.9.7 venvの初期化 venvはpythonに最初から入っているので,すぐに使える. プロジェクトのディレクトリに移動して,以下のコマンドを…

先頭/末尾ではない文字列を表す正規表現

正規表現には肯定先読み (?=...) と肯定後読み (?<=...) と呼ばれる機能があり,先頭/末尾ではない文字列を検索するのに有用なので紹介します. 肯定先読みや肯定後読みを文章で説明するよりも,Pythonのunittestとしてソースコードで表現する方が分かりやす…