Saturday, February 27, 2010

Slain by XP Guardian 2010

Somehow I got infected by XP Guardian 2010.

Ugh.

I'm not sure what it was, exactly, but it slipped onto my computer when I wasn't looking and lodged itself into my Windows Security Center.

Rather disturbingly, the infection seemed to occur within hours of upgrading that machine to Firefox 3.6. Firefox has been incredibly reliable for me over the past few years, so this must be a red herring. Still, it's the only significant change I can recall making to the machine in the last period of time leading up to the infection.

I fought with it for an hour or so, then bit the bullet and used the "Access IBM" button on the Thinkpad to completely restore the computer to the factory state.

Then I spent about 4 more hours running Windows Update, and re-installing the core applications that I really care about.

It was time, anyway; I hadn't rebuilt this computer in about 4 years.

I love this Thinkpad T43p; it's been one of the best computers I've ever used.

Now I'm back, running XP Service Pack 3, with Thunderbird and Google Chrome.

Wednesday, February 24, 2010

FAST 2010

The Usenix File and Storage Technologies conference is underway this week.

The complete technical proceedings are online! Hurray for Usenix for publishing this information, so that those of us who can't attend conferences like these can still learn from them.

The general themes of the conference appear to be:

  • Performance (parallelism, flash memory, filesystem design)

  • Efficiency, energy usage, and green computing

  • Cloud computing: provisioning, management, de-duplication, etc.

  • Error handling, data reorganization (d-dup also fits in here) and recovery



Now I just have to find some time to dig into the proceedings...

A homage to constrained writing

This is the geekiest paean you will read today, this week, this month, or probably this year.

Still, I enjoyed the short essay, and even more enjoyed following the links to all the D.R.H. material. Perhaps it's time to go try Metamagical Themas, for I have such good memories of GEB:EGB.

Most interesting tidbit I discovered, having a son who presently resides in Chico, was this:

for many vacations, a handful of my pals and I would go up with Laura and my folks to our family’s ranch in Flournoy, in north California, not far from Corning, in softly rolling hills with lots of oaks. Laura had fun riding Chico, my folks had fun rounding up and branding cows and bulls, and all of us had fun chatting, hiking, skipping rocks, playing darts and “foot carroms”, arranging and lighting kindling and logs, fixing roofs, tossing hay to always-hungry cows, and so on.

I know the feeling; for many years, I would bundle up my wife and children and drag them down to Ridgecrest, to our family's not-quite-a-ranch, for their annual exposure to mountains and rocks and wind and sand and a view that went on and on for seventy miles from the front doorstep.

I haven't yet made it to Flournoy, but since I've mostly exhausted the various short day trips near Chico, it's good to now have another one to put on the list.

Monday, February 22, 2010

TCP Offload Engines

I happened across an interesting report of a problem that was ultimately determined to be due to interactions with a TCP Offload Engine.

The problem report itself was fascinating, partly because I occasionally see very odd network behaviors that I don't understand (unfortunately I haven't had as much luck making them be reproducible and resolving them), and partly because I had never heard of TCP Offload Engines before.

So I did a bit of searching and found some quite interesting information. There are definitely a variety of sources, including some very respectable ones, which describe the potential of TCP Offload in glowing terms.

However, there are also some very skeptical viewpoints, such as this article describing in detail why most Linux systems don't support TOE. I thought that the most telling point in this document was the observation-from-history about the eternal tradeoff between custom hardware solutions and general software solutions:

Each TOE NIC has a limited lifetime of usefulness, because system hardware rapidly catches up to TOE performance levels, and eventually exceeds TOE performance levels. We saw this with 10mbit TOE, 100mbit TOE, gigabit TOE, and soon with 10gig TOE.


Also, the essay that I linked to at the start of this post, which originally got me interested in TOE, refers to this support document, which mentions that:

  • TCP/IP Offload has a problem with the Window Scaling feature. This problem typically occurs when you communicate with a Windows Vista-based computer. Windows Vista uses the Window Scaling feature.

  • Some TCP/IP Offload-enabled network adapters do not send TCP keep-alive messages. However, Exchange servers use TCP keep-alive messages to clean up inactive client sessions.

  • The TCP/IP Offload-enabled network adapter may consume lots of nonpaged pool memory. This may cause other problems in the operating system.

  • In some cases, the TCP/IP Offload-enabled network adapter may request large blocks of contiguous memory. This makes the computer stop responding when it tries to free the memory.



It seems like this is a fairly controversial bit of technology, with rather wide-ranging opinions on whether the technology is a benefit or a hindrance. Modern systems continue to become more complex, and evaluating their success or failure becomes more complex as well.

Many years ago, when I worked in the database world, we had a variety of partners who were trying to implement various bits of the DBMS technology in hardware, in the hopes that their hardware-augmented systems would outperform the pure software solutions. In the DBMS world, it seems, we learned this lesson a long time ago:

