Skip to content

Instantly share code, notes, and snippets.

View fl0w's full-sized avatar
🎉
50% hackin', 50% slackin'

Martin Iwanowski fl0w

🎉
50% hackin', 50% slackin'
  • Sweden, Stockholm
View GitHub Profile
# lazyload nvm
# all props goes to http://broken-by.me/lazy-load-nvm/
# grabbed from reddit @ https://www.reddit.com/r/node/comments/4tg5jg/lazy_load_nvm_for_faster_shell_start/
lazynvm() {
unset -f nvm node npm npx
export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
if [ -f "$NVM_DIR/bash_completion" ]; then
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
@fl0w
fl0w / alacritty.yml
Created October 28, 2018 18:41
New Window shortcut for Alacritty on macOS
- { key: N, mods: Command, command: { program: "open", args: ["-nb", "io.alacritty"] } }
@fl0w
fl0w / bodyparser.js
Last active October 7, 2019 12:32
Simple for-await JSON body parser for Koa (node.js)
const { StringDecoder } = require('string_decoder')
const decoder = new StringDecoder() // default utf8
// Note that this is a naive example
// There's no safe-guarding and the process could be flooded easily b/c there's no limits.
// This is just to illustrate how to use for-await in Koa
async function bodyParser (ctx, next) {
let acc = ''
for await (const chunk of ctx.req) acc += decode.write(chunk)
ctx.state.body = JSON.parse(acc)
@fl0w
fl0w / modifiers.js
Last active October 29, 2018 10:38
Test modifiers
'use strict'
const Knex = require('knex')
const objection = require('objection')
const knex = new Knex({
client: 'pg',
connection: { database: 'fl0w', user: 'fl0w' }
})
objection.Model.knex(knex)
@fl0w
fl0w / koa-router-expand.js
Created August 24, 2018 07:59
Adds Router.expand which accepts and expands Router instances for Router.use.
'use strict'
const { flatten } = require('lodash')
const Router = require('koa-router')
/**
* Adds Router.expand which accepts and expands Router instances for Router.use.
* @returns this
*/
Router.prototype.expand = function (...args) {
@fl0w
fl0w / bookshelf.collection.cascade.destroy.js
Created May 24, 2018 03:53
naive collection cascade destroy
async destroy (options = {}) {
const destroyed = this.clone().reset()
destroyed._events = this._events // Copy referens to events
if (!this.length) return destroyed
await destroyed.triggerThen('destroying', this, options)
for (const model of this) {
await model.destroy(options)
destroyed.add(model)
@fl0w
fl0w / bookshelf-registry-collection.js
Created May 6, 2018 09:12
The correct way to define custom bookshelf Collections with registry plugin
const bookshelf = require('bookshelf')
class Users extends bookshelf.Collection {
get model () {
return User
}
}
class User extends bookshelf.Model {
static collection (...args) {
@fl0w
fl0w / purge-atom.sh
Created December 18, 2015 10:22
Purge atom from Mac OS X
# completely remove atom on mac os x
rm -r ~/.atom
rm -r /usr/local/bin/atom
rm -r /usr/local/bin/apm
rm -r /Applications/Atom.app
rm -r ~/Library/Preferences/com.github.atom.plist
rm -r ~/Library/Application\ Support/com.github.atom.ShipIt
rm -r ~/Library/Application\ Support/Atom
rm -r ~/Library/Saved\ Application\ State/com.github.atom.savedState
class BaseQueryBuilder extends objection.QueryBuilder {
distinctOn (columns, tableStar = `${this.modelClass().tableName}.*`) {
columns = asArray(columns)
const identifiers = columns.map(() => '??').join(', ')
columns = columns.map(column => {
return column.split('.').length === 1
? `${this.modelClass().tableName}.${column}`
: column
@fl0w
fl0w / install-nvm.sh
Last active June 6, 2017 20:24
nvm install
touch ~/.bash_profile
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash