Drupal Adventures

I’m putting up a Drupal site today. Not because I have anything against WordPress. I love WordPress. I just want to explore the wide variety of content management variations that Drupal supports beyond just blogging. It may not be any better than WordPress but I’ll never know unless I investigate and experiment with it. Occasional Comment will remain as it is for the foreseeable future. Not that there are hoards of readers that will miss it if it moves or changes or even goes away entirely.

Right now I’m waiting on a new subdomain name to propagate through DNS. It’s like watching chrome rust. I may have to wait until tonight to finish configuring Drupal if it takes as long as my webhosting site claims to propagate DNS names.

Software Lifecycle Planning Methodologies

I’m learning how industrial software development has changed in recent years. My entire focus up until recently has been from a developer’s perspective. Now I’m being forced to look at the business issues surrounding how you price a large product development effort that has a moderately small software component (small in terms of the total value of the contract, that is).

It makes me shudder a little bit. Primarily because we could do so much better but it would take a revolutionary change in business practices instead of an evolutionary change. I’m not saying that these practices won’t eventually evolve to better reflect the experience of software developers. I’m just saying that there will be some large lag (10 years or so maybe) between the time we discover a software planning  methodology and the time it is reflected in business practices.

It also brings home the point that large businesses are inherently inefficient. The best software is almost always written by a single person that has been able to get their mind completely around a problem and its solution. People can help the author realize their vision but seldom do you find more than one person that really gets the total picture of a product. The solution to this problem is “lots of pieces, loosely coupled”, each one developed independently. If you can rigorously specify the functionality and interfaces of a piece of software, you have created an abstraction that can be used as a building block to achieve more complex behaviors.

Now you know the hackers’ biggest secret, study the interface, not the code. If you have to study the code, you’re doomed. Well maybe not doomed, but set back months or maybe even years.

A Short Essay on the Process of Programming

I approach programming as an exploratory process. I can’t seem to bring myself to sit down and plan a program out in minute detail beforehand. The truth is, any program that I understand well enough to plan out in minute detail beforehand, doesn’t interest me in the slightest. I want my programs to teach me something I didn’t know when I started writing them.

Consequently, I usually start out with some vague idea for a program. I write the shortest little bit that might work and compile and run it. Even better, I use an interpreted language like Lisp or scheme or ruby so that I can skip the compile part. I love dynamic languages!

At first, I find myself exploring the boundary between the language and the environment. For example, I have spent hours exploring the Dir module in ruby. I have spent similar amounts of time exploring similar functionality in Common Lisp. Knowing how to traverse the file system in a given language is an important detail.

Another facility that I often dwell on is the reflective capability of a language, that is the ability of a language to know or discover details of its structure. For example, most symbols in ruby have a method methods that returns an array of methods that the object implements. methods is a reflective method. It allows the programmer to discover details about the programming environment dynamically at run time. Reflection is also called introspection.

Java implements reflection, demonstrating that languages not typically considered dynamic can be introspective too. The clever trick to Java reflection is that Java doesn’t create data structures to describe itself until you actually need them. This adheres to one of my favorite principles that states “you shouldn’t have to pay for features that you don’t use.” I’ve heard this principle called parsimony.

The underlying theme to these language features is that they all help make a language more adaptive. One of the key characteristics of human intelligence is our ability to distance ourself from a situation and analyze it with detachment. This is an important part of our ability to adapt to rapid changes in our environment. The ability of someone to reason about their relationship to their environment is essential to intelligent behavior.

Now I’ve really tipped my hand. The romantic notion that has captured my imagination is the quest for emergent intelligent behavior or Artificial Intelligence as it is commonly called. I try to avoid the term Artificial Intelligence because I find that neither the word Artificial nor the word Intelligence lend themselves to unambiguous definition, much less objective measurement. In fact, many of the great debates in the field revolve around this shortcoming.

To be continued.

The Freedom to Fail

