Squee! My new laptop drive and enclosure have arrived!

OWC Mercury On-the-Go, fresh out of the box.

My poor Dell laptop has been surviving with less than 2 GB free out of its 40GB disk for months. I’ve tried to trim things down, deleting whatever I could and archiving the rest to DVDs. But, this nonsensical activity is nothing more than diminishing returns: the space will get used up again and the time, effort and aggravation of having to identify things to remove is so not worth it. So, for a mere $219, I’ll be adding an additional 100 GB capacity. What’s not to love?

In case you were wondering what that beautiful enclosure is in the picture, it’s an OWC Mercury On-the-Go (OWCMOTG800U2), $79.99. It’s a FireWire 800 and USB 2.0 enclosure for 2.5″ PATA HDDs. It’s a transparent plastic enclosure, for maximum geek value–yes, it’s sexy to show off what you’ve got inside the enclosure.

Two snags: my laptop’s crappy USB 1.1 isn’t studly enough to bus-power the drive and enclosure, so I need to now go and order the (not included!) OWC Mercury On-The-Go AC Power Adapter (OWCMOTGPWR), $9.95. Also, I need to get a FireWire 800 1394B 9-pin to FireWire 400 1394A 6-pin cable, too. So much for “immediate gratification” … grr!

Tags:
,
,
,
,

Pair Programming, or Two-Person (2P) Teams, is as old as 1975

Dave Rooney shared a link today to a July 1996 article in CrossTalk: The Journal of Defense Software Engineering by Dr. Randall W. Jensen, titled “Management Impact on Software Cost and Schedule.”

As a firm believer and occasional practitioner of Extreme Programming (or, “XP”), the article is naturally very interesting. One of the key practices of XP is called Pair Programming, where two people sit at one computer and work on producing the code in unison. It’s very challenging: most software engineers are poor communicators, have social anxiety issues, or otherwise find objection to having to actually work with someone else directly. I’ve found that the biggest objectors to it are those who have never even done it. It is naturally one of the biggest advantages of the core XP practices over all the other agile methodologies popular today. Therefore, it’s no surprise that it hasn’t been done before. What’s surprising is how much earlier than XP it was done: according to Dr. Jensen’s article, it was done in 1975 (!):

Two-Person Team. The two-person (2P) team implements the adage “Two heads are better than one.” When this concept was first implemented in 1975, there was great concern the productivity gain could never offset the additional resource expense. The two-person approach places two engineers or two programmers in the same location (office, cubicle, etc.) with one workstation and one problem to solve. The team is not allowed to divide the task but produces the design, code, and documentation as if the team was a single individual. The 1975 team’s project was a real-time, multitasking system executive of approximately 30,000 FORTRAN source lines. The development team had five 2P teams and a progressive Theory Y type project leader. The traditional development environment, outside the 2P team organization, was typical of most environments. The architecture design was completed in a war room environment. The project architecture divided the development into six independent tasks, with the two smallest tasks assigned to one team. The 2P teams returned to the war room environment during system integration. The team concept appears to have been violated when the project was divided among five independent teams working in their own small war rooms (two-person offices). There were two organizational issues working here:

  • The facilities people (known as the furniture police) were not convinced this idea would work.
  • The tasks were truly independent. Thus, the minimum team size of two programmers was adequate, and the project proved the significant benefits of teams as small as two people.

Final project results were astounding. Total productivity was 175 lines per person-month (lppm) compared to a documented average individual productivity of only 77 lppm prior to the project. This result is especially striking when we consider two persons produced each line of source code. The error rate through software-system integration was three orders of magnitude lower than the organization’s norm. Was the project a fluke? No. Why were the results so impressive? A brief list of observed phenomena includes focused energy, brainstorming, problem solving, continuous design and code walk-throughs, mentoring, and motivation.

It’s easy to come up with excuses why “this just won’t work” but the reality is, if you instead find equally creative ways to create an environment where your team can do Pair Programming, the measurable benefit will make you wonder why you hadn’t been doing this all along.

Tags:
,
,

Make WinXP’s NTP client poll more frequently

