week 02, 2021

Big O Notation - explained as easily as possible

Data Structures and Algorithms is about solving problems efficiently. A bad programmer solves their problems inefficiently and a really bad programmer doesn't even know why their solution is inefficient. So, the question is, How do you rank an algorithm's efficiency?

The simple answer to that question is the Big O Notation. How does that work? Let me explain!

Source: Big O Notation - explained as easily as possible, an article by Conrad Reeves.

REST Servers in Go: Part 1 - standard library

This is the first post in a series about writing REST servers in Go. My plan with this series is to implement a simple REST server using several different approaches, which should make it easy to compare and contrast these approaches and their relative merits.

Developers who just start using a language often ask "what framework should I use to do X" as one of their first questions. While this makes total sense for web applications and servers in many languages, in Go the answer to this question is nuanced. There are strong opinions both for and against using frameworks. My goal in these posts is to examine the issue objectively from several angles.

Source: REST Servers in Go: Part 1 - standard library, an article by Eli Bendersky.

Creating Comfy FreeBSD Jails Using Standard Tools

Docker has stormed into software development in recent years. While the concepts behind it are powerful and useful, similar tools have been used in systems for decades. FreeBSD’s jails in one of those tools which build upon even older chroot(2) To put it shortly, with these tools, you can make a safe environment separated from the rest of the system.

Jails in FreeBSD is by no means a new tool (introduced in 4.X), but for a reason or another, I haven’t used them that often, which is a shame since they are so powerful. So I wanted to explore this concept in a concise and summarized manner.

Source: Creating Comfy FreeBSD Jails Using Standard Tools, an article by Topi Kettunen.

Running a fake power plant on the internet for a month

One of the systems often used to get more information about digital attackers are called honeypots. These mechanisms detect attempts at unauthorised use of computer systems. You could think of these as a digital version of bait cars used by the police to catch thieves. For this particular project I wrote a small HoneyTrap listener (an open-source project by DTACT) that can interact with systems scanning for devices on the s7comm protocol.

Source: Running a fake power plant on the internet for a month, an article by Stefan Grimminck.

Snow in the Netherlands

Late in the afternoon, after my brother had helped me with providing a wired internet connection in my home office, I went outside with Adam and Esme to have some fun in the snow. Alice didn't want to come, she had been outside earlier with Esme and Adam, but Adam couldn't get enough of the snow; he had been asking "When is it going to snow" ever since he arrived in the Netherlands. Well, today his dream came true.

Esme and Adam having a snowball fight
Esme and Adam having a snowball fight.
Snow on grass near the waterside
Snow on grass near the waterside.

After a snowball fight in and near a small playground close to our house we walked to another, larger playground. Esme and Adam worked together creating a small snowman.

Adam placing the head on the snowman
Adam placing the head on the snowman.
Adam posing with the snowman
Adam posing with the snowman.

Terminal Multiplexers

It's easy to take the terminal for granted. After all, modern terminal emulators like gnome-terminal, konsole, and the others included with Linux desktop environments are feature-rich applications that satisfy most of our needs. But sometimes we need more. We need to have multiple shell sessions running in a single terminal. We need to display more than one application in a single terminal. We need to move a running terminal session from one computer to another. In short, we need a terminal multiplexer.

Terminal multiplexers are programs that can perform these amazing feats. In this adventure, we will look at three examples: GNU screen, tmux, and byobu.

Source: Linux Command Line Adventure: Terminal Multiplexers an article by William E. Shotts, Jr.

Pipenv & Requests Author Kenneth Reitz Interview

Kenneth Reitz is a well-known software engineer, international keynote speaker, open-source advocate, who also focuses on photography and music production. He is well known for his many open-source projects, specifically Requests "simple, yet elegant HTTP library" and Pipenv Python Development Workflow for Humans. We are excited to have interviewed Kenneth! In this interview he talks about the top issues Python developers face while scaling applications, shares his thoughts on async / await paradigm in Python, speaks about his project PyTheory, and the "natural affinity" for software development.

Source: Interview with Kenneth Reitz, Pipenv & Requests libraries author by Evrone.

Ask Ethan: Is Light Fundamentally A Wave Or A Particle?

One of the most bizarre aspects of quantum physics is that the fundamental entities that make up the Universe, what we know as the indivisible quanta of reality, behave as both a wave and a particle. We can do certain experiments, like firing photons at a sheet of metal, where they act like particles, interacting with the electrons and kicking them off only if they individually have enough energy. Other experiments, like firing photons at small thin objects — whether slits, hairs, holes, spheres, or even DVDs — give patterned results that show exclusively wave-like behavior. What we observe appears to depend on which observations we make, which is frustrating, to say the least. Is there some way to tell, fundamentally, what the nature of a quanta is, and whether it’s wave-like or particle-like at its core?

