Skip to content

Instantly share code, notes, and snippets.


Dan Allen mojavelinux

View GitHub Profile
mojavelinux / server-in-thread-multiple-clients.rb
Last active Jan 8, 2019
Running an HTTP server in a background thread in Ruby (for use in tests, for example)
View server-in-thread-multiple-clients.rb
# serve multiple clients at once
require 'socket'
require 'net/http'
server = 4040
server_thread = Thread.start do
loop do
Thread.start server.accept do |socket|
/^GET (\S+) HTTP\/1\.1$/ =~ socket.gets.chomp
path = $1
mojavelinux / nodegit-private-clone-test.js
Created May 21, 2018
Clone a private repository using nodegit
View nodegit-private-clone-test.js
const git = require('nodegit')
const fs = require('fs-extra')
const { URL } = require('url')
const REPO_URL = ''
const CLONE_DIR = '/tmp/private-repo-clone-test'
;(async () => {
await fs.emptyDir(CLONE_DIR)
let authAttempted = false
await git.Clone.clone(REPO_URL, CLONE_DIR, {
mojavelinux / asciidoctor-browser-include-spec.adoc
Last active Mar 15, 2018
Asciidoctor browser include spec: Specifies how Asciidoctor resolves the target of an include directive in the browser environment.
View asciidoctor-browser-include-spec.adoc

Include directive processing in the browser

This document describes how the include directive is processed in the browser environment (xmlhttprequest IO module). This handling has slightly different rules than when a file-based document. The rules are listed in the order in which they are applied.

In these definitions, there are several commonly occurring terms that pertain to the include directive:

  • target - the target of the include directive as specified in the document

  • include path - the resolved path of the include; usually an absolute path or URL

mojavelinux / echo-template-literal.js
Created Jan 2, 2018
A simple JavaScript template literal function that echos the string, populating all interpolated values.
View echo-template-literal.js
* Usage:
* const name = 'World'
* const place = '2018'
* console.log(echo`Hello, ${name}. Welcome to ${place}.`)
function echo (literals, ...values) {
return literals.length > 1
? values.reduce((accum, value, idx) => accum + value + literals[idx + 1], literals[0])
: literals[0]
mojavelinux / twitter.css
Last active Jun 17, 2017
User style to make Twitter square (and less bold) again; domain: (for use with
View twitter.css
/*.content-main {
width: 600px;
.dashboard {
width: 285px;
.DashboardProfileCard-bg {
height: 94px;
mojavelinux / jekyll-asciidoctor-diagram.adoc
Last active May 5, 2022
How to configure Asciidoctor Diagram in a Jekyll site
View jekyll-asciidoctor-diagram.adoc

How to configure Asciidoctor Diagram in a Jekyll site

Generate site

$ cd /tmp
$ mkdir jekyll-site-creator
mojavelinux / gitlab-readable.css
Last active May 12, 2017
Readable user style for GitLab Issues; match: ^https://gitlab\.com/.*/issues/.*$
View gitlab-readable.css
.md, .wiki {
font-family: "Droid Serif";
font-size: 1.2em;
line-height: 1.6;
ul.notes .note .note-body .note-text p, .wiki p {
margin-top: 0.75em;
mojavelinux / writers-write-bof-notes.adoc
Created Apr 28, 2017
Writers Write BOF Notes: Devoxx 2016
View writers-write-bof-notes.adoc

Writers Write BOF at Devoxx BE, 2016

Dan Allen, the lead moderator, welcomed everyone and encouraged everyone to participate We’re here to talk about writing, primarily technical documentation but beyond that too. Team organisation Technical challenges

Introductions. A broad cross-section of roles, interests, and tools:

  • Developers

View writers-write-bof-topics.adoc

Writers Write BOF Topics

Lead Editor

Much like roommates in a shared flat, a documentation group needs to find a way to make it work by agreeing on how to routine tasks / chores. What can help with this is having a lead editor. The lead editor can ensure a consistent style.

Support Engineers

mojavelinux / string-replace.js
Last active Apr 7, 2017
A polyfill for the JavaScript String#replace function that uses undefined instead of empty string for non-participating groups. See
View string-replace.js
if ('a'.replace(/(z)|./, function(match, g1) { return typeof g1; }) !== 'undefined') {
String.prototype.replace = (function (native_method) {
return function (pattern, callback) {
if ( !== 'RegExp' || typeof callback !== 'function') {
return, pattern, callback);
var result = '', source = String(this), length = source.length, lastIndex = 0, index, match;
pattern.lastIndex = 0;
while ((match = pattern.exec(source))) {
index = match.index;