Skip to content

Instantly share code, notes, and snippets.


Lloyd Fournier LLFourn

View GitHub Profile
View collisions.raku
sub MAIN(Int \m, Int \n, Int :$samples = 10_000) {
my \q = 2 ** 19 - 1;
my \m-n = m ** n;
# experiment should be done over a prime field so that it mirrors reality
say "q = {q} (is-prime: {})";
say "samples = {$samples}, m = {m}, n = {n}, m ^ n = {m-n}";
sub count-collisions(@table) {
# This line of code:
LLFourn /
Last active Mar 15, 2021
rust code for anticipating signatures for Discreet Log Contract oracles with the standard rust-secp256k1 library
//! PoC style code for anticipating BIP-340 style signatures for PoC DLC stuff.
//! WARNING this doesn't check that:
//! 1. Public keys have an even Y coordinate
//! 2. Public nonces have a square Y coordinate
//! If the public keys are in the right form, then this should produce valid
//! BIP-340 signatures (to be fully compatible then the tag needs to be set
//! correctly).
//! Add to Cargo.toml:
LLFourn /
Last active Jan 5, 2019
Re: [Lightning-dev] An Argument For Single-Asset Lightning Network

This is a response I made to the thread that didn't make it into the archive (I think) :

Happy new year lightning-dev!

This topic is my main area of research at moment so I'm really happy to see a thread about it. In general I agree with ZmnSCPxj's analysis and conclusions. I'd like to add a couple of ideas to this discussion and would greatly appreciate some early peer review on them :)

HTLCs as American call options

LLFourn / Rakudo.sp
Created Nov 29, 2017
in dev Spit module for building rakudo docker images
View Rakudo.sp
class Rakudo {
constant File $:install-to;
constant $:checkout = '2017.07';
constant File $:clone-to = './rakudo';
constant GitHub $:zef-repo = 'ugexe/zef';
constant GitHub $:repo = 'rakudo/rakudo';
constant Bool $:debug-moar;
static method install-deps on {
LLFourn /
Last active Oct 24, 2020
Docker, Getting around PID 1
# So you want to pipe shell scripts to docker. But docker runs the container's command as PID 1.
# Linux doesn't set up signal handlers for PID 1.
# This gives you the following problems:
# 1. The script can't kill itself:
echo 'kill $$; echo "Still alive"' | docker run -i --rm alpine sh
# 2. You can't kill the script from outside with a normal kill:
echo "sleep 1000" | docker run -i --rm alpine sh & sleep 1 && kill $!
docker ps # it didn't die
#==== Solving problem 1 ====
View rest.txt
A 9.0422700
C 10.6984718
B 10.3635278
a 17.9581401
b 21.61539652
c 27.7105599
A 4.126187
C 4.918153
LLFourn /
Created Apr 7, 2017
The script I used to benchmark samcv++'s branch
for i in $(seq 1 5); do
./install/bin/perl6 -e '"a" x 1000000000 ~ "b" ~~ /b/; say now - INIT now;'
done | awk '{ v += $0; i++; }; END { print v/i }'
LLFourn / native-int-perf.p6
Created Mar 12, 2017
Shows the difference in performance between native ints and vanilla.
View native-int-perf.p6
#!/usr/bin/env perl6
sub perl6-loop($n)
my $sum = 0;
for 1..$n -> $i {
for 1..$i -> $j {
$sum += $i+$j;
LLFourn /
Last active Mar 2, 2017
my Top 10 p6 features

My top 10 p6 features

My brain did work so I wrote it down. This is more for my use cases than why I think the language will succeed in general.

  1. containers
  2. grammars
  3. multi-dispatch (esp on type narrowness)
  4. lexical $_
  5. easy + sane defaults builtin OO
  6. Types as first class citizens + MOP
  7. lazy iterators
View segfault_backtrace.txt
I've been getting segfaults in this area recently. The trace is a bit different but I guess it's related. It seems that flag_map in gc_mark is no longer allocated so I get segfault.
(lldb) r
There is a running process, kill it and restart?: [Y/n] y
Process 75673 exited with status = 9 (0x00000009)
Process 75691 launched: '/Users/llfourn/src/rakudo/install/bin/moar' (x86_64)
Process 75691 stopped
* thread #1: tid = 0x23cfc68, 0x0000000100063ca4 libmoar.dylib`gc_mark(tc=0x0000000100500290, st=0x0000000101004f40, data=<unavailable>, worklist=0x000000010d27c1a0) + 84 at MVMCallCapture.c:55, queue = '', stop reason = EXC_BAD_ACCESS (code=1, address=0x10a72533)
frame #0: 0x0000000100063ca4 libmoar.dylib`gc_mark(tc=0x0000000100500290, st=0x0000000101004f40, data=<unavailable>, worklist=0x000000010d27c1a0) + 84 at MVMCallCapture.c:55
52 MVMuint16 count = ctx->arg_count;