滅入るんるん

何か書きます

【C#】【黒魔術】implicit operator: あいまいなユーザー定義の変換を回避する方法

C#

タイトルの通り黒魔術です(多分)、実行環境ごとの動作はどうなるかわかりません。 また、C#などの仕様変更で使い物にならなくなる可能性はあります。(Support extension methods everywhereの流れ次第では仕様変更が入るかもしれない) implicit operatorとは…

.NET Standardでアプリケーションデータを保存するにはどうしたらいいんだろうっていう話

.NET Standardでは着々とAPIの共通化が行われ、PCLを使わなくてもある程度のことまでは .NET Standardで完結し始めてきました。そこで、.NET Standardでアプリケーションデータを保存する際はどうしたらいいか手抜きながらに調べてみたのでメモとして書いて…

Bloggerのエディターの代わりにStackEditを使う続編

前回の続き 前回はコードブロックに空行があるとタグ崩壊して非常につらいとこで終わったので今回はタグをescapeして回避したいと思います function replaceCodeTagCallback(match, language, code) { return `\`\`\`${language}\n${code}\`\`\``; } functio…

Bloggerのエディターの代わりにStackEditを使う

Bloggerのエディターはエンジニア的にはマークダウンが使えず非常に厳しいものがありますが、ちょっと調べてみたらStackEditというOSSなWebエディターがあり、Chromeの拡張機能まで用意されていたりそれのソースコードが公開されていたりと夢のありそうな品…

Blogger 独自ドメイン利用時https化が終わらない場合の解決策

※内容が正確かは保証しませんし、間違っていても責任は取りません(間違ってたら教えて)詳しい原因はわかりませんが、Bloggerで独自ドメイン利用時に数か月もhttps化が終わらずにhttpとのMixed Contentになる場合はドメインをGoogle Domainsに移管すればhttps…

csharplang: Disposable pattern

C#

csharplangのC# 8.0のマイルストーン、つまりC# 8.0で追加する予定の機能を眺めていたらDisposable patternが追加されてたのでそれの紹介; Proposal: Allow `using` statement to structurally match `IDisposable` Disposable patternと勝手に呼んでいます…

定数にUPPER_SNAKE_CASEを使うのは辞めようっていう話

JavaやKotlinのコーディング規則ではよくコンパイル時定数や実質的に定数として扱っているものをUPPER_SNAKE_CASEとする命名規則が取られていますが、UPPER_SNAKE_CASEは致命的に読みにくいので辞めようっていう話です。※JavaやKotlinに限った話ではないです…

【C#】Type.GetType(string)するときはアセンブリ情報がないほうが早い

C#

ここ最近作り始めたライブラリで需要があったのでType.GetType(string)のベンチマークを取ってみました。 ことの発端 Type型を一度stringにして保存し、あとで復元するという処理があったのですが、Type型には型情報をstring化するのに二つのプロパティがあ…

【C#】stackallocでstructをスタックに確保してパフォーマンスを上げよう戦略

略してstackalloc戦略です。前回の記事でin引数戦略(最終的にはref戦略な感じになりましたけど)を提示してみましたが、in引数戦略では使える幅が狭いです。なぜかというと、配列が使えないから。.NETでは配列はヒープに確保されるので、原理上、配列の値をロ…

【C#】Big Size Structが値コピーでつらいならin引数で値コピーしなければいいじゃない!! < それ本当?

C#で高速なプログラムにする際のお供な構造体ですが、構造体を使わないほうがいい場面・条件もあります。その一つに"サイズが16バイト未満であること"があります。この16バイトという数字の根拠は明確にはわかりませんが、構造体の特性上よく値コピーが発生…

BenchmarkDotNetを.NET Frameworkと.NET Coreで走らせる方法

C#でベンチマークを取る際に非常に楽に実施できるツールのBenchmarkDotNetで.NET Frameworkと.NET Core両方でベンチマークを取る方法がわかったのでメモ取っておきます。内容はBenchmarkDotNetのFAQに書いてあります。(ちゃんとFAQ読め案件)ベンチマーク対象…

.NET Standardで埋め込みリソースを読み込む方法

Xamarin.Formsを使う場合、共通リソースはPCLや.NET Standardで管理したいですよね。それを実現する一つの手段としてリソースを埋め込むという手法があります。脳死でネットを検索するとPCLでの場合は出てきますが、最近のトレンドは.NET Standardなので、そ…

【C#】Generic indexersが欲しい

C#

突然ですが、ふとこんなコードを T Get(string key) { ... } こんな風に T this[string key] { get { ... } } 書きたくなったことありませんか?私はあります。generic methodをgeneric indexerにできるだろうと、試してみるもコンパイルエラー。比較的優秀…

【C#】コンストラクタで参照渡しできた話と出力変数宣言できるようになる話

C#

よく++C++; // 未確認飛行 Cにはお世話になっていますが、その中のC#7.3新機能説明(式中での変数宣言をできる箇所の拡大)について、お恥ずかしながらよくわからないC#コードがあり、新たな発見をしたので、その報告をします。式中での変数宣言(使える場所の…

Kotlinを学ぶにはC#を勉強したほうがいい(SequenceとLINQ)

タイトル半分ぐらい釣りです(半分大真面目)最初に断っておきますが、Kotlinを勉強するのに必ずしもC#を勉強したほうがいいわけではありません、もちろんVB.NETでも概念は学べますし代替手段はいくらでもあると思います。そこで、なぜC#を勉強したほうがとい…

