Category: Development

io_uring: Revolutionizing Asynchronous I/O on Linux

2025-01-06

io_uring is a powerful new approach to asynchronous I/O programming under Linux, overcoming limitations of previous I/O subsystems. This comprehensive guide by Shuveb Hussain covers io_uring's introduction, low-level interface, liburing examples (including cat, cp, and a web server), and advanced usage. Source code examples and GitHub repositories are provided for learning and contribution.

Development

OCRing YouTube Music with Common Lisp: A Pixel-Perfect Adventure

2025-01-06

A developer attempted to extract music data from a YouTube video using Common Lisp. Initial attempts with Tesseract and ChatGPT proved unsuccessful. Ultimately, an old-school pixel differencing method, involving manual extraction of character images and comparison, successfully extracted most of the musical notation. While not perfect, the extracted data sufficed, proving the method's feasibility. The article also details the developer's experience using Lisp for image processing and efficient development.

Development Image Processing

Supabase: Remote-First Open Source Firebase Alternative Hiring Now

2025-01-06
Supabase: Remote-First Open Source Firebase Alternative Hiring Now

Supabase, a fully remote and asynchronous open-source alternative to Firebase, is hiring globally! They offer excellent benefits including a hardware budget, full health coverage, and annual off-sites. Supabase values open collaboration and boasts a globally distributed team and large community. If you're passionate about open source and want to work in a vibrant and diverse team, apply for a position at Supabase.

Development

Building an IPv6-Only Network with Jool: A Practical Guide

2025-01-06

This post details setting up an IPv6-only network on Linux using the Jool tool. The author starts by highlighting the limitations of traditional dual-stack IPv4/IPv6 home networks. Jool is introduced as a superior alternative to TAYGA, emphasizing its support for Stateful NAT64. The guide provides installation instructions for various Linux distributions, followed by a comprehensive walkthrough of configuring Stateful NAT64, DNS64, and IPv4-to-IPv6 port mapping to achieve IPv4 access within an IPv6-only environment. Persistence of the configuration across reboots is also covered.

Development

The printf Debugging Debate: A Veteran Game Dev Weighs In

2025-01-06

Alex Dixon, a seasoned game developer, challenges the extreme notion of rejecting debuggers in favor of notepad and printf debugging. He argues that debuggers, address sanitizers, and other tools significantly boost efficiency, even for experienced programmers tackling intricate bugs in large projects or legacy code. While advocating for debuggers, he acknowledges printf's utility in specific scenarios (e.g., debugging release builds or mobile touch events). Ultimately, he emphasizes that efficient bug fixing is the goal, and choosing the right tools is key.

Development

This Isn't Your Last Job: A Programmer's Perspective on Career Growth

2025-01-06
This Isn't Your Last Job: A Programmer's Perspective on Career Growth

A seasoned programmer shares his unique insights on career development: this isn't your last technology or job, regardless of your current stage. Using personal anecdotes, he highlights the importance of continuously learning new technologies (like Rust) and the necessity of changing jobs or roles to pursue career growth. He argues that adapting to industry shifts, embracing new technologies, and maintaining a continuous learning attitude are key to staying competitive throughout a long career, ultimately finding a long-term path that fits.

LogLayer: Unify Your JavaScript Logging

2025-01-06
LogLayer: Unify Your JavaScript Logging

LogLayer is a unifying layer for JavaScript logging libraries, providing a consistent logging experience. It supports multiple logging libraries (like Pino, Bunyan) and cloud services (like Datadog, New Relic), and allows extending functionality with plugins for features such as data filtering and redaction. Developers can easily add tags, metadata, and errors, and switch logging providers on the fly without changing application code.

Development

Chip-8 Emulator Intro: Building a Retro Game Console in Code

2025-01-06

This article introduces Chip-8, a simple virtual game console system, and explains how to build its emulator. It clearly explains binary, hexadecimal, and how Chip-8 instructions work, providing the foundational knowledge for building an emulator. The author guides the reader step-by-step, from simple to more complex instructions, explaining the inner workings of Chip-8, making it a great resource for those interested in retro gaming consoles and emulator technology.

Development

srsRAN: Open Source 4G/5G Software Defined Radio

2025-01-05
srsRAN: Open Source 4G/5G Software Defined Radio

