サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
blog.neno.dev
モバイルでも画像処理することになってswiftを最近触り始めた人です。 Swift4と3とで結構違って厄介ですね…。 で、SwiftでAVFundationのデフォでカメラを引っ張ってくるとFPSが30で、同然がくがくなので60fpsにしたいわけです。 ちょっといろいろ突っかかったところがあったのでメモを。 ソースコート時代はgithubにおいておきました。コメントめっちゃつけてるので何やってるかはすぐわかるはずです。 書いたのはViewController.swift#L18に一行と以下のクラス。 引っかかったのが、fpsの設定はsessionにデバイスを接続した後にしか設定はできないという点と、設定するときにlockForConfiguration()をしないといけないという点です。補完つかってframeっぽいの探してあったのでそのまま値突っ込んで落ちましたw あといちいち取得した画像
generic type における open type と unbound type の違い、あるいは closed type と bound type の違いを明確に説明できますか? この記事では open/closed type 及び bound/unbound type の厳密な言葉の定義について取り扱います。 とはいえ、ぶっちゃけ厳密な定義を知らなくても 99.999% 問題になる事はないでしょう。 そもそも普通に C# コード書いている分には bound/unbound type という言葉は登場すらしないと思われます。 役立つのは Roslyn 弄っている人間くらいでしょうか...。 C# の言語仕様 Constructed types Open and closed types Bound and unbound types まとめると ECMA 以外の文献 API 的には
C# のデファクトの logger である Microsoft.Extensions.Logging で出力した構造化ログを BigQuery で引く時に一工夫するとなにかと楽ですよ、というお話。 課題 解決策 関連記事 課題 Microsoft.Extensions.Logging は以下のような構造化ログを出力します。(以下は TypedSignalR.Client.DevTools の examples から適当に出力してきました) { "Timestamp": "2024-02-03T06:23:11.877Z", "EventId": 8201, "LogLevel": "Information", "Category": "AspNetCore.SignalR.Logging.HubLoggingFilter", "Message": "Invoking the SignalR
この記事は Qiita C# Advent Calendar 2023 23 日目の記事です。 登壇版 OpenTelemetry について プロジェクトの主要なコンポーネント API 及び SDK という言葉について 仕様のステータス 各言語のサポート状況 OpenTelemetry Collector OpenTelemetry Collector を使わない場合。 OpenTelemetry Collector を使う場合。 Collector の実態とステータス お手軽な動かし方 OpenTelemetry の NuGet パッケージ ほぼ必須なパッケージ 便利なパッケージ C#/ASP.NET Core での使い方 Example SignalR + OpenTelemetry おまけ まとめ 登壇版 .NET ラボ 2023/12/16 で登壇した際の資料です。 スライドはこち
現代の .NET では "zero-byte reads" という最適化が随所で行われています。 この記事ではその "zero-byte reads" とはなんなのか、という事についてつらつら書いていこうと思います。 そしてそれに深く絡むピン留めのお話も。 どんな最適化か。 ピン留め手段と GC 負荷。 まとめ。 豆知識。 References どんな最適化か。 端的にいうと、Socket や Stream がネイティブとデータのやりとりする際に、managed heap に確保されているメモリを長時間にわたりピン留めしないようにするための最適化です。 どういう事か。 たとえば C# の Socket.ReceiveAsync は Windows 上では Win32 API の WSARecv をラップしたような形になっています。 C# の Socket.ReceiveAsync には M
みんな大好き TaskCompletionSource。 TaskCompletionSource は死ぬほど重要かつ便利な class なのですが、TaskCompletionSource.Task を await した時の continuation (= await 後に行われる継続処理) がどこのスレッドで実行されるか意識しないと危険だよというお話。 既定では continuation は同期的に呼ばれる。(非推奨) continuation を非同期的に呼ぶようにする。(推奨) まとめ References 既定では continuation は同期的に呼ばれる。(非推奨) 既定では TaskCompletionSource.Task を await した後の continuation は TrySetResult から同期的に呼ばれます。 var tcs = new TaskCo
.NET Worker Service 便利ですよね。 Generic Host が最高という話でもある。 この記事では dotnet new worker コマンドを叩いて作成したテンプレのような、Generic Host を用いた console application における health check のお話をしたいと思います。 web application であれば /healthz のような health check 用のエンドポイントを生やしてあげれば良いだけなんですけどね、console application だと別のアプローチを取る必要があったりします。 基本方針 Microsoft.Extensions.Diagnostics.HealthChecks IHealthCheckPublisher まとめ 基本方針 web application であれば healt
登壇版 ConsoleFormatter HttpLogging ConsoleFormatterOptions.IncludeScopes W3C Trace Context ExceptionHandler DbDataSource HttpClientFactory まとめ References 登壇版 .NET ラボ 2023/07/22 で発表した資料です。 スライドはこちら。 スライドはアニメーション豊かなので、スライドと本投稿合わせながら見るといいかもです。 登壇のアーカイブはこちら。 30 分程度です。 ConsoleFormatter ログはだいた標準出力、まぁコンソールに出力しますよね。 そしてコンソールにログを出力するといっても、当然ながら複数のフォーマットがあります。 C# で現在ロガーとしてデファクト的に使われている Microsoft.Extensions.Lo
最初に結論。 Example のコード そもそもログの目的とは何なのか。 W3C Trace Context Trace Context の HTTP ヘッダとフォーマット Traceparent Header version version-format trace-id parent-id trace-flags 用語 Distributed trace 要するに。 System.Diagnostics.Activity ConsoleFormatterOptions.IncludeScopes HttpClient 内での Activity のイベントを検知してログに出す。 まとめ References 最初に結論。 この記事自体はアレコレ書いていますが、結論に至るまでが長いので、先に結論というか言いたい事から入ります。 とりあえず覚えておいて欲しいのはたった1つです。 それは「Co
2018/3/10追記 どうもこのブログ、この記事だけ閲覧数がやたら多いので同じ問題にぶつかる人多いのかなぁという気持ちになりましたので。 https://github.com/nenoNaninu/glImshow (じーえるあいえむしょう) って感じでコード(たぶん)読みやすくシンプルなライブラリ(?)調にして使いやすくしてみました。 もしよければgithubの方に☆スター☆お願いします! 進捗が生れなくてつらいのでブログを書くなどします。現実逃避です。 さて私はopenCVでよく遊んでるんですが。それなりの処理をするとすぐにフレームレートが下がってしまい、うーんといった感じになります。opencvは高速なハズ...。 そこで原因を探るべくいろいろ計測してると、なんと描画関連が悪さをしていることが判明しました。 そこでその情報をもとにググるとこんな記事がありました。とても有益でした、あ
というタイトルで.NETラボで喋ってきました。 スライドはこちら。 登壇のアーカイブはこちら。 30 分程度です。 内容の大筋としては、以下のような感じ。 HttpClient の基礎 HttpClient / HttpMessageInvoker / SocketsHttpHandler のお話 HTTP/2 の stream stream の基礎 stream id が枯渇した場合の C# の HttpClient の挙動 HTTP/2 の Frame Type DATA Frame / HEADERS Frame SETTINGS Frame / PING Frame これらを活用するための C# で気を付けるポイント紹介 Application-Layer Protocol Negotiation の話 h2 (w/ TLS) と h2c (w/o TLS) でどうして port
はじめに 登壇版 Taskの本質 C# のイテレータ async/await Compiler Transform ExecutionContext builder.Start() の重要性 IAsyncStateMachine.MoveNext おわりに はじめに C#er は呼吸するように使っている async/await。 そんな async/await について、先日 Stephen Toub 氏 (.NET の中の人。中心人物の一人。) が How Async/Await Really Works in C# という非常に面白い記事を投稿していました。 この記事では Stephen 氏の記事をベースに、C# において async/await は実際どうやって動いてるの?というお話をしていきます。 以前に C#での非同期メソッドの分析。 という翻訳記事を書いたのですが、元になった記
リアルタイム通信するなら、やはりシリアライズ/デシリアライズは高速であればあるほどいい。 というわけで、TypeScript の SignalR client でも JSON ではなく MessagePack を使いたいよね、使おう!というお話。 SignalR の protocol シリアライザと言語 MessagePackHubProtocol を C# と TypeScript で使う場合の違い client が C# の場合 client が TypeScript の場合 TypeScript で JsonHubProtocol と MessagePackHubProtocol を使う場合の違い MessagePackHubProtocol を使うための解決策 使い方 推奨設定 まとめ SignalR の protocol SignalR は、内部で用いる server と cli
以前 .NET ラボで 「C# と HTTP/2 と gRPC」というタイトルで登壇しました。その時のスライドがこちらなのですが、ちらほら反応を頂きました。その結果、HTTP/2 や gRPC について勘違いしている人がちょこちょこいる事が分かったので、少し補足を書こうと思います。 blog.neno.dev 1. HTTP/2 で向上するのはスループットであって、1リクエストあたりの応答時間ではないよ。 HTTP/2 を使うからといって、1 リクエストあたりの応答時間が短くなるわけではないのです。 まず、1 HTTP リクエストあたりにかかる時間を、RTT とかいったりします。 1 RTT の内訳はだいたいこんな感じになります。 1 RTT = ネットワーク上で往路にかかる時間 + サーバの処理時間 + ネットワーク上で復路にかかる時間 HTTP/2 になったからといって、ネットワークを
.NET 7 から dotnet user-jwts という機能が生えてきました。ASP.NET Core で認証認可に JWT を使って開発している人間にとっては大変便利なのですよ、コレが。 はじめに dotnet user-jwts の使い方...の前に下準備 dotnet user-jwts の使い方 気になるかもしれない点 ASP.NET Core の内部実装 おわりに References はじめに 今の世の中 WEB API の認証認可は JWT で行っているケースが殆どでしょう。 そんな JWT ですが開発時にも当然使いますよね。SwaggerUI とか Postman に設定したりして。 が、そのような開発時に使う JWT の生成を皆さんはどうしているでしょう? 使っている認証プロバイダにもよると思いますが、概ね多少の面倒が付きまとうのではないでしょうか。 そこで .NET
というタイトルで.NETラボで喋ってきました。 スライドはこちら。 登壇の録画はこちら。 内容の大筋としては、以下のような感じ。 SignalR の開発どうしてる? TypedSignalR.Client.DevTools を使えば大解決! TypedSignalR.Client.DevTools の使い方 TypedSignalR.Client.DevTools そのものの作り。 TypedSignalR.Client や TypedSignalR.Client.TypeScript も使って SignalR を使ったアプリ開発の開発体験を爆上げしよう!
この記事は C# Advent Calendar 2022 21 日目の記事です。 背景 TypedSignalR.Client.DevTools の使い方。 TypedSignalR.Client.DevTools そのものの作り。 まとめ 背景 みなさん、SignalR は好きですか?私は大好きです。 SignalR は ASP.NET Core にビルトインされているリアルタイム通信機能を提供してくれる大変便利な RPC フレームワーク/ライブラリで、リアルタイム通信機能をアプリに搭載する際にかなりの割合で必要になってくる機能であるところの接続のグルーピングやブロードキャスト、スケールアウト等を容易に行う事ができます。 さらに、複数の接続方式(WebSocket, ServerSentEvents, http long polling)を利用する事ができ、リアルタイム通信を行う際に頻
というタイトルで.NETラボで喋ってきました。 スライドはこちら。 内容的には Roslynはいいぞ! Roslynを使うとあんなことやこんな事ができるぞ! というのを、OSSという具体例と共に紹介 みたいな具合です。よかったらどうぞ! 以下、スライド中で紹介してるOSSたち。是非使ってみてください~。 Tapper C# の型を Roslyn でガシガシ解析して各シリアライズフォーマットに適した TypeScript の型を生成する .NET Tool. TypedSignalR.Client C# の SignalR client を強く型付けするための Source Generator. TypedSignalR.Client.TypeScript C# の型 と interface を Roslyn でガシガシ解析して TypeScript の SignalR client を強く
C++だとこんな感じで簡単にint配列をbyte(char)配列として取り扱うことができます。 int* intArray = new int[2]; intArray[0] = -1; //32ビット全部1が立つ intArray[1] = 2; for(int i = 0; i < 2; i++) { cout << intArray[i] << endl; } cout << "======" << endl; char* ptr = (char*)intArray; for(int i = 0; i < 8; i++) { cout<< +ptr[i] << endl; } 出力は -1 2 ====== -1 -1 -1 -1 2 0 0 0 ではC#はどうすればいいか。 C#ではC++っぽいキャストは不可能です。 素朴には、以下みたいに新しく配列を用意してコピー、みたいなことを
タイトルが分かりずらいですね、はい。 コンソールアプリ、Main関数が終了すると同時にアプリは終了します。 それはそう、当たり前。 なんですが裏のスレッドでなんか動いてるからアプリは落ちてほしくない、けどMainは終わっとるし別にawaitするべきものもない、みたいなケースは稀に良くあります。 でそういう場合はアプリが落ちないようにConsole.ReadLine();とか仕込むのが常套手段だったりするわけです。 ただまぁ、書き捨てコードにしろConsole.ReadLine();等で対処するのなんか嫌...となったので、ちょっと考えました。 で、出来たのが以下。 同期用と非同期用あります。 まぁ、C#7.1以降はエントリーポイントでも普通にasync/await使えるので前者いるか?って感じではあるけど一応。 上のクラス適当にコピペして、Main関数の最後に await Exit.Wai
Generic Method 内部で null 比較を行ったら、はたして boxing するんでしょうか? たとえば以下みたいな関数があったとします。 // 参照型の null と、Nullable<T> の null の数が知りたい。 public static int CountNull<T1, T2, T3>(T1? value1, T2? value2, T3? value3) { int count = 0; count += value1 is null ? 1 : 0; count += value2 is null ? 1 : 0; count += value3 is null ? 1 : 0; return count; } この関数はコメントにあるように、参照型の null と、Nullable<T> の null の数が知るためのものです。 なので、参照型と値型の両
背景 注意) サーバサイドはC#で書く前提です。 こんなご時世なのでサーバとクライアントを通信させない、なんて事は滅多にないでしょう。 その際皆さんは通信の中身というかコンテンツ、要するにWEB APIの場合はhttpのbodyですが、をどのような形で定義/シリアライザして運用しているでしょうか? おそらく大多数がJSONとしてシリアライズされた文字列を乗っけて通信させていると思います。 めんどくさいのが、どのようにクライアントとサーバ間のシリアライズされたデータの型の整合性を取るか、という事です。プロパティ名をタイポしてシリアライズでこけたりね、あると思います。 JSONを使う場合、もっとも素朴にはサーバ側で定義した型のプロパティ名などをぺちぺち手作業でクライアント側にもコピペして、型も一致するように手動でアノテーションしていくという事でしょう。 ちょっとしたプロトタイプくらいならこれで
ASP.NET Coreにおける認証。 googleを外部プロバイダとしてOAuthを利用する。 準備 サービスの設定 AddAuthentication() AddCookie() / AddGoogle() http pipeline Challenge / Sign in / Sign out Authorize 全体の流れ まとめ。 References なんでこんなの書いてるかというと、公式が余計なもの色々くっつけた上でのドキュメントしか書いてないから...。 個人で運用してるwebアプリで、わざわざアカウントとパスワードなんか作らせたくないわけです。 というか私がユーザだったらその時点で十中八九離脱する...。 で今の時代OAuthとか活用して外部プロバイダでログインとかさせるわけじゃないですか。 当然ASP.NET Coreもそこらへんについては公式にドキュメントがあります。
どうも、今までVC++書いてきていたので、ライブラリとかをビルドするときにCMakeとか使っていたものの、Visual StudioのおかげでmakefileとかCMakeListsなどは書かないで過ごしてきた人です。 しかし最近Linux(Ubuntu)上でC/C++書きたくなったのでCMake書くことになり。 どうすんだ?これ。 と途方にくれたのでやり方とかいろいろ書いておきます。 私のやることは相変わらずOpenCVで遊ぶ、なので具体例としてOpenCVでやっていますが、外部のライブラリをつなげる要領はなんでも同じだと思います。 今回は自作のプログラムにOpenCVを組み込むところまでをやっていきたいと思います。 こう書けばビルドできまっせ〜みたいな記事はたくさんあるんだけど正直CMake入門者的にはなにやってんだこいつ的な感じなので(私はそうだった)基本的なとこから理解できるような
リモートサーバで3Dモデルの可視化~やらなんやらしたのを手元のwindowsマシンでも確認したい。 3Dモデル単体とかならThree.jsとか叩いてブラウザで見たりしてもいいのだけど(実際昔はそうした)、描画したいものが複雑だったり、OSSに乗っかってしまいたかったりすると(こっちのモチベーションが高い)、ブラウザとか介さずにGUIで可視化したいわけです。楽だしね。 なのでX Window Systemに乗っかりましょう、ということになるわけですが...。 ググるとputty使った方法とかいっぱい書かれているんですが、puttyとか使いたくはないわけです。 何故ならwindowsに標準でssh乗っかってるから。 やり方としては2つあって power shellからsshする。 WSL2からsshする。 で、当然前者でいいじゃんとか思うわけだけど、バグとか踏んだのでメモっておきます。 なおリ
欲求としては以下みたいな感じ。 自分は今まではただ単にVSCodeのRemote SSH使ってました。Remote SSHは~/.ssh/configから設定読み込んで上の図の作業環境まで一発で繋いでくれるので楽です。 marketplace.visualstudio.com 今回は繋ぎたい対象がコンテナなので、一工夫(?)必要です。 一応公式に書かれている方法とかあるんですが、自分みたいに踏み台重ねてたり、リモートの作業環境にグローバルIP割り振られてなかったりすると、使えないんですよね。 残念ながら。 code.visualstudio.com ちなみに上記のサイトに We recommend using the Visual Studio Code Remote-SSH extension to connect to a remote machine running Docker e
この記事は Qiita C# Advent Calendar 2021 23日目の記事です。 マルチスレッドプログラミングにおける問題。 原子性 コンパイラによる命令の並び替え メモリバリアについて acquire / release acquire / releaseの取り扱いづらさ sequential consistency C#でのマルチスレッド関連操作 lock (statement) volatile (keyword) Volatile (class) Interlocked (class) Common Language Infrastructure (CLI)における volatile read/write の仕様 まとめ References この記事のお話の流れは、①マルチスレッドプログラミングで発生する問題、②それらの問題に対処するためのメモリバイアについて、③それ
Dissecting the async methods in C# Async method internals 非同期メソッドを手動で分解する Async machinery The original method The state machine 1. “Hot path” optimization 2.Error handling How different pieces are glued together? Execution Context Conclusion References この記事は以下の記事を私が翻訳したものです。 https://devblogs.microsoft.com/premier-developer/dissecting-the-async-methods-in-c/ Dissecting the async methods in C# C#は開発
このページを最初にブックマークしてみませんか?
『blog.neno.dev』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く