• 87 Posts
  • 25 Comments
Joined 2Y ago
cake
Cake day: Dec 15, 2020

help-circle
rss
前回はdockerコンテナのPyTorchからCUDAを使える状態にした。今回はStable Diffusionが使えるコンテナをビルドするDockerファイルやスクリプトを色々用意した。
fedilink

Windows 11 で WSL2で nvidia-docker2 の PyTorch コンテナからCUDAを使える状態にする。
## CUDAドライバのインストール https://developer.nvidia.com/cuda/wsl 先に入れておかないと nvidia-docker2 のインストール時に怒られる。 とりあえず最新で。 ## Windows 11 のWSL2にubuntuを入れる PowerShellを「管理者として実行」。 ### WSLで使うLinuxのインストール - `wsl.exe --install -d ubuntu` ubuntuの窓が開いてubuntu上のユーザ名とパスワードを尋ねられる。 ### WSLの更新 - `wsl.exe --update` ## ubuntuのユーザにdocker操作権限を付与 スタートメニュー等からubuntuのプロンプトを開いて以下を実行。 ``` sudo gpasswd -a $(whoami) docker sudo chgrp docker /var/run/docker.sock sudo service docker restart ``` ## Dockerコマンドのインストール スタートメニュー等からubuntuのプロンプトを開いて以下を実行。 - `curl https://get.docker.com | sudo sh` ## aptにnvidiaのリポジトリを追加 スタートメニュー等からubuntuのプロンプトを開いて以下を実行。 ``` distribution=$(. /etc/os-release;echo $ID$VERSION_ID) echo $distribution curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list ``` distributionは "ubuntu20.04" になるが、中身は ubuntu18.04 と同じようだった。 ## nvidia-docker2 をインストール スタートメニュー等からubuntuのプロンプトを開いて以下を実行。 ``` sudo apt-get update sudo apt-get install -y nvidia-docker2 ``` 警告メッセージが出てた。`/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link` エラーではなく警告なので、インストール自体は完了している。 ## dockerの起動 スタートメニュー等からubuntuのプロンプトを開いて以下を実行。 ``` sudo service docker start sudo service docker sttus ``` ## nvidiaのpytorchコンテナのバージョンを調べる https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch 左側の「Latest tag」を見る。試したときは 22.08-py3 だった ## pytorchコンテナの起動 ubuntuのプロンプト上でdockerコマンドを使う。 - コンテナ指定のバージョン部分は上で調べた数字を使う。 - `--shm-size=8g` の部分は処理内容に応じて適時調節。 `docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/pytorch:22.08-py3` dockerコンテナが起動してコンテナ上のbashに入力できるようになる ## 動作確認 試しにGPUを認識できているか表示してみる。 `nvidia-smi` pytorch を起動してみる。 `python -c 'import torch; print(torch.cuda.is_available())'`
fedilink


スクリプトからLemmyに画像付き投稿を投げるテスト
### 本家にある説明 https://join-lemmy.org/docs/en/client_development/http_api_extras.html#images ### WebUIで画像を添付した際の挙動 https://mastodon.juggler.jp/@tateisu/108832134849077396 ### スクリプトから同じことをする https://gist.github.com/tateisu/b71e42af44038c4262b1ebb62465930c ### pictrsの認証について POST https://lemmy.juggler.jp/pictrs/image の認証は、LemmyにAPIでログインすると得られるauthを使って リクエストヘッダに `Cookie: jwt=$auth` という感じでOKです。
fedilink

ソニーは旧機種を売り続けるんじゃなくて、「UXを新しくしたエントリー機」を出すコストはかけた方がいいんじゃないかな?とは思った。ソニーに親しくない層が、ソニー機を試した上で逃げてくのは機会損失なんじゃないの?