Source: Ask Ethan: Is Light Fundamentally A Wave Or A Particle?, an article by Ethan Siegel.

Big Sur boot volume layout

When you format a disk and install Big Sur on it, making it a startup or boot volume, it has a standard structure, something that has changed greatly over the last few years. This article summarises all you need to know about the layout of APFS boot disks and volumes in Big Sur, whether running on an Intel or Apple Silicon Mac. Detailed information for Catalina and earlier is here.

Source: Big Sur boot volume layout.

Emacs Tramp tricks

Emacs is amazing. It’s a very different sort of thing than a code text editor like Vim or an IDE like VSCode. It’s a different way of thinking of how to interact with a computer, where you build up techniques on top of simple tricks that let you get amazing things done. Of course, part of the appeal/challenge is that you need to figure out how to make it work yourself. Since there’s not much in the way of gentle tutorials, lets look at what you can do with tramp to get a sense of what is possible.

Source: Emacs Tramp tricks, an article by Will Schenk.

Distributing Mac apps outside the App Store, a quick start guide

The Mac has always been very different from its close relative, iOS, especially when it comes to what a user is or is not allowed to run on their system. Even with the introduction of Apple Silicon, Apple has made it very clear that the Mac is still the Mac, and is still hackable, even when running on the new architecture.

What this means for us developers is that, when targeting the Mac platform, we have choices: we can distribute our apps independently, outside the Mac App Store, through the Mac App Store exclusively, or through both at the same time.

This article is my brain dump on the subject. It is meant to be a guide on the things that you’ll need to know about when distributing a Mac app outside the App Store, rather than a how-to tutorial. My hope is that having everything listed here will help demystify the process for beginners, and the descriptions of my own process will be useful as starting points.

Source: Distributing Mac apps outside the App Store, a quick start guide, an article by Guilherme Rambo.

Introduction to browser automation

If you've ever wondered what all the fuss is about with libraries like puppeteer, playwright, and selenium then this book is for you. If you're a longtime veteran of browser automation, but are curious about the "how's" and "why's," then this book is for you. If you've got some web automation experience under your belt, but are looking to sharpen your skills about web automation, then this book is for as well. Essentially, this book is for everyone. While it is for everyone, it's better enjoyed if you've done some programming, especially in JavaScript or NodeJS. Enough about that, let me give you some of my background.

Source: Headless Handbook Chapter 1: Introduction to browser automation, an article by Joel Griffith.

containerd development with multipass

About 18 months ago I started a project which developed directly against containerd. This presented a problem which I'd not really encountered before - Docker and Kubernetes on my Mac were no longer enough, I needed a Linux environment.

To begin with I just used an old 2016 model Dell XPS which gave me everyting I needed, but when others started to contribute, they were using Macs and so we had a problem. Multipass was the answer to our woes and we were pleasantly surprised by it and wondered why more people weren't using it every day.

Source: containerd development with multipass, an article by Alex Ellis.

The Kingdom

Roy has never left the quiet mountain town he grew up in, unlike his little brother Carl who couldn't wait to get out and escape his troubled past. Just like everyone else in town, Roy believed Carl was gone for good. But Carl has big plans for his hometown. And when he returns with a mysterious new wife and a business opportunity that seems too good to be true, simmering tensions begin to surface and unexplained deaths in the town's past come under new scrutiny. Soon powerful players set their sights on taking the brothers down by exposing their role in the town's sordid history.

But Roy and Carl are survivors, and no strangers to violence. Roy has always protected his younger brother. As the body count rises, though, Roy's loyalty to family is tested. And then Roy finds himself inextricably drawn to Carl's wife, Shannon, an attraction that will have devastating consequences. Roy's world is coming apart and soon there will be no turning back. He'll be forced to choose between his own flesh and blood and a future he had never dared to believe possible.

In the evening I started in The Kingdom by Jo Nesbø.

Why Haskell is our first choice

Haskell is the first programming language we reach for when we build production software systems. This likely seems unusual to anyone who only has a passing familiarity with the language. Haskell has a reputation for being an advanced language with a steep learning curve. It is also often thought of as a research language with limited practical utility.

Source: Why Haskell is our first choice for building production software systems, an article by Christian Charukiewicz.

A step-by-step guide for semantic functional code

Although not as popular as imperative programming languages, functional programming has taught developers to write semantic code for decades. When working with imperative and object-oriented languages, developers are often obliged to think of language abstractions such as abstract classes and loops. In contrast, programmers feel empowered to think of the problem at hand when using functional languages, and there are many reasons for that.

A step-by-step guide for semantic functional code, an article by Douglas Rocha.