srsRAN is an open-source collection of 4G and 5G software radio applications developed by SRS. Implemented in portable C++ with minimal third-party dependencies, srsRAN runs on Linux with off-the-shelf compute and radio hardware. The srsRAN Project features a complete O-RAN native 5G RAN CU+DU, and a full-stack 4G network implementation covering UE, eNodeB, and EPC. The project is hosted on GitHub with comprehensive documentation and an active community forum.

Building a Polite and Fast Web Crawler: Lessons Learned

2025-01-05

Mozilla engineer Dennis Schubert found that 70% of Diaspora's server load stemmed from poorly-behaved bots, with OpenAI and Amazon contributing 40%. This article details the author's experience building a polite and fast web crawler, covering rate limiting, respecting robots.txt, minimizing refetching, and efficient enqueuing. Using Python and gevent, the author assigns a coroutine per domain for rate limiting and leverages Postgres for efficient queue management and deduplication. This design allows for fast and efficient crawling while respecting target websites.

Axum 0.8.0 Released: Path Parameter Syntax and Optional Extractor Improvements

2025-01-05

Axum 0.8.0 is out! This Rust web framework built with Tokio, Tower, and Hyper boasts significant updates. The most notable changes include an altered path parameter syntax (from `/single` and `/*many` to `/{single}` and `/{*many}`) and improvements to `Option` extractors, enabling more flexible handling of optional parameters and errors. Additionally, due to Rust language feature updates, the `#[async_trait]` macro is no longer needed. These improvements enhance Axum's usability and flexibility, but also introduce breaking changes; careful migration is advised. Consult the changelog for details.

Development

Northeastern's Khoury Curriculum Redesign: Abandoning Fundamentals?

2025-01-05
Northeastern's Khoury Curriculum Redesign: Abandoning Fundamentals?

Northeastern University's Khoury College of Computer Sciences is overhauling its curriculum, eliminating foundational courses like Fundies 1, Fundies 2, and Object-Oriented Design. This op-ed argues that this change abandons core computer science principles in favor of chasing the currently popular Python language, neglecting the crucial development of systematic program design skills. The author fears this will lower educational quality, hindering the production of competent software developers and potentially harming the long-term prospects of Northeastern's computer science program.

WireGuard Setup Complexity: A Guide from Simple to Advanced

2025-01-05

This blog post explores various WireGuard setup complexities, ranging from the simplest, with completely isolated internal IP address spaces, to the most challenging 'VPN' setup where some endpoints are accessible both inside and outside the WireGuard tunnel. The author details the difficulty and potential issues of each setup, such as routing conflicts and recursive routing. The article stresses the importance of upfront planning and suggests opting for simpler configurations to avoid complex routing when designing a WireGuard environment.

Development Network Configuration

Sequin: Coordinating Change Data Capture in Postgres with Watermarks

2025-01-05
Sequin: Coordinating Change Data Capture in Postgres with Watermarks

Sequin is a real-time change data capture (CDC) tool that streams changes from Postgres to destinations like Kafka and SQS. This article dives into how Sequin elegantly solves the complex problem of simultaneously performing full table capture and incremental change capture. By employing a watermarking mechanism, Sequin coordinates two data streams, preventing data loss or duplication and ensuring data consistency. Sequin uses a chunked capture strategy, processing tables in smaller batches for efficiency and reduced memory usage.

Efficient Linux System Call Interception: Beyond the Inefficiencies of ptrace

2025-01-05

This article introduces a more efficient method for intercepting Linux system calls than ptrace: seccomp user notify. Leveraging BPF filters, it returns only for desired system calls, significantly reducing performance overhead. The author uses their tool, copycat, as an example, demonstrating how to intercept open() system calls to achieve file replacement. The article details the seccomp user notify mechanism, including BPF filter creation and system call argument handling. Security and potential issues, such as TOCTOU attacks, are also discussed.

Development System Calls

AI-Assisted Coding: The Two Sides of the Coin

2025-01-05
AI-Assisted Coding: The Two Sides of the Coin

The rise of AI-assisted coding tools has revolutionized software engineering, but it's not without its challenges. This article explores two typical AI usage patterns: "bootstrappers" and "iterators." Bootstrappers leverage AI to rapidly build prototypes, while iterators use AI in their daily workflow for code completion, refactoring, and more. While AI significantly boosts efficiency, it also presents the "70% problem": AI quickly handles most of the work, but the remaining 30% of fine-tuning still requires human intervention, especially challenging for inexperienced developers. The article emphasizes that AI is better suited for experienced developers, helping them accelerate solutions to known problems and explore new approaches, rather than completely replacing them. In the future, AI-assisted coding will move toward "intelligent agents" with greater autonomy and multimodal capabilities, but human oversight and guidance will remain crucial. Ultimately, the essence of software engineering remains unchanged, and the demand for experienced engineers may even increase.

