- 1. [AtCoder]Pythonのそれぞれの操作の計算量と代替案
- 2. プライベートIPアドレスの範囲をリアルな縮尺で示した図を作った
- 3. pythonでAWS Lambda のレイヤー機能を利用する
- 4. Stable Diffusionの最新モデル「SDXL 1.0」と過去モデルの生成画像をひたすら比較して進化を実感してみた
- 5. MacでAtcoderの入力を受け取る環境を整える【Python】
- 6. Raspberry Pi 4Bでneopixel(WS2812B)をSPIで制御してみた
- 7. Qiita の投稿規定
- 8. injector(DIコンテナ)の隠蔽
- 9. 【python】ttkbootstrapメータを表示
- 10. 【FastAPI】PydanticでIPv4Addressのインポートエラーが出る理由とは?
- 11. PythonでIAMユーザーのリストを取得し、差分チェックを取得するためのスクリプト
- 12. bit全探索まとめ
- 13. Pythonで絵文字を認識する方法(無駄記事)
- 14. UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x87
- 15. PFRL(v0.4.0)を利用して強化学習プログラムを動かしてみる件
- 16. AiFlowと DAG内でできるタスク生成について超ざっくり書いてみる
- 17. MacBook(M2)にインストールしたStable DiffusionのAPIをPythonで呼び出して画像を生成してみた
- 18. ABC311、F問題の初心者的解説
- 19. 複数の.MTSファイルを.MOVや.MP4に一括で変換する
- 20. Disjoint Setの計算量
[AtCoder]Pythonのそれぞれの操作の計算量と代替案
# はじめに
著者は水色コーダーで、pythonのみを用いてAtCoderに取り組んでいます。
競プロでコードを書く際に計算量がオーバーしないかは大切な指標です。
それぞれの操作の計算量については以下の記事で綺麗にまとまっています。
[Pythonistaなら知っておきたい計算量のはなし](https://qiita.com/Hironsan/items/68161ee16b1c9d7b25fb)ここでは、計算量ごとに水色問題(ABCのE問題程度)まででよく使う操作をまとめました。基本的に最悪計算量で記載しています。
また、計算量がオーバーしがちな操作の対処法や代替案を記載しております。基本的にAtCoderの問題では定数倍が原因となり計算量がオーバーすることは少ないです。
そのため同じ計算量で別の処理に書き換えるのでなく、O(N)をO(logN)にするなど、根本的な改良が求められるケースが多いです。## O(1)
基本的にこれらの操作は計算量として問題にならないです。
TLEの場合は他の操作が原因の可能性が高いです。### 一般
~~~Python
#数値の初期化、
プライベートIPアドレスの範囲をリアルな縮尺で示した図を作った
# プライベートIPアドレスの範囲を図で示す
IPv4では、全アドレス空間`0.0.0.0~255.255.255.255`のうち以下のa,b,cの範囲をプライベートIPアドレスとして使用します:
a. 10.0.0.0 ~ 10.255.255.255
b. 172.16.0.0 ~ 172.31.255.255
c. 192.168.0.0 ~ 192.168.255.255これらの範囲を**模式的に**図示するとこんな感じです:
![privateIP_moshiki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150194/20973824-5e13-24c7-7f57-c271b3d0e115.png)
「グレーの範囲がプライベートIPの範囲です」と言われれば、そうですねと答えるしかない図ですが、しかしこの図は誇張しすぎです。グレーの範囲はもっと狭いはずです。どういうことかというと、すべてのアドレスの数は$2^{32}$ = 4,294,967,296通り(約42億)で、実際のと
pythonでAWS Lambda のレイヤー機能を利用する
# はじめに
前回、pythonでAWS Lambda を業務利用で量産するにあたって、自分があると便利だと思うクラス構成の雛形を記事で公開しました。
今回は、その続編です。
(前回はこちら)https://qiita.com/Syoji_Yonemoto/items/7e8a7668358798656932
基底クラス達を、レイヤーに登録して複数Lambda関数から使いまわすと便利なので、レイヤー機能へ登録するためのメモ書きです。
# 公式ドキュメント
別言語(NodeJS)でもレイヤー機能を使ってるのですが、よくドキュメント迷子になるので、重要なページをメモ書き。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html#configuration-layers-path
<抜粋>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/55deb790-40e6-
Stable Diffusionの最新モデル「SDXL 1.0」と過去モデルの生成画像をひたすら比較して進化を実感してみた
[Supership](https://supership.jp/)の名畑です。[週刊少年ジャンプ](https://www.shonenjump.com/j/)34号に掲載された[小園江ナツキ](https://twitter.com/osonoeosonoe)先生の読切漫画「[殺陣ロール](https://togetter.com/li/2192828)」好きです。
## はじめに
7月27日についに[Stable Diffusion](https://ja.stability.ai/stable-diffusion)の新モデル**SDXL**の**1.0**がリリースされました。当初の予定よりは遅れたものの、**0.9**がリリースされた6月23日から1月程度での高速リリースです。
**SDXL 0.9**の際に「[Stable Diffusionの最新モデルSDXL 0.9と過去モデルで生成画像を比較してみた](https://qiita.com/nabata/items/1b1fbc362d71dc76237b)」という記事で**Stable Diffusion**にお
MacでAtcoderの入力を受け取る環境を整える【Python】
競プロの入力例を簡単に受け取る環境作りを紹介します。
## 記事の概要
| やること | 効果 |
| — | — |
| ファイルの準備
・入力例を受け取るためのファイル
・コードを書くためのファイル | 2つの画面で、入力例を見ながらコードを書ける。自分で入力例を作成する際も便利。 |
| 標準入力セットをスニペットに登録| 入力を受け取るためのコードを書く手間が省ける。 |
| ローカルでの入力受け取りの記述を、提出用に自動変換| 提出用のコードに自分で書き換える手間が省ける。 |
| Atcoderから入力例を自動で読み込む | 問題の入力例をコピペする手間が省ける。 |試行錯誤しながらの方法なので、まだ最適でないかもしれません。より良いやり方思いついたら、ぜひコメントで教えてください。
## 環境
– OS : macOS
– エディター : Visual Studio Code
– 言語 : Python(Jupyter Notebook使用)## 1. ファイルの準備
まずは、以下のようにフォルダ内に2つのファイルを作成します。
Raspberry Pi 4Bでneopixel(WS2812B)をSPIで制御してみた
# 結論
* [adafruit-circuitpython-neopixel-spi](https://pypi.org/project/adafruit-circuitpython-neopixel-spi/)を使用する
* 本家の[adafruit-circuitpython-neopixel](https://pypi.org/project/adafruit-circuitpython-neopixel/)はSPIに正式対応していない。
* NeoPixel_SPIのインスタンス化の際に、引数に”bit0=0b10000000″を入れる。
* bit0はNeoPixel dataをSPI dataに変換するための値
“`python
import board
import neopixel_spi
pixels = neopixel_spi.NeoPixel_SPI(
board.SPI(),
n = 10, # LEDテープの連結数を指定。今回は10個
brightness=0.01,# 明るさの指定
auto_write
Qiita の投稿規定
**Markdown 記法についてのページもちゃんと用意されているのに**,多くの人は無頓着に投稿されるようです。
https://qiita.com/Qiita/items/c686397e4a0f4f11683d
余計なお世話ですが,以下の2項目だけを特にお願いします。
![スクリーンショット 2023-07-30 23.29.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611739/5fd44646-b3eb-e709-8c67-85f3a46c48d7.png)
![スクリーンショット 2023-07-30 23.27.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611739/d5c1e656-1b0f-29d6-5328-b5e6ee8d0ac4.png)
injector(DIコンテナ)の隠蔽
[前々回](https://qiita.com/odxdoge/items/6031419f9461a8775d98)と[前回](https://qiita.com/odxdoge/items/2d1924e7d4fbe92e9969)の続きです。
クラスの依存関係の管理方法について解説しました。
injectorの実用的なテクニックについて深掘りします。## アーキテクチャ設計と実装
今までのコードでDIの考え方について解説してきました。また、その実装をライブラリを使って実現する方法についても示してきました。このようにアプリケーションのアーキテクチャを設計し、決定した場合、その後実装を行うはずです。
しかし、実際にAWS Lambdaで実装すると、ひとつ思うことがあります。
lambda handlerの最初にinjectorインスタンスを作成し、設定を行う必要があり、複数のLambdaを運用すると重複したコードになります。これにはいくつかの問題が挙げられます。
– 関係するすべてのLambda実装者がinjectorについて理解している必要があります。
– injecto
【python】ttkbootstrapメータを表示
今回もttkbootstrapで作成した成果物を記録として残します。
今回作成したのはメータを表示するプログラムです。コンボボックスでwindowのカラーを選択できるように修正致しました。
### 成果物
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/1787708e-98c2-94ce-0628-d8ce2fa14406.png)ボタンを押下したら%が増加したり、減ったりします。
一番上のボタンには現在のパーセントが表示されます。### ソースコード
“`python
from tkinter import *
import ttkbootstrap as tbroot = tb.Window(themename= “morph”) # カラーを決める事が出来る。
root.geometry(‘500×570’)def up():
my_meter.step(10)def down():
my_meter.step(-10)
【FastAPI】PydanticでIPv4Addressのインポートエラーが出る理由とは?
# 概要
FastAPIで`pydantic`を使ったコードを実行したら、以下のエラーが出た。
`IPv4Address`とはなんぞや?`pydantic`と関係あるの?と思ったので調べてみました。“`
from pydantic import BaseModel
File “pydantic/__init__.py”, line 2, in init pydantic.__init__
File “pydantic/dataclasses.py”, line 43, in init pydantic.dataclasses
# || No action: no method is added. |
File “pydantic/error_wrappers.py”, line 4, in init pydantic.error_wrappers
File “pydantic/json.py”, line 5, in init pydantic.json
ImportError: cannot import na
PythonでIAMユーザーのリストを取得し、差分チェックを取得するためのスクリプト
## はじめに
– 自己学習の一環として、ShellScript以外で簡単なコードを作成しながら、自身の理解を深めるために、解説をする記事です## スクリプトの内容
– IAMユーザーを読み込んで、別で準備したリストと比較し、差分を抽出してくれます## 環境
– MacOS Monterey(12.6)## 事前準備
– このコードを実行するにあって、以下のポリシーが最低限必要となります
– 自分のアカウントに付与していない人は、あらかじめ付与してください
– [iam:ListUsers ドキュメント](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html)“` json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “IAMUserPermissions”,
“Effect”: “Allow”,
“Action”: “iam:ListUsers”,
“Reso
bit全探索まとめ
# bit全探索まとめ
## この記事は何
今回の記事では復習兼見返す用にbit全探索をまとめていきます。実装言語はpythonとなっています。なにか気づきや指摘等ございましたらコメントください!
## bit全探索とは
bit全探索ってなんでしょう。この項では主に三つの観点からまとめていければと思います。
1. 使用場面
2. 実装方法
3. 他のアルゴリズムとの比較
### 1.使用場面
結論から述べると以下の条件を満たす際bit全探索の恩恵が得られると思います。
* 「N個の要素からなる集合の部分集合全体を判定する問題」
* 「大体$N\le{20}$の範囲」例をあげると『使う・使わないを全探索』『選ぶ・選ばないを全探索』する問題などがあげられます。
### 2.実装方法
大きく分けるとbit全探索の実装は二つのステップからなります。
1. **全ての部分集合を列挙する。(pythonでは二つの列挙方法があります。)**
itertoolsのproductを用いてタプルで列挙する場合
“`python
from itertools import pr
Pythonで絵文字を認識する方法(無駄記事)
# 概要
絵文字同士の比較をする際、そのまま(e.g. `”?” == “?”`)だとエラーが出た。
`ord()`をかませると上手くいった。
“`python
a = “?”
if len(a) == 1 and ord(a) == ord(“?”):
print(“OK”)#console: OK
“`# 経緯
Discord Bot 作成中、絵文字メッセージがトリガーの関数を実装しようとした。# 振り返り
執筆にあたりやり直したところ、直接比較で全く問題なかった。
ダブルクオーテーションを付け損ねていたのだのだろうか。
UnicodeDecodeError: ‘cp932’ codec can’t decode byte 0x87
encoding=”utf-8″ を追加
“`python
with open(f, ‘r’, encoding=”utf-8″):
“`
PFRL(v0.4.0)を利用して強化学習プログラムを動かしてみる件
[PFRL(v0.3.0)を利用して強化学習プログラムを動かしてみる件](https://qiita.com/muzzumuzu/items/25a8e6daaf4691c0bbbc) にてPFRL(v0.3.0)を動かしてみましたが、当該記事を書いた直後に、v0.4.0がデプロイされたので、それを試してみました。
以下は私の環境です。
“`
Ubuntu 20.04
NVIDIA-SMI 530.30.02
GeForce RTX 2080 Ti
CUDA 12.1
“`
とりあえず、クリーンな仮想環境を利用して、python3.8ベースで環境を作成します。
“`
$ virtualenv env -p python3.8
$ source env/bin/activate
(env)$ pip install pfrl
“`
そして、pfrlのexampleである、train_dqn_gym.pyを動かしてみます。
“`
(env)$ python train_dqn_gym.py
…
ModuleNotFoundError: No module named ‘pa
AiFlowと DAG内でできるタスク生成について超ざっくり書いてみる
# AirFlowとは?
一言で表すと **実行タスクのワークフロー管理プラットフォーム**です。
対応言語はPythonのみです。(2023/07時点)「DAG」と呼ばれる、AirFlow上でPythonコードを実行するための書き方を使用してます。
もう少し詳しく書くと、
Pythonコード内で処理タスクを生成し、各タスクに依存関係を持たせます。
AirFlowはワークフローを管理してるので、「DAG」で定義されたタスクを順番に実行している、ということです^^# タスクの生成
処理したい内容によって、**動的**にタスクを生成、**静的**にタスクを生成することを使い分けましょう。##### 静的にタスクを生成したい場合
主に日次で動かすチェック処理や、スナップショット作成や、簡単な単体テストで用いることが多いです。
・処理の内容が固定で決まっている場合
・処理するデータが単一の場合##### 動的にタスクを生成したい場合
外部から複数データが連携される場合や、洗い替えDBの登録データ数に応じてなど、ユーザー起因で処理が実行されるケースで用いることが多いです。
MacBook(M2)にインストールしたStable DiffusionのAPIをPythonで呼び出して画像を生成してみた
[Supership](https://supership.jp/)の名畑です。今期アニメの[AIの遺電子](https://ai-no-idenshi.com/)が原作連載開始されたのは8年近く前なわけですが、現代においては、さらに迫って感じられます。
## はじめに
前回の記事[Stable Diffusion web UIをMacBook(M2)にインストールして画像の生成をしてみた記録](https://qiita.com/nabata/items/81dcc430aa03fc0b0f45)では**web UI**(ブラウザ)を経由して[Stable Diffusion](https://ja.stability.ai/stable-diffusion)の画像生成を行いました。
今回は**web UI**を経由せずに、PythonからローカルのAPIを叩いて画像の生成を行ってみます。
## 環境設定
[前回の記事](https://qiita.com/nabata/items/81dcc430aa03fc0b0f45)で行った環境構築が完了していることが前提です。
ABC311、F問題の初心者的解説
# 0. はじめに
AtCoder Beginner Contest 311(ABC311、トヨタ自動車プログラミングコンテスト2023#4)のF問題について、解説を読んでもよく分かりませんでした。初心者的に樹形図的に考えてなんとかACしたので、自分で解説を書いてみました。
本記事の内容は、つぎのとおりです。
1. 問題設定、「美しいグリッド」について
2. 樹形図による数え上げ(辞書型で実装)
3. テーブル中の累積和による高速化
4. 終わりに# 1. 問題設定、「美しいグリッド」について
美しいグリッドの定義からは、解法に必要な以下の二点が導かれます。
* 各列の最も上にある「#」の位置が必要。
* 各列を左から右($j$の増加方向)に調べる。問題文の定義から、美しいグリッドは直角二等辺三角形の近似表現である事が分かります。ある一点 $(i, j)$ が「#」ならば、その下 $(i+1, j)$ と右下 $(i+1, j+1)$ が「#」となり、これが下方($i$増加方向)へ延々と続きます。この直角二等辺三角形の形状、加えてそれが複数重なってできる鋸歯状の形状が数え
複数の.MTSファイルを.MOVや.MP4に一括で変換する
## 背景
AVCHD内の.MTSファイルをmp4に一括変換したかったのですが、フリーソフトにろくなもんがないため、chatGPTに教えてもらいながらpythonでそれを実行できるコードを書きましたffmpeg(v6)を使用しているので、ffmpegが対応してるコーデックならなんでも変換できるはず(未検証)
## 簡単な機能説明
・指定ディレクトリ内の.MTSファイルを.mp4に変換して別の指定ディレクトリに置く
・その際ファイル名は動画ファイルの撮影日時を使用(2023-07-25-14-32.mp4みたいな)
・コマンドラインで簡単めに実行できるといい## 前提
Macで動くことを確認してます(一応windowsでも動くはず)
pythonのバージョンは`3.11.4`です## セットアップ
1. 任意の場所に`mp4-converter.py`を作成する
2. 下記のコードを貼り付け後保存
“`python
import os
import argparse
import datetime
import platform
from tqdm import tqdm
Disjoint Setの計算量
# 1. Introduction
競技プログラミングで度々出てくるDisjoint Setの計算量が気になったため、計算量を求めてみた。# 2. Algorithm
Disjoint Setは下図のようなノードの要素が互いに素な集合(1つのノードが複数の集合に属することのない集合)を持つデータ構造である。構築は以下の操作に基づく。詳細のアルゴリズムは後述に記載する。
– make-set($n$):各集合にノードがただ一つのみの$n$個の集合を用意
– find-root($x$):ノード$x$のrootノードを取得→ノード$x$がどの集合に属するかを判別
– union($x, y$):ノード$x$とノード$y$を合併![スクリーンショット 2023-05-31 23.56.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656963/f2752c75-c11d-8184-dc91-8310bdd200e1.png)
※改良によって削除に対応したアルゴリズムは[こちら](http: