Skip to content

Instantly share code, notes, and snippets.

View bent-rasmussen's full-sized avatar

Bent Rasmussen bent-rasmussen

View GitHub Profile
@bent-rasmussen
bent-rasmussen / git-pull-all.ps1
Last active January 5, 2019 15:23
"git pull" for all git subdirectories
cls
Push-Location
Set-Location E:\Git\ # edit this path for your location or use ./
Write-Host ("git pull on all directories under " + (Resolve-Path .\).Path) -ForegroundColor Cyan
""
Get-ChildItem -Directory -path ./ <# add -Recurse to include all subdirectories recursively #> | ForEach-Object {
if (Test-Path ($_.FullName + "/.git") -PathType Container) {
Write-Host $_.FullName -NoNewline -ForegroundColor Green
Write-Host ">" -NoNewLine -ForegroundColor Gray
Write-Host "git pull" -ForegroundColor White
@bent-rasmussen
bent-rasmussen / fs-eff.cs
Last active July 23, 2020 23:07
Experiment: Algebraic (file system) Effects using Eff from Nessos
#nullable enable
async Task Main()
{
// Physical file system interpretation of file system effects
var physicalHandler = new PhysicalFileSystemEffectHandler(@"c:\");
// Run test
await Test().Run(physicalHandler);
}
@bent-rasmussen
bent-rasmussen / Actor.fs
Last active September 12, 2023 04:23
Experimental high performance actor implementation for F# using channel and task computation expression.
// NOTE: import this Nuget package: TaskBuilder.fs (written using 2.1.0)
//
// Tested in LINQPad (hence Dump method usage).
open System
open System.Collections
open System.Collections.Generic
open System.Diagnostics
open System.Linq
open System.Threading
@bent-rasmussen
bent-rasmussen / MailboxProcessorPerformanceReference.fs
Last active September 20, 2020 21:10
MailboxProcessor perfornance test to compare against the high-performance task-and-channel-based version (separate Gist).
// MailboxProcessor test for comparison against the performance-optimized task-and-channel-based actor impl. here:
//
// https://gist.github.com/bent-rasmussen/8152df3c842a06acabe219dd877802d5
//
// Tested in LINQPad (hence Dump method usage).
type Message =
| Incr
| Not of bool * AsyncReplyChannel<bool>
| Counter of AsyncReplyChannel<int>
@bent-rasmussen
bent-rasmussen / DynamicSerilog.linq
Created September 29, 2020 16:43
An logger experiment for C# using the dynamic language feature.
<Query Kind="Program">
<NuGetReference>Serilog</NuGetReference>
<NuGetReference>Serilog.Sinks.LINQPad</NuGetReference>
<Namespace>System.Dynamic</Namespace>
<Namespace>Serilog</Namespace>
</Query>
// Just an experiment; you should probably never use this. :-)
// Would be nicer with compile-time function creation but not possible atm afaik.
@bent-rasmussen
bent-rasmussen / AdaptiveFSharpMagic.linq
Created May 8, 2021 02:04
FSharp.Data.Adaptive example in linqpad
<Query Kind="FSharpProgram">
<NuGetReference>FSharp.Data.Adaptive</NuGetReference>
<Namespace>FSharp.Data.Adaptive</Namespace>
<Namespace>FSharp.Data.Traceable</Namespace>
</Query>
// F# - what the F* is this sorcery?! :-)
// create a temporary directory
@bent-rasmussen
bent-rasmussen / EventSourceBuilder.linq
Last active January 4, 2022 01:08
EventSource fluent source code generator - eliminates boilerplate and ensures consistency
<Query Kind="Program">
<NuGetReference>Observito.Trace.EventSourceFormatter</NuGetReference>
<Namespace>Observito.Trace.EventSourceFormatter</Namespace>
<Namespace>System.Collections.Immutable</Namespace>
<Namespace>System.Diagnostics.Tracing</Namespace>
</Query>
#nullable enable
void Main()
@bent-rasmussen
bent-rasmussen / TraceHttpRequest.linq
Last active January 2, 2022 15:30
LINQPad HTTP request tracing tool
<Query Kind="Statements">
<Namespace>System.Net.Http</Namespace>
<Namespace>System.Threading.Tasks</Namespace>
<Namespace>System.Dynamic</Namespace>
</Query>
await TestAsync("Foo", http => http.GetStringAsync("http://www.google.com/"), HttpFormatOptions.Verbose);
static object Title(string message, bool isError = false)
@bent-rasmussen
bent-rasmussen / Code.fs
Last active January 4, 2022 11:14
Compile-time error on contradictive conditional compilation symbols
// Compile-time error on contradictive conditional compilation symbols.
// Make conditional compilation symbols form a discriminated union.
#if (SITE_DEV && SITE_TEST)
§"Contradictive conditional compilation symbols"
#endif
@bent-rasmussen
bent-rasmussen / NoBoxStruct.fs
Last active February 19, 2022 17:34
How I learned to love the struct and stop worrying (part I)...
/// Equatable operators - avoid boxing operands when comparing structs.
/// Source: https://github.com/dotnet/fsharp/issues/526#issuecomment-119755563
module EquatableOperators =
let inline eq<'a when 'a :> System.IEquatable<'a>> (x:'a) (y:'a) = x.Equals y
let inline (==) x y = eq x y
let inline (!=) x y = not (eq x y)
/// We get a fair warning that it's odd that we impl. custom equality
/// when we deny the equality operator.
[<Struct; NoEquality; NoComparison>]