Skip to content

Instantly share code, notes, and snippets.

@LeeCampbell
LeeCampbell / ObservableAPMExtensions.cs
Created February 13, 2012 16:33
Extension methods to help with converting APM pattern to Observable.
public static class ObservableAPMExtensions
{
public static IObservable<byte> ToObservable(this FileStream source)
{
return source.ToObservable(4096, Scheduler.CurrentThread);
}
public static IObservable<byte> ToObservable(this FileStream source, int buffersize, IScheduler scheduler)
{
@LeeCampbell
LeeCampbell / MyPermissionRepo.cs
Created October 5, 2012 14:42
Asynchronous cache of values
void Main()
{
var repo = new MyPermissionRepo();
//These will all get batched up and sent together
repo.IsPermissioned("Marcus").Dump("Marcus");
repo.IsPermissioned("Lee").Dump("Lee");
repo.IsPermissioned("Merc").Dump("Merc");
repo.IsPermissioned("Si").Dump("Si");
@LeeCampbell
LeeCampbell / csharp.xslt
Created October 9, 2012 13:39
Protobuf-Net xslt file to produce Nullable Properties
<!--
In conjunction with the patch for issue 72
https://code.google.com/p/protobuf-net/issues/detail?id=72
This file can make the current implementation of the Protobuf-net tools useful. Without these however protobuf-net is full of surprises like:
* Requiring you to specify if it should detect missing values (why is this not always on?)
* Not being able to identify between not specified (null in every other computer system) and the default value
* Not being able to compile if an Enum is optional but does not specify a default value?!
* Happily serializing invalid messages i.e. where required values are missing
@LeeCampbell
LeeCampbell / ScrollViewerCorrector.cs
Created October 26, 2012 15:03
Corrects the ScrollViewer behavior that does not allow parent to scroll once child has exhausted scrolling.
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace MyLib
{
//http://serialseb.blogspot.co.uk/2007/09/wpf-tips-6-preventing-scrollviewer-from.html
@LeeCampbell
LeeCampbell / MyLib.Messaging.cs
Created December 12, 2012 16:29
Thoughts on a simple Messaging API
using System;
namespace MyLib.Messaging
{
public interface IConsumer<out T>
{
///<summary>Allows non-destructive read access to the next message on the queue</summary>
T Peek();
///<summary>Transactional consumer. Requires a transaction scope to be accessed.</summary>
@LeeCampbell
LeeCampbell / LeftFold.cs
Created May 11, 2016 08:35
An example of a LeftFold helper for Cedar EventStore lib.
using System;
using System.Collections.Generic;
using System.Globalization;
using Cedar.EventStore.Streams;
namespace DunkyMoleFanClub
{
public static class LeftFold
{
public static readonly string DefaultKey = string.Empty;
@LeeCampbell
LeeCampbell / IRunnable.cs
Last active July 29, 2016 01:24
SerialDisposable Perf Tests
namespace RxPerformanceTest.SerialDisposable.Console
{
interface IRunnable
{
ThroughputTestResult[] Run();
}
}
@LeeCampbell
LeeCampbell / ReportCodeDuplication.ps1
Last active November 11, 2016 01:15
Code Duplication command line reporter. Uses Jetbrains cmdline tools.
#From https://download.jetbrains.com/resharper/JetBrains.ReSharper.CommandLineTools.2016.2.20160913.100041.zip
$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;
@LeeCampbell
LeeCampbell / IncrementBenchmarks.cs
Last active December 1, 2016 08:46
Benchmark via gist sample
using System.Threading;
using BenchmarkDotNet.Attributes;
public class IncrementBenchmarks
{
private int _intValue;
private long _longValue;
[Setup]
public void Setup()
@LeeCampbell
LeeCampbell / ObservableEx_ThrottledBuffer.cs
Created December 7, 2016 05:23
ThrottledBuffer for Rx
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.