Skip to content

Instantly share code, notes, and snippets.

View charles-l's full-sized avatar
👾
making games

Charles charles-l

👾
making games
View GitHub Profile
@charles-l
charles-l / guix
Created April 9, 2020 20:45
openrc init script for guix daemon
#!/sbin/openrc-run
description="daemon required by the guix package manager"
command=/root/.config/guix/current/bin/guix-daemon
command_args="--build-users-group=guixbuild"
command_background="yes"
pidfile="/run/${RC_SVCNAME}.pid"
@charles-l
charles-l / hexahue.py
Created April 26, 2020 00:47
hexahue decoder
# decodes hexahue images
import cv2
import numpy as np
codewords = {'mrgybc': 'a',
'rmgybc': 'b',
'rgmybc': 'c',
'rgymbc': 'd',
'rgybmc': 'e',
'rgybcm': 'f',
@charles-l
charles-l / hexdump.zig
Last active May 7, 2020 23:43
Small hexdump utility written in zig to test the language out a bit.
const std = @import("std");
pub const BlockIterator = struct {
buffer: []const u8,
block_size: usize,
index: usize,
pub fn next(self: *BlockIterator) ?[]const u8 {
if (self.index == self.buffer.len) {
return null;
@charles-l
charles-l / frame_tracer.py
Created May 23, 2020 00:04
An eBPF frame tracer tool written in Python
'''
Expects probes to be defined in the target process, e.g.:
import stapsdt
provider = stapsdt.Provider('game')
frame_begin_probe = provider.add_probe('frame_begin')
frame_end_probe = provider.add_probe('frame_end')
provider.load()
...
@charles-l
charles-l / has_many.py
Created June 7, 2020 18:11
has_many relationship from Rails for Pandas
import pandas as pd
@pd.api.extensions.register_dataframe_accessor("rel")
class RelationshipAccessor:
'''
Add a relationship accessor to dataframe objects allowing Rails-like
access to related dataframes. e.g.
>>> authors = pd.DataFrame({'name': ['C. S. Lewis', 'Lewis Carroll']})
>>> books = pd.DataFrame({'title': ["Alice's Adventures in Wonderland",
@charles-l
charles-l / noise.py
Created August 24, 2020 14:04
Render a noise pattern onto an image in Blender
import bpy
import numpy as np
from mathutils import noise
img = bpy.data.images['some-img']
w, h = img.size
# 4 channel image (RGBA), f64
a = np.array(img.pixels).reshape((h, w, 4))
@charles-l
charles-l / save_page.py
Last active March 2, 2024 19:57
A python script to save the Firefox Reader view of a page with images. Kind of a personal archive.org tool but using zip and HTML files rather than WARC.
#!/usr/bin/env python3
from bs4 import BeautifulSoup
from readability import Document
import click
from click import echo
import requests
import slugify
import os
@charles-l
charles-l / stack_frame.py
Last active February 22, 2021 17:52
GDB command to visualize the raw memory for the current stack frame
class RawFrame(gdb.Command):
"""Dump the raw memory for the stack while visualizing a stack frame"""
def __init__ (self):
super().__init__('raw-frame', gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
sp = gdb.selected_frame().read_register('rsp').cast(gdb.lookup_type('unsigned char').pointer())
bp = gdb.selected_frame().read_register('rbp').cast(gdb.lookup_type('unsigned char').pointer())
def hex_word(addr, length=8):
@charles-l
charles-l / tailscaled
Last active September 10, 2024 14:41
tailscaled sysvinit script for devuan
#!/bin/sh
### BEGIN INIT INFO
# Provides: tailscale
# Required-Start: $local_fs $all $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Tailscale daemon
# Description: Runs the tailscale daemon.
### END INIT INFO
@charles-l
charles-l / reactive.py
Created July 7, 2021 19:52
Reactive programming in python
from functools import wraps
from collections import defaultdict
from dataclasses import dataclass, field
from typing import Dict, List
import ast
import inspect
class StateFinder(ast.NodeVisitor):
def __init__(self, state_name):
self.state_name = state_name