The Future of Computer Interfaces

(Thanks to Kevin Ilsen for pointing me to the video.)

This is absolutely amazing. With a few simple gestures, this is way beyond the “ancient” computer interfaces we use today, and is nearly exactly like what was seen in Minority Report, which is an excellent film despite Tom Cruz’s presence.

I was thinking about this recently. We complain about the mouse, but the mouse is incredibly intutive to use. All our children were computer-mouse-capable by age 2.5. Watching Naomi is interesting, though. She can use the computer mouse without difficulty. She’s learned to do pretty well with the keyboard, also, good enough to play World of WarCraft.

The Xbox controller, however, still befuddles her. She’ll try to play Halo 2, but end up with her character stuck up against a wall. We discovered yesterday, however, that she did much better with the “Superman: Returns” game, which offers more freedom of movement, and didn’t require her to stay alive by fighting.

Back to computer interfaces. One of the things that hasn’t “arrived” yet, despite the fact that our current computers are more-than-capable, is voice activated software. It just hasn’t caught on, which surprises me. Is is simply too complicated for most users? Is it merely too annoying for most offices?

Thoughts?

Local Software Developer Achieves World Fame

Technically, we’re not supposed to BLOG about [the company for which I work], because it’s a public company, and [blah blah blah], but I think I can get away with this much, as I snagged a very brief spot in the video described below (which, if nothing else, has convinced me more than ever of my need to lose weight—something which is already in progress):

Over the past year [message redacted] has placed great effort in building a strong and expansive strategic relationship with Microsoft. We have continued to leverage and expand our use of Microsoft technologies as our two organizations come closer together to deliver greater value and powerful solutions to our mutual customers. Here is a three-minute video … for you to share with your customers/prospects. This video features executives from Microsoft, [message redacted], and a mutual customer and discusses the business value of this partnership and the powerful benefits it offers to [message redacted] and our customers.


One of my co-workers just stopped by and noted that our tarantula, Susan, is visible in the video. She’s in the blue-lidded, plastic box on the table that’s behind Bernard Farrell and me. Cool!

Educational Update

Isaac and David both earned highest honors for their first quarter. That means they get a $1/week raise in their allowances, which will now compensate for the $1/week they contribute toward our World of WarCraft subscription. David has become very proficient in handwriting, which is always difficult for a lefty; there’s a huge improvement over last year. Congratulations to them both, the weasels!

Last night I took the second of two “midterms”—our single major exams—for my Boston University graduate courses. I got a stinking “B” on my first exam, in “Object-Oriented Analysis and Design.” I think I did better on the Software Engineering exam yesterday.

Both classes have projects due within a couple of weeks. The Software Engineering course is a group project with three of my co-workers, and we’re building, using Ruby on Rails, a Web-based calendar that is idea for families and small organizations. This is a program I’ve always wanted to put together, and it will be fun finishing it up. So far we’ve learned that Rails is amazing in putting together the data connectivity and display pieces virtually automatically.

In OOAD, I am having a blast designing a simulator of a Star Trek transporter, including replicating the Enterpise D transporter control panel. For this I’m uisng Adobe’s Flex Builder 2, at the suggestion of co-worker RaviShekhar Gopalan, to create my application programmatically for Flash. Although far from finished (I should be “mostly done” by Monday), I’ve published my incomplete-but-working project to http://transporter.wilcoxfamily.net/ . There are some fun hidden features (and I’ll be adding several more), although the simulation/demonstration code isn’t in there yet. I fell victim a bit to a common programmer’s overconfidence: “If I know one object-oriented language, then I can learn another one in minutes!” I’ve figured out just about everything I need to do in Flex (I have one more technical problem to solve, and it’s a small one), but I’m my no means a master yet. You can also take a peek at the PowerPoint presentation I gave to the class for that project. (Can you spot the big omission from my Domain Diagram? It’s a real forehead-slapper!)

(It’s been determined that I will get real credit for the courses I am taking, but that I cannot get my Certificate in Software Engineering, because I don’t have a baccalaureate. I will investigate, after the next two courses are done in the spring, what it would take to convert these credits into undergraduate credits and fill in the missing pieces to get a B.S. in computer science.)

