Skip to content

Instantly share code, notes, and snippets.

@matarillo
matarillo / 1_srp.md
Last active March 13, 2026 15:05
SOLID原則はソリッドではない

SOLIDはソリッドではない - 単一責任原則を検証する

https://naildrivin5.com/blog/2019/11/11/solid-is-not-solid-rexamining-the-single-responsibility-principle.html

2019年11月11日

最近、SOLIDの原則について考えていて、その有用性に疑問を感じている。 SOLIDの原則は曖昧で、範囲が広すぎて、混乱を招き、場合によっては完全に間違っている。しかし、これらの原則の動機は正しい。問題は、ニュアンスの異なる概念を簡潔な文に落とし込もうとすることにあって、翻訳の過程で価値の大部分を失っているのだ。 これはプログラマーを間違った道へと導いてしまう(私にとっては確かにそうだった)。

おさらいとして、SOLIDの原則は以下の通りである:

aws-azure-login

設定

npx aws-azure-login --configure --profile azure-saml

Default Username, Default Role ARN は何も入力せずEnterを押してよい。

.NET開発体験とエコシステム比較:互換性の視点から

1. .NETにおける互換性の実情

.NETは、Microsoftによる統合的なエコシステム管理により、標準ライブラリが充実し、フレームワーク間の整合性が比較的高く保たれています。しかし、プラットフォームの近代化とクロスプラットフォーム化を推進する過程で、時には破壊的変更を伴う進化を遂げてきた歴史も持ちます。

  • .NET Framework時代: この時期はバイナリ互換性が重視されました。しかし、依存関係の管理には課題がありました。単一のアプリケーションが参照する多数のライブラリ間で、推移的依存のバージョンが異なると競合が発生し、開発者は「bindingRedirect」という設定を手動で調整する必要がありました。これは複雑で間違いやすい作業でした。

  • .NET Core / .NET 5+ 時代: クロスプラットフォーム対応とパフォーマンス向上を目指した.NET Coreの登場により、APIの整理やアーキテクチャの刷新が行われました。この移行期には以下のような互換性の課題が顕在化しました:

  • Entity Framework 6 (EF6) と EF Coreの間には直接的な互換性がなく、コードの書き換えが必要
@matarillo
matarillo / Falco.Program.fs
Last active September 20, 2025 07:26
compare giraffe with falco
open Falco
open Falco.Routing
open Microsoft.AspNetCore.Builder
let endpoints =
[ get "/weather" WeatherForecast.getRandom
get "/" (Response.ofPlainText "Hello World!") ]
[<EntryPoint>]
let main args =

新しい新製品開発ゲーム

著者: 竹内弘高 および 野中郁次郎

『雑誌掲載記事』(1986年1月号)より


現代の急速に変化し、競争の激しい商業用新製品開発の世界において、スピードと柔軟性は不可欠です。多くの企業が、従来の逐次的な新製品開発アプローチではもはや十分に対応できないことを認識しつつあります。 これに対し、日本やアメリカの企業では、ラグビーのようにチームが一体となってフィールドを前進しながらボールをパスし合う、包括的な手法が採用されています。

@matarillo
matarillo / ConsList`1.cs
Last active June 23, 2025 12:47
Cons List for C# (before Type Unions)
using System.Collections;
using System.Text;
var xs = ConsList<int>.Create([7, 8, 9, 10]);
var ys = ConsList<int>.Create([0, 1, 2, 3]);
var product =
from x in xs
from y in ys
select $"{x * 10 + y}";
type Cont<'a, 'r> = { runCont: ('a -> 'r) -> 'r }
module Cont =
let toCont c = { runCont = c }
let runCont { runCont = c } = c
let return' a = toCont (fun k -> k a)
let (>>=) { runCont = c } f =
toCont (fun k -> c (fun a -> runCont (f a) k))
using NetVips;
if (ModuleInitializer.VipsInitialized)
{
Console.WriteLine(
$"Inited libvips {NetVips.NetVips.Version(0)}.{NetVips.NetVips.Version(1)}.{NetVips.NetVips.Version(2)}");
}
else
{
Console.WriteLine(ModuleInitializer.Exception.Message);