I’ve been working at Sourcegraph for about 6 months now. During that
time, I’ve mostly been writing Go, in the context of server-side
development. I also gave a lightning
talk on reading the Go spec at
GopherCon.
During this time, I’ve been making notes of speed bumps I’ve run
into, as well as things I’ve liked about Go. This post is an
expanded version of those notes. I’ve tried my best to keep away
from abstract examples, and focus on actual things I’ve run into
myself.
Unfortunately, nix still has a rather steep learning curve. I have
been banging my head against the table quite a few times over the
past week, and this is AFTER I printed the manual and read most of
it :) In this note, I’ll take you along for the journey of a first
more serios experiment: building the latest emacs, with a few extras
enabled.
The Twelve-factor app is a methodology for
building software-as-a-service apps that was first formulated by
developers associated with Heroku. It's been ten years since the
first presentation of this methodology. Despite the criticism that
it is only applicable to Heroku and similar webapp services, it
remains a relevant yard stick for software-as-a-service
development. Some of its tenets have been incorporated into Docker
and thence into OCI, effectively making them the law of
container-land. This blog post looks at each of the twelve factors
and tries to evaluate whether they remain relevant or whether they
need updating.
We fixed the problems we found in 69 of the most popular open source
Python repositories — repositories you probably know and might even
use. At the bottom of this page is a list of the GitHub pull
requests we created but for the sake of summary some were
Tensorflow, Celery, Ansible, DALI, Salt, Matplotlib, Numpy, Plotly,
Pandas, Black, readthedocs.org, Scipy, PyTorch, rich, and some
repositories from Microsoft, Robinhood, Mozilla, and AWS.
Amazon has announced that all of the
modern Kindle e-readers will support the most popular ebook format
in the world, EPUB. The company recently updated their Send to
Kindle documentation and stated that it will add support for EPUB
later this year. Send to Kindle will suspend the ability to load in
MOBI, since it is an older file format and won’t support the newest
Kindle features for documents. If you have MOBI books already on
your Kindle, they will continue to be accessible. Amazon is also
disabling to the ability to send AZW to the Kindle.
Return to a world of two realities: one, everyday life; the other,
what lies behind it. To find out if his reality is a construct, to
truly know himself, Mr. Anderson will have to choose to follow the
white rabbit once more.
In the evening we watched The Matrix
Resurrections. At first I
didn't like the movie and was even considering to stop watching
it. But then it slowly got a bit better. To me the worst Matrix movie:
6 out of 10.
In this post I’d like to convince you that you should be running
Mypyc over your
code1
— especially if your code is a library you upload to PyPI — for both
your own benefit and that of the Python ecosystem at large.
Apple was kind enough to lend me a Mac Studio with 20-core M1 Ultra
CPU (16 performance cores / 4 efficiency cores), 64-core GPU, 128GB
unified memory, and an 8TB SSD. As spec’d, this is a $7999 system
with all the bells and whistles, but a more modest $3999 system
would lead to the same performance conclusions in this review.
James Bond has left active service. His peace is short-lived when
Felix Leiter, an old friend from the CIA, turns up asking for help,
leading Bond onto the trail of a mysterious villain armed with
dangerous new technology.
In the evening we watched No Time to
Die. I liked the movie somewhat and
give it a 7 out of 10.
I set out to beat macOS Monterey's default grep (2.6.0-FreeBSD) in a
microbenchmark that represents my daily file searching. I chose Go
because I like writing Go programs.
Unfortunately, in many cases Python can only run one thread at a
time, due to what’s know as the Global Interpreter Lock (“GIL”).
Other times it can run multiple threads just fine—it all depends on
the specific usage patterns.
But which usage patterns allow parallelism, and which don’t?
Naive mental models will give you inaccurate answers. So in this
article you’ll build a practical mental model of how the GIL works:
We’ll start by going through a series of increasingly more
accurate mental models of how the GIL works.
Then, we’ll see how our new, more accurate mental model can help
you predict where and whether parallelism bottlenecks will occur.
We released a blazingly fast Aho-Corasick
implementation,
written in Haskell, in 2019. This implementation was based on UTF-16
strings, since Haskell's text library uses that for its internal
string representation. However, the most recent major update of text
changed its internal string representation from UTF-16 to
UTF-8. This is good news for us, since most of our customer’s data
is ASCII, this update will cut our memory consumption in half. The
big problem though is that our highly optimized string search
library
alfred-margaret
assumes that its input is encoded as UTF-16 and uses that assumption
to cut a few corners to improve performance. In this post we will
illustrate the challenges we encountered implementing UTF-8 support
in alfred-margaret and also give some insights into how we optimized
our Haskell code for maximal performance.
Apple today announced Self Service Repair is now available,
providing repair manuals and genuine Apple parts and tools through
the Apple Self Service Repair
Store. Self Service Repair is
available in the US and will expand to additional countries —
beginning in Europe — later this year.
Everybody loves Alpine images because they are light and have a
smaller attack surface, but maybe they are not the best option
anymore. It's time to talk again about distroless images.
Looking for a quick solution to center a text or a div element in
CSS? This article is for you. We will focus on specific use cases
such as as vertical and horizontal centering, as well as how to
center things when you’re not using Flexbox or Grid.
Most resources on nix flakes, however, assume you're starting a
project from scratch. They don't give you much guidance about how to
convert an existing nix project to flakes.
In this blog post, we'll do just that. With a further constraint:
we'll keep the project working as a legacy nix project, and with
relatively minimal changes. That way, people who prefer flakes can
use flakes, people who don't can use legacy nix.
In the Zed project, we’ve developed
a command-line tool called
zq (and, yes, the name
“zq” is a play on “jq”) that is based on an orthogonal set of
dataflow operators.
Zed operators are like jq filters but they can be stateful. To
make this work, we simply borrowed the aggregate function concept
from the 50 year-old SQL model, though unlike SQL, Zed aggregate
functions can
stream their results
incrementally.
In short, zq is based on stateful dataflow while jq is based on
stateless dataflow.
A typeclass defines a set of methods that is shared across multiple types.
For a type to belong to a typeclass, it needs to implement the
methods of that typeclass. These implementations are ad-hoc: methods
can have different implementations for different types.
Have you encountered Haskell’s foldr function? Did you know that
you can use it to express any function on a list? What’s more,
there’s a way to derive similar functions for a large class of data
types in Haskell.
CPUs in Apple Silicon chips are different, as they contain two
different core types, one designed for high performance
(Performance, P or Firestorm cores), the other for energy efficiency
(Efficiency, E or Icestorm cores). For these to work well, threads
need to be allocated by core type, a task which can be left to apps
and processes, as it is in Asahi Linux,
or managed by the operating system, as it is in macOS. This article
explains how macOS manages core allocation in all Apple’s M1 series
chips, in what it terms asymmetric multiprocessing (AMP, although
others prefer to call this heterogeneous computing).
Set on the desert planet Arrakis, Dune is the story of the boy
Paul Atreides, heir to a noble family tasked with ruling an
inhospitable world where the only thing of value is the “spice”
melange, a drug capable of extending life and enhancing
consciousness. Coveted across the known universe, melange is a prize
worth killing for....
When House Atreides is betrayed, the destruction of Paul’s family
will set the boy on a journey toward a destiny greater than he could
ever have imagined. And as he evolves into the mysterious man known
as Muad’Dib, he will bring to fruition humankind’s most ancient and
unattainable dream.
Last Saturday I watched Dune
(2021) and
today, in the evening, I started in
Dune by
Frank Herbert. I've read Dune in the past, several times even, but
too long ago to have a fresh memory of it so a reread will be nice.