Skip to content

Instantly share code, notes, and snippets.

View btoo's full-sized avatar
🅱️
2️⃣

btoo

🅱️
2️⃣
View GitHub Profile
// fn to generate the selector for BEM-compliant elements.
@function bem($block, $element:null, $modifiers:null){
$selector: '.#{$block}';
@if($element != null){
$selector: $selector + '--#{$element}';
}
@if($modifiers != null){
@btoo
btoo / isPalindrome.js
Last active December 9, 2017 00:46
isPalindrome
const checkedAllLetters = (a, b) => Math.abs(a - b) <= 2
, isAlphaNumeric = char => /^[a-z0-9]+$/i.test(char)
const isPalindrome = s => {
const leftEqualsRight = (a, b) => s[a].toLowerCase() === s[b].toLowerCase()
, pastMidpoint = n => n >= ((s.length -1)/2)
let left = 0
, right = s.length - 1
@btoo
btoo / python-multithreading-demo.py
Created December 17, 2017 03:50
python-multithreading-demo
import threading
from queue import Queue
import time
print_lock = threading.Lock() # special lock we're using to make sure each worker won't pring until it's done with it job
def exampleJob(worker):
time.sleep(0.5) # let's say a job takes .5s to finish
with print_lock: # with the lock, print some info. when that's done, release the lock so another worker can print with it
@btoo
btoo / async-minimum-wait.d.ts
Last active July 4, 2024 05:12
Implementation of a minimum wait time required for Promise resolution using async/await
type ArrayElement<ArrayType> = ArrayType extends (infer ElementType)[] ? ElementType : never;
type ResolveType<T> = T extends Promise<infer R> ? R : T;
type Wait = <T>(
promises:
T extends number ? T :
T extends ArrayElement<T>[] ? (Promise<ArrayElement<T>> | ArrayElement<T>)[] :
T | Promise<T>,
minimumWaitTime?: T extends number ? never : number
) => Promise<
@btoo
btoo / extensions
Last active March 30, 2020 20:18
vscode configs
auto close tag
auto rename tag
better comments
bracket pair colorizer
night owl
vetur
prettier
code runner
Space Block Jumper
https://marketplace.visualstudio.com/items?itemName=kamikillerto.vscode-colorize
@btoo
btoo / noverlap.ts
Last active December 20, 2018 20:27
noverlap typed
interface NoverlapConfig {
hash?: (...args:any[]) => any
comparator?: (hash:any, existingKey:any) => boolean
wait?: number
start?: (...args:any[]) => any
queue?: (...args:any[]) => any
beforeFinish?: (...args:any[]) => any
success?: (result:any, ...args:any[]) => any
fail?: (result:Error, ...args:any[]) => any
finish?: (result:any, ...args:any[]) => any
@btoo
btoo / array-element-type.ts
Last active August 14, 2019 19:32
infer the type of an element in an array from the array's type
type ArrayElement<ArrayType> =
ArrayType extends (infer ElementType)[] ? ElementType :
ArrayType extends ReadonlyArray<infer ElementType> ? ElementType :
never;
type Flatten<T> = T extends Array<infer U> ? U : T;
@btoo
btoo / promise.vue
Created December 20, 2018 20:12
vue-promise
<template>
<div class="loader" :class="{ 'loader--done': succeeded || errored }">
<template v-if="succeeded">
<slot name="success" :response="response">
<template v-if="showSuccessMessage">
<slot name="successIcon" :response="response"><i
class="fa"
:class="{
[successIconClass]: successIconClass,
[`fa-${successIcon}`]: successIcon,
@btoo
btoo / vuex-module-cloner.js
Created January 18, 2019 01:46
if for some reason (like testing) you need to clone an entire vuex module
export const deepCloneVuexModule module => ({
...module,
state: JSON.parse(JSON.stringify(module.state)),
modules: Object.entries(module.modules || {})
.map(([moduleName, module]) => [moduleName, deepCloneVuexModule(module)])
.reduce((acc, [moduleName, module]) => ({ ...acc, [moduleName]: module }), {}),
});
@btoo
btoo / url.js
Created March 15, 2019 04:08
add query parameters to a url
module.exports = (endpoint, query = {}) => {
const queryEntries = Object.entries(query || {}).filter(([key, value]) => value || typeof value === 'boolean');
return queryEntries.length
? `${endpoint}?${queryEntries
.map(pair => pair.map(encodeURIComponent).join('='))
.join('&')}`
: endpoint;
};