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
  • 09:57 (UTC +10:00)
View GitHub Profile
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Channels;
public static class ChannelReaderExtensions
{
/// <summary>
/// Creates an <see cref="IAsyncEnumerable{T}"/> that enables reading all of the data from the channel
@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));
}
@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 / 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 / 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 / update-dns.sh
Last active November 14, 2023 06:31
Script for automatically updating the DNS record in CloudFlare, for dynamic DNS.
#!/bin/bash
# Dynamic DNS auto-update script for CloudFlare API
# Version 3 - Ryan Crosby 2023
#
# Supports IPv4 and IPv6 (A and AAAA records)
#
# Requires curl and jq
echo "Dynamic DNS auto-update script for CloudFlare API"
@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 / 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";