概念の直交性

ソフトウェアエンジニアをしていると概念に対する直交性の概念にでくわすことが割とよくある。 ミニマルな例だと、1つのクラスに2つのboolフィールドがあって、それらに関係がない(= 状態が4通りある)ときに、 これらのフラグは直交するという(自分もそういうコメントを書く)。

自分の感想です

とはいえなんかやっぱり気になるので、どこから出てきたのかちょっと調べた。

Weblioで引く

orthogonalの意味・使い方・読み方 | Weblio英和辞書

1〔数学〕直交の《a直角の, 垂直の b内積の定義された関数空間に属する2つの関数で , 互いの内積が0となる》

2〔結晶〕直交の《結晶軸が直角で交わる》

3〔統計〕直交の a〈変数が〉統計的に独立した b(実験計画法において)〈配置が〉直交している

なるほど統計!ということでWikipediaを見る

Orthogonality - Wikipedia

When performing statistical analysis, independent variables that affect a particular dependent variable are said to be orthogonal if they are uncorrelated, since the covariance forms an inner product. In this case the same results are obtained for the effect of any of the independent variables upon the dependent variable, regardless of whether one models the effects of the variables individually with simple regression or simultaneously with multiple regression. If correlation is present, the factors are not orthogonal and different results are obtained by the two methods. This usage arises from the fact that if centered by subtracting the expected value (the mean), uncorrelated variables are orthogonal in the geometric sense discussed above, both as observed data (i.e., vectors) and as random variables (i.e., density functions).

統計では相関がない変数に対して直交してると呼ぶらしい。 XとYの相関がないというのは、E[(X-E[X])(Y-E[Y])] = 0ということで、つまり偏差が直交してるということでした。なるほど~。

まとめ

統計用語だった。独立なら偏差が直交するのはその通りなので、別に「直交する」でもそんなに違和感はない。 (E(XY)=0とConv[X,Y]=0で混乱しそうなので、数学をする上ではあんまりいい用語だとは思わないですが・・・)

rekordboxのライブラリの管理について考える

正月休みに、rekordboxのライブラリの管理について考えたので備忘録としてメモしておく。

環境

  • 普段はWindowsのデスクトップPCを使っている
  • 音楽を聴くのはSpotifyがメイン
  • PC DJとUSBへのエクスポートだけMakBook Pro
  • 音源はバックアップを兼ねてiCloudに置いている(200GBで400年/月)
  • Win/Mac間のデータのやり取りもiCloudを使っている

要件

  • 音源(mp3、wavなど)のバックアップをクラウドに置く
  • PC変更時にrekordboxライブラリの移行を簡単にする
  • rekordboxライブラリに入っている音源を気軽にPCで聴けるようにする

背景

  • MBPがM1リリース前の無駄にハイスぺのやつで、DJに使ってるだけでもったいないので売ってしまいたい
  • Spotifyとrekordboxの間の乖離が大きくなっていて、買ったけど聴けてない曲みたいなのがあってかなしい
  • 自分はローカル端末のバックアップがとても苦手なのでクラウドじゃないと嫌

解決策

rekordboxに月2500円課金すれば以下で解決できる。

  • rekordboxのCreativeプラン(1600円/月)に入ってCloudLibrarySyncを使えるようにする
  • rekordboxのCloud Option (+ 900円/月)Dropboxのストレージに課金する
  • PCにDropboxのアプリを入れてiTunesのメディアフォルダごとDropboxに置く
  • CloudLibrarySyncの同期方法を「全ての音源を同期する」にする

Google DriveではなくDropboxを使うのはなぜ?

CloudLibrarySyncはGoogle DriveDropboxに対応しているけど、 Google Driveは同期方式が「選択した音源を同期する」しか使えないため。(あと、rekordbox iOSDropboxにのみ対応してる)

CloudLibrarySyncの同期方式については↓のFAQが詳しい。

https://rekordbox.com/ja/support/faq/library-sync-6/#faq-q600166

「全て同期」と「選択同期」の2つがあって、前者はDropboxアプリと連携して文字通り全てを同期する(ローカルはクラウドのコピーになる)。 後者は、選択したファイルだけをダウンロードしたりアンロードしたりできるやつで、こっちはDropbox/GoogleDriveのAPIを使うのでアプリが不要。 アプリが不要ということはつまり、アプリと連携できないということで、 rekordboxはDropbox/Google Driveアプリの落としてきたローカルファイルとは別に自前のローカルファイル置き場に音源を置く形になるので、ストレージを2倍食うことになる。