たていすさんEマウント機はコレが初めてです。普段はパナDC-S5とかDC-G9とか使ってます。 α7II、古い機種なのでこなれていないのかソニーはこういうものなのかわかりませんが色々と不満はありました。 ---- ## よかったこと - 現行の50mmマクロがある - タムロンのレンズが使える この2点のためだけにオモチャを買ったという感じ。 ---- ## 困ったこと ### 親指AFとピント拡大を併用し辛い - ピント拡大できるのはMFモードだけ。AF-SでもDMFでも使えない - 一方でMFモードはAFポイント選択ができない。AFオンできない。 - https://s.kakaku.com/bbs/K0000717585/SortID=20491786/ によるとAF/MFボタンに「押す間AF/MFコントロール」を割り当ててMFモードを使うとAFオンの代用になるが、AFポイントを選べない。 - 一度AFモードにしてAFポイント移動してからMFモードにして「押す間AF/MFコントロール」するとAFポイントが維持されている ### AEの不満点 - ISOオート下限SSがない。レンズ側手ぶれ補正を考慮せずにどんどんSSあがっちゃう - AFポイントをガン無視して測光する。マルチ、中央重点、スポット全てダメ。 - もうMモード+ISO手動で撮るしかないね ### 記録メディア内のデータの全削除がない - 基本的には全削除のかわりに再フォーマットを使うらしい。 - フォーマットがイヤな場合、メニューの再生タブでビューモードをフォルダビューにすると、メニューの再生タブの削除が「フォルダ単位の削除」になり、少し手間が減る。 - https://bbs.kakaku.com/bbs/K0001036274/SortID=23036523/ ### UXの不満点 - 撮影画面にヒストグラムと水準器を両方同時に表示できない。クソが! - ピント拡大表示を開始するのになぜかボタンを2回押す必要がある。クソが! - 再生時の拡大/縮小がダイヤルじゃなくてボタン。クソが! ### レンズによって位相差AFが効かない - 確認してみた。 https://mastodon.juggler.jp/web/@tateisu/108429334196069379 50mmF1.8だけAFやたら遅い。ウォブリング大きい。 ### 手ブレ補正あまり効かない - レンズ内補正ありのタムロン 28-200の200mmで SS1/40は欲しい感じの腕前 - (TODO)要検証 ### コーティング剥がれ - フィルタの汚れだと思ってたらコーティング剥がれだった。α7IIあるあるらしい。 ---- ## 記録 ## 2022年6月8日 - アキヨドのフィルタ貼付けサービスに出したら、「ソニー特有のコーティング剥がれの確認」と言われて、実際に該当してた。保護は必要なのでそのままフィルタ貼付けしてもらったら、作業中にコーティングを拭き取ってぱっと見ムラがない状態にしてもらえた。どんな薬品で拭いたんだろうね? 伝聞ではパーツクリーナーが効くらしいが…。 - SEL50M28 FE 50mm F2.8 Macro の中古を受け取った。 ## 2022年6月6日 - 液晶フィルタをポチる。 ## 2022年6月5日 - 清掃済みのを受け取り。バッテリーは完全放電してたらしい。 - Tamzon A071 28-200mmを買う。 - 純正バッテリーを買う。 - Kindleでムック本をポチる - ### 2022年6月4日 土曜日 - ソフマップでレンズキットを衝動買い。 - 充電器欠品。ポチる。 - 予備バッテリー互換品をポチる。 - そのままキタムラに清掃に出した。 - 50mmマクロをポチった。 - 50mm F1.8を中古で買った。 ---- ## その他 ### 28-200のワーキングディスタンス ![](https://lemmy.juggler.jp/pictrs/image/ae4f3073-6d7f-4b7c-9fd7-9d33dafe1e3c.png)
fedilink


三脚。センターポールにギアが刻まれてて太くて短いのが欲しいけど難しいなー。 今つかってるのは表題の製品だけど、もう9年前の製品だ…
fedilink



# 製品名 - [Tokina AT-X M35 PRO DX 35mm F2.8 MACRO キヤノン用](https://www.kenko-tokina.co.jp/discontinued/cat899/tokina/at-x_m35_pro_dx.html) - [smc PENTAX-DA 35mmF2.8 Macro Limited](https://www.ricoh-imaging.co.jp/japan/products/lens/k/macro/smcpentax-da-macro-35/) - [HD PENTAX-DA 35mmF2.8 Macro Limited](https://www.ricoh-imaging.co.jp/japan/products/lens/k/macro/hdpentax-da-35/) # 背景 - トキナーとペンタックスが光学系の共同開発と部品の共同調達を行ったレンズのひとつ。 - ペンタックス版はsmcが出た後、コーティングを改善したHDバージョンが出た。 # 構造 - トキナー版の方が外装が大きい。また、内筒の先のほうが外せるようになっている。フード兼フィルターアダプターらしい。 - ペンタックス版は外装が小さく、内蔵フードを手で伸ばしたり縮めたりできる。 # Lマウントボディに装着してみる - カメラボディは [Lumix DC-S5](https://panasonic.jp/dc/products/s_series/s5.html)を使った。 - DC-S5にトキナー版を装着する際は2種類のEF-Lアダプタ([Sigma MC-21](https://www.amazon.co.jp/dp/B07Q8Q6QK9/) および [Commlite CM-EF-L](https://www.amazon.co.jp/dp/B09CYQQPYN/))を試した。どちらもAFは動作しなかった。 - DC-S5にペンタックス版を装着する際は [K&F Concept PK/DA-L](https://www.amazon.co.jp/dp/B09NW2ZHTB/) アダプタを使用した。 - フルサイズボディに付けると貴重な35mm等倍マクロになる。しかしもともとAPS-C用のレンズなので、イメージサークルについて検証を行った。 - 周辺描写はフォーカス距離によって変わり、近距離だとケラレというよりは周辺減光程度で、用途によっては概ね問題ない。 - トキナー版の方が外装が大きいが、フルサイズボディに装着した際のケラレ範囲には大きな違いはないようだ。 - 後発のペンタHD版の方がコーティングの性能が良く内部反射が少ない。コントラストが高まり黒が締まり発色が良くなる。
fedilink



