Huey
October 22, 2024

Lobsters

BazelCon 2024 recap

Just like that, BazelCon 2024 came and went. And just like that, Blog System/5 is about to turn 1 year old as the very first post of this newsletter was the recap of BazelCon 2023. Since then, this newsletter has amassed 1200+ subscribers and I have surpassed 20 years of blogging—so, thank you for your support, everyone!To celebrate this milestone, it’s obviously time to summarize the two events of last week: BazelCon 2024 and the adjacent Build Meetup. There is...

38 minutes ago

Lobsters

A deep look into our new massive multitenant architecture

Over 20+ years in which we have been in the Software Industry, we have learned a few important lessons. The two most important of them? Never reinvent the wheel, and never rewrite what is working. Those things are fun to do, but they usually end in pain. Our company was recently faced with an important scalability problem. How are we solving it? We reinvented the wheel, and rewrote what is working. Is that a symptom of our – let’s call...

about 1 hour ago

Lobsters

A report from the 2024 Image-Based Linux Summit

The following subscription-only content has been made available to you by an LWN subscriber. Thousands of subscribers depend on LWN for the best news from the Linux and free software communities. If you enjoy this article, please consider subscribing to LWN. Thank you for visiting LWN.net! The Image-Based Linux Summit has by now established itself as a yearly event. Following on from last year's edition, the third edition was held in Berlin on September 24, the day before All Systems Go! 2024...

about 2 hours ago

Lobsters

Rustls Outperforms OpenSSL and BoringSSL

Josh Aas, Joe Birr-Pixton, and Daniel McCarneyOct 22, 2024ISRG has been investing heavily in the Rustls TLS library over the past few years. Our goal is to create a library that is both memory safe and a leader in performance.Back in January of this year we published a post about the start of our performance journey. We've come a long way since then and we're excited to share an update on Rustls performance today.What is Rustls?Rustls is a memory safe...

about 3 hours ago

Lobsters

TLA from first principles

October 22, 2024 I'll be speaking at USENIX SRECon! I'm working on v0.5 of Logic for Programmers. In the process of revising the "System Modeling" chapter, I stumbled on a great way to explain the temporal logic of actions that TLA+ is based on. I'm reproducing that bit here with some changes to fit the newsletter format. Note that by this point the reader has already encountered property testing, formal verification, decision tables, and nontemporal specifications, and should already have...

about 4 hours ago

Lobsters

Svelte 5 is alive

After almost 18 months of development, comprising thousands of commits from dozens of contributors, Svelte 5 is finally stable. It’s the most significant release in the project’s history. Svelte 5 is a ground-up rewrite: your apps will be faster, smaller and more reliable. You’ll be able to write more consistent and idiomatic code. For newcomers to the framework, there’s less stuff to learn. Despite all that, Svelte is almost completely backwards-compatible with Svelte 4 — for the majority of users,...

about 6 hours ago

Lobsters

Representing Knowledge and Querying Data using Double-Functorial Semantics

View PDF Abstract:Category theory offers a mathematical foundation for knowledge representation and database systems. Popular existing approaches model a database instance as a functor into the category of sets and functions, or as a 2-functor into the 2-category of sets, relations, and implications. The functional and relational models are unified by double functors into the double category of sets, functions, relations, and implications. In an accessible, example-driven style, we show that the abstract structure of a 'double category of relations'...

about 6 hours ago

Lobsters

Multiset Rewriting Recipe Book

: 🍂 🎉 🎉 > 🍂💕 ; : 🌻 > 🍂 ; : 🍂 > ❄️ ; : ❄️ > 🌱 🎉 ; : 🌱 > 🌻 ; 🍂 Recipe Book is a small multiset rewriting system written in Lua. It's hopefully small enough to be easy to modify, learn from, and expand upon. It's worth noting that it's not the most robust engine. It has few peculiar edge cases such as empty rules (: > run-forever ;) and being...

about 6 hours ago

Lobsters

‘Reflections on Trusting Trust’, but completely by accident this time

Compilers are complicated. You just won’t believe how vastly, hugely, mind-bogglingly complicated they are. I mean, you may think C build systems are painful, but they’re just peanuts to compilers.- Douglas Adams, probablyThis blog post assumes you have some knowledge of LLVM internals - I’ll try to fill in some of the lesser-known gaps but there are likely some other, better resources out there for learning about that.I have only one other post on this blog at the time of...

about 7 hours ago

Lobsters

Debug Go core dumps with delve: export byte slices

Table of contents Not all bugs can easily be reproduced — sometimes, all you have is a core dump from a crashing program, but no idea about the triggering conditions of the bug yet. When using Go, we can use the delve debugger for core dump debugging, but I had trouble figuring out how to save byte slice contents (for example: the incoming request causing the crash) from memory into a file for further analysis, so this article walks you...

about 7 hours ago

Lobsters

The Crime Messenger: How Sky ECC Phones Became a Tool of the Criminal Trade

What do criminals say to each other when they think nobody can hear?The fall of Sky Global — an encrypted communications company that once promised limitless privacy — may be our best-ever chance to find out.For years, the company’s specially modified phones were an essential tool for fugitive bank robbers, global drug traffickers, and Serbian criminal organizations. In text messages and voice recordings, in groups and in one-on-one chats, these men discussed their next cocaine shipments, argued about the logistics...

about 8 hours ago

Lobsters

MIME types and atom bombs

