投稿

Windows Package Manager v1.0が公開されてた

Windows Package Manager v1.0が公開されていたので使ってみる。 Releases · microsoft_winget-cli  から Microsoft.DesktopAppInstaller_*.msixbundle をダウンロードしてインストールする。 winget list コマンドでインストール済みのパッケージを表示してみる。 PS> winget list 名前 ID バージョン ----------------------------------------------------------------------------------------------------------------- Netflix 4DF9E0F8.Netflix_mcm4njqhnhss8 6.97.752.0 Amazon Alexa 57540AMZNMobileLLC.AmazonAlexa_22t9g3sebte08 3.7.890.0 7-Zip 7zip.7zip 19.00 Amazon Prime Video for Windows AmazonVideo.PrimeVideo_pwbj9vvecjh7j 1.0.69.0 Blender 2.83 LTS BlenderFoundation.Blender2.83LTS_ppwjx1n5r4v9t 2.83.16.0 Brave BraveSoftware Brave-...

Google AssistantからSesame 3を操作する

イメージ
 Google AssistantからSesame 3を操作できるようにする。 2021/6/23現在、Sesame3は承認待ちのようでGoogle Assistantから操作することができない。 WebAPIは既に公開されているようなので、これをGoogle Assistantから使えるようにする。 具体的にはGoogle Assitant -> IFTTT -> Google Apps Script -> Sesame WebAPIというふうに接続する。

LINQでBufferしたい

Observable.BufferをLINQで実現する var arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; /* GroupByを使う */ IEnumerable<IEnumerable<int>> arr2 = arr.Select((value, index) => (value, index)).GroupBy(a => a.index / 3).Select(a => a.Select(b => b.value)); // [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] /* Aggregateを使う */ List<List<int>> arr3 = arr.Aggregate(new List<List<byte>>(), (list, next) => { if (!list.Any() || list.Last().Count() >= 3) list.Add(new List<byte>()); list.Last().Add(next); return list; }); // [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] /* Observable.Bufferを使う */ IList<IList<int>> arr4 = await arr.ToObservable().Buffer(3).ToList().ToTask(); // [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

C#標準ライブラリでWebSocketクライアントを作る

C#でWebSocketクライアントを作りたい場合、websocket-sharpというライブラリがよく使われているが、標準ライブラリだけで賄いたい。 標準でSystem.Net.WebSockets名前空間にClientWebSocketクラスが用意されており、MSDNに使い方が載っている。 Windows 8 のネットワーク接続 - Windows 8 と WebSocket プロトコル 一応通信はできるのだが、あまりにも原始的なのでラッパークラスを作る。 using System; using System.IO; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; public class WebSocketClient { private const int SendBufferSize = 1024; private const int ReceiveBufferSize = 1024; private ClientWebSocket Socket; public event EventHandler OnOpenHandler; public event EventHandler OnCloseHandler; public event EventHandler<string> OnTextHandler; public event EventHandler<byte[]> OnBinaryHandler; public Uri Uri { get; set; } public async Task SendTextAsync(string text) { using var memoryStream = new MemoryStream(); using var streamWriter = new StreamWriter(memoryStream); await streamWriter.WriteAsync(text); await st...

C#でコールバックをTaskにしてawaitしたい

C#でコールバックの値を同期的に取得したい時がある。 Rxを使ってJavascriptのPromise的なことをする。 // コールバックで値を返すメソッド private void Foo(Action<string> arg) { arg("qawsedrf"); } // コールバックの値を取得してTaskにして返すメソッド private Task<string> Bar() { return Observable.Create<string>(observer => { Foo(a => { observer.OnNext(a); observer.OnCompleted(); }); return null; }).ToTask(); } string value = await Bar(); Console.WriteLine(value); // qawsedrf Observable.Createでコールバックからの値を流すObservableを作り、 ToTaskでTaskに変換できる。 これを活用して以下のようなことができる。 string dataPath = await Observable.Create<string>(observer => { return Observable.Return(Unit.Default).ObserveOnMainThread().Subscribe(_ => { observer.OnNext(Application.persistentDataPath); observer.OnCompleted(); }); }).ToTask(); Unityの場合、メインスレッド上でなければUnityAPIを呼び出すことができないが、 こうすることでUnityAPIである Application.persistentDataPath の呼び出しだけメインスレッ...

Taotronics SoundLiberty 97を買った

イメージ
Taotronics SoundLiberty 97という3980円の完全ワイヤレスイヤホンを見つけました。 絶賛してるブログ記事が多く、2020/12/21現在でAmazonレビューは☆4.7。 ちょっと怪しいですが、15%オフクーポンがあったので買ってみました。

指定範囲内のVector2Intの配列を作る

public class TestClass { public void TestMethod() { var countX = 3; var countY = 4; var aaa = Enumerable.Range(0, countY) .SelectMany(y => Enumerable.Range(0, countX) .Select(x => new Vector2Int(x, y))); // (x:0, y:0), (x:1, y:0), (x:2, y:0), // (x:0, y:1), (x:1, y:1), (x:2, y:1), // (x:0, y:2), (x:1, y:2), (x:2, y:2), // (x:0, y:3), (x:1, y:2), (x:2, y:3) } }