Fighting blog comment spam

July 4, 2015

Honest people buy advertising. Spammers take what is not theirs, which is the definition of sociopathic:

a disregard for the feelings of others, a lack of remorse or shame, manipulative behavior, unchecked egocentricity, and the ability to lie in order to achieve one’s goals

During the life of this blog, I have had to read and discard about 120 spam comments for every one legitimate comment received. Most of the comment spam is entered by humans working for pennies in developing countries. The old captcha didn’t slow them down at all; it wasn’t designed to.

I’ve re-enabled comments, but with a different kind of captcha that requires answering a math question such as “How many degrees are in half a circle?” I’m hoping that the spammers either won’t know the answer, or won’t take time to read and answer the question. I’m trusting that all honest readers of this blog will know how to answer the captcha questions. (If someone doesn’t know how many degrees are in a half circle and doesn’t know how to find the answer with Google, then they’re reading the wrong blog.)

For now, experimentally, comments are welcomed.

Announcing neural2d, a neural net optimized for image processing

November 24, 2014
Neural2d is an open-source neural net simulator with features for image processing.


Video introduction (YouTube, 11 min.):
Landing page with links:


✔ Optimized for 2D image data — input data can be read from .bmp image files
✔ Neuron layers can be abstracted as 1D or 2D arrangements of neurons
✔ Network topology is defined in a text file
✔ Neurons in layers can be fully or sparsely connected
✔ Selectable transfer function per layer
✔ Adjustable or automatic training rate (eta)
✔ Optional momentum (alpha) and regularization (lambda)
✔ Any layer(s) can be configured as convolution filters
✔ Standalone console program
✔ Simple, heavily-commented code, < 3000 lines, suitable for prototyping, learning, and experimentation
✔ Optional web-browser-based GUI controller

Installing Xubuntu 14.04 on a Sager NP8268-S laptop (Clevo P150SM-A)

October 5, 2014

Here are some notes for anyone else attempting to install Xubuntu 14.04 on a Sager NP8268-S laptop (Clevo P150SM-A).

System components:

CPU: Intel i7-4810MQ
GPU: Nvidia GTX 870M
Primary drive: Samsung EVO SSD, with Windows 7 preinstalled
Wireless: Intel AC7260
Audio: Intel HD + Realtec ALC892

The installation along side Windows 7 went fairly smoothly and the end result is a beast of a machine. But there were a few rough spots, documented below.

Continue Reading »

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

Powered by Wordpress and MySQL. Theme by Shlomi Noach,