日記を書き続ける仕組み

背景(?)

2017 年くらいから日記を書き続けている。
書き始めた当初は学生で校内では電子機器を使うことができなかったため紙で書いていた。
プログラマとして働きだしてからはパソコンで書いている。

ディレクトリ構造

日記は自体は次のようなディレクトリ構造をしている。
毎日ディレクトリを掘って月末になったらアーカイブという意味で月ごとに日別のディレクトリをまとめるという運用をしている。
また、これらのファイルは Dropbox で各端末間で同期している。

  • diary
    • 2023-02-01
      • diary.md
    • 2023-02-02
      • diary.md
    • 2023-02-03
      • diary.md
    • 2023-02-04
      • diary.md
    • 2023-02-05
      • diary.md
    • ...
    • archive
      • 2019
      • 2020
      • 2021
      • 2022
        • 2022-01
          • 2022-01-01
            • diary.md
          • 2022-01-02
            • diary.md
          • 2022-01-03
            • diary.md
          • 2022-01-04
            • diary.md
          • 2022-01-05
            • diary.md
          • ...
        • 2022-02
        • 2022-03
        • 2022-04
        • 2022-04
        • 2022-05 ...
      • 2023-01 ...

日記ジェネレーター

最初のうちはファイル作ったり、ディレクトリ掘ったりといったファイルの操作をシェルスクリプトで行っていた。
が、Windows 環境ではこのスクリプトを実行するためだけに WSL を立ち上げる必要が出てきてしまった。

Scala でこれらのツールを書き直した。
JVM くらいはだいたいどのマシンにも入っているため都合が良いと考えた次第。

stoneream/diary-generator

上述したファイル操作の機能に加えて、テンプレート機能(今日の日付を自動的に入れるなど)がある。
その他、バッチファイルを同梱している。

おわりに

誰かに使ってもらおうという気が一切無いため 自分用に書いたツールのため説明やら配布方法が不親切だが、おすそ分け的に記事を書いてみることにした。
現代には Notion とか Google Document とか便利なツールが沢山あるけども、プレーンテキストで記述・管理したい気持ちが強いためこのようなことをしている。

https://i.imgur.com/cqipDmQ.png

VSCode なり ag コマンドなりで雑に検索できて便利)

OAuthの認可レスポンスを受け取る一時的なHTTPサーバー

動機

  • GoogleAPI やら SpotifyAPI やらを叩いて何らかの処理を自動化したりしたい(というかしている
  • この手の API は OAuth でリソースへのアクセスを認可していることが多い
  • 認可コードを受け取るための Web サーバーを書く(立てる)ほどでもないことがある
  • いちいちそのためのサーバーを書いたり、認可コードをコピペで貼り付けたりするのが面倒くさい
  • ので、認可レスポンスを受け取るためだけの一時的な HTTP サーバーを立てられたらいいと思った

補足説明

  • "localhost:8080/callback"宛に何らかの HTTP のリクエストが来たらクエリパラメーターを取り出し HTTP サーバーは即座に終了する

リポジトリ

stoneream/token-receiver

サンプルコード

token-receiver/Main.scala at main · stoneream/token-receiver

今後

  • アクセストークン・リフレッシュトークンを永続化する仕組み
  • オプション(一時サーバーのポート番号を指定したり)で色々指定できるようにする
  • 親切にエラーをハンドルする

その他

  • 認可リクエスト、アクセストークンリクエストはどこのサービスも同じような形をしている
  • ので、そのへんもうまく抽象化してやりたい
  • が、微妙に必須のパラメーターが違うのでやりづらい
  • ので、やってない

「石巻ハッカソン 2022」に参加しました

9 月 23 日(金)から 9 月 25 日(日)にかけて開催された「石巻ハッカソン 2022」に参加しました。
見たことが無いものが見られるワクワク、各チームの創作に対する熱気を隣の席から直に感じられる良いイベントでした。
運営の皆さま、参加者の皆さま大変お疲れ様でした。

作ったもの

今回のハッカソンのテーマは「爆発」です。
イデアピッチからのチームビルディングで「筋肉を爆発させたい人」と「どんな音声も爆発音に変換したい人(私)」が悪魔合体し「筋肉爆発チーム」が結成され、「スクワットで筋肉を爆発させる」ウェブアプリケーションを開発しました。
加速度センサーを使いスクワットの状態を計測しつつ、マイクでトレーニング中の音声を録音し爆発音に変換するアプリケーションです。
ひとりひとり個性のある音で筋肉を爆発させることができます。
はち切れんばかりの大腿筋と爆発のアニメーションにも注目です。

デモ動画は以下から視聴できます。

担当した実装について

私は「マイクでトレーニング中の音声を録音して爆発音に変換する」部分の実装をしました。
仕様を考えながら Ableton Live(波形を編集したりできるソフトウェア)でなんとなく「ゲインを上げて、ピッチを下げて、リバーブをかける」とどんな音声も爆発音っぽくなるとわかりました。
あとは Web Audio API でうまいこと実装できないか調べていると、Tone.js にやりたいことが詰まっていたため巨人の肩に乗ることにしました。
(あとは手を動かせる時間を考慮...)

以下に簡単なデモと参考資料を置いておきます。

お楽しみイベント

会場は海沿いで景色も良くリラックスして開発に取り組めました。(海産物も美味しかったです。)
昼食にはカレー、おやつにはたいやきが振る舞われたり、開発会場から飲み屋さんが近かったり...
ここ数年のコロナ禍で減ってしまった人との出会いというか、現場感を久しぶり体感できて良い時間を過ごすことができました。

M-AUDIO Keystation 49 修理記録

製品情報:Keystation 49:M-AUDIO : http://m-audio.jp/keystation49/

3 年ほど前に購入した MIDI キーボードの USB ピンが複雑骨折してしまいました。
これまでも何度かピンが曲がったことがあり、その度にピンセットで起こして騙し騙し使っていたもののついに通電しなくなりました。
(脆すぎる USB ポートは後継機の Keystation 49 MK3 では改善されているようです。)

https://i.imgur.com/M49gjb1.jpg

「直せたらラッキー」くらいの気持ちで開けてみることに。

https://i.imgur.com/3EYCkgp.jpg

単純に USB ポートの部分を交換したら良さそうです。

https://i.imgur.com/adlWmIg.jpg

秋月電子通商で USB コネクタを購入しました。
中央に棒のようなものが通っているため折れにくいはずです。
基板取付用USBコネクタ(Bタイプ メス): パーツ一般 秋月電子通商-電子部品・ネット通販 : https://akizukidenshi.com/catalog/g/gC-07675/

https://i.imgur.com/LhqZfBx.jpg

ハンダ吸い取り線でハンダを吸い取りながらペンチでグリグリと引き抜き購入した USB コネクタをくっつけます。
見た目はかなり汚いですが形にはなりました。

https://i.imgur.com/HGneJYz.jpg

手戻りが面倒くさいためこの状態で通電をチェックします。

https://i.imgur.com/TxK2aVT.jpg

通電しました。問題なさそうです。

https://i.imgur.com/2nphCyj.jpg

元通りに組み立て直し、DAW にて動作確認が取れました。これで修理完了です。

https://i.imgur.com/Az7Ab9O.jpg

My New Gear

実は修理がうまくいくと思っていなかったため、USB コネクタを注文しつつ新しい MIDI キーボードも注文していました。
Novation の Launchkey 61 MK3 です。
今後はこちらがメインで Keystation 49 は予備として頑張ってもらいます。

Launchkey | Novation : https://novationmusic.com/ja/keys/launchkey

https://i.imgur.com/rpfMqm1.jpg