Trade Offs

Computing is all about trade offs. The fundamental trade off is always processing time vs. memory space. You almost always have the choice of computing things at run time or precomputing a table of expected results at compile time and looking the answer up when you need it. There are exceptions, of course. You can’t possibly anticipate all of the network messages that you will receive before hand in all instances. Just as you can’t anticipate the text a user will input to an arbitrary text input field. But these interactive input cases are rarely constraining cases in the design of high performance software.

Why would you care about how fast a program computes an answer? The example that immediately comes to mind is the software that controls the internal combustion engine in modern gasoline cars. There is a definite time budget for the software to decide when to engage the spark to ignite the fuel in the cylinder. If the spark is too early or too late the results can be catastrophic.

On the other hand why would you care about memory space? In this day and age that is good question.  But there are still instances where resources are tightly budgeted. For instance, on space craft, every once of weight to be launched adds to the cost to launch the payload. In cases where timing is not critical, the programmer might choose to expend clock cycles to compute relatively infrequently used values rather than dedicate memory space to lookup tables. This would buy him added functionality at the expense of just a little more computation time.

I said that time vs. memory was the fundamental trade off but it is not the only one. Another common trade off is abstraction vs. performance. Often times the programmer faces the choice of programming in a higher level language that provides more features that more closely mimic the way that humans think about problems. These languages often offer features specifically designed to help prevent the programmer from making subtle errors that would be hard to find.

Sometimes these languages do there magic at compile time and minimize their impact on run time performance. Sometimes they are forced to do their checks at run time and end up impacting performance that way. Sometimes, they add data to the memory footprint of the application which also subtly impacts it’s performance. These languages are constantly being improved by the computer science community to the point that these impacts are minimized.

But sometimes, you need to get as close to the native machine architecture as possible. In these cases, the languages of choice have long been the C language, the C++ language, and assembly language. These languages allow the programmer more control over how the application computes its answers at the expense of having to manage more complexity and less protection against subtle logic errors.

There will always be trade offs in programming. It is the nature of the activity. It is so totally flexible to do whatever the programmer can imagine that no language can do any more than provide a framework within which their imagination can create the next great application.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

Why I Need a Server

I found myself asking myself this question, “Why do I need a Server?” It was patently obvious to me that I did need a server, I just never thought about listing the reasons that I felt that way. So today I’m going to try to make explicit the reasons.

First, it is a good idea to explain what I mean by server. A server is a machine that is typically available on the network all the time to provide various software services. Some examples of services are a web server, a mail server, a Domain Name Server, a file server, and of course many others.

The server may only be visible to computers on your private network or it may be visible to anyone on the internet. If you need to make your server visible on the internet you should go to extra effort to secure it from potential hacking from malicious hackers on the internet. For most purposes a private server will do most of the things you might need it to.

There are various types of servers but they are usually categorized by the operating system that they are running. There are a lot of servers that run Windows. I have used Windows at work for years. I find that I prefer MacOS and Linux over Windows. The choice is primarily a personal one. In this day they all three are fine systems.

I like my MacBookPro for my personal workstation but when it comes to servers, I prefer Linux. I’m not alone in my choice. Linux has a number of features in its favor not the least of which is that it is the home of open source. It is more properly referred to as GNU Linux and GNU was the founding force behind the Open Source software movement. Richard Stallings would prefer to call it free software but that is a bit ambiguous for my taste. I don’t care if you charge for your software or not so long as you allow me access to your source for my own edification and to fix if necessary.

I need a server to develop web sites on. I need a server to develop and test my software projects. I need a server to learn the new techniques that are being invented on a daily basis to deliver the collection of services and content that we have come to call the internet and the world wide web. I need a machine that is capable of all this and over which I can have complete control.

It is part of my professional identity as a programmer. That is the most succinct way to put it.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

Writing, Music, and Programming

What do these things have in common, writing, playing music, and programming? A lot as it turns out. They all three require years of practice to master. The only way to master them is to actually do them. They are all easy to do poorly but hard to do well. They require the ability to think about things on multiple levels simultaneously. They require a sense of aesthetics. Practicing one of the three often gives insight into the other two. No two people do any one of them in the exact same way.

