# Joe Nelson

Published articles for Joe Nelson.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## How to build dependable bare-metal ARM firmware with UNIX tools

DevFeed: [How to build dependable bare-metal ARM firmware with UNIX tools](<https://devfeed.tech/articles/how-to-build-dependable-bare-metal-arm-firmware-with-unix-tools-21493.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2023-10-10-bare-metal-firmware.html>)

Published: 2023-10-10T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Embedded Software Dev](<https://devfeed.tech/topics/embedded-software-dev.md>), [Arm](<https://devfeed.tech/topics/arm.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>)

Tags: [arm](<https://devfeed.tech/tags/arm.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [embedded](<https://devfeed.tech/tags/embedded.md>), [firmware](<https://devfeed.tech/tags/firmware.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [macos](<https://devfeed.tech/tags/macos.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [programming](<https://devfeed.tech/tags/programming.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>)

### AI overview

A guide to building dependable bare-metal ARM firmware with open source Unix tools. It covers embedded development practices, toolchains, boot-up sequences, memory allocation, RTOS and non-RTOS programs, fault handling, remote debugging, and building and flashing firmware through several versions of a simple blinky project.

### Source excerpt

2023-10-10 For software developers, the world of hardware and firmware can be an exciting change. Firmware catapults your logic into the physical world. Rather than moving text between forms and a database, you can move motors. Rather than listening for an API call, you can listen for SONAR or GPS signals. This is the guide I wish I had when first starting embedded development. It cultivates professional embedded programming habits from the start.

## Pleasant debugging with GDB and DDD

DevFeed: [Pleasant debugging with GDB and DDD](<https://devfeed.tech/articles/pleasant-debugging-with-gdb-and-ddd-21492.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2022-07-17-debugging-gdb-ddd.html>)

Published: 2022-07-17T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Scripting](<https://devfeed.tech/topics/scripting.md>), [Text-based user interface](<https://devfeed.tech/topics/tui.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [ddd](<https://devfeed.tech/tags/ddd.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [gdb](<https://devfeed.tech/tags/gdb.md>), [linux](<https://devfeed.tech/tags/linux.md>), [scripting](<https://devfeed.tech/tags/scripting.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

This article presents configuration and scripting techniques for making GDB debugging more pleasant on Linux and BSD systems. It compares several interface-customization approaches and focuses on using the Data Display Debugger (DDD), including workarounds for its compatibility problems with recent GDB versions and its remote SSH support.

### Source excerpt

2022-07-17 GDB is an old and ubiquitous debugger for Linux and BSD systems that has extensive language, processor, and binary format support. Its interface is a little cryptic, but learning GDB pays off. This article is a set of miscellaneous configuration and scripting tricks that illustrate reusable principles. It assumes you're familiar with the basics of debugging, like breakpoints, stepping, inspecting variables, etc. Table of contents By default, GDB provides a terse line-based terminal.

## Practical parsing with Flex and Bison

DevFeed: [Practical parsing with Flex and Bison](<https://devfeed.tech/articles/practical-parsing-with-flex-and-bison-21491.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2021-11-28-practical-parsing.html>)

Published: 2021-11-28T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [C](<https://devfeed.tech/topics/c.md>), [Regular expression](<https://devfeed.tech/topics/regular-expression.md>), [make](<https://devfeed.tech/topics/make.md>)

Tags: [build-system](<https://devfeed.tech/tags/build-system.md>), [c](<https://devfeed.tech/tags/c.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [lexer](<https://devfeed.tech/tags/lexer.md>), [make](<https://devfeed.tech/tags/make.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [scanner](<https://devfeed.tech/tags/scanner.md>)

### AI overview

A practical guide to parsing with Lex, Yacc, Flex, and Bison. It explains how lexing divides input into meaningful chunks, how parsing groups those chunks according to recursive rules, and how parser generators can be integrated into build systems and used for real data formats.

### Source excerpt

2021-11-28 Although parsing is often described from the perspective of writing a compiler, there are many common smaller tasks where it's useful. Reading file formats, talking over the network, creating shells, and analyzing source code are all easier using a robust parser. By taking time to learn general-purpose parsing tools, you can go beyond fragile homemade solutions, and inflexible third-party libraries. We'll cover Lex and Yacc in this guide because they are mature and portable.

## Dynamic linking best practices

DevFeed: [Dynamic linking best practices](<https://devfeed.tech/articles/dynamic-linking-best-practices-21490.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2021-07-04-shared-libraries.html>)

Published: 2021-07-04T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [design](<https://devfeed.tech/tags/design.md>), [history](<https://devfeed.tech/tags/history.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [library](<https://devfeed.tech/tags/library.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [systems](<https://devfeed.tech/tags/systems.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A practical guide to building and properly installing shared libraries across Unix-like platforms. It explains the history, goals, mechanics, benefits, trade-offs, and compatibility considerations of dynamic linking.

### Source excerpt

2021-07-04 In this article we'll learn how to build shared libraries and install them properly on several platforms. For guidance, we'll examine the goals and history of dynamic linking on UNIX-based operating systems. Content for the article comes from researching how to create a shared library, wading through sloppy conventions that people recommend online, and testing on multiple Unix-like systems.

## Tips for stable and portable software

DevFeed: [Tips for stable and portable software](<https://devfeed.tech/articles/tips-for-stable-and-portable-software-21489.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2020-08-31-portable-stable-software.html>)

Published: 2020-08-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [C](<https://devfeed.tech/topics/c.md>), [Development](<https://devfeed.tech/topics/development.md>), [systems](<https://devfeed.tech/topics/systems.md>), [cloud-infrastructure](<https://devfeed.tech/topics/cloud-infrastructure.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [development](<https://devfeed.tech/tags/development.md>), [portable](<https://devfeed.tech/tags/portable.md>), [posix](<https://devfeed.tech/tags/posix.md>), [programming](<https://devfeed.tech/tags/programming.md>), [software](<https://devfeed.tech/tags/software.md>), [standards](<https://devfeed.tech/tags/standards.md>), [tips](<https://devfeed.tech/tags/tips.md>)

### AI overview

The article presents principles for building stable, portable software that remains easy to build across systems and continues working as environments change. It recommends understanding software in layers, preferring languages beyond the single-implementation stage, and using standardized languages when long-term compatibility matters. The author discusses C, POSIX compatibility, foundational libraries, and selecting an appropriate language-standard version such as C99.

### Source excerpt

2020-08-31 After several years' involvement with quickly evolving programming languages, I've come to appreciate stability. I'd like to make my programs easy to build on a wide variety of systems with minimal adjustment. I'd like them to keep working long into the future as environments change. To think about stability more clearly, let's divide a functioning program into its layers. Then we can examine development choices one layer at a time.

## Create impeccable MIME email from markdown

DevFeed: [Create impeccable MIME email from markdown](<https://devfeed.tech/articles/create-impeccable-mime-email-from-markdown-21488.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2020-07-16-generating-mime-email.html>)

Published: 2020-07-16T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Markdown](<https://devfeed.tech/topics/markdown.md>), [Code](<https://devfeed.tech/topics/code.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [Library](<https://devfeed.tech/topics/library.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [display](<https://devfeed.tech/tags/display.md>), [external](<https://devfeed.tech/tags/external.md>), [flow](<https://devfeed.tech/tags/flow.md>), [generate](<https://devfeed.tech/tags/generate.md>), [github](<https://devfeed.tech/tags/github.md>), [html](<https://devfeed.tech/tags/html.md>), [iso](<https://devfeed.tech/tags/iso.md>), [library](<https://devfeed.tech/tags/library.md>), [links](<https://devfeed.tech/tags/links.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [portable](<https://devfeed.tech/tags/portable.md>), [render](<https://devfeed.tech/tags/render.md>), [snippet](<https://devfeed.tech/tags/snippet.md>), [structure](<https://devfeed.tech/tags/structure.md>), [terminal](<https://devfeed.tech/tags/terminal.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This article presents mimedown, a portable C99 utility that converts Markdown read from standard input into multipart MIME email written to standard output. It supports HTML and text alternatives, code snippets as inline attachments, external-link references, format=flowed text wrapping, and conservative ISO HTML output.

### Source excerpt

2020-07-16 I want to create emails that look their best in all mail clients, whether graphical or text based. Ideally I'd write a message in a simple format like Markdown, and generate the final email from the input file. Additionally, I'd like to be able to include fenced code snippets in the message, and make them available as attachments. I created a utility called mimedown that reads markdown through stdin and prints multipart MIME to stdout. Let's see it in action.

## Concurrent programming, with examples

DevFeed: [Concurrent programming, with examples](<https://devfeed.tech/articles/concurrent-programming-with-examples-21487.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2020-03-23-concurrent-programming.html>)

Published: 2020-03-23T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>), [API](<https://devfeed.tech/topics/api.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [concurrent-programming](<https://devfeed.tech/tags/concurrent-programming.md>), [posix](<https://devfeed.tech/tags/posix.md>), [thread](<https://devfeed.tech/tags/thread.md>)

### AI overview

An introductory article on concurrent programming that explains concurrency versus parallelism and covers threading and locking as practical techniques for building concurrent software. It introduces POSIX threads and discusses how concurrency can benefit from hardware parallelism, including limitations imposed by global interpreter locks in Ruby MRI and CPython.

### Source excerpt

2020-03-23 Mention concurrency and you're bound to get two kinds of unsolicited advice: first that it's a nightmarish problem which will melt your brain, and second that there's a magical programming language or niche paradigm which will make all your problems disappear. We won't run to either extreme here. Instead we'll cover the production workhorses for concurrent software - threading and locking - and learn about them through a series of interesting programs.

## History and effective use of Vim

DevFeed: [History and effective use of Vim](<https://devfeed.tech/articles/history-and-effective-use-of-vim-21486.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2019-07-19-history-use-vim.html>)

Published: 2019-07-19T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Vim](<https://devfeed.tech/topics/vim.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [blog](<https://devfeed.tech/tags/blog.md>), [effective](<https://devfeed.tech/tags/effective.md>), [history](<https://devfeed.tech/tags/history.md>), [intellectual-property](<https://devfeed.tech/tags/intellectual-property.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [posix](<https://devfeed.tech/tags/posix.md>), [systems](<https://devfeed.tech/tags/systems.md>), [vim](<https://devfeed.tech/tags/vim.md>)

### AI overview

An article on Vim's historical development and effective use. It traces the editor's lineage from QED through ed, ex, and vi, and encourages readers to study Vim's core functionality, use plugins thoughtfully, and rely less on pre-packaged vimrc files.

### Source excerpt

2019-07-19 This article is based on historical research and on simply reading the Vim user manual cover to cover. Hopefully these notes will help you (re?)discover core functionality of the editor, so you can abandon pre-packaged vimrc files and use plugins more thoughtfully. To go beyond the topics in this blog post, I'd recommend getting a paper copy of the manual and a good pocket reference.

## Unicode programming, with examples

DevFeed: [Unicode programming, with examples](<https://devfeed.tech/articles/unicode-programming-with-examples-21485.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2019-05-23-unicode-icu.html>)

Published: 2019-05-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [ASCII](<https://devfeed.tech/topics/ascii.md>), [C](<https://devfeed.tech/topics/c.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [ascii](<https://devfeed.tech/tags/ascii.md>), [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [examples](<https://devfeed.tech/tags/examples.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

An introduction to Unicode text processing that explains why handling human-language strings is complex and uses example programs to illustrate the concepts.

### Source excerpt

2019-05-23 Most programming languages evolved awkwardly during the transition from ASCII to 16-bit UCS-2 to full Unicode. They contain internationalization features that often aren't portable or don't suffice. Unicode is more than a numbering scheme for the characters of every language - although that in itself is a useful accomplishment. Unicode also includes characters' case, directionality, and alphabetic properties.

## Inside the C Standard Library

DevFeed: [Inside the C Standard Library](<https://devfeed.tech/articles/inside-the-c-standard-library-21484.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2019-01-19-inside-c-standard-lib.html>)

Published: 2019-01-19T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [C](<https://devfeed.tech/topics/c.md>), [Library](<https://devfeed.tech/topics/library.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Unix](<https://devfeed.tech/topics/unix.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [library](<https://devfeed.tech/tags/library.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>)

### AI overview

An exploration of the C standard library based on P. J. Plauger's The Standard C Library. The article discusses implementation details, portability, C behavior, and the historical development of the C89 standard, with comparisons to C99 and C11 where relevant.

### Source excerpt

2019-01-19 After diving into the C language through K&R, and then studying portability (see C Portability Lessons from Weird Machines), my next challenge was to take a systematic look at the standard library. To do this I worked through P. J. Plauger's book The Standard C Library (ISBN 978-0131315099) where he examines an implementation of all the functions.

## C Portability Lessons from Old Machines

DevFeed: [C Portability Lessons from Old Machines](<https://devfeed.tech/articles/c-portability-lessons-from-old-machines-21483.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2018-11-15-c-portability.html>)

Published: 2018-11-15T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [C](<https://devfeed.tech/topics/c.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [architectures](<https://devfeed.tech/tags/architectures.md>), [article](<https://devfeed.tech/tags/article.md>), [book](<https://devfeed.tech/tags/book.md>), [c](<https://devfeed.tech/tags/c.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [microcontrollers](<https://devfeed.tech/tags/microcontrollers.md>), [pointers](<https://devfeed.tech/tags/pointers.md>), [portable](<https://devfeed.tech/tags/portable.md>), [porting](<https://devfeed.tech/tags/porting.md>), [systems](<https://devfeed.tech/tags/systems.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

The article examines C portability by tracing how carefully written ANSI C using standard library functions can compile and work across systems ranging from 4-bit microcontrollers to room-sized mainframes. It uses unusual architectures, word sizes, integer representations, and pointer models to show how portable code separates the language from the environment and remains applicable to modern CPUs.

### Source excerpt

2018-11-15 In this article we'll go on a journey from 4-bit microcontrollers to room-sized mainframes and learn how porting C to each of them helped people separate the essence of the language from the environment of its birth. I've found technical manuals and videos for this article to help bring each computer to life.

## Actually, DMARC works fine with mailing lists

DevFeed: [Actually, DMARC works fine with mailing lists](<https://devfeed.tech/articles/actually-dmarc-works-fine-with-mailing-lists-21482.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2018-09-18-dmarc-mailing-list.html>)

Published: 2018-09-18T00:00:00Z

Content type: opinion

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [configuration](<https://devfeed.tech/topics/configuration.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [phishing](<https://devfeed.tech/tags/phishing.md>), [techniques](<https://devfeed.tech/tags/techniques.md>)

### AI overview

The article argues that DMARC can work correctly with mailing lists when the lists use appropriate configuration. It explains SPF, DKIM, and DMARC alignment, and criticizes workarounds such as From-munging and MIME message wrapping.

### Source excerpt

2018-09-18 There's a common belief online that DMARC, an anti-phishing technology, prevents the proper operation of electronic mailing lists. To get around the perceived problem, many articles advise reconfiguring listserv software in ways that break the norms of SMTP. However there is a configuration that allows mailing lists to work perfectly and still be able to relay messages in the presence of DMARC. Before describing it, let's get some terminology straight.

## Mailing lists vs Github

DevFeed: [Mailing lists vs Github](<https://devfeed.tech/articles/mailing-lists-vs-github-21481.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2018-06-05-mailing-list-vs-github.html>)

Published: 2018-06-05T00:00:00Z

Content type: comparison

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [GitHub](<https://devfeed.tech/topics/github.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Git](<https://devfeed.tech/topics/git.md>), [GitLab](<https://devfeed.tech/topics/gitlab.md>)

Tags: [collaboration](<https://devfeed.tech/tags/collaboration.md>), [compare](<https://devfeed.tech/tags/compare.md>), [github](<https://devfeed.tech/tags/github.md>), [gitlab](<https://devfeed.tech/tags/gitlab.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>), [version-control](<https://devfeed.tech/tags/version-control.md>)

### AI overview

A comparison of developer mailing lists with GitHub-style code collaboration platforms, including GitLab. It explains how GitHub supports forks, branches, pull requests, comments, commits, bug tracking, wikis, and release artifacts, while mailing lists use email discussions and textual patches. The article argues that threaded email, patch generation, and flexible mixing of discussion with patches can provide greater precision and flexibility than the GitHub UI.

### Source excerpt

2018-06-05 Most fledgling open source projects use Github or Gitlab to collaborate on code. However there's an older method that developers ought to know about because it offers some advantages. The alternative method is the developer mailing list. It arose in the late eighties to early nineties, and predates the popularity of the web browser.

## User-defined Order in SQL

DevFeed: [User-defined Order in SQL](<https://devfeed.tech/articles/user-defined-order-in-sql-21480.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2018-03-20-user-defined-order.html>)

Published: 2018-03-20T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [SQL](<https://devfeed.tech/topics/sql.md>), [To-Do](<https://devfeed.tech/topics/todo.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [applications](<https://devfeed.tech/tags/applications.md>), [article](<https://devfeed.tech/tags/article.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

This article examines ways to model user-defined item order in SQL, including sequential integers, deferred uniqueness constraints, spaced position values, floating-point numbers, and precise numeric types. It considers how each approach handles inserting and reordering items, including update constraints and precision limits.

### Source excerpt

2018-03-20 Some applications, such as todo lists, need to maintain a user-defined order of items. The challenge is that the order is arbitrary and can change when the user rearranges items: This article investigates the best way to model the situation in SQL.

## SQL Keys in Depth

DevFeed: [SQL Keys in Depth](<https://devfeed.tech/articles/sql-keys-in-depth-21479.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2018-01-01-sql-keys-in-depth.html>)

Published: 2018-01-01T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Databases](<https://devfeed.tech/topics/databases.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [databases](<https://devfeed.tech/tags/databases.md>), [relational-databases](<https://devfeed.tech/tags/relational-databases.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

An in-depth discussion of keys in relational databases, including the debate over natural and artificial keys, the definition of a key as an irreducibly unique column or column combination, and examples involving card tables and database-enforced constraints.

### Source excerpt

2018-01-01 The internet is full of dogmatic commandments for choosing and using keys in relational databases. At times it verges on a holy war: should you use natural or artificial keys? Auto-incrementing integers, UUIDs? After wading through sixty-four articles, skimming sections in five books, and asking questions on IRC and StackOverflow I think I've put the pieces together and have a recommendation to harmonize the various camps.

## PostgreSQL Domain Integrity In Depth

DevFeed: [PostgreSQL Domain Integrity In Depth](<https://devfeed.tech/articles/postgresql-domain-integrity-in-depth-21478.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2017-10-21-sql-domain-integrity.html>)

Published: 2017-10-21T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [data](<https://devfeed.tech/topics/data.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [data](<https://devfeed.tech/tags/data.md>), [errors](<https://devfeed.tech/tags/errors.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [locale](<https://devfeed.tech/tags/locale.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [precision](<https://devfeed.tech/tags/precision.md>), [sql](<https://devfeed.tech/tags/sql.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [types](<https://devfeed.tech/tags/types.md>), [us](<https://devfeed.tech/tags/us.md>)

### AI overview

An in-depth guide to SQL domain integrity, centered on PostgreSQL. It explains how column types and custom domains restrict values, prevent input errors, and improve data consistency, with practical examples involving fixed-precision monetary values and gas prices.

### Source excerpt

2017-10-21 SQL has many features to protect data, and domain integrity constraints are one of the most fundamental. Put simply, they restrict columns to sensible values and prevent data input errors and other problems. On the surface domain integrity is simpler than other techniques such as referential integrity. Domains usually don't need to cross-reference values in multiple tables. However in this article we'll see some advanced tricks to keep data squeaky clean.

## Deferrable SQL Constraints in Depth

DevFeed: [Deferrable SQL Constraints in Depth](<https://devfeed.tech/articles/deferrable-sql-constraints-in-depth-21477.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2017-08-27-deferrable-sql-constraints.html>)

Published: 2017-08-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Databases](<https://devfeed.tech/topics/databases.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>)

Tags: [2017](<https://devfeed.tech/tags/2017.md>), [automatic](<https://devfeed.tech/tags/automatic.md>), [database](<https://devfeed.tech/tags/database.md>), [databases](<https://devfeed.tech/tags/databases.md>), [errors](<https://devfeed.tech/tags/errors.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [procedural](<https://devfeed.tech/tags/procedural.md>), [relational-databases](<https://devfeed.tech/tags/relational-databases.md>), [sql](<https://devfeed.tech/tags/sql.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

An in-depth explanation of deferrable SQL constraints, focusing on how PostgreSQL lets transactions postpone constraint checks while preserving data correctness.

### Source excerpt

2017-08-27 One strength of relational databases is their constant vigilance over data correctness. The user can declare constraints that their data must obey, and then leave it to the database to enforce the rules. This saves a lot of procedural application code and potential errors. Automatic constraint enforcement is a powerful feature, and should be leveraged whenever possible. However there are times when it is convenient - and even necessary - to temporarily defer enforcement.

## Practical Guide to SQL Transaction Isolation

DevFeed: [Practical Guide to SQL Transaction Isolation](<https://devfeed.tech/articles/practical-guide-to-sql-transaction-isolation-21476.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2017-08-01-practical-guide-sql-isolation.html>)

Published: 2017-08-01T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [SQL](<https://devfeed.tech/topics/sql.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [atomic](<https://devfeed.tech/tags/atomic.md>), [database](<https://devfeed.tech/tags/database.md>), [guide](<https://devfeed.tech/tags/guide.md>), [sql](<https://devfeed.tech/tags/sql.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

A practical guide to SQL transaction isolation that explains isolation levels, transactions, ACID properties, database consistency, and the trade-off between correctness and performance in multi-user databases.

### Source excerpt

2017-08-01 You may have seen isolation levels in the documentation for your database, felt mildly uneasy, and went on with life. Few day-to-day examples of using transactions really mention isolation. Most use the database's default isolation level and hope for the best. It's a fundamental topic to understand however and you'll feel more comfortable if you dedicate some time to study this guide.

## Good books for deep hacks

DevFeed: [Good books for deep hacks](<https://devfeed.tech/articles/good-books-for-deep-hacks-21475.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2017-04-13-longterm-computing-reading.html>)

Published: 2017-04-13T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>), [coding](<https://devfeed.tech/topics/coding.md>), [D](<https://devfeed.tech/topics/d.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [systems](<https://devfeed.tech/topics/systems.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Git](<https://devfeed.tech/topics/git.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Document Object Model (DOM)](<https://devfeed.tech/topics/dom.md>)

Tags: [books](<https://devfeed.tech/tags/books.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [css](<https://devfeed.tech/tags/css.md>), [deep](<https://devfeed.tech/tags/deep.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [git](<https://devfeed.tech/tags/git.md>), [history](<https://devfeed.tech/tags/history.md>), [learning](<https://devfeed.tech/tags/learning.md>), [networking](<https://devfeed.tech/tags/networking.md>), [sql](<https://devfeed.tech/tags/sql.md>), [systems](<https://devfeed.tech/tags/systems.md>), [technical](<https://devfeed.tech/tags/technical.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

A curated reading list for long-term study of computer technology through projects and technically deep books. It emphasizes mature and historical ideas, C, manual memory management, concurrency, performance measurement, experimentation, debugging, SQL, transactions, recovery, TCP/IP, IPv6, radio, mesh networking, and delay-tolerant networked programs.

### Source excerpt

2017-04-13 For the past few months I've been compiling a list of books for a deep dive into interesting technical topics. My theory is that working on projects based on these topics will be like strong individual threads I can weave into epic hacks. This list is basically a curriculum for decades of learning about the wonders of computers. What's exciting about many of these books is how they draw on the good ideas from history.

## The Design and Use of QuickCheck

DevFeed: [The Design and Use of QuickCheck](<https://devfeed.tech/articles/the-design-and-use-of-quickcheck-21474.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2017-01-14-design-use-quickcheck.html>)

Published: 2017-01-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Haskell](<https://devfeed.tech/topics/haskell.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [Formal methods](<https://devfeed.tech/topics/formal-methods.md>)

Tags: [design](<https://devfeed.tech/tags/design.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [learning](<https://devfeed.tech/tags/learning.md>), [specifications](<https://devfeed.tech/tags/specifications.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tools](<https://devfeed.tech/tags/tools.md>), [verify](<https://devfeed.tech/tags/verify.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

This tutorial explains the design and practical use of QuickCheck, a Haskell library for property-based testing. It shows how properties replace manually authored input-output test cases, how QuickCheck generates random values to find counterexamples, and how specifications can serve as machine-checkable documentation.

### Source excerpt

2017-01-14 QuickCheck is the grandfather of property-based testing libraries. Despite being imitated in over thirty languages, the original implementation remains pre-eminent due to the type system and consistent logic of the Haskell language in which it is written. Prior randomized testing tools required learning a special language and grammar to generate complex test cases.

## Faster PostgreSQL Counting

DevFeed: [Faster PostgreSQL Counting](<https://devfeed.tech/articles/faster-postgresql-counting-21473.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2016-10-12-count-performance.html>)

Published: 2016-10-12T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [Database](<https://devfeed.tech/topics/database.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Statistics](<https://devfeed.tech/topics/statistics.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [blog](<https://devfeed.tech/tags/blog.md>), [compare](<https://devfeed.tech/tags/compare.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [extension](<https://devfeed.tech/tags/extension.md>), [performance](<https://devfeed.tech/tags/performance.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [speed](<https://devfeed.tech/tags/speed.md>), [statistics](<https://devfeed.tech/tags/statistics.md>), [techniques](<https://devfeed.tech/tags/techniques.md>)

### AI overview

This article examines how PostgreSQL optimizes row counting. It compares exact and estimated counts, duplicate and distinct counts, whole-table and filtered counts, and the speed and resource costs of different techniques. It also introduces parallel counting with the Citus PostgreSQL extension in a distributed database.

### Source excerpt

2016-10-12 (Cross-posted on the Citus Data blog.) Everybody counts, but not always quickly. This article is a close look into how PostgreSQL optimizes counting. If you know the tricks there are ways to count rows orders of magnitude faster than you do already. The problem is actually underdescribed - there are several variations of counting, each with its own methods. First think whether you need an exact count or whether an estimate suffices.

## Returning to the Original Social Network

DevFeed: [Returning to the Original Social Network](<https://devfeed.tech/articles/returning-to-the-original-social-network-21471.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2016-07-08-returning-original-social-network.html>)

Published: 2016-07-08T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Internet](<https://devfeed.tech/topics/internet.md>), [Networks](<https://devfeed.tech/topics/networks.md>), [Network](<https://devfeed.tech/topics/network.md>)

Tags: [distributed](<https://devfeed.tech/tags/distributed.md>), [dns](<https://devfeed.tech/tags/dns.md>), [free](<https://devfeed.tech/tags/free.md>), [guide](<https://devfeed.tech/tags/guide.md>), [history](<https://devfeed.tech/tags/history.md>), [internet](<https://devfeed.tech/tags/internet.md>), [network](<https://devfeed.tech/tags/network.md>), [networks](<https://devfeed.tech/tags/networks.md>), [registry](<https://devfeed.tech/tags/registry.md>), [search](<https://devfeed.tech/tags/search.md>), [tcp-ip](<https://devfeed.tech/tags/tcp-ip.md>)

### AI overview

This article argues for a return to a more distributed model of online communication centered on personal domain names, DNS, and email rather than centralized social networks. It explains domain leasing, registry operators, accredited registrars, and the process of finding and registering an available domain.

### Source excerpt

2016-07-08 Something has been lost. Before algorithmic timelines, message length restrictions and mass surveillance there was a more robust world. It's a distributed world that still lives behind the centralized allure of social networks. It's a world where every person owns a small part of the internet, where they control their medium and communicate freely. I'm referring to the domain name system and email. You may think that you take full advantage of them, but I suspect you don't.

## Five Ways to Paginate in PostgreSQL

DevFeed: [Five Ways to Paginate in PostgreSQL](<https://devfeed.tech/articles/five-ways-to-paginate-in-postgresql-21470.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2016-03-30-five-ways-to-paginate.html>)

Published: 2016-03-30T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Object-relational mapping](<https://devfeed.tech/topics/orm.md>), [SQLAlchemy](<https://devfeed.tech/topics/sqlalchemy.md>)

Tags: [application-development](<https://devfeed.tech/tags/application-development.md>), [database](<https://devfeed.tech/tags/database.md>), [orm](<https://devfeed.tech/tags/orm.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [sql](<https://devfeed.tech/tags/sql.md>), [sqlalchemy](<https://devfeed.tech/tags/sqlalchemy.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>)

### AI overview

This article examines several server-side pagination methods in PostgreSQL, compares their tradeoffs, and explains when client-side pagination may be preferable. It highlights the limitations of limit-offset pagination, including result inconsistency and inefficiency with large offsets.

### Source excerpt

2016-03-30 (Cross-posted on the Citus Data blog.) It may surprise you that pagination, pervasive as it is in web applications, is easy to implement inefficiently. In this article we'll examine several methods of server-side pagination and discuss their tradeoffs when implemented in PostgreSQL. This article will help you identify which technique is appropriate for your situation, including some you may not have seen before which rely on physical clustering and the database stats collector.

## Making 20% Time Work

DevFeed: [Making 20% Time Work](<https://devfeed.tech/articles/making-20-time-work-21469.md>)

Original publisher: [Read original article](<https://begriffs.com/posts/2016-01-29-making-twenty-percent-time-work.html>)

Published: 2016-01-29T00:00:00Z

Content type: article

Language: en

Sources: [Joe Nelson](<https://devfeed.tech/sources/joe-nelson.md>)

Topics: [Open Source](<https://devfeed.tech/topics/open-source.md>), [Maintainers](<https://devfeed.tech/topics/maintainers.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [apply](<https://devfeed.tech/tags/apply.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [contribute](<https://devfeed.tech/tags/contribute.md>), [contribution](<https://devfeed.tech/tags/contribution.md>), [developers](<https://devfeed.tech/tags/developers.md>), [experiments](<https://devfeed.tech/tags/experiments.md>), [github](<https://devfeed.tech/tags/github.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [maintainers](<https://devfeed.tech/tags/maintainers.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [project](<https://devfeed.tech/tags/project.md>), [projects](<https://devfeed.tech/tags/projects.md>), [teamwork](<https://devfeed.tech/tags/teamwork.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

The article explains how companies can structure employee "20% time," a weekly period for self-directed projects, so that it produces useful tools and open-source projects instead of becoming unproductive. It introduces a contribution matrix for coordinating teamwork and begins describing the BASEDEF contribution categories, including blogging about a project and applying it in another project.

### Source excerpt

2016-01-29 Following Google's lead many companies have instituted "20% time" for their employees. This is one day per week in which employees can work on projects of their own choosing. The practice keeps developers motivated and sharp, produces tools to solve company problems, and in the best case creates open source which builds prestige and helps recruitment. But there's one problem with twenty-percent time: it takes discipline to pull it off.

[Next page](<https://devfeed.tech/sources/joe-nelson.md?cursor=WyIyMDE2LTAxLTI5VDAwOjAwOjAwKzAwOjAwIiwgImY4MDUwZDY4LTEwNzAtNDdmZC05OWM1LTc1ODUyNzRjZjM4YiJd>)