Skip to content

Instantly share code, notes, and snippets.

View dherman's full-sized avatar

Dave Herman dherman

View GitHub Profile
macro_rules! const1 {
($id:ident, $depth:expr, [$($prefix:tt)*])
=>
{
const $id: [&'static str; $depth] = [$($prefix),*];
};
}
macro_rules! const_tree_at {
($depth:tt ;

Env vars

Sandboxing

  • NOTION_HOME

Tool overrides

Possible environment variables

  • We want to provide good quality progress meters at console for fetch+unpack operation
  • Measuring progress smoothly requires knowing not just how many compressed bytes you have read but how many decompressed bytes you have written
  • Knowing the percentage complete of decompressed bytes written requires knowing the total decompressed size
  • Knowing the total decompressed size requires reading the field of the gzip layout that indicates decompressed size
  • That field is at a fixed offset from the end of the gzip file
  • In order to still get benefit of streaming we have to make a separate HTTP HEAD request to find the content length of the file and then a subsequent GET request to fetch just that tiny byte range to read that one field
  • (This does have overhead of a couple extra HTTP requests — anecdotally this seems cheap enough not to matter but maybe could matter in some environments?)
  • Unfortunately for GitHub releases, the files redirect to S3 URLs which seem to reject HEAD requests with a 403
  • We c

Directory layout

.
├── bin
│   ├── node
│   ├── npm ~> ../exe/launchscript
│   ├── npx ~> ../exe/launchscript
│   └── yarn
├── config.toml
@dherman
dherman / alts.md
Last active October 4, 2018 20:42
alternative syntaxes for notion project-vs-user toolchain commands

Symmetric

Use

  • notion use node 8
  • notion use ember-cli 3.4
  • notion use yarn 1.10
  • notion install heroku 7
  • notion install node 10
  • notion install npm default
@dherman
dherman / shared-library-constructors.md
Created July 27, 2018 21:11
linkdump: shared library constructors
pub trait IntoJs<'a, V: Value> {
fn into_js<C: Context<'a>>(self, cx: &mut C) -> Handle<'a, V>;
}
impl<'a, V: Value> IntoJs<'a, V> for Handle<'a, V> {
fn into_js<C: Context<'a>>(self, _: &mut C) -> Handle<'a, V> {
self
}
}
@dherman
dherman / flatness.txt
Last active July 9, 2018 17:54
Different candidate decompositions for the Neon library's modules
neon
Context, CallContext, FunctionContext, MethodContext, ComputeContext, ExecuteContext, ModuleContext, TaskContext
CallKind
VmGuard
VmResult, JsResult, JsResultExt, Throw
Borrow, BorrowMut, Ref, RefMut, LoanError
JsArray, JsArrayBuffer, JsBoolean, JsBuffer, JsError, JsFunction, JsNull, JsNumber, JsObject, JsString, JsUndefined, JsValue
Value
BinaryData
StringOverflow, StringResult