Skip to content

Instantly share code, notes, and snippets.

View patrickfav's full-sized avatar
🐿️
Nam nam nam

Patrick Favre patrickfav

🐿️
Nam nam nam
View GitHub Profile
@patrickfav
patrickfav / convert_png.ps1
Created September 21, 2024 22:24
A Powershell Script that converts all png files recusivly in given folder (and subfolders) when the resulting jpeg is smaller than the png and the png does not contain transparency. Requires Image Magick to be available in PATH.
$sourceFolder = "C:\path\to\pngs"
$sumSavedKb = 0
# Get all PNG files recursively
Get-ChildItem -Path $sourceFolder -Recurse -Filter *.png | ForEach-Object {
$file = $_.FullName
$jpgFile = [System.IO.Path]::ChangeExtension($file, "jpg")
# Get the old file size (in kB)
$oldfilesize = [Math]::Round((Get-Item -LiteralPath $file).Length / 1KB, 2)
@patrickfav
patrickfav / plugin-so-turndown.ts
Last active March 30, 2023 16:58
A Turndown Plugin parsing figures with captions; creates the format '![imgText](https://example.com/img.png "caption")' Turndown is a JS Markdown Parser see https://www.npmjs.com/package/turndown
export const figureCaption = function (service: TurndownService): void {
service.addRule('stackOverflowHighlightedCodeBlock', {
filter: function (node: HTMLElement, options: Options): boolean | null {
const firstChild = node.firstChild
const lastChild = node.lastChild
return (
node.nodeName === 'FIGURE' &&
firstChild && firstChild.nodeName === 'IMG' &&
lastChild && lastChild.nodeName === 'FIGCAPTION'
)
@patrickfav
patrickfav / plugin-so-turndown.ts
Last active May 27, 2023 16:07
A Turndown Plugin parsing Stack Overflow HTML answers; converts it to GitHub-Flavored-Markdown (GFM) with correct language. Turndown is a JS Markdown Parser
import TurndownService from "turndown";
export const stackOverflowHighlightedCodeBlock = function (service: TurndownService): void {
const highlightRegExp = /lang-([a-z0-9]+)/
service.addRule('stackOverflowHighlightedCodeBlock', {
filter: function (node: HTMLElement, options: Options): boolean | null {
const firstChild = node.firstChild
return (
node.nodeName === 'PRE' &&
@patrickfav
patrickfav / head.html
Last active March 18, 2023 15:29
A hugo shortcode that obfuscates email addresses; makes it more difficult for bots to crawl it from your website. Add the html file to your "layouts/shortcodes/" folder then you can use it in your content.
{{/* If you are using a CSP header this is how you can whitelist the inline-script */}}
{{/* its not optimal since it only changes every day and only if you regenerate the site */}}
{{ $currentDayNonce := now | time.Format "2006-01-02" | md5 }}
<meta http-equiv="Content-Security-Policy"
content="default-src 'self';
script-src 'self' 'nonce-{{ $currentDayNonce }}';
img-src 'self';"
/>
@patrickfav
patrickfav / gsap-404-typed-message-using-splittext.markdown
Created October 23, 2020 20:44
GSAP 404 typed message using SplitText
@patrickfav
patrickfav / AesGcmTest.java
Last active February 27, 2024 11:32
Java Authenticated Encryption with AES and GCM.
package at.favre.lib.bytes.otherPackage;
import org.junit.Test;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@patrickfav
patrickfav / mac-rnd-sizes.md
Last active February 26, 2023 18:53
Research of ID-Mask SIV Engine MAC & Randomization Byte Lengths.

Proposed Lengths for ID Encryption Schema

32-bit Integer

Integer Value MAC Version Randomization Sum Base64/Base32
deterministic 4 byte 12 byte 1 byte - 17 byte (136 bit) 22/27
randomized 4 byte 12 byte 1 byte 10 byte 27 byte (216 bit) 36/43
@patrickfav
patrickfav / encoding_info.txt
Last active February 26, 2023 18:40
Overview of Many Popular Binary-to-Text Encodings and their properties.
## Binary
┌─────────────────┬──────────────────────────────────────────────────────────────────┐
│ Efficiency │ 12.5 % (1 bit/char), 1 bit segments │
│ 32/64/128 bit │ 1-32/1-64/1-128 chars │
│ Padding │ false │
│ Const. Out. Len.│ false │
│ Suited for │ number encoding, debugging │
│ Alphabet │ 01 │
│ Known Usages │ none │
@patrickfav
patrickfav / EncodingBenchmark.java
Last active April 27, 2019 16:23
Simple JMH Benchmark to test Hex vs Base64 Encoding Performance
import at.favre.lib.bytes.Bytes;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import java.util.concurrent.TimeUnit;
@SuppressWarnings("CheckStyle")
@State(Scope.Thread)
@Fork(1)
@Warmup(iterations = 2, time = 4)
@patrickfav
patrickfav / encoded_compressed_stats.txt
Last active February 26, 2023 18:41
Statistics for required space for encoded vs. compressed.
## Random Data
Original size: 1024 byte
Compressed size (raw): 1047 byte
Name enc diff % enc-comp diff
------------------------------------------------------------------
base85 1280 256 23% 1076 29 2%
base64 1366 342 31% 1073 26 2%
base36 1585 561 51% 1082 35 3%