John (we still hear from him occasionally) has been telling people for a while that he is enrolled in a GED review course at Massasoit, but if he is, he’s taking on days it isn’t offered, at times of the day it isn’t offered, with an instructor who isn’t teaching it, using a textbook that isn’t part of the course, and getting a ride from people who claim they aren’t giving him a ride to the class.

And NaNi continues to learn letter recognition and writing from Nichelle, although the impending holidays have cut down on the teaching schedule a bit. Naomi can spot capital As anywhere, and writes them perfectly, except for tending to draw them upside-down.

Vacation’s Over: Back to School

:: sigh :: No more carefree days filled with playing Halo 2 for Dash …

Well, summer’s over, and we’re all back to school, except for Nichelle.

All?

That’s right.

While Isaac and David are in school, Nichelle is taking time each day to work on letter recognition, shapes, and other skills with NaNi.

And, I’ve enrolled in a graduate certificate program in Software Engineering, offered by Boston University’s Metropolitan College, which should keep me busy enough to stay out of trouble. I’ll be taking two courses simultaneously for the next 14 weeks: Software Engineering, and Object-Oriented Object-Oriented Analysis and Design. In the spring I’ll grab another two. Best of all, the classes are taught on-site at Kronos, and the whole program falls under Kronos’ tuition reimbursement program.

In Software Engineering, I’m working on our class project with three co-workers I’ve worked closely with before: Stephan Arsenault, RaviShekar Gopalan, and Doug “JavaDoug” Ross. We’ve decided to build an online shared calendar program, tailored to families, and we’re building it in Ruby on Rails, probably with a MySQL backend. (I should get a BLOG up this weekend to chronicle that effort.) It’s going to be fun!

So far, Isaac and David are doing great at Tabernacle Christian School. Isaac’s attitude toward school and homework is much improved, and David is as eager and happy to be in school as ever.

Running Multiple Versions of Firefox Simultaneously

(Based on information from this entry at the Dojo Foundation BLOG. This information is for Windows machines, specifically for concurrently running Firefox 1.0.7 and 1.5.0.x, but the same information applies to other versions of Ff as well. David Schontzler’s aforementioned post covers ‘Nix machines.)

As a Web developer on some fairly complex projects, it’s important to be able to run the current Firefox browser, as well as the previous release.

These instructions are based on having first installed Firefox 1.0.7.

Locate your current Firefox profile. Normally it will be in a folder under your Application Data folder, typically such as the following:

C:Documents and Settings{user_id}Application DataMozillaFirefox

Copy the entire Firefox directory someplace convenient, so you have a backup, for when you miss a step and something goes horribly wrong. (I know—this would never happen to me, either, but I was grateful I had a backup the two times I munged this setup and had to fix my initial Ff 1.0.7 installation.) You want to be able to fix your Firefox extensions in the event your running of Firefox 1.5 tries to upgrade them, which is a one-way process.

Then download and install Firefox 1.5.0.x, to a location other than the default location. (I recommend using a directory named C:Program FilesMozilla Firefox 1.5, as C:Program FilesMozilla Firefox is the default.) Do not launch Firefox 1.5 yet. (Be sure not to tell the install wizard to launch Firefox at the end.) If you do, you’ll need to quit the browser, and replace the now-upgraded profile folder with the one you backed up.

To allow you to clearly identify separate processes in the Task Manager process list, and to avoid accidentally running the Firefox 1.5 installation without the batch file that will preserve the Firefox 1.0.7 profile information, I recommend renaming the C:Program FilesMozilla Firefox 1.5firefox.exe to firefox15.exe. However, if you choose to perform this step, you’ll need to rename firefox.exe to firefox15.exe each time you perform an upgrade (such as from 1.5.0.3 to 1.5.0.4) of Firefox 1.5. (See “Future Upgrades,” below.)

Next, you’ll need to create a batch file to launch Firefox 1.5 and load a Firefox 1.5-specific profile:

set MOZ_NO_REMOTE=1

start "Firefox" "C:Program FilesMozilla Firefox
1.5firefox15.exe" -P "Firefox 1.5"

set MOZ_NO_REMOTE=0

The above batch file presumes that Firefox 1.5 is installed in the directory specified, that the executable is named firefox15.exe, and that a user profile named Firefox 1.5 will normally be used. If you’ve used values for any of these items that are different than the recommendations above, alter the portions marked in red accordingly.

The first time you launch Firefox 1.5, the Profile Manager will appear. Create a profile that matches the name used in your batch file.

If you want to change the icon shown (on the taskbar and the Firefox title bar), create a new icon and place it in C:Program FilesMozilla Firefox 1.5chromeiconsdefault with the name main-window.ico. You can find one that has a “1.5” overlaid atop the regular Firefox icon here. You can also find utilities to change the text in the title bar itself, such as the Titlebar Tweaks Firefox extension—which, ironically, has not yet been officially updated for Ff 1.5.0.x (as of June 7, 2006). You can install an updated, but unofficial, version from here.

I have also found that using significantly different themes (skins) for my different Firefox versions helps keep them straight at a glance.

And, of course, if you prefer to make Firefox 1.5 your default Ff version, do so, and modify the batch file to point to 1.0.7 instead.

Future Upgrades

The best thing to do when one is about to upgrade Firefox 1.5.x, is rename the firefox15.exe back to firefox.exe, run the ugprade, and then rename it back. If you don’t, you’ll find that your firefox15.exe is still around, but that the upgrader has added its own firefox.exe, requiring a delete-and-rename, as well as producing some interesting quirks, like Firefox not realizing it’s been upgraded because the .exe you’re running is the old one, while everything else is new.

Remote Debugging Attachment to a WebLogic Server

Don’t believe everything you’ll find online. If you work in a moderately complex environment (meaning, you’re running a managed server instance via an admin server instance on WebLogic), you’re sure to be led astray by the dozens of articles offering guidance into this elusive technique. You don’t have to emulate Ray Milland, if you follow this advice:

If you Google “Remote debugging WebLogic” you’ll find a host of discussions about modifying the startWebLogic.cmd or startWLS.cmd files. Ignore them all (assuming you’re using WebLogic 8.1 or later)! (Also remember, never verb a noun.)

Let me review the scenario that I am actually addressing here:

  • You will be remote-attaching to a running WebLogic instance, rather than launching the instance from within your IDE. (I use Eclipse, because I’m cheap—and because version 3.1.1 really works great, unlike its predecessors—but these instructions apply to just about anything.)
  • You run your WebLogic application as an instance under a WebLogic managed server, and start/stop it using the Remote Start options in the WebLogic console.
  • You’ve tried desperately to get your debugger to attach, or your breakpoints to be hit, to no avail.
  • You have deadlines looming, and if you don’t get this one problem solved, you can never see your family again.

Okay, perhaps I went a bit overboard on the scenario, but if you’re reading this, I expect, like me, BEA’s WebLogic isn’t a platform you use every day, but one that you need to work on occasionally.

The key is that most of the documentation presumes you won’t be running your application from the WebLogic Server Console, and gives no indication that the JVM arguments, in such a case, go in a completely different place. Here’s how to prove to the world that you weren’t going insane:

  1. Log on to the WebLogic console, via http://{servername}:9999/console. YMMV as far as the port number (after {servername}) is concerned.
  2. Using the navigation tree, click on the domain on which your application resides, open the Servers branch beneath it, and click on your application’s name.
  3. With the Configuration tab in the top row selected, click on the Remote Start tab in the second row. (Be sure you don’t have Control selected in the top row, otherwise you’ll think I am just as batty as the authors of the previous 743 help documents you’ve read.)
  4. Scroll down to the Arguments: field, and add your debug settings to the JVM arguments in that field. In my case, I added -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n, which (among other things that are too cool for me to share) allows the debugger to attach to port 8787 (address=8787), and the server to start without waiting for a debugger to attach (suspend=n).
  5. Click on Apply.
  6. Then click on Control in the first row of tabs, and be sure Start/Stop is selected in the second row of tabs.
  7. Finally, you’ll need to either gracefully or forcefully shut down the server by using the links provided, and then restart the server. (You’re actually only restarting your application; the ambiguous language surrounding server is another problem.)
  8. Attach Eclipse to the server by Configuring a new Remote Java Application under Debug … Feed it parameters of the server name and 8787 (or whatever port you provided in the JVM arguments).
  9. Debug your problem.
  10. For goodness’ sake, go home and see your family!