by Evan Hahn, posted Oct 22, 2024I was recently doing some work with MIME types. As I was scrolling through a big list of them, one piqued my interest as it passed by: text/uri-list.The less interesting part: how this format works. It’s documented in a 1999 proposal marked “experimental” and is not an Internet standard “of any kind”. Basically, it’s a list of URLs separated by newlines, and it can have comments. Here’s what such a file might look like:#...

about 8 hours ago

Lobsters

Announcing Determinate Nix

Today, I’m excited to announce Determinate Nix, Determinate Systems’ distribution of Nix built for teams and optimized for the enterprise. Nix is extremely versatile and powerful, but as is often the case with free software projects, it is also unopinionated and “low policy.” As a result, getting Nix to work well in a development team requires a frustrating amount of configuration. For instance: Setting up access to a private binary cache requires figuring out access control, distributing credentials, and configuring...

about 8 hours ago

Lobsters

devenv is switching Nix implementation to Tvix

In February 2020, I went on a 16-day, 1200km moped trip across northern Thailand with a couple of friends. Somewhere in northern Thailand near Pai. As we drove for hours on end, I was listening to an audiobook fittingly called Crossing the Chasm. The book explores the challenges faced by nacent technologies on their way to mainstream adoption. In the years that followed, I couldn't help noticing the disconnect between Nix's devoted user base and its apparent lack of widespread...

about 9 hours ago

Lobsters

Ghostty 1.0 is Coming

After nearly two years of development and private beta testing1, I’m excited to share that Ghostty 1.0 will be publicly released in December 2024 as an open-source project under the MIT license. In this blog post, I want to restate the broader goals of the Ghostty project and outline the specific goals for the 1.0 release. I have ambitious plans for Ghostty, but I also want to set clear expectations for what to expect on day one versus what will...

about 9 hours ago

Lobsters

Against /tmp

I commented on Lobsters that /tmp is usually a bad idea, which caused some surprise. I suppose /tmp security bugs were common in the 1990s when I was learning Unix, but they are pretty rare now so I can see why less grizzled hackers might not be familiar with the problems. I guess that’s some kind of success, but sadly the fixes have left behind a lot of scar tissue because they didn’t address the underlying problem: /tmp should not...

about 10 hours ago

Lobsters

An experiment in fighting spam on public forms using “proof of work”

Spam is everywhere. If you have an email account, a mailbox, a website with comments, a cellphone, a social media account, a public form, etc. We all know it, it is a plague. Over the years, there have been multiple attempts to fight spam, with various degrees of success, some more effective than others, some with more side effects, some simple, some complex, some proprietary… Online, one of the most successful approaches has been captchas. Just like spam, these little...

about 12 hours ago

Lobsters

Use data that looks like data

Time for me to pass on something I've been practicing for years but haven't found written down somewhere.It's a simple thing. A practical thing. Forged in the trenches. It won't win any contests in which the audience gasps and says "oh, now that is clever." But it’s easy. Simple even. And it can save a lot of time and tears and, at the end of the day, isn't that some of the best stuff?Here it is:When debugging or testing your...

about 12 hours ago

Lobsters

MQTT turns 25 – here’s how it has endured

It’s October 2024 and I’m sitting here in my creative maker studio, wearing a bright t-shirt that excitedly bellows “MQTT 25”! To my left is a top-end Bambu Lab X1C 3D printer, that uses MQTT internally for communication. On my wall are a variety of connected gadgets that display data or that light up in response to MQTT notifications. Today is the official 25th anniversary of the publication of what would become the initial MQTT specification. The co-creator of MQTT...

about 13 hours ago

Lobsters

Risky Business

Mon, Oct 21, 2024 There are a variety of professions whose job it is to help businesses manage risks, for example, information security, accounting, and legal. And we generally expect those professions to reduce risk. But we also know that businesses take risks all the time, because while these professions reduce risk, and may even eliminate some risks, they don’t eliminate all risks. What is the responsibility of a professional in one of these fields when a business is taking...

about 13 hours ago

Lobsters

Taming the buck with a Type III compensator

I recently designed and built my first DC/DC converter, a synchronous buck regulating some hefty DC currents. It turned out to work okay-ish (except the overvoltage crowbar), but I had a nagging feeling that it could (and should) be improved further. Even though the prototype made it through a testing regime of load currents (up to the full rated load of 5A) effected via mechanical switches without self-destructing, one thing that kept bothering me was the substantial ringing in response...

about 13 hours ago

Lobsters

Lose your device, but keep your keys

In iroh we are using Ed25519 keypairs a lot. Nodes are identified by ed keypairs, documents are identified by keypairs, also authors, namespaces etc. A gossip topic is an arbitrary 32 byte blob, which conveniently fits an ed public key. With pkarr we have a great mechanism to publish information about keypairs. We are running a dns server, and we can also use the bittorrent mainline DHT for a fully peer to peer mechanism to publish and resolve pkarr packets....

about 14 hours ago

Lobsters

An opinionated beginner's guide to Haskell in mid-2019 (2019)

This is mostly intended as a guide for people who are beginners to Haskell, or have experience in other similar languages and are looking to learn Haskell. Depending on where you are in your Haskell journey, parts of this guide might not make sense. That’s perfectly normal, relax. (This is also not for you if you’re coming to Haskell because you’re interested in the connections with type theory or category theory. I’m the wrong person for that.) As a quick...

about 15 hours ago

Lobsters

Wired’s Attack on (“Privacy”|[SimpleX Chat])