- ![](https://lemmy.juggler.jp/pictrs/image/cc3afe95-5332-468f-9b4c-25c97a387335.png) edelkrone DollyONE + HeadONE x2 + Tilt Kit v2 は電動卓上ドリーと電動ヘッド(雲台)のセットです。バンドルセットでDollyONE と HeadONE は 15%割引が効きます。 https://edelkrone-jp.com/pages/bundles?q=011 ## スマホアプリの使い方 ### 接続 - ![](https://lemmy.juggler.jp/pictrs/image/8692777e-e9e0-4af7-83f8-e93707534881.jpeg) ![](https://lemmy.juggler.jp/pictrs/image/3538b7d0-a8b7-4293-8c81-c6f736b1b7dd.jpeg) アプリを起動すると接続方法を選ぶ画面になります。 MANUAL PAIRRINGを選んで機器のトグルを指定してPAIR&CONNECT。 最初はうまく接続できなかったのですが、サポートに問い合わせたらアプリが更新されて解決しました。日本語で問い合わせできて対応は良かったです。 ### ポーズ画面 - ![](https://lemmy.juggler.jp/pictrs/image/8163b3fd-4384-47c1-af5d-d826b5c2ecc6.jpeg) 成功するとポーズ画面になります。画面上部の仮想パッドを動かすとドリーやヘッドが実際に動きます。ポーズを決めたら空欄のポーズを押すとそこに設定されます。 ### シーケンサー画面 - ![](https://lemmy.juggler.jp/pictrs/image/61b5a716-4e41-4d78-acf6-a799dc1e6573.jpeg) ポーズを決め終わったらシーケンサー画面でポーズ間の速度を指定して再生します。 ### 直線と円弧の切り替え - ![](https://lemmy.juggler.jp/pictrs/image/208216e1-b99b-4f42-9dcc-e28664882004.jpeg) ポーズ画面でPATH を押すと直線と円弧を選べます。SMART PATHは現時点では利用できません。円弧を選ぶと位置と角度を調整するウィザードが開始します。 ## 撮影風景 汚部屋画像注意。 - ![](https://lemmy.juggler.jp/pictrs/image/bff280eb-cb87-4b6d-a5af-0a6de25c120c.jpeg) ## 撮影サンプル 実際に撮ってみたのがこちら。 ### テスト1 <iframe title="テスト" src="https://fedimovie.com/videos/embed/fdfef195-c006-42a4-b795-2f58036cd0ac" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="320" height="240" frameborder="0"></iframe> - https://fedimovie.com/w/xn9a2pG35mGWCJWSQKSzLh - Lumix DC-G9 + オリンパス 12-40mm F2.8。 -- F2.8。露出補正+1.3 -- カメラ側手ブレ補正あり。 - edelkrone DollyOne + 2x edelkrone HeadOne. -- 円弧。速度50%。 - 後処理なし。 ### テスト2 <iframe title="テスト2 - 後処理でブレ補正" src="https://fedimovie.com/videos/embed/43ec5afb-5849-4fb5-b997-8af886ebab6d" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" width="320" height="240" frameborder="0"></iframe> - https://fedimovie.com/w/9otoX1N3kMCMvZZ2H1bYgX - Lumix DC-G9 + パナ12-60mm F2.8-4.0 -- 絞り優先のF5.6。動画AEをハイライト重視にした。 - edelkrone DollyOne + 2x edelkrone HeadOne. -- ドリーの動きを直線にした。速度を10%にした。 - 後処理でブレ補正 -- DaVinci Resolve Studioのスタビライザー(平行移動) -- 設定手順 https://jmplanning.net/SpeedGrade/dr-senior/1243.html ## 感想 - 後処理でブレ補正するのはとても効果的。 - ドリーの速度は可能な限り下げた方がよい。ただし下げすぎると移動しない。 - m4/3のレンズは普通のズームでもかなり寄れるので、ドリーをより近くに寄せられる。視点移動をよりダイナミックにできる。 - カメラボディがパナだと動画AFのウォブリングがやや目立つのを避けられないようだ。オリンパス/OMDSのカメラボディも試してみたい。 - テーブルが滑りやすいせいか、ドリーの位置がズレていく。ポーズを微調整してる間にもどんどんずれていくし、円弧だとズレすぎるとシーケンス再生時にパスエラーで止まる。なるべく直線移動でシーケンスを組んだ方が撮影時のストレスは少ない。 ## 比較製品 中華からも類似製品が色々でてます。ジンバルと連動するスライダーとかありますね。 https://www.amazon.co.jp/stores/YCOnion/page/FE85B7A0-CF1C-4DB7-ADC0-C801B111C2C3 合計10万円くらいでスライダー+ジンバルを調達できて、スマホからまとめて操作できるようです。 ただし私の用途だと、ジンバルより電動ヘッドの方がカメラ位置を低めにできるのが良いので、今回は選択しませんでした。
fedilink

>ユーザ名とコミュニティ名が同じ場合、Mastodonからコミュニティが見れない

なるほど助かる




キノコジュース×えっくす☆きゅーとふぁみりー せら/KIMAGURE グッドモーニングベイビーズ
クロスポスト: https://lemmy.juggler.jp/post/1345 > テスト https://lemmy.juggler.jp/c/ghrt
fedilink

財布:ELLE HOMME XP34210
財布を5-6年ごとに交換してるが、毎回色々悩んだ挙げ句にこの製品を買い直してる。 - カードの収納力がそれなりにある - パスケース機能もある - 小銭を落としにくい小銭入れ - シープスキンで優しい手触り
fedilink

dummyブリッジを作ってdockerコンテナとホストの間で通信する
---- # 概要 ホストOS上でnginxやpostgresqlが動いていて、内側にdockerコンテナがある。 - ホストとdockerコンテナの間で通信したい - ホストの外側からはアクセスできないようにしたい。 いままでdocker0ブリッジのアドレスにlistenさせていたが、postgresqlとdocker の開始順序を調整するのが systemdだとダルい。 今回の記事ではdummyブリッジを作ってホストやdockerコンテナからそのアドレスにlistenするよう設定する。 - このアドレスはホストの外側からアクセスできない。 - dockerブリッジと異なり通常のLANとほぼ同タイミングで設定される。サービス起動順序を調停しなくてもlistenできる。 - DB等のクライアント接続のリトライが不適切な場合はコンテナ側に一工夫する必要があるが、それは難しくない。 ---- # 手順 ## dummyブリッジを作る IPアドレスとホスト名を決める。 今回は 192.168.3.1 din2 にしよう。この名前に意味はない。 ### /etc/hosts を編集 以下の行を追記する。 ``` 192.168.3.1 din2 ``` ### /etc/netplan/02-dummy.yaml を作成 既存ファイルとぶつからないようにファイル名先頭の番号を調整すること。 内容はこんな感じだ。 ``` network: version: 2 renderer: networkd bridges: dummy0: dhcp4: no dhcp6: no accept-ra: no interfaces: [ ] addresses: - 192.168.3.1/32 ``` ### 設定反映、動作確認 ``` netplan apply ifconfig |grep 192.168.3.1 ping din2 ``` ---- # 各サービスの対応 ## listenする側 このブリッジは起動時にdockerやpostgresより先に作られるので、dockerもpostgresも起動順序に関係なくlistenできる。 たとえばdocker-composeを使ってるなら、コンテナのports指定に "192.168.3.1:1234:8080" とか書くと露出ポート 192.168.3.1:1234 からコンテナの8080ポートへの中継が行われる。なお残念ながらdocker-compose.ymlのポート指定にはホスト名を書けず、IPアドレスを生で指定するしかない。 ## アクセスする側 たとえばホスト側のpostgresがdummyブリッジにlistenして、dockerコンテナが起動時にpostgresにアクセスするような場合。postgresとdockerの起動順序の調停がイヤだというのが話の出発点なので、dockerコンテナ側はpostgresがまだ準備できていない段階で起動する場合がある。 コンテナ側がリトライを適切に行なってくれればよいが、そうでない場合はdocker-composeに一工夫入れることになる。 ---- # docker-composeに一工夫 docker-compose.yml に次のようなサービスを追加する。 ncコマンドの引数にホスト側のサービスのホストとポートを指定する。 ``` delay: # ubuntu 18.04未満ではncコマンドがプリインストールされている image: ubuntu:14.04 command: > /bin/bash -c " while ! nc -z din2 5431; do echo sleeping; sleep 1; done; echo Connected!; sleep 10; " ``` 続いて、待機させたいサービスに depends_on 指定を追加する。 ``` sidekiq: build: . … depends_on: - redis - delay <==== これ … ``` delayコンテナだけ動作確認してみよう。 ``` $ docker-compose up delay Pulling delay (ubuntu:14.04)... 14.04: Pulling from library/ubuntu 2e6e20c8e2e6: Pull complete 0551a797c01d: Pull complete 512123a864da: Pull complete Digest: sha256:43cb19408de1e0ecf3ba5b5372ec98978963d6d0be42d0ad825e77a3bd16b5f7 Status: Downloaded newer image for ubuntu:14.04 Recreating m2j_delay_1 ... done Attaching to m2j_delay_1 delay_1 | Connected! m2j_delay_1 exited with code 0 ``` 次は普通に起動。 ``` $docker-compose up -d $docker-compose logs ``` delayコンテナは起動しっぱなしではなく、スクリプトが終わると終了してしまう。無駄なメモリ消費はない。依存コンテナの実行は継続される。 これでOS再起動時にpostgresqlやpgbouncerの起動を待ってから残りのコンテナを起動できるようになった。ホストOSの設定を特に変更しないのが利点だ。
fedilink

ケースのノイズ対策とかは素人なので、「完成品より音が良い」とか「メイン機材置き換え」とかいう話にはならないのでした。オペアンプ遊びが目的。


オペアンプ比較。


キット標準

入力段:LME49720NA

  • ユニティゲイン安定であること。

出力段:OP275GP

DCサーボ:OPA2134PA


比較1:出力段

試聴環境

  • イヤホン Etymotic EVO
  • DAC Topping D90 音量-19dB

変更前 OP275GP

  • A90やM6Proに負けてるのは仕方ないか。
  • 帯域バランスは良し
  • 普段使いのオーディオと比べて低音がややボケた感じ。
  • 高音もいまいち落ち着かない。
  • バーンイン不足かもしれない。

MUSES8920

  • 低音のボケが改善された。量はやや多いかな。嫌いではない。
  • 中音域に少し艶が出たかな?
  • 高音はやや曇ったかなあ。
  • 「コンプレッサをかけた上でイコライザで低音を強調したような、ミニコンポの音」とWebで揶揄されていたのに納得。

OPA1656

  • ユニティゲイン安定
  • 高域の歪みが少なめ
  • 低音も良し
  • 現代的で良し
  • 低音の硬さを求めるとOPA1656 では物足りないともなるのか…

LT1364

  • ノイズを拾う。ケースを開けたり締めたり触れたり離したりするとノイズ量が変わる。
  • 低音がしっかりしてて良い
  • 中音域、高音域も良いと思う。
  • ただ少し疲れる音かな?

個人的な感想

  • OPA1656が良いかな…?
  • LT1364を頑張って使いこなす必要もなさそう。
  • OPA2211は在庫なさそうなんでスルーしよう

比較2:入力段

次は前段のLME49720NAをLT1364に変えた。 帰還しない部分のせいかノイズが出たりはしなかった。 解像度が上がった。

https://mastodon.juggler.jp/@tateisu/106955981843170561


今回は工具も色々追加した。

  • プロクソンのルーター
  • マキタの電動ドリルとドリルセット。最初からこっちを買っておけばよかったな
  • センターポンチ、ピンバイス、ドリルセット、テーパーリーマー。
  • バリ取り工具。ケース裏側の狭い場所のバリを取るのに活躍した。
  • IC抜き工具。基板レイアウト上、コンデンサが邪魔な位置にあるので工具が合ったほうがオペアンプをソケットから外しやすい。
  • ネジとナットとスペーサー。
  • ムンドルフのはんだ
  • so-dip変換基板とそれ用のピン。DIPソケット。ピンヘッダ。
  • 安いUSBオシロスコープとデュアルフックプローブ。

まだあったかな


キットは思ったより色々パーツがついてきたので、キットと精密抵抗だけ買って後から足りない部品を調達した方が良かったかな。


HPAキットをポチって組んでみた
- フルバランス入出力 - 4.4mm端子 - オペアンプ交換で遊べる …という条件でヘッドホンアンプを探したら完成品は現行販売されてないっぽい。 そこで https://togetter.com/li/704518 のHPAキットをポチって組んでオペアンプ交換して遊んだ。 - https://mastodon.juggler.jp/@tateisu/106871369133179106 - https://mastodon.juggler.jp/@tateisu/106955981843170561 9/4にポチってから主に部品調達の都合で15日かかった。 LEDブラケットだけまだ届いてないので仕方なくパーマセルを巻いてる。
fedilink


(管理者ユーザで)投稿やコメントの画面のmoreメニューを開くと「サイトへのアクセス禁止」とあるのがBanPerson APIらしい。ユーザ画面にはないので、投稿を先に削除してしまうとBANするのにAPIを直接使うしかなくなる。
fedilink

ユーザ画面ではなく投稿やコメントのmoteメニューにはあるみたいですね。 https://mastodon.juggler.jp/@tateisu/106933667964776247


TWS6機種のマイク比較。今回はblogじゃなくてMastodonへの投稿です。
fedilink







Android Studioプロジェクトにdetektを導入する
## 背景 detekt はKotlin用の静的解析ツール。 コードスタイルや特定パッケージのインポート禁止などをチェックできる。 - 参考 https://medium.com/livefront/android-static-code-checks-keep-your-codebase-tidy-with-detekt-408435665fc3 ## とりあえず組み込む プロジェクト直下のbuild.gradle ``` buildscript { … ext.detekt_version='1.17.1' … dependencies { … classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version" } } allprojects { repositories { … maven { url "https://plugins.gradle.org/m2/" } // detekt } } ``` モジュールのbuild.gradle ``` apply plugin: "io.gitlab.arturbosch.detekt" … dependencies { … detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version") detektPlugins("io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version") } detekt { // relative path from module path. basePath = projectDir // preconfigure defaults buildUponDefaultConfig = true // activate all available (even unstable) rules. allRules = false // point to your custom config defining rules to run, overwriting default behavior // config = files("$projectDir/config/detekt.yml") // a way of suppressing issues before introducing detekt // baseline = file("$projectDir/config/baseline.xml") reports { // checkstyle like format mainly for integrations like Jenkins xml { enabled = true destination = file("detektReport/${name}.xml") } // observe findings in your browser with structure and code snippets html { enabled = true destination = file("detektReport/${name}.html") } // similar to the console output, contains issue signature to manually edit baseline files txt { enabled = true destination = file("detektReport/${name}.txt") } // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with Github Code Scanning sarif { enabled = true destination = file("detektReport/${name}.sarif") } } } ``` gradle syncする Android StudioのTerminalから `gradlew detekt` 問題がたくさん出てBUILD FAILEDする レポートが出力されるのを確認 ## 設定ファイルの生成 Android StudioのTerminalから ``` gradlew detektGenerateConfig gradlew detektBaseline ``` 以下のファイルが作られる。 - プロジェクト/config/detekt/detekt.yml - プロジェクト/モジュール/detekt-baseline.xml 統一性がないな。配置を揃えよう。 - プロジェクト/config/detekt/config.yml - プロジェクト/config/detekt/baseline.xml モジュールのbuild.gradleの`detekt{}` の中に追記 ``` // a way of suppressing issues before introducing detekt baseline = file("$rootDir/config/detekt/baseline.xml") // point to your custom config defining rules to run, overwriting default behavior config = files("$rootDir/config/detekt/config.yml") ``` `gradlew sync` して `gradlew detekt` すると警告0になる。 なぜなら生成されたbaseline.xmlが既存の警告を行単位で覚えて無効化してるからだ。 XML中の`<ID>…</ID>`をまるっとコメントアウトしておく。 ## 設定の変更 config/detekt/config.yml の complexity.警告名 を変更する。 - complexity.ComplexMethod.threshold を15から24に変更するとメソッドの行数の警告が緩和される。 - complexity.LargeClass.threshold を600から2000に変更するとクラスの行数の警告が緩和される。 コード上で警告を抑制したい場合は @Suppress("UnnecessaryAbstractClass") など警告名を書ける。 ## その後 早速なにか問題を踏んでしまった。 issueを投げて放置。https://github.com/detekt/detekt/issues/3884
fedilink

某掲示板から 外部クロックを使用する場合、外部クロックの取得に高価な部品を使わなければクロックが濁ってしまい、意味がなくなる 高価な部品を使えない中級機以下なら、最初からクロックを内部で生成した方が良い、という判断かと 例えば、NT-505の価格.comのレビューでも、複数人が「外部クロック(実売価格15万円の純正OCXO(CG-10M))の効果が分からない」と言っている https://bbs.kakaku.com/bbs/K0001011148/SortID=22076752/ >NT-505にCG-10Mを導入して2週間とちょっと経ちます。通電330時間以上経ちますが、効果が全く確認できず苦戦してます。 >今日でCG-10Mを通電して3週間になりますが、変化は感じられません。 NT-505の内部を分解すると、PLL(基準クロックの合成または外部10MHz基準クロックの取得、およびFPGAへの直接的なクロック供給を行う重要な部品)にCS2300という激安品が使われている 外部クロックを使う場合も結局この激安品を通るので、ジッターでクロックがブレてボケボケの音になってしまう NT-505の解体レビュー https://www.l7audiolab.net/f/teac-nt505%e7%94%b5%e8%b7%af%e4%bb%8b%e7%bb%8d/ つまり、高級機でなければ外部クロックは無意味
fedilink

「Matrix日本サーバ勢の公開部屋リスト」へのサーバ追加について
---- ## 背景 [Matrix日本サーバ勢の公開部屋リスト](https://matrix-room-list-jp.netlify.app/)へのサーバ追加の問い合わせがあったが、試してみると403エラーが出た。 ---- ## 前提条件 - そのサーバが連合できる設定になっていること。 連合しないサーバはあのリストには載せません。 ---- ## 確認事項 (1)Synapseのhomeserrver.ymlの以下の項目を確認します。 ``` allow_public_rooms_without_auth: true allow_public_rooms_over_federation: true ``` 設定を変更した場合は、Synapseを再起動するなどして設定を反映します。 (2)適当な別のサーバにElement-Webでログインして、 https://lemmy.juggler.jp/post/786 の下の方の手順で、追加したいサーバの公開部屋リストを取得できるか確認します。
fedilink

Chromebook上でSSHサーバを動かす
---- ## 背景 ものによるが、低スペックなChromebook上で開発とかしたくない。外部からChromebook上のLinuxコンテナにSSHログインしたい。 ---- ## 初期状態 ChromeOSの初期状態から普通にセットアップをすませておく。 ---- ## IPアドレスの固定 設定画面でネットワークで(i)マークからMACアドレスをメモしておく。 お使いのDHCPサーバの設定でMACアドレスに固定アドレスを振っておく。 Chromebookを再起動する。 ---- ## Linuxコンテナの導入 設定画面の検索欄でlinuxを指定してlinuxコンテナを入れる ---- ## Linuxパッケージの更新 ターミナル上で以下のコマンドを順に実行する。 ``` sudo apt update sudo apt dist-upgrade sudo apt install emacs-nox ``` エディタは何でもいいが今回はemacs-noxにした。 ---- ## ホスト名の変更 外部からアクセスするホストなのだから名前は変えたいだろう。 今回は penguinからspin11に変更する。 /etc/hosts と /etc/hostname 中の penguin という文字列を書き換えること。 その後に hostname コマンドを実行すること。 ``` sudo emacs /etc/hosts sudo emacs /etc/hostname sudo hostname spin11 ``` ## SSHサーバ 最初からポート2222で動いてるが、その設定ファイル /dev/.ssh/sshd_config はリードオンリーなファイルシステムにマウントされてて編集できない。こっちはChromeOSとの間でSFTPするためだけのものらしい。 **1024以上で2222以外の**ポートで別のsshdを動かす。今回はポート2223にしてみた。 ターミナルで subo emacs /etc/ssh/sshd_config して以下の項目を指定する ``` Port 2223 PasswordAuthentication no PermitRootLogin no ``` 起動を阻害するファイルを削除する。 ``` sudo rm /etc/ssh/sshd_not_to_be_run ``` 起動する。 ``` sudo systemctl start ssh sudo systemctl enable ssh ``` 起動できてるか確認する。 ``` sudo netstat -ntlap ``` ChromeOSの設定画面でlinuxのポート転送2223を追加する。 ## ログインユーザのSSH公開鍵 最後にログインユーザの ~/.ssh に公開鍵を置く。 ``` mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ``` ファイルアプリで ~/.ssh/authorized_keys を開いて公開鍵を普段どおりに書く。 ## 動作確認 SSHクライアント側からログインできるか試す。 ## 再起動ごとにやること - ターミナルを開くなどしてLinuxコンテナを起動する。 - ChromeOSの設定画面でlinuxのポート転送2223を有効にする。 なおコンテナの自動起動を完全無操作で行う方法は存在しない。開発者モードを使えばできるが、開発者モード自体がCTRL-D操作を要求するため結局なんらか手動操作が必要になる。
fedilink



その後Linux用バイナリのクロスコンパイルやcoroutinesやktorを試してみたが、ktorから呼ばれるlibcurlがTLSをうまく扱えない現象に遭遇して頓挫した。


Kotlin/MultiplatformでHello World
Kotlin/MultiplatformでHello Worldしてみる。 ---- ## 環境 - Windows 10 64bit - IntelliJ IDEA 2021.1.1 (Community Edition) - Kotlin plugin 1.5.0 ---- ## プロジェクトの作成 - 「New Project…」を開く ![](https://lemmy.juggler.jp/pictrs/image/fdOkmsU7aZ.png) - Gradleを選ぶ - Kotlin DSL build script を有効にする - Kotlin/Multiplatform を有効にする ![](https://lemmy.juggler.jp/pictrs/image/mHYKpAHEpv.png) - プロジェクト名と保存フォルダなどを指定する ---- ## build.gradle.ktsの編集 ![](https://lemmy.juggler.jp/pictrs/image/CPZjfamLaG.png) build.gradle.ktsの `kotlin{…}` 節に以下を挿入 ``` mingwX64(){ binaries { executable() } } ``` ---- ## Gradle sync ![](https://lemmy.juggler.jp/pictrs/image/rToqwEgQJI.png) ウィンドウ内部の右上らへんに表示される象とリロードのアイコンを押して、ビルドスクリプトの変化をIDEに読ませる。 ---- ## Hello.kt の追加 ![](https://lemmy.juggler.jp/pictrs/image/YOLhj6gVOG.png) - 左端のProjectビューでルートフォルダを右クリックしてNew-Directory で src/mingwX64Main/kotlin を指定する。入力補完が効くはず。 - 作成されたフォルダを右クリックしてNew-Kotlin class/file で Hello.kt を指定する。 ---- ## Gradleタスクの実行 ![](https://lemmy.juggler.jp/pictrs/image/UHfaZMcNry.png) ウィンドウ右端のバーからGradleパネルを開いて Tasks/run/runDebugExecutableMingwX64 を右クリックして 「Run …」を選ぶ。 ウィンドウ下部のRunパネルに以下のようなログが表示される。 ``` 6:26:41: Executing task 'runDebugExecutableMingwX64'... > Configure project : Kotlin Multiplatform Projects are an Alpha feature. See: https://kotlinlang.org/docs/reference/evolution/components-stability.html. To hide this message, add 'kotlin.mpp.stability.nowarn=true' to the Gradle properties. > Task :compileKotlinMingwX64 > Task :linkDebugExecutableMingwX64 > Task :runDebugExecutableMingwX64 Hello Kotlin/Native! BUILD SUCCESSFUL in 3s 3 actionable tasks: 3 executed 6:26:45: Task execution finished 'runDebugExecutableMingwX64'. ```
fedilink

IRCのsafe channelについて
IRCでは!で始まるチャネルはsafe channelだ([RFC2811](https://tools.ietf.org/html/rfc2811))。 - 背景。サーバ群のうち1つのサーバが再起動したあと、サーバ間リンクが復元される前にユーザが部屋を作成してしまう。するとそのユーザはop権限を持つので、リンク復元時に望まぬop闘争が起こる場合がある。(A) - safe channel はこの問題を回避するのに作られた。 - safe channelには短い名前と長い名前がある。この例ではたとえば !foo や !XXXXXfoo と呼ぶことにしよう。 - 長い名前の XXXXX の部分は作成された時刻により変化する。長い名前が異なるチャンネルは個別に管理されるので(A)のような争いが起きない。 - そのかわり、短い名前だけでは部屋を特定できない状況が起こりうる。つまり /join !foo が Duplicate channelで失敗する。そんな時は /list !foo すると長い名前のチャンネルが複数見えるので、その長い名前を使ってjoinすればよい。 - safe channel から人がいなくなっても、数日間はそのチャネルは残っている。 - safe channelを作る時は /join !!foo コマンドを送る。先頭に!を2つ置く。すると長い名前が生成される。多くのクライアントは自動的にコレを行うだろう。 - safe channelに参加する時は /join !AAAAAfoo または /join !foo コマンドを送る。
fedilink

USB-NVMeケースを試す
---- ## Elecife製ケース(型番不明) - Elecife https://www.amazon.co.jp/dp/B08VD1XHKR/ - SSD ct500p1ssd8 Read 1900MB/s Write 950MB/s - PCの USB 3.2 Gen2 Type-C ポート USB3.1 Gen2 10Gbps(1250MB/s) ![](https://lemmy.juggler.jp/pictrs/image/AEiWPSvgiY.jpg) 書き込みはSSDがネックかな…? ディスクのポリシーで高パフォーマンスや書き込みキャッシュを変更してみたが数字はほぼ変わらず。 ---- ## エアリア SD-M2NV - エアリア(AREA) SD-M2NV https://www.amazon.co.jp/dp/B07PXDR5VR/ - SSD ct500p1ssd8 Read 1900MB/s Write 950MB/s - PCの USB 3.2 Gen2 Type-C ポート USB3.1 Gen2 10Gbps(1250MB/s) ![](https://lemmy.juggler.jp/pictrs/image/ndvbEVdysr.jpg) 冷却にやや気を使った製品。代わりに組み立ては面倒くさい。分解時に金属製のコジリ等が必要。冷却シートは消耗品。 今回は長時間のベンチでもないし、温度の影響は見当たらない。
fedilink

SDXCカードの速度テスト
microSDXCカードを調達した。 - 2x Lexar LSDMI512BB633A - 2x Lexar LSDMI256BB633A https://www.lexar.com/jp/portfolio_page/high-performance-633x-microsdhcmicrosdxc-uhs-i-cards/#specifications の海外(グローバル)版だ。 今どきは512GBでも7000円未満なのだなあ…。 偽物かどうか調べるためにH2testw をかけてみたらどうも遅い。 ``` Warning: Only 238735 of 238736 MByte tested. Test finished without errors. You can now delete the test files *.h2w or verify them again. Writing speed: 39.5 MByte/s Reading speed: 30.8 MByte/s H2testw v1.4 ``` そこで以下のような事を試した。 - アロケーションユニット16KBでフォーマットする。 - ディスク管理/ポリシーで高パフォーマンス設定にする。 - テストデータのサイズを色々変えてみる。 - カードリーダを UHS-II 対応 USB3.1 Gen 2 接続のものにする。 Windows 10さんはexFATでフォーマットする際に「ディスクの管理からフォーマットでアロケーションユニットサイズを既定にする」と「エクスプローラからドライブを右クリックしてフォーマットで標準のアロケーションサイズにする」とで、ファイルシステムのアロケーションユニットサイズが異なる。256GBのメディアで試したら、前者は16KB、後者は128KBだった。 速度面で効果があったのは、PCフロントパネルのUSBポートを使わずにバックパネルのUSBポートからUSBハブ経由で接続することだった。 ![](https://lemmy.juggler.jp/pictrs/image/fEIRyfwo8K.jpg) PCフロントパネルがなぜ遅いのかはよくわからないが、ケースを開けて調べるのも面倒なので不明なままだ。
fedilink

 speed |             canonical_alias
-------+------------------------------------------
  4953 | #news:smith.gdgd.jp.net
  1108 | #neta:matrix.juggler.jp
   698 | #element-web:matrix.org
   669 | #srad:matrix.juggler.jp
   267 | #synapse:matrix.org
   118 |
   113 | #omokan:matrix.juggler.jp
   100 | #soccer:matrix.juggler.jp
    86 | #lobby:matrix.juggler.jp
    81 | #iyh:matrix.juggler.jp
    55 | #nowplaying:matrix.juggler.jp
    50 | #miko:matrix.juggler.jp
    45 | #fediverse:nibbana.jp
    40 | #welcome:matrix.fedibird.com
    38 | #baseball-watch:matrix.juggler.jp
    30 |
    28 | #programming:matrix.juggler.jp
    22 | #talk:matrix.fedibird.com
    12 | #matrix-research:matrix-jp.net
    10 | #yamako-experimental:matrix.fedibird.com
     9 | #pc:matrix.juggler.jp
     8 | #anime-watch:matrix.juggler.jp
     6 | #freetalk:matrix.mstddntfdn.online
     3 | #retro-game:matrix.juggler.jp
     2 | #beginner:matrix.juggler.jp
     1 | #mjj:matrix.juggler.jp
     1 | #camera:matrix.juggler.jp
(27 rows)

部屋別のメッセージ流速を調べるクエリ
``` # 部屋別メッセージ数の集計のためのインデクス create index x_events_message_speed on events(room_id,origin_server_ts) where type='m.room.message'; # 部屋別メッセージ数を集計するビュー CREATE OR REPLACE VIEW room_speed as SELECT events.room_id, count(*) AS speed FROM events WHERE events.type = 'm.room.message'::text AND events.origin_server_ts::double precision >= (date_part('epoch'::text, CURRENT_TIMESTAMP) * 1000::double precision - 86400000::double precision) GROUP BY events.room_id; # 集計して部屋の公開エイリアスと結合 select speed,canonical_alias from room_speed left join room_stats_state on room_stats_state.room_id = room_speed.room_id where speed>0 order by speed desc; ```
fedilink




Dockerより後にPostgreSQLを起動する
---- ## 背景 Ubuntu 20.04にて。 ホストマシンでPostgreSQLとDockerを動かしている。 PostgreSQLがListenするアドレスをdocker0ブリッジにしたい。このアドレスはeth0等と違ってホストの外部から見えず、ホストとゲストの両方から利用できて便利なのだ。 このブリッジを作成するのはDockerなので、PC起動時にDockerの初期化が終わるのを待ってからPostgreSQLを起動する必要がある。 ---- ## 手順 `/lib/systemd/system/[email protected]` または`/usr/lib/systemd/system/[email protected]` の`[Unit]`セクションを変更する。 ``` -After=network.target +After=network.target docker.service +Wants=docker.service ``` systemdに構成ファイルの再読み込みさせる。 ``` systemctl daemon-reload ``` 依存関係の確認。 ``` systemctl list-dependencies [email protected] ``` 再起動後に起動順序と処理時間を確認。 ``` reboot (再起動を待って再度ログイン) systemd-analyze plot > systemd-analyze-plot.svg ```
fedilink


サーバ側設定としてはSynapseのhomeserver.yml に以下の変更を両方行います。

  • listeners[?].resources.names[] に webclientを追加する
  • web_client_locationに 「WebUIのURL」 または 「Synapseから見えるElementのフォルダパス」 を書く。前者はリダイレクト、後者はSynapseが直接サーブする。

t.coからTwitterの画像つき投稿に飛ぶURLのプレビューを取ろうとするとJavaScriptがないのでエラー表示をプレビューしてしまう。設定でt.coのURLはプレビューしないようにした。 ワイルドカードと正規表現の切り替えはキーワード先頭が^かどうからしい


  • データの更新時刻や取得対象サーバのリストを表示するようにした。
  • faviconを設定した

  • Python等のLL言語はマルチスレッドに弱点があるのでプロセスを分ける
  • プロセス間通信にredisを使う
  • イベント永続化ワーカーが追加される
  • イベント永続化ワーカーがシャーディング(分割される)

チャンネルごとにプレビュー設定があって、さらに全員に適用されるデフォルト設定とユーザが個別にオンオフできる個人設定があります。暗号化チャンネルではデフォルト設定は常にオフになります。ユーザがチャンネル設定を変更しないとプレビューはでません。


https://github.com/matrix-org/synapse/blob/v1.29.0/UPGRADE.rst#upgrading-to-v1290

1.29.0 からHTTPヘッダをnginxに追加しないとダメらしい

synapse_1 | 2021-03-09 11:52:15,895 - synapse.http.site - 387 - WARNING - None - forwarded request lacks an x-forwarded-proto header: assuming https

これかな。対応したしもう出ないだろう


reCAPCHAのドメインに「vector」を追加しないとElement DesktopでreCAPCHAがエラーを出す問題の対策を書き加えました。




しばらく鳴らしたり合うイヤピを見繕ったりしたので更新したよ