New article: Commentary on Hawking’s No Black Holes

February 24, 2014

What was Stephen Hawking talking about when he said there are no black holes? Here’s an explanation for the non-scientist.

Click the icon below for a PDF version of the article. Right-click and Save-As to save a copy.

Click for Commentary on Hawking's No Black Holes

PDF version


In 2013, the media picked up a technical presentation by Stephen Hawking in which he stated that “There are no black holes.”  That’s a curious viewpoint from someone who spent much of his career working out the physics of black holes. Unfortunately, the rest of Hawking’s presentation was too technical for the media to touch, leaving the general public in need of new mental images to replace all those missing black holes. This paper is an informal discussion of the technical parts of Hawking’s paper without undue jargon and math.


New Video! The Care and Training of Your Backpropagation Neural Net

January 7, 2013

Neural Net Care and Training

For the neural net beginner, an introduction to all the concepts and abstractions you need to know in order to gain an intuitive understanding of how these crafty little neural nets learn to do anything at all. We’ll discuss practical tips on preparing training data, and strategies for solving various kinds of problems. We’ll discuss:

  • Review of how a backpropagation neural net works
  • Type and range of the input and output data
  • Preparing training data
  • Training strategies
  • Adjustable parameters for learning rate and momentum
  • Visualizing how a NN solves a problem – a geometric interpretation

Video link –>



Genetic Algorithms for Automated Source Code Evolution: a C++11 tutorial

October 31, 2012

Genetic algorithms: a C++ tutorial

Join me in some recreational C++ programming. Our project is to make a genetic algorithm that will evolve the source code for a program that, when run, will compute and output the solution to something. Our target source language is a tiny language called Iota, made specially for this purpose. We’ll also talk about how our simulated evolution compares with natural biology. All you need is a C++11-compliant compiler, and the iota-machine.h header file that you can download from link below. If that sounds at all interesting, then let’s hack up some code…

Video link –>

Download materials for Windows (.zip format, DOS line endings):

Download materials for everybody else (.tar.gz format):



New Video! Randomize Properties in Blender

April 16, 2012

Update: New in Blender 2.64 — For randomizing material properties, the new Object Info node and its random number output could be an alternative to the driver technique described in this video.

This tutorial shows how to attach random number drivers to selected properties to make endless variations of an object in Blender 2.62.

Video Link >>>   Variations: Random Number Drivers in Blender

Go from this

a lego-like model in Blender

a lego-like model in Blender

to this

variations of lego-like blocks automatically generated

variations of lego-like blocks automatically generated

I found it easy to work with drivers on object and mesh properties. But I found it surprisingly difficult to get drivers to work on properties in material, texture, and node datablocks. This video will show you the secrets to coercing drivers to work anywhere:

  • learn multiple ways to create a driver; when one method fails, another will work
  • learn how to fix broken drivers after copying an object
  • workflow tips for managing many drivers, objects, and datablocks
This video is for the intermediate Blender user who already feels comfortable with the Blender UI, but no prior experience is expected with drivers or Python scripting. I’ll do my best to show you not just what buttons to click, but why.


Here is the copy-n-paste part referred to in the video:
import bpy
import random

# Random floating point number between lo and hi

def randf(lo, hi):
    return random.uniform(lo, hi)

# Random integer from lo (inclusive) to hi (inclusive)

def randi(lo, hi):
    return random.randint(lo, hi)

# Random values given mean and standard deviation

def gauss(mean, stdev):
    return random.gauss(mean, stdev)["randf"] = randf["randi"] = randi["gauss"] = gauss


The Straggler

September 21, 2011

Released today! Just for fun — a silly little 30-second-long animated short film titled The Straggler (click the Vimeo link for 720p high-def):

Below is a screenshot of what the butterfly model looks like in Blender. One bone in the armature is a control bone that drives the wing flap movement, and another bone controls the angle of the legs that dangle under the body. I created an action in the action editor for one cycle of wing flap, much like you would animate a walk cycle in a critter that walks, and then spread some flapping actions on the timeline using the non-linear action editor. Each butterfly object is parented to a path object that defines its flight path.

Butterfly and rigging in Blender 2.59

Butterfly and rigging in Blender 2.59

The grass in the video background uses the Blender particle system to define how the clumps of grass will appear. Each grass blade is a simple mesh object, with five different grass blade textures UV-mapped onto a group of five slightly different grass blades. The little bush in the foreground was made and animated using Blender’s Sapling plug-in.

The music was composed using Rosegarden to edit the score and mix the tracks, and Timidity for synthesizing the instruments.

The comment form is disabled because of the amount of spam we’re receiving. To post a comment, send email to dave at


New Video! Slope-dependent Textures in Blender

September 12, 2011

Released today! How to set up slope-dependent textures in Blender 2.59:


This tutorial shows how to use normal-mapped gradients as layer masks in Blender. It’s a quick way to splash one texture onto the steep surfaces of your model and a different texture onto the more horizontal surfaces. You can use it, for example, to put a rocky cliff texture onto the steep surfaces of a terrain mesh, and a green grassy texture on the less steep parts. In this short tutorial, we’ll use four simple objects to show how the technique works and how to set it up. If you just want the quick summary of the essential settings for the gradient mask, just skip to the final three minutes of the video for the recap. Happy Blending!

The comment form is disabled because of the amount of spam we’re receiving. To post a comment, send email to dave at


“Morning Study” Wallpaper

August 28, 2011

Here’s a new scene I made in Blender just for fun. Feel free to grab a wallpaper-size copy using the direct links below, completely free for non-commercial use under the terms of CC BY-NC-SA 3.0.

"Morning Study", Blender model



The comment form is disabled because of the amount of spam we’re receiving. To post a comment, send email to dave at

New Video Tutorial: Intro to C/C++ multicore CPU and GPU programming with OpenMP and OpenCL

June 14, 2011

Released Today! Our newest video tutorial, Intro to C/C++ multicore CPU and GPU programming with OpenMP and OpenCL, is now available for your viewing pleasure at the following link:

Link:  Got Cores? Use ’em!

This is a demonstration and discussion about using OpenMP and OpenCL for writing multicore CPU and GPU programs. This is for the intermediate C/C++ programmer who feels confident writing traditional single-threaded programs, and now wants to know more about the processes and tools that are out there to help in the transition to multicore.

We’ll take a simple little C/C++ program and run it first single-threaded, then adapt it to multicore CPU using OpenMP, then run it on the highly parallel graphics processor (GPU) using OpenCL. The goal is to foster “parallel thinking,” and to give you an idea of what kind of programming effort it takes, and what you can expect as a result.


Roll Top Desk Wallpaper

April 4, 2011

I always liked the look of a roll top desk, but never owned one. So I made a model in Blender, rendered an image, and installed it as my desktop wallpaper. Now when I’m sitting at my computer, I’m sitting at the roll top desk I always wanted.

Take a copy if you like — here are direct download links to some common wallpaper sizes. Completely free for non-commercial use under the terms of CC BY-NC-SA 3.0.


Comments are disabled due to the volume of spam we’re receiving. To post a comment or to get in touch for any reason, email dave at millermattson dot com.

New Video Tutorial: Assembly Language Output from gcc/g++

March 30, 2011

Released Today! Our newest video tutorial, Inspecting the Assembly Language Output from gcc/g++, is now available for your viewing pleasure at the following link:

Link:  Inspecting the Assembly Language Output from gcc/g++

You can look at the assembly language output from the gcc/g++ compiler to see what kind of code the compiler generates for your C++ source without linking or running your code.

For an example to show how the assembler listing can be used, we’ll look at the assembly language generated when compiling the following C++ snippet and try to answer the question, “Does the gcc/g++ compiler apply the Return Value Optimization (RVO) when compiling with optimization level zero (gcc -O0)?”

    class BigClass
        char a[1000000];

    BigClass getData(int a, int b)
        return BigClass();  // opportunity for RVO

    void testFunction(void)
        BigClass myData = getData(1, 2);

In this 20-minute video tutorial, we’ll discuss:

  • How the Return Value Optimization works
  • How to get an assembly language listing from the compiler
  • How to make sense of mangled names
  • Find where the stack frames are created and local stack space allocated
  • Addressing local data on the stack
  • Function call convention


Powered by Wordpress and MySQL. Theme by Shlomi Noach,