The Wired article by David Gilbert focusing on neo-Nazis moving to SimpleX Chat following the Telegram's changes in privacy policy is biased and misleading. By cherry-picking information from the report by the Institute for Strategic Dialogue (ISD), Wired fails to mention that SimpleX network design prioritizes privacy in order to protect human rights defenders, journalists, and everyday users who value their privacy — many people feel safer using SimpleX than non-private apps, being protected from strangers contacting them. Yes, privacy-focused...

about 20 hours ago

Lobsters

How to secure your new VPS: a step-by-step guide

No trespassing allowedSo, your $5 VPS just arrived. All you've got is an IP address, a username, and a password. Now what?In this guide, I'll walk you through fortifying your VPS from zero to hero—covering essential security measures and then going beyond the basics to create a secure environment. We'll tackle everything from user management and SSH configuration to setting up a firewall and implementing a couple handy automations to keep your server in top shape.Note: This guide is tailored...

about 22 hours ago

Lobsters

BM𝒳: A Freshly Baked Take on BM25

We are proud to announce that researchers from Mixedbread and the Hong Kong Polytechnic University have developed a new lexical search algorithm, BMX, that outperforms the current standard BM25 across the board and is easy to use via Mixedbread's open-source Baguetter library. Read on to learn about BMX, how it works, our benchmarks, and how to use it in practice. If you want to jump right in, you can look into the paper and the library right here: BMX Paper:...

about 23 hours ago

Lobsters

Microsoft maintains its own Windows debloat scripts on GitHub

It’s no secret that a default Windows installation is… Hefty. In more ways than one, Windows is a bit on the obese side of the spectrum, from taking up a lot of disk space, to requiring hefty system requirements (artificial or not), to coming with a lot of stuff preinstalled not everyone wants to have to deal with. As such, there’s a huge cottage industry of applications, scripts, modified installers, custom ISOs, and more, that try to slim Windows down...

1 day ago

Lobsters

__init__.py files are optional. Here’s why you should still use them

If you’ve ever googled the question “Why do Python packages have empty __init__.py files?”, you could get the idea that Python packages wouldn’t work without them. This is a common misconception—they’ve been optional since Python 3.3! Why then, do most Python projects still have them? What are these files again? __init__.py files are often used to mark directories as Python packages. For example, a file structure like this: my_package/ __init__.py some_module.py will allow you to run: import my_package.some_module # or...

1 day ago

Lobsters

1+1=2 (2006)

1+1=2 Whitehead and Russell's Principia Mathematica is famous for taking a thousand pages to prove that 1+1=2. Of course, it proves a lot of other stuff, too. If they had wanted to prove only that 1+1=2, it would probably have taken only half as much space. Principia Mathematica is an odd book, worth looking into from a historical point of view as well as a mathematical one. It was written around 1910, and mathematical logic was still then in its...

1 day ago

Lobsters

Hide another detail

█████ ██ ██ ██ █████ ██████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ██ ██ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ████ ██ ██ ██ ██ ██████ October 21, 2024 It's been 5 years since I talked about showing/hiding Emacs dired details in style, a short post showcasing hide-details-mode (built-in) and diredfl (third-party). While my dired usage increased over the years,...

1 day ago

Lobsters

(2^136279841)-1 is the New Largest Known Prime Number

the Great Internet Mersenne Prime Search Today's Numbers GFLOP/s 192124501GHz-Days96062250CPUs & GPUs 2821399 Previous Day Stats Newly Factored546First Prime Tests274Verified Prime Tests8528 All exponents below 69369389 have been tested and verified.All exponents below 124399361 have been tested at least once. October 21, 2024 — The Great Internet Mersenne Prime Search (GIMPS) has discovered a new Mersenne prime number, 2136279841-1. At 41,024,320 digits, it eclipses by more than 16 million digits the previous largest known prime number found by GIMPS nearly...

1 day ago

Lobsters

Life of a Zed Extension: Rust, WIT, Wasm

Earlier this year, extensions landed in Zed, adding the ability to add more languages, themes, snippets, and slash commands to Zed. The extension system was built by Max and Marshall and in April, Max wrote an excellent blog post about some of the intricate engineering challenges behind extensions and how they overcame them. It also explains that extensions are run as WebAssembly (Wasm) modules and why and how Tree-sitter is used within Wasm. Half a year later, that's still all...

1 day ago

Lobsters

Self-publishing a book with reStructuredText, Sphinx, Calibre, and vim (2019)

I got inspired to write Digital Superpowers after realizing how straightforward it is to publish books these days. Anyone who can put together a manuscript can head on over to a direct publishing service and have it up and for sale. E-books are particularly straightforward to self-publish, but print-on-demand paperbacks are almost as easy. If you have dreams of getting a book out the door, now is a great time to do so. Writing and promoting any book is the...

1 day ago

Lobsters

Tauri 2.0 Stable Release

We are very proud to finally announce the stable release for the new major version of Tauri. Welcome to Tauri 2.0! What is Tauri? DefinitionTauri is a framework for building tiny and fast binaries for all major desktop (macOS, linux, windows) and mobile (iOS, Android) platforms.Developers can integrate any frontend framework that compiles to HTML, JavaScript, and CSS for building their user experience while leveraging languages such as Rust, Swift, and Kotlin for backend logic when needed. In a Tauri...

1 day ago

Lobsters

Naming things (2021)

There are only two hard things in Computer Science: cache invalidation and naming things. — probably Phil Karlton Some people complain about systems which adopt idiosyncractic names for things. car and cdr (and sometimes even cons) in Lisp are frequent targets. Here’s someone complaining about TeX’s ‘overly-cute jargon, like “glue”.’ The core of the problem Karlton refers to in the quote above is that the English language often applies the same word to things which would definitely be better modelled...

