Category: Development

Don't Use SQLite in Production!

2025-02-18
Don't Use SQLite in Production!

Terreateam shares their experiences using Fly.io and SQLite. While Fly.io heavily promotes server-side SQLite, the author argues against using it as a primary data store in production unless there's a compelling reason. This adds complexity with backups, high availability configurations (like LiteFS and Consul), and migration to other databases (like PostgreSQL) becomes challenging. The post uses the Atlantis project as an example, highlighting the high-availability challenges of using database-as-a-library solutions (like BoltDB and SQLite), ultimately recommending a traditional database architecture for production unless there's a very clear need to diverge for better scalability and reliability.

Development Production

TimeRetain: Privacy-Focused Time Tracking, No Sign-Up Required

2025-02-18
TimeRetain: Privacy-Focused Time Tracking, No Sign-Up Required

TimeRetain is a free, privacy-focused time tracking tool currently in beta, requiring no sign-up. It's simple to use, offering tagging, powerful filtering, practical statistical insights, and easy export to CSV or PDF. Whether you're an employee, business owner, or student, track work hours, client calls, or study sessions with ease. Fine-tune entries with ballpark adjustments, and rest assured your data is stored securely in your browser.

Development time tracking

Go 1.24 Released: Generic Type Aliases, Module Improvements, and Performance Boosts

2025-02-18

Go 1.24 is here, packed with improvements! Key changes include full support for generic type aliases, simplified tool dependency management (via tool directives in go.mod), and enhanced build caching and performance. The standard library gains os.Root for restricted filesystem access, along with new testing and cryptographic packages, boosting security and efficiency. Runtime, compiler, and linker improvements round out the release, along with optimizations for multiple platforms and architectures.

Development Generics

From Nand Gates to Pong: A Journey of Building a Computer

2025-02-18

The author spent nearly a month completing the first part of the Nand2Tetris course, building a 16-bit Von Neumann computer from the ground up, starting with basic Nand gates, culminating in successfully running the game Pong. This journey provided deep insights into abstraction and significantly enhanced his software development skills from a hardware perspective. The author also shares his experience overcoming challenges, such as the struggle to understand multiplexers and the eventual eureka moment.

Washing Machine Woes: A Metaphor for Software Estimation

2025-02-18

The author's recent experience installing a washing machine in a new home turned into a four-hour ordeal, far exceeding the initial ten-minute estimate. Unexpected problems arose, from drilling holes to replacing hoses, highlighting the challenges of software development estimation. The author draws a parallel between the unforeseen complications of the washing machine installation and the difficulties in accurately estimating software projects. Seemingly simple tasks often encounter unexpected obstacles, such as outdated tools, incompatible systems, or hidden requirements, leading to significant delays. The washing machine saga serves as a compelling metaphor for the unpredictable nature of software development, emphasizing the importance of thorough requirements gathering and risk assessment.

Development project estimation

Small but Mighty: Redefining Success in the Software Industry

2025-02-18

This article explores how small software companies can thrive against tech giants. The author highlights examples like SQLite, Hwaci, Pinboard, Tarsnap, Sublime Text, and Zig, showcasing their success despite their small size. These companies prioritize high-quality products, unique business models, and customer focus for long-term sustainability. They reject Silicon Valley's 'grow or die' mentality, opting for a more sustainable and fulfilling definition of success. Their human-centric approach fosters strong customer relationships. The author argues that this 'small but mighty' model isn't about lacking ambition, but choosing a different path to success.

Dedekind Cuts: A Revolutionary Approach to Defining Real Numbers

2025-02-18
Dedekind Cuts: A Revolutionary Approach to Defining Real Numbers

This article delves into Richard Dedekind's 1858 proposal of Dedekind cuts, a revolutionary approach that provided a firm foundation for the real number system. Dedekind cleverly used partitions of rational numbers to define real numbers, elegantly solving the problem of 'gaps' in the real number system caused by irrational numbers. The article compares Dedekind cuts with other methods of defining real numbers, such as infinite decimals, and analyzes the advantages and disadvantages of Dedekind cuts, as well as their impact and significance in mathematical history. Dedekind cuts not only resolved the definition of real numbers but also pioneered a new way of thinking in mathematics—the structuralist approach—emphasizing the relationships between mathematical objects rather than the inherent nature of the objects themselves.

RustOwl: Visualizing Ownership and Lifetimes in Rust

2025-02-18
RustOwl: Visualizing Ownership and Lifetimes in Rust

