Category: Development

Python-BPF: A New Way to Write eBPF Programs in Python

2025-09-15

Python-BPF is a revolutionary open-source library enabling the writing of eBPF programs entirely in Python, compiling them directly into object files. This eliminates the previous cumbersome approach of embedding C code within Python. Leveraging Python's AST and LLVM IR for compilation, Python-BPF supports control flow, hash maps, helper functions, and more, significantly streamlining eBPF development and offering a new production-ready option.

Development

Titania: A Teaching Language for Compiler Development

2025-09-15
Titania: A Teaching Language for Compiler Development

Titania, based on the Oberon-07 language by Niklaus Wirth, is designed as an educational tool for learning compiler development. Its clean syntax covers core concepts like modules, procedures, and data types, and it includes built-in functions for numerical operations, bit manipulation, and memory management. Learning Titania provides a deep understanding of compiler principles and language design.

Development compiler development

Page Objects: Making Your UI Tests Less Brittle

2025-09-15
Page Objects: Making Your UI Tests Less Brittle

Testing web pages requires interacting with elements, but directly manipulating HTML makes tests fragile. Page Objects solve this by encapsulating a page or fragment as an application-specific API. This allows interacting with elements without directly accessing HTML. The goal is to mimic user actions, providing a clean interface that hides underlying widgets. Text fields use string accessors, checkboxes booleans, and buttons action-oriented methods. Good Page Objects model the user's perspective, not the UI's internal structure, returning basic data types or other Page Objects. There's debate on including assertions within Page Objects. The author prefers keeping assertions in test scripts, avoiding bloated Page Objects and using assertion libraries to reduce redundancy. This pattern works across various UI technologies, useful not just for testing but also as a scripting interface for applications.

Development Page Objects

Death to Type Classes: Exploring the Backpack Module System in Haskell

2025-09-15

This article explores replacing type classes with the Backpack module system in Haskell. The author demonstrates, through an example called "Death," how to define signatures for types like Functor and implement different instances (e.g., Maybe and IO). Cabal configuration allows flexible selection of implementations, such as using a state monad to simulate IO during testing. This approach, while requiring more Cabal configuration, offers clearer error messages, more flexible control, and potential performance advantages. The article concludes with a minimalist programming philosophy, arguing that simplification leads to better readability and maintainability.

Development Module System

Simplified Omarchy Installation on CachyOS

2025-09-15
Simplified Omarchy Installation on CachyOS

This project offers a script for installing DHH's Omarchy desktop configuration on CachyOS, a performance-optimized Arch Linux distribution. Omarchy, a Hyprland-based setup, prioritizes simplicity and productivity. The script streamlines the installation but requires familiarity with Arch Linux. It doesn't install CachyOS or handle partitioning, formatting, or encryption; users must do this beforehand. The script opts for Yay (AUR helper) and Fish (shell), retaining CachyOS's Tealdeer and Omarchy's Mise. Importantly, it doesn't install a display manager or autostart Hyprland unless already installed by CachyOS. No warranty is provided; use at your own risk.

Development

Analyzing npm Package Version Numbers with a Bun Script

2025-09-15

This Bun script analyzes npm package version numbers. It fetches all package IDs from the npm replicate API and then retrieves version information for each package from the npm registry API. The script calculates the total number of versions and the largest number within the version numbers for each package, filtering out known problematic packages. It then outputs lists of packages with the most versions and the largest numbers in their versions. This helps identify patterns and potential issues in npm package version management.

Development version numbers

arXivLabs: Building New arXiv Features with Community Collaboration

2025-09-15
arXivLabs: Building New arXiv Features with Community Collaboration

arXivLabs is a framework enabling developers to collaborate with the arXiv community to build and share new features directly on the arXiv website. Participants must embrace arXiv's values of openness, community, excellence, and user data privacy. Have an idea to enhance the arXiv community? Learn more about arXivLabs!

Development

GrapheneOS: A Security-Focused Android OS

2025-09-14
GrapheneOS: A Security-Focused Android OS

GrapheneOS (GOS) is a security-centric Android-based operating system compatible only with Google Pixel devices. It leverages multiple user profiles for robust privacy, each with independent encryption and permission settings, effectively creating isolated systems within your phone. Users can granularly control permissions for each profile, even completely halting background processes. Installation is straightforward, updates are seamless, and app permission management is powerful. While slightly less user-friendly than stock Android, GOS offers unprecedented control for security and privacy-conscious users, making it a compelling alternative.

Development

Minimal Time-Sharing OS Kernel on RISC-V in Zig