Drop me an e-mail using the link in the sidebar, or leave a comment, if I’ve goofed anywhere. I never claimed to be perfect. Sheesh.

Nashua Commuter Rail

Editor’s note: I moved this post to a this page on Monday, October 24, 2005.

Nashua, N.H., seems too far away from Boston to be a “bedroom community,” but in the quest for affordable housing, crime-free neighborhoods, and other prized essentia of suburbia, Nashua is an excellent choice, especially considering its sales-tax-free shopping and vibrant downtown.

After seeing the huge benefits the commuter rail brought to our former hometown of Brockton, Massachusetts, I am eagerly awaiting the day Nashua becomes a stop on the Purple Line.

I thought I’d start tracking some of the articles that come through Google Alerts about the rail project.

Splitting the Mac’s Personality

Remember the line about doing seven impossible things by breakfast?

I am becoming the Apple/Mac/Safari Guy at Kronos. (Safari, for those of you wondering, is Apple’s partly-home-grown Web browser, and it’s the default browser for Mac users.)

One of our problems in development is the rapidity with which Apple releases new versions of its operating system. Unlike Windows, which tends to be fairly stable, we might see Apple users upgrading their operating systems every six months or so. But, our applications need to work on Safari, and it’s considered a good idea to make sure they actually work. The immediate question is which Safari? A user with Safari 1.3 on OS X 10.3.9 is going to get a very different experience from a user with Safari 1.2.4 on OS X 10.3.8 or 10.3.9, and that will vary still from a user with OS X 10.4.1 and Safari 2.0. Nevertheless, these environments are all likely to be encountered by our customers, so we have to test them.

A few days ago, I’d upgraded our G5 Mac to OS X 10.4.1 with the latest patches, and intended to leave OS X 10.3.9 installed on a much-slower iMac that also belongs to our team. But I realized we still needed an environment on which to test the latest builds of Safari and the operating system as we get them from our Apple Developer Connection subscription, which works much like the MSDN subscription does.

The best solution, given that we use the Mac relatively little, would be to put all three builds on the same machine. I’d never set up multiple partitions on a Mac before, and was curious about dual-booting two flavors of OS X. It turned out to be surprisingly easy.

I knew that repartitioning the drive would wipe out all the data. The only items of importance to us on the machine were a few bash scripts Doug “JavaDoug” Ross had written for a massive properties namespace protection/conversion project we’d done. I moved those off to my own machine via FTP.

I popped in the OS X 10.4 DVD (yes, DVD), and chose Restart from the Apple Menu. Holding down “C” allowed me to boot from the DVD, which automatically launched the installer. From the installer menu, I could choose to run the Disk Utility, which is pretty much like fdisk combined with chkdsk, but with a prettier interface.

I realized I should actually create three partitions. The first would be our “main” test setup, which is currently OS X 10.4.1 (and climbing). The second partition would hold the last release of OS X 10.3.9, which is the last version of OS X we support with the release of Kronos Workforce Central 5.1 product suite. The third partitions would be an OS X 10.4.x sandbox, where we can install the latest released-to-developers code without risk to our test machine.

I got OS X 10.4.0 installed, and ran two levels of restart-required patches to bring it up to 10.4.1 with the latest security updates. I verified that everything, including VNC, was running correctly at startup. (Do you think I want to spend my days running back and forth to our hardware lab? Yes, there is a certain Geeky thrill to being in a room with raised flooring and immersed in the overpowering sound of the blowers, but I happen to like my cube–which some have described as a “playpen.”) The first part of the project took less than half an hour. I was only stumped once.

