Haskell Books and Tutorials

Haskell is really a language very worth knowing. It does many things so different than most other languages which I really enjoy.

I’d like to use this post to mention a few really good resources for learning Haskell:

Learn you a Haskell

Learn you a Haskell is a very fun and entertaining tutorial for Haskell very much in the spirit of Why’s poignant guide to Ruby.

It isn’t finished yet, but it’s really good to start with. (Via Wadler’s Blog)

Real World Haskell

Real World Haskell is a upcoming book I really look forward to. It is freely available on its website, so check it out.

Wikibook

There is also a good collection of Haskell topics on Wikibooks – Programming/Haskell

Wikibook is more interesting if you already know a bit of Haskell and would like to understand it more in depth.

Others

I liked Yet another Haskell Tutorial very much, this aims at people with a bit of background, though.

Another more recent book on Haskell is Programming in Haskell which is nice, but also quite basic IMO.

Of course there is always the Gentle introduction to Haskell

Enjoy.

Haskell is doomed to succeed.
— Sir Tony Hoare

Git Overview

My version control journey started with CVS, after that I looked at SVN, but never really used it. The shortcomings of centralized repositories were too obvious and with my increasing interest in Haskell I jumped on the distributed version control train with Darcs. I really, really liked it, but it had some nasty things too. After a while I was looking for something different and stumbled over Mercurial, again I was really happy with it but somehow my journey wasn’t over yet.

Continue to full post...

Mercurial Version Control Status in the ZSH Command Line Prompt

I sometimes forget to push or pull changes to or from a remote repository. To remedy the problem I wrote myself a little script to show me the status on the prompt.

Continue to full post...

Free and Open Source Math Programs

In this post I’ll go through some of the most prominent math programs available with source code.

This is by no means “original” work, I just collected the headlines and links to various mathematical software projects out there. This started with an offer of my University (Mathematica for 13 Euro), but I don’t want to invest time in a tool I won’t have (free, or almost free) access to for the rest of my life.

Continue to full post...

Emacs Basics

It’s been a while since I wrote my Vim Introduction and Tutorial (exactly one year). A lot happened between now and then, I chose to get a better feeling about Emacs for example.

The reasons aren’t easily explained; The most prominent reason is the awesome AucTex-mode since I’m working heavily with LaTeX lately.

Anyways, learning Vim and Emacs is better than learning only one of them :-).

Continue to full post...

Addendum to "Time Machine for every Unix out there"

My article about using rsync to mimic the behavior of Apple’s Time Machine generated a lot of traffic, and more important, a lot of feedback.

In this article I’ll summarize and try to clarify a few things.

Continue to full post...

Time Machine for every Unix out there

rsync is one of the tools that have gradually infiltrated my day to day tool-box (aside Vim and Zsh).

Using rsync it’s very easy to mimic Mac OS X new feature called Time Machine. In this article I’ll show how to do it, but there is still a nice GUI missing – for those who like it shiny.

Continue to full post...

XML as human interface and DSLs

While reading “The Definitive ANTLR Reference” by Terence Parr I encountered this quote. I’m a bit sceptic about XML beyond its use of data exchange, so the quote has completely won me over for the book.

Don’t be afraid to build a human-readable configuration file (I implore everyone to please stop using XML as a human interface!) or to build domain-specific languages to make yourself more efficient. Designing new languages and building translators for existing languages, when appropriate, is the hallmark of a sophisticated developer. — Terence Parr, The Definitive ANTLR Reference, Page 23.

Being an expert in XML is like being an expert in comma-separated values.
— Terence Parr

Linux peripheral devices configuration

This weekend I tried to get my new keyboard (Microsoft Ergonomic Keyboard
4000) and my Logitech MX1000 Laser mouse to work properly. The Keyboard has
many extra-keys I didn’t bother to count, and the mouse has 12 buttons which
can be very useful at times.

Almost accidently I solved a bugging performance problem with the Firefox browser.
It was incredibly slow when opening Google Spreadsheets, well the whole system
was incredibly slow while loading the spreadsheet… .

Continue to full post...

Challenge Response Spam Filter

The challenge-response spam-filter troubles me lately. If you don’t know it, here is how it works if both parties have a challenge-response spam-filter:

  1. I write an email to someone@domain
  2. The address gets whitelisted on my machine
  3. The receiver doesn’t get my message
  4. I get a message from the receivers mail-server to which I should reply
  5. I reply to the automatic message
  6. The receivers mail-server whitelists my address and delivers my initial mail

So far so good. Three questions pop up:

  • What if the spammer uses my whitelisted email address to send his spam?
  • What if only one of the two has a challenge-response spam-filter?
  • What if spammers start to automatically reply to those messages?

Continue to full post...

Vim Introduction and Tutorial

I often tried to learn the great Emacs editor/IDE/operating system. The last time I tried it, I spent some time getting comfortable with it until I wanted to customize my .emacs file.

That was the point when I entered vi .emacs. As soon as I realized what I’ve done, I knew that Vim has won me over a long time ago.

Continue to full post...

Haskell - Laziness

Haskell is a non-strict, or lazy, language. This means it evaluates expressions only when it needs their results.

Laziness is one of the things that make Haskell special – really special. Lazy evaluation allows easy handling of infinite data-structures.

Continue to full post...

Haskell Basics

The article I wrote yesterday was just the beginning, today we’ll look at the next step in becoming Haskell experts.

Yesterday we’ve learned how to split up our program and how to compile, or run it. Today we’ll look at some basic features of Haskell.

Continue to full post...

Haskell

Danger! If you are happy with your current knowledge of programming languages, don’t read on – Haskell might be responsible for some serious defects in your motivation.

I was always some kind of programming language geek. I loved learning and playing around with all kinds of programming languages1. Currently I’m trying to learn Haskell. Even though I learned functional programming at my university (two semesters using Haskell), I didn’t really learn how to interact with the outside world. This is where things start to get messy, no matter how beautiful the language is.

Continue to full post...

MacFUSE

You probably heard about MacFUSE (announcement). MacFUSE is an OS X implementation of the popular FUSE project (well known to Linux enthusiasts).

I just found a tech-demo video showing some really interesting features and possibilities of FUSE (of course it’s not limited to MacFUSE).

Continue to full post...