Skip to content

Instantly share code, notes, and snippets.

@max-lt
max-lt / cricular-shift.js
Created May 14, 2017 15:42
Circular shift on a javascript array
// performs a circular shift on an array (i < 0 ? right : left)
Object.defineProperty(Array.prototype, 'rotate', {
enumerable: false,
value: function (i) {
if (i == 0) return this;
const s = (this.splice).apply(this, i < 0 ? [i] : [0, i]);
(i < 0 ? this.unshift : this.push).apply(this, s);
return this;
}
});
@max-lt
max-lt / Deferred.js
Created May 14, 2017 21:26
Deferred promise (es6)
function Deferred() {
this.promise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
})
}
@max-lt
max-lt / promisify.js
Created May 22, 2017 18:58
promisify polyfill
// usage: promisify(instance.func.bind(instance))
function promisify(fun) {
return function (...args) {
return new Promise((resolve, reject) => {
fun.apply(fun, [].concat(args, (err, res) => (err) ? reject(err) : resolve(res)))
})
}
}
@max-lt
max-lt / typed-errors.js
Created May 28, 2017 13:22
Error factory in ES6
const assert = require('assert');
function makeTypedError(args) {
assert(args, 'TypedError: must specify options');
assert(args.type, 'TypedError: must specify options.type');
assert(args.message, 'TypedError: must specify options.message');
assert(args.statusCode, 'TypedError: must specify options.statusCode');
return (class extends Error {
constructor(message) {
@max-lt
max-lt / tls-info.js
Created June 15, 2017 15:15
Node tls info
const http = require('http');
const tls = require('tls');
const url = require('url');
const getSslDetails = (host) => new Promise((resolve, reject) => {
const sock = tls.connect({rejectUnauthorized: false, port: 443, host}, () => {
const certs = sock.getPeerCertificate();
delete certs.raw;
resolve({
authorized: sock.authorized,
@max-lt
max-lt / chain.js
Created July 21, 2017 11:48
Promise chain
/**
* @description exec "fun" with each "arr" element, one after the other
* @template T, S
* @param {Array.<T>} arr
* @param {function(T): S} fun
* @returns Promise.<S>
*/
const promiseChain = (arr, fun) => arr.reduce((p, e) => p.then(() => fun(e)), Promise.resolve());
@max-lt
max-lt / index.js
Created November 10, 2017 21:04
minimal chat
const net = require('net');
const isServer = process.argv[2] == 'server';
const port = process.argv[3]; // server port
const display = (data) => console.log('> ' + data.toString().trim());
let send = null;
if (isServer) {
@max-lt
max-lt / package-version.sh
Created December 17, 2017 13:57
Get package.json version shell script
#!/bin/sh
VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[", ]//g')
echo "Version is >${VERSION}<"
@max-lt
max-lt / bash.bashrc
Created April 7, 2018 14:07
Bash completion for aliases
# autocompletion for d and dokcer (docker)
source /usr/share/bash-completion/completions/docker
complete -F _docker d dokcer
@max-lt
max-lt / blockchain.js
Last active May 16, 2018 09:22
Simple blockchain
function Blockchain() {
const blocks = this.blocks = []
const getBlockId = (i) => blocks[i] && blocks[i].id || '00000000'
function hash(str) {
const hash = Array(8).fill(0);
for (let i = 0; i < str.length; i++)
hash[i % 8] ^= str.charCodeAt(i)
return hash.map((e) => e % 10).join('')