What Ever Was I Thinking?

I learned something about blogging last night. Those of you who read yesterday’s blog probably have an idea what it is that I learned. I learned that if you are going to write something technical when you are sleepy, you should be sure that you read it carefully before you post it.

I won’t say that I said anything that was strictly speaking untrue but I will readily admit that even I am not sure what I was trying to say in the last paragraph. And I just stopped abruptly. I had a point that I intended to make when I started writing but I am pretty sure that I never got around to making it.

I will give the topic another go sometime when I am wide awake and have thought the topic through completely. I like to write off the cuff but I do think one should proof read one’s post before posting it. Otherwise one is liable to end up embarrassed like I am about that post I wrote yesterday.


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

Computers Are Simple

A computer is a very simple thing. When you first turn it on, it goes through some sort of initialization procedure. The exact specifics of how the initialization procedure works varies somewhat depending on what kind of computer. I am going to talk about a very simple computer for the sake of explaining how simple they are.

This simple computer has a few pieces. There is the memory and the Central Processing Unit (CPU). The memory is a large array of digital memory. It holds the program and the data with which we will compute. The CPU is largely a collection of registers each of which amounts to individual, named memory locations. For instance the program counter is a register that holds the address of the next instruction that we will execute. The instruction register holds the instruction that the computer is getting ready to execute.

The initialization procedure of our hypothetical computer fetches two bytes from address FFFE hexadecimal. It loads those bytes into the program counter, which is the way that the computer keeps track of its place in a program. The next thing that the program does is load the instruction that is indicated by the program counter.

As it loads the instruction from memory into the instruction register, it increments the program counter to point to the next byte of memory. It decodes the instruction in the instruction register and decides how much more information it needs to load into the CPU and into which registers it should load the information into.

The computer then executes the operation indicated by the instruction register. It then adjusts the program counter to point to the next instruction and waits for the current instruction to complete executing so that it can repeat the process.

The instructions are extremely simple. They facilitate loading values into the various registers for later use.  They allow the programmer to be much more adaptive to the way that the host has arranged for the instructions to be displayed. The operations that they implement include loading and saving a value to memory, doing math on values, comparing two values together, among other things.


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

One GUI to Rule Them All

I remember the day that Mark Andreessen announced the Mosaic web browser. In the fashion of the internet, Andreessen and his team released Mosaic as free for non-commercial use. I was immediately struck by the implications that it had for use interface standardization. At the time there was a big competition between Microsoft Windows and the Apple Macintosh for the desktops of the world. Unix was bringing up a close third place. A web based user interface would render the underlying desktop GUI insignificant.

The evolution of the web platform has been gradual. It started out with very clunky user interfaces and very kludgy mechanisms for processing the data and displaying the results. But by keeping a focus on implementing the simplest thing that might work, the platform has become a formidable standard.

One of the most important components in this universal platform was a stroke of luck. Brendan Eich was asked to write a scripting language to embed in the Netscape Navigator Web browser. He originally intended to implement a lisp like language like scheme. This was vetoed by the marketing team as being too foreign looking to programmers more familiar with more conventional imperative languages like C. He was given two weeks to deliver the modified language.

Javascript retained a progressive object system built around the concept of cloning prototypes instead of the more common class based object systems popular at the time. It was plagued by flaws that were primarily the result of being rushed to production without an adequate shake down. Since Javascript was the one common scripting language available in all browsers, it became the lingua franca of the web.

It took the better part of twenty years for that potential to be realized but with the release of HTML5 and CSS3 along with the development of a huge catalog of Javascript libraries running both in the browser and in the server, the dream of a platform independent application framework has finally been fully realized.

Web based applications are now a popular means of implementing software and there is a special category of web application known as a Single Page Application which runs directly on the desktop instead of in a web browser.


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

Agile is Dead! Long Live Agile!

I keep seeing headlines on various programming news sites saying something like “Agile is Dead”. When I do, I know immediately that the author has missed the point. Agile is not a methodology to be slavishly followed. It is a philosophy of software development. It is a collection of best practices that may help the developer solve his customer’s problem. It is a starting point from which to open a dialog between the customer and the developer.

As such, it makes statements about tradeoffs that can be made in order to achieve goals. For instance, agile doesn’t prescribe that you should have sprints of two week duration. Rather, it suggests that bounding the time between milestones where you have demonstrable working code will help keep your customer’s confidence in the team high.

Observing that users rarely know exactly what they want at the beginning of a project, even when they think they do, agile suggests focusing on some small number of features at a time that can be demonstrated to the user at the end of each sprint. This has the added advantage of constraining the amount of time that you spend developing a given feature so that if the customer ends up not liking it as well as they thought when they actually see it implemented you have not wasted anything more than the minimum amount of time discovering that fact.

In short, agile is a tool bag of techniques for improving communication between the developer and the customer and insuring that the developer spends the maximum amount of time possible working on the things that the customer values most.

