Aha!

So after watching the reality distortion field (the video of Steve Jobs announcing the iPad), and sleeping on it, I think I may have a solution. I can afford an iPad if I replace my MacBook with a 21.5″ iMac and use the difference between the price of that and the price of a 15″ MacBook Pro and a 24″ Viewsonic external display to buy a 32GB iPad!

I’ve noticed a bunch of people nay saying the iPad today. One person that agrees with me is Steven Fry. I knew he was an Apple fan boy but I was surprised at how astute he was. I think the key fact here is not that the iPad is the best tablet there could ever be. It’s just that it is the first one to “get” what sets a tablet aside from a laptop. It has certainly captured my imagination.

There. I think I’ve got it out of my system now. And now back to your regularly scheduled blog posts.

In which: We explore the author’s obsession with tablet computers

The internet was on the blink last night at our house. Thus, no blog post. This morning, I thought I knew what I wanted to blog about but somehow throughout the day so much happened that I decided to put that topic off for another day. I had forgotten that it was the day that Apple announced their new product. You know, the one that everyone has been talking about for years, the iPad.

I have wanted a tablet computer ever since I read Alan Kay’s description of the dynabook. I wanted one. Later, I read Neal Stephenson’s The Diamond Age: or A Young Lady’s Illustrated Primer and the flames of my passion were stoked even higher. I couldn’t afford a Newton but it became obvious that it wasn’t the holy grail after all. I owned 3 different Palm Pilots. They never quite filled the bill.

I’ve been waiting for the Apple tablet, the iPad, for years now. Today, I found out that I can have one, … in 60 to 90 days. Now I’ve got to decide whether I want one enough to pay the Apple premium. I am very intrigued. But it won’t be a laptop replacement. It was never intended to be that. I have been planning to buy a MacBook Pro to replace my aging MacBook. I can’t justify buying both a MacBook Pro and an iPad. Therein lies my quandary.

Of course, the rational side of my brain says it is better to wait and see how things play out. After all you should never buy version one of anything. But it is so damn sexy! I wants it. My precious.

Okay, so I buy the 16GB wifi version. That’s only $500 bucks. But for $600 bucks, I could have the 32GB version and for $700 bucks, I could have the 64GB version. And for $830 bucks I could have the 64GB 3G version. I can’t afford $830 bucks. Lets start over again.

No, let’s not. Once again I will be a responsible adult and buy the MacBook Pro. I’ll wait and see how things pan out. It may be a flash in the pan like the AppleTV. I don’t believe it for a minute but time will tell. Maybe by the time it is actually shipping I’ll change my mind. Even better, maybe I’ll think of a creative way to finance one; write an article; sell a program; get a moonlighting consulting gig. Only time will tell.

A Modern Prophet Speaks

I read David Gelernter’s The Second Coming — A Manifesto today. I agreed with most of what he said and even when I didn’t agree with a specific prediction he made, I agreed with the motivation behind it. I’ve been saying for a long time that the desktop metaphor was unnecessarily constraining. It is fine if what you are trying to do is mimic the operation of a pre-computer office. The problem is that nobody wants to mimic the operation of a pre-computer office. The computer has changed everybody’s expectations of how an office should run.

I have been telling people that the future of computers would be based on constantly shifting clusters of computers, for example, if you walk into a room and you have a small hand held computer with you, it will form an ad hoc federation with the input and output devices in the room. If there is a display on the wall, your computer will associate with it. If there is a camera in the room, your computer will use it to watch you and look for you to make gestures to tell it what you want it to do. As Gelernter says, the focus will shift from the computer and the programs to what you want to accomplish.

I also agree with the indictment he makes of computer users for putting up with such horrible software without even complaining about it. I think the reason for this is that the average person doesn’t know how bad things are or how good they could be. There is a conspiracy between the people that understand computers to keep the people who don’t in the dark about what might be done with a little imagination.

All in all, the Manifesto is a great read. It inspired me to rethink my attitude toward software development. It helped me imagine the emergence of artificial intelligence just any day now. Go read it! Now! I’ll wait for you.

Parrot Speaks A Number of Languages

