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 …

  ·  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.

  ·  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.

  ·  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.

  ·  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.

  ·  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.

  ·  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.”

  ·  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.

  ·  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.

  ·  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…

  ·  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.

  ·  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:

  ·  Christoph Schiessl on Haskell, Functional Programming, and Ruby

Defining the Cloud

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

  ·  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.

  ·  Christoph Schiessl on Ruby, Rails, and Testing

Life is a Game. Or is it?

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

  ·  Christoph Schiessl on Business and Guideline

Generating Random Numbers According to a Continuous Probability Distribution with PostgreSQL

When working with statistics, generating pseudo-random samples that are distributed according to a given probability distribution is a frequent requirement. For me, being able to generate these numbers directly with SQL would be very convenient (and might also improve performance). In this post, I’m taking a look at some of the most important continuous probability distributions…

  ·  Christoph Schiessl on PostgreSQL

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.

  ·  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.

  ·  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.

  ·  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.

  ·  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.

  ·  Christoph Schiessl on Business