Plurrrr

week 13, 2022

Roll your own Ngrok

Ngrok is a fantastic tool for creating a secure tunnel from the public web to a machine behind NAT or a firewall. Sadly, it costs money and it’s proprietary. If you’re a developer, odds are that you’re already renting a server in the public cloud, so why not roll your own ngrok?

It turns out that you can do it using free, off-the-shelf tools, with no sophisticated scripting required! In this article, I’ll show you how.

Source: Roll your own Ngrok with Nginx, Letsencrypt, and SSH reverse tunnelling, an article by Jacob Errington.

Transformers for software engineers

Ever since its introduction in the 2017 paper, Attention is All You Need, the Transformer model architecture has taken the deep-learning world by storm. Initially introduced for machine translation, it has become the tool of choice for a wide range of domains, including text, audio, video, and others. Transformers have also driven most of the massive increases in model scale and capability in the last few years. OpenAI’s GPT-3 and Codex models are Transformers, as are DeepMind’s Gopher models and many others.

Source: Transformers for software engineers, an article by Nelson Elhage.

Faster sorting with Go generics

In this post, I'll dive deep into why these generic functions are faster than the existing ones in the sort package, even though they use precisely the same algorithm and loop structure. This should hopefully be an interesting peek into how Go generics are implemented, in comparison to the existing dynamic dispatch mechanism (interfaces).

Source: Faster sorting with Go generics, an article by Eli Bendersky.

The Reliability of Optical Disks

Optical media, and BluRay M-Discs in particular, are the most reliable way to do long term, offline data storage. CDs and DVDs have lasted for 10-20 years and can still be read successfully. BluRay media offers disk capacity of 25-128GB, and should have similar longevity. The claims of special M-Disc media lasting 100+ years seems plausible - unfortunately, it will take another 99 years before we can confirm it!

Anyone who wants an offline, ransomware proof, 20+ year backup should consider BluRay optical media.

Source: The Reliability of Optical Disks, an article by Murray Grant.

Making whitespace visible in Vim

Now and then I use vim at $work. Because I wanted whitespace to be visible I added the following to my ~/.vimrc:

set list
set listchars=eol:⏎,tab:⍿·,trail:×

Note that this also makes trailing whitespace visible, which I prefer.

Vim with whitespace made visible
Vim with whitespace made visible.

In the above screenshot, showing an example listing from Java The Complete Reference Twelfth Edition by Herbert Schildt; page 188-189, you can clearly see the whitespace. I use tabs to indent 4 characters. Also, there is some trailing whitespace, marked by the × characters at the line with the cursor at the end.

Note, however, that if you copy paste using the mouse the characters representing whitespace are included. To prevent this, list has to be toggled off. I bound F12 to toggling list by adding the following to my ~/.vimrc:

map <f12> :set list!<cr>

Discovering basic blocks

Code comes in lots of different forms, such as text, bytecode, and other data structures common in compilers—like control-flow graphs (CFGs). CFGs are commonly used in compiler internals for analysis and optimization, and in reverse engineering for lifting structure out of linear assembly code.

In this post, we will learn how to construct a CFG from a subset of CPython (3.6+) bytecode. We will also coincidentally be using Python (3.6+) as a programming language, but the concepts should be applicable to other bytecode and using other programming languages.

Source: Discovering basic blocks, an article by Max Bernstein.

Mac Setup for Web Development [2022]

This year (2022) I bought the new MacBook Pro after having used the MacBook Pro 2015 for the last years. This first month has been super exciting and I am up running working efficiently on my personal and professional web development projects as a freelance JavaScript developer. Here I want to share with you my Mac setup for web development that I have used.

Source: Mac Setup for Web Development [2022], an article by Robin Wieruch.

Foundryside: Good

In my afternoon break I finished Foundryside The Founders Trilogy Book 1 by Robert Jackson Bennett. I liked the book. It gave me the same vibes as the first Mistborn book by Brandon Sanderson. So if you've read that one, give Foundryside a try. And vice versa.