また、iTunesとrekordboxを連携させたい場合、同じ音源を使用する必要があるので、iTunesもrekordboxのローカルフォルダ置き場に引っ張られる形になる。 例えば、端末Xに曲Aと曲B、端末Yに曲Cがあるとして、それぞれからrekordboxを通してアップロードするとクラウド上のフォルダ構造は以下のようになる。

root
 |- 端末X
 | |- Aのアーティスト
 | | |- Aのアルバム
 | |  |- A.mp3
 | |- Bのアーティスト
 |  |- Bのアルバム
 |   |- B.mp3
 |- 端末Y
   |- Cのアーティスト
   | |- Cのアルバム
   |  |- C.mp3  

つまり、元が同じ音源でも、アップロードした端末が違えば違う曲扱いになる、ということ。

端末Xでrekordboxを使ってCをダウンロードすると ミュージック/PioneerDJ/Moved from Cloud/端末Y/Cのアーティスト/Cのアルバム/C.mp3 にファイルが置かれる。 (ミュージック/PioneerDJ/Moved from Cloudは設定から変更できる) rekordbox上でCをアンロードすると、↑のパスにあるC.mp3を削除する、といった形で選択同期が実装されてる。

リモートのフォルダ構造にローカル端末の情報が入ってるのが、自分には合わなかった。 (一応逃げ道として、Dropboxアプリの同期フォルダに入っている音源をrekordboxに追加するとアップロード済み扱いになるので、フォルダ構造を維持できる。Google Driveだとこのやり方もできなかった。) 端末間の音源の衝突を避けるためにeasyにしたという気持ちはわからんではないが・・・

iTunesにフォルダ管理をさせる

iTunes上で音源のタグを編集すると、iTunesが勝手にフォルダ構造を整理してくれる仕組みがあって、これが良さそう。 rekordboxはiTunesの音源やプレイリストを呼んでくれるし、rekordboxのプレイリストをiTunesに入れる場合は、m3u8ファイルに書き出してiTunesに読み込ませればOK。 AIMPとかも試してみたけど、使いにくかったのでボツにした。

代替案

月2500円か~という気持ちもあり、常時複数の端末でrekordbox使わないしややオーバースペックだな~と感じたので別の案を考えた。

外付けデバイスを使う

rekordboxやiTunesのメディアフォルダを丸ごと外付けのSSDやHDDに置くというもの。結構やってる人がいそう。 バックアップ作業がちゃんとできれば、初期費用を払えば後はお金もかからずにやれるはずでかなり良さそう。 最初に書いた通り自分はクラウドに置きたいという気持ちがあるので、なし。

Spotifyを使う

普段は家での作業中もSpotifyで音楽を聴いているので、Spotifyとrekordbox間でプレイリストを同期できれば良さそう。 Spotifyはローカルファイルの再生もできるので、プレイリストを追加するAPIを叩けば行けるんではと思ったけど、

It is not currently possible to add local files to playlists using the Web API, but they can be Reordered or Removed. Playlists | Spotify for Developers

とのことで、ダメだった。残念。

rekordbox.xmlをデバイスに合わせて書き換える

rekordboxにはコレクションをxmlに書き出す機能があって、設定からxmlファイルを指定するとそれをライブラリに読み込んでくれる。

MBPのrekordboxでxmlを書き出して、それをWinのrekordboxに読み込めるようにするには以下をすれば良さそうだった。

  • MacとWinでiCloudの同期フォルダのパスが違うので変換する
  • Macxmlは音源のパスの文字列がUTF-8-MACになっているのでUTF-8に変換する

ちょっとコードを書いたらできそうなので良さそうと思ったけど、xmlファイルはマイタグやインテリジェントプレイリストの条件式を含まないので無しということに。

rekordboxの内部dbファイルを読み書きする

GitHub - dvcrn/go-rekordbox: Rekordbox database wrapper in Go

などを見た感じ、rekordbox6のdbのread/writeはやろうと思えばできる、という状況に見える。 ちょっとした実装をすれば色々できそうだけど、まあハッキーだしrekordboxのアプデで動かなくなる可能性が十分あるのでなし。

