Skip to content

Instantly share code, notes, and snippets.

View berstend's full-sized avatar
🐋
⊂(◉‿◉)つ b̡͉̙̞͙͔͔̺̉͌̽̽͂̿͂͝erstend͔͝

berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘ berstend

🐋
⊂(◉‿◉)つ b̡͉̙̞͙͔͔̺̉͌̽̽͂̿͂͝erstend͔͝
  • Berlin, Germany
View GitHub Profile
@berstend
berstend / update_requirements.py
Last active July 9, 2025 11:57
Create new requirements.txt file with pinned versions based on the latest version at a specific date
import requests
from datetime import datetime, timezone # <-- Add timezone here
from packaging.version import parse as parse_version
from packaging.specifiers import SpecifierSet
import sys
import time
def get_latest_version_before_date(package_name, target_date_str, target_python_version_str=None):
"""
Fetches the latest version of a package available on PyPI before a target date,
@berstend
berstend / es6_delay.md
Last active July 16, 2023 14:26
The best ES6 Promise.delay functions

Hello future self, here's the TypeScript version for your copy/pasting pleasure:

const delay = (ms: number) => new Promise(_ => setTimeout(_, ms))

and your favorite JS version:

const delay = ms =&gt; new Promise(_ =&gt; setTimeout(_, ms))
@berstend
berstend / hcaptcha.ts
Created April 15, 2021 13:56 — forked from prescience-data/hcaptcha.ts
HCaptcha Solver
import { IncomingMessage, RequestListener, ServerResponse } from "http"
import { createServer, Server } from "https"
import puppeteer, {
Browser,
BrowserLaunchArgumentOptions,
Protocol
} from "puppeteer-core"
import { Page } from "./types"
import Cookie = Protocol.Network.Cookie
@berstend
berstend / chromiumVersion.js
Last active March 27, 2021 20:21
Parse chrome/chromium version from user agent string and semver compare
const chromiumVersion = (() => {
const compare = (newVer = "", oldVer = "") => {
const oldParts = oldVer.split(".");
const newParts = newVer.split(".");
for (let i = 0; i < newParts.length; i++) {
const a = ~~newParts[i]; // parse int
const b = ~~oldParts[i]; // parse int
if (a > b) return 1;
if (a < b) return -1;
}
@berstend
berstend / instagram-unfollow-users.md
Last active July 5, 2025 11:10
Mass unfollow users on Instagram (no app needed)
  • Go to your profile on instagram.com (sign in if not already)
  • Click on XXX following for the popup with the users you're following to appear
  • Open Chrome Devtools and Paste the following into the Console and hit return:
(async function(){
  const UNFOLLOW_LIMIT = 800
  const delay = (ms) => new Promise(_ => setTimeout(_, ms))
  const findButton = (txt) => [...document.querySelectorAll("button").entries()].map(([pos, btn]) => btn).filter(btn => btn.innerHTML === txt)[0]
@berstend
berstend / graphiql_dark_0.11.11.css
Created November 4, 2019 14:47
Dark mode for GraphiQL extracted from Dark Reader
[data-darkreader-inline-bgcolor] {
background-color: var(--darkreader-inline-bgcolor) !important;
}
[data-darkreader-inline-bgimage] {
background-image: var(--darkreader-inline-bgimage) !important;
}
[data-darkreader-inline-border] {
border-color: var(--darkreader-inline-border) !important;
}
[data-darkreader-inline-border-bottom] {
@berstend
berstend / momorepofy.sh
Created March 5, 2019 12:19
Make a monorepo with existing repos
#!/usr/bin/env bash
# Before:
# (Assuming you standard branch is development in the mono repo)
# git checkout -b add-services
githubOrg=FOOBAR
repoList="api backend-service frontend"
repoBranch="development"
serviceDir=services # local directory to pull the other repos in
@berstend
berstend / foobar.yaml
Created January 22, 2019 16:56
Restart (rolling updates) pods recurringly on GKE
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: restart-pods
rules:
- apiGroups:
- extensions
- apps
@berstend
berstend / bayesian_ranking.js
Created December 16, 2018 19:18
Given star ratings and votes, calculate bayesian estimate ratings to sort by popularity (taking number of votes into consideration)
/*
bayesian rating = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C
where:
R = stars for the entry
v = number of votes for the entry
m = minimum votes required to be listed (eg. 10)
C = the mean stars across the whole list (eg. 4.1)
This rating only includes entries that have at least 10 votes.
The bayesian estimate is a statistical technique used to reduce the noise
@berstend
berstend / README.md
Last active August 15, 2018 10:11
Prisma GraphQL Introspection Automation (Extract Postgres schema to datamodel.graphql and deploy to prisma server)

Prisma is amazing but unfortunately in it's early days and I got tired of having to manually enter my database info each time I ran prisma introspect.

With a little help of autoexpect this task is now automated.

Hint: On macOS you might need to install expect from brew, as the macOS version doesn't include autoexpect.

Usage

Modify script.exp to use your Postgres credentials.