Category: Development

Kronotop: A Redis-Compatible, Distributed, Transactional Document Database

2025-01-20
Kronotop: A Redis-Compatible, Distributed, Transactional Document Database

Kronotop is a Redis-compatible, distributed, and transactional document database built on FoundationDB. It supports an MQL-like query language, ACID transactions, and an on-disk storage engine with a primary-standby replication model. While still in early development with an unstable API, it already features ZMap (an ordered key-value store), namespaces, and partial support for Redis data structures (strings and hashes). Future plans include support for more Redis data structures (lists, sets, sorted sets) and a Bucket data structure for storing JSON-like documents with MQL query language and transaction support.

Development

Proposal: Essential Effects for C

2025-01-20

This proposal suggests enhancing C's core type system with a type-and-effect system, requiring functions and blocks to declare the effects of their evaluation. This improves metaprogramming composability and simplifies defining MISRA-style restrictions. The system tracks and checks effects but doesn't handle dynamic effect handling. Three main effect groups are proposed: Local (e.g., local writes), Persistent (e.g., non-local writes), and Control (e.g., non-local control transfers). Static effect checking is achieved by assigning type-and-effect to each statement, expression, and function body, discarding local effects to ensure correct ordering. Best practices are suggested, like limiting the magnitude of `mut` and `vol` effects and specifying effect checks for operators and control structures. The goal is to improve C's safety, readability, and composability, especially for metaprogramming and resource management.

Development type system

SRCL: A Terminal-Aesthetic React Component Library

2025-01-20
SRCL: A Terminal-Aesthetic React Component Library

SRCL is an open-source React component and style repository that helps you build web applications, desktop applications, and static websites with terminal aesthetics. It boasts a comprehensive collection of components, including action bars, accordions, buttons, alert banners, avatars, badges, loaders, blog posts, breadcrumbs, cards, checkboxes, chessboards, code blocks, combo boxes, data tables, date pickers, dashboards, database examples, dropdown menus, empty states, input fields, forms, links, lists, messages, modals, navigation bars, popovers, progress bars, radio buttons, selects, sidebars, sliders, tables, text areas, tooltips, and tree views, all styled with a retro terminal look and feel.

WordPecker: Personalized Language Learning with Duolingo-Style Lessons and Custom Vocabulary

2025-01-20
WordPecker: Personalized Language Learning with Duolingo-Style Lessons and Custom Vocabulary

WordPecker is a personalized language learning app that combines Duolingo-style lessons with your own curated vocabulary lists. Seamlessly add words from books, articles, or videos, and review them through interactive quizzes and LLM-generated lessons. The app tackles the pain points of vocabulary acquisition in traditional language learning by connecting learning to context, boosting efficiency and retention. Currently featuring multiple question types, future development includes progress tracking, list sharing, and more.

Development

Frustration Tolerance: The Key to Surviving Large Organizations

2025-01-20
Frustration Tolerance: The Key to Surviving Large Organizations

In large organizations, ambitions often clash with reality. This article explores 'frustration tolerance,' a crucial factor determining success in navigating organizational complexities, conflicts, and slow progress. High frustration tolerance enables individuals to view challenges as manageable, while low tolerance leads to giving up, negativity, and burnout. Four root causes of low frustration tolerance are identified: demands for comfort, fairness, achievement, and emotional control. Reframing organizational friction as a catalyst for innovation allows for developing higher frustration tolerance and thriving in complex environments.

The Mathematical Magic Behind Undergraduate Divisibility Problems

2025-01-20
The Mathematical Magic Behind Undergraduate Divisibility Problems

This blog post explores the origin of common problems in undergraduate mathematics courses, such as proving that a polynomial is always a multiple of a certain integer. The author points out that these problems stem from combinatorial counting, specifically Pólya-Redfield counting. This method uses the orbit-counting formula under group action to connect the value of a polynomial to the counting of a certain combinatorial structure, ensuring the polynomial is always a multiple of a specific integer. The article uses two examples, bracelet counting and tic-tac-toe board counting, to explain how Pólya-Redfield counting is used to construct these problems. It also proposes a conjecture about whether all such polynomials originate from Pólya-Redfield counting.

Systemd: Red Hat's Stealth Takeover of the Linux Ecosystem?

2025-01-20