Next came the OS X 10.3.9 installation. The latest disk I had readily available was OS X 10.3.5, but it’s a simple process to patch it to the later version. This time I had to hold Option down at startup, to give me the choice of booting from the install CD or from the OS X 10.4.1 partition.

Picking the installation volume (partition) and getting OS X 10.3.9 running was easy. This version ships on CD instead of DVD, and it took surprisingly longer to set up–over an hour, I would estimate. It’s in the final stage of installing now; I’ve just installed the first 11 items that require a restart, and then the Software Update applet found 7 more items. One interesting bit of trivia: Apple was pitching an Earthlink Internet connection subscription as part of the OS X 10.3.5.

<rant>

That reminds me. Why is it that Apple can do no wrong? It’s guilty of doing things that would land Microsoft in court, but no one seems to care. For example:

  • Apple installs only QuickTime for media playing, and it’s not an optional install, even when choosing the custom installation option. I guess the ability to install a different media player is good enough for Apple in the EU, but not for Microsoft.
  • What’s with the hard sell for Earthlink (then later a pitch for a .Mac account at $100/year)?
  • On a Windows system, why does iTunes install and run (without asking me) both the iPod service and the QuickTime system tray lurker? They are both needless consumers of my computer’s resources, and iTunes ought to even ask if I even own an iPod. Every time I update iTunes, and hence QuickTime, QuickTime can’t remember my preferences about this from the last install!
  • What’s up with the only CD/DVD eject button being on the keyboard? What if I don’t use a Mac keyboard? What if I want to install a second CD/DVD drive internally? There’s no place to put it without taking a hack saw to the beautifully-finished front panel.
  • I know I have a choice since the devices are USB-based, but a one-button mouse is just about as useless as possible. Not even a mousewheel is standard. Remember when Apple had sensible designs? Tell me why control-clicking, which requires two hands, is more intuitive than right-clicking, which requires only one. And, of course, playing Find the Scrollbar is such fun, I can’t imagine why anyone would ever miss their mousewheel!
  • Microsoft wrote a Remote Desktop client for the Mac, which allows Remote Desktop to be used on a Mac to connect to a PC. Guess what platform Apple never bothered to write a remote desktop client for? And guess which company charges a small fortune to even get it’s Remote Desktop application? It’s a good thing there’s OSXVNC and Chicken of the VNC on SourceForge!

</rant>

You might be tempted to think I don’t like OS X or Apple. You’d be wrong. I actually love the Apple, but its defenders seem to be unable to look at it objectively.

My one other gripe is that OS X can be extremely powerful, but that power (think one-button mouse here) is insulated from the users. Mac users fall into two categories: “I can only do e-mail,” and “I’m a ‘Nix propeller-head who thinks any GUI is for the weak.” Like it or not, Windows provides an easy learning path to becoming a power user, with the most advanced features lying under the surface, ready to be explored via right-clicking and choosing “Properties.” Just like Mac users, Windows users can ignore the power, but it’s there when you want it.

On the other hand, most Apple users don’t fear an operating system upgrade. Most applications work fine on the new O/S or patch, and even reinstalling the O/S (if one isn’t repartitioning a drive) can be done without losing existing user accounts or application data. There is much Microsoft could learn from Apple, including the possibility of ditching backward compatibility for something lean-and-mean while providing a good emulator.

Anyway, the third operating system install is in progress (OS X 10.4.1, ready for the latest developer code). It’s been 9 minutes, and the installer predictions about 7 minutes to go. I’ll have to finish configuring it in the morning, because I need to head home, but I can’t believe how easy and quick the installation is.

Life with an Anxiety Disorder

This is the post that I have put off writing for years, for one reason or another.

Let me begin by a disclaimer. An anxiety disorder does not mean that a person worries excessively about things, or, more specifically, the anxiety that an anxiety disorder causes is not the same as “real” worry.

Let me explain. When we moved a year and a half ago, we had a surprising amount of trouble with selling our house. We had buyers back out, we had a buyer who had no job, we lost bids on houses we were attempting to buy. That produced some “real” worry on my part.