After watching several of Allison Randal’s videos yesterday (see Dynamism Clarified ), I started investigating Parrot. I was so impressed that I downloaded the latest version (2.0.0) and built it on my MacBook. I haven’t had time to do much more than start reading the documentation but I like what I see so far. I will probably play with Cardinal, an implementation of Ruby 1.9 in Parrot. I may see what kind of bench marks I can come up with.

I realized that my first several languages were all dynamic languages, i.e. Microsoft Basic (long before Visual Basic) and Forth. I always preferred dynamic languages because, in spite of whatever project I was working on for my employer, I was always intrigued by the prospect of artificial intelligence. My first static language was Pascal, quickly followed by C. I was going to say that I learned Lisp around this time but it took me a long time to really learn Lisp. I was able to write Lisp expressions in pretty short order but the whole process of building expressions up into programs that leveraged the unique strengths of Lisp took quite a while.

When I look back over my career it seems that I was always avidly studying dynamic languages. In fact, one of the reasons I was so enamored with Java was that it was more dynamic than C. When I discovered Java (the first day that Sun released the first public beta as a matter of fact) I immediately recognized it as a tool for convincing the static programming masses of the value of dynamism. Or as I put it at the time, it was a step in the right direction toward Lisp.

My current favorite language is Ruby, primarily because I can interface to more main stream software more easily with Ruby than just about any other platform. It is also sufficiently mature that I don’t worry much about it changing too drastically. I also share a lot of “opinions” about code with Ruby.

Dynamism Clarified

Today I watched a video of a presentation given by Allison Randal entitled Exploring Dynamism. It helped me put everything I know about dynamic languages in perspective. Allison is chief architect of the Parrot virtual Machine and employed by O’Reilly Media.

She made a point in the video that while theoretically, languages are either static or dynamic, in practice they exist somewhere on a spectrum between static and dynamic as extremes. She also discussed at length the various dimensions of dynamism including dynamic typing, dynamic dispatch, dynamic compilation and dynamic loading to name a few.

I thought it was brilliant how she discussed the pros and cons of these features quite clearly without bogging the discussion down with examples from any particular languages. This allowed me to think about her points in the context of languages that I know. She demonstrated a deep familiarity with a wide range of dynamic languages throughout her presentation. I was also impressed by the fact that she used her expertise in natural language linguistics to inform her model of computer language linguistics

If you are a fan of Ruby, Lisp, Smalltalk, or even Java, I highly recommend you watch the video. It was certainly well worth my time.

Ode to a Ruby Gem

This morning I was thinking about a project that I am doing in Ruby. I found myself thinking to myself  “I sure am looking forward to getting more intimately familiar with active-record.” Active-record is the Object-Relational-Mapping component of Ruby on Rails.

I love a package that makes you eager to learn more about it. Not to say that you have to be intimately familiar with active-record in order to use it. Rails is just so well thought out that studying the API is actually fun. And, Rdoc, the Ruby documentation package, makes writing extensive documentation of your code so easy that programmers usually do a pretty good job of documenting their code.

I have been using active-record in my Rails apps for several years now. The reason that I needed to delve deeper into active-record at this point is that I am getting data from an external source (I’m scraping it from a web page), parsing it using nokogiri, another fine Ruby package, and then caching it in a local database. Consequently, I am having to do some thinking about how to structure the data that I cache.

Let’s face it, I’m not really all that experienced at database architecture. I can hack a little SQL when I need to but I haven’t had to do a lot of data normalization since I studied databases in college. Rails makes it easy to play around with your schema until you get it just right. I don’t mean to gush or anything but Rails makes these things so easy that it feels like playing instead of work. In my case, I guess it is playing, at least to the extent that I am not being paid to do it. But that’s another story.

Time to Think About Some Goals

I forget who it was that taught me this little gem but in my experience, it has turned out to be true. If you want to insure that you accomplish things, write them down on a list. It doesn’t seem to matter whether you write them on paper with a pen or pencil or you type them into a computer. The relevant thing is that you’ve spent the time thinking about them and formulating them into words and as you write or type them, you are, in effect, programming your brain to accomplish them. I often don’t even bother to check the items off the list as I accomplish them. Just making the list is enough to focus my intent. I occasionally run across lists that I’ve made, either in old notebooks or in files in some obscure sub-directory of my Documents folder, and I’ll look at them and discover that I’ve accomplished most, if not all, of the items on the list.