最終案

色々考えて、う~ん月2500円か~という気持ちになったので以下でいくことにした

  • Dropboxに課金する
  • Dropboxアプリの管理フォルダにiTunesのメディアフォルダを全部置く
  • iTunesを使ってタグを編集してフォルダ管理を行う
  • iTunesを通してrekordboxに音源を読み込ませる
  • 必要に応じてrekordboxのプレイリストをiTunesに入れる(m3u8ファイルを使う)
  • PCを移行したくなったらCloudLibrarySyncに課金して全て同期方式にする
  • rekordboxのバックアップは必要ならxmlDropboxに置く(マイタグとインテリジェントプレイリストは諦める)

茶箱の年越しパーティに参加した

早稲田にある音楽喫茶 茶箱のNew Year Countdown Partyに参加しました。

とても楽しかったので色々書きます。

sabaco.jp


自分が茶箱を知ったのは高専DJ部のtwitch配信だったと思います。

kosendj-bu.in

オシャレな名前の箱だ、みたいな第一印象があった。 ちなみに高専DJ部を知ったのはうなすけさん経緯で、うなすけさんを知ったのは(京都の)インターネット経緯だと思います。

茶箱に初めて行ったのは、7/26にmacktkgさんとpolamjagさんのCOMBUSTION CHAMBERという自動車四つ打ちパーティで、 ありがたいことにゲストDJとして呼んでいただきました。

sabaco.jp

フライヤーがかっこいい! オーガナイザーのお二人との接点はというと、SMTP++やIMAP++やpastak生誕祭なので、京都のインターネットはすごいです。

smtppp.club

imappp.club

xn--9myu5gp8s.pastak.net

話を戻すと、ちょうどCDJ3000が導入されて最初のパーティでした。 色んな人が来てくれてうれしかったし、社内で告知したら同僚が来てくれて心強かったです。感謝。

少しDJの話をします。

オールジャンルでないパーティに出たのは初めてで、自動車免許失効済みの自分が自動車四つ打ちをやれるのか?みたいな気持ちがありました。

自分のハウスの原点はFrench Touch(French Houseのことですがこう呼んだ方がお洒落だとどこかで読みました)で、 French Touchで車といえばLifelikeのNight Patrolや!という気持ちがあったんですが、前のお二人が最高な感じで繋いでくれたので もう自分はスピード違反してアッパーな感じでやるしかない!(プロフィールにもそう書いてある)という気持ちになってアシッドベースをビヨビヨさせたりしていたら1時間経っていました。 自動車ぽかったかはわからんけど、なんだかよい感じでやれたように思っています。 自分はとにかく本番に弱いタイプなので、貴重な成功体験となったし、DJ楽しいなと強く感じたのを覚えています。

かけたやつ。

Night Patrol好き open.spotify.com

そのあと茶箱に行ったのは9/30の高専DJ部と12/9のwarahouseでした。

sabaco.jp

sabaco.jp

どちらも知り合いばかりのパーティじゃなかったけど、早めに突撃して前で爆踊りして「めっちゃいい!」って叫んでいたら友達が増えていました。 今思うと、どれも茶箱アトモスフィア溢れるパーティだったし、自分はそれが好きなんだと思います。


茶箱の年越しパーティは、演者として出たことのある人は応募していいよ、というレギュレーションだったので、あんまり深く考えずに応募しました。

後になって演者がわかってきたところで、アッなんか自分以外すごい人ばっかりだぞ!という気持ちになったんですが、 実際はいつもの茶箱アトモスフィア溢れるパーティで、最初から最後までワイワイしていたら9時間経過していました。とにかくハッピーで楽しかった。

色んな人と話せたし、良い時間を共有できてうれしかったです。今年東京に引っ越してきて、クラブに遊びに行く機会が増えて、友達の友達が友達になる機会が結構ありました。 上手く言えないけど、こういうのを大事にしていきたい。

年越しはAcidGelgeさんのLiveセットでなんかもうすごかったです。すごい音が鳴っていたし、そのまま年を越して最高でした。 終わり良ければ総て良しということで2023年は良い年でした。ありがとうございました。

今年もどうぞよろしくお願いします。

アーカイブはこちら(これ見えるんかな?)

見返すと色々甘くて厳しい顔になってしまうので、精進したい~