1 day ago

Lobsters

Booting Sun SPARC Servers

In early 2022 I got several Sun SPARC servers for free off of a FreeCycle ad: I was recently called out for not providing any sort of update on those devices… so here we go! The Devices Name Released Original MSRP Inflation-adjusted (2024) SPARCstation 20 Mar. 1994 $12,195 $26,080 Ultra 1 Creator Nov. 1995 $25,995 $53,276 Axil Ultima 1 Sep. 1996 $9,995 $19,939 NVRAM Woes Click to zoom. Sun SPARC machines store some of their BIOS configuration in a chip...

1 day ago

Lobsters

What are you doing this week?

What are you doing this week? Feel free to share! Keep in mind it’s OK to do nothing at all, too.

1 day ago

Lobsters

Everything I built with Claude Artifacts this week

21st October 2024 I’m a huge fan of Claude’s Artifacts feature, which lets you prompt Claude to create an interactive Single Page App (using HTML, CSS and JavaScript) and then view the result directly in the Claude interface, iterating on it further with the bot and then, if you like, copying out the resulting code. I was digging around in my Claude activity export (I built a claude-to-sqlite tool to convert it to SQLite I could explore it in Datasette)...

1 day ago

Lobsters

Pyinstrument 5 - Flamegraphs for Python

I’m proud to announce the release of Pyinstrument 5.0.0! This release brings something that’s been years in the making. Context First, some context: Pyinstrument is a statistical profiler for Python. That means you can activate it when you’re running your code, and pyinstrument will record what happens, and at the end, give you a report that tells you where the time was spent. The default output - the call stack view as rendered in terminal The normal mode for pyinstrument...

1 day ago

Lobsters

You Should Probably Still Pay Attention to Tokenizers

Last week I was helping a friend of mine to get one of his new apps off the ground. I can’t speak much about it at the moment, other than like most apps nowadays it has some AI sprinkled over it. Ok, maybe a bit maybe more just a bit – depends on the way you look at it, I suppose. There is a Retrieval-augmented generation (RAG) hiding somewhere in most of the AI apps. RAG is still all the...

1 day ago

Lobsters

phonebook: Manage DNS Records with Kubernetes

You can’t perform that action at this time.

1 day ago

Lobsters

GNU Guix - Build User Takeover Vulnerability

A security issue has been identified in guix-daemon which allows for a local user to gain the privileges of any of the build users and subsequently use this to manipulate the output of any build. Your are strongly advised to upgrade your daemon now (see instructions below), especially on multi-user systems.This exploit requires the ability to start a derivation build and the ability to run arbitrary code with access to the store in the root PID namespace on the machine...

1 day ago

Lobsters

Guix Build User Takeover Vulnerability

A security issue has been identified in guix-daemon which allows for a local user to gain the privileges of any of the build users and subsequently use this to manipulate the output of any build. Your are strongly advised to upgrade your daemon now (see instructions below), especially on multi-user systems.This exploit requires the ability to start a derivation build and the ability to run arbitrary code with access to the store in the root PID namespace on the machine...

1 day ago

Lobsters

Jujutsu in practice

This post is not about the Japanese martial arts Jiu-jitsu, it’s about a new VCS, or version control system. There are some great tutorials and introductions for Jujutsu, short jj, so I want to give some insight in how I use it day to day for this website. Initialize a repository You can initialize jj in an existing git repository like this: This will create a .jj directory next to .git. You can now use both git and jj, although...

1 day ago

Lobsters

There is no such thing as a global method (in Ruby)

