Skip to content

Instantly share code, notes, and snippets.

LeeCampbell / ProjectDependencies.cs
Created Nov 3, 2016
LinqPad Script that generates the GraphViz file to visualize dependencies.
View ProjectDependencies.cs
void Main()
//Generates the .gv file content that can be put into GraphViz to vizualize your dependency tree.
// Once in GrpahViz, export to svg to avoid guessing how big you will need it (e.g. compared to PNG/JPG or other raster formats)
var rootPath = @"C:\source\GitHub\Mercury";
var outputPath = @"C:\source\GitHub\Mercury\";
var limit = 1000;
var projects = Directory.GetFiles(rootPath, "*.csproj", SearchOption.AllDirectories)
.Where(path=>!path.ToLowerInvariant().Contains("test")) //Exclude tests for sanity
LeeCampbell / InstallSqlForDev.ps1
Created Nov 15, 2016
Install SQL 2016 Dev command line (Powershell)
View InstallSqlForDev.ps1
#Installs SQL Server locally with standard settings for Developers/Testers.
# Install SQL from command line help -
$sw = [Diagnostics.Stopwatch]::StartNew()
$currentUserName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name;
$SqlServerIsoImagePath = "???\Downloads\Microsoft\SQL Server 2016 Developer Edition\en_sql_server_2016_developer_x64_dvd_8777069.iso"
#Mount the installation media, and change to the mounted Drive.
$mountVolume = Mount-DiskImage -ImagePath $SqlServerIsoImagePath -PassThru
$driveLetter = ($mountVolume | Get-Volume).DriveLetter
$drivePath = $driveLetter + ":"
LeeCampbell / PerfTest.cs
Created Oct 11, 2015
Simple LinqPad sample of how to execute a performance test in C#
View PerfTest.cs
void Main()
var messageCount = 10000;
var sum =0L;
var result = ThroughputTestResult.Capture(messageCount, () => sum = SumOfSquares(messageCount));
Console.WriteLine($"Result: SumOfSquares({messageCount}) = {sum}");
LeeCampbell / Logger.cs
Created Oct 2, 2012
Logging implementation with Rx features
View Logger.cs
using System;
using System.Diagnostics;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Reactive.Concurrency;
using Microsoft.Practices.Prism.Logging;
using log4net;
using log4net.Core;
//From ResSharper --> Options --> Code Inspection --> Code Annotations -->Copy default implementation to clipboard
LeeCampbell / TestsToEnglish.linq
Created Feb 13, 2012
LinqPad Query to query the Given/When/Then list of tests
View TestsToEnglish.linq
void Main()
//I want to have it format like:
// Given a new strategy
// When the name is modified
// Then raise property changed
// When trade added
// The DeltaCashSum equals Trade DeltaCash
// When invalid trade added
LeeCampbell / INotifyPropertyChangedExtensions.cs
Created Feb 9, 2012
Extension methods to help with INotifyPropertyChanged interface (and ObservableCollection<T>)
View INotifyPropertyChangedExtensions.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
//TODO: Allow the ability to provide multiple properties to WhenPropertyChanges
LeeCampbell / KdbClient.cs
Created Jun 4, 2013
KDB Client rewritten from sample Kx code to use more useful names.
View KdbClient.cs
//2012.06.07 fixed scoping of GUID
//2012.05.29 for use with kdb+v3.0, changed handshake and added Guid. boolean v6->vt tracks type capability.
//2012.01.26 refactored clamp into clampDT, for Date.DateTime()
//2012.01.25 rz() clamp datetime to valid range
//2010.11.17 Block sending new timetypes to version of kdb+ prior to v2.6 (use prior release of KdbClient.cs for older kdb+ versions)
// Max buffer size (default 64kB) used for reading is now a parameter to the KdbClient constructor
// Date, Month, Minute, Second, KTimeSpan are now serializable, implement IComparable
// and have default constructors for xml serialization.
// Added GetNullRepresentation(Type t)
//2010.08.05 Added KException for exceptions due to server error, authentication fail and func decode
View ObservableEx_ThrottledBuffer.cs
public static partial class ObsEx
public static IObservable<IList<T>> ThrottledBuffer<T>(this IObservable<T> source, TimeSpan period, IScheduler scheduler)
return Observable.Create<IList<T>>(obs =>
var yieldTimer = new SerialDisposable();
var buffer = new List<T>();
Action yeildBuffer = () => {
//Not on same thread, so need to be careful here.
LeeCampbell / IncrementBenchmarks.cs
Last active Dec 1, 2016
Benchmark via gist sample
View IncrementBenchmarks.cs
using System.Threading;
using BenchmarkDotNet.Attributes;
public class IncrementBenchmarks
private int _intValue;
private long _longValue;
public void Setup()
LeeCampbell / ReportCodeDuplication.ps1
Last active Nov 11, 2016
Code Duplication command line reporter. Uses Jetbrains cmdline tools.
View ReportCodeDuplication.ps1
$codeDupFolder = 'C:\Users\lee.campbell\Downloads\JetBrains.ReSharper.CommandLineTools.2016.2.20160913.100041\'
$codeDuplicateExe = $codeDupFolder + '\dupfinder.exe'
$codeDuplicateXsl = $codeDupFolder + '\dupFinder.xsl'
$xmlOutput = 'C:\Users\lee.campbell\Desktop\LoanServiceSlnDupes.xml'
$htmlOutput = 'C:\Users\lee.campbell\Desktop\LoanServiceSlnDupes.html'
.$codeDuplicateExe --show-text --output="$xmlOutput" -e="**/*.Designer.cs" -e="**/*.generated.cs" -e="**/*Test*/**/*.cs" -e="**/*Event.cs" 'C:\Source\GitHub\Mercury\src\Mercury.LoanService.sln'
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;