Skip to content

Instantly share code, notes, and snippets.

View snej's full-sized avatar

Jens Alfke snej

View GitHub Profile
snej / missing_includes.rb
Created October 2, 2023 16:19
Script to find missing std #includes in C++ headers
#! /usr/bin/env ruby
# missing_includes.rb
# By Jens Alfke <>
# Version 2.0 -- 2 Oct 2023
# Copyright 2021-Present Couchbase, Inc.
# This script scans C++ header files looking for usage of common standard library classes, like
# `std::vector`, without including their corresponding headers, like `<vector>`. It similarly looks
# for standard C functions like `strlen` that are used without including their header (`<cstring>`.)
snej /
Last active May 8, 2021 18:27
Tails! A tiny Forth core written as a hack for May Forth 2021, using some of Wasm3's secret optimization sauce.
// Tails has grown a bit and moved out into its own repository:
// Please visit it there!
// If you want to see the tiny original version from May Forth 2021, it's still here;
// click the "Revisions" button above, or go to:
snej / threadSafeFuture.nim
Last active November 12, 2020 14:38
Thread-safe Futures for Nim
# threadSafeFuture.nim
# Jens Alfke, 30 June 2020
import asyncdispatch, deques, locks, sugar, threadpool
## Utilities for mixing async/await with threads.
## ``threadSafe()`` takes a Future and returns a new Future that can be completed on any thread.
## The original Future's callback will still be invoked on its original thread, and ``await``
## works normally.
snej / Async.hh
Created August 28, 2018 22:26
C++ implementation of C# / JavaScript style async calls
// Async.hh
// Copyright © 2018 Couchbase. All rights reserved.
#pragma once
#include "RefCounted.hh"
#include <functional>
snej /
Created July 8, 2016 04:46
Stuff to prove my identity on

Keybase proof

I hereby claim:

  • I am snej on github.
  • I am snej ( on keybase.
  • I have a public key ASA32IteNIxEuZRwRwerBGrd-RL2UMiz4nxBpK5Kqu6TjQo

To claim this, I am signing this object:

snej / bitcodesize.rb
Created March 1, 2016 21:52
Simple tool that scans an iOS library and checks the size of the bitcode segment for each included object file. It logs a warning for files with no bitcode or whose bitcode is less than 1Kbyte; or with the -v flag it logs the sizes of all bitcode segments.
#! /usr/bin/env ruby
# By Jens Alfke. Do What Thou Wilt shall be the whole of the license.
def listBitcode(path, arch, verbose =false)
result = []
filename = nil
section = nil
output = `otool -l -arch #{arch} "#{path}"`
snej / QRCode.m
Created September 21, 2015 16:48
Shows how to generate a QRCode on iOS or Mac OS X
#import <UIKit/UIKit.h>
typedef UIImage QRImage;
#import <AppKit/AppKit.h>
typedef NSImage QRImage;
+ (QRImage*) QRCodeImageWithData: (NSData*)data size: (CGFloat)size {
snej / QRCodeScanner.m
Created September 21, 2015 16:45
Snippet showing how to capture QR codes from the device camera on iOS or Mac OS X
- (BOOL) startCapture: (NSError**)outError {
if (!_session) {
_session = [[AVCaptureSession alloc] init];
AVCaptureDevice* video = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeVideo];
if (!video)
return [self failWithMessage: @"No video camera available" error: outError];
AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice: video
error: outError];
if (!input)
return [self failWithMessage: @"Couldn't acquire input device" error: outError];
snej / geo_bug.sql
Last active August 29, 2015 14:06
Demonstrates a possible rtree regression in sqlite 3.8.5
-- This demonstrates what seems to be a regression in the SQLite version (3.8.5) in OS X 10.10 DP7.
-- The final 'select' statement at the end of the file returns zero rows, not three.
-- The query works fine in OS X 10.9.4 (SQLite 3.7.13) and in earlier versions of 10.10 up to DP6.
-- If I alter the bboxes table to be a regular (non-rtree) table, the bug goes away.
-- Run this like so:
-- sqlite3 -init geo_bug.sql
snej / Issue280Logs
Created March 18, 2014 17:19
Logs from both clients, for Couchbase Lite issue #280
Device A: (Has existing data)
12:41:03.289| Logging mode 2 enabled in domains: {ChangeTracker, Sync, SyncVerbose}
12:41:03.346‖ Sync: CBL_Puller[] STARTING ...
12:41:03.349‖ Sync: CBL_Puller[]: Reachability state = <>:unreachable (00), suspended=0
2014-03-17 12:41:03.348 ShotBOT[55788:a0b] Application windows are expected to have a root view controller at the end of application launch
12:41:03.350‖ Sync: CBL_Pusher[] STARTING ...
12:41:03.351‖ Sync: CBL_Pusher[]: Reachability state = <>:reachable (20002), suspended=0
12:41:03.351‖ Sync: CBL_Pusher[]: Going online
12:41:03.351‖ Sync: CBL_Pusher[] Progress: set active = 1