2025-09-14
Minimal Time-Sharing OS Kernel on RISC-V in Zig

This post details a minimal proof-of-concept time-sharing operating system kernel implemented on RISC-V using the Zig programming language. The project, a re-imagining of an undergraduate OS assignment, leverages modern tooling and the RISC-V architecture. It features statically defined threads, inter-thread system calls, and round-robin scheduling via timer interrupts. Basic thread virtualization is implemented, with each thread having a private stack and register context. The code is open-sourced, and the author provides a detailed walkthrough of the implementation and code explanations, making it a valuable resource for students of systems software and computer architecture.

Development

SpiderMonkey's Inline Caches: Beyond Simple Caching

2025-09-14

This post delves into the implementation of inline caching (IC) within the SpiderMonkey JavaScript engine. Unlike traditional caching, SpiderMonkey's IC is a self-modifying code technique. It inserts a series of stubs at call sites, dynamically selecting efficient execution paths based on input types. The first call executes a fallback path and generates corresponding stubs based on the result. Subsequent calls of the same type hit the cache, significantly improving efficiency. The article uses JavaScript addition as an example to explain how IC works, and mentions SpiderMonkey's latest CacheIR architecture, which abstracts the details of ICs to enable sharing between different compilers.

Development inline caching

Real-time SV2TTS: Transfer Learning for Multispeaker Text-to-Speech

2025-09-14
Real-time SV2TTS: Transfer Learning for Multispeaker Text-to-Speech

This open-source project implements real-time multispeaker text-to-speech (SV2TTS) synthesis using transfer learning from speaker verification, based on the author's master's thesis. It's a three-stage deep learning framework: creating a digital voice representation from short audio clips, then using this representation to generate speech from arbitrary text. While the project is older and may have lower quality than commercial alternatives, it supports Windows and Linux, with GPU acceleration recommended. Detailed installation and usage instructions are provided, along with support for various datasets.

Development transfer learning

Unraveling Rust's Functions and Closures: A Deep Dive

2025-09-14
Unraveling Rust's Functions and Closures: A Deep Dive

Rust's functions and closures are a source of confusion for many beginners. This post delves into the underlying mechanisms of Rust's function and closure system, explaining the relationships between function items, function pointers, and the three closure traits: Fn, FnMut, and FnOnce. It reveals how the compiler transforms closures into anonymous structs and the compiler optimizations behind seemingly simple function calls. Understanding these underlying mechanisms empowers developers to write more efficient and error-free Rust code by grasping how different closure capture modes impact behavior.

Development

Efficient Backpropagation: Simplifying Linear Transformation Derivatives with Einsum

2025-09-14

This post presents a clever backpropagation trick that simplifies the derivation of any einsum expression through a simple letter swap. Einsum is a concise way to express linear transformations such as matrix multiplication, dot products, Hadamard products, and more. The article uses matrix multiplication as an example, showing how to perform forward and backward propagation using einsum and verifying the results with JAX. This method avoids complex derivations, significantly simplifying backpropagation calculations in deep learning.

Observability Query Builder: A Four-Year Iteration Focused on User Experience

2025-09-14
Observability Query Builder: A Four-Year Iteration Focused on User Experience

A company iterated three times on their query builder over four years. Initial versions were based on flawed assumptions, leading to usability issues even for senior engineers. V3 and V4 oversimplified, lacking complex boolean expressions and effective log support. Through extensive user support and feedback, they recognized the importance of user experience and released V5. V5's core principle: 'Stop making decisions for users.' It empowers users with more control and a more intuitive interface, featuring powerful capabilities like arbitrary nesting, precedence rules, and cross-data-type queries. V5 received overwhelmingly positive feedback; users even abandoned raw SQL in favor of the builder. Future plans involve incremental updates adding subqueries and joins, continuously enhancing the user experience.

Development query builder

Perl's Surprise Return to the TIOBE Top 10: A Legacy Language's Resurgence

2025-09-14

Perl's recent re-entry into the TIOBE index's top 10 after a period of relative quiet has sparked considerable discussion. This resurgence isn't solely due to technical advancements, but rather a confluence of factors. The sheer volume of Perl books available on Amazon, exceeding those for languages like PHP and Rust, provides a significant learning resource base. Furthermore, the ongoing development of Perl 5, coupled with the fading of Perl 6 (Raku), has resolved long-standing community uncertainty. Crucially, Perl retains its strengths in text processing, seamless Linux/shell integration, and expressive syntax, maintaining its relevance in data manipulation and system administration. While criticized for its sometimes obscure syntax, Perl's flexibility and power continue to resonate in niche areas.

