Skip to content

Instantly share code, notes, and snippets.

@manuelbl
manuelbl / README.md
Created August 3, 2019 09:12
ESP32 as Bluetooth Keyboard

ESP32 as Bluetooth Keyboard

With its built-in Bluetooth capabilities, the ESP32 can act as a Bluetooth keyboard. The below code is a minimal example of how to achieve it. It will generate the key strokes for a message whenever a button attached to the ESP32 is pressed.

For the example setup, a momentary button should be connected to pin 2 and to ground. Pin 2 will be configured as an input with pull-up.

In order to receive the message, add the ESP32 as a Bluetooth keyboard of your computer or mobile phone:

  1. Go to your computers/phones settings
  2. Ensure Bluetooth is turned on
@mbrengel
mbrengel / archvbox.bat
Last active September 20, 2022 12:21
Unattended Arch Linux VM installation script for VirtualBox on Windows hosts + a toolchain for building and modifying the script.
@echo off
if NOT EXIST %HOMEDRIVE%%HOMEPATH%\vmshare (
echo shared vm folder %HOMEDRIVE%%HOMEPATH%\vmshare does not exist
exit /B
)
if NOT EXIST %HOMEDRIVE%%HOMEPATH%\arch.iso (
echo arch linux iso %HOMEDRIVE%%HOMEPATH%\arch.iso does not exist
exit /B
)
where vboxmanage > nul 2>&1
@rcarmo
rcarmo / bt-agent.service
Last active December 3, 2025 03:58
Set up PAN networking on Raspbian Stretch (use sudo to create these files and run all commands)
# in /etc/systemd/system
[Unit]
Description=Bluetooth Agent
[Service]
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
Type=simple
[Install]
WantedBy=multi-user.target
@leftshift
leftshift / restart-dovecot.hook
Created July 17, 2018 09:00
pacman: restart dovecot after it has been upgraded
[Trigger]
Operation = Upgrade
Type = Package
Target = dovecot
[Action]
Description = Restart dovecot after upgrade so starting services doesn't fail due to version mismatch
When = PostTransaction
Exec = /usr/bin/systemctl restart dovecot
@jdarpinian
jdarpinian / executable.c
Last active September 28, 2025 09:40
Add one line to your C/C++ source to make it executable.
///$(which true);FLAGS="-g -Wall -Wextra --std=c17 -O1 -fsanitize=address,undefined";THIS_FILE="$(cd "$(dirname "$0")"; pwd -P)/$(basename "$0")";OUT_FILE="/tmp/build-cache/$THIS_FILE";mkdir -p "$(dirname "$OUT_FILE")";test "$THIS_FILE" -ot "$OUT_FILE" || $(which clang || which gcc) $FLAGS "$THIS_FILE" -o "$OUT_FILE" || exit $?;exec bash -c "exec -a \"$0\" \"$OUT_FILE\" $([ $# -eq 0 ] || printf ' "%s"' "$@")"
#include <stdio.h>
int main() {
printf("Hello world!\n");
return 0;
}
package com.acme.condition;
import org.springframework.boot.autoconfigure.condition.ConditionMessage;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.type.AnnotatedTypeMetadata;
@varunagrawal
varunagrawal / on-exit-sync.py
Last active September 4, 2021 16:59
Script to sync Taskwarrior after each operation
#!/usr/bin/env python3
# This hooks script syncs task warrior to the configured task server.
# The on-exit event is triggered once, after all processing is complete.
# Make sure hooks are enabled and this hook script is executable.
# Run `task diag` for diagnostics on the hook.
import sys
import json
#
# Read from journalctl outputting json and sort the data by program frequency
#
# https://blog.kylemanna.com/linux/systemd-journalctl-sort-by-frequency
#
# Author: Kyle Manna
#
# invocation: journalctl -o json --since "1 month ago" | jq -s -f systemd-journalctl-sort-by-program-frequency.jq
#
@audreybongalon
audreybongalon / atan2-function-for-scratch.js
Last active February 14, 2026 03:49
reference for scratch games. scratch doesn't have an atan2 function, which is very useful for calculating directions (in terms of angles). so i made a reference file here. keep in mind that scratch automatically puts things in degrees, so there's no need to have a conversion function in scratch. also, sometimes this will return values 360 degree…
function toDegrees (angle) {
return angle * (180 / Math.PI);
}
function myAtan2(y, x) {
if (x > 0) {
return toDegrees(Math.atan(y/x));
}
else if (x < 0) {
return (180 + toDegrees(Math.atan(y/x)));
git config --global alias.lola "log --graph --decorate --pretty=oneline --abbrev-commit --all"