HTTP/3 builds on User Datagram Protocol (UDP), and is already being
used by prominent internet companies such as Google and Facebook. If
you’re using Chrome and connecting to a Google service, you’re
probably already using QUIC.
Akamai security researchers discovered Panchan, a new
peer-to-peer botnet and SSH worm that emerged in March 2022 and has
been actively breaching Linux servers since.
Web scraping describes the various techniques employed in extracting
data from websites. More often than not, this is done
programmatically using tiny programs called spiders. However, web
scraping offers insidious challenges and obstacles that might not be
immediately obvious. One of them is issues with data validity.
The Original Sin of Rust async programming is making it
multi-threaded by default. If premature optimization is the root of
all evil, this is the mother of all premature optimizations, and it
curses all your code with the unholy Send + 'static, or worse yet
Send + Sync + 'static, which just kills all the joy of actually
writing Rust.
git snap creates a commit that includes most local changes on a
user- and machine-specific snapshots branch. It doesn't ask for a
commit message. It also doesn't touch the working tree, saves and
restores the index, and switches back to the branch that was checked
out before running git snap. In other words, everything looks the
same as before after running git snap, but your changes are safely
stored by Git and can be pushed to a remote for redundancy or
sharing. This is in contrast to stashes.
Rust does not provide the execution context required to execute
Futures and Streams. This execution context is called a
runtime. You can't run an async Rust program without a runtime.
A new iteration of HTTP, the protocol that powers the World Wide
Web, is now with us. Designated HTTP/3, it’s been in development
since 2018 and is currently in the Internet Draft stage of the
Standards Track.
I’ve always found Go’s standard library very
approachable to read. Parts of the standard library include concepts
that are self-contained and do not require too much prior context to
dive into. When I read that the sorting algorithm for Go has
changed¹
to something called “pdqsort”, I thought it would be nice to go take
a look and learn about it.
Here's yet another note-to-self on using jq, this time to transform
a flat list of order totals and dates into a summary of total order
values by year.
Our engineering team focuses on getting the maximum amount of
information from the network while sending as little traffic as
possible. This lean approach to network discovery is driven by our
goal of being fast and safe for all networks. The more we can learn
about a system from a single measurement, the less traffic we create
and the quicker things run. In this post, I want to share how Rumble
uses one of the most common network protocols to obtain a wealth of
information about network-attached devices.
I have seen a lot of programmers over the years express concerns;
what if something accidentally conforms to an interface and causes
some horrible bug? What if I have an interface for Shoot() for a
video game and some object wanders in that Shoot()s a real gun by
accident? Isn't it safer to formally declare conformance?
As I’ve journeyed deeper into the world of NixOS I have realized
that there were some major issues with the way I managed machine
configurations. What I’m presenting here is the outcome of that
cleanup work.
I was recently reading the first few chapters of Software Design
for
Flexibility
(SDF). Doing so reminded of the duality between closures in
Functional Programming (FP) and object instances in Object-Oriented
Programming (OOP). When I'd heard it previously this connection had
seemed tenuous at best and irrelevant at worst. However when I
considered this duality this last time, I was able to internalize
its significance.
The good news is that Apple has done most of the heavy lifting here
by having built a pluggable authentication module (PAM) for Touch
ID; all you need to do is essentially turn it on, which takes just a
few simple steps.
In this post, we’ll cover the details of garbage collection in
Python. First, we’ll review the basics about memory management and
why we need garbage collection. Then we’ll look at how Python
implements garbage collection. Finally, we’ll take a practical look
at how you should think about garbage collection when writing your
Python applications.
With pandas it is easy to read Excel files and convert the data into
a DataFrame. Unfortunately Excel files in the real world are often
poorly constructed. In those cases where the data is scattered
across the worksheet, you may need to customize the way you read the
data. This article will discuss how to use pandas and openpyxl to
read these types of Excel files and cleanly convert the data to a
DataFrame suitable for further analysis.
Five members of the Missing Persons Task Force investigate the
mysterious disappearance of 17-year-old Evi. While unraveling the
girl's troubled relationship with her parents, which leaves her
father as one of the prime suspects, they discover that her life had
recently taken a bizarre turn, with the teenager seen at several sex
parties, receiving expensive gifts from a shadowy new friend. Was
Evi the victim of a pimp, or did her father discover his daughter's
double life and lose control?
In the evening Esme and I watched
Vermist on Netflix (Missing
Persons Unit). I liked the movie and give it a 7 out of 10.
Apple’s M1 chips have an “unpatchable” hardware vulnerability that
could allow attackers to break through its last line of security
defenses, MIT researchers have discovered.
We mock PostgreSQL tables using Docker and
pytest-postgresql,
allowing unit testing for application code queries without a remote
database. This allows our tests to cover both the SQL logic and the
Python code at the same time, all without hitting network resources.
I've now been using NixOS for one year. I use it to manage both my
private PC and my laptop at work. Overall, it has been a great
experience. I really appreciate the scale and control it brings to
my digital life.
In May 2022, I stepped it up a notch by adding a third device
running NixOS, namely a custom-built router! After a month of
interspersed work I had successfully replaced my home network
router.
In this blog post I'll go through why I embarked on this journey,
how I did it, and lessons learned.
In web development,
Hydration
is a technique to add interactivity to server-rendered HTML. It’s a
technique in which client-side JavaScript converts a static HTML web
page into a dynamic web page by attaching event handlers to the HTML
elements.
However, attaching event handlers to the Document Object Model (DOM)
is not the most challenging or expensive part of hydration.
In this article, I’ll explain why I believe hydration is
overhead. It’s not the solution; it’s a hack that consumes memory
and slows down startup, especially on mobile. For the sake of this
article, let’s define overhead as work that can be avoided and still
leads to the same end result.