Skip to content

Instantly share code, notes, and snippets.

@danharper
danharper / 1-sleep-es7.js
Created February 8, 2015 16:55
ES7's async/await syntax.
// ES7, async/await
function sleep(ms = 0) {
return new Promise(r => setTimeout(r, ms));
}
(async () => {
console.log('a');
await sleep(1000);
console.log('b');
})()
@danharper
danharper / vscode-settings.js
Last active August 18, 2018 14:26
italic operator mono
{
"editor.fontFamily": "Operator Mono, Menlo, Monaco, 'Courier New', monospace",
"editor.fontSize": 13,
"window.zoomLevel": 0,
"editor.tabSize": 2,
"editor.fontLigatures": true,
"workbench.colorTheme": "Default Light+",
"editor.cursorBlinking": "solid",
"editor.minimap.enabled": false,
"editor.tokenColorCustomizations": {
@danharper
danharper / normalize-filenames.js
Last active August 17, 2018 19:32 — forked from dcramer/normalize-filenames.js
use Sentry (Raven) on PhoneGap
Raven.config(dsn, {
dataCallback(data) {
const normalize = filename => filename.split('/www/', 2)[1]
data.exception.values[0].stacktrace.frames.forEach(frame => {
frame.filename = normalize(frame.filename)
})
data.culprit = data.exception.values[0].stacktrace.frames[0].filename
@danharper
danharper / BaseCollection.php
Created January 24, 2014 12:34
Laravel/Eloquent Collection method to sort by a comma-separated string of IDs. Any models which do not appear in the given order are added to the end in ID order.
<?php
use Illuminate\Database\Eloquent\Collection;
class BaseCollection extends Collection {
public function sortByOrder($order, $delimeter = ',')
{
$order = is_array($order) ? $order : explode($delimeter, $order);
@danharper
danharper / a-FormatController.php
Last active August 1, 2017 12:06
A Laravel Controller which allows you to display API/report data in multiple formats. For example, you may display a preview as HTML, and offer buttons to download as CSV and JSON.
<?php
// this is the base controller which parses output to HTML/CSV/JSON depending on the format in the URL
use Illuminate\Support\Collection;
class FormatController extends Controller {
protected $fileName = 'export';
protected $view = 'reports.output';
@danharper
danharper / a.js
Created January 14, 2014 18:23
XHR upload progress
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
var percent = parseInt(e.loaded / e.total * 100, 10)+'%';
console.log('progress', percent);
}, false);
xhr.onreadystatechange = function(e) {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log('done!');
@danharper
danharper / circle.yml
Created February 11, 2015 12:46
How we deploy InventoryBase from CircleCI
machine:
php:
version: 5.6.5
dependencies:
cache_directories:
- vendor
- node_modules
pre:
- sudo pip install awscli
@danharper
danharper / waitFor.js
Last active February 21, 2017 12:38
three ways to "waitFor" a prop to become non-null before rendering
// decorate the class, composition
function waitFor(prop) {
return ChildComponent => class extends Component {
render() {
return this.props[prop] ? <ChildComponent {...this.props} /> : null
}
}
}
// decorate the class, inheritance
const { execSync } = require('child_process')
const SENTRY_URL = 'https://app.getsentry.com/api/0/projects/radweb/inventorybase-go/releases'
const SENTRY_API_KEY = process.env.SENTRY_API_KEY
const VERSION = process.env.CIRCLE_SHA1
function createSentryRelease() {
execSync(`curl ${SENTRY_URL} -u ${SENTRY_API_KEY} -X POST -d '${JSON.stringify({ version: VERSION })}' -H 'Content-Type: application-json'`)
}
function uploadToSentry(file, filename) {
@danharper
danharper / voices.js
Last active October 7, 2016 16:45
cycle every SpeechSynthesis voice
// would've been awesome if `speechSynthesis.speak` returned a promise which resolves on finish.. :(
const sleep = ms => new Promise(r => setTimeout(r, ms))
async function go(msg) {
for (let v of speechSynthesis.getVoices()) {
speechSynthesis.speak(u = new SpeechSynthesisUtterance(msg), u.voice = v, u)
await sleep(1000)
}
}