Skip to content

Instantly share code, notes, and snippets.

Avatar

Nikita Butenko nkbt

View GitHub Profile
@nkbt
nkbt / .eslintrc.js
Last active Dec 31, 2020
Strict ESLint config for React, ES6 (based on Airbnb Code style)
View .eslintrc.js
{
"env": {
"browser": true,
"node": true,
"es6": true
},
"plugins": ["react"],
"ecmaFeatures": {
@nkbt
nkbt / empty_bucket.sh
Created Feb 3, 2020 — forked from wknapik/empty_bucket.sh
Empty an s3 bucket of all object versions and delete markers in batches of 1000
View empty_bucket.sh
#!/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 Dec 4, 2019
Instagram No-API Public posts access
View instagram.js
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
@nkbt
nkbt / loader.js
Last active Nov 19, 2019
Old fashioned loader
View loader.js
var loading = "\\|/—",
tick = 0,
loadingElement = document.createElement('div');
loadingElement.id = 'loading';
loadingElement.style.fontFamily = 'Consolas, "Liberation Mono", Courier, monospace';
document.body.innerHTML = '';
document.body.appendChild(loadingElement);
(function animate() {
tick = (tick + 1) % loading.length;
View git-rewrite-commit-date.sh
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 — forked from bvaughn/example.jsx
Advanced example for manually managing subscriptions in an async-safe way using hooks
View example.jsx
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(
() => ({
View .gitconfig
[push]
default = current
[user]
email = nik@butenko.me
name = Nik Butenko
[core]
autocrlf = input
excludesfile = /Users/nkbt/.gitignore
ignorecase = true
[alias]
@nkbt
nkbt / node-require-url.js
Last active Apr 23, 2018
Async require library from URL for Node
View node-require-url.js
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')));
View facebook.css
#leftCol {
position: fixed;
}
#rightCol{
display:none;
}
#pagelet_sidebar {
display:none;
@nkbt
nkbt / Filters.jsx
Last active Apr 8, 2018
ImmutableJS + Redux
View Filters.jsx
import React from 'react';
import {List} from 'immutable';
import {shouldComponentUpdate} from 'react-addons-pure-render-mixin';
import {connect} from 'react-redux';
import getFiltersData from './filtersData';
import {filtersDataReady} from './reducer';
const Filters = React.createClass({
propTypes: {
getFiltersData: React.PropTypes.func.isRequired,
You can’t perform that action at this time.