There was overwhelming sentiment that research on hardware data base machines was unlikely to produce significant results. Some people put it more strongly and said they did not want to read any more papers on hardware filtering or hardware sorting. The basic point they made was that general purpose CPUs are falling in price so fast that one should do DBMS functions in software on a general purpose machine rather than on custom designed hardware. Put differently, nobody was optimistic that custom hardware could compete with general purpose CPUs any time in the near future.


It will be interesting, now that I'm aware of it, to keep an eye on this TOE technology, and see if it suffers the same fate that the DBMS custom hardware technology did, 25 years ago.

Sunday, February 21, 2010

Virtual Execution Environments 2010

Over the past few years, I've been fascinated to watch the convergence of three major areas of modern computing research:


  • Language-interpreting virtual machines, such as the Java Virtual Machine, the Flash engine, and the .NET runtime

  • Web browser environments, with their so-called Dynamic HTML support: JavaScript, HTML 5, CSS

  • Complete system virtualization engines, such as VMWare, Xen, and VirtualBox



This year's VEE 2010 is a postcard from the bleeding edge of the convergence. The preliminary program is now online.

Simply browsing through the conference materials sets my mind aflame:

  • Development and debugging for virtual environments, such as record/replay debugging and omniscience

  • An Asymmetry-Aware Scheduler for Hypervisors

  • Holistic Memory Efficiency and Performance

  • Energy-Efficient Storage

  • Capability Wrangling Made Easy

  • A Substrate for Managed Runtime Environments



At my new day job, I'm told, each developer gets a virtual machine of his/her own for development tasks; an OVM I'm sure. It sounds great to me: who needs a physical computer when I can have a virtual one?

While virtualization is generally sold as an efficiency proposition, with its primary appeal being to bean counters, it's actually a wonderful thing for software types like me. We get increased power, increased flexibility, higher availability. I no longer have to have direct physical access to 4-5 machines of my own in order to ensure a broad range of hardware/software configurations; I no longer have to transport machines from place to place to fit my mobile work environment; I no longer have to settle on a software/hardware mix and hold it static for years. Instead, I can adjust my environment to the needs of my current project(s) and evolve them gracefully as my work needs change.

My first usage of a virtual machine was in 1985, at Computer Corporation of America in Boston, makers of the Model 204 DBMS for IBM mainframes. IBM's Virtual Machine operating system for the mainframe was, oh, 25 years ahead of its time; it's good to see the rest of the world understanding the power of this concept.

Thursday, February 18, 2010

A new progressive era is about to begin

As my eye doctor has been predicting for twenty years, now that I'm approaching age 50, I'm having increasing trouble with my near-field vision. I can still see just fine at medium distances, and my mild nearsightedness at distance hasn't changed much since college, but I can longer convince my eyes to focus on objects closer than about 18 inches away.

So, since it happened that I had some end-of-year FSA account balance left, I went and ordered a pair of new progressive lens glasses, which should be here by early March. The doctor says it may take me a few days to get accustomed to the progressive lenses, but he's hopeful I'll be much happier with them than with my current setup.

While I was there, I also decided to get a pair of prescription sports goggles (Liberty Morpheus 2's, I think), to see if they can make any improvement in my soccer play.

Jason, I hope you won't bust a gasket if both Jeff and I are out on the field wearing our goggles!

Wednesday, February 17, 2010

Column aliasing in SQL

Consider the following example:


CREATE TABLE t (c1 int);

SELECT * FROM t AS a(a1);

SELECT c1 AS a1 FROM t AS a;


In both cases, the result of the SELECT is a table named "A" with a column named "A1".

However, the syntax for specifying the column alias differs in the two cases.

And, some other similar syntax does not seem to be legal (at least in Derby):


SELECT c1 FROM t AS a(a1);

ERROR 42X04: Column 'C1' is either not in any table in
the FROM list or appears within a join specification and
is outside the scope of the join specification or appears
in a HAVING clause and is not in the GROUP BY list. If
this is a CREATE or ALTER TABLE statement then 'C1'
is not a column in the target table.

SELECT c1 AS a1 FROM t AS a(a2);

ERROR 42X04: Column 'C1' is either not in any table in
the FROM list or appears within a join specification and
is outside the scope of the join specification or appears
in a HAVING clause and is not in the GROUP BY list. If
this is a CREATE or ALTER TABLE statement then 'C1'
is not a column in the target table.


I'm not really sure what's going on with this part of the SQL language.

Normally, I have always used the form

SELECT c1 AS a1 FROM t AS a;


I only learned about the FROM t AS a(a1) form fairly recently, and I'm still trying to understand what it means and how it is to be used:

  • Can I only use it with SELECT *

  • How do I know what order the columns are to be named in

  • Why would I choose to use this form as opposed to the individual column aliasing?



So much still left to learn about SQL...