This article delves into the true motivations behind systemd, revealing how Red Hat leveraged its business interests in embedded devices to transform systemd from a simple init system into a core component of the Linux operating system. The author alleges that Red Hat used various tactics, including lobbying open-source projects to depend on systemd and poaching developers from other distributions, to exert control over the Linux ecosystem, sparking a backlash within the open-source community and leading to the resignation of several Debian developers. Systemd is described as a monolithic system with privacy concerns, and Red Hat's ambition is portrayed as creating the next Windows. The article concludes by advocating a return to community-driven development and recommending alternatives to systemd, such as runit and s6.

Development

Parinfer: A Simpler Way to Edit Lisp

2025-01-20

Parinfer is a novel editor mode for Lisp programming languages that simplifies Lisp coding by cleverly linking parentheses and indentation. It tackles the notorious parenthesis problem in Lisp, offering a more intuitive editing experience for both beginners and experts. Parinfer features two modes: Indent Mode and Paren Mode, allowing users to focus on either indentation or parentheses while Parinfer automatically manages the other. It also provides Paredit-like functionality without requiring complex hotkeys. At its core, Parinfer relies on a formal definition of the relationship between parentheses and indentation and employs a smart auto-adjustment mechanism based on this definition.

Development Code

CFRS[] Community Demos: Drawing Amazing Art with Six Commands

2025-01-20

CFRS[] is an extremely minimal drawing language consisting of only six commands (C, F, R, S, [, ]). This document compiles CFRS[] demos contributed by community members, including dynamic demos (using the 'S' command for animation) and static demos. These demos showcase a wide variety of shapes, such as flowers, crosses, kaleidoscopes, and leaves, demonstrating the language's expressive power. Even simple commands can create stunning art. This collection offers fun and inspiration for beginners and programming enthusiasts alike.

TypeScript Enums: Use Cases and Alternatives

2025-01-20

This blog post takes a closer look at TypeScript enums: How do they work? What are their use cases? What are the alternatives if we don’t want to use them? The post concludes with recommendations for when to use which approach. It covers enum basics, use cases (e.g., namespace for constants with primitive values, custom type with unique values, namespace for constants with object values), alternatives (e.g., object literals, union of string literal types), and how to perform exhaustiveness checks and enumerate members.

Development Enums

Linux 6.13 Stable Released: AMD Optimizations, Broader Apple Support & More

2025-01-20

The Linux 6.13 stable kernel is here, bringing exciting features like AMD 3D V-Cache optimizations for Ryzen X3D processors, improved power efficiency for AMD EPYC 9005 "Turin" servers, support for older Apple devices, and AutoFDO/Propeller compiler optimizations. Initial Intel Xe3 graphics support, NVMe 2.1 support, and expanded Rust language infrastructure are also included. Marking the first major kernel release of 2025, Linux 6.13 significantly boosts performance and hardware compatibility.

Development

GitHub Actions: Why I'm Reconsidering

2025-01-20

This post details the frustrations of using GitHub Actions for CI/CD in a large monorepo with 15 engineers constantly pushing to the main branch. The author highlights key issues: flawed 'required checks' for pull requests in a monorepo setup, poor workflow reusability and YAML management, lack of local development environment, and GitHub's unresponsive attitude towards user feedback. The conclusion advocates exploring alternative CI/CD platforms like GitLab, Jenkins, or even Dagger for better solutions.

Development

Revolutionizing Fine-Grained Authorization: Feldera's Incremental Compute Engine

2025-01-20
Revolutionizing Fine-Grained Authorization: Feldera's Incremental Compute Engine

Feldera introduces a revolutionary approach to Fine-Grained Authorization (FGA). Traditional FGA systems evaluate authorization requests in real-time, leading to inefficiency. Feldera precomputes all authorization decisions and uses its incremental compute engine (based on SQL) to update results, turning authorization requests into simple key-value lookups. Even with large object graphs, Feldera processes changes in milliseconds, dramatically improving performance. The article details FGA principles and demonstrates building a high-performance FGA engine using SQL, showcasing its superiority in handling large datasets.

Rhai: A Safe and Efficient Embedded Scripting Language for Rust

2025-01-20
Rhai: A Safe and Efficient Embedded Scripting Language for Rust

Rhai is an embedded scripting language and evaluation engine for Rust, providing a safe and easy way to add scripting capabilities to any application. It targets all CPU and OS architectures supported by Rust, including WebAssembly, and features a simple, JavaScript-like syntax. Rhai boasts efficient evaluation and tight integration with native Rust functions and types, allowing seamless passing and use of Rust values. Its robust security features protect against malicious attacks such as stack overflows and runaway scripts.

Computational Geometry with Probabilistically Noisy Primitives

2025-01-20

