へっぽこプログラマーの備忘録
プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
Home
›
Archives for 2023
2023/12/25
GitLab Pages でディレクトリ一覧を表示したい
update
event_note
label
GitLab
GitLab Pages で公開しているサイトにアクセスしたときに、配下ディレクトリの一覧を表示させる方法です。
Read more
続きを読む »
2023/12/20
GitLab Pages でブランチ毎にディレクトリを分けて公開したい
update
event_note
label
GitLab
mkdocs で作成したサイトを GitLab Pages で公開していたのですが、これをブランチ毎にディレクトリを分けて公開するようにしました。
Read more
続きを読む »
2023/12/01
[Python] ModuleNotFoundError: No module named 'websockets.legacy' のエラーが出た
update
event_note
label
Python
Python のアプリを Nuitka で実行ファイルにして動かすと、Websockets に関するエラーが出ました。
Read more
続きを読む »
2023/11/21
[Docker] Windows コンテナを動かす
update
event_note
label
Docker
label
Windows
Docker Desktop を使わずに、Windows 10 に Docker のバイナリを直接インストールして、Windows コンテナを動かすまでをやってみました。
Read more
続きを読む »
2023/11/17
[Python] Pyinstaller, Nuitka で作成した実行ファイルで GLIBC のエラーが発生する
update
event_note
label
Python
pyinstaller, nuitka で作成した実行ファイルを別のマシンで実行するとエラーが出て動きませんでした。
Read more
続きを読む »
2023/11/14
[Docker] docker-compose の --scale でコンテナを複製した際に、コンテナ側で何番目のコンテナなのかを判別したい
update
event_note
label
Docker
本来、スケールは大きな負荷を処理できるようにするために使用し、スケールしたコンテナ毎に異なる構成を使用すべきではないと思いますが、それでも、スケールしたコンテナ毎にぞれぞれ別の構成が適用できると便利な場合もあります。 その場合、複製したコンテナ内で、自身が何番目のコンテナなのかを把握できるのが最も都合が良いと考えます。
Read more
続きを読む »
2023/11/13
[Python] pytest で motor のテストを行う
update
event_note
label
Python
MongoDB 用の非同期ライブラリに motor を使用しており、pytest でテストコードを記述する際にモックをどうすればいいか悩みました。
Read more
続きを読む »
2023/11/12
image
NO IMAGE
シェルスクリプトで sudo 権限で実行されているどうかをチェックする
update
event_note
label
Linux
`id -u` コマンドを使用して実行ユーザーの UID(ユーザーID)を確認することでチェックできます。
Read more
続きを読む »
2023/10/19
Rocket.Chat 移行後にアップロードファイルの URL が古いままになっている
update
event_note
label
rocketchat
Rocket.Chat を移行したのですが、アップロード済みファイルの URL と、サイト URL のリセット値が、移行前の古い URL のままになっていました。
Read more
続きを読む »
2023/10/11
Rocket.Chat のアップグレード手順
update
event_note
label
MongoDB
label
rocketchat
アップグレード手順については以下に記載されています。
Read more
続きを読む »
2023/09/08
[Python] OS の時刻(システムクロック)に影響を受けないように時間の計測を行う
update
event_note
label
Python
`time.monotonic()` を使えば OK です。
Read more
続きを読む »
2023/08/25
image
NO IMAGE
YAML のアンカー/エイリアスと docker compose の profiles を使って docker-compose.yml を作成する
update
event_note
label
Docker
label
yaml
github などで公開されている docker-compose.yml を見ていると、見慣れない表記を見かけることがあり、調べてみると YAML のアンカー/エイリアス機能であることがわかりました。
Read more
続きを読む »
2023/08/21
`ImportError: cannot import name '_compare_version' from 'torchmetrics.utilities.imports'` のエラーが出る
update
event_note
label
Python
label
StableDiffusion
Stable Diffusion を動かそうとして以下のエラーが出ました。
Read more
続きを読む »
2023/07/20
[VSCode] Markdown Preview Enhanced で HTML 出力する際にサイドバーの目次を入れる
update
event_note
label
VSCode
ずっとやり方が分からなかったのですが、英語版のマニュアルにやり方が書いてありました。
Read more
続きを読む »
2023/07/14
image
NO IMAGE
WSL でディストリビューションを削除して再インストール後に起動エラーになる
update
event_note
label
Windows
label
WSL
スタートメニューから Ubuntu 20.04 をアンインストールして、再度 MS ストアからインストールして起動しようとしたら以下のエラーが表示されました。
Read more
続きを読む »
2023/07/06
image
NO IMAGE
Microsoft ストア版の WSL をインストールする
update
event_note
label
WSL
label
WSL2
WSL について、Windows のコンポーネント(組み込み)として提供されているものと、Microsoft Store で提供されているものがあるのを知りました。
Read more
続きを読む »
2023/07/02
image
NO IMAGE
EasyTAG 2.4.3 で画像がある場合に mp3 ファイルのタグ書き込みに失敗する
update
event_note
label
EasyTag
label
Windows
Windows で EasyTAG 2.4.3 の場合に発生します。
Read more
続きを読む »
2023/06/14
image
NO IMAGE
systemd で環境変数を展開する
update
event_note
label
Linux
環境変数を参照する Python アプリを systemd でサービス化したときにかなりはまってしまいました。
Read more
続きを読む »
2023/06/12
VSCode で現在アクティブなタブの背景色を変更する
update
event_note
label
VSCode
Visual Studio Code のエディタで現在アクティブなタブの背景色が、デフォルトだと他のタブとあまり変わらなくて分かりづらいので、設定で変更しました。
Read more
続きを読む »
2023/05/27
image
NO IMAGE
Telegraf で Jetson の GPU 情報を取得する
update
event_note
label
Docker
label
NVIDIA
label
Telegraf
Telegraf で GPU 情報を取得しよううとしたのですが、Jetson には `nvidia-smi` のコマンドがありません。
どうしようかなと思っていたら、以下の記事に Jetson で GPU 情報を取得する方法が書いてありました。 - https://www.influxdata.com/blog/nvidia-jetson-series-part-1-jetson-stats/ これを参考に、InfluxDB にデータを保存し、Grafana で可視化まで行いました。 尚、TIG Stack (Telegraf, InfluxDB, Grafana) については以下を参考にしてください。 - https://kuttsun.blogspot.com/2021/12/telegraf-influxdb-garafana.html ## 環境 - Jetson Xavier NX - Ubuntu 18.04 - Telegraf 1.23.0 Telegraf, InfluxDB, Grafana は Docker で動作させています。 ## Jetson Stats のインストール まずはホストに Jetson Stats をインストールします。 ```sh $ sudo apt-get update $ sudo apt-get install python3-pip $ sudo -H python3 -m pip install -U jetson-stats ``` インストール後、一度ログアウト or 再起動します。 `jtop` を実行して動作確認します。 ## Telegraf の設定 Jetson Stats を使って GPU の情報を取得する python スクリプトを作成し、それを Telegraf から定期的に実行するようにします。 ただし、今回 Telegraf は Docker コンテナで動かしているので、上記の記事そのままでは上手く行きません。 ### Python スクリプトの作成 上記の記事にある以下のスクリプトを `jetson_stats.py` という名前で保存しました。 ```py # Import jtop python library. We will use this to access the Jetson_Stats service. from jtop import jtop import json, datetime if __name__ == "__main__": with jtop() as jetson: # jetson.stats provides our system measurements as type dict. tmp = jetson.stats # time and uptime are proved as time objects. These needed to be converted before passing as a JSON string, tmp["time"] = str(tmp["time"].strftime('%m/%d/%Y')) tmp["uptime"] = str(tmp["uptime"]) # We then convert our dict -> Json string influx_json= {"jetson": tmp} print(json.dumps(influx_json)) ``` このスクリプトを Telegraf から定期的に実行することになります。 ### Dockerfile の作成 今までは Telegraf の Docker イメージをそのまま使っていましたが、このコンテナには Python の実行環境が入っていないため、上記の Python スクリプトを動かすことができません。 そこで、以下のような Dockerfile を作成しました。 ``` FROM telegraf:1.23.0 ARG DEBIAN_FRONTEND=noninteractive COPY jetson_stats.py /usr/local/bin/ RUN apt update && \ apt install -y --no-install-recommends \ python3 \ python3-pip \ python3-setuptools \ python3-wheel && \ apt autoremove && apt clean && rm -rf /var/lib/apt/lists/* RUN pip3 install \ jetson-stats ``` `jetson_stats.py` をイメージ内にコピーし、あとは Python の実行環境と Jetson Stats をインストールしています。 ### docker-compose.yml の変更 コンテナ内で Jetson Stats を使うためには、`/run/jtop.sock` をマウントする必要があるようです。 ただ、それだけではアクセス権限の関係で以下のようなエラーが表示されました。 ``` jtop.core.exceptions.JtopException: I can't access jetson_stats.service. ``` Docker コンテナの実行ユーザーを `/run/jtop.sock` の所有グループに加えたら解決できたので、`group_add` のプロパティを追加します。 - https://github.com/rbonghi/jetson_stats 以上を踏まえ、docker-compose.yml を以下のように変更しました(今回に関連する部分のみ抜粋)。 ``` services: telegraf: image: telegraf-python:latest container_name: telegraf hostname: ${HOSTNAME:?} environment: - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=all deploy: resources: reservations: devices: - capabilities: [gpu] restart: unless-stopped ports: - 6514:6514 volumes: - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /usr/bin/nvidia-smi:/usr/bin/nvidia-smi:ro # 以下は Jetson Xavier NX 用 - /run/jtop.sock:/run/jtop.sock:ro # https://github.com/rbonghi/jetson_stats user: ${TELEGRAF_UID_GID:?} group_add: - "${JTOP_GID:?}" ``` ### 環境変数の追加 上記の docker-compose.yml 内にある `JTOP_GID` という環境変数を定義します。 `~/.bashrc` に以下を追記します。 ``` export JTOP_GID=$(stat -c '%g' /run/jtop.sock) ``` 再読み込みします。 ```sh ~$ source .bashrc ``` これで、`/run/jtop.sock` の所有グループを `JTOP_GID` で参照できます。 ### telegraf.conf の設定 `telegraf.conf` に以下を追記します。 ``` [[inputs.exec]] ## Commands array commands = [ "python3 /usr/local/bin/jetson_stats.py" ] ## Timeout for each command to complete. timeout = "5s" ## measurement name suffix (for separating different commands) name_suffix = "_jetson_stats" ## Data format to consume. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md data_format = "json" ## Array of glob pattern strings or booleans keys that should be added as string fields. json_string_fields = ["jetson_uptime", "jetson_nvp model", "jetson_NVENC", "jetson_NVDEC", "jetson_NVJPG"] ``` 内容は前述の参考記事の中身そのままです。 ### テスト Docker コンテナに入って、以下のコマンドを実行します。 ``` python3 jetson_stats.py ``` json が取得できていれば OK です。 ## Grafana のダッシュボードを作成 Jetson Stats 用のテンプレートがないかなと探してみましたが、見つかりませんでした。 どうやら自分で作成するしかなさそうです。 参考として、`jetson_stats.py` を実行したら以下のような出力が得られます(わかりやすいように整形しています)。 ```json { "jetson": { "time": "09/14/2022", "uptime": "0:40:39.970000", "jetson_clocks": "OFF", "nvp model": "MODE_10W_DESKTOP", "CPU1": 16, "CPU2": 13, "CPU3": 13, "CPU4": 14, "CPU5": "OFF", "CPU6": "OFF", "GPU": 0, "MTS FG": 0, "MTS BG": 0, "RAM": 1413804, "EMC": 1413804, "SWAP": 0, "APE": 150, "NVENC": "OFF", "NVDEC": "OFF", "NVJPG": "OFF", "fan": 0.0, "Temp AO": 42.0, "Temp AUX": 42.0, "Temp CPU": 42.5, "Temp GPU": 41.5, "Temp thermal": 42.15, "power cur": 4166, "power avg": 4166 } } ``` これらの値が InfluxDB に格納されているはずなので、その値を使ってダッシュボードを作成していきます。 尚、各プロパティの説明は以下にありました。 - https://rnext.it/jetson_stats/jtop.html#jtop.jtop.jtop.stats 単位くらい書いておいてほしいなぁ〜。
## 参考 URL - https://www.influxdata.com/blog/nvidia-jetson-series-part-1-jetson-stats/ - https://github.com/rbonghi/jetson_stats - https://github.com/rbonghi/jetson_stats/issues/63 - https://qiita.com/manabuishiirb/items/a2620ec8020811540d81 - https://grafana.com/grafana/dashboards/14493-nvidia-jetson/
Read more
2023/05/23
image
NO IMAGE
MongoDB と 2106 年問題
update
event_note
label
MongoDB
ボタン電池がなくなり、RTC が遥か未来になったときに MongoDB が動作しなくなりました。(正確には、Python アプリにおいて、MongoDB の初期化を行う際にエラーとなりました。)
Read more
続きを読む »
2023/05/12
[Docker] docker-compose の env_file 内でシェルスクリプトを実行する
update
event_note
label
Docker
Docker Compose の env_file ディレクティブを使用する場合、原則として env_file に指定されたファイル内でシェルのシンタックスを使用することはできません。
Read more
続きを読む »
2023/04/05
[Python] SyslogHandler でログを送信したときに `Bad file descriptor` のエラーになる
update
event_note
label
Python
SyslogHandler を使ってログを記録していたのですが、`Bad file descriptor` のエラーが表示されてはまってしまいました。
Read more
続きを読む »
2023/04/04
[Python] マルチプロセスにおけるロギング (QueueHandler, QueueListener)
update
event_note
label
Python
SyslogHandler で UDP でログを記録していたのですが、マルチプロセスでは Socket 通信のところでエラーが発生しました。 マルチプロセスでのロギングでは、`QueueHandler` と `QueueListner` を使ってログを一箇所に集約して書き込むようにする必要があります。
Read more
続きを読む »
2023/03/28
[PySide] QTimer の使い方
update
event_note
label
PySide
label
Python
スレッドを使わずに定期的に GUI を更新するために、`QTimer` の使い方と挙動について簡単に調べてみました。
Read more
続きを読む »
2023/03/14
image
NO IMAGE
Nginx の proxy_pass で名前解決されない
update
event_note
label
nginx
nginx を Docker コンテナとして動かしており、ホスト側へリバースプロキシを行おうとした際にはまってしまいました。
Read more
続きを読む »
2023/02/16
image
NO IMAGE
Nginx で upstream の 名前解決を無効化(回避)する方法
update
event_note
label
nginx
Docker で動かしている Nginx でリバースプロキシの設定を行い、別の Docker コンテナに転送するように設定したときにちょっとはまったのでメモです。
Read more
続きを読む »
2023/02/02
image
NO IMAGE
Linux で端末にリアルタイムに日時を表示する
update
event_note
label
Linux
`watch` コマンドと `date` コマンドを組み合わせると簡単にできます。
Read more
続きを読む »
2023/02/01
[Python] asyncio.Queue の動きを確認してみた
update
event_note
label
Python
`put` や `get` がコルーチンになっていたので、どういう動きになるのか確認してみました。
Read more
続きを読む »
2023/01/26
[Python] 同期処理を非同期化して扱う
update
event_note
label
Python
async のついていない関数を非同期化して、async のついた非同期関数と同じように扱いたいというときの方法です。
Read more
続きを読む »
新しい投稿
前の投稿
ホーム
Translate
Popular Posts
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
smbclient で session setup failed: NT_STATUS_LOGON_FAILURE が表示される
Docker for Windows の設定
[Python] 文字列の判定で、None と空文字を同時に判定する
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
マージ元ブランチとマージ先ブランチ
[Python] matplotlib で plot する際に "Tcl_AsyncDelete: async handler deleted by the wrong thread" というエラーがでる
[Python] Tesseract で OCR を行ったら `UnicodeEncodeError: 'ascii' codec can't encode characters` のエラーが表示された
image
NO IMAGE
GitLab Runner でクローンする URL を変更する
image
NO IMAGE
Visual Studio で文字がにじむ(ぼやける)
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
AI
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
5
AWS Cloud9
4
blockdiag
1
Blogger
13
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
chrony
1
Codecov
1
CSS
1
Docker
79
DokuWiki
4
Doxygen
1
draw.io
1
EasyTag
1
Electron
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
3
Firefox
6
Flask
1
Git
19
GitBook
4
GitBucket
7
GitHub
7
GitLab
39
Go
1
Google
1
Google Cloud Platform
1
Grafana
13
GStreamer
2
HTML
5
IIS
8
InfluxDB
14
JavaScript
15
Jenkins
7
Linux
34
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MkDocs
2
MongoDB
5
MVC
1
MVVM
6
nginx
3
NLog
3
Node.js
8
npm
1
NVIDIA
3
onvif
1
OpenAPI
2
OpenCV
4
OpenSSL
3
OpenVINO
2
ownCloud
2
pandas
1
Pine Script
1
PlantUML
5
Portainer
3
PowerShell
8
Prism
2
PySide
17
Python
85
PyTorch
1
RabbitVCS
1
Razor
3
Redmine
33
Redoc
1
remark.js
2
rocketchat
10
Ruby
3
scikit-learn
1
SignalR
1
Slack
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
StableDiffusion
1
Subversion
2
Swagger
1
Swarmpit
1
Syslog
3
Telegraf
6
Tesseract
3
TestLink
2
Tomcat
2
TortoiseGit
11
TortoiseSVN
2
Trading View
1
Traefik
3
Travis CI
1
Ubuntu
31
Visual Studio
39
Visual Studio Code
10
VSCode
8
Vue.js
8
Windows
62
Windows 10
5
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
5
WSL2
5
Xamarin
1
xUnit
5
yaml
1
yolo
1
アプリケーション
1
デザインパターン
1
テスト
1
バッチファイル
2
プログラミング
4
ライセンス
1
暗号資産(仮想通貨)
1
英語
2
確定申告
1
機械学習
1
強化学習
1
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
►
2024
(8)
►
4月
(1)
►
3月
(1)
►
2月
(5)
►
1月
(1)
▼
2023
(30)
▼
12月
(3)
GitLab Pages でディレクトリ一覧を表示したい
GitLab Pages でブランチ毎にディレクトリを分けて公開したい
[Python] ModuleNotFoundError: No module named 'web...
►
11月
(5)
[Docker] Windows コンテナを動かす
[Python] Pyinstaller, Nuitka で作成した実行ファイルで GLIBC のエ...
[Docker] docker-compose の --scale でコンテナを複製した際に、コンテ...
[Python] pytest で motor のテストを行う
シェルスクリプトで sudo 権限で実行されているどうかをチェックする
►
10月
(2)
Rocket.Chat 移行後にアップロードファイルの URL が古いままになっている
Rocket.Chat のアップグレード手順
►
9月
(1)
[Python] OS の時刻(システムクロック)に影響を受けないように時間の計測を行う
►
8月
(2)
YAML のアンカー/エイリアスと docker compose の profiles を使って d...
`ImportError: cannot import name '_compare_version...
►
7月
(4)
[VSCode] Markdown Preview Enhanced で HTML 出力する際にサイ...
WSL でディストリビューションを削除して再インストール後に起動エラーになる
Microsoft ストア版の WSL をインストールする
EasyTAG 2.4.3 で画像がある場合に mp3 ファイルのタグ書き込みに失敗する
►
6月
(2)
systemd で環境変数を展開する
VSCode で現在アクティブなタブの背景色を変更する
►
5月
(3)
Telegraf で Jetson の GPU 情報を取得する
MongoDB と 2106 年問題
[Docker] docker-compose の env_file 内でシェルスクリプトを実行する
►
4月
(2)
[Python] SyslogHandler でログを送信したときに `Bad file descr...
[Python] マルチプロセスにおけるロギング (QueueHandler, QueueListe...
►
3月
(2)
[PySide] QTimer の使い方
Nginx の proxy_pass で名前解決されない
►
2月
(3)
Nginx で upstream の 名前解決を無効化(回避)する方法
Linux で端末にリアルタイムに日時を表示する
[Python] asyncio.Queue の動きを確認してみた
►
1月
(1)
[Python] 同期処理を非同期化して扱う
►
2022
(106)
►
12月
(5)
►
11月
(1)
►
10月
(3)
►
9月
(6)
►
8月
(7)
►
7月
(6)
►
6月
(13)
►
5月
(9)
►
4月
(15)
►
3月
(11)
►
2月
(14)
►
1月
(16)
►
2021
(85)
►
12月
(11)
►
11月
(6)
►
10月
(4)
►
9月
(10)
►
8月
(8)
►
7月
(4)
►
6月
(18)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
►
2020
(56)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(3)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)