Skip to content

Instantly share code, notes, and snippets.

@mcejp
mcejp / serve.sh
Created May 22, 2023 20:51
Jekyll in Podman
#!/bin/sh
set -ex
podman start -ia jekyll || podman run -it \
--name jekyll \
--volume=$PWD:/srv/jekyll \
--env JEKYLL_ENV=production \
--env JEKYLL_ROOTLESS=1 \
-p 4000:4000 \
docker.io/jekyll/jekyll:4.1.0 \
/* Copyright (c) 2005-2007, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
@mcejp
mcejp / saveregister.S
Created July 30, 2023 10:28
Saving registers on Aarch64 in a core-dump-ready format
.macro saveregister
// Registers are saved in the following order (see also: user_regs_struct):
// x0 x1 ... x28 x29 x30 SP PC PSTATE
// at: -110 -108 ... -30 -28 -20 -18 -10 -08 (hex) with respect to SP-at-entry
// Start by saving these:
// [sp, #-0x40] <== x26; x27
// [sp, #-0x30] <== x28; x29
stp x26, x27, [sp, #-0x40]
stp x28, x29, [sp, #-0x30]
@mcejp
mcejp / bsod.php
Created September 14, 2023 12:51
BSOD-style error page in PHP
<!doctype html>
<html>
<head>
<style>
html {
font-size: 1.2em;
}
body {
@mcejp
mcejp / CMakeLists.txt
Created November 4, 2023 09:54
Custom Python step in CMake build
macro(cmake_path_ABSOLUTE_PATH VARIABLE_NAME)
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20.0")
cmake_path(ABSOLUTE_PATH ${VARIABLE_NAME})
else()
# polyfill for CMake < 3.20
get_filename_component(${VARIABLE_NAME} ${${VARIABLE_NAME}} ABSOLUTE)
endif()
endmacro()
function(my_build_step SOURCE OUTPUT)
@mcejp
mcejp / ring_buffer.c
Last active May 7, 2025 13:55
Ring buffer with Array + two indices mod 2N
// Background: https://www.snellman.net/blog/archive/2016-12-13-ring-buffers/
// Variant with indices modulo 2*capacity as suggested by dizzy57 and Aristotle Pagaltzis
size_t read;
size_t write;
mask(val) { return val % array.capacity; }
inc(index) { return wrap(index + 1); }
push(val) { assert(!full()); array[mask(write)] = val; write = inc(write); }
shift() { assert(!empty()); ret = array[mask(read)]; read = inc(read); return ret; }
import os
from pathlib import Path
from openai import OpenAI
client = OpenAI(
base_url="https://api.scaleway.ai/v1",
api_key=os.environ["SCW_SECRET_KEY"]
)