A new preprint explores computational geometry algorithms under probabilistically noisy primitive operations. Many such algorithms rely on primitives accessing input coordinates and converting them to combinatorial information. The paper considers primitives randomly producing incorrect results and investigates achieving high-probability correct outcomes without significant efficiency loss. It finds that for some problems (like convex hull construction), slowdown from repetition can be avoided, while for others (like finding closest pairs), it cannot. This connects to prior work on communication complexity using noisy comparisons to improve efficiency.

The Two Hardest Things in Computer Science: A Deep Dive

2025-01-20
The Two Hardest Things in Computer Science: A Deep Dive

A classic programmer joke states: "There are only two hard things in Computer Science: cache invalidation and naming things." This article traces the origin and evolution of this witty phrase, exploring its humor and deeper meaning. From its initial concise form to variations incorporating 'off-by-one errors' and more, the joke reflects the numerous challenges programmers face daily, highlighting the complexity and amusement inherent in programming.

Development

How Interruptions Impact Software Engineers: A Research Deep Dive

2025-01-20
How Interruptions Impact Software Engineers: A Research Deep Dive

New research explores how interruptions affect software engineers' productivity and stress. The study found that different types of interruptions (e.g., in-person vs. on-screen notifications) impact coding, code comprehension, and code review differently, with complex tasks being less affected. Interestingly, physiological data (heart rate variability) showed less stress with in-person interruptions, but engineers perceived them as more stressful. Managers should prioritize engineers' perceived stress, minimizing high-priority interruptions and providing focused time for tasks like coding to boost team efficiency.

Development interruptions

The Ugly Truth About Lisp Indentation

2025-01-19

Lisp programmers have long debated the best indentation style. This article explores various approaches, including no indentation, function-aligned indentation, space-filling indentation, and the author's controversial "sick" macro indentation. Function-aligned indentation becomes unwieldy with deep nesting, while space-filling, though efficient, falls short in extreme cases. The author advocates for a "sick" macro style, which, despite being unconventional, maintains readability in deeply nested code and plays well with most indentation tools. Readers are invited to share their preferred styles.

Git Autocorrect: Too Fast Even for F1 Drivers?

2025-01-19
Git Autocorrect: Too Fast Even for F1 Drivers?

Git's autocorrect feature, with its 0.1-second response time, has sparked debate. This article delves into its design and surprisingly fast speed. It's not the default behavior; instead, it's configurable via the `help.autocorrect` setting. Initially, a jokingly short wait time was set, later improved to allow user-defined delays or confirmation prompts. The author also analyzes Git's autocorrect algorithm and suggests improvements for better user experience.

Development autocorrect

Build a Tiny, YubiKey-Secured CA for Your Homelab

2025-01-19
Build a Tiny, YubiKey-Secured CA for Your Homelab

This tutorial walks you through building a secure, YubiKey-protected Certificate Authority (CA) on a Raspberry Pi. Leveraging the open-source step-ca and an optional Infinite Noise TRNG for enhanced randomness, you'll create a miniature internal ACME server for your homelab's TLS needs. The guide covers system setup, PKI creation, CA configuration, adding an ACME provisioner, and implementing systemd services for handling YubiKey removal/insertion. The result? A secure, SSH-less, tiny CA.

Development certificate authority

The Surprising Struggle with UTC Time Strings in C/C++

2025-01-19
The Surprising Struggle with UTC Time Strings in C/C++

This article delves into the complexities of converting UTC time strings to Unix timestamps in C/C++. The author uncovers unexpected behaviors in POSIX time handling functions across various C libraries and languages. The focus is on using `strptime()`, `mktime()`, and `timegm()`, highlighting issues with daylight saving time and locales. Solutions are provided, including using `timegm()` for UTC times and leveraging C++ streams to bypass locale problems. The article concludes by recommending more robust time handling libraries available in C++20 and later, such as Howard Hinnant's tz library.

Development

Open-Source ROS 2 Robotics Essentials Course: Learn ROS 2 from Scratch

2025-01-19
Open-Source ROS 2 Robotics Essentials Course: Learn ROS 2 from Scratch

Henki Robotics, in collaboration with the University of Eastern Finland, has open-sourced a beginner-friendly ROS 2 robotics course. The course covers essential ROS 2 concepts, Gazebo simulation, SLAM, navigation, and more, all within a Docker-based containerized environment eliminating the need for pre-installation. Hands-on exercises and a focus on practical application make this course ideal for beginners wanting to quickly acquire skills for modern robotics development.

