⌚ガジェット
[email protected]
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

たていすさん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

DC-G9 の UIカスタム設定
Lumix DC-G9はUI関連の設定が異常に多いので、現在の設定をメモしておく。 # Fnボタン - Fn1(ジョイスティック右):AFモード (デフォルト) Q.Menuでも設定可能 - Fn2(背面右下):Q.MENU (デフォルト) - Fn3(ファインダー左):ライブビューブースト - Fn4(前面グリップ横):プレビュー - Fn5(前面グリップ側):AFポイントスコープ。押すと倍率の高い拡大ができる。 - Fn6(液晶タッチ):Wi-Fi - Fn7(液晶タッチ):水準器表示 - Fn8(液晶タッチ):ワンプッシュAE。一時的にAEを作動する機能。ペンタックスのグリーンボタンみたいなやつ。PとMで便利。 - Fn9(液晶タッチ):シャッター方式 - Fn10(液晶タッチ):記録枠表示 - Fn11~Fn15(ジョイスティック):AF枠操作に使うので割当なし - Fn16(十字キー上):フォトスタイル(確認UIあり) Q.Menuでも設定可能 - Fn17(十字キー右):再生。右手で操作したい… - Fn18(十字キー下):サイレントモード(確認UIあり) - Fn19(十字キー左):測光モード(ダイアログ) Q.Menuでも設定可能 # Fnレバー - Fnレバー:AFモードを自動認識に固定する # マイメニュー メニューカテゴリの人アイコン。 よく使うメニュー項目を登録しておける。 ## 動画関連 クロップの有無に関する項目が複数あるので、マイメニューに列挙しておきたい。 - **記録枠表示**:ライブビュー表示のアスペクト比が変わる。静止画と動画で毎回切り替えるべき。(クロップせずに枠線を表示してほしかったんやが…) - **4Kライブクロップ**:モードダイヤルを動画Mにしてメニューカテゴリ中の他の機能をOFFにすると使える。時間(20/40秒)、開始位置、終了位置を指定するとカメラを固定したまま内容がパン/ズームする動画を撮れる。開始位置、終了位置の枠の大きさも変えれる。 DC-S5では「ライブクロップ」。 - **EXテレコン**:ONにするとクロップされる。ピクセル等倍であり画質劣化はない。クロップ度合いは動画解像度による。 - **手ぶれ補正/電子補正(動画)**:オンにすると少しクロップされる。 ## 動画/静止画両方 - **測光モード**:ハイライト重点が便利。 - **基準露出レベル調節**:露出補正の値にバイアスをかける。測光モード別に設定可能。 - **フォトスタイル**: ## 静止画用 - **下限シャッター速度**:被写体が動くならSSを速くしないといけない。 - **AFカスタム設定(写真)**:AF-Cの粘りを調節できる。 - **シャッター半押しAF**: - **フォーカス/レリーズ優先**: - **MFアシスト**:いわゆる拡大MF。開始トリガを指定できる - **MFアシスト表示**:PIPと全画面を切り替えられる。 - PIPは構図のハシを確認しつつピント合わせができるが、倍率がx6まで。 - 全画面だと倍率はx20(ただし粗い)までいけるが、構図のハシを確認できない。 - 普段はPIPで十分だろう - **常時プレビュー(Mモード)**:ライブビューの明るさが露出を反映したものになる。ストロボ撮影時はオフにしたい。 ## レンズ設定 - **フォーカスリング制御**:対応レンズにおいて、フォーカスリングとピント移動量の対応を、ノンリニア、リニアから選べる。リニアの場合の回転量も選べる。 - **絞りリング設定**:クリックレスに対応したレンズ(10-25,25-50)で、絞りリングのクリック感の有無を指定できる - **レンズFnボタン設定**:レンズのファンクションボタンに機能を割り当てられる ## 管理用 - **ダブルスロット機能**:順次、複製、JPEG/RAW分配を切り替えられる。 - **フォーマット**:まとめて削除するよりフォーマットのほうが速い - **時計設定**:おでかけ前に設定確認したい。 # フォトスタイル https://www.dpreview.com/forums/thread/4244393 フォトスタイルのNR項目はRAWのNRに影響する。NR値の違いはRAWデータの暗部のカラーノイズに表れる。 https://dc.watch.impress.co.jp/docs/review/special/1326244.html パナは「例えばヴィヴィッドのまま1日撮影しても不自然な印象を持つシーンがないように」というポリシーで調整している。 VIVIDも積極的に使っていきたい。
fedilink

日本語のページができていた、もしや発売される? ※コミュニティお借りします!ガジェットであってますよね
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

財布: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

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

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

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


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




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

