Skip to content

Instantly share code, notes, and snippets.

View thoemmi's full-sized avatar

Thomas Freudenberg thoemmi

View GitHub Profile
@thoemmi
thoemmi / AnsiConsoleExtensions.cs
Created June 13, 2022 20:44
Extension method for Spectre.Console to write JSON with syntax highlighting
public static class AnsiConsoleExtensions
{
public static IAnsiConsole WriteJson(this IAnsiConsole console, JsonElement node, JsonStyle? jsonStyle = null)
{
ArgumentNullException.ThrowIfNull(console);
ArgumentNullException.ThrowIfNull(node);
console.WriteJson(node, jsonStyle ?? JsonStyle.Default, 0);
return console;
}

Keybase proof

I hereby claim:

  • I am thoemmi on github.
  • I am thoemmi (https://keybase.io/thoemmi) on keybase.
  • I have a public key ASD1LqmfVwJ9qgVmFamgIyLV28FTLDOwzDiIph2oyBtA9go

To claim this, I am signing this object:

@thoemmi
thoemmi / EnumFlagsConverter.cs
Created September 5, 2018 15:31
JSON Converter for enum flags
public class EnumFlagsConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var x = ((Enum) value).ToString();
var list = new List<string>();
foreach (var v in x.Split(new[] {", "}, StringSplitOptions.RemoveEmptyEntries))
{
list.Add(v);
@thoemmi
thoemmi / Create-WorkflowDiagramFromWitd.ps1
Last active February 10, 2020 19:59
This Powershell scripts generates a nice workflow diagram from a TFS work item template definition file. See http://thomasfreudenberg.com/archive/2018/01/16/generating-workflow-diagram-for-witd/ for details
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, HelpMessage="Path to work item template definition file")]
[string]
$witdPath
)
# path to dot.exe; e.g. use "choco install graphviz"
$dotPath = "C:\ProgramData\chocolatey\bin\dot.exe"
@thoemmi
thoemmi / Clear-NuGetCache.ps1
Created April 21, 2017 21:11
Script to delete old NuGet packages from %USERPROFILE%\.nuget\packages which haven't been accessed for 150 days
[CmdletBinding(SupportsShouldProcess=$True)]
Param(
[int]$CutoffDays = 150
)
$cutoffDate = (Get-Date).AddDays(-$CutoffDays)
# get path to cached NuGet packages ("%USERPROFILE$\.nuget\packages")
$nugetCachePath = Join-Path "$([System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::UserProfile))" ".nuget\packages"
public class EncryptingJsonConverter : JsonConverter {
private readonly byte[] _encryptionKeyBytes;
public EncryptingJsonConverter(string encryptionKey) {
if (encryptionKey == null) {
throw new ArgumentNullException(nameof(encryptionKey));
}
// Hash the key to ensure it is exactly 256 bits long, as required by AES-256
using (var sha = new SHA256Managed()) {
public class FormatKbSizeConverter : IValueConverter {
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern long StrFormatByteSizeW(long qdw, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszBuf,
int cchBuf);
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
var number = System.Convert.ToInt64(value);
var sb = new StringBuilder(32);
StrFormatByteSizeW(number, sb, sb.Capacity);
return sb.ToString();
@thoemmi
thoemmi / UpdateVcxprojFiles.ps1
Last active August 29, 2015 14:15
Updates .vcxproj files to Visual Studio 2013 while still building against VS2012 platform
function UpdateVcxprojFile($filename) {
$content = [xml](Get-Content -Path $filename)
$changed = $false
$toolsVersion = $content.Project.ToolsVersion
if ($toolsVersion -ne "12.0") {
$content.Project.ToolsVersion = "12.0"
$changed = $true
}
using System.Diagnostics;
using Raven.Client.Embedded;
using Raven.Client.Listeners;
using Raven.Json.Linq;
namespace StackOverflow20764813 {
internal class Program {
private static void Main() {
using (var store = new EmbeddableDocumentStore { RunInMemory = true }) {
store.RegisterListener(new TestDocumentStoreListener());
@thoemmi
thoemmi / gist:5613845
Created May 20, 2013 17:40
Regular expression for unsigned short
[TestFixture]
public class UshortRegexTest {
readonly Regex _ushortRegex = new Regex(@"^(
0 # 0
|
[1-9]\d{0,3} # 1-9999
|
[1-5]\d{4} # 10000-59999
|
6[0-4]\d\d\d # 60000-64999