The practices of many agile teams have the benefit of having repeatedly demonstrated their effectiveness in actual practice  but they are not some kind of magic formula. If the customer refuses to communicate with the development team as they develop, agile is not going to work. Not because it is dead. But rather because it is not accomplishing the underlying goal of facilitating communication.

Communication is difficult in the best of situations. When one, or both parties fail to communicate, agile practices become less and less effective. There is no such thing as a silver bullet. Software development is hard. It is always going to be hard. And the hardest thing about it is for the customer to clearly communicate to the developer how he wants the software to work. This is made even harder by the fact that he often doesn’t know.

So the next time you see the headline, “Agile is Dead” remember, that agile is just a collection of suggestions that may (or may not) be helpful in communicating about the customer’s desires and expectations regarding the software that you want to build for them. Anyone that tells you any different is selling you a bill of goods.


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

Ted Nelson’s Dream of Xanadu

I often reminisce about my youth and the (relatively) early days of computing. When I was just starting my career, a man named Ted Nelson, son of a director named Ralph Nelson and a movie actress named Celeste Holm, wrote and self published a book. It was actually two books in one. On one side the book was called Computer Lib and on the other side, upside down, the book was called Dream Machines. It was published in an oversized format on newsprint.

Ted had a lot of revolutionary ideas. One of the most revolutionary was the idea of nonlinear text. He coined the term hypermedia to describe it. A hypertext consisted of prose that had certain key terms associated with different pages so that when you clicked on the original hyperlink, you were immediately shown the associated prose. This enabled the construction of text that could be  consumed at the whim of the reader instead of at the whim of the author.

We all know that when this concept was simplified and actually implemented by Tim Berners-Lee, it resulted in what we’ve come to call the world wide web. It is of note that the original hypermedia design, a project called Xanadu, consisted of bi-directional links and a micro payment system that allowed authors to collect micro payments for every one that clicked on and read any given hyperlink.  This system was never released in any practical implementation due to the lack of a feasible scheme to collect the micro payment.

If you ever find a copy of Computer Lib/Dream Machines in a used book store or yard sale, it is definitely worth a read. The ideas are for the most part still relevant and he assumes no knowledge of computers on the part of his readers. Many of his examples have inspired actual computer applications.


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

All This For a New Phone

I’m in the midst of an adventure. That is what my mom called it anyway. Any time we were out trying to get something accomplished and ended up facing challenges like for instance car trouble, my mom would say, cheer up, we’re having an adventure.

Today I went to the Apple Store to get our new iPhones. I had done my research, I thought. I wanted to buy them on the new every year plan that Apple offers. I went to the Apple web site and read up on the process. They require that you have a credit card, not a debit card, in order to be eligible.

So, I went out and applied for a credit card and waited a week while it got approved and they mailed me my card. Then, I showed up at the local Apple Store. To be fair, the folks at the Apple Store were great. The process was a bit lengthy though.

First, they explained to me that they were financing the purchase through a separate financial institution and I would have to apply for that loan. They entered the information and got back the news that I was declined. When I asked why, they explained that they didn’t know. I would have to call the lender and ask them. And they wouldn’t be able to answer any questions until an hour after the application had been declined.

I put the phones on reserve and went to Barnes & Noble for a cup of coffee. I have my new MacBook with me so I can use the time to write this blog post. So, a royal hassle turns into an adventure. I am posting my first blog post written in a cafe.

I will buy the phones today in any case. I just wanted to buy them on the Apple new every year plan. If I have to buy them out of pocket, so be it. The Apple Store Associate explained to me that I could buy them on the credit card and then come back any time between now and January 9th and change the plan so long as I could get the loan approved by the third party lender.

Hope everyone has a good weekend and adventures more of your own choosing instead of the random kind that has been my lot today.


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

My First Experience with Programming

During my second year of college I took an introductory course in psychology. It was a large class that met for lectures in a large auditorium. The labs were held in smaller groups and presided over by graduate assistants. They had recorded the lectures and made them available in the library so that if you missed the live lecture you could make it up at your convenience by listening to the recording.

They had also created computer based instructional material on a new system that was also available in the library. The system was called Plato. Plato was a mainframe based program that ran on a computer at the University of Illinois in Champaign-Urbana. The system supported numerous graphical terminals that could be connected remotely via modems and phone lines.

I was so impressed with the system that I applied for a user account on it. When it was granted, I found a user who was a computer science major and had program space allotted on the system and befriended him. He gave me a portion of his programming space to use. I bought the book on Tutor, the language in which Plato was programmed and set about teaching myself to program.

Tutor was an interesting language. It was similar in some ways to Fortran and in others to Basic. It had features that were unique to it, at the time at least. One of the most interesting features was the ability to take a list of words and phrases and match them to an arbitrary block of text allowing authors of instructional material to automatically score answers to essay questions.

The terminal on the system had a resolution of 1024 pixels wide by 768 pixels high. It was a monochrome plasma display. The pixels were orange when they were lit and brownish black when they were dark. The display had a programmable character generator so you could create custom characters in addition to the standard alphabet. This allowed for text that was displayed in different alphabets as well as character based graphics. It was also capable of line graphics.

