Skip to content

Instantly share code, notes, and snippets.

@kafene
kafene / background.js
Created August 29, 2023 14:37
Tab deque modified (tabs.moveInSuccession)
/* jshint esversion:11 */
// Maps each window ID to an array of its tab IDs
const deques = {};
// New background tabs will be added after the current tab instead of at the end of the deque
let addBackgroundTabsAfterCurrent = false;
// Create deque for this windowId if it does not exist
// Omit hidden tabs, keep discarded tabs at the end.
@kafene
kafene / openssltest.php
Created July 11, 2021 21:20
openssl algorithm testing
<?php
set_error_handler(static function ($severity, $message, $file, $line) {
throw new \ErrorException($message, 0, $severity, $file, $line);
});
$str = 'Testing OpenSSL algorithms...';
$tag = random_bytes(16);
foreach (openssl_get_cipher_methods() as $algo) {
@kafene
kafene / refresh-css.js
Created March 7, 2020 22:24
Refresh / reload CSS bookmarklet
javascript:(function () {
const now = Date.now().toFixed(2);
/* Append timestamp to all linked stylesheet urls */
for (const link of document.querySelectorAll('link[rel~="stylesheet"][href]')) {
const url = new URL(link.href);
url.searchParams.set('_cssrefresh', now);
link.href = url.href;
}
@kafene
kafene / mailhog-install.sh
Created June 16, 2018 00:16
Install Mailhog
#!/usr/bin/env bash
set -euo pipefail
if [[ -f /usr/local/bin/mailhog ]]; then
echo 'It seems mailhog is already installed.' >&2
echo 'Remove </usr/local/bin/mailhog> to force reinstallation.' >&2
exit 1
fi
if [[ "$EUID" -ne 0 ]]; then

Keybase proof

I hereby claim:

  • I am kafene on github.
  • I am kafene (https://keybase.io/kafene) on keybase.
  • I have a public key ASB-7DLvRLALGUox5XxuLBTf9ZYVHPekMdL3Fp2fist-Wwo

To claim this, I am signing this object:

@kafene
kafene / gpg-wkd.md
Last active November 11, 2024 21:10
Setting up WKD for self-hosted automatic key discovery

I just got this working so I figured I'd share what I found, since there's hardly any information about this anywhere online except an RFC, the GPG mailing list and one tutorial from the GnuPG blog.

You can use automatic key discovery with WKD (Web key directory) to make it easy for users to import your key, in GPG since version 2.1.12. Since this feature is fairly new, it isn't yet available in the current LTS release of Ubuntu (16.04; xenial), however it is available in Debian stable (stretch).

I couldn't add a DNS CERT or DANE / OPENPGPKEY record through my email service (which also hosts my nameservers). I tried making the PKA record - a foo._pka.example.com TXT record but GPG doesn't seem to recognize it and fails; I'm still investigating why.

So the last option for self-hosted auto-discovery was WKD.

First thing I had to do was add an email address to my key. My primary UID is just my name so the key represents my identity rather

@kafene
kafene / pulseaudio-systemd-user.md
Created May 18, 2017 08:00
Pulseaudio via systemd --user

~/.config/systemd/user/pulseaudio.service:

[Unit]
Description=Pulseaudio Sound Service
Requires=pulseaudio.socket

[Service]
Type=notify
ExecStart=/usr/bin/pulseaudio --verbose --daemonize=no
@kafene
kafene / firefox-extension-get-selected-text.md
Created March 10, 2017 13:17
Getting the currently selected text in a Firefox extension

Post e10s, this seems to be the most consistent way (should work in both pre and post-e10s builds):

const tabs = require("sdk/tabs");

function getSelectedText() {
    return new Promise(function (resolve, reject) {
        tabs.activeTab.attach({
            contentScript: "self.postMessage(String(getSelection()));",
 onMessage: resolve,
@kafene
kafene / README.md
Last active February 24, 2017 22:48 — forked from EmanueleMinotto/README.md
PHP Microframework

Microframework

This is a PHP (5.3+) microframework based on anonymous functions.

Features

  • requested URLs matched using regular expressions
  • request methods (matches using regular expressions too)
  • differenced FIFO queues for each $priority
  • command line usage
  • backward compatibility
  • integrated Dependency Injection and settings system
  • named patterns
@kafene
kafene / promise-script-loader.md
Last active August 29, 2015 14:22
Using Promises to load scripts

I had a few of scripts I want to load in my userscript before executing it. After some head scratching and messing around with Promises it turns out it's quite easy. This way there's no need to require a larger module loader and other dependencies, which can be a pain to work with when writing userscripts.

(function load(scripts) {
    // Wait for DOMContentLoaded/window.onload
    if (document.readyState !== "interactive" && document.readyState !== "complete") {
        document.addEventListener("DOMContentLoaded", load.bind(null, scripts));
        return;
    }