For example, during the sale of the house, purchase of the new one, and the move, I must confess, there was a certain amount of real worry. There were dozens of details that had to work out perfectly. Nichelle had gotten sick in the last week before the move, and the packing was behind schedule, even though we’d been working on it for a year. After we moved, my anxiety disorder kicked into a higher gear for about three weeks, when there was no reason for “real” worry at all. Anxiety-disorder-caused worry simply does not feel the same.

Scripturally speaking, we are not to be worriers. Everything is in God’s hands, and part of the Christian life is to trust Him. It doesn’t mean nothing bad will ever happen to us, but that God gives us grace to deal with what comes, and we can depend on Him to provide that.

History of My Anxiety

In October of 1995, I awoke one morning in a state of what I can only describe as abject terror. I had never experienced anything like this before. Even worse, unlike some people who have panic attacks, this anxiety never went away. It was with me all day, every day, for every waking moment.

I could not figure out what was wrong. Despite knowing that many such things are caused by chemical imbalances within the brain, my self-diagnostic software was offline. I concluded that this must be some sort of spiritual attack.

As I look back now, I can see that I had fairly long periods of heightened anxiety about certain situations throughout my youth, probably starting at age 8 or 9; I will discuss that later.

I was in agony. I was able to work, operating WordSmith Digital Document Services full-time, although it was very difficult to concentrate. When I got home, I was exausted. I couldn’t eat much. I spent long hours on the phone, talking with my sisters Cindy and Fran. Of course, I also spent a lot of time talking to my wife, Nichelle. Fran fed me Scripture and we prayed often. Nothing seemed to work. Talking about how I felt and praying with my family helped sometimes, but nothing took away the almost always overwhelming, constant feeling of fear.

I remember a couple of things very clearly. I remember looking at Isaac, who was six months old at the time, and thinking, “I should be enjoying this time with my son, but I can’t.” I also remember once or twice, while transitioning into waking, the anxiety would not be present for just a second or two, and then it would come crashing down on me. Feeling normal for such a fleeting moment made everything worse.

Because I was not eating normally (I didn’t have food anxieties, but had little interest in food), I lost weight. It was ironic when people would comment on how much better I looked. It wasn’t worth the price.

Occasionally, I’d get bad advice from the uninformed. My friend Mark and I boiled this down to a simple message, “You don’t have enough faith.” (We continue to tease each other in that fashioin to this day.) Many people simply don’t view the mental health realm as being biologically based. Few people would say to someone with a broken arm or influenza, “Well, just keep praying.” Praying should definitely be part of any treatment, but broken bones need to be set, and the flu is a virus the body must fight off. I am not at all saying that prayer doesn’t work, but the fact is that, although He does miraculously heal people, God doesn’t want everyone healthy; there are lessons to be learned in our infirmities, and His plan for our life may involve suffering.

After nearly six months of this, my family’s practicality sunk in, and I went to see a doctor. I didn’t really trust the fields of psychology or psychiatry (although a psychopharmacologist would, in retrospect, have done me a world of good), but I agreed to go to an internal medicine specialist, Dr. Richard Lubens, who I knew had an excellent reputation for listening to his patients.

He said, “Ah, it sounds like you have a generalized anxiety disorder. We don’t know what causes them, but there are some treatments that work very well.” He chose an older medication, partly because of its well-established history, and probably partly because I was uninsured at the time and it was inexpensive, unlike many of the newer medications.

He put me on a small dosage of amitriptylene, which is an older, tricyclic medication. Within a week I was feeling vastly improved. A week later, as a follow-up, he increased the dosage slightly.

I was normal again. Even better than normal. For the first time in my life, the things which had caused my occasional anxiety as a child stopped bothering me. I had my life back. What a blessing!

But the story does not end there.

Note: This post will be expanded over the next few days, or perhaps longer.

Topics to come:

  • Anxiety “triggers”
  • My anxiety versus panic attacks
  • Reflections on anxiety/panic during childhood
  • Current status