Development

UltraPlot: A Succinct Matplotlib Wrapper for Stunning Graphics

2025-09-14
UltraPlot: A Succinct Matplotlib Wrapper for Stunning Graphics

UltraPlot is a concise Matplotlib wrapper designed for creating beautiful, publication-quality graphics. Building upon ProPlot and updated for modern matplotlib (3.9.0+), it simplifies the creation of complex multi-panel layouts, Cartesian plots, projections and maps, colorbars and legends, insets and panels, and visually appealing colormaps. Easily installable via pip or conda, with comprehensive documentation available.

Development

Visual Programming's Future: Beyond Nodes and Wires

2025-09-14
Visual Programming's Future: Beyond Nodes and Wires

This article explores the limitations of visual programming, arguing that it has long been trapped in the node-and-wire paradigm, neglecting the principle of "form follows function." Using CellPond as an example, the author highlights that its success lies in defining the underlying function (only four operations) first, with the form emerging naturally. The author further elaborates on the threefold meaning of "function": intrinsic nature, rationality, and algebra, and argues that visual programming should focus on leveraging the human visual cortex's pattern recognition capabilities to model problems, rather than simply mimicking textual programming. The article proposes modeling problems as entities and relationships, and utilizing visual elements (color, grouping, motion) to represent state changes, thus breaking through the limitations of existing visual programming and creating more powerful programming tools.

Development

Safe C++ Proposal Abandoned: C++ Committee Prioritizes Profiles Instead

2025-09-14

A year ago, the Safe C++ proposal aimed to add a safe subset to C++, offering strong guarantees like Rust without breaking existing code. However, the proposal was ultimately rejected by the C++ committee in favor of the Profiles approach. Profiles define constrained modes of C++ to ensure safety properties. It's a more pragmatic and adoptable solution than Safe C++, though it might offer less comprehensive safety guarantees. Ultimately, it's deemed a more realistic path forward.

Development

Lexy: A C++ Parser Library Rivaling PEG Parsers

2025-09-14
Lexy: A C++ Parser Library Rivaling PEG Parsers

Lexy is a high-performance C++ parser library that strikes a balance between performance and control. Compared to other PEG parsers like Boost.Spirit and PEGTL, Lexy avoids implicit backtracking by controlling branch conditions, improving performance and simplifying error handling. Lexy supports advanced features like error recovery, operator precedence parsing, and allows zero-copy parsing directly into your own data structures. While Lexy's grammar is more verbose than Boost.Spirit's, it's better suited for larger grammars. Compilation times are reasonable, and modular design helps optimize build speed.

Development

pass: A Simple, Secure, and Extensible Command-Line Password Manager

2025-09-14

pass is a command-line password manager that uses GPG encryption and follows Unix philosophy. Each password is stored in a GPG-encrypted file named after the website or resource. These files can be organized into folders, easily copied between computers, and managed with standard command-line tools. pass provides simple commands to add, edit, generate, and retrieve passwords, with support for clipboard copying and Git-based change tracking. Users manage the password store using standard Unix shell commands alongside pass, requiring no new file formats or paradigms. It supports extensions and boasts an active community with numerous clients and GUIs.

Development gpg encryption

cURL 8.16.0's Catastrophic pthread_cancel and its Removal

2025-09-13

cURL 8.16.0 introduced the use of pthread_cancel to interrupt getaddrinfo(), aiming for performance improvements. However, this change caused serious memory leaks. This is because getaddrinfo() can be cancelled while reading /etc/gai.conf, leading to un-released allocated memory. Due to the difficulty in resolving this issue and the potential for serious stability problems, the cURL team decided to remove this functionality in #18540, recommending users utilize the c-ares library as an alternative, despite some functional limitations.

Development memory leak

Under the Hood of Ruby's JIT Compilers

2025-09-13
Under the Hood of Ruby's JIT Compilers

This article delves into the inner workings of Ruby's JIT compilers, such as YJIT and ZJIT. It explains how JIT-compiled code coexists with bytecode and how Ruby switches between execution modes. The article also clarifies how Ruby decides which methods to compile (based on call counts) and when JIT-compiled code falls back to the interpreter (e.g., TracePoint activation or redefined core methods). In essence, Ruby's JIT compiler strikes a balance between performance and correctness through an ingenious mechanism.

Development

Running a 486 VM on the Sipeed Tang: An Amateur's Feat

2025-09-13

