Skip to content

Instantly share code, notes, and snippets.

View crozone's full-sized avatar
💭
Working on ipodloader2 and Tetris for macOS 9

Ryan Crosby crozone

💭
Working on ipodloader2 and Tetris for macOS 9
  • Unique Micro Design Pty Ltd.
  • Australia
  • 10:35 (UTC +10:00)
View GitHub Profile
@crozone
crozone / .vimrc
Created January 26, 2021 04:04
Good, sane .vimrc. Background=dark and mouse disabled.
syntax on
set background=dark
set showcmd
set showmatch
set mouse=
@crozone
crozone / CancellationTokenExtensions.cs
Created April 22, 2021 04:38
CancellationToken.WhenCancelled()
using System.Threading;
using System.Threading.Tasks;
public static class CancellationTokenExtensions
{
public static async Task WhenCancelled(this CancellationToken cancellationToken)
{
TaskCompletionSource<bool> taskCompletionSource = new TaskCompletionSource<bool>();
@crozone
crozone / HttpResponseMessageExtensions.cs
Last active August 26, 2021 01:45
EnsureSuccessStatusCodeWithStatus (HttpResponseMessageExtensions)
// Copyright 2021 Ryan Crosby
// This code is licensed under the MIT license
/// <summary>
/// Variations of the EnsureSuccessStatusCode() extension method for capturing and retreiving the HTTP Status Code and Response Body.
/// </summary>
public static class HttpResponseMessageExtensions
{
public const string StatusCodeKey = "StatusCode";
public const string ResponseBodyKey = "ResponseBody";
@crozone
crozone / HtmlExtensions.cs
Last active August 26, 2021 01:46
Html.DescriptionFor() extension method for ASP.NET Core 3.1 and 5
// Copyright 2021 Ryan Crosby
// This code is licensed under the MIT license
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq.Expressions;
@crozone
crozone / PathGlobbingHelpers.cs
Last active August 26, 2021 01:52
Glob Path To Regex
// Copyright 2021 Ryan Crosby
// This code is licensed under the MIT license
using System;
using System.Text;
using System.Text.RegularExpressions;
// ...
public static class PathGlobbingHelpers
@crozone
crozone / nextpoweroftwo.cs
Last active June 10, 2022 08:42
Get next largest power of two
public static class IntExtensions
{
public static uint GetNextPowerOfTwo(this uint input)
{
--input;
input |= input >> 1;
input |= input >> 2;
input |= input >> 4;
input |= input >> 8;
input |= input >> 16;
@crozone
crozone / putty-serial.ps1
Created May 11, 2023 04:05
Open all serial ports in PuTTY
# Powershell script to automatically open a putty window for each serial port on the computer
param (
[string]$baud = "115200"
)
$serialreg = Get-Item -Path Registry::HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
foreach ($thisname in $serialreg.GetValueNames())
{
@crozone
crozone / change-network.ps1
Created June 30, 2023 03:34
Powershell script to rapidly switch between WiFi and Ethernet on Surface Book and MS Dock.
# Script to switch between wired LAN and WiFi on Surface Book and MS Dock.
# Initially, one should be disabled and the other enabled. The script will then flip their states.
[string]$wifi_ifdesc = 'Marvell AVASTAR Wireless-AC Network Controller'
[string]$eth_ifdesc = 'Surface Ethernet Adapter #2'
if((Get-NetAdapter -InterfaceDescription $wifi_ifdesc).Status -eq 'Disabled') {
# Switch to Wifi
Write-Output 'Switching to WiFi'
@crozone
crozone / RoundDown.cs
Created July 4, 2023 08:16
C# Round down to next power of two. Analogous to BitOperations.RoundUpToPowerOf2().
using System.Numerics;
/// <summary>
/// Round the given integral value down to a power of 2.
/// This is the equivalent to returning a number with a single bit set at the most significant location a bit is set in the input value.
/// </summary>
/// <param name="value">The value.</param>
/// <returns>
/// The smallest power of 2 which is less than or equal to <paramref name="value"/>.
/// If <paramref name="value"/> is 0 or the result overflows, returns 0.
@crozone
crozone / AsyncLock.cs
Created July 13, 2023 02:28
C# AsyncLock based on SemaphoreSlim
public class AsyncLock
{
private readonly SemaphoreSlim semaphore = new SemaphoreSlim(1, 1);
private readonly Task<IDisposable> releaser;
public AsyncLock()
{
releaser = Task.FromResult((IDisposable)new AsyncLockReleaser(this));
}