RustOwl is a powerful tool that visualizes ownership and lifetimes of variables in Rust code. Using color-coded underlines, RustOwl intuitively displays variable lifetimes, immutable borrowing, mutable borrowing, and value movement, aiding developers in debugging and optimization. It supports VSCode, Neovim, and Emacs, offering various installation methods, including a simple command-line installation and manual installation from source code. While minor display issues may occasionally occur, RustOwl has demonstrated significant potential for improving Rust development efficiency.

Development

Creating and Installing a Self-Signed TLS Certificate and CA

2025-02-17
Creating and Installing a Self-Signed TLS Certificate and CA

This article demonstrates how to create a self-signed TLS certificate and Certificate Authority (CA) on a Linux system and install it to address the issue of browsers not trusting self-signed certificates. It details the steps for generating private keys, certificate signing requests, signing certificates, and installing the CA certificate on Ubuntu and Arch Linux systems. Instructions for importing the CA certificate into Firefox and Chromium browsers are also included. By creating your own CA and adding it to the trusted CA list, man-in-the-middle attacks can be effectively avoided, ensuring the security of your private network.

mt32-pi Development Halted Due to Online Abuse

2025-02-17
mt32-pi Development Halted Due to Online Abuse

The developer of mt32-pi, a bare-metal MIDI synthesizer for the Raspberry Pi emulating the Roland MT-32, has announced the project's termination due to sustained online abuse. This includes personal attacks, code theft, and stolen 3D print designs. The developer cited the negative impact on their mental health as the reason for ceasing development, expressing a lack of gratitude and encouragement from the community.

Development online abuse

Running ELKS on an NES: The NES86 Project

2025-02-17
Running ELKS on an NES: The NES86 Project

The NES86 project is an amazing feat of engineering: an IBM PC emulator running on the NES! By emulating an Intel 8086 processor and supporting PC hardware, it successfully runs the ELKS (Embeddable Linux Kernel Subset), including a shell and utilities. This means you can run some x86 software on your old NES, albeit limited to a simple serial terminal. The project is open-source and provides detailed build instructions, covering both the compilation of the ELKS image and the generation of the NES86 ROM. Prepare for a challenge—running a modern OS on retro hardware!

Development

Simplifying Apple Watch/iOS App Communication with Racket Macros

2025-02-17

Developing an Apple Watch app involves handling communication with its iOS counterpart. The author uses Racket macros to define a Domain Specific Language (DSL) that auto-generates Swift code to handle the complexities of the WatchConnectivity framework, including message encoding, decoding, and message handler implementation. This avoids a lot of boilerplate code, improving maintainability and reliability. By defining message types and handlers, the DSL automatically generates Swift enums, structs, functions for sending messages, and a message handling protocol, greatly simplifying the development process.

Development Macro Programming

Cracking the Anti-Debugging Protections of an iOS Widget App

2025-02-17
Cracking the Anti-Debugging Protections of an iOS Widget App

This post details the author's experience cracking the anti-debugging protections of an iOS Widget app. The app employed multiple protection methods, including blocking debugger attachment, early exit on code injection, and crashing the entire phone when run on a jailbroken device. The author systematically analyzed these protections, focusing on the use of the `ptrace` function's `PT_DENY_ATTACH` request to prevent debugger attachment. The author explains how to bypass `ptrace` and prevent the phone crash, ultimately succeeding in attaching the debugger and injecting code.

Reddit Moderators Battle Generative AI Spam: A Time-Wasting War

2025-02-17
Reddit Moderators Battle Generative AI Spam: A Time-Wasting War

Reddit moderators are grappling with a surge of generative AI-produced spam, filled with irrelevant posts and attacks on users. While some moderators acknowledge AI's potential for novel content, many find the low-quality output and difficulty in distinguishing AI-generated content from human-generated content overwhelming. The biggest issue, however, isn't the content itself but the significant time investment required for moderation. This time drain, spent identifying AI-generated posts, responding to AI evangelists, and handling appeals, diverts resources from other community-building activities. Moderators describe battling AI enthusiasts as a constant struggle.

Development Reddit Moderation Spam

One Year Debugging Sleep-Wake Hangs on Linux with AMD GPUs

2025-02-17

The author encountered a persistent issue where their Linux system, equipped with an AMD RX 570 GPU, would crash or hang after attempting to sleep, often resulting in a black screen upon waking. After over a year of intense debugging, involving journal analysis, systemd configuration tweaks, a debug shell, even Ghidra reverse engineering, the root cause was identified as an amdgpu driver bug related to VRAM backup during high memory usage. The solution, finally implemented, leverages the power management notifier API to preemptively back up VRAM before sleep, preventing memory exhaustion errors. This fix is expected in the stable Linux kernel 6.14 release.

