UPDATE: apparently kernel difference may have a serious impact, so I'll redo the test from scratch.
Test performed with AOF enabled, fsync policy 1 second, allowing the rewrites to be triggered.
Command lines used:
;; | |
;; scheme coin - a common lisp blockchain | |
;; | |
;; Burton Samograd | |
;; 2017 | |
(load "~/quicklisp/setup.lisp") | |
(defconstant *coin-name* "Scheme Coin") |
# ! python | |
# coding: utf-8 | |
import os | |
import argparse | |
import glob | |
import nbformat | |
from nbconvert.preprocessors import ExecutePreprocessor | |
from nbconvert.preprocessors.execute import CellExecutionError |
# -*- coding: utf-8 -*- | |
""" | |
A command-line interface for running Jupyter Notebooks. | |
Usage: run.py [OPTIONS] [NOTEBOOK_PATHS]... | |
Executes Jupyter Notebooks from the command line. | |
Expects one or more file paths input as arguments. |
All packages, except for Tini have been added to termux-root. To install them, simply pkg install root-repo && pkg install docker
. This will install the whole docker suite, left only Tini to be compiled manually.
I bought M1 MacBook Air. It is the fastest computer I have, and I have been a GNOME/GNU/Linux user for long time. It is obvious conclusion that I need practical Linux desktop environment on Apple Silicon.
Fortunately, Linux already works on Apple Silicon/M1. But how practical is it?
This is the story of what happened when I went down a rabbit hole.
It starts with k7. If you press Ctrl-]
in the k7 WASM console, this appears:
x^x*/:x:2_!100
That's a prime number filter. There are faster ones - kparc.com's x,1_&&/80#'!:'x
is beautiful - but this one is really short.
#include <stdio.h> | |
#include <string.h> | |
#include <assert.h> | |
FILE *in; long M[1<<24]={0}, *D, *R, H=0x130000, IP=0, T; | |
long getu() { long t, h = getc(in); if (h < 0xC0) return h; | |
t = ((h&0x1F) << 6) | (getc(in) & 0x3F); if (h < 0xE0) return t; | |
t = ( t << 6) | (getc(in) & 0x3F); if (h < 0xF0) return t; | |
t = ( t << 6) | (getc(in) & 0x3F); return t & 0x1FFFFF; } | |
void putu(long c) { if (c < 0x80) { putchar(c); return; } | |
if (c < 0x7FF) { putchar(0xC0|(c>>6)); } else { |
For a long time I've been really impacted by the ease of use Cassandra and CockroachDB bring to operating a data store at scale. While these systems have very different tradeoffs what they have in common is how easy it is to deploy and operate a cluster. I have experience with them with cluster sizes in the dozens, hundreds, or even thousands of nodes and in comparison to some other clustered technologies they get you far pretty fast. They have sane defaults that provide scale and high availability to people that wouldn't always understand how to achieve it with more complex systems. People can get pretty far before they have to become experts. When you start needing more extreme usage you will need to become an expert of the system just like any other piece of infrastructure. But what I really love about these systems is it makes geo-aware data placement, GDPR concerns potentially simplified and data replication and movement a breeze most of the time.
Several years ago the great [Andy Gross](ht