Skip to content

Instantly share code, notes, and snippets.


Block or report user

Report or block est31

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile

Beyond librispeech: About the amount of spoken content stored in Librivox


Given that LibriVox contains enough of english content for a speech processing corpus, LibriSpeech, to be built from it, I've wondered how much content LibriVox has in languages other than English.

I've downloaded the JSON API contents of Librivox, separated the audiobooks according to their language, and summed up their lengths, obtaining a language breakdown expressed in spoken time.

This gave results of over 60 thousand hours for english, thousands of hours each for German, Dutch, French, Spanish, and hundreds of hours for other languages.


Trying to deploy WPA3 on my home network


Recently, news broke about a new possible offline attack on WPA2 using PMKID. To summarize the attack, WPA2 protected APs can end up broadcasting PMKID values which can then be used to offline-brute-force the password.

These PMKID values are computed this way:


Looking back and looking forward -- Rust in 2017 and 2018

Recently, there had been a call for blog posts reflecting 2017 and about which path Rust should choose in 2018.

First a few words about me. I was and still am a student, and most of my coding is for learning and because it is fun. Also, coding is a great excuse for procrastinating something more important :). Having contributed to open source codebases has helped me determine that I want to do this in a day job once I'm done with my studies.

I've heard about Rust somewhere around the 1.0 release in 2015. I don't know the details any more, but most likely it was a German tech news website. I've then read on about what Rust is and its promises like zero cost abstractions, fearless concurrency or the concept of safety really stood out. My background was C++ so I also quite liked the syntax. A bit later I decided to read the the book (first edition, back then

est31 /
Last active Jan 28, 2016
How to extract wiki pages from openproject and to bring them into more suitable format.

Exporting openproject wiki files

The following guide explains how to export an openproject wiki to somewhat readable openproject syntax-ed files.

The guide assumes you are running in bash shell, and can use GNU sed, and that you have the sqlite3 command utility installed.

Following UN*X philosophy, all commands should be silent and have no stdout. If you get something printed to stdout there is an error.

Part 0: Preparation

est31 /
Last active Sep 27, 2018
A collection of things to do in order to be nice to f-droid packagers

How to release a godot application for f-droid

In the best case, you should:

  1. tag your releases. This way, one always knows which commit to package for a specific release
  2. create and maintain an export.cfg, with an icon, and version numbers raised at each release

Explanations why these things are useful for packagers, and how they are done, and done best, can be found below.

est31 / stats.lua
Last active Aug 29, 2015
craft stats script
View stats.lua
-- put this into some builtin/game/*.lua file
-- it will print craft stats for the mod config to stdout when you start a world.
local register_craft_old = core.register_craft
core.type_stats = {}
core.grouped_number = 0
core.non_grouped_number = 0
local function is_group_str(val)
return string.sub(val, 1, 6) == "group:"
core.register_craft = function(params)
est31 / init.lua
Last active Aug 29, 2015
crafting speed test
View init.lua
-- file maintained at
-- tests basic crafting speed
local function crafting_loop()
local x = minetest.get_us_time()
local cnt = 20000
local locnt = 50
while cnt ~= 20000-locnt do
input = "normal",
est31 / password_list.txt
Last active Aug 29, 2015
pwm config example
View password_list.txt
return {["password_list"] = {
{user="est31", address="", port=30001, password="secretpassword", comment="The first Server I logged on"},
{user="est31", password="anothersecretpassword", name="Xanadu", comment="Some other nice server"},
{user="est31", address="", port=30000, password="", comment="Empty password for local sessions"},
{user="est", address="", port=30000, password="", comment="Empty password for local sessions"}
est31 / password_list.txt*outdated*
Last active Aug 29, 2015
pwm example (old format)
View password_list.txt*outdated*
return {["passwords"] = { --the list of the passwords. Every password has an ID. Every entry references that ID instead of the password itself.
[42] = "42world",
[33] = "12345secretpassword",
[34] = "anothersupersecretpassword"
}, ["lu"] = {
["user1"] = { --every username gets one entry
["addr_lu"] = { --you can either specify the domain name in the "addr_lu" section,
--or you can specify the "display name" (or both) in the "select_srv_lu" section.
[""] = {["30001"] = 33},
[""] = {["30000"] = 42} --a localhost test client. Note the changed number, its a changed ID.
est31 / backtrace
Created Oct 26, 2014
backtrace for MT segfault
View backtrace
#0 0x00007ffff4f9dbb9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff4fa0fc8 in __GI_abort () at abort.c:89
#2 0x00007ffff4fdae14 in __libc_message (do_abort=do_abort@entry=1,
fmt=fmt@entry=0x7ffff50e9668 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff4fe70ee in malloc_printerr (ptr=<optimized out>, str=0x7ffff50e9830 "double free or corruption (fasttop)", action=1)
at malloc.c:4996
#4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) at malloc.c:3840
#5 0x00007ffff5904046 in std::string::reserve(unsigned long) () from /usr/lib/x86_64-linux-gnu/
#6 0x00000000006d1873 in push_back (__c=115 's', this=0xe8b348 <errorbuf+72>) at /usr/include/c++/4.8/bits/basic_string.h:1056
You can’t perform that action at this time.