Skip to content

Instantly share code, notes, and snippets.

View konsumer's full-sized avatar

David Konsumer konsumer

View GitHub Profile
konsumer / mime.c
Created September 24, 2023 11:37
Rudimentary mimetype detection, from first few bytes, in C.
#include "stdio.h"
// Get more from
const char* detectMime(unsigned char* bytes) {
if (bytes[0] == 0xFF && bytes[1] == 0xD8 && bytes[2] == 0xFF) {
return "image/jpeg";
if (bytes[0] == 0x89 && bytes[1] == 0x50 && bytes[2] == 0x4E) {
return "image/png";
import ''
import setup from ''
class RaylibPythonComponent extends HTMLElement {
constructor () {
this.shadow = this.attachShadow({ mode: 'open' })
this.canvas = document.createElement('canvas') = 'none'
window.addEventListener('resize', this.onResize.bind(this))
konsumer /
Last active September 4, 2023 07:14
Quick wasm demo with raylib
cd raylib-4.5.0_webassembly/
emcc -Os -I./include -s USE_GLFW=3 -s ASYNCIFY -DPLATFORM_WEB -o index.html core_basic_window.c lib/libraylib.a
npx -y live-server
konsumer / example.js
Last active March 17, 2023 23:58
This will give you a nice clean list of wasm imports/exports which is useful for making minimal wasm-loaders.
import getWasmInterface from './get_wasm_interface.js'
// usage
const bytes = await fetch('mine.wasm').then(r => r.arrayBuffer())
const m = await WebAssembly.compile(bytes)
// imports is minimal stub (empty functions) and exports is a list of things it exports
const { imports } = await getWasmInterface(m)
// now I can inject my own functions
konsumer / Makefile
Created January 27, 2023 23:45
Self-help for a Makefile in a python project
.PHONY: help clean
help: ## Show this help
@python tools/ "$(MAKEFILE_LIST)"
clean: ## Remove all built files
@rm -f FILES
konsumer /
Last active October 10, 2022 04:54
Install Kali on GPI2
konsumer /
Created June 3, 2022 01:01
make a debian-based os image and chroot for arm (run in arm64 qemu)
#!/bin/bash -e
apt install -y build-essential debootstrap unzip git
# create image
qemu-img create -f qcow2 -o preallocation=metadata rknullos.qcow2 2G
modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 rknullos.qcow2
# paritition

Building raylib app in docker (on another computer) for ArkOS RG351V

I am using a mac M1 (arm64), so I didn't need binfmt-support/qemu-user-static installed.

docker run --platform="linux/arm64/v8" -it --rm -v $(pwd):/workdir -w /workdir ubuntu:eoan bash

cat << EOF > /etc/apt/sources.list
deb eoan main universe
deb eoan-updates main universe
konsumer / btoa.js
Last active January 29, 2022 03:01
Node implementation for btoa/atob to do base64 like in the browser/cloudflare-worker.
if (typeof atob === 'undefined') {
var atob = a => new Buffer(a).toString('base64')
if (typeof btoa === 'undefined') {
var btoa = a => Buffer.from(a, 'base64').toString('utf8')
import serial
port = serial.Serial('/dev/ttyTHS1', baudrate=115200, timeout=1)
# Turn on the GPS
# Ask for the navigation info parsed from NMEA sentences