Feed | devblogs.sh

4 min read Original article ↗

no strcpy either

The post explains why unbounded string-copy functions are risky in long-lived C code and describes replacing strcpy (and earlier strncpy uses) with a safer copy routine that requires destination size and source length, uses memcpy, and explicitly null-terminates or clears the destination on failure. The change enforces size checks next to the copy operation to improve maintainability and correctness and reduces a class of potential buffer issues and related false-positive vulnerability reports.


Quoting Jason Gorman

The quote argues that the hardest part of programming is not writing code but converting imprecise, ambiguous human thinking into precise computational thinking that can be expressed formally; this has always been the challenge across generations of programming and remains true today even when using language models to generate code. It highlights that the essential difficulty is knowing exactly what to ask for, and that AI-assisted coding is another manifestation of the same underlying problem.


AI-first debugging: Tools and techniques for faster root cause analysis

The article surveys AI-first debugging approaches that augment traditional techniques by using LLMs and related models to summarize and cluster logs, explain stack traces, generate candidate reproductions and tests, and surface predictive signals. It discusses practical tools and model trade-offs, presents a short case study showing meaningful time savings and limitations (hallucinations, privacy, cost), and argues that AI should amplify — not replace — human validation, especially when integrated with observability and session replay for richer context.


Understanding Dolt Directories

The article explains how Dolt represents databases on the filesystem, tracing its Git-like origins (a .dolt directory per database) and showing how database names are derived from directory names. It then covers the introduction of SQL and a MySQL-compatible server, how a running sql-server scans the current directory and subdirectories to serve multiple databases, and the operational edge cases that arise when the CLI and server interact (concurrency, lock files, and disallowed commands like dolt checkout while a server is running).


Good technology blogs: a reading list for the holidays

A curated holiday reading list of technical blogs covering low-level performance engineering, algorithms, compilers, operating systems, compression, profiling, databases, and some AI; each recommended author/blog is annotated with why their work is valuable (e.g., optimized kernels, compression libraries, profiling tools, or DB internals). The post highlights many practical projects and libraries and directs readers to sources that deepen understanding of performance, systems, and database design.


Software engineers should be a little bit cynical

The article argues engineers should adopt a modest, pragmatic cynicism to form a realistic model of how large tech organizations work and to use organizational influence to ship meaningful work. It contrasts naïve idealism (never compromise) with pragmatic engagement in company politics, contending that participating in messy coordination is often the most effective way to help users and improve large products.


'Better C' playgrounds

The author presents online interactive playgrounds for the “better C” family of languages (C3, Hare, Odin, V, Zig), providing code examples, links to language resources, and options to embed or self-host the sandboxes. The post emphasizes that interactive documentation helps people learn languages and notes there are fuller online editors available, inviting contributions to create interactive guides.


What Are Database Keys and Their Types Explained with Examples

This article is a comprehensive guide to database keys: it defines keys, explains why they matter (uniqueness, relationships, integrity, and query efficiency), distinguishes keys from constraints and indexes, and walks through the main key types with SQL examples. It also covers natural vs surrogate (business) keys, gives a practical checklist for choosing keys, explains differences between OLTP and analytical/warehouse systems, and highlights common mistakes and performance tradeoffs (index size, join cost, distributed key generation).


A curl 2025 review

A comprehensive 2025 year-in-review for the curl project summarizing contribution and release metrics (3,400+ commits, 150+ authors, nearly 100 first-timers), increased test coverage (+232 tests to 2,179), eight releases, and steady codebase growth while reducing complexity and improving performance. The report also details tooling and protocol changes (experimental HTTPS-RR, OpenSSL QUIC API leading to backend deprecation), an unusually high bugfix cadence, and the move to release candidates to catch regressions. The post highlights a significant security workload driven by an influx of (often AI-generated) security reports and nine published CVEs, plus many fixes sourced from new AI code analyzers. It also notes increased CI and dashboard activity, web traffic growth, removal of legacy platform support, and community recognition through awards and conference appearances.


Copyright Release for Contributions To SQLite

The post corrects an earlier claim by explaining that SQLite does accept external contributions but requires contributors to sign a copyright release to confirm contributions are in the public domain and prevent licensed code from contaminating the core. The author links to the copyright release, quotes its relevant wording, and shows a Fossil SQL query used to count external contributors (finding 38 rows), while apologizing for the prior misinformation.