Development GPU driver

Run Rails in Your Browser: The Magic of WebAssembly

2025-02-17
Run Rails in Your Browser: The Magic of WebAssembly

Imagine running a fully functional Rails blog in your browser—frontend and backend—without servers or clouds! WebAssembly makes running server-side frameworks locally possible, blurring the lines of classic web development. This post shows how to package a Rails app into a WebAssembly module and run it in the browser, recreating the magic of Rails' famous "15-minute blog" tutorial, but this time, your browser is the runtime. This is not just a technical demo; it showcases the boundless possibilities of WebAssembly, including offline apps and local application development.

Development Browser Applications

Open Source Projects Could Monetize SBOM Fragments

2025-02-17
Open Source Projects Could Monetize SBOM Fragments

Scanning source code for licensing information is a laborious and often duplicated effort due to a lack of resource pooling among companies. This article proposes a solution: Open Source projects could sell SBOM fragments (components in CycloneDX or packages in SPDX with accurate licensing details). By sponsoring the project on GitHub, companies would gain access to continuously updated SBOM information, avoiding redundant work and ensuring licensing accuracy.

hk: A Blazing-Fast Rust-Based Git Hook Manager

2025-02-17

hk, a Git pre-commit hook manager written in Rust, prioritizes performance and ease of use. It addresses shortcomings in existing tools like `mise` and `pre-commit`, such as running tasks only on specific file changes and cumbersome plugin management. Using the pkl configuration format and advanced parallel execution logic, hk significantly improves speed. Compared to `lefthook`, hk boasts superior speed and more built-in features, eliminating the plugin reliance of `pre-commit`. Currently in development, hk aims to achieve parity with `lefthook` and `pre-commit` in usability while continuously enhancing performance and features.

Development

A Legacy Project: Why Wrestling with the Past Makes You a Better Developer

2025-02-17
A Legacy Project: Why Wrestling with the Past Makes You a Better Developer

This article details the author's experience working on a legacy project built with the outdated Ant build system and lacking modern dependency injection. The challenges encountered forced a reevaluation of modern software development best practices—clean code, automated testing, CI/CD, and agile—and provided a deeper understanding of their underlying rationale. While arduous, the project's successful completion offered valuable insights into the evolution of development methodologies and the importance of team collaboration and end-to-end ownership.

Shared Unix Hosting vs. the Cloud: A Veteran Blogger's Migration Tale

2025-02-17

After 15 years with Dreamhost, a veteran blogger migrated their oils.pub domain to Mythic Beasts due to instability in Dreamhost's FastCGI support. The post explores the trade-offs between shared Unix hosting and cloud services. The author argues that while cloud services appear modern, they lack open protocols and long-term stability; shared hosting, while limited in options, offers better programmability and portability based on Unix, making it more suitable for lightweight scripting and long-term maintenance. Several shared hosting providers are compared, ultimately recommending Mythic Beasts and OpalStack for their strong Unix support.

Development shared hosting

C++ Thread-Local Storage Performance Pitfalls: 0 + 0 > 0?

2025-02-17
C++ Thread-Local Storage Performance Pitfalls: 0 + 0 > 0?

This article delves into the performance implications of using thread_local variables in C++. By analyzing assembly code, the author reveals significant performance discrepancies in different scenarios, particularly with thread_local variables having constructors and those used in shared libraries. Even simple accesses can suffer dramatic slowdowns due to constructor calls, dynamic loading of shared libraries, and other factors. The article concludes with performance optimization guidelines and discusses future improvements, aiming to help developers avoid thread_local performance traps.

Development

The Open Source Maintainer Crisis: Burnout, Pressure, and an Uncertain Future

2025-02-17
The Open Source Maintainer Crisis: Burnout, Pressure, and an Uncertain Future

The 2025 State Of Open conference highlighted the plight of open source maintainers: volunteers pour countless hours into projects with little support, leading many to quit or consider quitting. The resignation of Asahi Linux lead Hector Martin due to burnout and demanding users exemplifies this crisis. Maintainers face pressure from users, endless requests, and occasional negativity. Even with minimal corporate sponsorship, the demands far outweigh the support. Surveys reveal many maintainers considering quitting, and many projects may become unmaintained. The problem isn't solely financial; it also requires more contributors to share non-coding tasks like community management and fundraising. But change needs a catalyst—perhaps a major project collapse will finally convince people that paying open source maintainers is crucial.

Is ChatGPT's Autocomplete a UX/UI Fail?

