- 0.0.1. 自然数ローマ数字変換 Python3
- 0.0.2. 40代おっさんFastAPI、MongoDB連携メモ 認証関係②
- 0.0.3. 40代おっさんFastAPI、MongoDB連携メモ 認証関係
- 0.0.4. Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう
- 0.0.5. ハノイの塔を解くプログラム python3
- 0.0.6. ウルシステムズプログラミングコンテスト2023 D問題解説(Pythonコード例付)
- 0.0.7. 40代おっさんFastAPI、MongoDB連携メモ③
- 0.0.8. PythonでのDebug方法 (もう`print()` は使わない)
- 0.0.9. Pythonでの音声信号処理 (8) 波の解析の一歩
- 0.0.10. Pythonでの音声信号処理 (7) 色々なデータを鳴らす
- 0.0.11. nlplotの共起ネットワークで遊んでみた
- 0.0.12. [Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する
- 0.0.13. 【Python】gpt-indexのsave_to_disk関数でTypeError: Object of type float32 is not JSON serializableになったときの対処
- 0.0.14. Python 逆ポーランド記法の電卓
- 0.0.15. Pythonにおける組み込み型の種類
- 0.0.16. 【python】行列で連立一次方程式を解く
- 0.0.17. 〈Kivy〉シングルタップ・ダブルタップで別の動作をするボタンを作る
- 0.0.18. InfluxDB v2: Python Client の使い方 (時系列データ)
- 0.0.19. Raspberry PI上のPython-slimコンテナ(Debianベース)でrustc依存のパッケージ構築に苦労した話
- 1. 前提条件
- 2. 経緯
自然数ローマ数字変換 Python3
自然数とローマ数字の変換をします。
“`romanumber.py
#!/usr/bin/python3
import sysTABINT=[1000,900,500,400,100,90,50,40,10,9,5,4,1]
TABROMA=[“M”,”CM”,”D”,”CD”,”C”,”XC”,”L”,”XL”,”X”,”IX”,”V”,”IV”,”I”]
ERRPAT=[‘DD’,’LL’,’VV’, # 500,50,5 がダブらないように
‘CMC’,’CDC’,’XCX’,’XLX’,’IXI’,’IVI’,
#CMCM,CMCのようなエラーパターンは’CMC’にまとめてある
‘DCD’,’LXL’,’VIV’] # 515のパターンdef toint(s):
s=s.upper()
for i in ERRPAT:
if (i in s): return(-1)
a=0
i=0
j=0
while(s):
if (s.startswith(TABRO
40代おっさんFastAPI、MongoDB連携メモ 認証関係②
## 本記事について
この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。## CORS
オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS ) は、追加のHTTPヘッダーを使用して、あるオリジンで動作しているウェブアプリケーションに、異なるオリジンにある選択されたリソースへのアクセス権を与えようウェブアプリケーションは、自分とは異なるオリジン (ドメイン、プロトコル、ポート番号) にあるリソースをリクエストするとき、オリジン間HTTPリクエストを実行します。
### オリジン(Origin)
Originとは
`
“://” [ “:” ]` 例
scheme: https,http
hostname: google.comなど
post : 443などこれがすべて同じになるのが同一オリジンとみなされる
### Cross
オリジン単位でのアクセス制御可
40代おっさんFastAPI、MongoDB連携メモ 認証関係
## 本記事について
この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。## 認証関係のクラスを作る
プロジェクト直下にファイルを作成`auth_utils.py`
JWTとは
JSON Web Token(JWT)Webを介して、2者の間で、情報を安全に転送するために使用されるJSONオブジェクト。認証システムや情報交換に用いられています。転送される情報は、デジタル署名されているため、信頼することができ。Token自体は主にヘッダー、ペイロード、署名で構成されている。これらの3つの部分はドット”.”で区切られている。### シークレットキーを環境変数に定義
`.env`ファイルに
“`python
CSRF_KEY=XXXXXX
JWT_KEY=XXXXXX
“`### auth_utils.py
“`python
import jwt
from fastapi import HTTPException
from passlib.context
Alexaにスプレッドシートで作ったオリジナル単語帳を読んでもらう
# はじめに
Alexaを使って簡単に聞き流すタイプの単語帳を作れないかと思ったので作りました。
スキルの公開はしたくなかったので、自分専用です。# ざっくり構成
![素材類.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236151/f4b15876-d667-2e24-49ad-89b512556976.png)
開発環境を作るのがめんどくさいので今回は[Amazon Alexa developer console](https://developer.amazon.com/alexa/console/ask)を利用してスキルの開発をします。# Google SpreadSheetを使って単語帳をつくってAPIで返すようにする
外部から叩いて、SpreadSheetの内容を返すようにします## データを作る
* シートに単語を記入していきます。
* シート名は`シート1`になってます
![単語帳 – Google スプレッドシート – Google Chrome 2023_01_2
ハノイの塔を解くプログラム python3
再帰アルゴリズムで、ハノイの塔を解くプログラムです。
`$ chmod +x hanoi.py`で実行権限を付けて実行して下さい。
`’./$ hanoi.py`で、n段のハノイの塔を解きます。 “`hanoi.py
#!/usr/bin/python3
import sysdef hanoi(n,from_,to,work):
if (n>0):
hanoi(n-1,from_,work,to)
print(“move #%d disk from %s to %s” % (n,from_,to))
hanoi(n-1,work,to,from_)hanoi(int(sys.argv[1]),’Left’,’Center’,’Right’)
“`
# 実行結果
“`
$ hanoi.py 3
move #1 disk from Left to Center
move #2 disk from Left to Right
move #1 disk from Center to Right
move #3 disk from
ウルシステムズプログラミングコンテスト2023 D問題解説(Pythonコード例付)
# はじめに
本記事はPythonでAtcoderにチャレンジしているけど、Pythonはコード例がないため解説がわかりにくい!と感じている方を対象としています。
私自身大してレートも高くないので、不備等あるかもしれませんがご了承くださいm(_ _)m
質問や指摘などもコメント等に書いてくださったら対応していきたいと考えていますのでどしどしコメントしてください。(内容がわかりにくいぞ!みたいな文句でもオールオッケーです笑)
# ウルシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 286) [D問題]
問題のURLはこちらです。[ウルシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 286)](https://atcoder.jp/contests/abc286/tasks/abc286_d)
# 使う手法
今問題では**動的計画法**を利用していきます。
動的計画法とはざっくりいうと、**問題を小さく分割して、ひとつ前の計算結果を利用して最終的な解を見つける**というものです。
何
40代おっさんFastAPI、MongoDB連携メモ③
## 本記事について
この記事はプログラミング初学者の私が学んでいく中でわからない単語や概要を分かりやすくまとめたものです。
などありましたらコメントにてお知らせいただければ幸いです。## update
“`python
async def db_update_todo(id:str, data: dict) -> Union[dict, bool]:
todo = await collection_todo.find_one({“_id”: ObjectId(id)}) # find_oneでObjectId(id)が存在するか検証無ければnone
if todo:
updated_todo = await collection_todo.update_one( # update_oneを使ってMongo DBにアクセス
{“_id”: ObjectId(id)}, {“$set”: data}
)
if (updated_todo.modified_count > 0): # modi
PythonでのDebug方法 (もう`print()` は使わない)
tl,dr;
–
* コードのデバッグに`print()`はデメリットが多いため使わない
* 代わりに`Logging`を使う
* ベストプラクティスがありそうだが、わからないSummary
–
プログラムを書くときに不可避のエラー。これまでは、エラーが発生した際にはエラーメッセージを元にコードの怪しいと思われる箇所に `print(‘check’)` などと入れることで、エラー箇所の特定を行なっていた。しかし、これはどうにもエンジニアっぽくない。そしてなんかダサい。
というわけで、脱`print()`の方法を探すと、`Logging`というデバッグ用の基本モジュールがPythonには用意されていた。
Logging HOWTO: https://docs.python.org/3/howto/logging.htmlWhy use logging (don’t use `print()`)
–
`print()`を使うデメリット
* 効率性の問題
* `print(‘checkpoint 1’)`など内容をユニークにして打ち込む必要がある。怪しい箇所がすぐに特定でき
Pythonでの音声信号処理 (8) 波の解析の一歩
## やりたいこと
波形データを解析するための理屈的な側面を整理すること## やってみた
### 波形データの一般形
波のデータは、色々なsin波を合成したもの。
sin波といっても、大きさが違うもの、周波数が違うもの、ちょっと横にズレた(いわゆる位相が違う)ものなどがある。位相がずれたsin波は、sinとcosの和で表現できる。
つまり、
sin(x + φ) = A・sin(x) + B・cos(x)
のように書くことができる。このことから、どんな波形データも、
F = (a1・sin(x) + b1・cos(x)) + (a2・sin(2x) + b2・cos(2x)) + ・・・
のような形で表現できる。### やりたい解析
sin(2x)の「2」の部分は、いわゆる周波数。なので、a2・sin(2x)でのa2は、「2」の周波数がどれくらいの大きさで入っているかということ。
つまり、波 F に対して、a1、b1、a2、b2、・・・が分かれば、波に含まれている、それぞれの周波数の大きさが分かるということになる。まずは、この a1、b1、a2、b2、・・・を算出
Pythonでの音声信号処理 (7) 色々なデータを鳴らす
## やりたいこと
ノコギリ波や矩形波などを鳴らしてみる
## やってみた
### ノコギリ波
#### ノコギリ波の再生
“`p7_1.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = Truefrom multiprocessing import Process
import time
from pydub import AudioSegment
from pydub.playback import playfrom Grp import Line
import Dummy as dmydef main():
smpl = 44100 # サンプリングレートは44.1KHz
sec = 1 # 1秒分# ノコギリ波
wav1 = dmy.makeWave(1, smpl, sec, 0, 0, 1)
for i in range(64):
freq = i + 1
wav1 += dmy.makeW
nlplotの共起ネットワークで遊んでみた
# この記事はなに?
前から「共起ネットワークで遊んでみたいな〜」と思っていて、実際に色々遊んでみた記録です。
# 環境構築
mecabなどのインストールは下記。
“`
echo “mecab-python3==1.0.5
nlplot==1.4.0
pandas==1.4.3
beautifulsoup4==4.11.1” > pipfile
pip install -r pipfile
“`
beautifulsoup4はhtmlからテキストを抽出するのに使用してるだけなので、必要ない人はなくても大丈夫です。# 実装
詳細は省きますが、こんな感じで実装してます・* mecabにない単語は、前後の単語を組み合わせてプログラム側で単語として判断するようにしている
* 名詞、動詞、形容詞を抽出対象に設定
* 名詞、動詞については無視する単語も設定(する、ある、いる、など)
* 単語の名寄せをしている(ざまあとざまぁがあったら、全てざまぁに寄せるなど)
* 個々の分析について共起が何回発生したかを見てplotに表示するかどうかを判断している# 例1: 概要を把握する
[Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する
# やりたいこと
Classモジュールの中に処理タイプ毎のモジュールを用意しておき動的に読み込み実行する
## Code
動作確認環境: Python 3.7.10
“`
test.py
test_class/
├ __init__.py
└ func/
├ hoge.py
└ fuga.py
“`“`python:test_class/__init__.py
from importlib import import_moduleclass test_class():
def __init__(self, func_type):
self.func = import_module(f”.func.{func_type}”, “test_class”)def exec(self):
self.func.main(‘test message’h)
“`
Classの中ではimport_moduleを利用して動的にモジュールを読み込む
この時import_moduleはtest_classモジュールからの相対PAT
【Python】gpt-indexのsave_to_disk関数でTypeError: Object of type float32 is not JSON serializableになったときの対処
# はじめに
[GPT Index でのHuggingFaceの埋め込みモデルの利用 | npaka](https://note.com/npaka/n/nee11eb7e620e)にしたがって作ったindexをsave_to_diskで保存しようとしたときに以下のエラーが出ました。対応方法を考えます。“`Python
index.save_to_disk(“index.json”)
“`“`
TypeError: Object of type float32 is not JSON serializable
“`# 環境
“`
% pip list | grep gpt-index
gpt-index 0.2.3
% python -V
Python 3.10.2
“`
(gpt-indexの更新が非常に活発(記事投稿日2023/1/20時点での最新が0.2.8)なので、すぐにout-datedな情報になるかもしれません。)# 解決方法
## 保存
save_to_disk関数の内部で辞書を`json.dump`に渡す処
Python 逆ポーランド記法の電卓
逆ポーランド記法(Reverse Polish Notation;RPN)の電卓です。
chmod +x revp.pyで実行権を付けて動かして下さい。
引数の式はコマンドラインに、`revp.py 10 20 +`のように、スペースで区切って入力して下さい。
エラーチェックはしてませんので、誤った文字列を渡すと、pythonがエラーを返します。“`revp.py
#!/usr/bin/python3
import sys
stack=[]
s=sys.argv[1:]while(s):
e=s[0]
if (e==’+’):
stack.append(stack.pop()+stack.pop())
elif (e==’-‘):
a=stack.pop()
stack.append(stack.pop()-a)
elif (e==’*’):
stack.append(stack.pop()*stack.pop())
elif (e==’/’):
a=stack.pop()
stack.append(sta
Pythonにおける組み込み型の種類
# はじめに
近年の静的型付け言語の流行に伴い、Pythonでコードを書く際に静的型付け言語のように型安全な書き方を記載することが求められるようになってきました。実際にPython3においてversionが上がる度に型ヒントに関する機能が充実するようになってきました。
今回はPythonにおける型の種類をまとめました。
※因みにPythonはすべてがオブジェクトなので、Pythonにおける型とはオブジェクトの種類(type)のこと。ここではtype()の戻り値のクラスを型と呼びます。Python実行環境は Python 3.9.6
# Pythonに備わっている組み込み型(Built-in Types)
組み込み型は主に下記が存在します。(公式ドキュメントから抜粋)
1, 数値型(整数、浮動小数点数、複素数、真偽値)
2, シーケンス(リスト、タプル、rangeオブジェクト)
3, テキストシーケンス(文字列)
4, 集合型(set, frozenset)
5, マッピング(辞書)
6, バイナリシーケンス
7, コンテキストマネージャー型
8, その他組み込み型(クラス、インス
【python】行列で連立一次方程式を解く
## 概要
pythonで行列計算をすることが多いので、備忘録として残しておくことにいたしました。まだまだ至らないところがたくさんあると思いますが、皆様何卒よろしくお願い申し上げます。
## 環境
macOS 13.1
conda 22.9.0
Python 3.9.13
numpy 1.21.5
### 単位行列の積
まず単位行列を用いて、正しく計算が行われているかを確認してみます。“`python
import numpy as np
mat_1 = np.matrix([[0, 1], [2, 3]])
i = np.eye(2) #iは単位行列mat_2 = np.dot(mat_1,i)
mat_3 = np.dot(i,mat_1)print(mat_2)
print(mat_3)”’
実行結果
[[0 1]
[2 3]]
[[0 1]
[2 3]]
”’
“`:::note info
単位行列をかけているので、mat_2,mat_3ともにmat_1と等しくなっていることが確認できます。
:::### 逆行列を求める
次に逆行列につい
〈Kivy〉シングルタップ・ダブルタップで別の動作をするボタンを作る
# 目標
こんなふうに, シングルタップとダブルタップで別の動作をするボタンを作成する.
具体的には, シングルタップで「+1」, ダブルタップで「数字を 0 に戻す」動作を行うボタンを実装する.# サンプルコード(ダブルタップ実装前)
左のボタンを押すと表示された数値に +1, 右のボタンを押すと表示された数値に +2 するシンプルなボタン.
これを修正してダブルタップ処理を追加する.
以下にコードを記載する.## 1. double_t
InfluxDB v2: Python Client の使い方 (時系列データ)
## 準備
トークンを調べる“`bash
influx auth list
“`バケットの作成 (dbtest というバケットを作成)
“`bash
influx bucket create -n dbtest -r 72h
“`バケットの削除
“`bash
influx bucket delete -n dbtest
“`バケットの一覧
“`bash
influx bucket list
“`## データの書き込み
“`py:write_temperature.py
#! /usr/bin/python
#
# write_temperature.py
#
# Jan/19/2023
#
# ——————————————————————
import sys
import json
import requests
import time
# —————————————————
Raspberry PI上のPython-slimコンテナ(Debianベース)でrustc依存のパッケージ構築に苦労した話
初投稿です.今後よろしくお願いします.
ある研究案件でRaspberry PI上のPythonのslimコンテナ(執筆時python:3.9-slim)にpip経由で色々入れようとしたところいろいろ躓いたのでメモ
Debianのaptで入るrustが古かったり,Dockerfile内でのPATH変数の更新などで一苦労しました
最後に書きますが,今のところこの方法じゃない方がよいかもです.前提条件
OS: Rasbian( on Raspberrypi4 )
Docker及びDocker-composeをapt経由でインストール
Dockerfile内にpip経由でbcryptを含むいくつか(主にFlask関係)をインストールする文を書いた
ベースコンテナはpython:3.9-slim経緯
面倒な方は結論だけどうぞ
出てきたエラー
~~~Dockerfile
From: python:3.9-slim
…..
RUN
OpenCVの解像度設定は1度出来なかったからと言って諦めてはいけない(戒め)
# 背景
産業用のMV-CE050-30UCというUSB3のカメラでOpenCVによる画像処理を行いたかった。
デフォルトで対応していないと思い込んでいろいろ試行錯誤した後、
非常に簡単に対応させる手順が用意されていた。
なんとかOpenCVで画像が出て喜んだものの解像度が640 x 480。最大解像度まで上げたい。
メーカー標準のビューワーやGraphEditでは解像度変更は可能だった。
最大解像度は2592 x 1944、設定間隔は横16、縦2ずつの模様。
設定ファイル的なものは見つからず、どうやらプログラムから変更するしかないようだが・・・# 実行環境
| モジュール | Ver | 備考 |
|:-:|:-:|:-:|
| python | 3.10.0 | |
| opencv-python | 4.7.0.68 | |
| numpy | 1.24.1 | opencv-pythonインストール時に自動でインストールされたもの |
| MVS | 3.1.0 |MV-CE050-30UCのデバイスドライバのインストールとユーティリティ|#