Python3関連のことを調べてみた2022年01月11日

Python3関連のことを調べてみた2022年01月11日

PythonプログラムからOpenLDAPに接続&ユーザ情報を取得する

# はじめに

これまでJupyterHub/JupyterLabを利用した分析環境をVirtualBoxもしくはWSL2で整備してきたが、共通して認証にはOpenLDAPを使ってきた。

自宅PCでは自ずと筆者のみの利用ではあるが、会社(組織)で利用するならばユーザ管理をする必要がある。
どれだけのユーザがいて、いつパスワード変更をしたか、etc.

というわけで、OpenLDAPに登録したユーザの情報を取得するプログラムを書いてみようと思う。
なぜプログラムか?かというと、OpenLDAP操作用のWebUIにはFusionDirectoryやphpLDAPadminがあるものの、全ユーザの情報を一覧で取得するのはちょっと面倒と思った次第でして。

そこで、本稿では、**「PythonプログラムからOpenLDAPに接続&ユーザ情報を取得する方法」**を順に紹介してゆく。

## 本稿で紹介すること

– OpenLDAPの起動
– PythonプログラムでOpenLDAPへの接続
– PythonプログラムでOpenLDAPからユーザ情報の取得

## 本稿で紹介しないこと

元記事を表示

【Python3】python-ulidで一意なIDを作成する

## 環境

– Ubuntu20.04
– Python3.8.10
– python-ulid1.0.3

## 背景

### 前提事項

オブジェクト指向においてエンティティは「同一性によって識別されるオブジェクト」とされます。つまり、エンティティは一意なIDを持つ必要があります。(一意性が担保できればIDでなくても良いですが)

### 問題意識

今までIDの採番はRDBに任せていました。具体的にはidをautoincrementにしてinsertするときに自動採番するという方式です。

この方法には以下2つの問題があります。

1. DBにinsertするまでエンティティがIDを持たない。(つまり、エンティティの定義を満たしていない状況が生まれる)
2. IDというドメイン層の関心事がインフラ層(DB)の責務になっている。

この問題を解決するには次の要件を満たす手段が必要です。