2025-02-17
Is ChatGPT's Autocomplete a UX/UI Fail?

This article questions the UX/UI design of ChatGPT's autocomplete feature. The author argues that while autocomplete is helpful in search bars due to a limited response space and high success rate, it's disruptive in chat. ChatGPT frequently fails to predict user input, interrupting their thought process and causing frustration. The author likens ChatGPT's autocomplete to a colleague constantly interrupting conversations, questioning the design's usability and expressing confusion about its perceived value.

Development

Modeling the Fellowship's Social Network with SQL

2025-02-17

This code snippet demonstrates a simple relational database model depicting friendships within Tolkien's Lord of the Rings universe. Using SQL `INSERT` statements, it defines 'friend' edges connecting characters like Frodo, Sam, Gandalf, Aragorn, Legolas, Gimli, and Bilbo, illustrating their social network. This provides foundational data for analyzing character relationships and building a social graph.

Development relational model

6.4TB SQLite Database Powers Searchcode.com's Upgrade

2025-02-17

Searchcode.com, a source code search engine, migrated its database from MySQL to SQLite, resulting in a massive 6.4TB SQLite database—likely one of the largest publicly facing instances. Driven by a desire for a single binary deployment and reduced dependencies, the migration wasn't without challenges. Issues like database locking and cross-compilation complexities were overcome using dual database connections, a pure Go SQLite version, and filesystem-level compression (BTRFS with zstd). The result? A significantly faster and more scalable Searchcode.com with improved search speed and backend processes.

Umami: A Privacy-Focused Google Analytics Alternative

2025-02-17
Umami: A Privacy-Focused Google Analytics Alternative

Umami is a simple, fast, and privacy-focused alternative to Google Analytics. It supports MariaDB, MySQL, and PostgreSQL databases. Installation is straightforward: clone the GitHub repo, install dependencies, and configure the database connection. It runs by default on http://localhost:3000. Docker images are available for easy deployment. Detailed getting started instructions are provided.

Development analytics

WinterBreak: A New Kindle Jailbreak Released

2025-02-17

A new Kindle jailbreak, WinterBreak, was released on New Year's Day 2025 by HackerDude. Based on Mesquito, this tool offers a straightforward jailbreaking process. Users need to extract the WinterBreak files to their Kindle, reboot, and then run it through the Kindle Store. Troubleshooting steps are provided for common errors like "Unexpected error" in the Kindle Store, often solved by a factory reset and cache deletion. The project acknowledges the significant contributions of its beta testers.

Development Kindle Jailbreak

Register Allocation in Compilers: A Deep Dive

2025-02-17
Register Allocation in Compilers: A Deep Dive

This article provides a clear explanation of the complexities of register allocation in compilers. Starting with a simple function example, it demonstrates how variables are mapped to registers and how stack space (spilling) is used when registers are insufficient. The article details two algorithms, linear scan and graph coloring, and explores additional challenges in real-world architectures, such as calling conventions and instruction set limitations. Even seemingly simple register allocation is fraught with optimization and trade-off challenges, making it a remarkably challenging aspect of compiler implementation.

Development register allocation

The Double-Edged Sword of AI Coding Tools: Speed vs. Understanding

2025-02-17
The Double-Edged Sword of AI Coding Tools: Speed vs. Understanding

A new generation of programmers relies on AI coding tools (like Copilot) to boost efficiency, but at the cost of understanding the underlying logic of the code. The author contrasts this with the deep learning approach of programmers who previously used Stack Overflow, pointing out that the convenience of AI tools masks a lack of fundamental knowledge, potentially leading to developers lacking the ability to solve complex problems. The article suggests that programmers should maintain a critical mindset while using AI tools, actively participate in technical discussions, and try building projects from scratch to deepen their understanding.

(nmn.gl)
Development learning methods

Veteran Open-Source Driver Developer Resigns Over Inclusivity Concerns

2025-02-17

Longtime Nouveau driver developer Karol Herbst resigned as a maintainer of the open-source NVIDIA Linux graphics driver due to disagreements with the upstream Linux kernel community regarding inclusivity and respect. In his resignation, Herbst stated his belief that the open-source community should operate on principles of equality and respect, expressing his disapproval of statements made by other maintainers perceived as exclusionary. He cited the phrase "we are the thin blue line" as a particular concern, highlighting the harm such statements cause. While Red Hat developers Lyude Paul and Danilo Krummrich will continue Nouveau maintenance, Red Hat is also developing NOVA, a new Rust-based open-source NVIDIA kernel driver.

Development Nouveau driver
1 2 10 11 12 14 16 17 18 66 67