My laptop’s clock seems to get out of sync and fall behind quite often. I suspect it’s because the clock frequency keeps changing thanks to the power-saving SpeedStep stuff. However, it’s irritating that my clock is always wrong–especially when Windows XP has a built-in NTP client! Of course, the default is to poll once a week (!) … and the “Date and Time Properties” dialog doesn’t allow you to configure how often to poll.

Luckily, it is configurable through manual modification of a Windows registry value. It’s in the registry hive, here:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient

The value is SpecialPollInterval which is a DWORD number of seconds that is set to 604800 (one week) by default. I’ve ratcheted it down to 3600 (one hour) to minimize the drift of my clock but not putting undue stress on my local NTP server.

Once you’ve made the change, you’ll need to restart the Windows Time service in order for it to pick up the new interval. From a Command Prompt:

C:...> net stop "Windows Time"
The Windows Time service is stopping.
The Windows Time service was stopped successfully.

C:...> net start "Windows Time"
The Windows Time service is starting.
The Windows Time service was started successfully.

That’s it. You’ll want to click the “Update Now” button in the “Internet Time” tab under “Date and Time Properties” to force a NTP sync. and update the “Next synchronization:” date with your new poll interval.

I hope this tidbit is useful to anyone else looking to adjust the polling frequency of their Windows NTP client. I know this has certainly bothered me for a long time before I finally figured it out.

Update 2018-07-10: Some time between 2007 and 2018, Microsoft published and made publicly available documentation on the Windows Time Service, for anyone who’s looking for it.

Tags: , , ,

Nextumi’s Share2me, a site-independent “send to a friend” product

Share2me.com

What have I been working on all of January that I haven’t been able to talk about? I’ve been busy working on Nextumi‘s flagship product, Share2me, which they are unveiling at this year’s DEMO 2007.

I still can’t go into much detail about the product since the DEMO conference is still going on, but I can link to the press release. After February 1, at 3:00 PM US/Pacific time, which is when our demo is scheduled, I’ll hopefully get the go-ahead to talk more about the product (watch this space–I’ll update). In the meantime, I’ll link to the news around the intertubes covering it:

Tags:
,
,
,

The end of an era: goodbye, Network Solutions

Yesterday, I transferred all my domain names to GoDaddy.com from Network Solutions. It was actually quite sad … finally giving up my “ETS2” NIC handle. I still remember emailing “hostmaster@networksolutions.com” a plain-text form to update all my WHOIS information. Yes, I have a domain as old as 1994. I remember my first netblock, 198.6.113.0/24, a Class C from UUNET. Back in those days, the yearly domain name registry fee was $35, and Network Solutions had the monopoly on it.

Sure, their prices have come down a little since then, but in over 10 years now, I’ve given them close to $300 for that one domain alone. In comparison, my next 10 years with GoDaddy.com will only cost me close to $70. There’s very little value-add in the area of domain name registry itself, so price is certainly my major decision point. In that regard, GoDaddy.com wins–they have a smooth, usable web interface for managing domains. Their interface is pleasant to use for bulk management of domains, too. And, they’re cheap.

So, goodbye and farewell, Network Solutions. It’s a good, long, just barely 13 years, but it’s time to move on. Lets hope that GoDaddy.com is as maintenance-free and reliable for the next ten years as Network Solutions has been for me for the last ten years.

Tags:
,
,
,
,

Debugging Java with Eclipse 3.2

I realize the subject of debugging Java applications with Eclipse is nothing new:

What is new is that I’ll be giving a presentation on this subject at this month’s Northern NJ Java Meetup on Tuesday, January 16th, sometime after 7:00 PM. This month’s meetup will take place at the Robert Half Technologies office in the Mack-Cali office park at 61 South Paramus Road in Paramus, NJ.

The presentation is intended for folks who are already familiar with the basics of Java programming, but assumes no knowledge of Eclipse. In other words, I’d say this is a very introductory-level preso.

In addition, Steve Goguen will be doing a presentation on “Unobtrusive Javascript using jQuery” the same night. jQuery is a beautiful JavaScript library, originally written by John Resig, which makes writing client-side JavaScript for web applications downright enjoyable and easy. If you do any client-side JavaScript, especially DHTML and AJAX, if you haven’t looked at jQuery yet, you definitely should. Steve’s preso should serve as a gentle introduction to some of the basics behind jQuery.