Paul Graham is an inspiring essayist. I agree with most of what he says. In August, he wrote an essay entitled Holding a Program in One’s Head. This essay gave me a lot to think about. He captured the essence of much of what upsets me about the corporate environment in which I try to practice my profession. He overlooks one important aspect of an environment that will encourage creativity and innovation. That is the freedom to fail without repercussions.

I sometimes listen to Terry Gross’ radio program Fresh Air on NPR . Recently she interviewed Steve Carell and Terence Blanchard on two separate programs. The thing that struck me is that they both had similar stories to tell about the environment that nurtured their respective careers.

In Steve Carell’s case, he spoke of his experience as a cast member of Second City, the famous sketch comedy troupe where many of Saturday Night Lives cast received their training. He said that the great thing about that environment was the opportunity to fail. He went on to explain that they were expected to go out and try new characters and ideas. If they worked, great. If they failed, there was no penalty. They were just expected to go out the next performance and try something different.

In a surprisingly similar fashion, Terence Blanchard described what it was like when he joined Art Blakey’s legendary Jazz Messengers band. Terry Gross asked him if Blakey was a disciplinarian. Terence responded that on the contrary, all the members of the band held Blakey in such high regard that he had to spend a lot of effort putting them at ease. When they asked him to let the band play the classics that made the Jazz Messengers famous, he told them that they should compose their own music and make the band their own. Terence went on to say that it was great to have the freedom to fail. To try new things without worrying about whether they would work or not.

I think that programming is the same kind of creative activity that acting and creating music is. By the very same reasoning, I think that the freedom to try things and fail without repercussions is essential to writing innovative software. Furthermore, I think that most software falls into the category of innovative software. We make the mistake of treating software development like the other engineering disciplines and ignoring the central difference between it and them.

If we are building a building or a circuit board or any other physical product, we have a clear idea of the functionality we are after. We might build a model or a prototype to clarify our thinking but we wouldn’t dream of trying to sell a model or a prototype as the final project. Typically, a lot of effort is expended to rigidly define the product so that we can effectively produce it exactly to plan. The reason we do this is that the process of production is costly to change. We get cost breaks from producing many items exactly the same.

Software is different. In the first place, the per unit cost of producing software is negligible.  Secondly, you rarely know exactly what you want the product to look like until you are well along the road to producing it. Unlike physical production lines, changes to software are easy and inexpensive to make. In all but the most extreme circumstances, software requirements are discovered as you implement the program.

You can define requirements in very broad terms, e.g. “this is a point of sale terminal for a video rental store”, but the details of how that should be implemented should be derived from interactively creating software that automates the repetitive tasks of running a video rental store with someone that understands those tasks intimately. And, who knows what those tasks are better than someone that runs a video rental store.

An analogy that was created to explain the rationale behind eXtreme Programming (XP) captures the essence of this principle. You don’t drive a car on a long trip by carefully aiming it in the direction of the destination and tying the steering wheel in place. You would be in the ditch before you went a mile. Instead, you constantly adjust the course, you drive the car. In much the same way, you must drive toward the creation of an innovative piece of software.

That’s why I love being a programmer. That’s why I hate programming in a corporate environment where management doesn’t understand these basic facts about software development and wants to maintain rigid control over the process. But then again, the money is good.

Courting the Muse

7anby made a video that described his writing process. I know, every writer’s process is unique, otherwise much of the magic of the written word would be lost, but there was a spark of recognition as he described how when the muse is at work, the words flow effortlessly. I write to achieve these moments. It is such a joy to see your ideas flow out onto the page and be captured for posterity.

Another point of recognition was when he talked about how he needed to write. I feel that way too. I’m not sure that anyone will ever read these words, but I need to write them for my own mental health. I need to write them so that I can become comfortable with the process and start to shape it to my will. I think the mind-page connection has to be firmly established before you can start to successfully shape what goes on to the page. If I think about what I’m writing too much, my censors kick in and I start trying to edit what I’m writing instead of concentrating on getting a draft onto paper. I’ve been told all my life that the most important part of writing is rewriting and perhaps that’s true. But you have to write something first before you can rewrite it.

