Computer

Programming w/ C# ~ ちょっとおもしろいパターンマッチ記法の発見

発見 ちょっとおもしろいパターンマッチ記法を発見をした。 ネスト構造の任意データ型の文字列化 ネスト構造の任意データ型の要素1つ1つに再帰である処理を掛けてして文字列化したく、こんな処理を書いてみた。 public static IEnumerable<string> ToStringRecursi</string>…

Programming w/ C# ~ 抽象 record データコンテナ・テンプレートから派生クラスを Reflection.Emit で動的生成

抽象 record データコンテナ・テンプレートから派生クラスを Reflection.Emit で動的生成 やりたいこと 下記のようなコードがある。 public abstract record Format { // EntityFrameworkCore で利用する共通機能を書く // プロパティは書かない } // データ…

Programming w/ PostgreSQL ~ テーブル・レコード更新日時の記録

PostgreSQL のテーブルにレコード更新された日時を記録する実験 仕掛けづくりは下記の通り。 -- [初期設定] スキーマ作成 CREATE SCHEMA sandbox; -- [初期設定] 観測対象テーブルのレコード最終更新日時を記録するテーブルの定義 CREATE TABLE IF NOT EXIST…

Programming w/ PHP ~ PostgreSQL への接続

メモ

Programming w/ C# ~ プロパティの型 "定義" の抽出方法 (再訂正・改良版)

プロパティの型 "定義" の抽出方法 (訂正・改良版) やりたいこと データを record class 等のコンテナクラスで扱う際、特にそれをデータベースにマップする際に、カラムに対応する各プロパティの正確なデータ型 "定義" をプログラム上で知りたいことがある。…

Programming w/ C# ~ 鬼滅の刃コラボ 無限列車編

鬼滅の刃 無限列車編 C#er は、鬼滅の刃 無限列車編 をこう見る。(下記コード部分にはネタバレを含みます。) NotImplemented はきちんと実装しないと使えませんよ。 using System; using System.Collections.Generic; using System.Linq; using ヒノカミ神楽…

Programming w/ C# ~ DocFx の利用方法

はじめに Java の javadoc のように C# においても /// がドキュメントコメントになることは知っており VS Code にもそれ用の拡張機能を加えていた。しかし、これまできちんと運用したことがなかったため、ここらで導入してみることにした。(DoxFx は 2.61.0…

Programming w/ C# ~ Null 安全なジェネリクスのコード記述方法

null 安全なジェネリクス記法 C# 9.0 からようやく null 安全なジェネリクスがまともに記述できるようになったため nullability について試行錯誤してみた。 C# 9.0 以降の nullable コンテクストはそれなりによくできているが、nullablity 解釈の柔軟さ・厳…

Programming w/ C# ~ ステップカウンタ

C# ソースの (フォルダ再帰的な) ステップカウンタ ソースコードのファイル数・行数を簡便に知りたい。 dir /b /s から find /v /c へ繋いでワンライナー的にやれば ... といつも思って検索をかけるものの、なかなかズバリの解が出てこないため、バッチファ…

Programming w/ C# ~ record に対する override method

備忘録 原因不明の不具合に悩まされ、調べたら C# 言語仕様だったということがあったためメモ。record の override method は class のそれと違う動作をする。 using System; public class Class1 { public string PropC1 = "PropC1"; public override strin…

Programming w/ C# ~ TypeForwarding

備忘録 あるアセンブリに定義されているクラスを参照させつつ、その実体を別のアセンブリに転送したいと思い、TypeForwarding を調べてみた。ufcpp.net learn.microsoft.comが、なかなかうまくいかない。情報が少なすぎてよくわからなかったが、中国語で書か…

Programming w/ C# ~ Nullable とジェネリクス

備忘録 C# 8.0 から class 型と class? 型が区別されるようになり Null 安全性が高まったが、ジェネリクスでの Nullable の扱いが難しく、特に C# 8.0 と C# 9.0 以降で大きな違いがあるため、後者のスタイルで記述するときのまとめを備忘として記録する。 …

Functional Programming w/ C# ~ ラムダ式の出力からの型推論

気づき TypeScript と違って C# はラムダ式の出力の型から型推論できない!下記の定義 (2) のような、前項の結果を参照・利用する拡張メソッドを定義しようとしていて気づいた。 public static class ExtensionIEnumerable { // 定義 (1) ~ 一般形 public s…

Functional Programming w/ C# ~ ラムダ式の出力からの型推論

気づき TypeScript と違って C# はラムダ式の出力の型から型推論できない! 下記のような、前項の結果を参照・利用する拡張メソッドを定義しようとしていて気づいた。 |cs| // 定義 static IEnumerable SelectPrevRef<TSource, TResult>(this IEnumerable source, Func<TResult, TSource, TResult> func) w</tresult,></tsource,>…

Procedural Programming w/ C# -アルゴリズムの威力

探索問題 配列 val[] に入っている 2 値の差がある定数 target0 に一致するか、という問題に直面し、まずは愚直にこんなコードを書いてみた。 // C# code long[] val = new long[n]; // val[0 .. n - 1] には単調増加な正値が入っている long target0 = ...;…

C# LINQ ~ 性能評価 (1) : ラムダ式とローカル関数

きっかけ いままで 10 年ほど C# を愛用してきて C# でコードを組むときは可読性や開発効率などアプリ層観点でしかロジックを眺めてこなかったが、競技プログラミングに C# が使えるのだろうかという疑問をふと抱いたため、30 年ぶりに C++ も書いてみたりし…

環境構築メモ ~ Visual Studio Code + WSL2 + Ubuntu + Docker のコンパイル環境構築時の注意

目的 VS Code での C# コンパイル環境を構築するにあたり、Build は Windows から、Run は Docker コンテナから実行するようにしたい。C# と C++ を混在開発するにあたり、C# の Build までの作業のみ Windows で、それ以外の作業はすべて Docker コンテナで…

環境構築メモ ~ Visual Studio Code + WSL2 + Ubuntu + Docker + LaTeX のコンパイル環境

目的 LaTeX コンパイル環境を構築したい。LaTeX はモジュールや文字フォント等で複雑な依存関係がありそう、ということで、構築失敗による環境汚染を避けるために Ubuntu Docker コンテナで実現したい。LaTeX の文書作成 & PDF 閲覧は Windows 上の Visual S…

Visual Studio Code へのエディタ移行

四半世紀の間、使い続けてきた emacs 系エディタから VS Code に移行しようかと思う。 第1の理由 ... Visual Studio の代替 もっさり重くて嫌いだが Nuget 利用や Roslyn 以降の C# コンパイルの場面で使わざるを得ない Visual Studio を代替したい。これが…

C# on Jupyter からの Numpy.NET 利用

Jupyter から C# で Numpy.NET ライブラリを利用できないかと思い、 #r "nuget: Numpy, 3.7.1.25" using Numpy; と記述するも、結論としては NG。このようなランタイムエラーが出る。 System.DllNotFoundException: Unable to load shared library 'python37…

FizzBuzz

学生時代に情報科学科の同級生たちと「FizzBuzz 問題というものがあるらしいが、この程度の基礎ができないプログラマなどいるはずがない」と会話していた。それから四半世紀。小学生にはプログラミングの授業があり、非 IT 企業の一般社員にも「Python 書い…

Functional Programming w/ C# LINQ - with 初期化子の IQueryable<T> 対応版代替簡易記法

C# 9.0 / .NET 5.0 に長らく期待していたことの1つに record の with 初期化子がある。これは record の一部のプロパティを異なる値に置き換えるためのもので y = x with { Value = x.Value * 10 } と書くと x の Value プロパティだけを 10 倍にしたオブジ…

Functional Programming w/ C# LINQ - 左結合 Left Join の簡易記法

C# 9.0, .NET 5.0, .Entity Framework Core 5.0 を使って数ヶ月。当初抱いていた LINQ to Entities の機能向上への期待は打ち砕かれたが、それでも EF 6.0 や EF Core 2.0 に比べたら使いやすくなっているような気がする。本格的に使うにあたり、少し工夫を…

Docker on WSL2 環境構築メモ (6/x) - Jupyter Notebook への .NET Interactive 追加導入

前提 導入対象とするマシンは下記の通り。 Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685) 仮想 OS : Ubuntu 20.04 LTS on WSL2 Docker on WSL2 環境…

