- 1. テストの並列実行に使うpytest-xdistの便利な使い方まとめ(主にUIテスト向け)
- 2. FastAPI development with Jupyter notebook
- 3. 手書き数字認識アプリ with Swift
- 4. SlackのBolt(Python)を使ってChatOpsしようとしたら割と苦労した
- 5. 【SIGNATE】第19回_Beginner限定コンペに参加した話
- 6. Python & Selenium で Edge をオプション付きで実行(WebDriver もオプション付きで)
- 7. AtCoder ABC241 E – Putting Candies をフロイドの循環検出やダブリングで解く
- 8. AtCoder Beginner Contest 241 A~C 3完記事
- 9. Colabで車載カメラ映像からの先行車両検出に関する既存公開手法(YOLOP, YOLO v5s BDD100K)を動かしてみる
- 10. 頻出語が一目瞭然 | Word_Cloud | Python | DataViz
- 11. [Python] takes 0 positional arguments but 1 was givenエラーの解消
- 12. Pythonでいい感じに書く
- 13. 【Python】injectorでDIコンテナを実装する
- 14. ROS2でyamlファイルからパラメータを設定する。
- 15. Explanation of Evaluation index ‘MAP@5’ in Happywhale – Whale and Dolphin Identification Competition.
- 16. AWS Lambda(Python)から直接画像を出力する方法(覚書)
- 17. Google ColaboratoryからBigQueryを実行する方法
- 18. pythonでMetatrader5からヒストリカルデータをダウンロードする方法
- 19. もし北京オリンピックカーリング女子が、総当たり戦ではなく、敗戦即敗退のトーナメント方式だったら…
- 20. Raspberry Pi Pico に CircuitPytnon を使い SSD1306 に文字を表示する
テストの並列実行に使うpytest-xdistの便利な使い方まとめ(主にUIテスト向け)
## pytest-xdistとは
`pytest-xdist`はテストの並列実行・分散実行に使う`pytest`のプラグインです。
これをインストールし、実行時に並列ノード数をオプションとして渡すだけで、勝手にテストを振り分けて実行してくれます。https://github.com/pytest-dev/pytest-xdist
本記事では`pytest-xdist`を実際に使ってみて分かった便利な使い方、オプションなどをメモとしてまとめます。
なお、私は`pytest`をユニットテストではなく、主に`Selenium`や`Playwright`を使ったUIテスト用途に利用しているため、それに特化した内容になっていることをご承知おきください。
内容は随時更新します。https://pytest-xdist.readthedocs.io/en/latest/index.html
## インストール
> pip install pytest-xdist
## テストの並列実行
> `pytest -n 4 test.py`
`-n`のあとにテストを並列実行するノード
FastAPI development with Jupyter notebook
とある仕事で、Fastapiを書くことになった。
ただし、他のメンバーがWEBサーバーの素人
もちろん、PythonはJupyterで書くことしか知らない# JupyterでFASTAPIを動かす
以下はToken付きでFileアップロードするコード“`test.py
from fastapi import FastAPI, HTTPException
from fastapi import FastAPI, File, Form, UploadFile
from peewee import SqliteDatabase, Model, AutoField, CharField, TextFieldSECRET_KEY = “4qbqcd_iqxk-y6(gr8l^9elsr1acj+t7zohf7v8reqp&^e7%6p”
db = SqliteDatabase(‘db.sqlite3’)
class User(Model):
id: int = AutoField(primary_key=True)
name: str = CharField
手書き数字認識アプリ with Swift
# 概要
– 手書き数字(1 ~ 9)を認識するアプリケーションの開発– **GitHubURL**
> https://github.com/Takata1124/mnist_keras# 1. 開発環境
– Xcode (13.2.1)
– GoogleColaboratory# 2. 構築
STEP1:手書き数字の認識のCoreMLモデルを作成
STEP2:StoryboardでUIを作成
STEP3:手書き文字を画像として保存する
STEP4:保存した手書き文字画像をCoreMLモデルで認識出力
# 3. CoreMLモデルの作成
### FrameworkとLibraryのインストール
“`swift:/Keras_to_mlmodel_new.ipynb
pip install keras==2.2.4 tensorflow==2.3.0 coremltools==5.1.0 pillow==7.0.0 h5py==2.10.0
“`
### 必要なモジュールのインポート
“`
SlackのBolt(Python)を使ってChatOpsしようとしたら割と苦労した
今や一家に一台のSlackですが、やはりSlackを使う以上はChatOpsしないといけないよね、
ということでナウいBoltを使ってSocketModeで実装してみました。# Slackの設定
まずSlack側でBoltを使う準備をしなければなりません。
割とやることがあるので、詳しくは[公式ページ](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)をみて頑張って下さい。手順を掻い摘んで書くと、
– https://api.slack.com/apps にアクセス
– `Create New App` or `Create an App` をクリック
– モーダルが表示されるので `From scratch` をクリック
– `App Name` を入力して作成先のWorkspaceをリストから選択したら `Create App` をクリック
– 左メニューの`Features -> OAuth & Permissions`をクリック
– 画面を下にスクロールし、`Scopes`にて`Add an O
【SIGNATE】第19回_Beginner限定コンペに参加した話
## 参加理由
機械学習をちょっとかじったものの、使いこなせるレベルでは全然ないなと。機械学習をもっと使えるようになりたい⇒レベルを上げるにはとりあえずコンペに参加したらいいのでは?⇒いきなり難しいと撃沈するから初心者向けに出よう、という流れで標記のコンペに参加しました。
https://signate.jp/competitions/576
## 手法と結果の推移
こんな感じ。6回目で設定ラインを超えることができました。
証拠画像も。
1回目:ロジスティック回帰?
2回目:SVM?
⇒1
Python & Selenium で Edge をオプション付きで実行(WebDriver もオプション付きで)
Edge の WebDriver 関連の情報は拾うの大変なので、自分メモ
# pip でパッケージのインストール
“`:pip コマンド
pip install selenium==3.141.0
pip install msedge-selenium-tools==3.141.4
pip install webdriver-manager==3.4.2
“`
`Anaconda`はライセンスの関係で、使いません
今は改善されてるかもしれませんが、少し前?まで、最新の`selenium`と最新の`webdriver-manager`の組み合わせでエラーが起きていたので、バージョンを指定したほうが無難
“`:pip コマンド
pip install msedge-selenium-tools selenium==3.141.0
“`
と紹介してるサイトが多いから、`msedge-selenium-tools`も`selenium`のバージョンから受ける影響の大きいパッケージと推測される(未確認)
他の必要なパッケージは、自分で判断して入れてね
# Importの宣言
宣言しないと
AtCoder ABC241 E – Putting Candies をフロイドの循環検出やダブリングで解く
https://atcoder.jp/contests/abc241/tasks/abc241_e
をダブリングや循環を検出してときます。– 方法1: ダブリング
– 方法2: 循環を調べる
– 方法3: フロイドの循環検出アルゴリズム : extra空間計算量O(1)# 1: ダブリング
ダブリングするだけです。ダブリングってなんだろう?という場合は[SlideShareのAtCoder167Dをダブリングで解く](https://www.slideshare.net/AkiraKANAI/atcoder167d-233579952)などを見てください。ただし、コストを計算する必要があるので、遷移のテーブルとコストのテーブルを持ちます。
costを計算するとき、今、`[loop][i]`にいるときは、`cost[loop-1][i]`に加えて、次の移動先である`nxt[loop-1][i]`を踏むコストである`cost[loop – 1][nxt[loop – 1][i]]`を足すところが少しごちゃっとするかもしれません。実装(P
AtCoder Beginner Contest 241 A~C 3完記事
アルゴリズムの学習改善のための自身の備忘録及び学習の一環として記事を書くことにしました.
読んでくれた方で何かありましたら気兼ねなくコメントしてください.お待ちしております.
# [A – Digit Machine](https://atcoder.jp/contests/abc241/tasks/abc241_a)
## 問題文
>1 桁の数字が表示される画面と、ボタンからなる機械があります。
>画面に数字 k が表示されているとき、ボタンを 1 回押すと画面の数字が a
kに変わります。
>0 が表示されている状態からボタンを 3 回押すと、画面には何が表示されますか?
## 制約
>0≤$a_i$≤9
>入力は全て整数である
## 入力
>入力は以下の形式で標準入力から与えられる。
>$a_0 \ \ a_1 \ \dots \ \ a_9$
## 考察
1回目の操作で0 $\rightarrow a_0$
2回目の操作で$a_0 \rightarrow a_{a_0}$
3回目の操作で$a_{a_0} \rightarrow a_{a_{a_0}}$となり、これが答えになる
Colabで車載カメラ映像からの先行車両検出に関する既存公開手法(YOLOP, YOLO v5s BDD100K)を動かしてみる
# 0.背景
* 車載カメラの画像に対する先行車両検出に関して以下の2つの公開されている手法を使ってみたのでメモとして残しておく。
1. [YOLOP](https://github.com/hustvl/YOLOP)
2. [YOLO v5s BDD100k](https://github.com/williamhyin/yolov5s_bdd100k)
* いずれもとりあえず動かすことを主眼にしている。
* 元々はSIGNATEの[SUBARU 画像認識チャレンジ](https://signate.jp/competitions/563)のために使用した。
* Google Colab + Google drive の環境での動作を前提としている。# 1. 共通事項
* 車載カメラ映像では [BDD100K](https://www.bdd100k.com/)という大規模なデータセットが公開されている。
* この頁で紹介する2つのモデルはいずれも、BDD100Kで学習されている。
* いずれも[SUBARU 画
頻出語が一目瞭然 | Word_Cloud | Python | DataViz
WordCloudとは、文章の中から単語を選び出し、その出現頻度によって単語の大きさを変えながら並べる手法です。Pythonのモジュール Word_Cloud を使って簡単に作ることができます。
Githubにも日本語での説明とともにレポジトリを載せていますので是非参考にしてください。
https://github.com/mikoto-studio/word_cloudこの説明では、求人の職務概要に出てくる頻出語を大きく表示させてみます。
デザイン性が高く一覧性に優れた分析がとても簡単にできるので、是非初心者の方にもおすすめです。
準備
–pythonバージョンチェック
Python -V
pipのパッケージチェック
pip list
pipからダウンロード:
pip insta
[Python] takes 0 positional arguments but 1 was givenエラーの解消
### 経緯
Pythonでtakes 0 positional arguments but 1 was givenとエラーが出た。直訳すると「引数は0のはずなのに一つ渡されている」とのこと。一つも渡していないはずなのに…。
“`python
class Test:
def test_method():
print(“test”)t = Test()
t.test_mothod() # Test.test_method() takes 0 positional arguments but 1 was given
“`### 原因と解決方法
Pythonのクラス内で定義した関数を外から呼び出す場合、自動的に第一引数にレシーバーが渡される。それを引き取るための引数を定義してあげる必要がある。慣習的にはselfを使う。“`python
class Test:
def test_method(self): # selfを追記
print(“test”)
“`### ちょっと確認
__selfの中には何が入っているのか?__
“`
Pythonでいい感じに書く
## 背景
最近、Pythonでソースコードを書くようになったのですが、
書き始めて半年ということでまだまだキレイな書き方、
効率的な書き方ができておりません。一緒に開発しているベテランエンジニアさんのソースコードを見て、
あぁ〜こういう風に書くのか〜、と勉強になったので
メモがてら記事にしてみます。## 通常のif文
通常は下記のように書きます。
“`
if a == ‘a’:
return True
else:
return False
“`
なんてことないif文ですが、単純なif、elseの場合は
あまりこういう風には書かないようです。## 1行にまとめたif文
上のif文は1行にまとめられます。
“`
return True if a == ‘a’ else return False
“`
要は三項演算子です。
ただ、JSやPHPなどの言語とは違って最初に(True)の時の処理が来て、
その後に条件式が来るんですよね。
これまでJS、PHPをメインで書いていたので、少し戸惑いましたw## 通常:for文でlistに追加
続いてはfo
【Python】injectorでDIコンテナを実装する
個人開発中、依存先が多いクラスをインスタンス化する場面がありました。
その時は依存先を全部インスタンス化→依存元をインスタンス化する時に引数で渡して実装しました。
1度だけなら問題になりませんが毎回この手順で実装する場合、実装の手間が増える上に可読性も下がります。 この問題を解消するためにDIコンテナを採用します。
DIコンテナをざっくりと説明すると、「インスタンス生成時に依存関係をいい感じに解決してくれる仕組み」です。
今回は “`injector“` モジュールを利用してPythonでDIコンテナを実現します。
### 環境
– Python3.8.10
– injector 0.19.0### injectorの採用理由
– 使用例を理解しやすかった
– 採用事例が多い(体感ですが)
– Pure Pythonだけで完結するため特定FWに依存しない
– 直近のコミットが2021年10月と比較的新しく、今後もメンテナンスが続くと見込まれるPythonのDI用ライブラリとしてinjectorの他には [python-injector](https://git
ROS2でyamlファイルからパラメータを設定する。
ROS2ではROS1と同様にノードにパラメータを設定することができます。
ROS2にはROS1であったようなパラメータサーバーはなく、ノード間でのパラメータのやり取りは個々のノードがパラメータサーバーの役割となり、やり取りをするようです。[ROS2のparameter概要 – Qiita](https://qiita.com/NeK/items/556a38782ce65bb81340)
パラメータの設定にはノード起動時にコマンドラインで指定する方法や、事前に用意したyamlファイルから読み込む方法があります。この記事では個々のノード間でのパラメータのやり取りは考えずに、シンプルにyamlファイルからパラメータをノードに読み込む方法について解説していきます。
この記事は、ROS2での基本的なノードの作成等チュートリアルを完了している人が対象となります。
【参考URL】
[YAMLファイルによるROS2のパラメータ設定 – Qiita](https://qiita.com/NeK/items/15bf1e657d8d694592ed)
[ROS2 YAML For Parame
Explanation of Evaluation index ‘MAP@5’ in Happywhale – Whale and Dolphin Identification Competition.

AWS Lambda(Python)から直接画像を出力する方法(覚書)
# SVGを出力したい
特に何も考えずに `Content-Type` だけしっかり指定してあげればOK。
“`Python
return {
‘statusCode’: 200,
‘headers’: {
‘Content-Type’: ‘image/svg+xml’,
},
‘isBase64Encoded’: False,
‘body’: ‘svg version=”1.1″ xmlns=”http://www.w3.org/2000/svg”>…’,
}
“`# PNGを出力したい
こっちが主題になります。
Pythonで画像を取り扱う場合、何らかのライブラリを使用することになると思いますが、今回はおそらく一番使われてるであろう[Pillow](https://github.co
Google ColaboratoryからBigQueryを実行する方法
N番煎じ。自分用のメモ。
# クエリを実行して結果を取得
まずはBigQueryのアカウント認証。
“`python
from google.colab import auth
from google.cloud import bigqueryauth.authenticate_user()
“`画面が起動するので、使用するGoogleのアカウントを選び、「許可」を選択。
次に、BigQueryのproject idを指定。project idはBigQuery上で確認できる。
“`python
PROJECT_ID = ‘xxxxxxxx’
“`さらに、dataframeとして扱うためにpandasをインポート。
“`python
import pandas as pd
“`関数も定義。
“`python
def dry_run(query):
client = bigquery.Client(project=PROJECT_ID)
job_config = bigquery.QueryJobConfig()
job
pythonでMetatrader5からヒストリカルデータをダウンロードする方法
# Metatrader5のダウンロード、設定
1. この[リンク](https://www.metatrader5.com/ja/download)からMetatrader5をダウンロードし、インストールしてください。
1. デモアカウントが存在するか確認し、存在しない場合デモアカウントを作成します。

3. ツールからオプションを開き、チャートバーに移動します。
3. チャートバーにある一番下のチャート最大バー数のパラメーターをUnlimitedに変更します。
 に引き続き、今回も北京オリンピックカーリング女子を題材に、敗戦即敗退のトーナメント方式を試していきたいと思います。
まずは、出場全10チームの総当たり対戦成績表を下記に示します。## 北京オリンピックカーリング女子の総当たり対戦成績表
| |スイス|スウェーデン|イギリス|日本|カナダ|アメリカ|中国
Raspberry Pi Pico に CircuitPytnon を使い SSD1306 に文字を表示する

以下の記事の Raspberry Pi Pico + CircuitPython 版です。
https://qiita.com/tkarube/items/6808538012cba499d5e2
まず Raspberry Pi Pico で CircuitPython が動く環境を作ります。公式ガイドは以下となります。
https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython
Raspberry Pi Pico 上の BOOTSEL とラベルがされたボタンを押しながら PC と USB ケーブルで接続します。 すると RPI-RP2 という名前でストレージが接続されるので以下からダウンロードした UF2 ファイルをダウンロード