I suspect that is why so many writers keep journals. This gives then the opportunity to become comfortable with the mind-page connection. It’s just like learning to play a musical instrument. You have to noodle around with it for a while until you’re comfortable with the instrument and then you’ve got to practice. And, as the super athletes tell us, you’ve got practice doing it right. If you practice your mistakes, you’ll get really good at making them.

I doubt that writing in this journal/blog once a day is sufficient to develop the skills and process that I’m after. But it is better than not writing regularly at all. So I’ll continue writing these short essays and when I skip a day, I’ll get back to the grindstone the next day. I’ve learned that that’s how you get in the habit of doing anything that you want to make an integral part of your life. And I want to make writing, video making and exercising into daily activities in my life. Thanks Mike (7anby) for inspiring me to keep this up until I get it down.

Cyberspace

As I read my email and watched some of the YouTube videos on channels that I subscribe to this morning, I realized how different my life has become in a very short amount of time. Back in the early 90s I worked in a Virtual Reality lab at a large corporation. We were trying to determine if and how we could use immersive virtual reality to do things better, cheaper, faster, safer, etc. We were chasing the holy grail of cyberspace, that place that is everywhere and nowhere all at the same time. As I exchanged comments with fellow YouTubers in North Carolina, Liverpool, New York City, Florida and Arkansas, it struck me that cyberspace has become a lot more subtle than Neal Stephenson and William Gibson ever imagined. There is no immersive virtual reality, for which I am thankful. I used to get motion sickness from wearing the VR helmet. The glue is the virtual places that we congregate online, through the web or email or the telepresence of our webcams.

I used to scoff at the term social-web. I was convinced that what we were experiencing was a variety of Computer Mediated Communication (CMC). What I’ve realized lately is that the social-web is CMC of a very intimate variety. I probably have as many friends on line as I have in “real life”. I hate the term “real life”. It implies that my online friends are somehow not real. I tried using “3d space” but it is just a little too geeky for me, and I consider myself a geek. I don’t know what we should call it but I’ll recognize it when I hear it.

I recently upgraded my amateur radio license to Extra Class (the highest class possible). I now have privileges to talk on the part of the radio spectrum that propagates around the world. I haven’t got a radio yet but I am shopping around and thinking seriously about building a low power transceiver. I realized as I was thinking about cyberspace this morning that the allure of ham radio has always been the magic of talking to someone far away as if they were right here with me. I haven’t been on the air in years and I haven’t been on the air in the HF bands ever so I don’t have any radio friends yet. But I am sure that they will be just like the YouTube friends I have made.

Procrastination

This is a recurrent theme on this blog. When I can’t concentrate on what I should be doing, I blog. I suppose there are worse things I could be doing. At least I am doing something productive. It is a variation on the old saying that “the grass is greener on the other side of the fence”. When I’m supposed to be doing something else, I suddenly don’t have writer’s block. But if I was trying to write a blog post, there would be something else that would demand my immediate attention.

I should be coding but instead I’ve been researching the standards that I need to understand to write the code. What I ought to do is start writing the code and look up the details as I need them. That would make sense. That’s probably why I’m not doing it. I feel so rebellious. I’m the rebel without a clue. I’ve used that joke twice today. Guess I need to give it a rest.

I used to write blog posts that were topical. They had several links to other web sites in every paragraph. Now I just ramble on about whatever stumbles across my consciousness without bothering to link to anything else. That probably contributes to my lack of readership. Snarky is right, get in here. Read, comment, rate. Except there is no rating mechanism. Oh well, read and comment anyway.