Still Rusting - One Year Later

It has been about a year since the DeisLabs team starting using Rust in a “serious” project. About this time last year, we started work on what became the Krustlet project. Since then, we have been using Rust extensively across our projects and have learned a ton more about the language’s strengths and weaknesses. As “Rust After the Honeymoon” posts currently seem to be all the rage, we thought we could contribute a little to the discussion with our experiences writing applications for the cloud world.

Source: Still Rusting - One Year Later, an article by Taylor Thomas.

Shorefall

A few years ago, Sancia Grado would’ve happily watched Tevanne burn. Now, she’s hoping to transform her city into something new. Something better. Together with allies Orso, Gregor, and Berenice, she’s about to strike a deadly blow against Tevanne’s cruel robber-baron rulers and wrest power from their hands for the first time in decades.

But then comes a terrifying warning: Crasedes Magnus himself, the first of the legendary hierophants, is about to be reborn. And if he returns, Tevanne will be just the first place to feel his wrath.

Thousands of years ago, Crasedes was an ordinary man who did the impossible: Using the magic of scriving—the art of imbuing objects with sentience—he convinced reality that he was something more than human. Wielding powers beyond comprehension, he strode the world like a god for centuries, meting out justice and razing empires single-handedly, cleansing the world through fire and destruction—and even defeating death itself.

Like it or not, it’s up to Sancia to stop him. But to have a chance in the battle to come, she’ll have to call upon a god of her own—and unlock the door to a scriving technology that could change what it means to be human. And no matter who wins, nothing will ever be the same.

In the evening I started in Shorefall, The Founders Trilogy Book 2 by Robert Jackson Bennett.

Pure Print-Style Debugging in Haskell

For developers working in impure languages, print debugging is often the first stop for figuring out where and why something is going wrong. In Haskell, where printing something to the screen is a side effect to avoid, it might seem like you need to give up print debugging for the sake of purity. Thankfully, you can have your cake and eat it too… if you're okay with eating buggy cake.

The Debug.Trace module, which is part of base, provides tools for print-style debugging for our pure functional programs. In this article, we’ll walk through a hands-on example using print-style debugging to narrow down the problem with a small example program. You’ll learn how to apply tracing to finding bugs in a Haskell program, and you’ll learn a little bit about Unicode along the way.

Source: Pure Print-Style Debugging in Haskell, an article by Rebecca Skinner.

Monads

A monad is a common abstraction. While typically associated with Haskell, monads also exist in C# and other languages.

Source: Monads, an article by Mark Seemann.

Pickle Serialization in Data Science: A Ticking Time Bomb

Unfortunately, pickle’s incredibly simple interface comes at a cost. Pickle’s deserializer, which is called into whenever we invoke “pickle.load” (or “torch.load”!), is a full-fledged virtual machine, able to run arbitrary code within the process that loads the object. It is expressly built to allow serialized objects to come with arbitrary instructions on how to deserialize them. In other words, Pickle deserialization readily supports running arbitrary code specified by the serializer (the original author of the file).

Source: Pickle Serialization in Data Science: A Ticking Time Bomb, an article by Hank Lee.

Elliptic Curve Cryptography for Beginners

Elliptic curve cryptography (ECC) is a type of public-key cryptographic systems. This class of systems relies on really difficult "one-way" math problems – problems that easy to compute one way and intractable to solve the "other" way. Sometimes these are called "trap-door" functions – easy to fall into, extremely difficult to get out of.

Source: Elliptic Curve Cryptography for Beginners, an article by Matt Rickard.

Understanding Layout Algorithms

When I started digging into the layout algorithms, everything started to make more sense. Mysteries that had bothered me for years were solved. I realized that CSS is actually a pretty darn robust language, and I started to really enjoy writing it!

Source: Understanding Layout Algorithms, an article by Joshua Comeau.