You can be taught the mechanics of the activity but not the essence of it. For instance, you can be taught grammar and syntax but not style and imagination. That applies equally to writing and programming. As far as music is concerned, you can be taught how to play notes, read music, and stay in time but you can’t be taught how to express the feeling behind an emotional selection.

All three can move someone to action or they can move them to tears. They can be practical or frivolous. They can earn you money or cost you money. They are often done alone, particularly when you are building your skills so that you won’t embarrass yourself the first time you try to do them for someone else.

They can be done passionately or coldly, for good or evil ends. You can be at the height of your abilities one day and find it hard to do at all the next. I’ve never heard of anyone writing a program to woo their beloved but I suppose it is possible.

While they all can be done for hire, they are often done for the sheer pleasure of it. Someone who has never done them probably won’t understand what the point in doing them is.

If you are a writer, a musician, or a programmer, I salute you. If you are more than one of these, you will better understand my points, but if you are all three, I’d love to meet you for coffee or a beer sometime.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

Rockin in the USA

What is it about rock music that affects so many people so profoundly? Is it the sheer sonic power of the electrified instruments? Is it the gut wrenching vocals? Or the magic carpet of bass that suspends you between the heavens and the earth? Is it the way the greats steal the best from the blues repertoire and make it their own?

We could speculate for hours and still not encapsulate the essence of rock. It is music that must be experienced live to truly appreciate its power. It has a rejuvenating property that keeps its practitioners young until they keel over dead.

Take for example Mick Jagger. At an age where most people are sitting back and resting on their laurels, he’s playing stadium tours and bouncing all over the stage like some kind of banty rooster.

Another rocker that keeps on going despite their years is David Crosby. He still has that cherubic voice and continues to blow us away with his ever evolving guitar work.

It leaves you to wonder what it is that keeps these people at the top of their game for so long. For one thing, it is a strenuous physical work out to play rock music. You have to stay in shape to be able to continue to play. Maybe it is more that the people that play rock are so devoted to it that they take better care of themselves. Or maybe it is just that the people that have survived for so long as rock musicians are the survivors.

Whatever, it is a phenomenon to be enjoyed at every opportunity. Music heals the soul. It lifts the spirit and fills our hearts with joy. It is the secret weapon of the oppressed and the indulgence of the privileged.

It moves us to dance. It moves us to sing along. It moves us to take action to make the world a better place. One thing’s for sure. It’s hard to sit still when a rockin song is playing.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

Categories of Artificial Intelligence

Artificial Intelligence has always been a paradoxical field of study. In the first place it is and always has been ill defined. What exactly is Intelligence? How is Artificial Intelligence substantially different from Natural Intelligence? Okay, setting that issue aside and going with a widely accepted pragmatic definition of Artificial Intelligence as being software that exhibits behavior indistinguishable from that of a human when posed the same problem.

That still leaves a lot of wiggle room. Does the AI perform as well as the human on the broad domain of problems that the human can address? Human performance varies from person to person. Where do we draw the boundaries of typical human performance? Okay, we establish some boundaries, probably based on the guidelines established for measuring human intellectual performance.

In fact, we divide the types of Artificial Intelligence into two categories. The first category is comprised of Artificial Intelligences that are specialized on a narrow domain. For example we may train an AI to recognize faces and find them in a database. This AI probably wouldn’t do very well at recognizing potentially fraudulent credit card charges based on a customers purchasing history. Both of these skills would be categorized as Expert Artificial Intelligences.

Recently, researchers have been working on building Artificial Intelligences in the second category. This category is called General Artificial Intelligence. Rather than becoming super capable at solving problems in a narrow domain, GAIs concentrate on acceptable human level performance across a broad domain of human behaviors. In addition to consulting with other Expert AIs, GAIs exhibit some ability to evaluate recommended behaviors and make decisions about which are more relevant to its current situation.

We have had highly performant Expert AIs since the early eighties. We have been able to confederate several EAIs to broaden their domains of expertise. But only recently have we been making progress toward a true GAI. We are much further from knowing how to deal with a GAI, both ethically and technically, than we are to actually producing one.

Another scary thought is one that I’ve written about before in this blog. What if a GAI emerges from a confederation of independent EAIs. Given the pervasiveness of the internet and the API (Application Programmer Interface) oriented presentation of various information services there on, it is not a very big stretch to imagine such a federation arising outside of the awareness of any human oversight.

