Skip to content

Instantly share code, notes, and snippets.

View pardeike's full-sized avatar
💭
Innovating 🛠

Andreas Pardeike pardeike

💭
Innovating 🛠
View GitHub Profile
@pardeike
pardeike / PreferenceKeysLayout.swift
Last active February 17, 2025 13:22
SwiftUI layout with preference keys
// https://medium.com/ancestry-product-and-technology/swiftui-pro-tips-preferencekey-360505ff8fbb
import SwiftUI
struct TotalWidth {
struct Key: PreferenceKey {
static var defaultValue: CGFloat = 0.0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = max(value, nextValue())
}
# Calculate the dimensions of each square
image_width, image_height = image.size
num_squares = 6 # 6x6 grid
square_width = image_width // num_squares
square_height = image_height // num_squares
# Function to calculate average color of a region
def average_color(region):
return np.mean(region.reshape(-1, 3), axis=0)
@pardeike
pardeike / ScaleAudio.swift
Created August 25, 2024 22:28
Stretching audio in Swift
// from https://nonstrict.eu/blog/2023/stretching-an-audio-file-using-swift/
import Foundation
import AVFoundation
func scaleAudio(inputURL: URL, toDuration targetDuration: CMTime, outputURL: URL) async throws {
// Load info from the input audio file
let inputAudioAsset = AVAsset(url: inputURL)
let inputAudioDuration = await inputAudioAsset.load(.duration)
let inputAudioTimeRange = CMTimeRange(start: .zero, duration: inputAudioDuration)
@pardeike
pardeike / PhysicsTestApp.swift
Created August 7, 2024 03:51
Demo demonstrating physics joints breaking in RealityKit
// put the following code into a new VisionOS 2 beta project and run it
// inside a real device (hand tracking will fail in the simulator)
// interacting with the door on the hinge will separate it from the hinge
import SwiftUI
import RealityKit
import ARKit
let mat1 = UnlitMaterial(color: .blue)
@pardeike
pardeike / Dilute.cs
Created April 19, 2024 14:58
Expanding an image with a brush
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using Image = SixLabors.ImageSharp.Image;
using SixLabors.ImageSharp.Formats.Png;
class Program
{
static readonly PngEncoder encoder = new()
{
@pardeike
pardeike / TwoTranspilersDoingTheSame.cs
Created April 7, 2024 22:29
How infixes will be better than transpilers
public static readonly StringBuilder buffer = new StringBuilder();
void Main()
{
// first mod adds transpiler
Console.WriteLine("// APPLYING PATCH 1");
var h1 = new Harmony("test1");
h1.CreateClassProcessor(typeof(Patch1)).Patch();
// second mod adds transpiler
@pardeike
pardeike / LINQPad_Harmony2.3.3.cs
Created March 29, 2024 14:15
Changes in Harmony 2.3.3
void Main()
{
Test.Run();
var harmony = new Harmony("test");
harmony.PatchCategory("category1");
Test.Run();
harmony.PatchCategory("category2");
Test.Run();
@pardeike
pardeike / finalizers.cs
Created March 26, 2024 22:41
Multiple Finalizers seems broken
void Main()
{
var harmony = new Harmony("test");
Harmony.DEBUG = true;
harmony.PatchAll();
Class.Test();
}
[HarmonyPriority(Priority.High)]
[HarmonyPatch(typeof(Class), nameof(Class.Test))]
@pardeike
pardeike / innerfix.cs
Last active February 4, 2024 23:45
Harmony: A draft of how to patch inner methods with so called infixes
static void Main(string[] args)
{
var test = new Test();
Console.WriteLine($"--> OriginalMethod={test.OriginalMethod(0, "foobartest")}");
Console.WriteLine("");
Console.WriteLine($"--> OriginalMethod={test.OriginalMethod(123, "foobartest")}");
Console.WriteLine("");
// patching would happen here
@pardeike
pardeike / FilterBlockTest.cs
Created January 14, 2024 23:33
Creating a filter clause in Cecil
/*
The following code creates this class:
using System;
public static void Method1()
{
try
{
Console.WriteLine("code");
}