Archive for the 'Computer Science' Category

Genetic Programming Example in JavaScript

While researching genetic programming as one possible way to discover near-optimal solutions to the Travelling Salesman Problem (TSP), I came across this cool interactive demonstration of genetic programming using JavaScript. I found myself playing with it for a good while, enjoying watching the solutions evolve and converge under different fitness constraints.

The page itself doesn’t provide much information on what’s going on, but you can get a quick overview of genetic programming here. For deeper investigation, try genetic-programming.org, a site maintained by John Koza, one of the major figures in genetic programming research. There are links to all sorts of resources including all of Koza’s publications, many of which are available online.

Super-Peer Architectures

I came across this presentation on Super-Peer Architectures today. I haven’t had time to read it in full, but it looks stuffed with useful data. It will especially appeal to anyone interested in the architecture of Skype. A list of the authors’ other publications can be found here and here.

Gosling Appointed to Order of Canada

I guess it’s a big day for awards! My friend Eric points out that James Gosling, probably best known as the creator of Java, has been appointed to the Order of Canada by the Governor General. The CBC has more…

First Woman Turing Award Winner: Frances Allen

It only took 40 years, but a woman has finally been selected as the A.M. Turing Award Winner for “pioneering contributions to the theory and practice of optimizing compiler techniques that laid the foundation for modern optimizing compilers and automatic parallel execution.” Allen was also the first woman to be appointed an IBM fellow (1989). More info on Frances E. Allen…

Also discovered serendipitously: “The Invisible Women of Science and Technology”.

Grokking Duck Typing

To make a long story very short: I spent many years programming large systems in C. If I had declared every function like this:

void *foo(void *arg,...);

everyone would have thought I was nuts (not to mention a really terrible programmer.) This is the nutshell version of why I don’t think I will personally ever understand the appeal of duck typing.

Having said that, I will probably make one more attempt to learn Ruby. I liked some of Ruby’s structures, it was just the duck-typing thing I couldn’t grok. I’ll give it one more try and maybe I’ll see what all the fuss is about this time. If not, at least I can honestly say I tried…

Turing Award Winner Peter Naur Disses…Everyone?

The ACM’s A.M. Turing Award is the Computer Sicence equivalent of the Nobel Prize or the Fields Medal in Mathematics. In 2005, the winner was Peter Naur “For fundamental contributions to programming language design and the definition of Algol 60, to compiler design, and to the art and practice of computer programming.” Naur’s essay “Programming as Theory Building” is one of my personal favourites (try using it as ammunition any time some client starts blathering on about how they’re going to build a “software factory” to build IT Systems just like they build cars—with programmers as completely interchangeable, disposable parts!)

But what’s weird is the Turing Lecture he gave, called “Computing Versus Human Thinking”. In it, he manages to trash Alan Turing, philosophy in general, all of psychology (especially cognitive psychology), and to accuse the ACM (among others) of censorship for declining to publish his papers on his theories of mental life. The lecture itself is a little hard to get a read on. He claims to have created a whole new model for human thinking, based almost entirely on the psychological works of William James (1890) and the neurological work of Charles Sherrington (1906). Everything studied or written since then he implies is hopelessly defective.

Hmmm…. Well, I suppose he could be right. Geniuses often see what others don’t. But I can’t help but be reminded of Stephen Wolfram’s “New Kind of Science”, in which he claimed that every scientist and mathematician who ever lived before him was completely blind and wrong and he alone of all humanity was brilliant enough to discover the truth of the universe. Ummm… ok. Possible, but not too plausible, doncha think?

Update: BTW, you can read the gory details of Naur’s Synapse-State Theory of Mental Life (pdf) and judge it for yourself.

“Six Classical Paradigms to Disbelieve Before Breakfast”

We identify several paradigms that seem to define classical computing, but that may not necessarily be true in all computing paradigms, and we encourage the community to drop, invert, or otherwise perturb these paradigms in whatever ways seem interesting.

From the Grand Challenges for Computing Research proposal Journeys in Non-Classical Computation (PDF)

Computers and Form

I love pictures of old machines in general, and mechanical computing devices in particular. Completely useless to us now, we can still admire them for their physical form. These photos of the Zuse Z1 (a reconstruction) were taken by my friend Gordon Hicks at the Deutches Technikmuseum Berlin. Click the thumbnails for more, full-size, photos.

Detail side view--thumbnail Detail view of logic gates--thumbnail

Network Applications of Bloom Filters

“A Bloom filter is a simple space-efficient randomized data-structure for representing a set in order to support membership queries.” The survey paper Network Applications of Bloom Filters is a great technical overview of what they are and what you might want to use them for. Examples include distributed caching, distributed hash tables (DHTs), resource routing, more efficient multicast, and traffic measurement. For a quickstart, see this helpful tutorial on using Bloom filters in place of lookup hashes in Perl. The author also describes how Bloom filters may be applied in social software systems to allow people to share information about their networks without revealing who their friends are to the world or to a central authority.

Object Graphs Are Scale-Free

Since most man-made networks exhibit a scale-free structure, it probably shouldn’t be surprising that object graphs are no exception. As this paper on Scale-Free Geometry in OO Programs points out, though, this observation runs counter to the assumption in OO design that large programs are composed of “Lego brick” objects of a characteristic (and relatively small) scale and complexity.