Skip to content

Instantly share code, notes, and snippets.

View nh2's full-sized avatar

Niklas Hambüchen nh2

View GitHub Profile
@nh2
nh2 / chromium-snap-show-passwords.py
Created May 5, 2026 14:20
Repro for printing passwords which the Ubuntu Chromium Snap stores in "plain text" by default
#!/usr/bin/env python3
# This script outputs passwords that the Ubuntu Chromium Snap stores in plain text by default.
#
# It should also work for any other Chromium that uses `--password-store=basic` (which is what
# the Snap uses by default unless the user has manually connected it to a passowrd store backend).
# See
# https://chromium.googlesource.com/chromium/src/+/1fbcd1d2fcab302f8593393135fe6253a963101f/docs/linux/password_storage.md
# It is a repro for Ubuntu bug:
#
"""Minimal repro: torch.profiler CUDA events on worker threads get wrong thread IDs.
When `torch.profiler.profile()` is active and CUDA operations happen on
worker threads (e.g. from `ThreadPoolExecutor`), the exported Chrome trace
has CUDA runtime events (like `cudaLaunchKernel`) with `tid` values based
on `pthread_self()` instead of `gettid()` (Linux kernel TID).
This happens because `torch.profiler.profile()` registers `RecordFunction`
callbacks via `at::addThreadLocalCallback()`, so only the thread that
called `profile().__enter__()` gets callbacks. Kineto's
@nh2
nh2 / migrations.sql
Last active May 8, 2025 17:16
Postgres migrations with advisory lock for DDL transactions
-- Creates the table recording the current migration.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
-- Note: `create or replace function` cannot be run concurrently; postgres
-- will error with "tuple concurrently updated" when that happens.
-- That's why we wrap it in a transaction-level exclusive advisory lock.
-- See http://stackoverflow.com/questions/40525684/tuple-concurrently-updated-when-creating-functions-in-postgresql-pl-pgsql/44101303
# This `firefox-vm.nix` builds a simple NixOS VM with XFCE and Firefox inside.
#
# Build and run it with:
#
# nix-build '<nixpkgs/nixos>' -A vm -I nixos-config=./firefox-vm.nix
# result/bin/run-nixos-vm
#
# Log in as "root" with empty password.
#
# To delete the VM state (storage):
@nh2
nh2 / gist:9e16ce512bd082075e4dcd86115b21bb
Created March 10, 2024 18:48
"fastboot getvar all" on submerged, repaired Google Pixel 4a that had stock Android on it
(bootloader) product:sunfish
(bootloader) serialno:17191JEC203691
(bootloader) variant:SM7 UFS
(bootloader) max-download-size:0x10000000
(bootloader) slot-suffixes:_a,_b
(bootloader) version-bootloader:s5-0.5-10252351
(bootloader) version-baseband:g7150-00112-230505-B-10075601
(bootloader) secure-boot:PRODUCTION
(bootloader) secure:yes
(bootloader) hw-revision:MP1.0
@nh2
nh2 / ceph-benaco.nix
Created January 19, 2024 18:33
Open-sourcing Benaco's NixOS Ceph service module
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.ceph-benaco;
inherit (pkgs.callPackage ../helpers.nix {}) ensureUnitExists;
in
@nh2
nh2 / example-output.txt
Created April 19, 2022 14:15
Process `ghc -v` output, summarising where time is spent.
# ./ghc-performance-categorizer.py ghci-v-output-1.txt --sort-by time
TASK time ms mem MB
------------------------------------------------
systool:cpp 4 2
systool:merge-objects 11 3
Simplify 38 68
ByteCodeGen 70 164
initializing 72 119
systool:as 175 68
@nh2
nh2 / mv-tree.py
Created January 23, 2022 07:18
Tool to move contents of one directory tree into another, safely.
#! /usr/bin/env python3
# Moves contents of one directory tree into another, safely.
import argparse
import filecmp
import shlex
import sys
from dataclasses import dataclass
@nh2
nh2 / mmap-memory-usage.c
Created December 7, 2020 19:43
Demo of how mmap() affects VIRT, RES, SHR memory usage in Linux
// Demo of how mmap() affects VIRT, RES, SHR memory usage in Linux.
//
// A useful resource for more background:
// https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/
// Required for:
// * `O_TMPFILE`
// * `fallocate()`
#define _GNU_SOURCE
@nh2
nh2 / outlook-dkim.md
Created October 21, 2020 16:56
Outlook apparently cannot deterministically run DKIM

It seems Outlook is totally bugged.

I set up a mail server and sent 4 emails in a row, for the first one Microsoft said:

dkim=pass (signature was verified)

For the second one it said: