RSSAmplifier

Blog

nvie.com

RSS feed ↗29 posts

Latest posts

15+ years later, Microsoft morged my diagram

How Microsoft continvoucly morged my Git branching diagram.

Why .every() on an empty list is true

We can all pretty intuitively understand how `.some()` and `.every()` predicate expressions on lists work.

Git power tools for daily use

Every developer has their own favorite Git tricks they use daily. Here are some of my favorite ones I have been using for as long as I can remember.

An intro to decoders

Today, I’m thrilled to publicly announce a new open source project that we’ve been using at SimpleContacts in production for months: [**decoders**](https://www.npmjs.com/package/decoders).

pip-tools 1.0 released

Yesterday, pip-tools version 1.0 was silently released, officially introducing the **pip-compile** and **pip-sync** tools, and replacing the current **pip-dump** and **pip-review** tools.

Beautiful code

When was the last time you looked at code someone else wrote? (Debugging doens't count!) When did you _actually_ study it to learn from it? Perhaps even ponder over its beauty?

Beautiful map

I was reading Igor Kalnitsky's blog post on why Python's [`map()` is mad](https://kalnytskyi.com/2015/06/14/mad-map/), and wanted to provide a different perspective. In fact, I would call the design of Python's `map()` beautiful instead.

Thinking in streams

In my previous post, [Use More Iterators][moar-iterators], I have outlined how to harvest some low hanging fruit when it comes to converting your functions to generators. In this series of posts I want to take it to the next level and introduce a few powerful constructs that can assist you when working with streams.

Modifying Deeply-Nested Structures

Yesterday, a friend asked me how I would solve a certain problem he was facing. He did have a working solution, but felt like he could make it more generally applicable. Not shying away at a good challenge, I decided to take it and see how I would solve it. In this blog post you can read about my solution.

Use More Iterators

One of my top favorite features of the Python programming language is generators. They are so useful, yet I don't encounter them often enough when reading open source code. In this post I hope to outline their simplest use case and hope to encourage any readers to use them more often.

Iterables vs. Iterators vs. Generators

Occasionally I've run into situations of confusion on the exact differences between the following related concepts in Python:

Writing a Command-Line Tool in Python

I used to find writing command line tools tedious. Not so much the writing of the core of the tool itself, but all the peripheral stuff you had to do to actually _finish_ one.

Better Package Management

> **Update** (Feb 2026): This article is > really really old. You probably want to use `uv` > today. > **Update** (March 2019): The Python > packaging landscape has changed significantly > since I first wrote this post. Your choice > today is mostly between using > [pip-tools](https://github.com/jazzband/pip-tools) > directly, using > [Pipenv](https://docs.pipenv.org/) (which is > a Swiss army…

Pin Your Packages

Make your Python production deployments predictable and deterministic by pinning your dependencies.

Open Sourcing: the Ultimate Isolation

Some thoughts on how I like to write libraries as "open source" projects.

Introducing RQ

Today, I'm open sourcing a project that I've been working for the last few months. It is a Python library to put work in the background, that you'd typically use in a web context. It is designed to be simple to set up and use, and be of help in almost any modern Python web stack.

vim-flake8: Flake8 for Vim

Just a quick post to let you know that I discarded my `vim-pep8` and `vim-pyflakes` Vim plugins yesterday in favor of [vim-flake8](https://github.com/nvie/vim-flake8).

Introducing Times

Lately I’ve been getting sick of working with datetimes and timezones in Python. The standard library offers many different conversion routines, but does not prescribe a best practice way to deal with them. Luckily, Armin Ronacher did in his article [Dealing with Timezones in Python](http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/).

Chords + Lyrics

I released my first iPad app to import/manage chords and lyrics.

A git-flow screencast

Mr. [Dave Bock](http://www.davebock.com/) of Code Sherpa’s put together a nice screencast demonstrating a few of the most important git-flow features on their [publications](http://www.codesherpas.com/portfolio/publications) page.

How I boosted my Vim

Where I lay out the recent changed I made to my Vim setup.

A whole new blog

I've moved my blog to Nanoc.

An upgrade of gitflow

Last week, I silently tagged gitflow 0.2. These are the most important changes since 0.1.

gitflow 0.1 released

After the overwhelming attention and feedback on the Git branching model post, a general consensus was that this workflow would benefit from some form of proper scriptability. This post proposes the initial version of a tool I called git-flow.

A successful Git branching model

In this post I present a Git branching strategy for developing and releasing version-based software.

Auto-generate classes for your Core Data data model, revisited

A few months ago, I wrote about [automatically generating classes for your Core Data entities][prev] and how to automate Xcode using users scripts, such that, when your model changed, you only needed to run your custom script again and your intermediate model files would reflect the new situation.

Automatically generate classes for your Core Data data model

When designing a Core Data data model for your Xcode projects, you can choose to create Objective-C object wrappers for your entities, so that you can profit from type-safe code. The normal, tedious, workflow for this is that you select each entity from the model designer, select all of its attributes and relationships, Ctrl-click it and from the contextual menu first select “Copy Obj-C 2.0 Method…

NSManagedObjectContext extensions

The Core Data framework rules, and its API is really really powerful. But really, why does the Core Data API require us to write so much boilerplate code? Simple things need to be simple.

NSPredicateEditor tutorial

Cocoa offers a nice visual editor for editing NSPredicate objects templates, called NSPredicateEditor. The NSPredicateEditor can be set up using code or in Interface Builder, which is preferable for simple use. The setup is fairly easy once you know how to do it. In this tutorial, we’ll be building a simple predicate editor example which shows the basic functionality of the predicate editor.