The screen was touch sensitive so you could point to items on the screen to select them. The keyboard had more keys on it than a standard typewriter keyboard. This included several special function keys as well as special shift keys that allowed for extensive keyboard command short cuts.

I enlisted the aid of my wife at the time to design a custom character set that allowed me to animate a simple drawing of a halloween cat walking across the screen. This thrilled me that I was able to use the computer to make a programmed animation.

Later the next term, the local administrator of the Plato user accounts conducted an audit of the programming space allocation. My computer scientist friend had accounts on other computers on campus and hadn’t spent much time on Plato. He had not done any curriculum related work with his portion of his account.

I, on the other hand, was a cinema and photography major. My animated cat was directly related to my curriculum and ended up saving my friend’s (and my) programming space.

The system was lots of fun. It had a user to user message system. It had discussion threads, and it had a bunch of multi-user games. For example, it had a multi-user implementation of Star Trek. It had a dog fighting game. It had a game called Empire where you tried to conquer the world. These games were often written by users.

A few years ago I was Googling around on the internet and discovered that someone had written a Plato emulator that ran on the internet and an emulator of the terminal that ran on Windows, Macs, and Linux machines. There were a bunch of videos about the system on You Tube. I downloaded the terminal emulator and requested an account on the system. It was interesting to revisit my first experience with computers. It reminded me of why I had become so passionate about them.


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

The Closest Thing to Writer’s Block that I Get Anymore

For a month I have written about two thousand words a day. Three quarters of those words comprised the draft of my novel. The rest were blog posts. After thirty days of writing, I find myself struggling to think of topics for my blog.

It’s been a long time since I’ve had writer’s block. That may be because I haven’t let the fact that I couldn’t think of anything interesting to write about stop me from writing about stuff that would bore a statue to tears. I’ve been focused on producing a quantity of words without considering the quality of words.

The rationale behind that strategy is that if you write enough you will eventually get better at it. While this is true it still doesn’t change the fact that at some point you have to start writing about things that you care about, things that mean something to you.

So, let’s make a short list. At the top of the list is my family, my pets, and my friends. I feel like that writing about my family or friends, at least without disguising them in the cloak of fiction, is too intimate. My pets are cute and often funny. But they don’t have much of a dynamic range of emotional complexity.

Next on my list are my geeky hobbies, writing, programming, building electronic gadgets, and ham radio. These actually are a pretty good source of ideas to blog about. They don’t offer much in the way of dramatic content or plot though. Maybe a blog doesn’t need those attributes. I do believe that all writing is story telling at its  heart though. That poses the challenge of writing about these seemingly factual topics in an entertaining way by telling a story or even adding an element of humor.

I have blogged about the experience of participating in the NaNoWriMo challenge. I seem to learn something new every time I participate. I expect that will continue with every writing project that I undertake, whether it is under the auspices of NaNoWriMo or not. It certainly makes sense for me to share some of those insights as they occur to me. It also serves to help me remember them when I have recorded them as blog posts.

I have blogged about computers and programming and the history of computers and software development as it unfolded during my career. I think this kind of blog post is an important way to contribute to the historical record. That is assuming it doesn’t just evaporate as soon as I die.

I guess my final thought on the matter is that I shouldn’t wait until I sit down to write a blog post to start trying to come up with an idea. Instead, I should make a list of ideas for blog posts and add to it as I think of more ideas.


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

An Eventful Day

I have finished NaNoWriMo with a word count of 50035. That was a long haul. I managed to finish writing and get my word count certified so I have officially “won”. I am not pleased with the first draft but I understand that is a typical reaction upon finishing a first draft.

The next step is to start editing my novel from 2014. I’m going to let this one sit for a while before I try to evaluate it. I’m excited to get back to the older novel. I have some good ideas for cleaning it up.

Also, I managed to get my new laptop mostly set up. There was a big effort to get the iTunes situation straightened out. While I did that I made good use of the time installing various other packages that I needed.

Then, on top of everything else, we had a string of tornado warnings so I was monitoring the ham radio emergency weather network. It looks like there may be more rough weather tomorrow.


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

A Pitiful Excuse for a Blog Post

I’m writing this blog post on my new MacBook Pro. It is a Ferrari of a laptop. It didn’t arrive until around seven this evening. It was raining. The traffic was congested. Who knows why it took so long. I set it up while the wildings stormed Castle Black (a reference to Game of Thrones) on TV.

I took a brief break to move to the bedroom. I haven’t had a laptop for some time. I’ve never had a laptop that was so comfortable to use anywhere. It is light and cool and the keyboard has a nice feel to it.

When one has tools as nice as this, one feels an obligation to use it to craft truly outstanding work. I’m afraid I’ve fallen somewhat short of the mark tonight. I am resolved to do better for my next post. But for tonight, I’m just going to go with what I’ve got.


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