Loosely ordered with the commands I use most towards the top. Sublime also offer full documentation.
Ctrl+C | copy current line (if no selection) |
Ctrl+X | cut current line (if no selection) |
Ctrl+⇧+K | delete line |
Ctrl+↩ | insert line after |
define([ | |
'jquery', | |
'underscore', | |
'backbone', | |
'marionette', | |
'handlebars', | |
'text!templates/app_view.html', | |
'modules/mainMenuView/mainMenuView', |
function uniqueStringReducer(str, options) { | |
const { splitChar = '', joinChar = ', ', locale = Intl.DateTimeFormat().resolvedOptions().locale } = options || {}; | |
const strParts = str.split(', ').map(s => s.trim()); | |
const uniqueAddressParts = strParts.reduce((accumulatedParts, currentPart, i) => { | |
const hasDuplicates = accumulatedParts.find(accPart => { | |
const isDifferent = (currentPart.localeCompare(accPart, locale, { sensitivity: 'base' })); | |
return !isDifferent; | |
}); |
Write a program that does what it’s supposed to do | |
Write idiomatic code | |
Debug a program that I wrote | |
Debug a program someone else wrote | |
Debug the interaction between a system I wrote and one I didn’t | |
File a good bug report | |
Modify a program I didn’t write | |
Test a program I wrote | |
Test a program I didn’t write | |
Learn a new programming language |
const clone = (() => { | |
/*! (c) Andrea Giammarchi - WTFPL */ | |
const toString = {}.toString; | |
const flags = ['global', 'ignoreCase', 'multiline', 'sticky', 'unicode']; | |
const prime = obj => typeof obj === 'object' ? new obj.constructor(obj.valueOf()) : obj; | |
const through = obj => { | |
const descriptors = Object.getOwnPropertyDescriptors(obj); | |
Reflect.ownKeys(descriptors).forEach(key => { | |
const descriptor = descriptors[key]; | |
if ('value' in descriptor) { |
// Exists since ES6 | |
let isTheNewVar = '☝️😙'; | |
function why() { | |
let result = 'Well, actually…'; | |
if (!window.isTheNewVar) { | |
let isTheNewVar = 'BECAUSE IT CANNOT CREATE "GLOBAL" PROPERTIES! 🎉'; | |
let result = 'ALSO BECAUSE IT IS BLOCK-SCOPED! 😎'; |
/** | |
* Creates as many variables as object properties in the specified context. | |
* | |
* _.extract({name: "Andrea", address: "Madrid", age: "27"}, window); | |
* console.log(name) | |
* => 'Andrea' | |
*/ | |
_.mixin({ |
// Both params accept the same format as the Date object (IETF-compliant RFC 2822 timestamps and also a version of ISO8601). | |
// This is a basic version (supports just years and months, it assumes every month is 30 days, no pluralization, etc.) but it works. | |
const getDuration = (startDateString, endDateString = new Date()) => { | |
const totalMonths = Math.floor((new Date(endDateString) - new Date(startDateString)) / 1000 / 60 / 60 / 24 / 30); | |
const months = totalMonths < 12 ? totalMonths : totalMonths % 12; | |
const years = Math.floor(totalMonths / 12); | |
let duration = '¯\_(ツ)_/¯'; | |
if (years === 0) | |
if (months > 0) |
const flatten = (arr) => arr.reduce((prev, current) => prev.concat(Array.isArray(current) ? flatten(current) : current), []); |
var svg = document.querySelector( "svg" ); | |
var svgData = new XMLSerializer().serializeToString( svg ); | |
var canvas = document.createElement( "canvas" ); | |
var ctx = canvas.getContext( "2d" ); | |
var img = document.createElement( "img" ); | |
img.setAttribute( "src", "data:image/svg+xml;base64," + btoa( svgData ) ); | |
img.onload = function() { |
Loosely ordered with the commands I use most towards the top. Sublime also offer full documentation.
Ctrl+C | copy current line (if no selection) |
Ctrl+X | cut current line (if no selection) |
Ctrl+⇧+K | delete line |
Ctrl+↩ | insert line after |