ネットワークプログラミング

アプリケーションをserver/clientという風に分けた時のserver側に対して、自分は結構苦手意識がある。そもそもネットワークというのがよくわかってない上に、AWSとかがでてくるとより分からない感じがある。 所謂「地に足がついていない」感覚が抜けないというのが原因だと思っているが、どうしたらいいのか。

ということを社内で話すと、ソケットでネットワークプログラミングをやってみれば?と言われたので、ちょっとだけやった。 とりあえずHTTPリクエストを受け取ってパースした上で、問答無用で決まったレスポンスを返すserverができた。

以下、感想。

思ったよりも学びが多くて良かった。自分はあまり情報やコンピューターサイエンスを勉強せずにゲーム会社に入り、雰囲気でserver(Rails)とclient(Unity)の実装をしていて、 雰囲気でコードを書けば動くという感じだったので、新鮮な気持ちでやれたと思う。TCPとかHTTPとか普段は全然意識しないんだけど、ソケットでやりとりを記述すると、TCPとHTTPはレイヤーが違っていて、HTTPはTCPの上に乗っかっているというのがコードで見えるのが良い。地に足がついている、というのはこういうことを言うのだ!

HTTPとかはclientがserverに送ってくるbyte列の決まり事なので、なくてもserver/clientのやり取りは(独自のプロトコルで)できる、とかも(当たり前なんだと思うが)なるほどという感じだった。HTTPはテキストベースなので、パースも雑にできて楽だったが、MQTTはバイナリでやり取りするのでHTTPの雑なパースよりも大変そう~と思ってやめた。が、仕様をある程度理解できるようになったし、実装を頭の中で考えるとかはできるので良いのではないでしょうか。テキストベースでMQTT(というかPub/Sub)を実装してみても良いかもしれない。

言語はWebサイトに従ってCで書いた。WindowsでもWSLでLinux環境を構築できるので助かる。少し前にC++でレイトレの勉強をしていたというのもあって、写経をする程度ならあんまり困らなかった。というか、困ったときはChatGPTに質問すればサンプルコード付きで教えてくれるのでそれで事足りている。逆にGoogle検索が本当に使えなくなってきていて厳しさを感じる。助けて!

普通に面白かったので、次はUDPというやつもやってみたい。

部屋着

月に一度の出社日以外は家で仕事をしていて、週末もどこかにおしゃれしてでかけるということも無いので、衣類については寝間着と部屋着を往復してばかりになってきた。

去年は寝間着 = 部屋着だったのだけど、寝起きの気持ちで仕事が始まるのもアレなので、ちょっと前からは起きたら部屋着に着替えるようにしている。丁寧ポイントが少し得られる。

部屋着は無印とユニクロのそれっぽいラフなやつを適当に買って着まわしている。最近の夏用の部屋着というのはすごくて、ユニクロのエアリズムのような涼しい衣類の開発が進んでいてすごい。

自分はかなり痩せているのもあり、学生の頃は細い服を着ることが多く、スキニーなども履いていたが、ゆったりした服の方が楽ということを知ってからはワイドパンツなどばかりを履いている。クラブなどに行くことが稀にあるが、そういうときは虎の子の黒いスキニーを履いてごまかすのである。

ドラム式の洗濯機を買ってからは、干すのも面倒なので大体全部乾燥までやってしまっている。乾燥までかけると衣類は痛むんだけど、着潰したらまた買えばよいという感じになっていて、どんどん味気なくなっていってる感じがある。

明日、江ノ島に行くことになっており、服がないので慌ててユニクロに行った。チェンソーマンのTシャツが売っていて良さそうな感じだったが、プリントへのダメージを気にするのが面倒そうだなと思って買わなかった。こうやってどんどんつまんない人間になっていくのだろう、という感じがして、ちょっと怖くなった。

ユニクロも無印もサイズはSが丁度よい。店頭にSサイズがないことは結構な頻度であり、アプリで取り寄せられると言われるのだが、アプリで取り寄せて後日店頭に行くほど熱意もないので、Mサイズで誤魔化している。ユニクロで買ったステテコはMサイズだったが、こういうラフな服はSでもMでも大差がないように感じる。快適で良い感じなので、今後の夏はステテコだけで良いなと思った。