The author successfully ported the MiSTer's ao486 PC core to the Sipeed Tang 138K FPGA, creating a project called 486Tang. This marks the first time ao486 has been successfully ported to a non-Altera FPGA. The port presented numerous challenges, including memory management (using SDRAM for main memory, DDR3 for the framebuffer), disk storage (direct SD card access), and a complex debugging process. To overcome the difficulties of hardware debugging, the author cleverly utilized Verilator for subsystem and whole-system simulation, using Bochs BIOS debug messages and custom tracing flags to pinpoint issues. Ultimately, through a series of performance optimizations such as reset tree and fan-out reduction, instruction fetch optimization, and TLB optimization, 486Tang achieved roughly 486SX-20 performance levels. This project showcases the author's impressive FPGA development skills and problem-solving abilities.

Development

Vicinae: A High-Performance Desktop Launcher Challenging Raycast

2025-09-13
Vicinae: A High-Performance Desktop Launcher Challenging Raycast

Vicinae is a high-performance native desktop launcher built with C++ and Qt, inspired by Raycast. It boasts a mostly compatible extension API leveraging server-side React/TypeScript, eliminating the need for a browser or Electron. Features include file indexing with full-text search, a smart emoji picker, a calculator, an encrypted clipboard history tracker, shortcuts, window manager integration, and a customizable theming system. While some features may have limited support on certain platforms, Vicinae aims to provide developers and power users with fast, keyboard-centric access to common system actions.

Development desktop launcher

Mago: Blazing Fast PHP Linter, Formatter, and Static Analyzer in Rust

2025-09-13
Mago: Blazing Fast PHP Linter, Formatter, and Static Analyzer in Rust

Mago is an extremely fast PHP linter, formatter, and static analyzer written in Rust. Inspired by the Rust ecosystem, it brings speed, reliability, and a superior developer experience to PHP projects of all sizes. Features include linting, static analysis, automated fixes, formatting, semantic checks, and AST visualization. Mago aims to be a unified and faster alternative to existing tools like PHP-CS-Fixer, Psalm, PHPStan, and PHP_CodeSniffer.

Development

Gleam First Impressions: Parsing Old AIM Logs

2025-09-13

The author uses the relatively new functional programming language Gleam to parse their old AOL Instant Messenger logs from two decades ago. The post details their learning process, covering command-line argument handling, compilation, testing, and functional programming techniques like pattern matching and pipeline operators. The author shares their positive experiences with Gleam's elegant pipeline syntax, but also points out shortcomings such as its limited standard library and slightly awkward error handling.

Development log parsing

OpenJDK 25 Ships Experimental CPU Profiler

2025-09-13
OpenJDK 25 Ships Experimental CPU Profiler

After over three years of development, an experimental CPU time profiler has landed in OpenJDK 25. Building upon JFR, this new profiler offers more precise measurement of CPU cycle consumption, addressing shortcomings of the existing execution time profiler, particularly its inadequate sampling in multi-core systems and its less-than-ideal handling of I/O-bound applications. While currently limited to Linux, it provides developers with a powerful tool for performance analysis, enabling optimization of CPU utilization and improved application throughput.

AI Coding: Hype or Tool?

2025-09-13

The author argues that current AI coding tools are essentially advanced compilers, their effectiveness overblown. They rely on existing codebases and patterns, not true "AI coding." While AI can boost productivity, the actual gains are limited, and many constraints exist, such as imprecise natural language input and non-deterministic workflows. The author criticizes the excessive investment in AI coding and advocates for focusing on improving fundamental infrastructure such as programming languages, compilers, and libraries, rather than chasing the hype.

Development programming tools

Rust's `image` Crate Now Handles EXIF Orientation in Image Resizing

2025-09-13
Rust's `image` Crate Now Handles EXIF Orientation in Image Resizing

The Rust image processing crate, `image`, has released version v0.25.8, adding support for EXIF orientation data. This fixes a common issue where resizing images would ignore the orientation, resulting in rotated or flipped thumbnails. The new `apply_orientation` function corrects the image orientation before resizing, ensuring the thumbnail matches the original. This is particularly helpful when working with images from cameras and phones, eliminating the hassle of misaligned images.

Development

compile_flagz: Boosting C/C++ IDE Support in Zig Build Systems

2025-09-13

Zig's build system offers powerful cross-compilation capabilities for C/C++ projects, but editor support often lags due to missing include paths. compile_flagz addresses this by generating a `compile_flags.txt` file, a standard format used by language servers like clangd. This file provides the necessary compilation settings, enabling features like code completion and error highlighting. The author details its usage and implementation, showcasing its effectiveness in a game decompilation project (ROLLER). A quick start guide is also provided.

Development
1 2 3 4 5 6 8 10 11 12 214 215