Skip to content

Instantly share code, notes, and snippets.


Lukas Larsson garazdawi

View GitHub Profile
View rewrite-seealso.escript
#!/usr/bin/env escript
%% -*- erlang -*-
%%! +A 1 +SDio 1 +S 1 -mode minimal
%% This script can be used to convert <seealso> to <see*>
%% Invoked like this:
%% find lib/*/doc/src system/doc/*/ erts/doc/src/ '(' -name *.xml -o -name *.xmlsrc ')' -exec ./rewrite-seealso.escript {} \;
%% You need a OTP with built documentation for this to work
main([File]) ->
io:format("Parse: ~s~n",[File]),
garazdawi / gcount.erl
Created Sep 6, 2019
Global Counters in Erlang
View gcount.erl
ets_init() ->
ets:new(?MODULE, [{write_concurrency,true},named_table,public]).
ets_new(Counter) ->
garazdawi / bit_vector.erl
Last active Mar 15, 2020
A shared mutable bit-vector in Erlang
View bit_vector.erl
-export([new/1, get/2, set/2, clear/2, flip/2, print/1]).
new(Size) ->
Words = (Size + 63) div 64,
{?MODULE, Size, atomics:new(Words, [{signed, false}])}.
get({?MODULE, _Size, Aref}, Bix) ->
garazdawi /
Created May 10, 2019
How to compile openssl and Erlang/OTP with TLSv1.3
git clone
cd openssl
git checkout OpenSSL_1_1_1b
./Configure shared --prefix=$HOME/apps/openssl/1.1.1b --openssldir=$HOME/apps/openssl/1.1.1b linux-x86_64
make install
cd ..
View gen_tcp2.erl
-export([listen/2, accept/1, accept/2,
connect/3, connect/4,
send/2, recv/1, recv/2, recv/3,
-export([run/0, run/2]).
%% Naive gen_tcp shim over the socket API
garazdawi / decode.erl
Created Aug 3, 2018
Decode of partial erlang external term format
View decode.erl
term(<<131,Rest/binary>>) ->
%% List
term(<<108,Sz:32,Rest/binary>>) ->
{Lst, R} = lists:foldl(
fun(_, {Acc, B}) ->
garazdawi / trace_issue.escript
Created Aug 1, 2018 — forked from devonestes/trace_issue.escript
Reproduction escript for trace/3 wierdness
View trace_issue.escript
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname wtf
main(_) ->
process_flag(trap_exit, true),
ToMap = lists:seq(1, 50),
MapFun = fun() ->
lists:map(fun(N) -> N end, ToMap)
View funmatch.erl
%% Introducing the new `apply` pattern match operand.
%% `apply` is used to delegate the handling of a match
%% to some other function including the action to be taken
%% when a successful match happens. The `apply` statement
%% replaces the "-> body" part of a function/case/receive.
%% Simple example:
%% example() ->
%% Pat = fun(A) when is_atom(A) ->
%% {ok, A}
> infocmp xterm
# Reconstructed via infocmp from file: /lib/terminfo/x/xterm
xterm|xterm-debian|X11 terminal emulator,
am, bce, km, mc5i, mir, msgr, npc, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
View lists.erl
keyfind(Key,Value,[H|T]) ->
case maps:find(Key,H) of
{ok, Value} ->
_ ->
keyfind(_,_,[]) ->