Skip to content

Instantly share code, notes, and snippets.

@TeaDrivenDev
TeaDrivenDev / AutoFixture_Intro_de.cs
Last active Oct 19, 2020
Warum sehen AutoFixture-Tests so seltsam aus, und welche Vorteile hat das?
View AutoFixture_Intro_de.cs
/* v1.0.1
*
* TL;DR: AutoFixture rockt.
*
*
* Folgendes ist der Versuch einer Erklärung, warum Unit Tests mit AutoFixture so seltsam aussehen
* und welche Vorteile das hat.
*
*
* Der Code ist so am Stück lauffähig, wenn folgende externen Referenzen eingebunden sind:
@TeaDrivenDev
TeaDrivenDev / Csharp_vs_Fsharp.md
Last active Jan 4, 2016
Comparison of a small MSCRM plugin implemented in C# and F#
View Csharp_vs_Fsharp.md

As requested by several people on Twitter after I mentioned that the C# implementation is 27 lines, and the F# version saves only two lines over this (which is mainly because there isn't much to save at all). In the mean time, I actually managed to shave off two more lines because the last method call incidentally returns void.

Please note that the plugin as such is not very useful; I'm mainly trying to get an F# plugin to run within MSCRM in the first place.

C#:

	using Microsoft.Xrm.Sdk;
	using System;
	
View QueryByAttribute to QueryExpression
// This....
QueryByAttribute qba = new QueryByAttribute("entityName")
{
ColumnSet = new ColumnSet("fieldA", "fieldB")
};
// There may be several of these lines
qba.AddAttributeValue("fieldC", "fieldCValue");
@TeaDrivenDev
TeaDrivenDev / NestedLets.fs
Created Mar 11, 2014
F# composition root with lots of single and with nested lets
View NestedLets.fs
// old
let ComposeSimple serviceProvider configuration =
let (context, organizationService, _, _) = DecomposeServiceProvider serviceProvider
let configurationXml = XElement.Parse configuration
let getRecordName = GetRecordName organizationService
let regardingLookups() = ConfiguredRegardingLookups configurationXml
let listFindingRegardingObject() = ListFindingRegardingObject regardingLookups (GetFullRecordImage(context))
let regardingObject = NameAddedRegardingObject getRecordName listFindingRegardingObject
@TeaDrivenDev
TeaDrivenDev / UpdateExercismProject.fsx
Created May 10, 2016
F# script to add the files for a new F# problem to an .fsproj file
View UpdateExercismProject.fsx
(*
I am using Visual Studio to solve the F# problems on exercism.io, and I found it tedious
to always add the same files (test file, new code file, readme, plus a folder for better
organization) after each `exercism fetch`, so I automated that.
As it is, this assumes that the .fsproj file is in `exercism\fsharp`. When run, it compares
the subdirectories present with the folders in the .fsproj file, and for any that are
missing in the project file, it adds the `*Test(s).fs` and `README.md` files as well as
creating a new .fs file for the problem solution. It also adds a `module` line with the
respective file name (which is correct most of the time; only occasionally, the module the
@TeaDrivenDev
TeaDrivenDev / VSExtensions.txt
Created Jun 10, 2016
These are the Visual Studio extensions I'm more or less actively using. Descriptions are from the VSIX where I had nothing else to say. All are free (usually open source) on the VS gallery, except where marked as commercial.
View VSExtensions.txt
SwitchStartupProject
Provides a toolbar dropdown box to switch between startup projects. -- VS 2015 has that too, but that doesn't recognize F# projects
https://visualstudiogallery.msdn.microsoft.com/f4e1be8c-b2dd-4dec-b273-dd88f8818571
Productivity Power Tools 2015
Color coded document tabs by file extension or project, various information in the scroll bar, column guides, etc.
https://visualstudiogallery.msdn.microsoft.com/34ebc6a2-2777-421d-8914-e29c1dfa7f5d
CodeLineage
Augments Visual Studio's built-in difference viewer with 'from' and 'to' revision sliders. Accessible from the 'Tools' menu, CodeLineage allows easy access to a cumulative diff view between file revisions. Supports SVN, Perforce, Git and Mercurial.
@TeaDrivenDev
TeaDrivenDev / Fsharp.ahk
Created Aug 3, 2016
AutoHotkey script for F# development
View Fsharp.ahk
; In case you think you may need Caps Lock again at some point,
; we'll move it over to Win+Caps Lock
#Persistent
SetCapsLockState, AlwaysOff
#Capslock::
If GetKeyState("CapsLock", "T") = 1
SetCapsLockState, AlwaysOff
@TeaDrivenDev
TeaDrivenDev / ArguInteropExample.fsx
Last active Sep 25, 2016
Simple example how to hide Argu command line parsing behind an interface for use from .NET languages other than F#
View ArguInteropExample.fsx
open Argu
type CliArguments =
| Yes
| Name of string
| Value of int
with interface IArgParserTemplate with
member s.Usage =
match s with
| Yes -> "specify"
@TeaDrivenDev
TeaDrivenDev / Prelude.fsx
Created Nov 3, 2016
F# functions I use a lot, mostly in prototyping; functionally correct, not necessarily efficient.
View Prelude.fsx
open System
let asFst second first = first, second
let asSnd first second = first, second
let swap (a, b) = b, a
type FullJoinResult<'TLeft, 'TRight> =
| LeftOnly of 'TLeft
| RightOnly of 'TRight
View FsAdvent.fsx
#r @"..\packages\FSharp.Data\lib\net40\FSharp.Data.dll"
open FSharp.Data
[<Literal>]
let OverviewUrl = @"https://sergeytihon.wordpress.com/2016/10/23/f-advent-calendar-in-english-2016/"
type Page = HtmlProvider<OverviewUrl>