Skip to content

Instantly share code, notes, and snippets.

View konsumer's full-sized avatar

David Konsumer konsumer

View GitHub Profile
@konsumer
konsumer / mime.c
Created September 24, 2023 11:37
Rudimentary mimetype detection, from first few bytes, in C.
#include "stdio.h"
// Get more from https://en.wikipedia.org/wiki/List_of_file_signatures
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 'https://cdn.jsdelivr.net/pyodide/v0.23.4/full/pyodide.js'
import setup from 'https://konsumer.js.org/raylib-python-web/python-raylib-web.js'
class RaylibPythonComponent extends HTMLElement {
constructor () {
super()
this.shadow = this.attachShadow({ mode: 'open' })
this.canvas = document.createElement('canvas')
this.style.display = 'none'
window.addEventListener('resize', this.onResize.bind(this))
@konsumer
konsumer / demo.sh
Last active September 4, 2023 07:14
Quick wasm demo with raylib
#!/bin/bash
wget https://github.com/raysan5/raylib/releases/download/4.5.0/raylib-4.5.0_webassembly.zip
unzip raylib-4.5.0_webassembly.zip
cd raylib-4.5.0_webassembly/
wget https://raw.githubusercontent.com/raysan5/raylib/master/examples/core/core_basic_window.c
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
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
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/help.py "$(MAKEFILE_LIST)"
clean: ## Remove all built files
@rm -f FILES
@konsumer
konsumer / kali_gpi2.md
Last active October 10, 2022 04:54
Install Kali on GPI2
@konsumer
konsumer / setup.sh
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 http://old-releases.ubuntu.com/ubuntu eoan main universe
deb http://old-releases.ubuntu.com/ubuntu eoan-updates main universe
@konsumer
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
port.write(b'AT+CGNSPWR=1')
# Ask for the navigation info parsed from NMEA sentences
port.write(b'AT+CGNSINF')