Skip to content

Instantly share code, notes, and snippets.

@ashmind
ashmind / run-cli.csproj
Last active October 13, 2021 16:24
Arbitrary scripts with dotnet run
<Project>
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<OutputType>Exe</OutputType>
<OutDir>build/bin</OutDir>
<BaseIntermediateOutputPath>build/obj</BaseIntermediateOutputPath>
</PropertyGroup>
<Target Name="PrepareProgram" BeforeTargets="BeforeBuild">
<PropertyGroup>
Diff:
C:\Program Files\Perforce\p4merge.exe -nl %bname -nr %yname %base %mine

Merge:
C:\Program Files\Perforce\p4merge.exe -nb %bname -nl %tname -nr %yname -nm %mname %base %theirs %mine %merged
@ashmind
ashmind / NuGet_profile.ps1
Last active September 29, 2018 00:24
Save to your NuGet Profile
# For each package, lists which projects it is installed in
function Write-PackageProjectInstalls([string] $PackageFilter = '') {
Set-StrictMode -Version 2
$ErrorActionPreference = 'Stop'
Get-Project -All |
% {
$ProjectName = $_.ProjectName
Get-Package $PackageFilter -Project $ProjectName |
% { New-Object PSObject -Prop (@{ ProjectName=$ProjectName; PackageId=$_.Id; Version = $_.Version; }) }

String interpolation

var x = 1;

// same as string.Format("A {0} B", x) 
var y1 = $"A {x} B"; // y == "A 1 B"

// $@ for multiline
var y2 = $@"A
private class QueryPropagatingRoute : RouteBase {
private readonly RouteBase target;
private readonly string[] queryStringKeys;
public QueryPropagatingRoute(RouteBase target, params string[] queryStringKeys) {
this.target = target;
this.queryStringKeys = queryStringKeys;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) {
@ashmind
ashmind / MonoidsInCSharp.cs
Created March 11, 2011 23:15
Monoids in C# as I see them
public class Monoid<T> {
public T None { get; private set; }
public Func<T, T, T> Operation { get; private set; }
public Monoid(Func<T,T,T> operation, T none) {
this.Operation = operation;
this.None = none;
}
}
@ashmind
ashmind / OwinWebSocket.cs
Created September 14, 2016 09:31
(Very flawed) Implementation of System.Net.WebSockets.WebSocket over Owin async func spec
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.WebSockets;
using System.Threading;
// This is bad and potentially unreliable code, which only serves as a base for
// further improvements. Please do not use it as is.
namespace MirrorSharp.Owin.Internal {
Set-StrictMode -Version 2
$ErrorActionPreference = 'Stop'
function Write-ColorOutput([Parameter(Mandatory=$true)] $inputObject, [System.ConsoleColor] $foregroundColor) {
$rawUI = $Host.UI.RawUI
$saved = $rawUI.ForegroundColor
try {
$rawUI.ForegroundColor = $foregroundColor
Write-Output $inputObject
}
public static class AutofacCompositeExtensions {
public static IRegistrationBuilder<TImplementer, ConcreteReflectionActivatorData, SingleRegistrationStyle> RegisterComposite<TImplementer>(this ContainerBuilder builder) {
var registrationBuilder = RegistrationBuilder.ForType<TImplementer>();
builder.RegisterCallback(registry => {
registrationBuilder.OnPreparing(e => {
foreach (var service in e.Component.Services.OfType<IServiceWithType>()) {
e.Parameters = e.Parameters.Concat(new[] {
new ResolvedParameter(
(p, _) => IsCollectionOf(p.ParameterType, service),
(_, c) => ResolveCollection(c, service, e.Component)
@ashmind
ashmind / htmlpeek.js
Last active December 10, 2015 16:38
Just a small fun thing — if used as a bookmarklet (crunched with http://ted.mielczarek.org/code/mozilla/bookmarklet.html), creates a circular hole in the current page that you can use to peek at html code beneath. Chrome/Safari only.
var init = function($) {
$("<style type='text/css'></style>").text('.cx { background: #f5f2f0; color: black; }' +
' .cx .tag { color: #999; }' +
' .cx .tag .title, .cx .css .attribute { color: #905; }' +
' .cx .tag .attribute, .cx .string, .cx .css .tag, .cx .css .class { color: #690; }' +
' .cx .tag .value, .cx .keyword { color: #07a; }' +
' .cx { font-family: Consolas, Courier New; position: absolute; z-index: 50000; left: 0; top: 0; right: 0; white-space: pre; }')
.appendTo($('head'));
var source = $('<code></code>').text(document.documentElement.outerHTML)