自分が町を歩く人々の服装に興味がないように、人々も自分の服装には興味がないので、快適なものを着るのが良さそうに思っている。

抽象化できないこともある

数学が強力なのは抽象性と厳密性の両方を兼ね備えているから、というのどこかの偉い先生がどこかに書いていて、すごく印象に残っている。

抽象的なものが力を発揮するのは厳密性が足場を支えているからであり、曖昧な世界観で抽象的なことを述べても、そのままブラックボックス的に使えることはあんまりないと思っている。

アルゴリズムみたいな話だと厳密性が高いので「このアルゴリズムはO(log n)で計算できます」と言うことであれば、実際O(log n)で計算されることが保証されているし、盲目的に使える。 一方で、問題がすごく複雑だったり曖昧だったりして、全てを変数にすることができないようなこともあって、そういうものは厳密性を上げるのが難しいなと感じてる。例えば、設計とかプロジェクトマネジメントとかが当てはまる。

例えば、「目の前の問題に対してこのデザインパターンが有用かどうか」みたいなのは結構難しい問題だと思う。デザインパターンは数学でいうところの「命題」みたいな立ち位置のように見えるが、自分の目の前の問題が「命題」の仮定を満たすかどうかを確認するのは容易じゃないように思う。じゃあどうしているのかと言うと、デザインパターンの本などには具体例がちゃんと説明してある。それを見て、こういう場合にこういう手法を取るとうまくいくことがあるのだな、と学ぶ。学んだうえで、自分の設定でそれが使えるかどうかを自分やチームで考える、ということを行う。つまり具体的な問題を抽象的なパターンにしているんだけど、実際には抽象化したものだけでは不十分なので具体例とセットで学ぼうね、ということになってる。

じゃあ厳密性の低い設定では、物事を抽象化することに意味はないのかというと、そうではないと思っている、というのは前にも書いていて、今も同じ考えでいる。

じゃあアーキテクチャとかデザインパターンとかって何なんですか?役に立たないんですか?というとそうではないと自分は思う。 設計の本に書かれている抽象的なパターンとされているものは、特定の問題に対して優秀なエンジニアたちが与えた解なのではないか。 具体的な問題があってそれに対する解を与えて、じゃあなんでそれが解なのかを考えると、要素をそぎ落として抽象的なものが残るはずで、 なんかそういう手続きの最終的な出力なのだと思う。 それから学ぶためにやるべきことは何かというと、解を見ることではなくて、問題と解の関係や、解決の過程なんじゃないかと思う。

目の前の問題に向き合うしかない - 気持ち

プロジェクト進行などについても似たようなことを感じている。人間が絡むので当たり前だが、問題が複雑で抽象化したときに情報が抜け落ちているのではと思うことがある。今の職場ではプロジェクト進行をやることが結構あって、いっぱい失敗したり助けられたりしつつ何とかやっている。なんとなく自分の中で「こういうときはこうするのがよさそう」みたいな理解はあるが、抽象化するのは諦めつつあり、ケーススタディとして他人に共有するのが良いのかなと考えたりしてる。

結局Twitterを見ている

今年の3月くらいにスマホからTwitterのアプリを消した。
shiva-duke.hatenablog.com


それで、上半期が終わった今どうなったかというと、iPhone8のSafariのブラウザでTwitterを見ている。もちろん不便なのでそんなにがっつり見ないようになったけど、もちろん見てしまう。

とはいえ、Twitterに対する自分のスタンスは結構変わったなと思う。フォローしている人の全てをチェックする、みたいな謎の強迫観念からは完全に解放された感じがある。結果として、おもしろイベントやら何やらを見落としたりすることはもちろんあるけど、たまたま開いたTwitterで流れてきたイベントに参加する、などで丁度良いのかもな、とも思う。

たまたま開いたブログで見かけたイベントに参加するのも良いと思います、ということで7/26(水)に茶箱でやるmactkgさんとpolamjagさんの四つ打ちイベントに出るので、来てくれると嬉しいです。誘っていただき感謝。。。


プロフィールでめちゃくちゃ迷ったけど、なんとなく調和された感じになっていてよかった。ハウスをかけます!などと宣言してしまったけど、多分ハウスじゃないのもやると思っています。自分は車を持っていないけど、自分がドライブするならこういうの聴きたいなと思うものがやれたらいいなと思っています。