I hereby claim:
- I am mcav on github.
- I am mcav (https://keybase.io/mcav) on keybase.
- I have a public key whose fingerprint is 899A 69AF 882F F002 44FE 33A7 9CEF B7B2 BC1D ADC0
To claim this, I am signing this object:
| /** | |
| * @typedef ReviewEntry | |
| * @param {string} id | |
| * @param {number} rating | |
| * @param {string} review | |
| * @param {number} timestamp | |
| */ | |
| /** | |
| * @typedef PaginatedReviews | 
| ### Keybase proof | |
| I hereby claim: | |
| * I am mcav on github. | |
| * I am mcav (https://keybase.io/mcav) on keybase. | |
| * I have a public key whose fingerprint is 3C25 D972 472B AC3A DBE5 50A7 57DE D586 0DCB 9121 | |
| To claim this, I am signing this object: | 
| #!/bin/bash | |
| # cpulimit must be installed... | |
| # - homebrew: "brew install cpulimit" | |
| # - make from https://github.com/opsengine/cpulimit | |
| CPULIMIT_BIN=cpulimit | |
| # The CPU percentage may be, e.g. 800 for an 8-core machine. | |
| # See the docs for `cpulimit`. | |
| PERCENT_CPU=50 | 
I hereby claim:
To claim this, I am signing this object:
| /** | |
| * Dead-simple multimethods for JavaScript. | |
| * | |
| * Usage: | |
| * | |
| * var count = multimethod([ | |
| * String, function(self) { | |
| * return self.length; | |
| * }, | |
| * Number, function(self) { | 
| 'use strict'; | |
| define(function(require) { | |
| /** | |
| * The AlarmDatabase stores a list of alarms in IndexedDB. All | |
| * mutation operations return Promises, for easy chaining and state | |
| * management. This module returns the one-and-only instance of | |
| * AlarmDatabase. | |
| */ | |
| function AlarmDatabase(dbName, storeName, version) { | 
| /** | |
| * Ensure that local-only folders live in a reasonable place in the | |
| * folder hierarchy by moving them if necessary. | |
| * | |
| * We proactively create local-only folders at the root level before | |
| * we synchronize with the server; if possible, we want these | |
| * folders to reside as siblings to other system-level folders on | |
| * the account. This is called at the end of syncFolderList, after | |
| * we have learned about all existing server folders. | |
| */ | 
| addAlert: function(alert) { | |
| var testOpts = alert.testOpts || {}; | |
| if (this.alerts.length) { | |
| this.removeCurrentAlert(); | |
| } | |
| this.alerts.unshift(alert); | |
| this.grabScreenLock(); | 
| addAlert: function(alert) { | |
| var testOpts = alert.testOpts || {}; | |
| if (this.alerts.length) { | |
| this.removeCurrentAlert(); | |
| } | |
| this.alerts.unshift(alert); | |
| this._screenLock = this._screenLock || navigator.requestWakeLock('screen'); | 
| /** | |
| * This is a sketch of one alternative implementation of the GELAM | |
| * test harness. At a high level, it does three things: | |
| * | |
| * 1. It still uses the ArbPL/Loggest framework of loggers and | |
| * expectations (mocked out below with slightly different naming). | |
| * | |
| * 2. It replaces the serial "test step" framework with a flow based | |
| * on Promises. | |
| * |