1. ドメイン層で実現する
1. オブジェクト生成時にIDがセットされる
1. 一意性が担保されている
1. 一意である(DBの主キーとして利用するため)
1. 順序が担保されている(ソー

元記事を表示

Raspberry Piでsounddeviceを利用するための準備

## What is sounddevice?
[sounddevice](https://python-sounddevice.readthedocs.io/)は、[PortAudio](http://www.portaudio.com/)ライブラリのバインディングと、[NumPy](https://numpy.org/)配列で生成した信号を再生したり、[NumPy](https://numpy.org/)配列として録音するためのライブラリです。

## Setting audio output for Raspberry Pi
1. `sudo raspi-config`を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2275052/88a83139-9fd9-3d

元記事を表示

【簡単】django_restframeworkのjwt認証を最低限実装していく

# 目的
スロットリングの実装は以前に行い、APIを叩く回数に制限をかけることでブルートフォース攻撃などに対策を行なったが、**それだけでAPIに関するセキュリティが万全と言えるわけもない。**
**なぜなら誰でもAPIを叩ける状態になっているから。**そこでこのAPIを認証されたユーザーだけが制限された回数叩けるように認証周りを実装していきたい。

# 実施環境
### ハードウェア環境
| 項目 | 情報 |
|:-:|:-:|
| OS |macOS Catalina(10.15.7) |
|ハードウェア | MacBook Air (11-inch, Early 2015) |
|プロセッサ | 1.6 GHz デュアルコアIntel Core i5|
|メモリ | 4 GB 1600 MHz DDR3 |
|グラフィックス | intel HD Graphics 6000 1536 MB |
### ソフトウェア環境
| 項目 | 情報 |
|:-:|:-:|
| homebrew | 3.3.8 |
| mysql | Ver 8.0.27 f

元記事を表示

【MediaPipe】Holisticのランドマークの具体的な場所、座標取得・保存まとめ【Python】

自分用にMediaPipeのHolisticでlandmarkを取得した結果をまとめました。
holisticを使うと画像中の人物に対してpose, face, right_hand, left_handのランドマーク推定をまとめて行ってくれます。

#下準備
imageに対してmediapipeを適用します。

“`python:下準備
import mediapipe as mp
import cv2

# 初期設定
mp_holistic = mp.solutions.holistic
holistic = mp_holistic.Holistic(
static_image_mode=True,
min_detection_confidence=0.5)

image = cv2.imread(‘画像パス’)
results = holistic.process(
cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
“`

resultsにすべての結果が格納されています。
以下、resultsからそれぞれのランドマークを抽

元記事を表示

【Python】Python3.10以降の新機能 match文を使ってみる

### はじめに
`Python3.10` から `match文` が搭載されました。

`match文` は 従来の`if文` と異なり条件式に対応できないという、落とし穴があるのと、
if文と同じように、for文と組み合わせて使うことが多いと思ったので、そこら辺を記載しようかなと思います。

※注記※
正規表現にもmatch関数というものがあるので、混在しないように気をつけてください。完全に別物です。
正規表現のmatch関数については以下の記事を参考にしてみてくださいね。

[Python 正規表現のmatch関数](https://ai-inter1.com/python-regex-match/)

### 動作確認環境
OS: mac OS Monterey 12.1 (M1 Mac)
環境: miniforge (conda環境)
Python: 3.10.1
エディタ: Visual Studio Code

※注記※
必ず、Python 3.10.0以上で実行してください。

【Mac/python3.8】Twitter Bot that Tweets Every Hour!

# Objective

To create a twitter bot that tweets every certain period of time (In this project, every one hour) with tweepy

# Version

– python 3.8
– tweepy 4.4.0

# Get Developer Account for Twitter
To create developer account for twitter, go to
here
You may need to enable your e-mail and phone number for the Elevated account. You need to update your account from **Basic** plan

Python3 コーディング規約(PEP8-ja)

Python標準ライブラリのコーディング規約を整理します。Pythonのコーディング規約は[PEP8-ja](https://pep8-ja.readthedocs.io/ja/latest/)という文書にまとめられており、命名規則やインデントのルールが記載されています。

標準的なコーディングルールに準ずることでプログラムの可読性を向上させることができます。

### インデント

– インデントは1レベルにつき4つ
– 複数行を継続する場合は4つでなくてもよい
– タブではなくスペースでインデントをつける

### 1行の長さ

– 最大79文字
– docstringやコメント等のテキストは最大72文字
– 2項演算子の前で改行する

## 命名規則

|作成するもの|命名規則|
|-|-|
|パッケージ(ディレクトリ)|全て小文字
アンダースコアは非推奨|
|モジュール(ファイル)|全て小文字
アンダースコアは可|
|クラス名|CapWords(頭文字が大文字, それ以降はキャメルケース)|
|例外|CapWords
名前の末尾に「Error」を付ける|
|

kivyMD開発其の壱 初期公開説明篇

正月気分がようやく薄れ、またいつもの毎日が戻ってまいりました。(強制)

今年もよろしくお願いしまーす!(いろんな方が見てると思うので簡素に)

はい、ということで新年もKivyMDのお時間がやってきました!お正月気分は
まだ抜けてない人が多いでしょうかね。投稿者も全然抜けてはいません:joy::joy::joy:

というわけで、寒い中なんかお仕事も始まっていますが、(あと体重が増えたりも…)
なんかやる気でなーとなった方はこちらの記事でも読んでお正月気分を抜いてもら
えれば、この上なく幸いでございます。(おそらく抜けない)

強引に今日のお題に入っていきますが、まずは去年の年末にどんなことをやって
いたかと言うと、ギリギリ滑りこみセーフで1stAppのリリースを告知していま
した。なんそれ?そんなの知らないよという方は以下の記事を見てもらえればと
思います。

https://qiita.com/virty/items/3d03e5e2c8ec35a9117d

まぁ、全然大したことないTODOアプリでしかも完成はしていないんですけどね。。

今回はこちらのアプリの続編で、前回

Paiza 便利ツール

#入力

“`console:入力
1 2
“`
###一行複数値の入力(数固定)
“`python:コード
x, y = map(int, input().split())
print(x, y)
#1, 2
“`

###一行複数値の入力(数不定、list型)
“`python:コード
x = list(map(int, input().split()))
print(x)
#[1, 2]
“`

###複数行複数値の入力(2次元list型)

“`console:入力
1 2 3 4
5 6 7 8
9 10 11 12
“`

“`python:コード
data_list = [ list(map(int,input().split(” “))) for i in range(3)]
print(data_list)
#[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
“`

#初期化

##list

###1次元
“`
x = [0] * 4
print(x)
# [0, 0, 0, 0]

“`

##

Z-GISの農地データをQtのウィジェットに表示する

[Z-GIS](https://z-gis.net/99/index.html)という農地管理システムがあります。
これは、自分でプロットした農地の位置情報をEXCELファイルで管理してくれるというものなのですが、今回はこれで記録した自分の農地情報を読み出して、Qtで表示出来るようにするというお話です。

これが出来れば、Pythonで[Z-GIS](https://z-gis.net/99/index.html)のデータを扱う事が出来るので、Z-GISで出来ない事も、自分でなんとかする事が出来る可能性が出てきます。

本稿では、GISの知識が必要になります。
かといって、僕も専門家ではなくて、わかんない事をググって調べてるレベルなので、特に注釈やら解説はしません。もしかしたら用語の使い間違いもあるかもしれないですが、わからないので、とりあえずごめんなさい。
これ以上専門家になるつもりもないので、気づいたら笑ってください。

# 環境について
今回の開発にあたって使用していた環境は以下の通りです。
OS:Windows10
IDE:Pycharm 2021.2.3 (Community

Python for Everyone

#Hardware Overview
・CPUは中央処理装置。何百万ものトランジスタを載せている。命令は一連の信号。命令はメモリから得る。
・補助記憶にpythonファイルのようなファイルを作り、そこから主記憶に読み込まれて翻訳される。キャッシュを残して主記憶の速度を早める。
・主記憶は住んでいる場所のイメージ。CPUの質問に主記憶から答える。

#pytho基本文法(初心者向け)
初心者が混乱しがちな文法をまとめました。

##a+=1とは
a+=1は「a=a+1」という意味です。
+の部分は、-,*,/,%でも使えます。

##for構文
混乱したときは、このサイトがわかりやすいです。

python for文を初心者向けに解説!for文基礎はこれで完璧

特に注意したいのが、rangeを使うとき。
range(5)は、0〜4になってしまう。
1〜5にしたいときは、range(1,6)。
仮にrange(1,5)にすると、1〜4になる。(なぜだろう・・・。)

##try/except
例外処理の構文

“`

macOS Monterey (バージョン12.1) Python3.8.0がinstallできなかったときの対処法

macOS バージョン12にて、下記記事を参考にPython3.8.0をinstallしようとした際にエラーが発生

https://www.comp.tmu.ac.jp/s-yokoyama/misc/pythonmac.html

エラー内容

“`ターミナル:ターミナル
% pyenv install 3.8.0

//省略
error: implicit declaration of function ‘sendfile’ is invalid in C99 [-Werror,-Wimplicit-function-declaration]
ret = sendfile(in, out, offset, &sbytes, &sf, flags);
“`

試したこと
https://github.com/pyenv/pyenv/issues/1643

上記のgithub issuesを読むと、homebrewからこのエラーのパッチが出てるとのことなので、参考にターミナルで以下のコマンドを入力

pyenv 3.8.0のインストール

“`ターミナル:

【あったら便利】loggingは大事なのに書き方をいつも忘れてしまうのでメモ

# 目的
pythonのlogging機能を使ってエラーが起きたときなどにエラーログ等をターミナルに出力、ファイルに出力したいと思ったが、自分からするとちょっと複雑でなかなか覚えることができないため、ここに簡単に頻繁に使うものを記述していきたい。

#概要
### logging
下記全てのlogの親となるようなもの。
このloggingの設定はグローバル設定のようなもので、**この設定を変更すると下記のloggerなどの設定よりもとにかく一番優先される**
このloggingは複数作らない。

### loggers
loggingから派生されたloggingの子供、クラス(logging)に対する各インスタンスのようなもの。

### handlers
loggerの設定を扱う設定親のようなもの。
例えばconsoleに出力する用のlogger、ログファイルに出力する用のloggerと設定を変更したい場合に分けると良い。
ログファイルにはwarning/errorのみ出力するが、consoleにはdebugやinfoなども出力したい場合などにはAのloggerにconsole_ha

DearPyGuiをはじめる10行

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) スゴクよさそうなので最初のとっつきだけご紹介

#DearPyGuiとは?

https://github.com/hoffstadt/DearPyGui

DearPyGuiはpythonでグラフィカルなインターフェースを作るためのライブラリです。
DearImGuiというC++用のGUIフレームワークのpython版という位置づけのようです。
GPU対応のため動作も軽快で、アプリケーションやゲームも作れるそうです。
その素晴らしさはgithubを見れば一目瞭然です。

#インストール
Python 3.6 以上、64bitの環境で以下を実行します。

“`shel

SeleniumとMeCabを使えるJupyterLabコンテナイメージを作る

# はじめに

この2~3か月くらい、筆者は仕事でデータ収集(BeautifulSoupやSeleniumを使ったWebスクレイピング)と自然言語処理(MeCabを使った形態素解析とgensim使った単語の分散表現と感情分析)をする機会が増えてます。

過去の記事([※1](https://qiita.com/Blaster36/items/6dce4cf0b4ada88ef639))では、WSL上でGPUの使える分析環境を整備したのですが、用途に合わせた環境がまだまだ整っておらずちょっと仕事関係のプログラミングには使えてませんでした。
Pythonライブラリはpipコマンドで(PyPI参照して)インストールも簡単なのですが、SeleniumやMeCabはpipコマンド以外のインストール作業があったりで正直大変。。。

というわけで、SeleniumとMeCabを使えるコンテナイメージをビルドして、分析環境で使えるようにしようと思い立ちました。
Webブラウザ(Google Chrome)のVerupが進むと、Selenium(ChromeDriver)との整合性が崩れて動かなくなった

Raspberry Pi OSのインストールと設定

## Install Raspberry Pi OS
[RaspberryPi.com](https://www.raspberrypi.com/)にアクセスします。次に、[Software](https://www.raspberrypi.com/software/)のページにアクセスします。

そして、[Raspberry Pi Imager](https://downloads.raspberrypi.org/imager/imager_latest.exe)をインストールします。
Joy-ConでROS2の亀を動かす(ROS1からROS2へ移植)

# joycon_controller
こちらの[GitHub](https://github.com/Azicode/joycon_controller)に手順とソースをまとめてあります。
手早く動かしたい方は上のリンクを参照してください。
![VID_20220105_vertical_Trim.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556756/d751e586-c811-98d6-8741-dbe791133f54.gif)

## 本記事の内容
先に本題を書いておきます。
Joy-ConをROS2で使えるようにするにあたって、

– [1. ROS1からROS2へのPythonスクリプトの書き換え](#1-ros1からros2へのpythonスクリプトの書き換え)
– [1.1. rospyとrclpyの書き換え](#11-rospyとrclpyの書き換え)
– [1.2. Python2とPython3の書き換え](#12-python2とpython3の書き換え

djangoでmigrateをしたらtableがないと言われた件

# 目的
djangoでmigrateを行い、models.pyの変更を反映させようとしていたが、“`django.db.utils.OperationalError: table “テーブル名” already exists“`と言われてエラーが出てしまったため、何とかしたい。

# 結論

マイグレーションを最初の状態に戻し、マイグレーションファイルも削除し、もう一度マイグレーションをし直すことで解決した。

# 実施環境
### ハードウェア環境
| 項目 | 情報 |
|:-:|:-:|
| OS |macOS Catalina(10.15.7) |
|ハードウェア | MacBook Air (11-inch, Early 2015) |
|プロセッサ | 1.6 GHz デュアルコアIntel Core i5|
|メモリ | 4 GB 1600 MHz DDR3 |
|グラフィックス | intel HD Graphics 6000 1536 MB |
### ソフトウェア環境
| 項目 | 情報 |
|:-:|:-:|
| homebre

python loggingモジュール

#1 概要
既存システムのロギングの改修
## (1) 既存システム
(ⅰ) WEBアプリケーション  
(ⅱ) 同一ソースコードで2つのプロセス(workerではない)が動いている
(ⅲ) 2つのプロセスは同じログファイルに出力される。
(ⅳ) ログローテートされていない。

## (2) 改修ポイント
①[(1) 既存システム]の(ⅲ)について
 ⇒別々のログファイルに出力する。

②[(1) 既存システム]の(ⅳ)について
 ⇒ログローテーションを実施。

## (3) 実装
[(2) 改修ポイント]の①について
 ⇒プログラム起動時に別々の設定ファイルを読み込む設定を処理に修正。

[(2) 改修ポイント]の②について
 ⇒ログローテート間隔のバックアップ数はログ設定ファイルで対応可能
 ⇒圧縮処理は別途実装が必要となる。

使用するロギングクラス
TimedRotatingFileHandler
https://docs.python.org/ja/3/library/logging.handlers.html?highlight=logging%20hand