Story and Memory

It has been established that people’s memories of events are inherently unreliable. You may have experienced a family member that insists on telling the same story every time the family gets together. Only they never tell it the same way twice. They aren’t lying, at least most of the time. They are telling the story the way they remember it except they remember it differently each time.

It seams that when all we have is people’s memories to pass on the stories of their youth, we’re liable to hear all sorts of unlikely tales. My daddy used to tell some rather colorful stories about his antics as a boy. I always took them for gospel but now I’m beginning to wonder.

He used to tell his stories when he was teaching. He would intentionally mold them to fit whatever point he was trying to make. After a while I guess the truth and fabrications just blurred together. What was at first a well intentioned pedagogical adjustment became a central premise of the story.

And now I find myself trying to make up convincing stories. I don’t want them to be totally based on the events in my life. I do want them to sport some of the embellishments that would be apropos of the intent of the story, to amuse and educate the listener. But mostly just to amuse.

For example, when I was in high school there was a teacher that everybody liked. He knew his subject well and could get his point across by telling stories that illustrated his point. He was very dedicated to teaching his lessons though. One day he came in to the classroom late. It was a couple of minutes after the bell had rung. He began one of his lectures.

Most of the class was listening carefully but one of his best students, a feisty little blonde that sat in the front row and always made A+ on all his tests started giggling. She whispered to one of her friends next to her and soon the entire class was snickering. One of the boys in the class insisted that he needed to tell him something important in the hallway. Finally the teacher relented and stepped into the hall with the young man. At which point the young man sheepishly pointed out that the teachers fly was undone.

The boy went back into the classroom. When the teacher came back in, the class was totally silent. Everyone was waiting expectantly to see what he would do. He looked slowly across the faces of the class and then picked up the lecture right where he had left off.

That’s the kind of story I’m talking about. One based on a true event but with the names changed, or omitted, to protect the long dead. That’s one of the benefits of waiting until you get to be my age to write the stories of your youth. Anyone that might recognize themselves and object are beyond caring anymore.

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

They’re Everywhere

Back in the early nineties a guy named Mark Weiser lead the computer science laboratory at Xerox PARC (Palo Alto Research Center). He was a proponent of what he called ubiquitous computing which is to say computers everywhere. Now, some twenty five years later we have cell phones and smart watches and the Internet of Things (IoT). In short, he was right. Computers have ended up everywhere.

And they are only getting smaller and more pervasive. The computer scientist and science fiction author Vernor Vinge has written about nano computers the size of particles of dust that form mesh networks that work together to achieve more sophisticated tasks than each could individually undertake.

Sometime during my career it occurred to me that the computer was the universal machine. It takes a wide assortment of accessories to accomplish some of the tasks that it is capable of but it can do practically anything. Moore’s law keeps multiplying what each computing core is capable of while reducing it’s size and cost.

The interesting thing that comes to light when looking at the research that was going on at PARC in the early nineties is that they were absolutely correct about what technology trends were going to happen but they had no idea what the implications of it were. For example, when I first got a smart phone, I didn’t use the text messaging feature much. If I wanted to communicate with someone, I’d call them and talk to them.

Now, I find myself preferring text messaging to phone calls. Text messages can be sent without both parties being free at the exact same time. They are easier to understand in high noise environments. And, there is a record of the conversation. In short they are much more useful than a comparable phone conversation.

Another surprise is how capable the sensor suite on a smart phone turns out to be. They have turned out to be almost as versatile as the Star Trek tricorder. It seems the tricorder fell by the wayside somewhere between the end of Star Trek the original series and Star Trek the Next Generation. It was a marvelous device that has been inspiring inventors ever since. We have come close to duplicating much of its functionality with modern smart phones.

The story has a somewhat sad ending, at least for Mark Weiser. He died at 46 of stomach cancer in 1999 before many of the technologies he pioneered became so widely adopted. And somewhere along the way someone came up with a better name than ubiquitous computing. Internet of Things is much easier to remember. There is a scholarship named after him at the University of California, Berkeley and the ACM SIGOPS awards the MarkWeiser Award annually.

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

What You Don’t Know That You Don’t Know

There is so much that we don’t know. There is the stuff that we should know but somehow missed out on. Maybe we were out sick that day. Or maybe we weren’t paying attention when it was being taught. Or maybe we just got behind and didn’t get through the entire curriculum that year and everyone in the class missed out on that particular detail.

There is the stuff that we’d like to know but don’t even have the slightest clue how to begin finding out about. Like, how to throw pizzas to make the crust thin and crunchy without putting your hand right through them.

Then there is the stuff that is more work than we want to invest right now. If we ever needed to know it for some project we were doing we would knuckle down and learn it but we just don’t see that happening any time soon, if ever. An example of this might be how to arc weld.

Then there is the stuff that you used to know but you didn’t use it so you forgot it. You could probably relearn it but after the experience of forgetting it because you didn’t use it you think you’d probably just forget how to do it again so why bother?

Then there is the stuff that you don’t even know that you don’t know. That is particularly bothersome. You can’t remedy that situation unless you learn what it is you don’t know. This is the most frustrating type of ignorance. You can only check the things you do know and look for mysterious gaps.

Some people revel in their ignorance. They must figure that if they’ve gotten along this long without knowing whatever it is, they won’t miss it. I’m just the opposite. I want to learn all I can about everything I can. I often like to learn them on my own from books. There is something to be said for having an expert available to answer your questions though.

I’ve prioritized the things that I know I don’t know but want to learn. I’ve found video instruction to be helpful in many instances. I am particularly fond of break out sessions from conventions. The instructor has already limited the scope for you. You Tube is a great way to watch these inexpensively.

For someone like me that likes to learn a lot of diverse topics, the internet is a great source of information. You do have to be careful to verify your facts though. Just because you saw it on the internet doesn’t mean it’s true you know. Of course you did. My readers are some of the smartest people in the world.

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

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.