Skip to content

Instantly share code, notes, and snippets.

View nkbt's full-sized avatar
💚

Nikita Butenko nkbt

💚
View GitHub Profile
@nkbt
nkbt / empty_bucket.sh
Created February 3, 2020 00:03 — forked from wknapik/empty_bucket.sh
Empty an s3 bucket of all object versions and delete markers in batches of 1000
#!/usr/bin/env bash
set -eEo pipefail
shopt -s inherit_errexit >/dev/null 2>&1 || true
if [[ ! "$#" -eq 2 || "$1" != --bucket ]]; then
echo -e "USAGE: $(basename "$0") --bucket <bucket>"
exit 2
fi
@nkbt
nkbt / instagram.js
Created December 4, 2019 02:53
Instagram No-API Public posts access
content = await(await fetch('https://www.instagram.com/nkbtnk/')).text()
doc = new DOMParser().parseFromString(content, 'text/html')
dataEl = Array.from(doc.querySelectorAll('script:not([src])')).find(s => s.innerText.includes('window._sharedData = '))
match = dataEl.innerText.match(/\{.+}/)
data = JSON.parse(match[0])
last12posts = data.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges
GIT_COMMITTER_DATE="Wed Nov 20 07:15:57 WITA 2019" git commit --amend --no-edit --date "Wed Nov 20 07:15:57 WITA 2019"
@nkbt
nkbt / example.jsx
Created May 2, 2019 04:33 — forked from bvaughn/LICENSE.md
Advanced example for manually managing subscriptions in an async-safe way using hooks
import React, { useMemo } from "react";
import useSubscription from "./useSubscription";
// In this example, "source" is an event dispatcher (e.g. an HTMLInputElement)
// but it could be anything that emits an event and has a readable current value.
function Example({ source }) {
// In order to avoid removing and re-adding subscriptions each time this hook is called,
// the parameters passed to this hook should be memoized.
const subscription = useMemo(
() => ({
@nkbt
nkbt / osx-home-end.sh
Created February 6, 2018 01:34
Proper home/end bindings for OSX
mkdir -p $HOME/Library/KeyBindings
echo '{
/* Remap Home / End keys to be correct */
"\UF729" = "moveToBeginningOfLine:"; /* Home */
"\UF72B" = "moveToEndOfLine:"; /* End */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
"^\UF729" = "moveToBeginningOfDocument:"; /* Ctrl + Home */
"^\UF72B" = "moveToEndOfDocument:"; /* Ctrl + End */
"$^\UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Ctrl + Home */
@nkbt
nkbt / glob.js
Created February 2, 2018 02:26
My own slow and unoptimised glob
const process = require('process');
const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const realpath = util.promisify(fs.realpath);
const stat = util.promisify(fs.stat);
const ls = async (cwd, paths = []) => {
for (let p of (await readdir(cwd))) {
const rp = await realpath(`${cwd}/${p}`);
@nkbt
nkbt / perf.js
Created February 2, 2018 02:18
Namespaced perf measurer
const perfCache = {start: {}, end: {}};
const perf = key => {
if (key in perfCache.end) {
return perfCache.end[key];
}
if (key in perfCache.start) {
const [s, ns] = process.hrtime(perfCache.start[key]);
Object.assign(perfCache.end, {[key]: (s + ns / 1e9)});
return perfCache.end[key];
}
@nkbt
nkbt / node-require-url.js
Last active January 3, 2023 22:48
Async require library from URL for Node
const https = require('https');
const vm = require('vm');
const requireCache = {};
const requireUrl = url => new Promise((resolve, reject) => url in requireCache ?
resolve(requireCache[url]) :
https.get(url, res => {
const result = [];
res.on('data', chunk => result.push(chunk.toString('utf-8')));
#leftCol {
position: fixed;
}
#rightCol{
display:none;
}
#pagelet_sidebar {
display:none;
[remote "pr"]
url = [email protected]:nkbt/react-collapse.git
fetch = +refs/pull/*/head:refs/remotes/pr/*