「持続可能なソフトウェア」の探求がライフワーク。C#、.NET、WPFあたりが住処。Microsoft MVP for Development Technologies(2017/01〜)。
ソフトウェア開発の現場でも、日々、苦労が絶えない。知らず知らずのうちに、エンジニアを消耗させる問題が潜んでいる。 苦労は、日常の風景に溶け込みやすい。それが当たり前の状態であり、疑問すら抱かれない。「そういうものだ」と思い込む。いや、苦労することに、そもそも違和感を持てないのだ。 日常化した苦労は、改善されることがない。違和感がないからこそ、問題として扱われない。そして、原因に目が向けられることもなく、風景に溶け込んだまま、空気のようにあり続ける。 つまり、苦労を軽減するには、日常風景の中から問題を見つけ出す必要がある。そのための第一歩が、「気づく」ことだ。問題というのは、気づかなければ解決のしようがない。学校の試験のように、誰かに出題されるものではないのだから。 本記事では、「気づく」ための視点を言語化し、手がかりとして整理している。 ソフトウェアエンジニアリング業務でありがちな苦労を、
英語圏のゲーマーが、どのようにして日本のゲームを手に取るのか。おそらく、多くの日本の開発者は知らないのではないでしょうか。 そこで、今回はNeon Noroshiの英語圏アシスタントEggに、一般的なゲーマーが日本のインディーゲームを探す方法を説明してもらいました。 結構長いですが、ぜひご覧ください。 この記事を見ているということは、あなたはインディーゲーム好きなんですね。うーん、素晴らしい! やっぱり、インディーゲームは成長中の業界だし、私が好きな日本のインディーゲームなんかアートのテイストが……と、もっと話したいところですが記事の要点に行きたいと思います。 これを読んでいるのは、おそらく開発者か、インディーゲームプレイヤーだと思います。この2種類の方がこの記事から得られるものは以下の通りです。 ゲーム開発者 日本語、もしくは英語以外の言語ネイティブでインディーゲームを作っている開発者の
マークダウンを一箇所に集める LLMとMarkdownの相性が良いという話は、最近多くの人が話題にしたり感じていることかと思います。 おそらく、そのうちあらゆるデータを直接LLMに手軽に安く入力できるようになるとは思いますが、それにはしばらく時間がかかるのも確かだと思います。なので、今はとにかくMarkdownを集めてLLMの手に届く範囲に置いておきたくなるわけです。 しかしながら、データというのは、だいたい色々な形式で色々な場所に散在しているものです。なので、そういったデータを変換してまとめる仕組みが一番重要になってきます。逆に言えば、そういう仕組みさえ構築できれば、プラットフォームは、はてなブログでもZennでもTwitterでもNotionでも何でも良かったりします。ただ、データを手軽に取得(APIで取得 or エクスポート)する方法があることが重要ですね。Obsidianが、最近L
はじめに ハードウェアカウンタをソフトウェアで実装する際、一定ビット幅でオーバーフロー(ロールオーバー)するカウンタの前回値と現在値から正しく「増分」を計算することはよくある課題です。 本稿では、以下のポイントを押さえつつ、C#での実装例を交えて解説します。 カウンタのオーバーフロー問題 分岐+剰余演算による差分計算 ビットマスクを用いた高速差分計算 浮動小数点と整数キャストの使い分け 1. カウンタのオーバーフロー問題 ハードウェアカウンタは、Nバイト幅(例:2バイトなら0~65535)で増加し、最大値を超えると0に戻ります。 このとき、前回値 prev → 現在値 curr の差分を単純に curr - prev すると負の値になってしまい、累積値の計算が正しく行えません。
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? テキストエディタなど巨大な配列、具体的にいうと85000バイト以上の配列を扱う場合、LOH入りします。 Windows システムの大きなオブジェクト ヒープ むろん、LOH入りしたからといってそう困るものではなく、GCの対象にはめったにならず、ワーキングセットが中々解放されない程度のものなんですが、エンドユーザー目線だとあまりよろしくありません。メモリーリークとサポートに不具合報告を送ってくる人とかいます。 そこで色々漁ってみたのですが、大量の配列を扱う場合、Ropeというものを使うといいそうです。Ropeだとブロックサイズを85000
事の始まり 先日、開発環境の Ubuntu 24.04 LTS を、リリースされたばかりの Ubuntu 25.04 にインプレースアップグレードしました。アップグレード自体は特に問題なく完了したのですが、後日、普段通り .NET のプロジェクトで作業しようと dotnet コマンドを実行したところ、見慣れないエラーメッセージとともに起動しなくなってしまいました。 dotnet コマンドがエラーで起動しない 具体的には、ターミナルで dotnet --info のような簡単なコマンドを実行しようとすると、以下のようなエラーメッセージが表示されてコマンドが異常終了してしまいました。 Process terminated. Couldn't find a valid ICU package installed on the system. Please install libicu (or i
はじめに Discriminated Union は、複数の型を合併するユニオンの一種です。 しかし単なるユニオンではなく、「複数の型のうち現在どの型であるかが判別可能なユニオン」 を指します。 参考: 判別共用体 - F# | Microsoft Learn, 判別可能なユニオン型 (discriminated union) | サバイバル TypeScript 例えば User = メンバー or ゲスト だとして、 User が メンバー のとき: メンバーの名前 を表示したい User が ゲスト のとき: "ゲスト" と表示したい のように「今どの型か」に応じて処理を分けたい場合があると思います。 こうしたケースにおいて、入口では User という一つの型として扱いながら、実処理としては メンバー 型、 ゲスト 型のどちらかであるかを判別し、それぞれの型として扱うことができるのが
こんな記事を見つけた。 C#.NETでライセンス認証機能を作る #Windows - Qiita この記事では、以下の方法でライセンス認証ができると主張している。 リクエストファイルを作る (ユーザー) Windowsのシリアル番号を共通鍵Aで暗号化する その結果をレジストリに記録する(※)とともに、リクエストファイルとして出力する リクエストファイルからライセンスファイルを作る (認証者) リクエストファイルの内容を共通鍵Aで複合化する その結果を共通鍵Bで暗号化し、ライセンスファイルとして出力する ライセンスファイルを読み込む (ユーザー) ライセンスファイルの内容を共通鍵Bで複合化する その結果が(※)で記録した内容と一致すれば、認証成功とする 次回以降はライセンスファイルを明示的に読み込まなくていいよう、1の結果をレジストリに記録する しかし、この方法には以下のような欠陥があるだろ
IReadOnlyListをforeachで回すとGCが発生するのは周知の事実ですが、 外部にプロパティを公開するならIReadOnlyListやIReadOnlyDictionaryを使いたいし、 そもそも他にもGCが発生するforeachのパターンあるよな・・・と考え出すと、 気軽にforeachも書けないわけです。 ということで、RoslynAnalyzerでGCが発生するforeachを書いたら警告が出るようにしてみました。 これで本当に条件が網羅出来ているか不安... もっと良い判定方法ご存知の方いたら教えてください。 netstandard2.0のクラスライブラリプロジェクトとしてビルドし、 できたdllをUnityプロジェクトのAssets以下に配置、 Asset LabelsにRoslynAnalyzerを追加するとUnityプロジェクトでも動作します。
概要 VRChatのQuest単機やAndroidスマホ環境において、tex2Dを使って32bitのDepth Textureなどの色の値をfloatで取得しようとすると、取得値の精度が勝手にhalfかfixedに落とされることがあります。この問題の対処方法をご紹介します。 環境 Unity 2022.3.22f1 VRChat SDK - Base 3.7.6 VRChat SDK - Worlds 3.7.6 対処方法 以下のように、本来の処理に影響のないくらいの小さい値を演算してあげると、テクスチャの色をfloatで取得できるようになります。詳しい理由はわかりません... また、手持ちのモバイル機の中で、Snapdragonを搭載しているQuest2単機やタブレット(CHUWI Hipad Max)では問題なくこの方法が使えますが、Helio G99というプロセッサを搭載しているタブ
UniRxやUniTaskなどを使った場合の横断的な例外処理についてのメモ書き。 基本的にUniRxでのExceptionは、ストリームが壊れないように堅牢な方向に機能が実装されている。ストリームの内から外へ例外を搬出するのは楽ではない。そういう閉じた世界(例えば画面単位など)で使うのがベターそう。 SubjectのSubscribeのonErrorコールバック引数 ストリームで起きたエラーが入ってくる Subscribeで起きたエラーは入らない .Subscribe( _ => throw new Exception(), e => Debug.Log("ここには来ない")); 前段にDoをかます 後段のSubscribeのonErrorに流れる .Do(_ => throw new Exception()) .Subscribe( _ => {}, e => Debug.Log("ここ
はじめに 今までの記事 執筆する時点の環境 SubPass/NativeRenderPassとは? NativeRenderPassが実行されるまでの流れ SubPass登録 NativeRenderPass構築 描画コマンド実行 SubPassマージの仕組み SubPassがマージできる条件 NativeRenderPassの特徴/制限 描画処理を含まないSubPassのマージについて 具体例の解説 SubPassマージ成功の例 上限超えでマージできなくなる例 上限を超えてもマージできる例 描画しないSubPassによって上限に達し、マージできなくなる例 次回予告 はじめに 皆さんこんにちは、SGEコアテクのチャン ユービンです。 前回の記事では、RenderGraphにおけるFrameBufferFetchの使い方と、そのメリットについて紹介しました。 今回は「Unity6からRend
はじめに美少女ゲーム(エロゲ)にとって2000年代はもっとも活気があった時代だと思います。90年代終盤ぐらいからオープニング曲が入るようになり、動画も作られるようになりました。その頃の雰囲気を持つ曲と動画を、音楽生成AIのSunoや画像生成AIなどを使ってさくっと作ってみたいと思います。 完成したものは以下になります。 歌詞を作るSunoで曲を作るためには歌詞を準備する必要があります。まずはChatGPTで作ってもらうことにしました。指示内容は以下になります。 SunoでKawaii Future Bassの曲を作りたいので歌詞を作ってもらえますか? 幼い女の子がアイスクリーム屋を始めるという話で、ストーリー仕立てにして下さい。 隣に住んでいるお姉さんに食べてもらいたいとか、そういう可愛らしい感性を含めたいです。 サビ部分は「ホップ、ステップ」みたいな韻を踏むテンポのいい感じにしたいです。
YuEやDiffRhythmなど、オープンソース版も充実してきた楽曲生成AIですが、再び中国から新しいソフト「ACE-Step」が公開されました。ACE-Stepは、英語、日本語を含む19言語の歌詞に対応し、歌詞と音楽タグからの楽曲生成が可能。 特徴は、YuEのようなLLMベース技術とDiffRhythmのDiffusionモデルのいいとこどりをし、歌詞や楽曲構成の一貫性を維持しながらも高速生成を可能にしたことだと開発元は述べています。 プラットフォームはWindowsだけでなく、MacやLinuxでも利用可能。 筆者はRTX 4090を搭載したWindowsマシン(Core i7)にインストールして試しました。自分の環境だとvenvではうまくいかず、condaを使用することで稼働。 初回は巨大なウェイトをダウンロードするので5分以上かかりましたが、その後は1曲まるごとの生成に12~14秒
普段よく見ているサイト(とSakuga Extended)の紹介。(5月14日追記) sakugabooru sakugabooru.com 作画の保管庫にして情報の最先端。作画オタクはどうして担当アニメーターが分かるのかといえば、このサイトに情報が集約されているからに他ならない。 アニメーター別、作品別に作画を調べるツールとしても当然便利で、良かった作画を動画ファイルとして引っ張ってくる際にも役に立つ。作画オタクが最も利用するサイトと言って間違いないだろう。検索が英語でしかできないため、慣れるまでは苦労するかも。 Sakuga Extended sakugabooruを便利に使えるようになる拡張機能。追加することによって スコア順、話数順などの通常ではできない並べ替え 画像にカーソルを合わせると動画を自動再生 画像の下にスコアや作品名・アニメーター名が表示されるように 1コマ、2コマ、3
はじめに GoogleCloudを使ってネット対戦ができるゲームを作ろうと思っているので、下準備としてUnity + MagicOnion + ASP.NET Core Web API(以下、Web API)の構成のプロジェクトを作りました。 そんなわけで上記構成の構築手順を解説します。 今回紹介する構成にすることで、ネット対戦中の処理はMagicOnionを利用したリアルタイム通信、それ以外のログイン等の処理はWeb APIによるAPI通信、といった使い分けができるようになります。 なぜMagicOnionオンリーではなく、WebAPIも併用する構成にしたのか MagicOnionはAPIっぽい使い方はできるので、実はMagicOnion単体でも機能自体は問題なく実装可能です。 ですが以下の理由からWeb APIを組み合わせる構成を選びました。 MagicOnionはUnityとサーバー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く