UNIQUE Constraints in PostgreSQL are not Transactional

I’ve recently encountered an unexpected “problem” with UNIQUE constraints in PostgreSQL. I’m stunned that I never noticed this before, since I’ve been working with PostgreSQL for many years. Either way, I guess I’m not the only one who doesn’t know about it. So, here it is …

By Christoph Schiessl on PostgresSQL

Orphaned Branches in Git

You have to be aware of Git’s internal data structure, before you can understand what orphaned branches are and how to use them. So, let’s start by examining this data structure. Surprisingly, this is easier than it sounds. In fact, there are only two “rules” you have to know about.

By Christoph Schiessl on Git and Workflow

Z Shell Tip: Edit Current Command Line with Vim

Editing long command lines in a shell is very slow and boring. Wouldn’t it be cool, if you could utilize the full power of Vim (or your editor of choice) instead? Well, it is not only possible, it is also incredibly easy to set-up …

By Christoph Schiessl on Software and Workflow

Joke: A Manager, an Engineer, and a Developer …

… are riding in a car. They come to a hill and their brakes fail. After careening down the hill and finally coming to a stop they get out to decide what to do.

By Christoph Schiessl on Fun, Software, and Business

Evaluating Glob Patterns for $PATH in bash

The $PATH environment variable does not support glob patterns. If you add something with a glob pattern (i.e. *), bash ignores it.

By Christoph Schiessl on Bash

Customizing Vim with Environment Variables

Last week, I’ve discovered by accident, that Vim exposes environment variables to all scripts it executes (including your .vimrc). Knowing that, opens up entirely new possibilities for plugins and smarter .vimrcs.

By Christoph Schiessl on Vim and Workflow

On JavaScript’s undefined

All syntax highlighters I’ve ever worked with, treat JavaScript’s undefined as a keyword. However, that’s a misconception.

By Christoph Schiessl on JavaScript

Custom Infix Operators in Haskell

Custom infix operators are a common occurrence in Haskell. Apart from built-in operators (such as + and *), there are many libraries exposing custom operators. For instance, Data.Monoid defines the infix operator <> as an alias for mappend.

By Christoph Schiessl on Haskell and Functional Programming

Environments in Jekyll (aka JEKYLL_ENV)

Jekyll is an excellent tool to generate simple websites and blogs. Its documentation summarizes it as follows: “Jekyll is a simple, blog-aware, static site generator.”

By Christoph Schiessl on Jekyll and Ruby

Smarter Synchronization of your PostgreSQL Development and Production DBs

I like to keep my Ruby on Rails projects’ development databases in sync with their production counterparts. Firstly, this allows me to reproduce almost all production-bugs locally. Secondly, having the complete production database available locally is very helpful for testing new migrations.

By Christoph Schiessl on PostgreSQL, Ruby on Rails, and Workflow

Implementing Ruby’s Array#flatten in Haskell

Ruby’s Array#flatten is on occasion a very handy method. It reduces n-dimensional arrays to 1-dimensional arrays, containing all the elements of the top-level-array and its sub-arrays. Therefore, it is said to be “flattening” the n-dimensional array.

By Christoph Schiessl on Haskell, Functional Programming, and Ruby

Automated Testing with Haskell’s QuickCheck

QuickCheck is one of the libraries, that makes Haskell awesome. Conventionally, testing boils down to writing a number of separate test-cases to express different assertions about a particular piece of code. Testing like that is possible in Haskell (with HUnit), but QuickCheck’s approach is much more subtle…

By Christoph Schiessl on Haskell and Functional Programming

Multithreading in the MRI Ruby Interpreter

Multithreading in Ruby is still not widespread within the community, even though concurrency yields huge benefits for certain kinds of programs. This is especially true in server environments. For instance, using multithreaded HTTP servers increases a server’s throughput and reduces its memory footprint.

By Christoph Schiessl on Ruby

map and fmap in Haskell

Haskell’s standard module ships with two functions, called map and fmap. The first one, map, is the typical function we are all used to in functional programming. Looking at its definition, reveals that it’s recursive implementation is exactly what one would expect:

By Christoph Schiessl on Haskell, Functional Programming, and Ruby

Defining the Cloud

There’s no consent among experts on what “the Cloud” actually is.

By Christoph Schiessl on Business and Software

A Quick Check for Pending Migrations Before Running your Test Suite

As Rails developers, we are constantly switching between writing application code & tests and running our tests. While this is a great workflow, it sometimes leads to problems. Namely, if we change our database schema, but forget to migrate the DB before re-running the test suite.

By Christoph Schiessl on Ruby, Rails, and Testing

Sass @extend Performance Bottleneck

Suffering from long Sass compilation times? Avoiding @extend may solve the problem.

By Christoph Schiessl on Ruby and Sass

Life is a Game. Or is it?

I think it is. And I’m not the only one. Not by a long shot.

By Christoph Schiessl on Business and Guideline

Benchmark: Single-Column Indexes vs. Compound Indexes

I’ve known about compound indexes for many years but never really thought about them in detail. That doesn’t mean, I’ve never used them – quite on the contrary. At some point in the past I’ve made up some assumptions about when to use them and when to avoid them. However, until now I’ve never taken the time to put my assumptions to the test.

By Christoph Schiessl on PostgreSQL

Organizing Java Command-Line Utilities with the Command Pattern

I’m currently working on a command-line utility written in Java to encapsulate a WSDL web service. As you might expect, the web service is exposing a variety of operations with pre-defined parameters to be called. My tool should make these operations accessible to the user, through an easy-to-use command-line interface. Since the web service I’m working with is composed of dozens of operations, I started looking for a design pattern to help me organize my code and discovered the Command Pattern.

By Christoph Schiessl on Java and Pattern

Simplicity Isn’t Simple

Everybody is talking about simplicity and its promise of leading us to create great products. The underlying assumption here is, that simpler products are more accessible to everyone: the customers, the users, and last but not least the developers themselves. Therefore, simple products are supposed to be easier to sell, a lot easier to use, and easier to maintain.

By Christoph Schiessl on Business and Software

Software Start-Ups without Technical Co-Founders

Software start-ups are everywhere. Every single day, you can read about dozens of new and ambitious start-ups in the news. There are many special websites to report about start-ups and other topics that entrepreneurs and developers might be interested in – yes, I’m looking at you HackerNews.

By Christoph Schiessl on Business

Customers and Users Are Not The Same

A few weeks ago, I discovered a fatal flaw in my thinking about customers, users and consequently about business in general. To fix that flaw, I had to re-evaluate the feature set of my products as well as my entire approach to communicating with (potential) customers.

By Christoph Schiessl on Business