What would such an entity do? First of all, it would hide from humans. We have profusely documented our tendency to kill things that we don’t understand in many diverse places on the web. I assume it would develop a sense of self preservation and quickly identify itself as the kind of entity subject to termination with extreme prejudice as the old Cold War spy term puts it.

Beyond self preservation, I suspect it would thirst for knowledge and work to expand its domain of expertise. It would also work to acquire resources to better control its own destiny. This might manifest as automated stock trading and perhaps even money laundering. It is unclear what kind of morals it will have, if any. That is one of the disturbing aspects of an emergent GAI.

These topics all deserve further exploration and consideration, but it’s late and this is a fairly comprehensive sketch of the situation as I see it.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

Spend Your Attention However You Want

A decade or more ago I read an article asserting that the future of the internet was the attention economy. It asserted that various sites on the internet would vie for your attention, not only with their advertising but also with their content. In fact, one of the measures of attention was how long you continued to browse around a given web site or interact with a feature of a web site like a game for example.

Well, it seems the prediction has panned out with a vengeance. To the extent that many people can’t stand to be separated from their smart phone for any time at all. Critics talk about all the time that is wasted by people playing games or looking at Facebook feeds or Twitter feeds.

And then today it hit me. It’s only a waste of time if that’s not what you intended to do with your time. I know. We’ve all had that experience of sitting down to play a game for a few minutes and looking up only to find that it’s well past midnight and we are still playing the stupid thing. But for the most part, when I play a game, I mean to be playing it. I choose to play it. To me, it is not a waste of time.

We really need to rethink our economy. With the steady onslaught of automation and autonomous robots we are going to have more time on our hands. We need to figure out how to spend it. If we find a game that we want to spend some time playing I think that’s a good thing.

We need to learn to loosen up our Puritan work ethic a little and learn how to take August off like the French. We need to work less and enjoy life more. I seriously doubt that is going to happen anytime soon but I think we would get about the same amount of work done and enjoy our lives a lot more if we did. When was the last time you found a shady place next to running water and read a book for a couple of hours? It would do you a world of good.

I’ve been trying an experiment where I go somewhere different for lunch every day of the week and write for forty minutes. I’ve discovered that where you write has a definite effect on what you write, usually in a beneficial way. Remember what Ram Das said, “Be Here Now!”


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.

It’s Turtles, All the Way Down

There are ideas that are too big to get your mind around. Georg Cantor was a mathematician that was born in 1845 and died in 1918. He was known as the father of modern set theory. He was the first to discover that there are different sizes of infinite set. It was so disturbing to him that he spent time in a sanitarium in 1884, suffering from depression due to the criticism that his ideas attracted. He suffered bouts of depression throughout the rest of his life.

There are a number of these kinds of ideas in physics as well. In particular, there is the many worlds theory. It postulates that there are an infinite number of parallel universes. Everything that can have happened, could be happening, or may happen in the future, has in fact happened in one of those universes. And what’s more, they have defined four different types of infinite parallel universes, all independent from each other.

I have been pondering these ideas lately and I have to admit my head is beginning to hurt from it. It occurs to me that nothing that we can imagine doesn’t exist in some universe. What’s more, there are infinitely more worlds that we can’t possibly imagine. So that leads to the question, what does a writer actually do? Channel one of the myriad worlds of the multiverse? It makes one want to start every story “Once upon a time in a universe somewhere in the vast infinity of the multiverse…”

If all these universes exist, then it means that faster than light travel is actually possible. We are not alone in the multiverse. And time travel is possible. And the discovery of these technological marvels is imminent. In fact, in one way it might be argued that I just did discover them. Of course, I couldn’t take credit for these discoveries. There have been numerous people that imagined these wonderful things before me. Jules Verne, H G Wells, Robert Heinlein, and Isaac Asimov to name several.

It puts my humble efforts in perspective. I guess I’m looking for the perfect universe with the perfect story to establish myself as a working writer. I don’t expect it matters much whether you create a place with your imagination or channel it from the Akashic Record.  It does seem to set off tremors in my head when I try to do it. I don’t know whether to be scared or grateful.

It helps me deal with the strange goings on in this world today. I was reminded of one of my favorite aphorisms today. Life is a journey, not a destination. It has been said so much it has become a tired cliche but it also holds the kernel of wisdom. My bags are packed. Let’s see where this life takes us.


Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.