【C#】配列はIListを実装していた

C#

小ネタはい、久しぶりのC#記事です。1カ月ぶりかな?その間にいろいろとネタは集めたのでちょっとずつ書き出していきます。 まずは、上の画像を見てください。パターンマッチングでIList<string>してからstring[]が重複ケースで失敗しています。これを逆にすると問題</string>…

【Java】Project ValhallaはとてもC#を意識している

小ネタJavaのアップデート予定?方針?の一つのProject ValhallaでのJEP 218: Generics over Primitive Types、つまりジェネリクスでプリミティブ型=>値型のサポートを強化しようというもの(ざっくりした説明)においての話です。ページを見てもらえばすぐわ…

【Xamarin.Android】 "zipalign.exe" はコード 1 を伴って終了しました。

Visual Studio 2017 Community(Windows)でXamarin.Androidプロジェクトを作成するときにでたエラーの対処法載せておきます。Visual Studioのバージョンは15.6.7で、XamarinのバージョンはVisual Studio15.6.7でインストールできる最新版です。(具体的にはXam…

引っ越ししました

報告が遅くなりましたが、引っ越ししました。職場まで30分程度の場所なので、なかなかに朝が楽です。そういうわけで新しい環境の紹介 Google Home + Google Home mini ヨドバシでGoogle Home miniが半額セールしてたのでセット買いしてしまいました。 リビン…

当分の間投稿休みます

毎週C#記事を書いていくということでやってきましたが、引っ越しの都合で忙しく時間が取れないことから、当分の間記事の投稿はお休みします。時間ができたらGoogle Homeとかのレビューする予定ですのでそれまでお待ちください。

【C#】MvvmLightとReactivePropertyでMVVMしてみる① - MvvmLightのテンプレプロジェクトを作るまで

今週からは勉強もかねてMvvmLight+ReactivePropertyでMVVMプロジェクトを作ってみようと思います。ReactivePropertyでMVVMはしたことあるのですが、ReactivePropertyだけでは比較的軽量のためMVVMするにはUnity(DIのほう)などを入れたり自作でヘルパーを作っ…

C# 8.0に追加されそうな小さな機能候補

C#

今週はネタに困ったのでcharplangでC# 8.0に追加されそうな小さな機能でも紹介しようと思います。ちなみに、C# 8.0で追加されそうな機能の一覧はここで見れます。 Champion "Null-coalescing assignments" 日本語で直訳するとNull合体割り当てですが、意味的…

Stellaris 2.0.1 植民スパムプレイ

さっそくですが、友達との3日がかりのマルチプレイ終わりました。銀河設定は中サイズ(600)、リング2、中盤の危機75年早く、終盤の危機100年早く、技術・伝統コスト0.5倍、難易度普通って感じでした。そして、自分のプレイングは機械帝国植民スパム、友達は内…

ReactivePropertyにプルリク出した話

C#

今週のC#はReactivePropertyにプルリク出した話にします。まず、プルリク出すまでの経緯ですが、前々からReactivePropertySlimの軽さについて調査してみようと思っていたので(怠慢で予定より3週間遅い)、今週こそは!とXamarin.Androidプロジェクトで軽い模…

Stellaris ver2.0 Apocalypse プレイ感想

タイトルの通り大型アプデ後での友人とのマルチプレイでのプレイ感想です。変更内容に関してはこちらのサイトで日本語訳された内容が公開されています(本当に助かりました)Simulationian.com - 「Stellaris」開発日記#105――2.0「チェリイ」パッチノート 使用…

拡張メソッドでboolにNot()を生やすとどの程度パフォーマンスに影響があるのか調べてみた

C#

はい、昨日書いた記事(if(flag == true)はありなのか?なしなのか?)で気になったので調査してみました。ベンチマークには前々から使ってみたかったBenchmarkDotNetを使います。同じプログラムの相対比較なのでマシンスペックには影響されないと思いますが、…

Rainbow Six Siegeのオペレーションキメラのアウトブレイクが完全にL4D2な件に関して

どうも、にわか🌈勢です。本日2時間程かけてRainbow Six Siege TTSをインストールして友達とアウトブレイクをしてみたので感想を。プレイ前の公開情報からL4D2っぽいな~~と思っていましたが、やっぱりL4D2ですね。L4D2とはどんなゲーム?→街の中を移動しなが…

if(flag == true)はありなのか?なしなのか?

最近バズってるようなので便乗ちなみに元ネタはこちらだとおもいます→qiita - Javaではif (flag == true)というコードを書いてはいけない※真偽値としてのネーミングとしてflagはナシだろ~~wという話はナシでお願いします※以下flag変数は真偽値とします結…

KotlinはどれほどC#を意識しているか?

今週のC#記事はKotlinがどれほどC#を意識しているかにします。(Bloggerを開く前まではReactivePropertySlimがどれだけ軽くなったのか調べて書こうかなと思ってたのですが新鮮なネタのほうから書くことにします)新鮮なネタと言ってますが、あくまで自分の中で…

睡眠時間管理アプリ「Sleep as Android」

つい1か月ほど前、食生活や睡眠時間などの体調管理をちゃんとしないとな~ということで何個かアプリを入れてみたのですが、その中で唯一まともに継続ができてる睡眠時間管理アプリを紹介しておきます。Sleep as Android睡眠の深さを測ってくれる(ちゃんと測…