I’m working on several projects. I just don’t seem to be able to get much traction on any of them. I even started keeping a todo list up to date. It has become something that I look at and then ignore. It’s my todo list. I shouldn’t be ignoring it. I feel weird. Not particularly bad, just weird. I can’t seem to describe it any more specifically.

That’s all I’ve got right now. Maybe some more later. You never can tell.

Speed Blogging

Ok. I’ve got ten minutes before I’m going home. Let’s see if I can write anything worth reading in that amount of time. I actually had several other things planned to do before I went home but they will just have to wait now. I am committed to seeing this experiment through to the end. I’ve come to the conclusion that no one reads this blog anyway. If I’m wrong, let me know. jkelliemiller@gmail.com is my address. I know I’m not wrong though. The only comments I ever get are from spam bots.

I really missed my big 1600×1200 dual monitor set up when I was working in the other building the last two weeks. I felt like I had gone back in time or something. You don’t realize how much difference screen real estate makes until you do without for a while. I also missed the last two Tuesday lunch time computer book discussion group meetings. The guys in the other building work on a much faster time table. I like it but it leaves less time for other things. Like lunch time meetings for instance. 🙂

I’ve updated Leo. It is a minor revision but there are some dramatic visual improvements. I had to spend half an hour reconfiguring my system so that it would run Leo when I double clicked on a Leo document. I need to spend some time on the Leo web site learning about some of the new features. I’m using Leo to manage a work todo list again. I’m also keeping a lab notebook again. We’ll see how long this lasts. That’s about it from the ten minute speed blogger. I’ll take a quick look at the preview and then publish this.

Blogger’s Block

This is turning into another source of blank paper syndrome. Every time I find myself staring at this web page lately my mind goes blank. I am feeling pressure to write something better than just a stream of consciousness. I guess we always reject what we have in favor of what we think we want. I can write unbound volumes of stream of consciousness but I want to write something polished. I need to work out my process because polished writing doesn’t spring full blown from your consciousness. You have to write a draft that allows you to capture your inspiration. Then once you have the raw materials, You can work on rewriting it into something polished. At least that’s what I’ve been told by people whose opinion I trust.

I’m writing this while watching the Sunday night line-up on Showtime. Weeds is funny but perenially uncomfortable. Californication is like watching a train wreck. You have to love David Duchovny. He is such a good actor. The plot twists keep on coming.

Then there’s Dexter. Talk about adrenalin. I keep wondering whether they can keep cranking up the intensity. They seem to have managed so far. I wonder how long I can stand the intensity. I had to quit watching 24 because it was too intense. But Dexter is different. Much richer and subtler. Poetic, literary. It doesn’t help that I drink coffee before I watch.

It’s October, Surprise!

It’s the 4th of October and I haven’t blogged yet this month. I’m falling off the wagon. This post will fix that. I’ve got an appointment with my therapist this afternoon. I don’t know what I’ll talk about. Perhaps I should make a list.

I wish I had an appliance for making lists. Something like a N800 maybe. I thought that Backpack would be the place where I made list but I keep forgetting to use it. I use it but not as much as I thought I would. I think the key to using it more is that I need ubiquitous access to it.

For instance, from a cell phone. Except that I hate typing on the cell phone key pad. The iPhone is a step in the right direction. It’s too expensive and won’t work with my service provider. I also hate that it costs air time for web browser access. If it’s a premium service, I won’t use it for such ad hoc activities as making lists.

It’s interesting to see the value propositions fluctuate with time. What is it worth to me to be able to make lists accessible from anywhere. Oh and email access is important too. I guess I could start exploring sending email to my cell phone when I want to remind myself of something.

I could use my web hosting system as an “always on” source of this ubiquitous goodness. The only problem is that by the time I finished implementing my little list/reminder system I would have implemented most of the functionality that Conduit is promising (assuming they ever finish it).

This ramble probably only makes sense to me. I may edit it so that it makes sense to someone other than me but I want to go ahead and post it so that I have an October post up. What a funny little competitive streak I’m exhibiting here.