Monday, January 29, 2007

A Ghost in Fremont

What follows is an essay that I wrote in the Summer of 2004 after listening to a talk by Andrei Codrescu. For those of you who didn't know: there IS a statue of Lenin in Fremont, Seattle, United States of North America, Planet Earth.


Last night J. and I went to the Rialto Theater in Tacoma to listen to The Writer’s ruminations on Woolworth, on escaping from the Stalinist East and the aroma of strudel in old Hermannstadt.

I don’t know where he pulled this strudel business from; the city did definitely smell of many things, but apple pie was not one of them, as I recall from back when I was stationed there (drafted by a communist army at age eighteen); yet I share some of his Transylvanian nostalgia. Only I reminisce drinking beer in smoky cellars, places such as “La Bolta Veche”, with the entrance mischievously winking at the old cathedral, and the cobble stone alley that lead to it; the alley narrowed as it spiraled downhill, descending into the outer circles of the Inferno. The cellar with its many corridors could have as well been a real place of torture, back in medieval times; I always wondered if there was some sort of vertical secret passage, a shaft to connect it with the cathedral above. Sinners would have been thrown down through a secret trap in the confessional’s floor.

Later, The Writer signed for me a copy of his book and I was standing there, shaking and feeling dumb, so much intimidated by the proximity of one of my favorite Romanians; he is also Jewish and therefore related to God: one more reason for me to be shy. He asked what I was doing in the States and I could only utter: “I hang out in Redmond, like many others do these days” – since I assumed that everyone knows that Microsoft’s headquarters are in Redmond, and that makes it the Capital of the Software industry, which made me a programmer.

The Writer talked about Woolworth and I was thinking about The Waffle House (a favorite hangout back in my Atlanta days); one generation apart, we had different hangouts, different experiences. Yet somehow I felt as the only person in the theater that could see The Ghosts. I mean, how could one expect those nice Tacoma bourgeois ladies and gents to grasp the paranoia I breathed while growing up? Of course, as fine intellectuals with a cult for Freedom, they read Soljenitsin and Codrescu.

Yet one might think that all the descriptions of the life behind the Iron Curtain are but the fabrication of a sick mind's exercises in exploring the absurd, rhinoceroses metamorphosed into giant roaches. The reality of suburbia, the hard evidence of the two-car garage, and the proof of the barbecue in the backyard all strongly dismiss such aberrations. “Yeah, they say life in the Eastern Block was tough, but that was just an excuse for drinking vodka and seeking asylum in the West”. The Ghosts of the past, I have to live with; I gave up explaining how the communists used to shut down the power in winter, several hours a day, how the children and the elderly had to wait in line for bread, while the working adults went to jobs where they had to listen to propaganda, and spy on each other, to make sure that no one else spies on them on behalf of the government. There was a secret police that watched over the other secret police, making sure that they are loyal to the regime and promptly sent to jail anyone who seemed to display any sign of discontent with the government. The “suspects” used to disappear as if through a secret trap in the floor.


When I moved to Seattle a few years ago, I almost bumped into one of the Ghosts while walking on the street in plain daylight. I was strolling through Fremont on a sunny Saturday afternoon. It was spring and people were out everywhere, enjoying the first day with blue sky in six months or so. The colorful mass of yuppies wearing shorts and flip-flops flowed slowly by the souvenir and coffee shops, by the Greek restaurant in the corner, some even ventured downstairs in the old Dusty Strings music store.

I was going with the flow, absent-minded, smiling at the sun, when I saw the statue: a two stories high bronze monument of no one else but the father of communism, the root of all evils, the Mummy. I froze; time bent for a while, slowed down, then came to a full stop: the colors of the crowd, and its noise blurred away. Hypnotized, I couldn’t take my eyes off Lenin, afraid that he might actually move. I quickly examined the possibility that I had come upon a breach in time, where the Universe, in some Carl Sagan-esque sort of stunt bent over backwards, stuck its head up the Milky Way’s butt, and opened a Stargate passage to the Soviets world of the Fifties. I kept looking at Vladimir Ilich, terrified at the thought that some tanks and soldiers with 7.62-mills may rush through the secret opening, through some sort of reversed shaft, ascending from the Inferno back into the gothic cathedral of our daily lives.

Then, my heart, and time with it, slowly resumed back to their normal beat, and I glanced at the people around: do they see what I see? Are they running in terror? The street was filled with chatter: passers by seemed to ignore the statue of Lenin; the taco place was full of customers. Was I the only one that could see The Ghost (as I would, few years later, in the Tacoma Rialto Theater)?

