I just disabled the contact form of this blog. Or at least I think I did.
The last month my hotmail has become unusable because of all the spam, and I couldn't find an option to allow only registered users to use the contact form, so i decided to disable it.
Hopefully, the spam will die away after some time if they find that the contact form does not work anymore. Then I can enable the contact form again.
Meanwhile, if you want to contact me, search google groups for 'Bruno van Dooren' in microsoft.public.dotnet.languages.vc or microsoft.public.vc.language. All of my posts have a signature that makes it easy enough to figure out my email address.
2 weeks ago I finally started working at Genzyme Flanders. I was going to write sooner about my first experiences, but I wanted to wait until I had confirmation from HR that blogging about general workplace experiences is not against company policy.
The first 3 days were employee orientation days. All new employees that start at a given date are put in a group and have a schedule that helps them to fill in all the forms, get basic knife-and-fork training about the clock system, health plan, safety and other things.
Our group had 7 persons. I was the only systems engineer.
My first impression (luckily) was that Genzyme is a great company to work for with friendly colleagues. The fact that this plant is still in the start-up phase makes that there is still a lot of interesting work to be done. The next couple of years will be anything but boring.
One thing that is completely new to me is working in a pharmaceutical environment.
We make medicine. Ours is injected directly into the bloodstream of patients who are already weakened by their condition. It goes without saying that there is absolutely no room for making mistakes. Any possibility for error has to be eliminated.
To achieve this, there is an industry ‘rulebook’ called GMP: Good Manufacturing Procedure that defines roles and rules for QA, QC, Validation, operators, supervisors and anyone who has any impact on the production process.
It basically boils down to the following points:
- Everything needs to be done in accordance with official printed procedures.
- Everything needs to be verified and validated (with an audit trail).
- Everything needs to be fit for its purpose (no jerryrigging).
- No one is allowed to do anything he or she is not qualified for.
People take these principles very seriously. Everybody has an account in the learning management system to keep track of all his qualifications.
I am lucky because as a systems engineer, I don’t have anything to do with actual production. I have only 125 qualifications left at the moment. People working in production environment have > 250. QA people have 350.
And of course, each qualification stands for following a course and an examination, though there are courses that validate multiple qualifications.
What’s nice here is that everything is done professionally, whether it is safety, logistics or engineering.
From time to time I hear people dismissing the value of certification. After all, real experience is more important, right?
No, actually it isn’t. They are both equally important.
In an environment like this, people from QA and validation are a lot happier if they know that the systems engineer is an MCSA or MCSE, and if an application developer is an MCPD.
After all, during an audit (or during validation), one of the questions that’s bound to come up is ‘How do you know this guy is qualified to run the systems?’
Regardless of my actual knowledge, having vendor certifications makes these people happy and assures my employer that I am a capable sys admin. I have taken Microsoft exams before, and they are definitely not easy. Unless you understand what you are doing, you won’t pass.
I know that I’ll be studying a lot in the next couple of years to finish my certifications.
What it comes down to
This is a very friendly environment to work in, and the next years of starting up the plant will present me with enough challenges to keep me happy.
I’ll get to do system administration of production critical systems, custom application development for interfacing with those systems, and in between I’ll have to study for getting the different required certifications.
All in all, I am very glad I can work here, doing what I do.
Some time ago I started learning COM server programming by creating a COM server from scratch, using only the raw Win32 API functions.
I started out with a very basic server, and then added new functionality with each new 'release'. Since there aren't that many up-to-date articles about writing a COM server, I intended to write an article for each release, explaining the extra functionality that got added with that release.
Of course, that was with the assumption that I actually would have time to write those articles. But that does not seem to be the case anymore, so I decided to change plans.
When I was writing the code, I took the time to put in extensive code documentation because that's an ingrained habit. So Everything I would have written in the article is written down in the code as well. Because of this I have decided to release the different versions of my code together, with all the code comments in place.
Combined with Don's book 'Essential COM', these articles should be enough to get anyone started with practical COM server programming. Note that I don't use any ATL code, so this is not how you would create a COM server in real life. Still, this code explains exactly what happens. This is something that is harder to do with ATL code.
- V1: A very basic client server setup in which the (out of proc) server mimics a computer that exports a very simple ICalculator interface.
- V2: The same client server solution, but the server creates instances through an IClassFactory.
- V3: The same as V2, but with a correct implementation of server lifecycle management. The server is now completely thread safe.
- V4: The same as V3, but now the server is available as In-Proc server and Out of proc server.
- V5: the same as V4, but now the server uses implements IOleItemContainer to allow the client to retrieve named instances instead of creating new instances. The client could then retrieve the named object by supplying a simple string to the GetObject function call. This adds a lot of flexibility to the client code since it doesn't explicitly have to supply a guid or activation settings.
V6 is the special one where I spent days hacking my way through obscure documentation. Since there are NO public articles about that technology at all, I will write an article about that one. But releasing my other version here with a bit of explanation saves me the hassle of writing the 5 articles that should go before V6.