What Ruby’s top-level methods actually are, who they belong to and how they are namespaced. A few days ago, a curious question was asked on /r/ruby, which can be boiled down to this: How are the methods of the Kernel module available in the top-level scope? The question was dedicated to rand method, but (as the author correctly suggests) it also applies to many seemingly “top-level” methods documented as belonging to the Kernel module, even as base as puts (print...

1 day ago

Lobsters

Dependent Types in Haskell, Part 4

The GHC team at Serokell continues its work towards dependent types in Haskell. Our ultimate goal is that Haskell becomes a language where the use of advanced type system features is not just possible but practical. In this report, Serokell’s GHC team members Vladislav Zavialov and Andrei Borzenkov describe their recent contributions. Here’s a brief overview of the topics covered in this report: Highlight: Wildcard binders in type declarations Highlight: Type syntax in expressions Type constructors in patterns Extension stability...

1 day ago

Lobsters

20 years of Linux on the Desktop (part 1)

by Ploum on 2024-10-20Twenty years ago, I had an epiphany: Linux was ready for the desktop. (*audience laughs*) I had been one of those teenagers invited everywhere to "fix" the computer. Neighbours, friends, family. Yes, that kind of nerdy teenager. You probably know what I mean. But I was tired of installing cracked antivirus and cleaning infested Microsoft Windows computers, their RAM full of malware, their CPU slowing to a crawl, with their little power LED begging me to alleviate...

1 day ago

Lobsters

Implementing attributes for plain text using subranges like Emacs

Oct 21, 2024 Emacs-style ranges on a text buffer that I can now hang attributes like color, decorations and click handlers on to. A plain text editor where I can move the cursor around with mouse or keyboard and type and delete text. I select some text, then press a shortcut to turn it into a more permanent border. The border grows and shrinks as I insert and delete text. Inserting/deleting text before a range moves it. Inserting/deleting text after...

1 day ago

Lobsters

Naming Conventions That Need to Die (2018)

Will Crichton   —   November 17, 2018 Names are an important tool of thought. They provide a loose, lightweight way to manage and structure knowledge. However, bad names inhibit learning and impede progress. We should root out and destroy the processes that lead to bad names. This one is first, because it is the most widespread disease afflicting the naming process in science and math. Inequalities: Cauchy-Schwartz inequality, Grothendieck inequality, Lubell–Yamamoto–Meshalkin inequality, etc. Constants: Planck constant, Avogadro constant, Boltzmann...

1 day ago

Lobsters

"Copyleft" in the context of GenAI

Photo by Tim Mossholder on UnsplashThere is a lot of discussion going on about “open source AI” these days. While self-proclaimed open source AI that is not clear in meaning is rampant, there is also a movement to define open source AI properly. The most prominent example is probably the Open Source AI Definition (OSAID), led by the Open Source Initiative. I recently attended the discussion in Paris the other day and was very inspired.At that time a question came...

1 day ago

Lobsters

ccls and LSP Semantic Tokens

I've spent countless hours writing and reading C++ code. For many years, Emacs has been my primary editor, and I leverage ccls' (my C++ language server) rainbow semantic highlighting feature. The feature relies on two custom notification messages $ccls/publishSemanticHighlight and $ccls/publishSkippedRanges. $ccls/publishSemanticHighlight provides a list of symbols, each with kind information (function, type, or variable) of itself and its semantic parent (e.g. a member function's parent is a class), storage duration, and a list of ranges. 1234567891011121314struct CclsSemanticHighlightSymbol { int...

1 day ago

Lobsters

Android "Password Store" client for pass discontinued

This repository has been archived by the owner on Oct 15, 2024. It is now read-only. You can’t perform that action at this time.

2 days ago

Lobsters

Clear up your Rails controllers with before_action wrappers

July 6, 2024 What does clear code mean to you? To me, it's all about communication. What does this say and how? — and how is the system communicated in our specific case? In our case, let's look at our Rails controllers. Because there's a pattern I keep coming back to, but not many people know about it. Today, let's learn how to define our own class method macros that wrap before_action. Our case: a feature flag based Rails controller...

2 days ago

Lobsters

Introduction to Zig

Welcome! This is the initial page for the “Open Access” HTML version of the book “Introduction to Zig: a project-based book”, written by Pedro Duarte Faria. This is an open book that provides an introduction to the Zig programming language, which is a new general-purpose, and low-level language for building robust and optimal software. If you like this project, and you want to support it, you can buy an eBook or a physical copy of the book on Amazon: You...

2 days ago

Lobsters

Memory Safety without Lifetime Parameters

This proposal describes the implementation of a memory-safe reference type that does not use lifetime annotations. The goal of the proposal is to: Explore the viability of memory safety without lifetime parameters. Explain the infeasibility of making legacy lvalue- and rvalue-references memory safe. Address common objections to safety models that use lifetime annotations. Safe references “Safe C++”[safecpp] introduced a comprehensive design for compile-time memory safety in C++. The borrow checking model in Safe C++ requires lifetime parameters, a feature that...

2 days ago

Lobsters

Mac Programming for Dummies (1999)

Over the years, I’ve accumulated a few computer books, some of which sit on the top shelf of the bookcase behind my desk.Cormen et al. – the canonical text for an undergraduate algorithms course. Bob Metcalfe’s PhD dissertation on packet switching. Brian Kernighan’s memoir about developing Unix at Bell Labs. The Soul of a New Machine, which won the Pulitzer for nonfiction in 1982.And, of course, Mac Programming for Dummies.Although For Dummies books are still published today, they were much...

2 days ago

Lobsters

Lost Media: Pokémon Fever (1999) VHS Tape

Earlier in the year I started getting obsessed with the idea of preserving old VHS recordings and bought myself a fancy TBC VCR, and just last week I was given the opportunity I was preparing for. Some months ago I had posted on Discord (a local/Philadelphia server) that I was looking for old VHS tapes, VCRs, and CRT TVs, and it spawned a conversation that kept the thread periodically resurfacing. Eventually, about two weeks ago I got tagged by a...

2 days ago

Lobsters

Implementing Regular Expressions in TypeScript Types (Badly)

Published on 2024-10-10   skalt/brzozowski-tsThis is a cautionary tale about how I ended up writing a (bad) regular expression parser and evaluator in pure TypeScript types.type HexStr<S extends string> = Recognize<"[0-9a-fA-F]+", S>; type IsMatch<S extends string> = HexStr<S> extends S ? true : false; const isHex: IsMatch<"deadbeef"> = true const notHex: IsMatch<"nope"> = false The novelty here is parsing and evaluating regular expressions at compile-time. The inspiration for this technique came from a comment from 2020 on the RegEx-validated string...

2 days ago

Lobsters

Why I’m skeptical of rewriting JavaScript tools in "faster" languages

I’ve written a lot of JavaScript. I like JavaScript. And more importantly, I’ve built up a set of skills in understanding, optimizing, and debugging JavaScript that I’m reluctant to give up on. So maybe it’s natural that I get a worried pit in my stomach over the current mania to rewrite every Node.js tool in a “faster” language like Rust, Zig, Go, etc. Don’t get me wrong – these languages are cool! (I’ve got a copy of the Rust book...

2 days ago

Lobsters

Responsive TOC leader lines with CSS (2021)

Not long ago I replaced my homepage of an image based overview with a very slim Table Of Contents version. The trickiest part was to make that responsive. I finally found a solution. As usual: no JavaScript involved.A table of contents (TOC) page is something coming from the good old book world. Here's an example:It lists the different chapters and on which page you can find them. For this kind of presentation there is a slight usability problem if it...

2 days ago

Lobsters

Good first issues contributing to Racket

Hi Someone asked about contributing to Racket during the Racket Town Hall. As an open source project contributions are welcome from everyone. If you are interested in contributing the best place to start looking is issues tagged #good-first-issue in the main Racket repo: issues tagged good first issue at github.com/racket/racket You might also want to check out issues on other repos included in the main distribution at https://github.com/racket or the issues for packages in the Racket Package Catalog all packages...

2 days ago

Lobsters

The Part of PostgreSQL We Hate the Most (2023)

This article was written in collaboration with Bohan Zhang and originally appeared on the OtterTune website. There are a lot of choices in databases (897 as of April 2023). With so many systems, it’s hard to know what to pick! But there is an interesting phenomenon where the Internet collectively decides on the default choice for new applications. In the 2000s, the conventional wisdom selected MySQL because rising tech stars like Google and Facebook were using it. Then in the...

2 days ago

Lobsters

The RAISE specification language, method, and tools

RAISE (“Rigorous Approach to Industrial Software Engineering”) is a product consisting of a formal specification language (The RAISE Specification Language, RSL), an associated method for software development, and supporting tools. RAISE is a formal method, inspired by VDM, but combining model-oriented specification (as in VDM) with algebraic specification, CSP-like concurrency, and a module concept. The intended use of RAISE is specification of systems, typically software systems, as part of their development. Project History RAISE was originally developed during the years...

2 days ago

Lobsters

Yet another open source Spotify client, written in Go

Yet another open-source Spotify Connect compatible client, written in Go. go-librespot gives you the freedom to have a Spotify Connect device wherever you want. To get started you can download prebuilt binaries for the latest release. Development prebuilt binaries are also available as GitHub Actions artifacts. To build from source the following prerequisites are necessary: Go 1.22 or higher Libraries: libogg, libvorbis, libasound2 To install Go, download it from the Go website. To install the required libraries on Debian-based systems...

2 days ago

Lobsters

PID 1 Bash script for Docker containers explained line by line

You wake up one morning, feeling bit spicy, daring to break rules, but you aren't the bravest one in town, so you choose something easy: "Let's break that rule about only running one process in a container". As an actual person that works in this garbage fire called software development and NOT a Medium shitposter, this is something that you might run into. Having multiple processes in a container involves that, at least, one of them should be the ruling...

2 days ago

Lobsters

nvidia/Llama-3.1-Nemotron-70B-Instruct-HF

","chat_template":"{{- bos_token }}\n{%- if custom_tools is defined %}\n {%- set tools = custom_tools %}\n{%- endif %}\n{%- if not tools_in_user_message is defined %}\n {%- set tools_in_user_message = true %}\n{%- endif %}\n{%- if not date_string is defined %}\n {%- set date_string = \"26 Jul 2024\" %}\n{%- endif %}\n{%- if not tools is defined %}\n {%- set tools = none %}\n{%- endif %}\n\n{#- This block extracts the system message, so we can slot it into the right place. #}\n{%- if messages[0]['role'] == 'system'...

2 days ago

Lobsters

How do you deploy in 10 seconds?

20 Oct, 2024 This post describes my lessons learned after 10 years running production environments in sizes ranging from "just getting started" to a "Series F" company with 4-9 SLAs. Like any good developer, I'm impatient and expect tasks to be fast, especially if I need to do them often, like deploying. Nothing is worse than hitting "deploy" and having a 10-15 minute delay before I can validate my changes. It's a pain felt by the whole team, multiple times,...

2 days ago

Lobsters

Jujutsu (jj), a git compatible VCS

It's quite a common opinion that git (while a big improvement on what came before) still has plenty of rough edges, particularly with regards to the user interface. At the same time, there's also a significant barrier to entry for a new version control system with all the tooling that's built up around git over the years, particularly if you want to try it in your workplace without migrating the entire company. jj is one of the latest round of...

2 days ago

Lobsters

Bitwarden version 2024.10.0 is no longer free software

well so it can be striped from us at any time? bitwarden locked and limited conversation to collaborators Oct 20, 2024 You can’t perform that action at this time.

2 days ago

Lobsters

Rust vs Go in 2024

Which is better, Rust or Go? Which language should you choose for your next project, and why? How do the two compare in areas like performance, simplicity, safety, features, scale, and concurrency? What do they have in common, and where do they fundamentally differ? Let’s find out, in this friendly and even-handed comparison of Rust and Golang. As it happens, I teach (and write about) both Go and Rust professionally, and I’m also a keen user of both languages, which...

2 days ago

Lobsters

Debian changes OpenSSH packaging

By Joe BrockmeierSeptember 27, 2024 In the wake of the XZ backdoor, the Debian project has revisited some of the patches included in its OpenSSH packages to improve security. The outcome of this is that the project will be splitting out support for Kerberos key exchange into a separate set of packages, though not until after the Debian 13 ("trixie") release expected next year. The impact on Debian users should be minimal, but it is an interesting look into the changes...

2 days ago

Lobsters

Which kernel is the most readable one?

Today, I realized that I don’t understand how the write syscall works. While I have a good grasp on the OS-Application interface, I have a very fuzzy understanding of OS-hardware interface. What would be the best way to learn that? My first idea is to open the Linux kernel and read that, but Linux does so many things that it might be hard to identify the fraction of the code I am really interested in. Are there better kernels for...

3 days ago

Lobsters

The IPv6 Transition

The ISP Column A column on things Internet Other Formats:     The IPv6 Transition October 2024 I wrote an article in May 2022, asking “Are we there yet?” about the transition to IPv6. At the time I concluded the article on an optimistic note, observing that we may not be ending the transition just yet, but we are closing in. I thought at the time that we won’t reach the end of this transition to IPv6 with a bang,...

3 days ago

Lobsters

SMURF: Beyond the Test Pyramid

This article was adapted from a Google Testing on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office.By Adam BenderThe test pyramid is the canonical heuristic for guiding test suite evolution. It conveys a simple message - prefer more unit tests than integration tests, and prefer more integration tests than end-to-end tests. While useful, the test pyramid lacks the details you need as your test suite grows and you...

3 days ago

Lobsters

Leveraging benchstat Projections in Go Benchmark Analysis

Go’s built-in micro-benchmarking framework is extremely useful and widely known. Sill, not many developers are aware of the additional, yet essential, benchstat tool allowing clear comparisons of Go A/B benchmark results across multiple runs. In 2023, benchstat received a complete overhaul making it even more powerful: projections, filtering and groupings were introduced allowing robust comparisons across any dimension, defined by your sub-benchmarks (aka “cases”), if you follow a certain naming format . In this post, we will get you familiar...

3 days ago

Lobsters

SMURF: Beyond the Test Pyramid

This article was adapted from a Google Testing on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office.By Adam BenderThe test pyramid is the canonical heuristic for guiding test suite evolution. It conveys a simple message - prefer more unit tests than integration tests, and prefer more integration tests than end-to-end tests. While useful, the test pyramid lacks the details you need as your test suite grows and you...

3 days ago

Lobsters

Blocking code is a leaky abstraction

Asynchronous code does not require the rest of your code to be asynchronous. I can’t say the same for blocking code. Disclaimer: I am one of the maintainers for smol, a small and fast async runtime for Rust. I’ve been involved in the Rust community for four years at this point. At this point, I’ve seen a lot of criticism of async. I’ve found it to be an elegant model for programming that easily outclasses alternatives. I use it frequently...

3 days ago

Lobsters

Phucking with Phishers

A few days ago, a friend messaged me, asking me to report his hacked Instagram account. When his account messaged me on Instagram a few days later, I had all but forgotten his warning. The message came in around midnight on a Friday evening, imploring me to vote for my friend in a competition. It also came with instructions: a link and the demand for a confirmation screenshot. The site they pointed me to is hosted on Vercel for free,...

3 days ago

Lobsters

Secret 3D Scans in the French Supreme Court

[ Lisez et partagez cet article en français ici ]For the last seven years, I have been campaigning to establish and defend the public’s right to access all French national museums’ 3D scans of their collections, starting with the prestigious and influential Rodin Museum in Paris. My efforts have reached the Conseil d’État, France’s supreme court for administrative justice, and a great deal is at stake. The museum and the French Ministry of Culture appear determined to lie, break the...

3 days ago

Lobsters

whippet: A work-in-progress garbage collector for Guile

You can’t perform that action at this time.

3 days ago

Lobsters

LLM inference library written in Rust with mistral.rs

mistral.rs. Here's an LLM inference library written in Rust. It's not just for that one family of models - like how llama.cpp has grown beyond Llama, mistral.rs has grown beyond Mistral. This is the first time I've been able to run the Llama 3.2 vision model on my own Mac M2 laptop: git clone https://github.com/EricLBuehler/mistral.rs.git cd mistral.rs cargo run --features metal --release -- -i --isq Q4K vision-plain -m lamm-mit/Cephalo-Llama-3.2-11B-Vision-Instruct-128k -a vllama This downloaded around 20GB of model files to ~/.cache/huggingface/hub/models--lamm-mit--Cephalo-Llama-3.2-11B-Vision-Instruct-128k,...

3 days ago

Lobsters

C-Reduce, a C and C++ program reducer

You can’t perform that action at this time.

3 days ago

Lobsters

The long road to lazy preemption

The following subscription-only content has been made available to you by an LWN subscriber. Thousands of subscribers depend on LWN for the best news from the Linux and free software communities. If you enjoy this article, please consider subscribing to LWN. Thank you for visiting LWN.net! By Jonathan CorbetOctober 18, 2024 The kernel's CPU scheduler currently offers several preemption modes that implement a range of tradeoffs between system throughput and response time. Back in September 2023, a discussion on scheduling...

3 days ago

Lobsters

Implementing an intermediate representation for ArkScript

ArkScript is a scripting language, running on a VM. To accomplish this, we had (as of September 2024) a compiler generating bytecode for the virtual machine, receiving an AST from the parser (and a few other passes like name resolution, macro evaluation, name and scope resolution…).Exploring new optimizationsThe only thing we could optimize was the virtual machine and the memory layout of our values, and some very little things directly in the compiler, like tail call optimization. Having implemented computed...

3 days ago

Lobsters

A Selective Survey of Efficient Speculative Decoding Techniques for LLM Inference

Doing inference using LLMs in production is not easy, it requires massive compute and as a result it can get expensive pretty quickly. This has led to the development of several techniques to make the inference more cost and compute efficient. One such technique that has emerged in the last couple of years is speculative decoding. When doing inference on LLMs, one full forward pass of the model results in the generation of a single token. This is a highly...

4 days ago

Lobsters

The Multics Maclisp Compiler: The Basic Hackery – A Tutorial (1977)

Every decade this unpublished but nonetheless popular 1977 paper of mine on the Multics Lisp Compiler (lcp) seems to require upgrade to a new text-representation technology. First written in Multics runoff and printed out in 80-column format justified by padding with spaces, converted in 1988 to the then-reasonable TJ-Pigsnout (a SCRIBE®-like laserwriting text-justifier of my own), "The LCP Paper" now reappears in the clothes of the 90's, HTML, but hopefully, this time, it will publish itself via the miracle of...

4 days ago

Lobsters

You could have invented denotational semantics

Suppose you want to know if some property about a program or a programming language holds. For example, you might wish to know whether a static analysis you’ve come up with provides a runtime guarantee. You could just write some tests to verify it empirically, but you can’t exhaustively test all possible cases, so this isn’t enough to say for certain there aren’t corner cases where it fails. The only way to be completely certain is to prove your property,...

4 days ago

Lobsters

Decoding Europa Clipper

Europa Clipper is a NASA mission that will study Europa, Jupiter’s icy moon, to investigate if it can support life, perhaps in hydrothermal vents in a global ocean under the ice crust. The mission launched on Monday from Cape Canaveral, after some days of delay due to Hurricane Milton. As happened with Psyche one year ago, the launch trajectory was such that the first pass over the Allen Telescope Array, in northern California, started only about 1.5 hours after launch....

4 days ago

Lobsters

A crash course in Go assembly, speeding up calculations 450%

I want to take advantage of Go’s concurrency and parallelism for some of my upcoming projects, allowing for some serious number crunching capabilities. But what if I wanted EVEN MORE POWER?!? Enter SIMD, Same Instruction Muliple Data [“sim”-“dee”]. Simd instructions allow for parallel number crunching capabilities right down at the hardware level. Many programming languages either have compiler optimizations that use simd or libraries that offer simd support. However, (as far as I can tell) Go’s compiler does not utilizes...

4 days ago

Lobsters

superlinker: a tool for reinterpreting ELF executables and shared libraries

Superlinker is a tool that can combine executables and shared libraries into even larger products, just like object files are combined into executables and shared libraries. Wouldn't it be funny if your entire OS image consisted of only one shared object that was really, really large? Superlinker is structured essentially like a compiler whose inputs and outputs are interpreted programs (ELF ET_DYN PIE executables or shared libraries). Its frontend lifts an ELF ET_DYN object into an abstract and simple intermediate...

4 days ago

Lobsters

My NumPy Year: Creating a DType for the Next Generation of Scientific Computing

We had a face-to-face talk with Sebastian Berg, a NumPy maintainer, and Peyton Murray, who had been working on this project before me but had left to work on other things. I took over for him. We were discussing how to actually implement this Above, here’s a diagram of what a string array in Python 3 looks like. If you want to access the second element of the array, you need to offset five UTF-32 characters into the array. You...

4 days ago

Lobsters

Typst 0.12 is just ... better

From its very beginnings in early 2019, our goal with Typst was to develop a fully-fledged typesetting engine that scales from the simplest to the most complex documents. We wanted to combine the best aspects of existing systems, learning lessons from the past, while mixing in new and unique ideas. Typst already delivers on many of its promises, yet a lot of work remains ahead of us. With Typst 0.12, we set out to make meaningful progress on Typst's foundations....

4 days ago

Lobsters

Focus on decisions, not tasks

A quote from Every Page Is Page One that has deeply changed how I approach technical writing: In technical communication, we don’t talk much about decision support; we talk about task support… In many cases, the information people need to complete their tasks is not information on how to operate machines, but information to support their decision making… simply documenting the procedures is never enough… What I am talking about is documenting the context, letting users know what decisions they...

4 days ago

Lobsters

Welcome to transputer.net (2007)

This is a picture of my first transputer. In the strict sense it's not really true, because only one half of this processor belongs to me. In 1991 when I was a student at the Vienna University of Technology (TU Vienna) a friend and I decided to build a transputer system. At this time we were short of money and transputers were costly. So we pooled expenses, not only for this transputer, but also for the dynamic RAM, the board...

4 days ago

Lobsters

I've been writing software for the last 25 years. Here some things I learned so far

The computer was born to solve problems that did not exist before. – Bill Gates Processes are secondary, doesn’t matter if it is Agile, Kanban or Waterfall: you just need to have an exact understanding of the problem to be solved and plan/organize your work around that. And, of course, be able to adapt. Changes will occur during the execution and it’s fine; Flexibility and adaptability are key to effectively solve the right problem. Protip: First, solve the problem. Then,...

4 days ago

Lobsters

setBigTimeout

by Evan Hahn, posted Oct 15, 2024In short: JavaScript’s setTimeout breaks after ~25 days. I made setBigTimeout, a silly module to get around this problem. See the package on npm or the source code.setTimeout is JavaScript’s way of delaying code. You provide a timeout, in milliseconds, and a function to call after that time has elapsed.1setTimeout(() => { console.log("This runs after 2 seconds"); }, 2000); So far, so good.In most JavaScript runtimes, this duration is represented as a 32-bit signed...

4 days ago

Lobsters

Cross-Process Spectre Exploitation

I will walk through a cross-process Spectre attack I developed, partly while interning at Open Source Security, Inc. Cross-Process Spectre I have developed an exploit to demonstrate the impact of an incomplete Indirect Branch Prediction Barrier (IBPB) in Intel Golden Cove and Raptor Cove that I discovered. IBPB is meant to invalidate all indirect branch target predictions, which includes returns and jump/call instructions that take a memory or register operand (i.e., indirect branches). However, due to buggy microcode -- which...

4 days ago