a tumblelog
week 31, 2020

git log – the Good Parts

If you’re managing a complex git codebase with multiple developers, then you may well be using a tool like GitHub or BitBucket to delve into the history and figure out branch and merge issues.

These GUIs are great for providing a nice user interface for managing pull requests and simple histories and the like, but when the workflow SHTF there’s no substitute for using git log and its relatively little-known flags to really dig into the situation.

Source: git log – the Good Parts, an article by Ian Miell.

Time Traveling In Haskell: How It Works And How To Use It

I recently got to use a very curious Haskell technique in production: time traveling. I say this with the utmost seriousness. This technique worked like magic for the problem I was trying to solve, and so I thought I’d share what I learned. In addition to the technique and its workings, I will also explain how time traveling can be misused, yielding computations that never terminate.

Source: Time Traveling In Haskell: How It Works And How To Use It, an article by Danila Fedorin.

A Visual Tour of Backpropagation

At their core, neural networks are functions. They take some input, perform a series of computations, and produce an output. Though most networks operate in the realm of vectors and matrices, it can be a useful exercise to see them without the extra barrier of linear algebra. For this purposes of this explanation, we will only cover single variable functions, but the principles we will see can be extended into any number of dimensions.

Source: A Visual Tour of Backpropagation, an article by Jinay Jain.

Perl7 is a fork of values

And while everyone is wondering where perl7 is going, the other crucial question is where perl5 is going; will it stop where it is now (the current official plan), will there be a 5.34 (something I have repeated argued for because it makes no sense for the sunsetting release to have experimental features, and is lacking a perl5 executable out the box), will perl5 development continue as it did before? This is something that isn't talked about much and I'm not sure yet what will happen, but I am pretty sure that decision shouldn't be taken by the people who don't want to use it.

Source: Perl7 is a fork of values, an article by Leon Timmermans.

Exactly-Once Initialization in Asynchronous Python

A common situation in asyncio Python programs is asynchronous initialization. Some resource must be initialized exactly once before it can be used, but the initialization itself is asynchronous — such as an asyncpg database. Let’s talk about a couple of solutions.

Source: Exactly-Once Initialization in Asynchronous Python, an article by Chris Wellons.

Gripes With Go

You’ve read a lot of posts about the shortcomings of the Go programming language, so what’s one more.

  1. Lack of sum types
  2. Type assertions
  3. Date and Time
  4. Statements over Expressions
  5. Erroring out on unused variables
  6. Error handling

Source: Gripes With Go, an article by Akshay Oppiliappan.

The Case Against OOP is Wildly Overstated

You can’t rule the development world for decades without attracting some enemies. And object-oriented programming, which provides the conceptual underpinning for dozens of languages old and new, certainly has some enemies.

Maybe that’s why we’ve suffered through a never-ending series of hot takes about OOP. They’ve described it as a productivity-destroying disaster, a set of deceitful programming patterns, and a mediocre tool designed to help poor programmers hide their incompetence. OOP was even proclaimed dead (14 years ago, so take that one with a grain of salt).

What all these rants have in common is that they point out (rightfully) some of the pitfalls in modern software design and then conclude (wrongfully) that this indicates a terrible rot at the core of the programming world. Yes, object-oriented programming doesn’t look so great if you conflate it with sloppy design practices and fuzzy architectural thinking. But are these crimes really an unavoidable part of OOP? Or are they just one of the wrong paths we sometimes wander as programming neophytes, armed with too much confidence and too much curiosity?

Source: The Case Against OOP is Wildly Overstated, an article by Matthew MacDonald.

Aliasing in computer graphics

Most people who have come in contact with computer graphics know that aliasing commonly refers to jagged edges that occur when rendering triangles. In this article, we look at other manifestations of aliasing in 3D graphics, and attempt to theoretically unify them. We won't properly look at how to solve aliasing, only focusing on reasoning about the problem instead.

Source: Aliasing in computer graphics, an article by Apoorva Joshi.

Writing Robust Bash Shell Scripts

Many people hack together shell scripts quickly to do simple tasks, but these soon take on a life of their own. Unfortunately shell scripts are full of subtle effects which result in scripts failing in unusual ways. It’s possible to write scripts which minimise these problems. In this article, I explain several techniques for writing robust bash scripts.

Source: Writing Robust Bash Shell Scripts, an article by David Pashley.

Volucella zonaria

In the afternoon, when walking back to our house, I spotted what I believe to be a female Volucella zonaria; the hornet mimic hoverfly.

Side view of a Volucella zonaria female
Side view of a Volucella zonaria female.

The first of July my aunt contacted me on Messenger asking if I could identify an insect she had taken a photo of. I couldn't. But I used an app on my iPhone 5 (can't recall which one) which identified it as Volucella zonaria. Hence, why I believe the above insect to be a Volucella zonaria as well. And since males have less space between the eyes, I assume that this is a female.

The vocal red cat

On the way back to our house I encountered a very vocal red cat. It kept meowing at me, insisting to be petted which I did. It kept rolling on the sidewalk meowing and purring, requesting to be petted some more.

The vocal red cat rolling on the sidewalk
The vocal red cat rolling on the sidewalk.

Different approaches to HTTP routing in Go

There are many ways to do HTTP path routing in Go – for better or worse. There’s the standard library’s http.ServeMux, but it only supports basic prefix matching. There are many ways to do more advanced routing yourself, including Axel Wagner’s interesting ShiftPath technique. And then of course there are lots of third-party router libraries. In this article I’m going to do a comparison of several custom techniques and some off-the-shelf packages.

Source: Different approaches to HTTP routing in Go, an article by Ben Hoyt.

