全然日記書いてないことに気付いた。毎日なんかしらやってはいるけど、どうも書くモチベがかなり失われている。

面白いと思っていた人たちはいろんなSNSに散らばったり、あるいはポジショントークしかしなくなったり、あるいは……って感じで、自動的に入ってくるおもしろ情報というのがなかなか、なくなってしまった。インプットが減ってアウトプットも減ってるのだろうか? そもそもテイカーおじか???

今はフィードをつかってブログ見てる人なんてほとんどいないんじゃないか?

サブテク入りたい

だいぶ前にゆの in languageとかいうのをやってたなと思い返していたけど、ほとんど当時のリソースにアクセスできず何があったのかわからくなっていた。なんかゆるく知らん人同士で流行った楽しさがあったけど、そういうのって今はないなと思う。

テクいこと

技術的にどうこうっていうのも、最近ぱっとしない。ディープラーニングも最近はなんかやりたいことがなくてやってない。画像生成も夏にやるには罪悪感があってあまりやってない。

まったく趣味コード書いてないかというとそういうわけではない。配信用のペライチHTML+JSでOBS操作して喜んだりはしてる。自分が喜ぶすごく小さいツールを作るのはあいかわらず楽しいと感じる。

仕事はなんか、、、、

ウェブ系のITエンジニアはたいしたスキルセットもないのに恵まれすぎ、という話をみて、そうですねと思う。そして恵まれてても、うまくそれをこなせない自分というのが厳しい。なんか昨今のITエンジニアみんな優等生だもんな~ 居場所ないのあたりまえだわ~ 今の勤め先の採用過程を今やったら通らないだろう。そういう意味ではもはや既得権益おじといえる。

しばらく仕事で K8S さわってて、4割ぐらいはK8Sと和解してるけど、6割ぐらいは馴染んでない。コンテナとも8割ぐらいしか和解できてない。個人的に使うことがない技術スタックに強い興味が持てない。とかいいつつ、うまいことコンテナまわり整備したり、GitHub Actions でリリースプロセスいい感じにしたりとか、そういうの いじってるのは楽しいんだよな。

動画

だいぶ前から YouTube にチマチマ動画あげたりはしてるけど、マスにリーチしようがないコンテンツしか思いつかないし、動画作るというのが自分にとってはあまりに大変すぎて続いてはいなかった。

ただ最近、なんとなく上げたショート動画が急に400万再生ぐらいされたのをきっかけにして、また動画を作ってみてる。

いろいろ動画の作りかたを変えてやってみてる。自分にとって楽かつ、動画にして意味があるみたいな方法があればいいんだけど

  • スライド作って話すだけ
    • Pros 比較的慣れた形式なので楽 (うまくできるとはいってない)
    • Cons 喋るの下手で動画としてつまらない
  • 素材録りながら喋る
    • Pros 動画としては見栄えする
    • Cons セッティング大変。録るのも大変。なんか生でもないのに緊張してしまう
  • とりあえず録画しておく。アフレコでなんとかする
    • Pros ↑ よりは楽
    • Cons セッティングは大変
  • 素材+音声合成
    • Pros アフレコもプレスコも楽。キモい声を聞きながら編集しなくていい。基本的に耳に慣れてて聞きとりやすい。ずんだもん可愛い
    • Cons 量産型動画にしかみえない

ギター

とにかく基礎練習だけは毎日やってて、証拠残しと思ってこれはYouTubeで配信を残してる。ぜんぜん上達している感じがしなくて、ミスが減らない。前まで練習してた曲もちょっと練習しないだけで忘れていくし身になっているものがないように感じてつらい。

motemen さんの ターミナルの作業中ディレクトリにOSの「ファイルを開く」からもアクセスしたい を見ていいなと思ったので自分もやってみた。ただ、WSL 内で動く tmux の作業ディレクトリを Windows 側に同期したいので、若干ややこしいことをすることになる。

以下のように wsl-update-cwds をつくる。

