Way too many ways to wait on a child process with a timeout
I often need to launch a program in the terminal in a retry loop. Maybe because it's flaky, or because it tries to contact a remote service that is not available. A few scenarios:
The latest blog posts to take off on Hacker News. 21,819 posts.
I often need to launch a program in the terminal in a retry loop. Maybe because it's flaky, or because it tries to contact a remote service that is not available. A few scenarios:
I just did a massive spring cleaning of one of my servers, trying to clean up what has become quite the mess of clutter. For every website on the server, I either:
Pros and cons for different typesetting engines from engineering perspective and why PPReseume chose LaTeX.
Matthew Bird Portfolio
Every year for Black Friday Cyber Monday (BFCM), we put together a real-time visualization of purchases made through Shopify-powered merchants worldwide. This year we're cooking up something big, and in anticipation we wanted to show you how we built the globe last year. Video of BFCM 2023 Globe Besides going for…
Get an introdcution to Early Cascade, a novel process injection technique that is effective against top tier EDRs while avoiding detection.
I am using a very simple system for remembering commands and procedures, and for tracking what I work on. I have two plain text files called notes.txt and worktime.txt. In the notes file, I write d…
Rust is my favorite programming language. I've been writing Rust for about 6 years, from college to professionally, and I'm vocal about how helpful the compi...
How to draw text to a Vulkan renderpass without binding a single texture
"I've worked with a couple of Staff Engineers on different teams in the past and I've seen them do different things, but I've not been able to pin down exactly what they do." I get this question quite frequently. Sometimes from engineers looking to elevate their roles.
Didn't even make it out of the gate.
Our CPUs were dying, the bug was temporarily un-fixable, and we had no viable path forward. Here's how we managed to survive.
I spent past three weeks working on refactoring and fixing legacy code…
Macros, iterators, patterns, error handling and match make Rust almost perfect
Deploying modern web apps – with all the provisions needed to be fast and secure while easily updateable – has become so hard that many developers don’t dare do it without a PaaS (platform-as-a-service). But that’s ridiculous. Nobody should have to pay orders of magnitude more for basic computing just to make…
Incomplete data structures challenge our notion of mutability
Three months ago, I wrote about why you might want to use panics for error handling. Even though it’s a catchy title, panics are hardly suited for this goal, even if you try to hack around with macros and libraries. The real star is the unwinding mechanism, which powers panics. This post is the first in a series…
Viewing my binary file with ImHex. The pattern language pane, on the right,...
Personal blog of Julien (jvoisin) Voisin
Nine months ago, we switched to a monorepo. Here's a detailed look at what led to the change, how we approached it, and what the experience has been like.
It has one foot in each world but belongs to neither.
I’ve built a lot of unofficial software for my schools, Brown University and previously Macalester College. To name a few: an “everything app” called 75grand with dining hall menus, Moodle assignments, building hours, an event calendar, and more; two unfinished course catalogs; and a university shuttle tracker. None…
A week ago, I finally got round to implementing an idea I’d been toying with for years: what if your computer made a little bit of noise every time it sent data to Google? From studying logs, I’d long known just how many sites send all your visits and clicks to (at least) Google, but a log that you have to manually…
Python 3.13 is out and it's time to run some benchmarks to see how well it performs with the new free-threaded mode.
A look at some unfriendly Zig syntax
A deep dive into evolutionary algorithms through the lens of low-poly image generation. This exploration covers genetic algorithm theory, custom Ruby implementation using the Petri Dish framework, and detailed analysis of genetic operators including roulette wheel selection, random midpoint crossover, and nudge…
Writing is one of the most powerful forms of communication, and it’s useful in a multitude of roles and contexts. As a blog-writing , documentation-authoring , twitter-shitposting DevEx engineer I spend a lot of my time writing. Recently, someone paid me a very nice compliment about a blog I’d written and asked how…
Security testing starts with understanding vulnerabilities. The CVE website lists known software flaws. The OWASP Top Ten highlights common weaknesses. With this knowledge, we can improve our Go development. This article shows how to put in place robust practices. They are fuzz inputs, verify dependencies, and use…
A primer on GPU architecture and computing
Explore 3 limitations of using frame pointers for stack unwinding and profiling in Linux that are often overlooked, plus possible future alternatives.