And then, paying closer attention to the crowd, I realized that most of the kids out there in the street were generations and thousands of miles apart from the Iron Curtain.

With the long coat, the visor cap, and the daring beard, the statue could as well pay tribute to a local fishing boat captain who sunk up by Alaska.

“Vladimir Ilich” – in Russian prose all characters are addressed by their both names, which in a funny way ties Georgia to the other Georgia, “Vladimir Ilich”, I chuckled, “none of these good folks strolling here know who you are. Maybe not even the fool who rescued your statue from the ashes of the dieing U.S.S.R. knew very well who you were.

“You see, my dear Vladimir Ilich, this is your epitaph: small time fishing boat Captain Anonymous, sunk into The Oblivion Sea, west of Bering. And that is History’s revenge; it’s blessing, it’s curse: a very short memory”.

Saturday, January 27, 2007

I Do Not Like Hungarian...

... oh... not because I am Romanian and we have a millenium old feud over Transylvania with these folks. No. The beauty of their women (which have a soft spot for Romanian men) totally makes up for it.

What I was going to say is that I do not like the Hungarian Notation which is complete crap, and I am puzzled that the guy who invented it receives so much praise, to date.

I read in the New York Times today that he is going to visit the Space Station in a Soyuz rocket. Ok, Mr Wile E. Coyote, bon voyage and good riddance. Too bad the control systems for that rocket don't run on Microsoft software.

Thursday, January 25, 2007

The Steve Yegge Factor

Who is Steve Yegge? Oh, just some guy I did not meet while I was working for Amazon, either because my short (two and a half years, from April 2001 to November 03) tenure has not overlapped with his, or maybe just because I do not seek the benevolent companionship of self-appointed software rock stars. Who knows?

While I agree with some of his views on the Agile Process, I am not sure that I fancy his style, for several reasons:

I know from experience that blogging and participating in forums while enjoying a glass of wine inevitably leads to my offending someone needlessly (I have done it more times than I would like to admit, and trust me: I love my reds).

Arguing over development processes (and programming languages, and OS-es) gets people so worked up to the point it becomes a huge time sink, a distraction from what I like doing best, which is writing code. Sometimes I would rather not say what I truly think.

Agile is a necessary evil because it keeps management happy and deluded, thinking they have a grip over the development process (and thus less dangerous).

And finally, why tell people the truth on Agile? Society needs dumb people. If everybody smartens up overnight, then who's gonna pick the garbage? Not Pinocchio, I hear he wants to be a real boy now.

Tuesday, January 23, 2007

So Long, Floyd...

The other night we lost Floyd Standifer. What can I say more? I will miss (like many others) the weekly performances at The New Orleans... but I am sure there must be a great gig in Heavens coming up Wednesday night. Play on, sir.

Sunday, January 21, 2007

I Wanna Kick Some Ass. But Whose?

So I have been having more "fun", trying to get Linux to work on my new Pavilion box.

Redhat Enterprise Linux AS 64bit gives this error when booting on the HP Pavilion a1600n:

...MP-BIOS bug: 8254 timer not connected to IO-APIC

I got past that by booting with noapic, but I cannot partition the disc, since it is not seen by the kernel.

On the other hand, Suse 9.3 boots but does not recognize the DVD drive after that.

As of now the bets are on Suse 10.2... Fingers crossed... It is installing...

Seems to me that Linux distros are quite challenged in the 64-bit space. It could've been worse though, better be bitter for spending $500 on a piece of hardware that Linux does not support well rather than spending $3000... But the worst thing is that I want to frigging yell at someone, call them names, and... I do not know who the culprit is? HP? The given distros that I am trying to install?

Here's an interesting business idea: open a call center in Romania, hire some cave men to answer the phone, but not give any customer support, just listen while they are being yelled at and insulted.

Last edit: the network card on the Pavilion a1600n died last night, a mere week in service. Conclusion: I am taking it back to FRYS and have them make lemonade.
AMD64 Dual Core, HP, Linux and VMWARE

How nice (if at all) to the above play with each other?

I work two jobs. I program using C++ on Windows as my day job, and I am working on my own Linux-based startup at night (doubles as my hobby, too). In both worlds, 64-bit computing is the growing trend. But while at work the Windows 2003 Server 64-bit edition runs happily on the dependable Opteron-based workstation from HP, my private experience is not as successful.

I have a Pavilion a810n that I bought in January of 2005 (added 512 MRam since) and it runs Fedora Core 5, x86_64 edition. So far, so good. Stable as a rock. On top of it, I run VMWare so that I can simulate 32-bit environments running Fedora 4, 5, and 6, respectively. All stable and fun.