Development Open Source Course

Node.js Type Stripping: Simplifying TypeScript Development

2025-01-19
Node.js Type Stripping: Simplifying TypeScript Development

Node.js v23.6.0 introduces a long-awaited experimental feature, Type Stripping, aimed at simplifying TypeScript usage by allowing TypeScript code to run without extra configuration. This feature achieves this by removing type information from TypeScript code, avoiding cumbersome configuration and type checking, and thus increasing development efficiency. While some trade-offs were made for compatibility and performance, such as not supporting some complex TypeScript features, the feature significantly improves the developer experience and paves the way for the popularization of TypeScript in the Node.js ecosystem.

Development Type Stripping

Google Releases OSV-SCALIBR: A Powerful Software Composition Analysis Library

2025-01-19
Google Releases OSV-SCALIBR: A Powerful Software Composition Analysis Library

Google has released OSV-SCALIBR, an extensible Software Composition Analysis (SCA) library for scanning installed packages, standalone binaries, and source code for vulnerabilities. It supports numerous programming languages and package managers, and generates Software Bill of Materials (SBOMs). OSV-SCALIBR is Google's primary SCA engine and is now open-source, with plans to integrate it into OSV-Scanner for a more robust command-line interface.

Development Software Security

Linux Network Programming Guide: A Deep Dive into Socket Programming

2025-01-19
Linux Network Programming Guide: A Deep Dive into Socket Programming

This guide provides a comprehensive explanation of Linux network programming, focusing on socket programming. The author notes that many online resources lack clarity and sample codes often only cover the basics, hence the creation of this tutorial, offering clear guidelines and numerous examples. Topics covered include socket types, addressing, APIs (getprotobyname(), getservbyname(), getaddrinfo(), htonl(), htons(), ntohl(), ntohs(), socket(), setsockopt(), bind(), listen(), accept(), connect(), recv(), send(), close()), client-server models (simple HTTP client, TCP-based client-server, multithreaded TCP client-server, UDP-based client-server), advanced techniques (non-blocking sockets, synchronous I/O multiplexing with select() and poll(), broadcasting messages), and secure networking with libcurl and OpenSSL.

The Fuzzing Book: Automating Software Testing

2025-01-19
The Fuzzing Book: Automating Software Testing

The Fuzzing Book is a comprehensive guide to automated software testing, focusing on fuzzing techniques. It covers various fuzzing methods, including lexical, syntactic, and semantic fuzzing, with executable code examples for hands-on learning. Whether you're a software tester, security engineer, or developer, this book empowers you to automatically generate test cases, improve software quality, and uncover hidden bugs.

Build a Database in 3000 Lines of Go: From Zero Dependencies to SQL Queries

2025-01-19
Build a Database in 3000 Lines of Go: From Zero Dependencies to SQL Queries

This article details the creation of a small database in 3000 lines of Go code, starting from zero dependencies. The author walks through the core concepts, beginning with power-loss atomicity (achieved through append-only logs and checksums) and efficient indexing using data structures like B+trees. The process is explained step-by-step, covering append-only KV store creation, space reclamation, relational database operations (point/range queries, secondary indexes), concurrency control, and a simple SQL-like query language. The entire process is documented in a book, freely available online.

Development

Rediscovering Apple's Newton Gem: Open Dylan

2025-01-19

Open Dylan is an object-functional programming language, a descendant of Apple's Dylan language originally created for the Newton PDA. Combining the strengths of Scheme and CLOS, without the Lisp syntax, it's designed for efficient machine code generation. This article showcases Open Dylan's comprehensive documentation, including tutorials, reference manuals, and extensive library documentation, along with an online Playground for quick experimentation. Whether you're learning a new language or exploring efficient programming paradigms, Open Dylan is worth a look.

Development

Terminal Image Viewer: A Programmer's Odyssey

2025-01-19

A programmer embarks on a challenging journey to create the perfect terminal image viewer. Starting with simple pixel display, he delves into the intricacies of loading and rendering various image formats (JPEG, PNG, GIF, AVIF, JPEG XL, HEIC, ETC, BC, OpenEXR, etc.), encountering unexpected hurdles along the way: inconsistent format standards, poorly documented libraries, the complexities of HDR image processing, the subtleties of color management, and the limitations of terminal output protocols. He ultimately overcomes these challenges to build a powerful image viewer, gaining a deep appreciation for the complexities and fascinations of computer graphics.

Development terminal display
1 2 173 174 175 177 179 180 181 206 207