Docker on WSL2 環境構築メモ (5/x) - Bitnami/Redmine 導入

前提 導入対象とするマシンは下記の通り。 Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685) 仮想 OS : Ubuntu 20.04 LTS on WSL2 Bitnami/Redmine + Ma…

Docker on WSL2 環境構築メモ (4/x) - Tensorflow (CPU 版) 導入

前提 導入対象とするマシンは下記の通り。 Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685) 仮想 OS : Ubuntu 20.04 LTS on WSL2 Tensorflow (CPU 版) …

Docker on WSL2 環境構築メモ (3/x) - ネットワーク設定

更新 2022.10.19 Windows 11 + WSLg preview 化に伴い、ポートフォワーディングを設定ファイル1つで実行できるようになり、バッチファイルは不要になった。後述 "Port Forwarding 設定の前提" 節、"Port Forwarding 設定" 節の作業の代わりに %UserProfile%…

Docker on WSL2 環境構築メモ (2/x) - 設計戦略

前提 導入対象とするマシンは下記の通り。 Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685) 仮想 OS : Ubuntu 20.04 LTS on WSL2 環境構築メモ 3/3 を…

Docker on WSL2 環境構築メモ (1/x) - Docker 基本操作

Docker 基本操作 (チートシート) Docker 操作の状態遷移 Docker の状態遷移がわかりづらい (にも関わらず図示した解説を見かけない) ため、誤っている可能性を恐れず、可視化してみた。(利用は自己責任で。) Docker レポジトリ (イメージ) の操作 レポジトリ…

Ubuntu 20.04 LTS on WSL2 環境構築メモ (4/4) - その他アプリ導入

前提 導入対象とするマシンは下記の通り。 Hardware : CPU = i10900, GPU = GeForce RTX 2080Ti, Mem = 32GB, SSD 1 TB + HDD 2TB ベース OS : Windows 10 Pro バージョン 20H2 (ビルド 19042.685) 仮想 OS : Ubuntu 20.04 LTS on WSL2 環境構築メモ 3/4 を…