Skip to content

Instantly share code, notes, and snippets.

Avatar

Adam Chester adamchester

View GitHub Profile
@adamchester
adamchester / LinqOfType_vs_ForListToArray.cs
Created Jun 18, 2016
Benchmark: Linq OfType<T>.ToArray() vs ForListToArray
View LinqOfType_vs_ForListToArray.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
namespace BenchmarkDotNet.Samples.Framework
{
public class Framework_LinqOfType_vs_ForListToArray
@adamchester
adamchester / csharp-linqpad-samples.cs
Last active May 27, 2016
MessageTemplates (C#) Samples
View csharp-linqpad-samples.cs
void Main() {
var fr = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
var enAu = System.Globalization.CultureInfo.CreateSpecificCulture("en-AU");
var zhCn = System.Globalization.CultureInfo.CreateSpecificCulture("zh-CN");
var invariant = System.Globalization.CultureInfo.InstalledUICulture;
var chairSitTemplate = MessageTemplate.Parse("I sat at {@Chair} on {SitDate,10:dd-MMM-yyyy}");
chairSitTemplate.Format(fr, new Chair(), DateTimeOffset.UtcNow)
.Dump("Format using fr-FR culture uses comma decimal separator and french month names");
@adamchester
adamchester / netstandard.fs
Created Apr 24, 2016
How .NET Standard relates to .NET Platforms (in F# functions)
View netstandard.fs
type ASetOfApis = unit->unit
module ApiSets =
type Primatives = ASetOfApis
type Reflection = ASetOfApis
type Tasks = ASetOfApis
type Collections = ASetOfApis
type Linq = ASetOfApis
type ConcurrentCollections = ASetOfApis
@adamchester
adamchester / netstandard.fs
Last active Apr 24, 2016
How .NET Standard relates to .NET Platforms (in F#)
View netstandard.fs
// Converted to F# from https://gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7
module Analogy =
type ASetOfApis = unit -> unit
// Each interface represents a target framework and methods represents groups of APIs available on that target framework.
// The goal is to show the relationship between .NET Standard API surface and other .NET platforms
// .NET Standard
@adamchester
adamchester / NoSpec-report-github.md
Last active Feb 20, 2016
AutoFixture NoSpecimen Benchmark: NewInst vs. Singleton
View NoSpec-report-github.md
BenchmarkDotNet-Dev=v0.9.1.0+
OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-4980HQ CPU @ 2.80GHz, ProcessorCount=8
Frequency=10000000 ticks, Resolution=100.0000 ns, Timer=HPET
HostCLR=MS.NET 4.0.30319.42000, Arch=64-bit RELEASE [RyuJIT]
JitModules=clrjit-v4.6.1063.1

Type=NoSpec  Mode=Throughput  Platform=AnyCpu  
Framework=V45  TargetCount=10  
@adamchester
adamchester / NoSpecPerf.fs
Created Dec 28, 2015
AutoFixture NoSpecimen Perf (Singleton vs. new Instance)
View NoSpecPerf.fs
#r "./bin/NoSpecimenNewInst/lib/net40/Ploeh.AutoFixture.dll"
printfn "%A" typeof<Ploeh.AutoFixture.Fixture>.AssemblyQualifiedName
let createWithNoSpecNewInst<'T> =
let fixture = Ploeh.AutoFixture.Fixture()
fun () -> fixture.Create(typeof<'T>, Ploeh.AutoFixture.Kernel.SpecimenContext(fixture)) :?> 'T
#r "./bin/NoSpecimenSingleton/lib/net40/Ploeh.AutoFixture.dll"
printfn "%A" typeof<Ploeh.AutoFixture.Fixture>.AssemblyQualifiedName
let noSpecimenSingleton = typeof<Ploeh.AutoFixture.Kernel.NoSpecimen>
@adamchester
adamchester / suaveSerilog.fsx
Created Jun 8, 2015
A simple Suave to Serilog adapter
View suaveSerilog.fsx
// Step 0. Boilerplate to get the paket.exe tool
open System
open System.IO
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
if not (File.Exists "paket.exe") then
let url = "https://github.com/fsprojects/Paket/releases/download/0.31.5/paket.exe"
use wc = new Net.WebClient()
let tmp = Path.GetTempFileName()
View keybase.md

Keybase proof

I hereby claim:

  • I am adamchester on github.
  • I am adamchester (https://keybase.io/adamchester) on keybase.
  • I have a public key whose fingerprint is 6573 51C0 41D2 58D2 9BE8 83F1 835B 3087 94D3 EC6F

To claim this, I am signing this object:

@adamchester
adamchester / generate.fsx
Last active Mar 13, 2016
Generate a Visual Studio DGML Graph from F#
View generate.fsx
[<AutoOpen>]
module Workflow =
type State = Initial | Draft | PendingApproval | Approved | Cancelled | Completed
type Action = Create | Cancel | SendForApproval | Approve | Reject | Complete
type Role = Creator | Approver | Completor
type Transition = { Action:Action; From:State; To:State; Roles:Role list }
module Transitions =
let create = { Action=Create; From=Initial; To=Draft; Roles=[ Creator ] }
let cancel = { Action=Cancel; From=Draft; To=Cancelled; Roles=[ Creator ] }
let sendForAppr = { Action=SendForApproval; From=Draft; To=PendingApproval; Roles=[ Creator ] }
@adamchester
adamchester / states.fs
Last active Jul 4, 2018
Describing a state machine / approval workflow in F#
View states.fs
type State = Initial | Draft | PendingApproval | Approved | Cancelled | Completed
type Action = Create | Cancel | SendForApproval | Approve | Reject | Complete
type Role = Creator | Approver | Completor
type Transition = { Action:Action; From:State; To:State; Roles:Role list }
module Transitions =
let create = { Action=Create; From=Initial; To=Draft; Roles=[ Creator ] }
let cancel = { Action=Cancel; From=Draft; To=Cancelled; Roles=[ Creator ] }
let sendForAppr = { Action=SendForApproval; From=Draft; To=PendingApproval; Roles=[ Creator ] }
let approve = { Action=Approve; From=PendingApproval; To=Approved; Roles=[ Approver ] }
let reject = { Action=Reject; From=PendingApproval; To=Draft; Roles=[ Approver ] }
You can’t perform that action at this time.