If you are in the Northern NJ area and would like to attend, please feel free to stop by. As a courtesy, it would be nice if you could either RSVP for the meetup, or leave a comment below letting me know you plan to come and how many guests you may be bringing. This is because our gracious hosts–Robert Half Technologies–who donates the meeting space to us, also provides pizza and soda, so it’s nice to have an idea of how much food to order based on how many attendees there will be.

I’ll post the slides from my preso after I give it on Tuesday. Check this space for updates.

Update: Here are the slides —

Tags:
(),
,
,
,

Welcome to the latest incarnation of sweatshop labor

In the middle of an IM conversation with Reginald, I realized:

  • Develop a sub-$100 laptop.
  • Create a huge number of new web surfers with said laptop.
  • Serve them CPC and CPM ads.
  • Profit!

Suppose the laptop’s useful life span is 3 years. Is a pair of eyeballs (with respect to ad revenue) worth over $100 in that time? If so, this becomes an easily sustainable business, assuming web ad revenues continue to grow or at least stay at their current levels.

This is the latest incarnation of “sweatshop labor.” Exploitation 2.0.

Tags:
(),
,
,

There’s more to ORM than serializing data to a RDBMS

Reginald Braithwaite blogs that Relational Calculus is about Relations, not Rows, quoting from this entry at Enfranchised Mind:

To faithfully model SQL we must, on some level, faithfully model the relational calculus. And this is where I think the Object Oriented programmers go astray in trying to interface to SQL. In their hurry to make things into objects, they immediately (and without fail) declare the rows to be objects–and thus miss the fact that relational calculus and thus SQL is about relations, not rows.

I’ve often said that complex problems are just simple problems which are not well defined or correctly articulated. OO-heads rage against the ORM problem because they’re not solving the ORM problem, they’re solving something else. To solve the ORM problem, you have to understand that the basis of the problem is in adequately representing the fundamental operators of relational calculus–join, selection, projection–then combining them in ways that produce higher-order behaviors which implement the functionality required.

Simply serializing objects into a matrix representation is not “solving the ORM problem.” This is my biggest criticism of the ActiveRecord in Ruby on Rails: if your problem is so simple that pregenerated scaffolds and ActiveRecord is adequate, then your problem is so trivial it’s non-interesting. The challenge is for an OO language to facilitate representing the relations between objects, the semantic information about how one object’s data values can be derived using the three relational calculus operators from other data. At that point, why not simply learn and use SQL directly, rather than extending your favorite language with what is essentially a dialect of SQL?

Of course, when the majority of software developers are just tool users and not artisans who actually create things, it’s really a moot point. “Web 2.0” has brought us a lot of new applications, but they’re all fundamentally the same. Ruby on Rails and ActiveRecord offers a solution to the CRUD problem to the tool users, but that hasn’t been interesting for years now. What’s needed now is a way to provide the mass of tool users to create novel permutations of the tools they have, not just continue to replicate slightly varied instances of them.

Tags:
,
,
,
,
,

Darn, I missed ascending on Crimboween

New Events:

12/26/06 01:30:55 PM – Welcome back to the Kingdom of Loathing. Noob.

When I ascended on Halloween XI, I mistakenly thought I’d ascended on Crimboween (which was yesterday). I said then that I’d try to ascend on Crimboween, as well. Well, I was all set to beat the Naughty Sorceress and everything … then, real life obligations got in the way and I didn’t get a chance to do it until today! So, I missed my Crimboween ascension, but at least I got my Tropical Crimbo pressie and I ascended on Boxing Day.

Merry Crimboween to all you KoL’ers out there! May 2007 bring you plenty of meat and good RNG luck!

Why yes, I reply to 6 year old emails

---Mutt: ~/Mailbox [Msgs:5164 New:14 Old:81 ...

Yes, that’s the status line of my Mutt window telling me I’ve got 5,164 messages in my email inbox, of which 14 are new. I’ve got mail in there dating back to September, 2000. A lot of it is stuff I just never got around to filing away into subfolders, but there’s plenty of messages from old friends and acquaintances that I just never got around to replying to!

As part of my desire to clean up my intellectual messes with the quickly approaching 2007, I’m going to go through each and every email and decide whether to file it, delete it, or reply to it right then and there–even if it’s 6 years late. I just can’t let it go on any longer.

Tags:
,