閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

programming

テンプレート文字列の記法

文字列の中に変数を入れたい、という時の言語毎の記法。すぐ忘れちゃうけど、最近のエディタはいい感じに色分けしてくれるのでやりやすくはなったかも。(はてなだと色の具合がいまいちですね…) JavaScript 文字列をバッククォートで括り、変数は ${} で差し…

Fluent Assertionsのソースを少し読んでみた

先日のエントリに書いた例ですが、 Add(1, 2).Should().Be(3); // => Expected Add(1, 2) to be 3, but found 2. これ、 Add(1, 2) の部分どうやって取ってるんだろう、と思ってソース読んでみました。StackTraceでそこまで取れるのかなぁと思ったんですが、…

FluentAssersions

Fluent Assertions 一時流行った(?)流れるメソッド的なアレでテストが書けるライブラリ。もしくはSpec的なやつ。最近のNUnitもこれに近い記法になるけど、冗長じゃないかな? と思っていたけどテストコードより、その結果が重要という感じみたい。失敗した時…

TypeScriptの"String Literal Types"や"Index types"が面白い

window.addEventListener('mousemove', e => { // ここで、eの型はMouseEvent型になる }); window.addEventListener('keydown', e => { // ここで、eの型はKeyboardEvent型になる }); みたいな感じでメソッドの引数の値に応じて、コールバック関数に渡される…

null合体演算子 ?? の優先順位

何も考えずに使ったらハマったのでメモ。 int? foo = null; (5 + foo ?? 0); // => "5"を期待したけど"0"になる これは: (5 + (foo ?? 0)); // => 5 と書きましょう。StyleCopで乗算や除算には問答無用で括弧を付けろと言われる環境なので油断していました(…

vscode-journalで初回の「Open Today(今日のファイルを開く)」コマンドの実行が遅い / のでコマンドを作ってしまった

VSCodeを起動してjournal.todayコマンドを実行すると、数秒待たされる。原因はmdファイルを初めて開いた時にMarkdown関係の拡張が有効化されるが、それが終わるまでコマンドが完了しないため。 普通にmdファイルを開くと、ファイルを開いて編集可能になって…

calmemo(xyzzy)からvscode-journalに移行してみた

xyzzyというエディタのcalmemoという拡張を2009年くらいから、かれこれ10年使い続けている。日記帳みたいなもので、コマンドを実行すると今日の日付のテキストファイルを作ってくれてそこに何か書ける、というもの。それに検索とかカレンダー機能などが付い…

MSTestのCollectionAssertでdoubleの配列を比較する際に精度を指定したい

Assert.AreEqualは精度を指定できるメソッドがあるけれど、CollectionAssertにはないっぽい。まぁ、それはそうか。 // Assert.AreEqualのオーバーロード: public static void AreEqual (double expected, double actual, double delta); IComparerを引数にと…

useEffect完全ガイドを読んだ

useEffect完全ガイドReact Hooksでタイマーで定期的にインクリメントされるカウンターみたいなのを作るのにrefを使っていましたが、もっと楽にできたみたいです。 function useTimer(): [number, React.Dispatch<React.SetStateAction<number>>] { const [count, setCount] = React.useSta</react.setstateaction<number>…

BenchmarkDotNet

BenchmarkDotNetその名の通り、任意のプログラムのベンチマークを取るためのライブラリ。C#で書いたメソッドのパフォーマンスを計るのに、いちいちStopwatch.StartNewして…とかしなくてよくなります。メソッドを複数回実行してその平均を結果として出力する…

CSSで要素に対するクリックを無効化する(pointer-events)

CSSでやるの違和感あるけど、便利。 button { pointer-events: none; } とするとボタンに対するクリックが効かなくなる。ボタンならdiasbled=falseにする方が綺麗だと思いますが、なかなか手の届かないところにあるコンポーネントを指定したいときとか、CSS…

HxD(バイナリエディタ)

バイナリファイルをちょっと覗くくらいの大した用途で使ってこなかったので10年来StrlingやTSXBINで満足していたのですが、4GBを超えるファイルを開けないという問題にぶつかってしまい、代わりを探していたところ見つけたのがHxD。見た目も綺麗で日本語化さ…

はてなブログの管理ページにある広告を隠す

独自ドメイン設定してもお名前.comの広告がバーンと出続けていてアレなのでユーザCSSで非表示にしました。なんでProにしたのに広告が増えるのか。ChromeにはUser Stylesheetの機能がない(消された)っぽいので、Stylus拡張を入れました。Stylus - Chrome ウェ…

C#のRangeとIndex

C# 8.0 の新機能 - C# ガイド | Microsoft DocsC# 8.0で追加されたRangeやIndexによって、配列の一部の要素を参照したいときに以下のように書けるようになりました。Rubyっぽい。 int[] arr = {0, 1, 2, 3, 4, 5}; arr[^1].Dump(); // => 5 (最後の要素が取…

DB Browser for SQLite Portable

DB Browser for SQLiteSQLiteのdbファイルの内容確認ができるソフトウェア。DBの新規作成から内容の閲覧、編集、全部できる便利ツール。アプリのプロトタイプを、DBにSQLite使って作るときとかに使ってます。Chromeの履歴ファイルを開いてみたところSQLの評…

最近の電卓事情

LINQPad 計算したい式を入力してF5でサクッと確認できる。 C#のプログラムを評価できるので、計算途中の値を変数に入れることもできるし、ファイルから読んだ値を使って何かすることも簡単。 PowerShell 昔はコマンドプロンプトからirb起動して電卓に、とか…

LINQPad 6

LINQPad - The .NET Programmer's Playgroundメジャーバージョンが上がっていたので更新しました。.NET Frameworkから.NET Core 3.0に移行して、アイコンも青くなりました。最近.NET Coreに触る機会も出てきたのでちょうどよかったです。Visual Studio(2019)…

複数の配列をひとつのループで処理したい in C#

元ネタ : 複数の配列をひとつのループで処理したい - ベイダー日記定期的に欲しくなるので複数の配列を受け取って要素をひとつずつ返すようなメソッドを作りました。手元の環境はC#2.0で拡張メソッドなんてないので以下のようなメソッドをどこかのユーティリ…

メモリ確保

・めもりかくほ C onlyでわりと規模の大きいときは呼び出し元で確保するとして, 最初にポインタをNULLにして渡すと必要なサイズだけが返ってきて改めてそのサイズを確保して呼び出すというのが一番安全かな. でもその手順を毎回書くのは面倒だから呼び出し先…

CrashFinder

アプリケーションの動作確認をしている時に実行時エラーが発生したのですが、デバッガで止まるところがどうも怪しく原因がさっぱりわからないという事態に陥ってしまったので、エラーメッセージに含まれるアドレスから本当にエラーが発生している箇所を探そ…

複数の配列をひとつのループで処理したい

A, B, Cという配列があって、中に持っているオブジェクトの型が同じである時に、 foreach (HogeType h in A, B, C) { h.do() } みたいな感じで、Aの要素を全部走査したら次はBの要素に……という風にしたい。こういうのをサポートしている言語ってあるんでしょ…

C#でLoadLibraryを使用してアンマネージDLLを使用する

C#(.NET)でアンマネージDLLを使用するには、DllImport属性を使用するのが記述量も少なく、面倒なことを考えずに済むので一番楽だと思います。 [DllImport("user32.dll")] private static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaptio…

演算子の優先順位

if (hoge || foo && bar) { // ... } &&演算子の方が優先度が高いため、上記のコードは if (hoge || (foo && bar)) { // ... } と解釈されるが、自分の脳内ではなぜか if ((hoge || foo) && bar) { // ... } となっていたためにしょぼいバグを生んでいた。欝…

Visual Studioのデバッグ機能(Edit and Continue)

これはすごい。デバッガからアプリを実行している時に未処理の例外が発生するとデバッガは例外が送出されたところで停止するけれど、その時点で例外が発生する原因のコードが近くにあれば、そこを修正してから少し巻き戻して再実行すればそのまま通るように…

TDDはIDEの助けが必要だなあ

と、思いました。なんだかんだでC++ BuilderでTDDは面倒くさくてあまりやる気になれなかったんですが、Visual Studio(C#)の方は昨日のUnitRunとNUnitのおかげで簡単にテストができるので自然とテストを書こうという気分になれます。ツール重要だなあ。という…

プライベートメソッドのテスト

C#でprivateなメソッドをテストしたい時ってどうするのが定石なのだろう。C++では、#define private publicなんていう恐ろしい手があるらしいですが、C#だとリフレクションとか使って頑張るしかないのでしょうか。リフレクションまだ勉強してないのでさっぱ…

message_once

最速インターフェース研究会 :: Developer Enviroments Conference で発表してきましたにて公開されている資料にalert_onceというJavascriptで書かれた関数がありました。ループ中に何かエラーがあった時にメッセージを出したい、けど、ループ中にたくさんエ…

数学関数のエラーを処理する _matherr 関数

数学関数の引数に不正な値を与えるとエラーが発生しますが、_matherr関数を定義するとエラーが発生する直前に処理することができます。注:以下の記述はBorland C++ Compilerにて確認を行っています。環境によっては関数名や定数名が違ったり(gccではアンダー…

テキストファイルを読み込んでSTLのコンテナに格納する

たまにやろうとした時にいつも忘れてるのでメモ。 int main() { std::string text; std::ifstream ifs("hoge.txt"); text.assign(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>()); return 0; } ちょっとしたファイルを読む時にはそれなりに使え</char></char>…

C++ Builderで、DLLのデバッグにPythonを利用する

PythonでDLLのテストを行うコードを書いて、もし実際にバグが見つかっても、そのバグの原因がどこにあるのかまではこの方法だと分からなくなってしまいます。それだとデバッグしたい時に不便なので、PythonでDLLをロードした時にデバッガからDLLを起動する方…