But I cannot run a 64-bit machine in the VMWare, because the CPU is not "version D, or later"... whatever the heck that means, it is not related to the D Programming Language (which I hope to fully support in Zero, one day).


[cristiv@newfoundland ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 12
model name : AMD Athlon(tm) 64 Processor 3300+
stepping : 0
cpu MHz : 2400.000
cache size : 256 KB
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow up
bogomips : 4823.30
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp


So I hit the coffers and bought a dual core laptop, to build my product on it (I just want to support as many distros as possible). Mandriva 2007 is the only distro that runs without hanging randomly on my HP dv6000z lappy. So far, point for French Engineering, and bad bad karma for Fedora and Ubuntu (which utterly suck on said laptop, both hanging tight as a drum).

VMWare seems to emulate 32-bit architectures fine on top of Mandriva on the HP dv6000z laptop, but 64-bit architectures hang badly during install (tried tweaking the Options, did not work). I had consistently bad results while trying several versions of Open SUSE and one RHEL 4 AS 64-bit.

Because I am trying really hard to get out a build of the Zero Debugger for the x86_64 versions of Suse, I bit the bullet one more time, went to FRYS this Sunday and got a HP Pavilion a1600n... Between waiting for AMD's Barcelona chip to come out and getting an unexpensive machine that will become obsolete the next month, I chose the later.

While I am ranting here, the jury is still out, running memory tests:) I am anxious to see how well 64-bit Suse installs natively on this machine.

Thursday, January 11, 2007

Tell HP Your Opinion

Over the last two years or so, I have switched from using Dell computers to HP, mainly because I was interested in 64-bit computing, and for a while Dell did not sell any computers with AMD64 chips. They seem to have shifted away from the Intel-only policy but as far as I am concerned, it is too late.

Besides, I like the sturdiness of HP machines better (I own an Pavilion desktop and a DV6000z laptop). Great hardware.

They also work great with Linux, which brings me to the point of this post. We do not use Windows at home, yet anytime I buy a new machine, I have to pay for Winblows. There's no way to find a bare-bones HP machine. I sent them an email to express my frustration, and I invite you to do the same.

They are already being sued in Europe (http://www.itworld.com/Comp/1214/061215frenchhp/) and I hope it sends them the right signal.

Wednesday, January 10, 2007

Counting Bits

This code is a solution to the problem of counting the "1" bits in a variable of integral type. It uses recursive templates to generate a table of precalculated values for 0 through 255, then breaks the input value into bytes that are looked up into the table:

#include <cassert>
#include <cstdlib>

// Recursive template, computes the number of bits set
// in an integer (e.q. Bits<127>::count == 7)
template<int N>
struct Bits
{
static const unsigned count = (N & 1) + Bits<(N >> 1)>::count;
};
template<> struct Bits<0>
{
static const unsigned count = 0;
};
// This template recursively generates a constructor
// that will populate a table of 256 entries
template<int N>
struct Table : public Table<N - 1>
{
Table<N>()
{
this->bitcount_[N - 1] = Bits<N - 1>::count;
}
};
template<> struct Table<0>
{
unsigned bitcount_[256];
};

static const size_t BYTE_SIZE = 8;
static Table<256> table;

template<typename T>
unsigned count_bits(T value)
{
size_t result = 0;
for (size_t i = 0;
value && (i != sizeof(T));
++i, value >>= BYTE_SIZE)
{
result += table.bitcount_[value & 0xff];
}
return result;
}
unsigned count_bits(unsigned char value)
{
return table.bitcount_[value];
}
unsigned count_bits(char value)
{
return count_bits(static_cast<unsigned char>(value));
}

// test
int main()
{
assert(Bits<127>::count == 7);
assert(count_bits(0) == 0);
assert(count_bits(1) == 1);
assert(count_bits(-1) == 32);
assert(count_bits((char)-1) == 8);
assert(count_bits(3) == 2);
assert(count_bits(127) == 7);
assert(count_bits(1023) == 10);
assert(count_bits(1025) == 2);
return 0;
}


Monday, January 08, 2007

Zero Debugger News


The latest version of the Zero Debugger includes fixes for a couple of bugs reported by Christoph Borgolte (thank you, sir) and optimizations of the memory usage in symbol tables.

I have also played some more with the graphical installer script for Redhat 9 / RHEL (see installer.py in http://zero-bugs.com/8001/builds/zero-i686.010807.tgz).

Santa brought a license of the Intel Compiler 9.1, so I ran the test suite with it. The results are very satisfactory: Zero Debugger works great on binaries compiled with icc! The only (minor) quirk I found so far is with functions returning long double on the x86_64 platform, which require a special compiler command line flag to work correctly.