Development AI-assisted coding

Level Up Your Skills: A 90s-Style Link List of Learning Resources

2025-01-05
Level Up Your Skills: A 90s-Style Link List of Learning Resources

This blog post presents a curated list of excellent learning materials, formatted as a nostalgic 90s-style link list, for anyone looking to acquire new skills. The resources cover a wide range of topics, including finance, music composition, machine learning, algorithms, optimization algorithms, LLM app development, and JavaScript. Each resource is reviewed, highlighting its strengths and weaknesses. For instance, Andrew Ng's Machine Learning course is praised for its clear explanations and exercises, while "Essentials of Metaheuristics" is recommended for its practical approach and clear explanations. This is a valuable guide for programmers and developers seeking to enhance their skillset.

Teaching AI to Read Code Like a Senior Dev

2025-01-05

The author recounts how they improved AI code analysis. Initially, the AI acted like a fresh bootcamp grad, linearly processing code. Inspired by senior developers' approaches, they redesigned the AI's analysis: building a mental model of the architecture first, grouping files by functionality, and then delving into details. This drastically improved accuracy and depth, enabling the AI to detect subtle connection errors, performance bottlenecks, and suggest architectural improvements—achieving a senior-level understanding. The key wasn't bigger models but mimicking senior dev thinking: prioritizing context, pattern matching, impact analysis, and historical awareness.

(nmn.gl)
Development

Home Server Hacked: A New Year's Surprise

2025-01-05

The author discovered their home server infected with Kinsing malware after Christmas, exploiting an unprotected Docker container to mine cryptocurrency. The attacker repeatedly attempted brute-force attacks. The author closed all external network access to minimize the attack surface. This incident serves as a stark reminder of the risks of exposing a home server to the internet, highlighting the need for robust security measures even with password protection.

Tailscale's NAT Traversal: A Deep Dive

2025-01-05
Tailscale's NAT Traversal: A Deep Dive

This Tailscale blog post details how their VPN overcomes the challenges of NAT (Network Address Translation) to enable direct device-to-device connections. It explains NAT's workings and various techniques to handle NAT and firewalls, including STUN for discovering public IPs, the birthday paradox for faster port probing, and DERP as a fallback relay. Finally, it introduces the ICE protocol, which automatically tries various methods, selecting the best connection to ensure reliable connectivity.

Development

Long Polling Beats WebSockets: A Practical Guide to Scalable Real-time Systems

2025-01-05

Inferable's team chose HTTP long polling over WebSockets when building a scalable real-time system using Node.js and TypeScript. Facing challenges of hundreds of worker nodes needing real-time job updates and agents requiring real-time state synchronization, they found long polling surprisingly effective. By keeping HTTP connections open until new data arrives or a timeout is reached, they avoided the complexities of WebSockets, such as authentication, observability, and infrastructure compatibility. The article details their implementation, including database optimization, error handling, and best practices like mandatory TTL, client-configurable TTL, and sensible database polling intervals. The choice stemmed from needing core product control over message delivery, zero external dependencies, and ease of understanding and modification. Alternatives like ElectricSQL are briefly discussed, highlighting scenarios where WebSockets might be preferable.

Interactive CSS Flexbox Learning Tool

2025-01-05

The CSS Flexbox Playground is an interactive online learning tool that lets users adjust various Flex properties to see layout changes in real-time and copy the generated CSS code. It covers key properties like flex-direction, justify-content, align-items, and flex-wrap, providing a visual understanding of Flexbox layout. Hands-on experimentation allows users to quickly master Flexbox and improve web development efficiency.

Development

FSF Calls for Continued Pressure on Microsoft

2025-01-05

The Free Software Foundation (FSF) published a blog post urging continued pressure on Microsoft to combat its anti-free software practices. The post uses this year's International Day Against DRM (IDAD) as an example, highlighting Microsoft's forced Windows 11 upgrade requiring a TPM module, harming user freedom and digital rights. The FSF encourages switching to GNU/Linux, avoiding new Microsoft software releases, and moving projects off Microsoft GitHub to support the free software movement. Simultaneously, the FSF is conducting its annual fundraiser, seeking support to fight digital restrictions and promote software freedom.

