みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

スマートフォンをバッテリーレスにする

スマートフォンのmoto g6のバッテリーが膨張して,背面のパネルが浮いてしまいました. 劣化したバッテリーを使用し続けるのは危険なので速やかに廃棄するべきなのですが,バッテリー以外の機能は問題ないため,バッテリーレスにすれば引き続き使用できるの…

格安のアンプとジャンクウーファーで快適な2.1chのサウンドを楽しむ

ステレオアンプにトールボーイスピーカー D-109XE(D) を接続して使っていました.重低音があまり出ないのが不満だったので,ステレオアンプを2.1chアンプに置き換えて,サブウーファーを追加することで,重低音を楽しめるであろう構成に替えてみました. 2.1…

Rakuten Linkで電話が繋がりにくい問題に対応する

楽天モバイルは,通信をあまりしなければ月額利用料無料で電話し放題*1なので,サブの回線として使用しています.みーのスマートフォンはデュアルSIMに対応しているので,ドコモ回線のMNVOのSIM(以降メインSIMと表記)と,楽天モバイルのSIM(以降サブSIMと表…

unidic-mecabのid

unidic-mecabのidを一覧できるように掲載します(BSDライセンス).なお,プロジェクトにはleft-id.defとright-id.defが存在しますが,内容は同じです*1. 0 BOS/EOS,*,*,*,*,*,BOS/EOS,BOS/EOS,BOS/EOS 1 代名詞,*,*,*,*,*,*,*,和 2 代名詞,*,*,*,*,*,*,*,混 …

先頭/末尾ではない文字列を表す正規表現

正規表現には肯定先読み (?=...) と肯定後読み (?<=...) と呼ばれる機能があり,先頭/末尾ではない文字列を検索するのに有用なので紹介します. 肯定先読みや肯定後読みを文章で説明するよりも,Pythonのunittestとしてソースコードで表現する方が分かりやす…

ブラウザーで大量の硬貨を表示する

ドイツのベルリン美術館には,500,000個の硬貨が所蔵されており,紀元前7世紀に小アジアで硬貨が鋳造され始めてから21世紀の現在に至るまでの幅広い種類の硬貨があることで有名です*1. この膨大な所蔵品で戯れることが可能なWebサイトを紹介します. uclab.…

Pythonプロセスのメモリ使用量を取得する

以下の関数でメモリ使用量(RSS)が取得できます. import platform import resource def get_maxrss() -> float: system = platform.system() r = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss if system == "Darwin": return r / 1024 / 1024 # byte…

node.jsでERR_HTTP2_HEADER_SINGLE_VALUE

TestCafeを使っていたところ,"ERR_HTTP2_HEADER_SINGLE_VALUE"というエラーが出たので,原因と対応方法をまとめます. node.jsのinternal/http2で"ERR_HTTP2_HEADER_SINGLE_VALUE"というエラーが出るのは,headerに重複するキーが存在するためです. ERR_HT…

&micro;と&mu;が見分けられない

µとμの見分けられないので,コピペ用に記事にしました. µ : MICRO SIGN(U+00B5) μ : GREEK SMALL LETTER MU(U+03BC)

Raspberry Pi4 でBluetoothとWiFiの有効・無効にする

Raspberry Pi 4 Model B にはBluetoothとWiFiが搭載されていますが,サーバー用途で使用する場合など,これらの機能が不要となることもあるので,有効・無効を切り替える方法をメモしておきます. Bluetoothの有効・無効 /boot/config.txt 無効にする: dtov…

YAMLは読みやすいが書きにくい

YAMLのグチを書きますが,みーはYAMLが読みやすくて好きです.ValidなYAMLを書くのが時々難しいという話です. 以下のようなYAMLを作成しました. --- 5E212220: type: normal 5E212221: type: hard 5E212222: type: easy これをparseしたところ,以下のよう…

(mypy)Relative import climbs too many namespaces

mypyが”Relative import climbs too many namespaces"とエラーして,気づくのに時間がかかったのでメモしておきます. プロジェクトは以下のような構成です. src └──b.py a.py b.pyの中身は以下の通りです. from ..a import foo foo() 原因は単純で,src/…

reCAPTCHAを使用するフォームを自動でテストする

Google reCAPTCHAを使用することで,ボットがフォームに機械的なデータを送信するのを防ぐことができますが,フォームが正しく動作するかを確認するためにテストをすると,機械的なデータを送信することになり,フォームを通過できません.このどうしようも…

Singleton

Singletonとは,そのClassのインスタンスが1つだけ生成されることを保証するデザインパターンのことです.先日,Singletonという同名のウイスキーを見かけたので,購入しました. Dufftown蒸溜所で作られた製品だそうです. 味はスムーズで,フルーティーか…

Pythonのリスト内包表記内で同じ名前の変数を使う

以下のようなPythonスクリプトを見かけました. a = [1, 2, 3, 4, 5] a = [a*2 for a in a] print(a) 最初に宣言した変数aと同じ名前の変数aをリスト内包表記内で使用しています. 初めて見た時は意味がわからなかったのですが,問題なく動作します. [2, 4,…

Grafanaのダッシュボードをバックアップする

せっかく作成したGrafanaのダッシュボードが消失すると萎えそうだったので,ダッシュボードをバックアップすることにしました.方法をまとめます. ダッシュボードのエクスポート バックアップしたいダッシュボードを開いて,一番上にある共有ボタンをクリッ…

Raspberry Pi 4Bの初期設定のまとめ

Raspberry Pi 4B をDocker実行環境として常時起動で運用するときの設定をまとめます. microSDにイメージを書き込む Raspberry Pi Imagerを用いてmicroSDにイメージを書き込みます. raspi-config で設定 sudo raspi-config パスワードの変更 セキュリティの…

Vue.jsのv-bindにObjectを使うときはXSSに気をつける

Vue.jsを使うときはDOM-based XSSに注意しなければなりません.例えば,v-htmlがXSSの原因となる可能性があることは有名です. Dynamically rendering arbitrary HTML on your website can be very dangerous because it can easily lead to XSS attacks. On…

Google Cloud SQLのインスタンスをprivate IPで扱う

プライベートIPアドレスを割り当てたGoogle Cloud SQLのインスタンスに,Google Cloud Runなどのサーバーレス環境からアクセスする方法を紹介します. 方法 Terraformのgoogle_sql_database_instance,google_compute_network,google_compute_global_addres…

HTTPSのWebサイトの移行は難しい

HTTPSに対応したWebサイトのサーバーを変更するのが困難であるという話です. そもそもWebサイトとは,ドメインのDNSサーバー(=ネームサーバー)が指し示す先に存在するWebサーバーにユーザーがアクセスすることでコンテンツを利用できるようにした一連の仕組…

Raspberry Pi Zero WでDockerを使う

前回の記事で,Raspberry Pi 4BでDockerを使いましたが,思ったよりもリソースが余っているので,より省電力にできないか検討しました.Raspberry Pi Zero WにDockerをインストールして使ってみました. 仕様 Raspberry Pi Zero W 802.11 b/g/n wireless LAN…

Raspberry Pi 4BでDockerを使う

Raspberry Pi 4BのCPUは4 core 1.5 GHzであり,サーバー用途としては十分ですが,開発環境としては遅いです.当たり前ですがIntel 4 core 3.2GHz CPUと比較すると処理速度は遅いです*1. 最近はDockerがマルチプラットフォームビルドに対応しているので,x64…

Raspberry Pi 4Bをセットアップする

Raspberry Pi 4B 4GBを購入しました.自宅で24時間稼働するDockerの実行環境として使うためにセットアップした時のことを備忘録としてまとめました. なお,項目ごとに分類したことにより,時系列が前後する記述があります. 仕様 Raspberry Pi 4B 4GB Broad…

極小のWebサーバーをHerokuにデプロイした

Alpine Linuxで動作するNginxを使ってWebサーバーをHerokuにデプロイした時の話です. 要件 全てのリクエストを別のドメインにリダイレクトするだけのWebサーバーは,最も単純なWebサーバーの1つです.これをNginxで作成し,Herokuで公開します. 作り方 Doc…

Djangoの開発サーバーではデータベース接続を維持してはいけない

Djangoのrunserverコマンドを使用して開発している時に,たくさんのリクエストを行うとデータベース接続数が次第に増えていき, FATAL: sorry, too many clients already` というエラーが発生する現象に遭遇した時のまとめです. 環境 Django 3.1.6 'CONN_MA…

Pythonのloggingでデバッグ

Pythonのloggingはとても便利です. logging --- Python 用ロギング機能 — Python 3.9.1 ドキュメント logging.debug(msg, *args, **kwargs)関数には便利なキーワード引数が存在します. stack_info logging.info("test", stack_info=True) これだけで,スタ…

スポーンされた

Google翻訳が独創的な翻訳をしてくれました. なお,ちゃんとした文章を入力したところ,ちゃんとした翻訳をしてくれました. ちなみに,DeepLは,ちゃんとした文章も独創的に翻訳してくれました.

GitHub Actionsでブランチ毎のSecretsを取得する

おそらくGitHub Actions Environmentsで簡単に実現できることだと思うのですが,privateレポジトリでは使えないので,少し工夫してブランチ毎のSecretsを取得できるようにしました. 要件 testブランチのpushイベントで起動したら,VAL_TESTという名前のsecr…

GitHub Actionsのストレージ容量

GitHub ActionsでArtifactを扱っていたところ,突然以下のようなエラーが出て実行できなくなりました. Create Artifact Container failed: Artifact storage quota has been hit. Unable to upload any new artifacts. 無料プランでGitHubを利用していたの…

GitHub Actionsのworking-directory

GitHub Actionsのworking-directoryで少しハマったのでメモします. defaults.run ワークフロー中のすべてのrunステップに対するデフォルトのshell及びworking-directoryオプションを提供することができます。 GitHub Actionsのワークフロー構文 - GitHub Do…