Skip to content

Instantly share code, notes, and snippets.

View jhurliman's full-sized avatar
🐨

John Hurliman jhurliman

🐨
View GitHub Profile
@jhurliman
jhurliman / Dockerfile-cppgraphicsdev
Created January 27, 2020 21:10
Dockerfile for C++ graphics development
FROM ubuntu:18.04
# Install common C++ and imaging libraries, Clang, and add Clang to the PATH
RUN apt-get update && apt-get install -y \
xz-utils \
git \
wget \
nano \
build-essential \
libboost-all-dev \
@jhurliman
jhurliman / record-video0.sh
Created May 24, 2019 05:54
Record from a HDMI to USB adapter
ffmpeg -f v4l2 -framerate 10 -thread_queue_size 512 -i /dev/video0 -t 5 -c:v h264 -pix_fmt yuv420p test001.mp4
@jhurliman
jhurliman / UntrackedAllocator.h
Created January 15, 2019 07:47
Simple std::allocator example wrapping malloc/free
#pragma once
#include <memory>
#define NOMINMAX
#undef max
template <typename T>
class UntrackedAllocator {
public:
@jhurliman
jhurliman / result.hpp
Created December 29, 2018 02:03
C++ Result type wrapping std::expected and std::exception
template<typename T>
class [[nodiscard]] Result {
public:
Result(const T& value) : _result(value) {}
Result(T && value) : _result(std::move(value)) {}
Result(std::exception error) : _result(std::unexpected<std::exception>(std::move(error))) {}
bool isOk() const {
markChecked();
return _result.has_value();
#include <auto>
auto main() {
for (auto auto = 1; auto <= 100; auto++) {
if (auto % 15 == 0) auto << "FizzBuzz" << auto;
else if (auto % 5 == 0) auto << "Buzz" << auto;
else if (auto % 15 == 0) auto << "FizzBuzz" << auto;
else auto << auto << auto;
}
@jhurliman
jhurliman / .clang-format
Last active October 20, 2018 18:04
A reasonable clang-format configuration
# clang-format configuration file
#
---
DisableFormat: false
Language: Cpp
Standard: Cpp11
# Spacing
AccessModifierOffset: -4
ColumnLimit: 100
@jhurliman
jhurliman / ab_test.py
Created October 1, 2018 23:04
An implementation of "BEST: Bayesian Estimation Supersedes the t Test" using pymc3
from multiprocessing import cpu_count
import matplotlib
matplotlib.use('Agg', warn=False)
import matplotlib.pyplot as plt # noqa: E402
import numpy as np # noqa: E402
import pymc3 as pm # noqa: E402
import six.moves
@jhurliman
jhurliman / tls_guardvar.cpp
Created May 8, 2018 17:37
Directly access a compiler-generated Thread Local Storage guard variable
// Tested with clang-6.0 on Ubuntu 14.04 using:
// clang --std=c++14 -stdlib=libstdc++ -lstcd++ -fasm-blocks -O3 tls_guardvar.cpp -o tls_guardvar
// I will be genuinely surprised if this works in any other circumstance.
#include <iostream>
struct S {
int x;
S() { x = 42; }
};
@jhurliman
jhurliman / allWithProgress.js
Created May 5, 2017 17:30
Wrapper for Promise.all() that adds a progress callback
function allWithProgress(promises, callback) {
let completed = 0
callback(0, promises.length)
promises.forEach(p => {
p.then(() => callback(++completed, promises.length))
})
return Promise.all(promises)
}
@jhurliman
jhurliman / valueAtPath.js
Created April 22, 2017 23:20
Safely retrieve a value from a nested object with a path like 'a.b.c'
/**
* Safely retrieve a value from a nested object using a string path such as
* 'a.b.c' or an array ['a', 'b', 'c'].
*/
function valueAtPath (obj, path) {
if (!Array.isArray(path)) {
if (!path) return obj
path = path.split('.')
}