After installation, Outlook greeted me with the following error:
Sorry!! It looks like another Outlook Plugin has installed an unofficial version of the Outlook libraries which breaks Lookout. Lookout will not be able to load. For more information, see this link: http://www.lookoutsoft.com/forums/topic.asp?topic_id=10
Unfortunately, the aforementioned link doesn’t offer many leads on why the problem occurs, nor how to work around it. I have a few COM add-ins loaded, including SpamBayes, some thingy MapPoint installed, and one I wrote myself in C# to redirect email to a web account. I was guessing my software was causing the problem.
I think the problem occurs because Lookout uses the primary interop assembly for Office XP, while the add-in I wrote uses the PIA for Office 2003. I opened my project in the IDE to see if I could get the two working together when all hell broke loose.
Each time I tried to do anything with the add-in project I wrote, Visual Studio crashed and sent an error report. After the error reporting finished, a dialog would appear to tell me updates are available which might fix my problem, and I was sent to the Office updates page. After installing updates, I could not even open Visual Studio without a crash, so I rebooted.
After rebooting, everything appeared to be back to normal, and Lookout started to work once I disabled my C# add-in. I decided this wasn’t a battle I wanted to fight, and scrubbed out every reference to my component from the registry. My add-in isn’t highly useful, but Lookout is fantastic.
I have to admit I had a bias against Philadelphia going in. When I was a just a young ‘un my parents would drive to Philly to visit an aunt. I have only one memory from these trips, and it goes like this: We are getting ready to go back home. My dad leaves the house to take luggage to the car. Several minutes later he reappears at the door, luggage still in hand, and announces: “somebody stole the car”.
As a kid, the fact that there were people in the world who stole other people’s cars came as a traumatic revelation to me. Based on this experience, and on seeing Eagle’s football games on TV, I hold a terrible stereotype that the city is full of thugs and car thieves. For the longest time I thought the “City Of Brotherly Love” was more of a sarcastic joke instead of a description, but I then I think how close Philadelphia is to the state of New Jersey, so maybe these sayings are all relative.
One morning we arrived at the new company from the hotel at the same time as a tractor trailer. By the time we walked up to the sidewalk the back doors of the trailer were opening. I peered inside, and lo and behold, there was the furniture I used to see every day at work. Suddenly it all came crashing down on top of me. The old company was gone. They new company had really bought everything. I wasn’t just at a client site for a few days. I was a 1099 employee with no office to call home.
Over the next few days we tried to tell people at the new company what great furniture they were getting. We assumed they would love it, because the cubicles they had were old, and small. By contrast, our former company had spared no expense on furniture. Yes, we had cubicles, but they were the nicest cubicles I have ever seen. Spacious, with lots of nooks and crannies for storage, built in lights, and low walls. I hate cubicles as much as the next person, but these were decent.
I have a feeling the employees there were apprehensive about the new cubicles because they didn’t offer as much privacy as they were used to. We knew at least one software developer there who snoozed in the afternoon, but unless you got in really close, which was hard to do, it was impossible to tell.
The lack of privacy at our old office was actually sort of funny, because you knew just a little bit about the lives of other people. It wasn’t eavesdropping you know, it was just hard not to hear conversations like this one from a fellow architect:
“Yes honey, I understand it is your sister’s family, but I’m not just giving them money to go grocery shopping. We’ve tried that before and they waste it. I’ll take them grocery shopping, and I’ll tell you right now, they won’t be buying shrimp and brand name cereal on my dime. If they want cereal they get the generic stuff from Walmart.”
Other people at the other company had a different definition of private matters than I do. One developer sent an email to the staff alias that read like the following (I’m not making this up):
“Does anyone know a good dermatologist in the area? I need to get something lanced.”
When this email hit the inbox, you could just hear it ripple threw the building. People would gasp, or chuckle, or choke on coffee. To this day we still refer to the guy with the nickname of “Lance”.
Seeing familiar furniture in the building only added to the odd feeling I had there. It is tough to adjust to a new corporate climate when you know you are not desperate enough to relocate and stay. For one thing, they took everything too seriously. I tried to spread some cheer by making their Laser Jet printers display random funny messages, but it took them weeks to notice.
During my three weeks in Philly I was amazed to see some of the sales people from our old company appearing at the new company for interviews. I thought this was interesting because the old company went out of business due to a lack of sales, but it didn’t surprise me, because I had learned that sales people have no shame….
Years ago I used to juggle two different projects by spending my morning writing C and assembler code for 8-bit embedded CPUs, and in the afternoon I’d switch over to Windows code with Borland’s OWL framework. This was a day I’d never get to launch the Borland IDE.My office was in a building housing two companies. My company occupied the front of the building, and the second company (let’s call it XYZ Inc.) occupied the back of the building. The only proper way into the back of the building was to go through a door just past my office. These two companies were distinct legal entities, but were closely related. By closely related, I mean the owner of company XYZ called the owner of my company “son”. It was all one big family, if you know what I mean. As the reader, you need to imagine yourself in my position. You are in a reasonably private area, like an office. You have your favorite music on, and a caffeinated drink by your side. You are cranking out code. There could be a Mardi Gras parade happening outside your window, but you wouldn’t notice, because you are “in the zone”. Such was my situation on this particular morning. Suddenly, a demanding voice breaks my concentration. “Is this company XYZ?”, the voice says tersely. It was like an order in the form of a question. Now my first thought, as I was slowly coming out of my concentration, was that if the FedEx delivery guy was going to be this rude, then I had absolutely no obligation to give him a quick answer. In fact, I thought, I might just start by shooting him an annoyed look. I mean, if you value running around lost and interrupting otherwise productive members of the work force with rude questions, give up driving for UPS and join a company who performs ISO 9001 audits. I turned slowly to the doorway, only to notice a man with a gun on his hip. You can imagine my surprise at having misjudged the situation. Now my lips were already pursed to let out an emphatic “no”, but my brain instantly went off in a number of different directions. My first thought was how this guy, in his blue windbreaker and jeans, looked like he walked right off the set for the TV show “Cops”. Except “Cops” isn’t filmed on a TV set, it is supposedly “reality television”, and a man with a gun (and a badge on a chain around his neck) was now at the edge of my office staring intently. My second thought centered on the man’s finger, which was pointing directly into the center of my office, as if this could be the source of all problems in the world. I knew my job now was to divert his attention to some other office in the building, but I was beginning to feel a bit queasy, which led me to my third thought. My third thought was that I was taking entirely too long in analyzing this situation. I should have long ago calmly replied that the company he was looking for was through the doorway at the end of the hallway, thank you very much, and have a pleasant day. Instead, I was sitting here for what seemed like an eternity, and it suddenly it dawned on me I might appear guilty. Guilty of what? I thought to myself. What could I have done to attract the attention of a law enforcement officer? But if I wasn’t guilty of something, why didn’t I just answer? Get a grip, I told myself. Quit staring like a deer in headlights and make this unpleasant situation go away. I never did get to answer, because suddenly a voice in the hallway shouted “it’s through THAT door”, and a parade of 12 armed men moved past and into the second half of the building. Now, I thought to myself, would be a good time to go to lunch a little early a grab a sandwich. The deputy at the front door informed me nobody was leaving the building, so I did what everyone else at the company was doing, which was forming a circle in the lobby and speculating as to what was happening in the other half of the building. Over the next hour or so, agents loaded file cabinets and computers into a rented U-Haul truck, which I thought was interesting. I imagine the FBI does this a few times a year, and maybe if they actually purchased a truck and took decent care of it they could save some taxpayer money over time. On the other hand, you never have to take a rental truck for an oil change, or wait for it to completely stop before switching gears from reverse to drive, so maybe it evens out. In any case, here was what happened. It seems our sister company imported some electronic components from Japan. These components appeared in medical devices, but the U.S. custom forms said they were intended for cheese analyzers. Oops, an easy mistake to make. Unfortuantely, this lack of attention to detail attracted the attention of several government agencies, including the FDA, U.S. customs, the FBI, and the local sheriff, all who sent representatives on-site that day. I left that company soon afterwards, but not because of the raid. I had decided I wanted to work for a company whose only product and focus was software. I didn’t know it at the time, but the bubble years were approaching, and small company life was about to get even more interesting...
The FBI raid.
The CEO who, on his last day, managed to cram 1 executive leather chair, 2 desktop computers, a file cabinet, and a bookshelf into a 2 door BMW.
The intern who wore pink teddy bear clips in his beard.
The CEO who painted his toenails the company colors.
The CFO who was amazed to see how Excel could recalculate cell C3 based on the contents of cell C1.
The CTO who enlisted the aid of a software developer in chasing down escaped chickens back at the farm.
What it is like to show up for work at a new company and see the office furniture from my last company being delivered by tractor trailer.
Why I should not be given the opportunity to take the helm of a yacht for any length of time.
What it is like to have a practicing gastroenterologist at the office part time and how this leads to errant phone calls from people describing the odd color of their stool and demanding advice on what to do about it.
The vice president of global sales who drove a different vehicle to work each day yet never made a sale, and why I think this is because he wore Hawaiian shirts and Nikes during appointments at Fortune 50 companies.
Last but not least: Why engineers should not be required to move office furniture when moving to a new building.
First, some background. There are two versions of the garbage collector for .NET. The garbage collector optimized for multi-processor machines (packaged in MSCorSvr.dll), and the workstation garbage collector (packaged in MsCorWks.dll). I can see who is running the workstation garbage collector on a Win2003 machine using tasklist from the command line:
tasklist /m mscorwks.dll Image Name PID Modules ========================= ====== ================== OUTLOOK.EXE 3352 mscorwks.dll mmc.exe 2084 mscorwks.dll w3wp.exe 3436 mscorwks.dll
One of the comments suggested going into the .NET Configuration 1.1 MMC in Administrative Tools, right clicking on My Computer, and setting the garbage collection mode to “Run in foreground for server applications”.
This struck me as odd, because in doing some review work for the Performance and Scalability Guide I found out that choosing the garbage collector implementation with a .config file setting was not going to be a runtime feature until the Whidbey timeframe. I tried this configuration option and reset IIS. After hitting a local web application and running taskmgr again my ASP.NET worker process (W3WP.EXE) was still showing mscorwks.dll loaded, not mscorsvr.dll
After a little more digging I discovered the MMC toggles the gcConcurrent element in machine.config:
<runtime> ... <gcConcurrent enabled="false" /> </runtime>
It turns out the gcConcurrent setting does not change which garbage collector loads. gcConcurrent only has an impact on the workstation (MsCorWks.dll) implementation of the garbage collector (it is effectively ignored by the server implementation), and furthermore only changes the GC behavior on multiprocessor machines.
With the setting enabled the garbage collector uses an additional thread to build a graph of unreachable objects. The rule of thumb is, gcConcurrent=”true” (default setting) will provide for a more responsive application, but can also let the working set (memory usage) grow larger. You’d have to carefully test an application to see if disabling gcConcurrent actually helps an application’s performance or memory usage. The most detailed source of information I’ve found in one place on this subject is Jeffrey Richter’s book.
<SARCASM>To turn this into a spirited debate, I want to point out that developers who use MsCorSvr.dll on average earn 26% more than developers using MsCorWks.dll. </SARCASM>
Honestly, with all the cycles the .NET community burns on language debates, we could have built another language.