So, I want to make some goals for myself. There are three categories of goals that I intend to attempt to capture today:

  • Health goals
  • Project goals
  • Financial goals

Let’s take Health goals first.

  • I want to lose at least 10 pouinds between the initial weigh in and the final weigh in of the “Scale Back Alabama” competition.
  • I want to get my daily fasting blood sugar down below 130 mg/dL.
  • I want to get my cholesterol panels all within ADA recommendations (that means boosting my HDL and getting my triglycerides down).
  • I want to stop spilling protein (that means mostly exercise, I think).
  • I want to get back on a schedule of daily exercise.
  • I want to quit reflexively eating everything on my plate.
  • Long term, I want to weigh less than 200 pounds.

Now some Project goals:

  • I want to maintain my habit of writing for at least 30 minutes a day (nominally between 10:00pm and 10:30pm).
  • I want to start posting to my blog, Occasional Comment (here) at least five times a week.
  • I want to finish the Radiosonde data analysis project for Bob.
  • I want to present at least once a quarter to the lunch and learn at work for a total of five times this year.
  • I want to write at least a science fiction short story and perhaps even a novel.
  • I want to finish the pilot of The Gentry.

And finally, some Financial goals:

  • I want to get completely out of debt.
  • I want to start a successful small consulting business to retire to.
  • I want to be able to save at least 20% of my income while paying all of my bills and having a comfortable lifestyle.
  • I want to have the money to get the house fixed up.
  • I want to be independently wealthy so long as it harms no one.

So there are my lists for now. I’m putting them out there. I’ll come back and check periodically to see how many items I’ve accomplished. I’ll probably write some more posts about them as events unfold.

Daily Contemplation

I started writing every night. I set a time, 10:00pm until 10:30pm, as a minimum time. I was inspired to do this by Gladwell’s observation that it takes 10,000 hours to learn to do something well. I believe in practice. I have recently discovered that an important component of practice is to make sure that you are practicing the correct way of doing something, else you will learn to do it incorrectly. I suppose that matters less when it comes to writing. I have never heard of a right or wrong way to write. Perhaps that is because, it is so difficult to write anything substantial that it is a miracle if you write anything at all.

I have so many projects in progress that it is difficult to keep them all moving. I am doing better than I have in the past though. I think that my nightly writing discipline may help me develop some blogging discipline. I’m an eternal optimist, aren’t I? I have noticed a pattern to my writing though. I seem to spend most of my time writing about writing. That is something that I need to work on changing.

I’m using OpenOffice to write at home on my MacBook. I have given up trying to write using emacs. I’m not sure why but I end up spending too much time thinking about the structure of the document, for example, placement of line breaks, etc., when I use emacs. When I use a conventional word processor, I just take the defaults and type.

A Post From My Blackberry

I hope this works the way I think it should. I have never posted anything from my Blackberry using the WordPress web form interface. It is time consuming to type using the BB keyboard but it does allow me to post at times and in places that were not viable before now. This post is going to be short so that if it doesn’t work, I haven’t lost much.

Quick update: I was able to save a draft of this post but I couldn’t figure out how to publish it without using a “real” browser. Still useful. And maybe I’ll figure out how to publish from the BB with a little more effort.

Happy (belated) New Year!

So, here’s my first post of 2010. A new decade dawns. What will it bring? I hope a renewed commitment to blogging. I guess that’s a bit optimistic given my track record to date and considering it’s January 12th and I’m only now writing my first post of the year.

I’ve been working on a Ruby project the past week or so. It is basically a script to scrape data from pre-formatted text on a web page, cache it to a local database, then use it to generate animated plots to visualize how it changes over time. It sounds kind of pedestrian but is actually quite fun and is giving me an opportunity to build my Ruby skills on a task that I more or less understand instead of trying to build them while inventing something entirely new.

If I would just write for ten minutes a day to start with I would be in the habit in no time. Sigh!