#!/usr/bin/env ruby

is_wsl = ENV.has_key?('WSLENV')
if !is_wsl
    exit 0
end

# PWSH = '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'
PWSH = '/mnt/c/Program Files/PowerShell/7/pwsh.exe'

dirs = `tmux list-windows -F '\#{pane_current_path}'`.split("\n").uniq

command = <<~CMD
$WshShell = New-Object -COMObject WScript.Shell
function Create-Shortcut($targetPath, $shortcutPath) {
	$Shortcut = $WshShell.CreateShortcut($shortcutPath)
	$Shortcut.TargetPath = $targetPath
	$Shortcut.Save()
}

Remove-Item -Path $env:USERPROFILE/cwds/*.lnk
CMD
dirs.each do |dir|
    basename =  File.basename(dir)
    win_path = `wslpath -aw '#{dir}'`.chomp
    command << "Create-Shortcut '#{win_path}' $env:USERPROFILE/cwds/#{basename}.lnk\n"
end

# Since pwsh takes a bit of time to start up, run it asynchronously using spawn.
pid = spawn(PWSH, '-NoProfile', '-NoLogo', '-Command', command)
  1. tmux から作業ディレクトリをひっぱってくる
  2. wslpath コマンドで Windows 側のパスに変換する
  3. ↑の情報から PowerShell のコードを生成し、pwsh でショートカットとして生成する

なんでショートカットなのか? というと Junction だと UNC パスにリンクを貼れず、Symlink だと管理者権限が必要になって嫌なので、ほかに方法がない。

あとは zsh の chpwd フックで実行させる。WSLENV 環境変数を見て、存在しないなら実行しないように

chpwd () {
	if [[ -n "${WSLENV+x}" ]]; then
		# in WSL
		$HOME/dotfiles/bin/wsl-update-cwds
	fi
}
  1. トップ
  2. tech
  3. (zsh/tmux/WSL) ターミナルの作業中ディレクトリにOSの「ファイルを開く」からもアクセスしたい

外で保管しているクロスバイクのタイヤが、だいぶ劣化してしまって不安なので交換した。バーテープも同時に交換

パナレーサー クリンチャー タイヤ [700×25C] クローザープラス F725-CLSP-W-2P ホワイト (ロードバイク クロスバイク/ロードレース 通勤 ツーリング用) 簡易包装2本入り 白ライン - パナレーサー(Panaracer)

パナレーサー(Panaracer)

3.0 / 5.0

チューブは交換しなくてもいいかと思ったけど、タイヤに貼りついてしまってとれなかった。無理にとって再利用もこわいので予備のものに交換した。

一応バックアップ

sudo parted -l
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 107GB
Sector size (logical/physical): 512B/512B                                                                                                                                                                                                                                     Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name              Flags                                                                                                                                                                                                        1      1049kB  51.5GB  51.5GB  ext4            Linux filesystem
 2      51.5GB  53.7GB  2145MB  linux-swap(v1)  Linux swap
 3      53.7GB  107GB   53.7GB  ext4            Linux filesystem


Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  982M     0  982M   0% /dev
tmpfs          tmpfs     200M   24M  177M  12% /run
/dev/vda1      ext4       48G   18G   28G  40% /
tmpfs          tmpfs    1000M     0 1000M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs    1000M     0 1000M   0% /sys/fs/cgroup
/dev/vda3      ext4       50G   17G   31G  36% /data
tmpfs          tmpfs     200M     0  200M   0% /run/user/1000

cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda1 during installation
UUID=bec2c6ce-a9f5-4ebf-a264-065bcd55f2d4 /               ext4    errors=remount-ro 0       1
# swap was on /dev/vda5 during installation
UUID=8efef618-8831-4075-aae1-1d95730b25e8 none            swap    sw              0       0
UUID=f1304b76-c52f-41c5-9770-f8fadcf2f2d8 /data  ext4  defaults 0 2


 swapon -s
Filename                                Type            Size    Used    Priority
/dev/vda2                               partition       2095100 2094876 -1


sudo blkid
/dev/vda3: UUID="f1304b76-c52f-41c5-9770-f8fadcf2f2d8" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="0b483f43-b168-4a48-bc64-13428db0f42b"
/dev/vda2: UUID="8efef618-8831-4075-aae1-1d95730b25e8" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="707f15c7-5c40-4501-949c-218fd115e7d9"
/dev/vda1: UUID="bec2c6ce-a9f5-4ebf-a264-065bcd55f2d4" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="dae9a827-082d-4aad-9438-f2da8cc6f62c"
ssh cho45@stfuawsc.com -C -t 'sudo dump -0u -f - /dev/vda1' > sakura-dev-vda1.dump
ssh cho45@stfuawsc.com -C -t 'sudo dump -0u -f - /dev/vda3' > sakura-dev-vda3.dump

upgrade後

h2o の再ビルド再インストール (libc の更新による)
perl 関係

  • DBD::mysql
  • cpanm install Crypt::OpenSSL::Random

rabitmq-server
mqtt proxy として使ってるが、再インストールして設定しなおした。

  1. トップ
  2. tech
  3. Ubuntu LTS 16 → 18 → 20

こうする

async function loadAsImage(svg) {
	return new Promise((resolve, reject) => {
		const svgXml = new XMLSerializer().serializeToString(svg);

		const blob = new Blob([svgXml], { type: 'image/svg+xml' });
		const url = URL.createObjectURL(blob);

		const img = new Image();
		img.onload = () => {
			URL.revokeObjectURL(url);
			resolve(img);
		};
		img.onerror = (e) => {
			URL.revokeObjectURL(url);
			reject(e);
		};
		img.src = url;
		console.log(url);
	});
}

const img = await loadAsImage(svg);
ctx.drawImage(img, 0, 0);

ポイント

XMLSerializer を使っているところ。svg.outerHTML だと HTML 的に解釈された svg なので、xmlns が入らず、単体の SVG としては正しくないものになっている。

ただ、ブラウザ自体は HTML の svg が xmlns を持っていることは知っているため、XMLSerializer を使うことで正しい svg にできる。

  1. トップ
  2. tech
  3. HTML5 の svg 要素 を canvas に描く方法


今まではスプールの外周で支えるタイプを使っていたけど以下の点で問題があった

  • スプールが歪んでいるとスムーズにおくれない
    • 最近は紙製のスプールが多く、割と歪みやすい
  • スプールが軽くなってくると台から外れてしまう
  • そもそもあまりスムーズではなく吐出量が安定しにくい

ということで、スプールホルダを一新することにした。

スプールを固定するボルトとナットを作り、そこに固定軸を貫通させるようにした。

TR30x6 という台形ねじにした。早くねじこみたいと思うとピッチを広くしたくなるが、Fusion360 だとピッチが広いねじだと台形ねじになるようだった。デフォルトだと3Dプリントしたときキツいので、ねじの面をメス側で0.2mmオフセットさせている。


ところで Fusion360 だとねじの面取りがあまり直感的ではなく、先に穴に対して面取りをかけてからねじを作成し、面取りのフィーチャをねじの作成後に移動するという手順を踏まないといけない。

メス側を完全に貫通にすることで、ボルトをつけたままスプールホルダだけつけはずしできる。

ボルトをハメるだけの簡単な構造。

ボックス的にギリギリ3つのスプールが収められる感じなので、軸が干渉しないように工夫してある。軸の位置を、上下に若干ずらし斜めにすべらせて設定する構造に。


アスベル キッチンボックス 17L 「ウィル」 NF-45 - アスベル

アスベル

5.0 / 5.0

  1. トップ
  2. tech
  3. 3D プリンタのスプールホルダーを一新

パナソニック ドラム式洗濯乾燥機 幅63.9cm 洗濯12kg/乾燥6kg 左開き NA-LX125CL-W マットホワイト トリプル自動投入 スゴ落ち泡洗浄 はやふわ乾燥 ヒートポンプ - パナソニック(Panasonic)

パナソニック(Panasonic)

5.0 / 5.0

買ってから11年、これまで何度か修理してもらったり(最初の5年で2回)、自分で修理したり (排水モーター・給水弁) してきたが、買いなおすことにした。

故障

乾燥機のファンモーター異常で乾燥が不可能になった。ファンモーターは背面パネルを開けないとアクセスできない。本体を動かせない状態で、一人で修理するのはたぶん無理。十分使っただろうということで買い替えることにした。

故障中は

洗濯脱水は可能なので脱水までやって近所のコインランドリーで乾燥をかけた。コインランドリーだと乾くのがかなり早い。

買った

メーカーはパナソニックで、NA-LX125C にした。他のメーカーも検討はした (AQUAとかTOSHIBAとか) けど、結局以下の点でパナソニックにしてしまった

  • 使い慣れている
  • 乾燥経路が短い・ヒートポンプユニットにアクセスしやすい
  • 構造や分解方法がある程度わかっている
  • 細々と故障しつつも致命的にならず10年持った実績

進化しているか?

機能面では洗剤自動投入ぐらい。細かい設計が変わっているのは感じる。自動投入の位置にあった制御ユニットが下にきていたり、その関係か排水経路も変わって糸くずフィルタが右に移動していた。

10年前よりも全体のサイズが若干(数cm) 小さくなっていて、より直方体に近くなっている。

購入店

白物家電はサポートの充実度からケーズデンキで買うことが多いのだけど、今回も結局ケーズデンキで買った。

最初、納期ができるだけ早いところという基準でヤマダデンキで買った。しかし蓋を開けてみれば、ウェブサイト上に表示されている納期は全然嘘で、実際の納期が2週間ぐらいだったので、ほんとひどいなと思いキャンセルした。サポート返信も遅い。

そのあとすぐ納期遅めっぽい表示のケーズデンキで買ったけど、結局ヤマダで提示された納期よりもかなり早くなった。最初からケーズデンキで頼めばよかったので、こればっかりは本当に評判悪いところで買ってはいけないという教訓だった。

https://lowreal.net/2023/05/15/3 去年書いたこれと全く同じ状況が続いている。何も状況は変わってない。SNSの悪い部分だけをしばらく感じ続けている。

特に個人的に面白いことをしているわけでもないし、趣味が充実しているかというと、趣味って何だっけ?という気持ちになる。ギターやってるだろと言われそうだけど、ギターはすごく高いモチベーションがあるというわけではなく、あまりにも他に生産的なことに取り組めないので、せめてなんらかの手は動かしておこうという感じで、楽しんで取り組んでいるかというとかなり微妙なバランスになっている。楽しんでないわけではないけど、楽しくないことも多い。

写真も撮ってないし、特に撮ろうという気持ちがでない。外に出るモチベーションがかなり低い。

そういえは結構前に Google Analytics は止めていたようだ。いつ止めたかわからない。まったく見てもいないのにサイトレスポンスを下げるのでさくっと消したようだ。

Adsense はわずかながらレンタルサーバ代になるぐらいの収益があり、サイトレスポンスへの悪影響は気になっていたものの、貧乏性すぎて消すのにずいぶん躊躇していた。しかし最近ほかのサイトの Ads by Google と書かれた広告で、かなりひどいのを見かけて、もうダメだと思った。

Adsense ではひどい広告はあまり出ないと思っていたが、そんなことはないみたい。

  1. トップ
  2. tech
  3. このサイトの Google Adsense 止めた

https://cho45.stfuawsc.com/metronome/

あいかわらず自分で書いたメトロノーム実装を使っているが、フットスイッチで操作できればなという気持ちになったので、MIDI対応をした。

https://github.com/cho45/metronome/commit/49f94e836e388c5e61c147a8ea5a86ccbf33312a#diff-ed3ee7e0beea2498ff3b8ca85973d122fc6fa3d585d62b5807ec034d0cf076b3R616

Web MIDI API はオリジンごとに一括で許可/不許可を与え、一度許可すると次からは prompt なしで接続できるようだ。なので最初の一度だけセットアップ(許可)を行うと次からはページをロードするだけでMIDIメッセージは受け取れる状態になる。


細かい機能 (3連の裏をとれるようにするサポートとか) をちまちま追加したりしていて、こういう小さいツールは自分で作る喜びがあっていいなと思う。

  1. トップ
  2. tech
  3. JSで書いたメトロノームの MIDI 対応

HOTONE AMPERO II STOMP - HOTONE

HOTONE

5.0 / 5.0


競合としては BOSS GT-1000CORE とか、LINE6 HX Stomp あたりが値段が近い。

どう選んだか HOTONE vs BOSS vs LINE6

私見

    • Ampero は HOTONE のブランド (中国)
    • BOSS は Rolandのブランド (日本)
    • LINE6はYAMAHAのブランド (元々はアメリカの会社)
  • 基本的な音の傾向的にレンジの広さは GT-1000CORE > Ampero > HX Stomp
    • レンジが広いほどCDっぽく聞こえる?
    • 狭いほど生っぽく聞こえる?
  • 操作性 Ampero > (GT-1000CORE or HX Stomp)
    • Ampero はカラーのタッチパネル
  • 筐体デザインの好みは Ampero >= HX Stomp > GT-1000CORE
    • BOSS はなんか全体的にフォントが好きじゃない……
    • HX Stomp はかっこいい
  • Amperoはこれらのなかでは唯一USB接続がType-C。(USB2.0)
    • とはいえ電源供給はできず、通信ポートでしかない

買ってよかったところ

  • PCのソフトウェアが割と良い
    • 起動しっぱなしで良い。本体を電源オフにしたらPC側も Disconnected になるだけで、そのまま本体をオンにしたら勝手にPC側にも同期する。ずっとPCに接続してるなら屈んで本体を操作する必要はない。
  • USB入力が多様
    • ドライ音と出力音などを同時に録音できる
  • ステレオのエフェクトがとてもいい
    • 不自然さを感じにくい。とはいえときどき定位が不安定

買って気になったところ

  • スイッチのラグ
    • スイッチを押したタイミングではなく、離したタイミングで発火する。この機種に限らず、マルチエフェクターなら普通の挙動ではあるが、スイッチに長押しもアサインされているので、トリガーのタイミングがアナログエフェクターとそもそも違う。
    • ちなみに外部スイッチを接続した場合、このスイッチを押したタイミングで発火する。
  • 発熱
    • 電源オン状態で本体は40-50℃ぐらいになる。ずっとつけっぱなしにしておくには躊躇する温度。
  • ノイズゲートはいまいちかも?
    • 閾値をちゃんと設定しないといけない。どのゲートも小信号になったとき微妙にオン・オフが振動する。
  • 電源でかい
    • 18V 2A、センターマイナスのアダプタが付属するが、これがでかい。他の方法で給電したくなる。ただ入力電圧が9V〜18Vと広いので他の方法で給電しやすい。

ファームウェア

  • v1.2.0 が入っていた
  • v2.0.0 へアップデートするが再起動後、起動スプラッシュでフリーズ。なんどか再起動してもダメ。
  • → 再度 v2.0.0 でアップデートかけてみる → ダメ
  • v1.3.0 にアップデートをかけてみる → いけた。
  • → この状態でファクトリーリセット
  • →再度 v2.0.0 にアップデート → いけた

http://community.hotoneaudio.com/forum/discussionDetail?id=602

ほか

ZOOM FP02M は使えない

全く使えなくはないが3段階ぐらいしか可変しないので実質は使えない。
Ampero Press は 10kΩリニアカーブらしいが、FP02M は 100kΩのAカーブっぽい?

一応、本体不具合も疑って、手元の10kΩ Bカーブの普通のpotで確認したが、それだと問題なかったので、抵抗値かカーブかで相性がありそう。

電源

18V 2A、センターマイナスのアダプタが付属するけどやたらでかい。基本的に USB PD で供給するようになんとかしている。

直接供給

Hotone Ampero II STOMP は入力電圧が 9〜18Vなので、とりあえず Type-C Power Delivery のアダプタから15Vをひっぱってきて使ってみていた。特に問題はなく使えた。こうしとけば、PD 15V出せるモバイルバッテリー使えばバッテリー駆動できる。

これをするのに必要なのは

  • 15V 2A 出せるアダプタ: https://www.amazon.co.jp/gp/product/B0BJ6BB44D/
  • USB PD トリガーケーブル 15V。トリガーケーブルというのはPDのネゴシエーションだけやって特定の電圧を出してくれるケーブルのこと。これでアダプタの出力を15Vにする
  • DCコネクタ: エフェクタ界隈はセンターマイナスとかいう常識からすると異常な世界なので再配線が必要。

なおセンターマイナス問題はかなりうざいので、ブリッジダイオードで全波整流して極性を統一するケーブルを別途予備につくっておいている。

パワーサプライ

他のペダルと同時に使う場合、電源が一本化されていたほうが楽なので、パワーサプライを使うほうがよい。
VITAL AUDIO POWER CARRIER VA-05 MkII というパワーサプライを使っている。全ポートがアイソレート(絶縁)されている、つまりトランスが入っているタイプ。

ただ、供給電流が 9V 500mA と Ampero II STOMP が要求する 9V 800mA には足りないので、2ポートを並列にしている。絶縁電源なのでただの並列でもだいたい大丈夫なはず。

このパワーサプライは入力が 12V 2A なので、12V で PD をトリガーできる基板を利用している。12V は PD では若干特殊なので、対応していない充電器が多くてイマイチ。15V で供給したくなるが、内部の入力電解コンデンサの耐圧が16Vと余裕がなさすぎるので、素直に12Vを供給させている。

MIDI

PCアプリとの通信は MIDI の SysEx で行われているようだ。

本体の DIN の MIDI IN に入ってくる MIDI メッセージは USB にもスルーしてくる。MIDI フットスイッチがある場合、Ampero に接続しておけば、Ampero の USB 接続からその MIDI メッセージも受信できる。

Ampero Control は Bluetooth / USB / DIN で MIDI メッセージを出せるフットスイッチ。かなり汎用性が高い割に価格はこの手のものだと安い (14000~18000ぐらい)。ただしアプリがないと全く設定ができない。

スイッチの挙動

4つのモードがある

  • Single: スイッチを離したときにメッセージ送信
  • Toggle: A Group / B Group を交互。スイッチを離したときにメッセージを送信
  • Momentary: スイッチを押したときに A Group、離したときに B Group を送信
  • Hold: 一定間隔でメッセージを送信

押した瞬間にメッセージを送信

注意書きとして「Ampero Control のスイッチング機能は、踏んだ(押した)フットスイッチを離した時にメッセージ信号を発信します。他社製品に見られるスイッチング動作機能の設定変更はできません。」と書いてあるが、これは微妙に誤解を生むというか、実際は「押したときにメッセージを送信する」という挙動は限定的に実現できる。

というのも Momentary というモードだと、スイッチを「押したとき (A Group)」と「離したとき (B Group)」でメッセージを送信できるため、Momentary モードで A Group にだけメッセージを設定すると「スイッチを押したときにメッセージ送信」という挙動になる。Single というモードは実質、Momentary の B Group のみに登録された状態なので存在意義は謎

ただし Toggle に関しては離したときにメッセージ送信という挙動が変更できない。ただ、Toggle はフットスイッチ側に状態を持つ (モーダル) という側面があるので可能な限り使わないほうが良いと思う。

その他メモ

  • Bluetooth は BLE で設定用とおもわれる特殊なサービスを公開している。
  • アプリは Flutter 製