Skip to content

Instantly share code, notes, and snippets.

View peter-mghendi's full-sized avatar
🧑‍🔬
Doing science.

pete peter-mghendi

🧑‍🔬
Doing science.
View GitHub Profile
@peter-mghendi
peter-mghendi / dotnetvm.sh
Last active December 16, 2025 19:58
Poor man's version manager for .NET
#!/usr/bin/env bash
set -euo pipefail
# Root folder of your .NET installs.
# Override by exporting DOTNET_VERSIONS_ROOT if you don't use $HOME/dotnet
DOTNET_VERSIONS_ROOT="${DOTNET_VERSIONS_ROOT:-"$HOME/dotnet"}"
die() {
echo "error: $*" >&2
exit 1
@peter-mghendi
peter-mghendi / scratch.sh
Last active November 6, 2025 20:23
Collection of random usefiul bash commands
# Installing Android SDKs and accepting SDK license agreements for a net10.0-android project.
# Requires JDK 17 now, up from JDK 11 requirement in net9.0-android.
# Target is InstallAndroidDependencies, so this won't actualy build the project, still need to run dotnet build.
dotnet build -t:InstallAndroidDependencies -f net10.0-android "-p:AndroidSdkDirectory=/home/peter/Android/Sdk" "-p:AcceptAndroidSDKLicenses=true"
@peter-mghendi
peter-mghendi / loc.sh
Last active September 4, 2025 08:47
A shell script that interactively lets you explore code stats for any public GitHub repo. Depends on `curl`, `gum` and `jq`.
#!/usr/bin/env bash
set -euo pipefail
#--- helpers ---------------------------------------------------------------#
need() { command -v "$1" >/dev/null 2>&1 || { echo "Missing dependency: $1" >&2; exit 1; }; }
die() { gum style --foreground 1 --bold "Error:" -- "$*"; exit 1; }
need awk
need curl
need gum
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Hybrid;
using OpenLines.Data;
using OpenLines.Data.Models;
using static System.Math;
using static System.TimeSpan;
using static Microsoft.EntityFrameworkCore.EF;
namespace OpenLines.Services;
@peter-mghendi
peter-mghendi / App.axaml
Last active February 16, 2025 20:36
Source-generated ViewLocator for AvaloniaUI.
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:themes="clr-namespace:Material.Styles.Themes;assembly=Material.Styles"
xmlns:dialogs="clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia"
xmlns:infrastructure="clr-namespace:Gringotts.Infrastructure"
x:Class="Gringotts.App"
RequestedThemeVariant="Default">
<Application.DataTemplates>
<infrastructure:SourceGeneratedViewLocator/>
@peter-mghendi
peter-mghendi / VaultIgnore.cs
Last active February 8, 2025 16:56
A little service class that uses filesystem globbing to implement .gitignore-like functionality.
using Gringotts.Core.Models;
using Microsoft.Extensions.FileSystemGlobbing;
namespace Gringotts.Core.Services;
public class VaultIgnore
{
private readonly string _ignore;
private Matcher _matcher = DefaultMatcher;
@peter-mghendi
peter-mghendi / delete_cascade.sql
Created February 7, 2025 09:45
Postgres function to recursively delete dependent rows.
-- credit https://stackoverflow.com/a/19103574
create or replace function delete_cascade(p_schema varchar, p_table varchar, p_key varchar, p_recursion varchar[] default null)
returns integer as $$
declare
rx record;
rd record;
v_sql varchar;
v_recursion_key varchar;
recnum integer;
v_primary_key varchar;
@peter-mghendi
peter-mghendi / versioning.sh
Created January 26, 2025 14:39
Compare numeric versions in bash and do something if a newer version is provided.
#!/bin/bash
# Color codes
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
compare_versions() {
local LATEST="$1"
local CURRENT="$2"
@peter-mghendi
peter-mghendi / HostBasedRouteInterceptor.java
Created October 26, 2024 08:37
Poor man's multitenancy.
package com.example.app.interceptors;
import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import com.example.app.config.RouteProperties;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import java.io.IOException;
@peter-mghendi
peter-mghendi / GuidBackport.cs
Created July 21, 2024 10:04
Backport of Guid.CreateVersion7 from .NET 9.
public static class GuidBackport
{
private const ushort Version7Value = 0x7000;
private const ushort VersionMask = 0xF000;
private const byte Variant10xxValue = 0x80;
private const byte Variant10xxMask = 0xC0;
/**
* Backport of Guid.CreateVersion7() from .NET 9
*/