I had a very annoying OS issue yesterday. It all started with the release of Visual Studio 2008 Beta 2. Unlike previous releases where a new Visual Studio usually meant a new .NET Framework (which also meant a new CLR) this time the CLR is the same as it was when version 2005 came out, the rest is just extra libraries in the BCL and a few new compilers. This does not mean that it wasn’t a lot of work to put these out, just look at the Linq goodness in the new compilers. But this also means there’s no* risk installing this beta on a production machine either side-by-side with Visual Studio 2005 or standalone (if you use Resharper, it works with 2008 too). Extra safety is provided by the Go-Live license and multi-targeting: you can use version 2008 to target .NET 3.5 projects, but also 3.0 and 2.0 (yay!).
Great stuff, I just need to update to the latest version of the CD/DVD emulator so I can mount the ISO image and I’m ready for the installation. Except that after I installed the latest Daemon Tools, there was no drive. Updated to the latest SPTD driver, nothing. Removed, reinstalled older version, again nothing.
Removed Daemon Tools, installed Alcohol 52%, still nothing. By this time I was really annoyed – every reinstall meant a restart because these apps have to add a driver for a virtual CD/DVD and by this time I have restarted the machine more than in the last year or so – yeah, despite what Linux zealots think I generally never restart my Windows boxes. Tried with one more virtual CD/DVD utility that I remembered as the only one that worked on early Vista beta versions, still nothing.
By this time I exhausted all well know software CD/DVD emulators. Then I removed spare battery and slid in physical DVD-RW drive. It did not work.
Now we’re getting onto something. None of the CD/DVD drives worked including the physical one, so a setting in the OS somewhere must be blocking them all. The error I got for the physical drive was not informative but when I uninstalled it and let the OS (Windows XP 32–bit) rescan the hardware, I got a bit more specific error: Windows cannot start this hardware device because its configuration information (in the registry) is incomplete or damaged. Finally – so it’s definitely configuration related.
Google to the rescue, I found a post in a forum that nailed it: I had a leftover CD/DVD filter driver configured, but I removed the startup of the driver manually in the (most excellent) Autoruns because the software that used it was uninstalled long ago. The remedy is simple – just go to the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318} and delete keys UpperFilters and LowerFilters (or, if you want to be on the safe side, rename them). Reboot and voila! All the drives are back.
*To be precise, there’s little risk, as installing beta stuff can always screw things up.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
In theory it sounds great: promise your customers that you will match any (lower) price they could find elsewhere and they’ll always come to you knowing they’ll always pay the lowest possible price. In practice, count on the fact that many will be too lazy to actually contact you especially if you make the whole process complicated.
On the Internet though, the rules change. It is easy to find other places that sell the same thing and it’s usually very easy to report a lower price elsewhere. How will the merchant get out of this situation? Yes, I am assuming that online merchant’s promise of “we’ll match any price you find on the net” is a marketing ploy and nothing more.
I was pleasantly surprised today. I bought some optical cables from TopAchat and noticed the claim about matching price. Since I knew that Amazon had the lowest price (but only one cable in stock, otherwise I would have bought the cables from them) I decided to see if TopAchat will honestly honor the promise. Submitting the claim was simple – I had to enter the direct URL to the product on the other site and its price. All of this took place late last night, around 23h.
A couple of minutes ago, around 10h I got the confirmation mail – TopAchat will do as promised and reimburse me! Considering how ridiculous the difference in the price actually is in this case – 2.6€ for both cables – their response is even more impressive.
What this means is that from now on, I will be safe knowing that I can buy anything from them for the lowest price I can find at any other merchant’s site! This makes both of us happy – they get a lot of business from me (and other users) and I get to shop at one place, for the best price possible and I get to minimize the shipping costs too.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
I mentioned this before – the beach is only about 2 minutes away from my apartment. Now that I don’t have to go to work every day I am using the chance and going to the beach every day.
As you can expect, at this time of the year there are many foreigners here. The influx of tourists brings the small sellers of T-shirts, shitty watches, cheap sunglasses etc. Some of them walk the beach all day long.
One of these guys uses a street smarts technique – he is constantly repeating, almost chanting, only two words with a small pause between each word: “Madam… Price…” (repeat, ad nauseam).
Men don’t care about shopping* nearly as much as women do, so he's addressing “madam”. And the only other thing they might be interested in is “price” since the quality of the items ain’t for sure what’s attracting the customers. He is also using English because it’s more likely to be understood, even though his English is most likely barely usable (most of the sellers come from African French ex-colonies and speak French fluently, but not English).
Practical and effective. The business doesn’t scale much and doesn’t bring much I guess, but at least he is increasing the chances for a sale with a simple approach.
*A special sub-species of men are programmers who care about shopping even less – physical shopping, that is. They tirelessly comparison-shop online and when they are content that all the opinions in all the forums traversed are reasonable, programmers order online and have the item delivered to their home.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
I just finished reading a highly inspirational book. It’s just a bunch of interviews about startup’s early days, straight from the mouth of the founders. With a few minor exceptions where stories were a bit dry and did not sound completely honest the rest of the book is absolutely fantastic.
To me the most interesting was the recurring pattern on how the business came to be – in most cases the founders started something else (sometimes a completely different product) but the market steered them in the right direction. I was also delighted to find out how humble and realistic most of the founders were. Rarely would a founder claim how the whole success story was a result of his/hers great vision and the ability of the team to execute, yadda, yadda, you know the corporate speak. These people are realistic and realize that sometimes it’s not just skills but the timing, the availability of funds and, let’s admit it, pure dumb luck.
One story did stick out though, in a negative way – Bob Davis (who was a CEO of Lycos at the time) was constantly downplaying the role of the technology in the story about Lycos’ success. Even though he admitted on several places how it was technology that separated them from some of their main competitors, after being asked directly he would still repeatedly claim that they were not technology company at all. Then I realized that this was probably the only non-technical guy (he was a VP of sales before becoming their CEO) in all of the startups’ stories.
I really am sickened by the antagonism between developers and business people. Often you’ll hear how developers ridicule the “dumb suits” but the reverse holds too. Hey, a company is a sum of all of its parts. The technology company produces technology, but it needs to sell it to someone, so it needs salespeople (if it’s big enough to warrant that). At the same time, what would salespeople sell if there was nobody to produce the technology?
There’s no need to understate anybody’s role in the company. In fact, you’ll find out that the other founders who were mostly technical people had nothing but the kindest words for their CFOs and CEOs who were often brought in by the VCs in the capacity of “adult supervision” (a lot of the founders were very young when they started).
If you’re thinking about ever starting up a business this book is a great resource. It does not have concrete advice (it’s not a list of recipes for success) but if you can read between the lines you might learn a lot.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
Just lost three hours on this, hopefully the story will be useful to someone else too. I’ve been trying to use the WeakReference class for caching. The usage is simple – I have a (singleton) factory object which spits out objects of a certain class, let’s say Widget. At the same time the factory caches the Widget object so that if someone else asks for it, the same copy is returned (based on some criteria). In order not to keep the Widget objects in memory when nobody is referencing it, the factory keeps a WeakReference to a Widget, not a regular (strong) reference to it.
In an isolated (simplified) test case everything worked fine. I would produce one Widget object (thus storing WeakReference to it in a cache) and return it. Then I would make another WeakReference to the same object, then nullify the strong reference, call GC.Collect and test if the second weak reference is null. Like this:
Widget wg = WidgetFactory.GetWidget("Round", 32);
WeakReference wr = new WeakReference(wg);
wg = null;
Thread.Sleep(1000); // wait until Widget is constructed
GC.Collect();
Debug.Assert(!wr.IsAlive);
But wait, what’s that Sleep doing there? Well, my real test was actually failing all the time. I looked, then looked again in my factory code and there was nothing out of the ordinary there. Or at least it seemed like nothing strange was going on.
Turned out that Widget is constructed by asynchronous fetch of data from somewhere. To do this, Widget called ThreadPool.QueueUserWorkItem passing in an anonymous delegate wrapping its method. This was the second strong reference to the Widget, thus the weak reference stayed alive.
Duh.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5