Raspberry Pi OSをstretchからbusterにアップグレードする
自宅サーバでMatrixしたらなぜか自宅のDNSリゾルバが不調ぎみ。 ロングポーリングで自宅ルータのNATテーブルに負荷がかかるとかそんな理由かもしれない。 とりあえず自宅サーバにDNSキャッシュサーバを仕込もう。 といっても先日組んだPCではなく、ここ数年自宅のDHCPdをやらせているRaspberry Piだ。 Raspberry Pi OS (旧名Raspbian) の最新は2021-01-11のBuster(10) [らしい](https://en.wikipedia.org/wiki/Raspberry_Pi_OS#Release_history)。 手元のマシンはstretch で、1世代のメジャーアップグレードならまあ成功するだろう(慢心)。 ``` sudo dpkg-reconfigure debconf # (パッケージ更新時の質問をあまりしないように設定しておく) sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list sudp apt update sudp apt dist-upgrade cat /etc/issue ## says: Raspbian GNU/Linux 10 \n \l sudo reboot # (再起動後) sudo apt autoremove dpkg -l | grep ^rc | awk '{print $2}' | xargs -t sudo apt-get -y purge ``` `debconf` では `Ignore questions with a priority less than:` を `high` にしたが、なんと全く質問されずにアップグレードが終わってしまった。順調すぎて驚き。
fedilink

WinSshFSでリモートマシンのフォルダをWindowsにマウントする
今回は Dokany と WinSshFS Foreveryone を使って、 LinuxマシンのフォルダをWindowsのドライブとしてマウントしてみる。 ---- ## 前準備 SSH.NetライブラリはOpenSSHの鍵に対応しているが、今回の製品で使われてるのが古いのでいくつか制限がある。仕方ないので古い形式の秘密鍵を作ってログインできるようにしておく - **SSH.Net が古いので`-m PEM`がないとダメらしい。** - **SSH.Net が古いので`-t ed25519`とか指定しちゃうとダメだ。** `-t` 指定なしだと接続できてた。 ``` cd ~/.ssh ssh-keygen -m PEM -f {KEY_FILE_NAME} cat {KEY_FILE_NAME}.pub ``` 生成できたら `{KEY_FILE_NAME}.pub` の内容をログイン先のauthrized_keysに追記する。 ---- ## インストール - [Dokany](https://github.com/dokan-dev/dokany)のリリースページから`DokanSetup_redist-1.0.5.1000.exe`をダウンロードしてインストールする。 - **なお最新の1.4.1.1000だと WinSshFS Foreveryone がVersion error を出す。** - [WinSshFS Foreveryone](https://github.com/feo-cz/win-sshfs)のリリースページからWinSSHFS-1.6.1.13-devel.msi (2016年!) のインストーラをダウンロードしてインストールする。 ---- ## 設定 スタートメニューから winssh で検索するとWinSSHFSアプリが見つかる。 起動するとタスクバーでる常駐アイコンを右クリックして「Show Manager…」を選ぶ。 ![設定画面](https://lemmy.juggler.jp/pictrs/image/QHMEAg90Fc.jpg) - マネージャー画面で左下のAddを押す。 - 右上から項目を埋めていく。 - Drive Name: 他の設定と区別するための名前をつける。 - Host: SSH接続先のホスト名かIPアドレス。 - Post: SSH接続先のポート番号。 - Username: SSHログインのユーザ名。 - Authentication method: 認証方法。パスワード、秘密鍵、Pagent(Puttyのagent)から選ぶ。今回は秘密鍵を選ぶ。 - Private Key: 前準備で作成した鍵の、秘密鍵の方(.pubがついてない方)のファイルのフルパスを指定する。 - Directory: SSH接続先のフォルダを指定する。 - Drive Letter: Windows PCのどのドライブにマウントするか指定する。 - Mount at Login: PC起動時に自動的にマウントする。 今回は Proxy 以下は設定しない。 記入が終わったらSaveしてMountする。 私が試した時はSSH秘密鍵のバージョンやDokanyのバージョンで何度か失敗したが、上に書いた注意点を読めば多分大丈夫だろう。 ---- ## 利用 エラーが出なかったらエクスプローラでフォルダを開ける。 ![マウントしたフォルダ](https://lemmy.juggler.jp/pictrs/image/oofnK41btA.jpg) FTPクライアントやWevDAVと違い、ちゃんとしたファイルシステムなのでいちいち転送する必要もなく、アプリでファイルを直接開いて編集できる。
fedilink

PostgreSQLのオンラインバックアップ
…を行うスクリプトの例。 ## 前準備 WALのarchiveを有効にしてarchive_command を設定しないと pg_stop_backup() がずっとブロックする。 WALアーカイブの出力先を作ってpostgresユーザがアクセスできるようにしておく。 ``` # mkdir -p /xxx/backup/postgres-wal # chown -R postgres /xxx/backup/postgres-wal ``` postgresql.confにWALアーカイブを設定してDBを再起動する。 ``` archive_mode = on archive_command = 'cp %p /xxx/backup/postgres-wal/%f' ``` ## バックアップスクリプト ``` #!/bin/bash set -eu function die(){ echo $@ >&2 exit 1 } test ${EUID:-${UID}} = 0 || die "must be root." echo "chdir to /xxx/backup/postgres ..." cd /xxx/backup/postgres LABEL=`date "+%Y%m%d-%H%M%S" | sed -e "s/[\r\n]\+//g"` echo "create folder ..." mkdir -p clone echo "call pg_start_backup('$LABEL') ..." psql -h din -U postgres postgres -c "SELECT pg_start_backup('$LABEL');" echo "copy db data to folder $LABEL ..." # rsync の際にエラー24が出ることがあるが、無害。 set +e rsync -a --delete --exclude=pg_xlog --exclude=postmaster.pid \ /var/lib/postgresql/13/main/* clone set -e echo "call pg_stop_backup() ..." psql -h din -U postgres postgres -c "SELECT pg_stop_backup();" echo "make $LABEL.tgz ..." tar cpzf $LABEL.tgz clone ```
fedilink

⌚ガジェット
[email protected]
    Create a post

    ガジェット関連の記事を収集します

    • 1 user online
    • 1 user / day
    • 1 user / week
    • 1 user / month
    • 1 user / 6 months
    • 1 subscriber
    • 31 Posts
    • 7 Comments
    • Modlog
    Juggler.jp Lemmyサービス

    テストサーバだよ。データは気が向いた時に消すよ。

    • このサーバでは政治的な話題を取り扱いません。
    • このサーバは日本の法律や判例に従います。