Life: A Quick Update

  • Nichelle’s health has been amazing. Actually, Nichelle looks amazing. She is doing Tae-Bo and weight training almost every day. She is absolutely transformed, to the point where that picture of Storm I posted for her birthday is truly not very different than reality. This is a far cry from the woman who two years ago sometimes had trouble holding a fork and knife at dinner. This is by far our biggest blessing.
  • Since Nichelle can now kill me with her pinkie, I started on the weights with her and our friend Phil about a month ago, and get in several days a week of Tae-Bo or cardio stuff as well. It’s already made a big difference, although Nichelle puts me to shame. Phil is cracking the whip on the weights and controlling our diet as well. Last night we got to eat a single piece of cheese for the first time in about 3 weeks. My doctor should be very pleased with these lifestyle changes. I will say having Nichelle working on the same things has made it immensely easier. What would I do without her?
  • As far as we can tell, David made highest honors again. Although Isaac needs to apply a slight amount of effort in math and history for the first time in his life, he did very well also. I love Isaac’s wit, and David amazes me with his insight, especially because he’s only 8.
  • Isaac bought a ball python about two months ago, which he named Knotty. Ball pythons are really cool, although we’ve learned that they really do have poor eyesight, and have become familiar with their striking distance …
  • Command and Conquer 3 and Jaws Unleashed have overtaken us for gaming, even to the point of neglecting World of WarCraft and our beloved Wii. C&C 3 is every bit the game C&C/Red Alert lovers have longed for, providing that magical balance of interesting units and fast-paced strategy for which Westwoood Studios was famous. In Jaws Unleashed, one controls Jaws himself, attacking swimmers, dolphins, boats, and other sharks and sea life. Isaac and David love it to the point of addiction, although it hasn’t received very good ratings from adult gamers.
  • We officially resigned from our old church a week ago—a decision which was clearly God-directed—although we have not yet joined a new one. We believe we will end up at Heritage Baptist in Hooksett, which we attend most, although we are checking out the Wednesday night program tonight at MVBC—Heritage doesn’t have anything yet for the kids on Wednesdays.
  • Nichelle will compete in the National Chicken Cook Off on May 3–4, in Birmingham, Alabana. I get to go with her. She is up against some tough competition, but the first prize is $100,000. That wouldn’t be too shabby.
  • John seems to be doing well for the first time since he left last June. We’ll see how things work out—he hasn’t had a very good track record—but he’s working again for the first time in months, and seems to be much more rational than previously.
  • We’re also planning a trip to Florida to attend my Mom’s wedding in June. Did I mention my Mom is 80 years old? I have a great picture with her and her fiancé George, which I’ll post shortly. The whole family is very excited.
  • NaNi is still the world’s cutest and smartest three-year-old. I had always wanted to have a daughter, but she is more awesome than I would have imagined. She has a delightful sense of humor, too. Last Saturday she woke me up by hitting me repeatedly with a chain saw, chanting, “Dad! Banana bread!” She’s also informed me, “You don’t get any hugs: Hugs are for Mommy. You get knuckle sandwiches,” and I assure you she means it. She can also locate Alabama on a map. Every time she says grace, she includes, “Thank you that Mommy is feeling better.”
  • Work has been excellent. We are winding down, mostly fixing small bugs, in preparation for the release of version 6.0 of our product. I’ve been working on the user interface revamp, which has been a year in the making, and is absolutely amazing. For the first time in years, our software will look as good as it runs. Navigation and other user operations have been dramatically improved, and everything is consistent end-to-end.
  • We finally got caught up with “Lost.” Now it’s agony to wait a week between episodes! We also are backwatching “Gray’s Anatomy” and “Smallville.”
  • Last Friday, NaNi, Isaac, David, and the Dunn children were sitting in the bleachers at a basketball game, and were all singing “Chiron Beta Prime.” I was so proud of those little geeklings.
  • Keith Lancaster’s acapella CD “Glorious God” is amazing. Thanks to Bernard Farrell for recommending this CD, as well as its predecessor, “Awesome God: An a Cappella Worship Series.” Nothing warms my heart like hearing NaNi and the boys singing “Our God is an Awesome God” around the house, and we love to listen to these while traveling.
  • After reading Michael Crichton’s Next, I’ve added about 9 books on genetics to my list of books to read near immediately. (I may never finish Mao’s China and After or The 9/11 Commission Report, but I’ll keep plugging at them.) My goal is to be able to talk the language of genetics fluently with a PhD friend of ours. I’ve already got my DNA screen saver!
  • We’re getting new carpet in the basement, courtesy of a water heater failure about two months ago. ServiceMaster came out at the request of the insurance company, and saved us from serious long-term problems from water damage. Too bad our insurance doesn’t cover the water heater itself (due to its age), but as disasters go, this one wasn’t too bad.
  • Sorry for not posting more of late. I was very busy getting my accounting caught up so we could file our taxes, and I’m working on a very long post that analyzes (refutes) a popular KJV-only tract.

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.