muhuk's blog

The Sleeper Must Awaken

January 26, 2015

When Decent Programmers Fail

Do you know the feeling when you put adequately experienced/skilled programmers, armed with the right tools, in just the right kind of environment and they still fail to produce high quality software. When software projects fail the bad management™ often takes most of the blame. To be honest I can’t recall an instance where bad management wasn’t cited by programmers as the only cause. This post is not about project management. I will just accept that bad management is a major factor in failure of software projects.

Read more...


November 09, 2014

Making clecs Less Suicide-Inducing

After releasing the first major version of clecs I have started writing a tetris clone on it. I wanted to see if it all made sense. Sadly it wasn’t as much fun as I had intended it to be. This is a post about the pain points I discovered and how I intend to fix them.

Read more...


September 28, 2014

Is Clojure Homoiconic?

Homoiconicity means you can express programs in a programming language’s primitive data types. In other words; your code is data and data is code.

Clojure is, as other dialects of Lisp, a homoiconic programming language. Code is represented as lists, symbols, vectors and other Clojure data types. When the reader (parser) reads a source file, abstract syntax tree built looks exactly like the source[1].

Read more...


August 17, 2014

Lean Startup Notes - Part 2: Techniques

“If we stopped wasting people’s time, what would they do with it?”

—Eric Ries

This is the second part of my The Lean Startup notes. Enjoy!

Read more...


August 05, 2014

Clojure Macro Spotted In Wild: ? of useful

Let’s take a look at ? macro of useful this time. The docstring tells the purpose of this macro succinctly:

A useful debugging tool when you can’t figure out what’s going on: wrap a form with ?, and the form will be printed alongside its result. The result will still be passed along.

Before taking a look at the source code let’s go through some usage examples since this one’s a bit more tricky than defproject:

user=> (str (list 1 2 (+ 1 2)))
"(1 2 3)"

user=> (str (? (list 1 2 (? (+ 1 2)))))
(+ 1 2) is 3
(list 1 2 (? (+ 1 2))) is (1 2 3)
"(1 2 3)"

Read more...