Referer and Referrer-Policy best practices

  • Unexpected cross-origin information leakage hinders web users' privacy. A protective referrer policy can help.
  • Consider setting a referrer policy of strict-origin-when-cross-origin. It retains much of the referrer's usefulness, while mitigating the risk of leaking data cross-origins.
  • Don't use referrers for Cross-Site Request Forgery (CSRF) protection. Use CSRF tokens instead, and other headers as an extra layer of security.

Source: Referer and Referrer-Policy best practices, an article by Maud Nalpas.

Caribena versicolor: first molt in my care

Just before 4pm I noticed that the Caribena versicolor I keep had molted for the first time in my care. In the early afternoon I had added water to the enclosures of each of the ten tarantulas I keep, mostly slings. And I guess the increase in humidity triggered the molting process in the little spider. Or maybe it was just ready.

Caribena versicolor after molting
Caribena versicolor after molting.

After I had taken two photos with my iPhone 5 with a LED ring light plus macro lens I noticed a small mealworm crawling around in the enclosure. I always crush the head of mealworms prior to feeding them to my spiders, but I guess I didn't do it right with this one.

As the Caribena versicolor shouldn't eat for at least a week after molting I removed the mealworm and tried to feed it to the Hapalopus sp. Colombia "large" I keep. This spider also molted recently; I found an exuviae with it the 21st of this month. But it was not interested in eating the small mealworm.

Hapalopus sp. Colombia "large"
Hapalopus sp. Colombia "large".

In the end I fed the small mealworm to the Chromatopelma cyaneopubescens, which detected the wriggling prey item and picked it up to eat it.

Random Strings and Integers That Actually Aren’t

Recently the topic of generating random-looking coupon codes and other strings came up on internal chat. My go-to for something like that is always this solution based on Feistel networks, which I didn’t think was terribly obscure. But I was surprised when nobody else seemed to recognize it, so maybe it is.

Source: Random Strings and Integers That Actually Aren’t, an article by Josh Williams.

Related: Avoiding Confusion With Alphanumeric Characters, an article by Matthew Grissinger.

Sudoku Solver in Python

This post describes a Sudoku solver in Python. Even the most challenging Sudoku puzzles can be quickly and efficiently solved with depth first search and constraint propagation.

Source: Sudoku Solver in Python, an article by Lior Sinai.

Making beautifulsoup Parsing 10 times faster

I was making a quick project that require to scrape some information from a website. BeautifulSoup is the library of choice.

Download takes 1-2 seconds per page, with high network latency because the server is in US and I am in London.

After writing the downloader, it takes more like 4-5 seconds per page, which is noticeably slow. How come? Could it be that large HTML is slow to parse?

Source: Making beautifulsoup Parsing 10 times faster.

Pterinochilus murinus having dinner

In the evening I noticed that the Pterinochilus murinus Red Color Form (RFC) I keep was out in the open, eating a mealworm that I had given to it earlier. Normally it eats inside its burrow, but now it was outside!

Pterinochilus murinus eating near its burrow entry
Pterinochilus murinus eating near its burrow entry.

I carefully moved the enclosure; a plastic container, and moved the clips away from the lid. Next, I got my iPhone 5 ready with a LED ring light and a macro lens.

Pterinochilus murinus eating on top of its burrow
Pterinochilus murinus eating on top of its burrow.

While I carefully took several photos the tarantula moved around a bit while holding its prey.

The spider has grown and changed a lot since it arrived at our house. As far as I know it has molted once while in my care.

Mastering sed: part 1

In this tutorial, we will go over the basics of using sed, an ancient and powerful text manipulator. This tutorial assumes basic experience with bash.

We will go over real sed examples that you can copy paste into your own terminal which explore various features and fundamental ideas of sed. At the end, we will have a summary of the fundamentals.

Source: Mastering sed: part 1, an article by Tyler Adams.

My Favorite JavaScript Tips and Tricks

Most of the programming languages are open enough to allow programmers doing things multiple ways for the similar outcome. JavaScript is no way different. With JavaScript, we often find multiple ways of doing things for a similar outcome, and that's confusing at times.

Some of the usages are better than the other alternatives and thus, these are my favorites. I am going to list them here in this article. I am sure, you will find many of these in your list too.

Source: My Favorite JavaScript Tips and Tricks, an article by Tapas Adhikary.

Highlights from Git 2.28

The open source Git project just released Git 2.28 with features and bug fixes from over 58 contributors, 13 of them new. We last caught up with you on the latest in Git back when 2.26 was released. Here’s a look at some of the most interesting features and changes introduced since then.

Source: Highlights from Git 2.28, an article by Taylor Blau.

A Complete Guide to Data Attributes

you can make up your own attributes. You just need to prefix them with data-* and then you’re free to do what you please!

Source: A Complete Guide to Data Attributes, an article by Chris Coyier.

Every self-help book ever, boiled down to 11 simple rules

Why not condense the repeated lessons of an entire genre into one article? That's what I've attempted here, after reading dozens of history's biggest bestsellers so you don't have to. Here is the essence of the advice I've seen delivered again and again.

The complete list of rules is:

  1. Take one small step.
  2. Change your mental maps.
  3. Struggle is good. Scary is good.
  4. Instant judgment is bad.
  5. Remember the end of your life.
  6. Be playful.
  7. Be useful to others.
  8. Perfectionism = procrastination.
  9. Sleep, exercise, eat, chill out. Repeat.
  10. Write it all down.
  11. You can't get it all from reading.

Source: The best self-help book advice distilled to 11 simple rules, an article by Chris Taylor.

The Strange Numbers That Birthed Modern Algebra

The 19th-century discovery of numbers called “quaternions” gave mathematicians a way to describe rotations in space, forever changing physics and math.

Source: The Strange Numbers That Birthed Modern Algebra, an article by Charlie Wood.