Skip to content

Instantly share code, notes, and snippets.

View detro's full-sized avatar
I may be slow to respond.

Ivan De Marino detro

I may be slow to respond.
View GitHub Profile

Latency numbers (cheat sheet)

Operation nanosec microsec millisec notable 1Bx
L1 cache reference 0.5 ns 0.5 s
Branch mispredict 5 ns 5 s
L2 cache reference 7 ns 14x L1 cache 7 s
Mutex lock/unlock 25 ns 25 s
Main memory reference 100 ns 20x L2 cache, 200x L1 cache 1.6 m
Compress 1K bytes with Zippy 3,000 ns 3 µs `5
detro /
Last active July 22, 2022 15:52
Compiling Terraform against a target OS/ARCH, not available from HashiCorp


Sometimes you need a specific version of Terraform a build for your combination of Operating System / Architecture doesn't exist. This can be because that combination came out later than the version of Terraform you are after, or some other reason.

But, no fear, Golang compiler is great, and the Terraform codebase is pretty easy.


This describes a build process that produces a working binary,

detro /
Last active May 1, 2020 18:22
Install Folding@Home on your Linux home server


If you, like me, want to contribute to Folding@Home from your Linux home server, it takes just few easy steps.


  1. Create your Folding@Home Passkey here (needed in a sec)
  2. Install the Folding@Home Client (instructions)
  3. Configure it at /etc/fahclient/config.xml
detro /
Created January 8, 2019 19:04
Is there a better way to write this?
use http::Error as HttpError;
use std::{fmt, error};
type Result<T> = std::result::Result<T, ResolutionError>;
/// A type of `Error` emitted by `Resolver`
/// It contains a description and an optional `HttpError` that might have caused it
detro /
Last active December 1, 2017 18:54
XZCompressorInputStreamAdapter: shows how to overcome a limit in, that doesn't provide a "compressing" InputStream (the same can be done to create a "decompressing" OutputStream). It avoid the use of any thread and it uses just a single buffer to hold on to data in transition.
import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
import javax.validation.constraints.NotNull;
* Wraps a generic InputStream into a XZ Compressed InputStream.
detro /
Created February 12, 2017 18:48

Keybase proof

I hereby claim:

  • I am detro on github.
  • I am ivandemarino ( on keybase.
  • I have a public key ASAqluqfdxEe_p__agBOYpFKA_rnlPdZmi3YWIpyt90w8go

To claim this, I am signing this object:

detro /
Created December 28, 2015 00:59
Rust very lean way to parse CLI params AND handle error cases
fn main() {
// This might seem like a lot of lines for just catching the 2nd argument,
// parse the string to int and store it in a variable, but what this also covers is
// the absence of such value (first error case) or the non-parsability of the argument (second error case).
// I'm liking this stuff so far.
let n = match env::args().skip(1).next() {
Some(x) => match x.parse::<usize>() {
Ok(y) => y,
detro / 1password.conf
Created August 10, 2015 21:19
1PasswordAnywhere + Dropbox + Upstart = 1Password for Ubuntu
description "Starts a SimpleHTTPServer to host 1 Password Anywhere"
author "Ivan De Marino <>"
version "1.0.0"
# When to start/stop
start on runlevel [2345]
stop on runlevel [016]
# Keep it running
private LogEntries getRemoteEntries(String logType) {
Object raw = executeMethod.execute(DriverCommand.GET_LOG, ImmutableMap.of(TYPE_KEY, logType));
List<Map<String, Object>> rawList = (List<Map<String, Object>>) raw;
List<LogEntry> remoteEntries = Lists.newArrayListWithCapacity(rawList.size());
for (Map<String, Object> obj : rawList) {
remoteEntries.add(new LogEntry(LogLevelMapping.toLevel((String)obj.get(LEVEL)),
(Long) obj.get(TIMESTAMP),
(String) obj.get(MESSAGE)));
detro / 0_reuse_code.js
Created November 4, 2013 17:49
Here are some things you can do with Gists in GistBox.
// Use Gists to store code you would like to remember later on
console.log(window); // log the "window" object to the console