Development Digital Restrictions

Wildcard: Spreadsheet-Powered Website Customization

2025-01-05
Wildcard: Spreadsheet-Powered Website Customization

Wildcard, a browser extension developed by MIT PhD student Geoffrey Litt, lets users modify websites to their liking using a familiar spreadsheet interface. The project, detailed in several academic papers and showcased in demo videos (like adding read times to Hacker News), is currently in development but offers a downloadable dev build. Explore its potential for personalized web experiences.

Development web customization

Retry Algorithm Showdown: Linear, Exponential, and Capped Exponential Backoff

2025-01-05

This article compares three common retry algorithms: linear backoff, exponential backoff, and capped exponential backoff. Linear backoff increases the wait time by a fixed amount with each retry; exponential backoff doubles (or multiplies) the wait time with each retry; capped exponential backoff is similar to exponential backoff but with a maximum delay. The article also discusses adding random jitter to prevent "thundering herd" problems when multiple clients retry simultaneously.

MyST Markdown: Open-Source Tools Revolutionizing Scientific Communication

2025-01-05
MyST Markdown: Open-Source Tools Revolutionizing Scientific Communication

MyST Markdown is an open-source, community-driven ecosystem of tools designed to transform scientific communication. It supports authoring blogs, online books, scientific papers, reports, and journal articles, offering powerful features like embedded live graphs, Jupyter integration, PDF export, and compatibility with hundreds of journals. At its core is a flexible Markdown extension that seamlessly integrates code, computational results, and interactive elements, creating dynamic and engaging documents. Whether you're a scientist, engineer, or technical writer, MyST empowers you to share your research and knowledge more effectively.

PyPI's Project Quarantine: A New Weapon Against Malware

2025-01-05
PyPI's Project Quarantine: A New Weapon Against Malware

The Python Package Index (PyPI) has introduced a 'Project Quarantine' feature to combat the persistent problem of malware. This feature allows PyPI administrators to flag potentially harmful projects, preventing easy installation by users and mitigating harm. Instead of outright deletion, projects are hidden from the simple index, remaining modifiable by owners (but not releasable), with administrators retaining the power to lift quarantine. Future plans include automating quarantine based on multiple credible reports, improving efficiency and shrinking the window of opportunity for malware spread.

Development

Slime Mold Simulation with WebGPU: A TypeScript and Compute Shader Implementation

2025-01-05
Slime Mold Simulation with WebGPU: A TypeScript and Compute Shader Implementation

SuboptimalEng has created a stunning slime mold simulation using WebGPU and TypeScript. This project recreates Sebastian Lague's classic work, leveraging compute shaders for efficient simulation of the slime mold's growth and movement. A detailed setup guide, screenshots, and resource links are included, and the project is deployed to GitHub Pages for easy access. This is a fantastic example to learn WebGPU and compute shaders.

The Fight Over Copyright in Open Source: Who Controls Your Code?

2025-01-04
The Fight Over Copyright in Open Source: Who Controls Your Code?

This essay delves into the complexities of copyright ownership in Free and Open Source Software (FOSS). Traditionally, many FOSS projects assign copyrights to non-profits, but this practice has become controversial. The author argues that most FOSS contributors' copyrights are actually owned by their employers, weakening the protection afforded by copyleft licenses. Shifting away from centralized copyright assignment could leave corporations in control, potentially hindering GPL enforcement. The article urges FOSS contributors to carefully consider copyright ownership, suggesting proactive measures to protect their rights and uphold the interests of the open-source community, preventing copyleft from becoming ineffective.

Development

Labwc: A Lightweight Wayland Compositor Focused on Simplicity

2025-01-04
Labwc: A Lightweight Wayland Compositor Focused on Simplicity

Labwc is a lightweight wlroots-based Wayland window compositor inspired by openbox. It prioritizes simple, efficient window stacking and minimal window decorations. Unlike many compositors, it relies on clients to provide features like panels, screenshots, and wallpapers, maintaining its lightweight nature. Adhering to wlroots and sway's coding style, Labwc exclusively supports Wayland protocols, rejecting dbus, sway/i3-IPC, etc., to avoid protocol fragmentation and promote Wayland adoption.

Development Window Manager
1 2 180 181 182 184 186 187 188 201 202