Skip to content

Instantly share code, notes, and snippets.

View jillesvangurp's full-sized avatar

Jilles van Gurp jillesvangurp

View GitHub Profile
@jillesvangurp
jillesvangurp / yt-opml-export.md
Last active February 27, 2026 06:39
Beat the Algorithm - Download Youtube Subscriptions as OPML

Export Your YouTube Subscriptions to OPML (and Use Any RSS Reader)

YouTube doesn't make it easy to take your subscriptions elsewhere. But every channel still has a public RSS feed.

This guide lets you:

  • Export all your subscriptions
  • Generate a valid OPML file
  • Import them into any RSS reader
@jillesvangurp
jillesvangurp / gist:c6923ac3c6f17fa36dd02300e7f95548
Created April 2, 2025 10:27
indexed db based object store for kotlin js - uses kotlinx serialization and co-routines
@file:Suppress("unused")
package indexeddb
import com.jillesvangurp.serializationext.DEFAULT_JSON
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.Channel
@jillesvangurp
jillesvangurp / build.gradle.kts
Last active August 25, 2020 03:01
Release 3.1.4 for geogeometry logs
plugins {
kotlin("multiplatform") version "1.3.72"
id("com.github.ben-manes.versions") version "0.28.0" // gradle dependencyUpdates -Drevision=release
id("org.jmailen.kotlinter") version "2.4.1"
`maven-publish`
}
repositories {
mavenCentral()
maven(url = "https://jitpack.io")
@jillesvangurp
jillesvangurp / berlin.geojson
Last active May 20, 2021 09:44
Polygon for berlin covered by geohashes
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Uncaught exception com.google.gwt.event.shared.UmbrellaException: Exception caught: undefined
at Unknown.Ub(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Tb(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.ac(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Iyd(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Myd(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Txd(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Dp(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Np(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
at Unknown.Ync(https://console.aws.amazon.com/cloudfront/home?region=eu-west-1 line 9 > scriptElement)
@jillesvangurp
jillesvangurp / docker-compose.yml
Created August 14, 2018 11:11
postgres with ssl cerficiates workaround for initdb and non empty data dir
# generate certificate and key with openssl and then mount them
version: '2.3'
postgres:
image: postgres:alpine
# specify location to the keys explicitly
command: -c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
@jillesvangurp
jillesvangurp / log.txt
Last active January 9, 2018 09:55
gradle debug log of jcenter upload. Build successfull but no jar file anywhere to be seen on jcenter.
jillesvangurp@ip-192-168-1-3 ~/git/inbot/inbot-eth-contracts[master]*
$ gradle -PjcenterApiKey=XXXXXXX -PpgpPassword=XXXXXXX bintrayUpload --debug
10:18:51.303 [INFO] [org.gradle.internal.nativeintegration.services.NativeServices] Initialized native services in: /Users/jillesvangurp/.gradle/native
10:18:51.462 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClient] Executing build c24372db-ffd5-4c01-84c8-895e18d07acc.1 in daemon client {pid=65514}
10:18:51.469 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding IP addresses for network interface en5
10:18:51.470 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a loopback interface? false
10:18:51.470 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Is this a multicast interface? true
10:18:51.472 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Adding remote address /fe80:0:0:0:aede:48ff:fe00:1122%en5
10:18:51.472 [DEBUG] [org.gradle.internal.remote.internal.inet.InetAddresses] Addin

Keybase proof

I hereby claim:

  • I am jillesvangurp on github.
  • I am jillesvangurp (https://keybase.io/jillesvangurp) on keybase.
  • I have a public key ASCWZzL3Ou4D9nzEIsWt9PT4KHd0thkFfmEDNzVPLsRCygo

To claim this, I am signing this object:

@jillesvangurp
jillesvangurp / registerPrivateIpForCloudFormationStack.sh
Created April 4, 2017 14:32
quick and dirty dns registration of cf stack with route53
#! /bin/bash
# call ./registerPrivateIpForCloudFormationStack.sh domainName stackName hostedZoneName
# requires aws-cli and jq installed, you may want to
function hostedzoneId() {
export hostedzone
hostedzone=$(aws route53 list-hosted-zones | jq --raw-output '.HostedZones[] | select(.Name == "$1").Id')
echo "$hostedzone"
}
@jillesvangurp
jillesvangurp / gist:fb8ee1fce482846ab12cb0c37a3a1b4f
Created October 20, 2016 16:06
jq expression to get a csv out of aws describe-instances
# we have Name tags and environment_name tags so it makes sense to add those as columns
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" | jq --raw-output '.Reservations[].Instances[] | [.Placement.AvailabilityZone, .PrivateDnsName, .InstanceType, (.Tags[] | select(.Key == "Name").Value),(.Tags[] | select(.Key == "environment_name").Value)] | @csv'