npx aws-azure-login --configure --profile azure-saml
Default Username, Default Role ARN は何も入力せずEnterを押してよい。
https://github.com/Versent/saml2aws をベースに一部修正
winget install saml2aws
.NETは、Microsoftによる統合的なエコシステム管理により、標準ライブラリが充実し、フレームワーク間の整合性が比較的高く保たれています。しかし、プラットフォームの近代化とクロスプラットフォーム化を推進する過程で、時には破壊的変更を伴う進化を遂げてきた歴史も持ちます。
.NET Framework時代: この時期はバイナリ互換性が重視されました。しかし、依存関係の管理には課題がありました。単一のアプリケーションが参照する多数のライブラリ間で、推移的依存のバージョンが異なると競合が発生し、開発者は「bindingRedirect」という設定を手動で調整する必要がありました。これは複雑で間違いやすい作業でした。
.NET Core / .NET 5+ 時代: クロスプラットフォーム対応とパフォーマンス向上を目指した.NET Coreの登場により、APIの整理やアーキテクチャの刷新が行われました。この移行期には以下のような互換性の課題が顕在化しました:
| open Falco | |
| open Falco.Routing | |
| open Microsoft.AspNetCore.Builder | |
| let endpoints = | |
| [ get "/weather" WeatherForecast.getRandom | |
| get "/" (Response.ofPlainText "Hello World!") ] | |
| [<EntryPoint>] | |
| let main args = |
| 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); |
(原文:Against Railway-Oriented Programming)
2019年12月20日
この記事は、2019年のF#アドベントカレンダーの一部です。他の素晴らしい記事もぜひご覧ください。企画者のSergey Tihon氏に感謝します。
6年半前、私は「鉄道指向プログラミング」と呼ぶものに関する記事を書き、講演を行いました。これは、エラーを生成する関数を連結するために、Result / Either をどのように使用するかを、自分自身や他の人に説明するための手段でした。
| module My.Linq | |
| open System | |
| open System.Collections.Generic | |
| open System.Linq | |
| open System.Linq.Expressions | |
| open System.Reflection | |
| // 条件に一致する最初の結果を返す関数 | |
| let rec tryFirst (funcs: ('a -> 'b option) list) (input: 'a) = |