2024年の投稿
TanStack Routerの単体テストで警告を出さない方法を確認する
構想を温めていた小品の新作自作Webアプリに手を付け始めました。新作はクライアントサイドでルーティングを行うのでルーティング用ライブラリが必要です。定番は古くからあり私も別アプリで使っているReact Routerかと思いますが、次の理由から今回は見送り。breaking changeにたびたび巻き込まれてあまりいい印象がないRemixとの統合を果たすv7のリリースが間近で安定するまで少し時間がかかりそう代わりに世評の高いTanStack Routerを試してみることにしました。TanStack RouterはFile-Based Routing推奨とのことなので素直に従ってみたところ、型推論や補完が強力に働いて感心することしきり。しかしルーティングってそんなに変わるものでもないので、労力のかけかたは少し疑問に思わないでもないです。…
近代の負の遺産が - KORG Gadget新曲"Scars aching violently at twilight"公開
ブラウザライブコーディングアプリ"live tone(PoC)"v0.3.0リリース
Tone.jsを利用したブラウザライブコーディングアプリ"live tone(PoC)"のv0.3.0をリリースしました。https://github.com/DBC-Works/live-tone/releases/tag/v0.3.0今回の目玉はコード共有機能の実装。アクセスURLを発行できるWebSocketサーバーを使えるなら(私はフリープランのあるAzure Web PubSubを使いました)、URLを発行して"WebSocket server URL"にペースト、識別用のタグも指定してからの"Connect"ボタン押下でWebSocketサーバーに接続します。接続中は"Share"ボタンを押下するたびに自分のコードを同じく接続している他のユーザーに送信、他のユーザーの送信したコードも随時受信します。コードを受信するとそのユーザーの指定したタグ名のタブが増え、そのタブの選択で受信コードを閲覧できます(読み取り専用です)。"Run"ボタンを押下すればすべてのコードを同時に実行=再生します。…
多くの矛盾の狭間で - KORG Gadget+GUMI新曲"アンビバレンス・ステップス"
JavaでECDH-ES指定JWEの暗号化と復号を行う方法
暗号化データのフォーマットをJSONベースで規定したJSON Web Encryption(JWE)はJSON Web Token(JWT)の一部として取りあつかわれることが多く明示的に処理する機会は少ないと思われますが、仕様としてはJWTとは独立なので単独での使用も可能です。最近業務でアルゴリズムにECDH-ESを指定したJWE暗号化データの復号処理をJavaで実装することになったのですが、まとまった参考になる情報がなかなか見あたらず難儀しました。同じように苦労される方がいそうなので、暗号化も含めメモとして残しておきます。
ECDH-ESとは?
ECDH-ESはElliptic Curve Diffie-Hellman Ephemeral Staticの略で楕円曲線Diffie-Hellman鍵共有の一種、ECDHE(一時的楕円曲線Diffie-Hellman鍵共有)にカテゴライズされるものです。ハイフン以降のESが鍵の管理方法を示していて、Ephemeralは暗号化側の鍵が一時的であること、Staticは復号側の鍵の管理が永続的であることを示します。…Azure Web PubSubはWebSocketサーバーとして利用可能、ただすこし注意が必要
このところMicrosoft Azureの製品の一つであるAzure Web PubSubをいろいろ試していて、普通のWebSocketサーバーとして使えることを確認できたので気づいた点をメモとして残しておきます。2024年9月現在の話です。
公開されているJavaScript用ライブラリはNode.js用
ブラウザとAzure Web PubSubの通信はWebSocket APIで行えるため専用のライブラリは必要ありません。Azure Web PubSubのJavaScript用クライアントライブラリとしてマイクロソフトはWeb PubSub client library for JavaScriptを公開しています。…儚く流れる希望、 - KORG Gadget新曲"hope flowing ephemerally"公開
――それすらも求めざるを得ない人々へ。KORG Gadgetでの新作、"hope flowing ephemerally"を公開しました。お聴きいただければ幸いです。すべての権力者はただちに民衆への暴力行使を停止せよ。2024-09-02(Mon)追記:KORG Gadget作品の作曲コンテスト、GadgetSonic 2024のFIRE RED STAGEに選出していただきました。3回目の挑戦で初選出。ありがとうございます。
レビュー: 近藤銀河『フェミニスト、ゲームやってる』(晶文社)
『フェミニスト、ゲームやってる』は、2024年3月に惜しまれながら閉鎖されたWebマガジンWEZZYに掲載された連載をベースに、描きおろしを大幅に追加して刊行された近藤銀河初の単著です。私は取り上げられているゲームはどれもやったことなし、有名なタイトルだけ目にしたことがある、程度しかゲームに関心のない人間なのですが、この本はとても興味深く刺激的な内容でした。小説や映画などの片方向のメディアで受け手に求められるデコードのしかたはかならずしも明瞭とは限らず、故に批評の可能性が誤読といったかたちでも開かれます。操作によるユーザーとの共同作業が前提となるインタラクティブなメディアとしてのゲームの特質はその点においてはむしろ自由度は低いのでは?となんとなく思っていたのですが、著者は操作に対するためらいやとまどい、プレイの中断や放棄など、ゲームの求める規範の受容への抵抗にその契機を見て取ります。…
ちょっと楽するLINQの書きかた
最近他の人の書いたメソッド構文のLINQを読む機会が増えて、もっとシンプルに書けるのになあと思うことがしばしば。典型的には、LINQで絞り込んだIEnumerable<T>に対してEnumerable.ToList<TSource>(IEnumerable<TSource>) メソッドを呼び出してList<T>クラスのインスタンスを生成、その後List<T>.ForEach(Action<T>) メソッドで取り出した各要素を別のリストにList<T>.Add(T) メソッドで追加したりするような処理です。LINQの処理はイテレーターをベースにしています。一方Listクラスは要素をオンメモリで管理します。そのためイテレーターで処理できるデータ(LINQ to Entitiesでアクセスしたデータなど)はなるべく…
その霞んだ先に - KORG Gadget新曲"On the edge of the world hazy with anger"公開
エントリを表示PowerShellで自己署名証明書を発行して証明書ストアのルート証明書にコピーする方法
Webアプリケーションの開発では自己署名証明書が使いたくなることがあります。サーバーがWindows + Internet Information Service(IIS)であれば作成は次の方法で行えます。IISマネージャーで作成PowerShellのコマンドレットで作成手軽なのはIISマネージャーでの作成ですが小回りが利きません。一方PowerShellコマンドレットでの作成はこまかい指定が可能ですがIIS向けの証明書ストア登録が十分ではありません。Webを検索するとMicrosoft管理コンソール(MMC)のスナップインで証明書ストアにアクセスして手動でルート証明書にコピーするやりかたが散見されます。…
live tone v0.2.0リリース
Tone.jsを使えばブラウザでライブコーディングできるのでは?と年の初めに手を付け始めたlive tone、肝心のTone.jsの使いかたがいまひとつわからず最低限実装したところでほったらかしていましたが、情報にそれとなく触れる中でようやく使いかたがすこしわかってきたので、機能をすこし追加してv0.2.0としました。追加機能は次。スケールやコードのサポート配列やイテレーション操作用のユーティリティを追加コード編集要素をAce(React Ace)に変更コードエディタコンポーネントの導入で見た目もそれっぽくなり使えそうな感じが出てきたのではないかと思います。次のアップデートのアイディアも思いついたので、そこまではなんとか開発したいところ。とはいえ大きめのトピックなので時間がかかりそうですし、そもそも実現できるか不明………
赤い月の欠片拾い - KORG Gadget+GUMI新曲"赤い月に架けて"公開
エントリを表示React AceをTesting Libraryでテストするときはフォーカスを明示設定すること
Tone.jsをベースにブラウザでのライブコーディングを可能にするlive tone、使えなくもないという感じにまではできそうなのでコード編集要素を標準のtextareaから高機能なコードエディタに変えることにしました。代表的なコード編集用コンポーネントと言えばCodeMirror、Ace、Monaco Editorあたりかと思いますが、今回は機能とサイズのバランスからAceを採用。React用のラッパーライブラリReact-Aceを使うことでtextareaからの置き換えも次を調整するだけで済みました。onchangeイベントハンドラの引数が標準と異なるので対応する幅と高さをwidthheight…
暗闇の先の - KORG Gadget新曲"Beyond the dark night"公開
エントリを表示川岸から海原まで - KORG Gadget+GUMI新曲"翼待つ夜"公開
エントリを表示New single "引き潮に寄せて + 光の足跡と" is out now
最近bandcampに歌ものをアップロードしていなかったので、つながりの感じられる2曲をカップリング、シングルとして公開しました。お聴きいただければ幸いです。引き潮に寄せて + 光の足跡と by Sad Juno
Hibernate ORM組み込みのデータベースコネクションプールはあくまで開発用
業務でJava 8製システムのお守りをすることになり、情報収集でWebを検索していてJavaの日本語情報のプレゼンス低下を強く感じる今日このごろ。そんな中Hibernate ORMを使ってデータベースにアクセスするWildFlyモジュールの一部機能をスタンドアロンアプリケーションに切り出したところ、実行時に
Using Hibernate built-in connection pool (not for production use!)と警告されてしまいました。組み込みのデータベースコネクションプールは開発用で運用向けではないんですねえ、なるほど。Hibernate ORM User Guideの8. Database Access、8.1. ConnectionProvider…
世界は悲劇に - KORG Gadget新曲"Too many screams, too many cracks"公開
エントリを表示呼びかけるあの声が - KORG Gadget+GUMI新曲"呼応"公開
エントリを表示『良いコード/悪いコードで学ぶ設計入門』を読むにあたり気をつけたいこと
諸事情あってITエンジニア本大賞2023技術書部門大賞受賞作の『良いコード/悪いコードで学ぶ設計入門』(仙塲大也、技術評論社)にいまごろになって目を通しました。「設計」にかぎらない幅広いトピックをあつかう点で看板に偽りありですが、その手広さが支持された一因なのでしょう。ステップアップを図りたい初級者にとって有用なアドバイスが得られる本であることは確かだと思います。一方で個人的には見過ごせない記述もまま見られ、手放しでお勧めできる本でもないというのが率直な評価です。いくつかメモします。(用語は同書を踏襲します)
不変をめぐって
同書の強い主張の一つに「クラスは原則として不変にすること」があります。基本的には同意しますが、その主張のしかたには疑問があります。…誰にも奪えない - M01D新曲"a part of my soul no one can take away"公開
エントリを表示その地に住まう人々に - M01D+GUMI新曲"光の足跡と"公開
エントリを表示ブラウザライブコーディングアプリ"live tone(PoC)"公開
ライブコーディングの情報をすこし収集してみようかとふと思い、『演奏するプログラミング、ライブコーディングの思想と実践』に目を通したりして、これはいまならブラウザでも実現できるのではないかという気がしたのでちょっとプロジェクトを作ってみました。ウェブオーディオAPIのラッパーであるTone.jsを呼び出すコードをブラウザ上で入力・実行できます。https://github.com/DBC-Works/live-tone……しかし自分で作っておいてなんですが、Tone.jsのAPIがおよそライブコーディングに向かないため、実用性にははなはだ疑問が残ります。Tone.jsの挙動も個人的にはいまいちよくわかりません(ドキュメントにも誤りがあったりして)。まあProof of Concept、概念実装ということで大目に見ていただければ。…
Spring小ネタ2題
Java製WebアプリケーションフレームワークのSpringを実務で使っていて気づいた小ネタを2点ほど。SpringのセッションID発行はコード上でのセッションスコープのBeanの参照と連動します。セッションスコープを指定したBeanを定義してDI等でインスタンスを生成すると発行されるようになります。セッションスコープ指定Beanを定義してもインスタンスを生成しなければ発行されませんSpring MVCのテストフレームワークであるMockMvcを使った単体テストでモック化したServletContextインスタンスが必要になったときはMockServletContextクラスを@Autowired…
"Protest EP 2024-02" is out now
昨今の情勢について自分なりに意志表明した EP を公開しました。お聴きいただければ幸いです。Protest EP 2024-02 by Sad Juno
何度でも繰り返す、 - KORG Gadget新曲"to the world de(con)structive"公開
React単体テスト実行時のSVGコンポーネント警告解消方法(vite + vitest編)
React+vite+vitest(+Happy DOM)のフロントエンドプロジェクトに初挑戦、SVGの参照にReactコンポーネントとしてのインポートを可能にするvite用プラグインvite-plugin-svgr(実体はSVGR)を利用したところ、vitest実行で次の警告が報告されました。(…)実害はありませんがノイズではあるので、解消を試みて次で解決できました。ユニットテスト実行時の置き換え用ダミーコンポーネント定義を任意の場所(jestのマナーに従うならsrc/__mock__/あたり)に保存します(…)SVGの参照をダミーコンポーネントに置き換えるエイリアスをvitestの設定で定義します…