What the hell were the guys at Microsoft on when they build the Setup and Deployment Project code for VS2003? To say that is sucks would be some of the biggest understatement ever. All I wanted was for my application to delete some intermediate files when it uninstalls. You'd expect to be able to do that from the File System settings of the install project, but you'd be dead wrong; of course, the next logical step is to interject a script of some sort into the uninstall chain. Simple enough.
I wrote a 7-line batch script to do the work for me (batch files are crappy scripting tools, but you'd be surprised what you can do with them with enough patience) only to find out that, well, you can't add bloody batch files as custom actions; you can only add DLLs, EXEs and VBScript/JScript files. So I spent an hour teaching myself the basics of VBScript (I already have a solid handle of VB6, just needed a look at the WSH reference and some turorials about FileSystemObject) and moved on.
Only to find out that the script doesn't work; it's run from a god-knows-which working directory, meaning you have to do some extra fussing around to get to the right directory. After a little reading I found the Session.TargetPath property, which apparently doesn't do the trick. To make a long story short, I found a tutorial on The Code Project which showed me how to do it:
- Add [TARGETDIR] to the CustomActionData property of your custom action
- The property is accessible with Session.Property( "CustomActionData" )
Why the hell is the simplest thing with MSI so goddamn convoluted?
Just realized it's been quite a while since I posted anything demoscene-related. Well here goes: you positively, absolutely must watch Iconoclast
. It is the single most important demo since, well, I have no idea. It's broad, it's beautifully executed, it's glriously original and it's insanely well-programmed (running smooth as silk on my Radeon 9700-equipped laptop) and it has some of the best music
ever written by a scener. I've been following aMUSiC and Leviathan since the 2002 demo Edge of Forever
and they never cease to astound me. Actually, now that I've mentioned ASD, you should definitely watch Edge of Forever
and Planet Risk
Iconoclast by Andromeda Software Development
(All images shamelessly stolen from pouet.net)
Also noteworthy is the Assembly'05 demo from Synesthetics called sts-04: instant zen which, while not altogether very different from their debut demo at Breakpoint 2005 sts-03: aeon flux is very well made and has great music.
The 200mb or so video download for TBL's 2005 comeback Ocean Machine is very well worth it; aside from being an Amiga demo (an achievment in itself over 11 years after the last machine was launched) it has some really stunning effects, such as the dancing ninja (?) in the screenshot below, and a brilliant soundtrack by Crankshaft.
Ocean Machine by The Black Lotus
Portal Process have been prolyfic lately. After winning The Gathering 2005 with the singularly cool meet the biots they got 3rd place at Assembly 2005 with don't stop. Now don't get me wrong, "don't stop" is a great demo - but it's just more of the same. Stick with "meet the biots", it was great.
meet the biots by Portal Process
Finally, plastic's astounding 195/95 and Final Audition are an absolute must-see, particularly the final version of 195/95.
195/95 by Plastic
After having seeing most high-profile or otherwise interesting movies that came out this year I was under the impression that, with some notable exceptions, there wasn't much to look forward for. A quick look at IMDB's very useful "Now Playing" feature
proved me very much wrong:
- Serenity (a.k.a Firefly: The Movie) is out. I've never seen the show (although I intend to) but the trailer looks promising in the extreme (particularly since it's downloadable in HD WMV9).
- MirrorMask looks like an interesting piece. Dave McKean's adaptation of Neil Gaiman's is stunningly beautiful; I've never read the book, but the trailer looks promising indeed.
- Apparently they actually made Transporter 2. The first movie was a lot of fun (a hong-kongesque action flic with European actors? You bet), I hope the second lives up to it.
- Lord of War might be a pretty fun way to spend a couple of hours. Mild comedy and action with Nicholas Cage? I see that.
- Corpse Bride - a Tim Burton movie with Johnny Depp. 'nuff said.
- I'm highly looking forward to the latest movie from Tony Scott (directory of Crimson Tide, Man on Fire, Spy Game and Top Gun) called Domino. Seems interesting.
- In the recent trend of epic, grandiose book adaptations started by Lord of the Ring, C.S. Lewis' The Chronicles of Narnia: The Lion, the Witch and the Wardrobe just might be "the next big thing". Trailer certainly looks awesome.
- I can't believe they actually went through with it.
- Yes, like it or not, I am very much into Harry Potter. Goblet of Fire's trailer looks like they blew the lid off the budget and I hope the movie is as visually artistic as the third (having already read the book I know what to expect plot-wise).
- Stay is a controversial (at least according to the comments) movie from director Marc Foster; regardless of the early criticism, after Finding Neverland I'm willing to give Foster every ounce of credit I can muster. Add Ewan McGreggor into the mix and I'm sold.
- I was utterly surprised to find that I actually enjoyed the 1998 movie The Mask of Zorro. I was equally surprised to find that they're acutally making a trailer. I wonder if it'll be any good...
- The Matador has potential. We'll see.
- The Libertine looks promising as well. Johnny Depp always excels at playing out-of-this-world characters (Edward Scissorhands, Ichabod Crane, Jack Sparrow and lately Willy Wonka, just to name a few), which could only mean well for this movie.
- I will watch Memoirs of a Geisha. Looks for too interesting not to, and the talent list is nothing short of astonishing.
- Not sure what to make of Aeon Flux; the plot seems kind of ridiculous, and so does the trailer. Another comic-license wannabe?
- If the Lethal Weapon movies are anything to judge by, Kiss Kiss, Bang Bang should be da b0mb!
- I'll have to give Paradise Now proper viewing time before I decide if it's a horribly political movie or the gripping tale of humanity it purports to be.
- George Clooney plays Robert Baer in the "based on arguably real events" movie Syriana. There's some potential there.
I've also watched King Arthur while on vacation. I don't have a single word quite powerful enough to describe how utterly bad this movie is, so I'll settle with "horrific"; I mean, seriously, it was shit. Moreover, I'm not sure if Guinevere was a terrible character because of poor casting (Keira Knightley, who's also starring in the aforementioned Domino) or, more likely, due to a crappy screenplay. The camerawork was awful (most battle scenes were completely incomprehensible) and music uninspired. Bottom line: stay the hell away.
On the contrary, I also had the chance to watch Lemony Snicket's A Series of Unfortunate Events, to me an obscure movie I haven't even heard of until a couple of weeks ago. How can a movie of this caliber remain so unknown? I believe it wasn't even shown in Israeli theaters. Anyway it was an interesting movie, very funny at times and certainly very beautiful and imaginitive, but I can't shake the feeling that we have here a Tim Burton wannabe... I still haven't decided about it properly, I intend to watch it again and then I'll have a final opinion on it.
I've been doing some reading on the Chernobyl nuclear disaster
. The reading turned out to be a genuinely frightening experience. A series of small but unfortunate errors resulted in hundreds of thousands
of people evacuated from their homes and irradiated large sections of the world...
I got a similar sensation of dread by reading the Fallout manual, which starts with a perfectly dry and scientific description of the effects of a particular type of nuclear bombing. The game comes highly recommended, by the way.
Something a friend of mine said when we were discussing it over lunch yesterday triggered a memory from Jeff Wayne's War of the Worlds, to quote (this was more difficult to find than you might think):
It seems totally incredible to me now that everyone spent that evening as though it were just like any other. From the railway station came the sound of shunting trains, ringing and rumbling, softened almost into melody by the distance. It all seemed so safe and tranquil.
I haven't had that much time on my hands lately to do any proper writing (what with a full-time job, four martial arts classes a week, making arrangements for a trip abroad and a LAN party, looking for an apartment and car and being to several family occassions), which is why content has been a little drab lately. So I'll start today's tidbits with a request: if you have an interesting programming dilemma, issue, question etc. don't hesitate to contact me
- I'm most prolific when challenged with an uncommon problem.
That said, lets get to the goods:
- I was researching an issue we had in the current project (specifically, finding out which physical monitor was connected to which video controller), and at first turned to WMI which is usually good enough to give you such answers. Although I have some WMI experience under my belt I was looking for a tool to aid me in developing WMI applications - a WMI "explorer" if you will - and after a little Googling about stumbled onto a very useful tool written by French programmer Coq. The tool, aptly named "WMI explorer", is an open source Windows Forms application which allows you to query the WMI schema as well as object instances, and also generate C# classes for WMI classes. I've found it immensely valuable; go ahead and download it, just be warned - it's currently in French. I'm contacting the author to ask his permission to translate and distribute this thing (I'm not sure under which license it is distributed because, well, I can't read French!)
- I'm really very excited about HDR (High Dynamic Range rendering/imaging), and my excitement only grew after seeing the screenshots from Half Life 2: Lost Coast. Check out the screenshots in the article - they're simply staggering! The overexposed building on the third page is precisely the kind of thing you simply cannot do faithfully with bloom and which changes the entire gameplay; this means that when attempting to attack the castle from below you are partially blinded and at a massive disadvantage. And it looks absolutely stunning to boot - check out the curch on the fourth page!
- Amiga demo afictionados should check out the video for Control by Oxygene - extremely impressive visuals on a (in my understanding) vanilla A4000, along with a superb soundtrack by Clawz.
- Microsoft's specs for C# 3.0 are out, and it looks like the C# guys went haywire. I'll be digging more into that for comments. In the meantime you can check out this discussion (via Aynde Rahein)
- Go check out Indigo Prophecy. I'm very, very, very much looking forward to it (and Tycho at Penny Arcade seems to concur).
I'm hosting a LAN party this weekend, so hopefully I'll have some interesting experiences and/or pictures to share by Sunday. On Sunday itself I'm going for my first trip out of Israel in 8 years (the last, and technically first, one was to London for a week when I was 14). I'm going to Turkey for a week of treks, jeeps, rafting and of course some classic R&R (the trip's programme for Hebrew speakers can be found here
). Hopefully it'll be a great trip - pictures and experiences when I get back.
Lots of generic crap for today. Without further ado:
- What in the bleeding hell.
I have to admit that this whole "code/hacker-caffeine" trend is
starting to get on my nerves. After years and years of caffeine
addiction (I could probably have won the world record for most coke
drank in a day) a couple of years ago I decided to let go of it -
almost completely. I now enjoy the occasional coke and, if I'm
genuinely tired and need a pick-me-up, a coffee always helps. Back in
the day I could've drowned a triple espresso without any effect. Bottom
line, it never ceases to amaze me how dependant people allow themselves
- Joku posted a worthy comment on Mike Stall's blog:
Not really related, but it would be good if technical
bloggers writing about X,Y & Z would also mention what is the
closest public release they are using. Now if you go google and find
some older blog entry it maybe the stuff being talked about was in
relation to for example VS Beta 1 and might be completely wrong today.
I don't think everyone who come to blogs.msdn from google will figure
out that many of the blog entries that talk about say VS2005 are
actually talking about something that's specific to non-RTM build. If
there were tags for every public build and they were visible and easy
to put on the blog entry... Well some day perhaps.
It is a valid point, and I shall endeavour to do that from now on.
- RMS never ceases to amaze me in how he takes theories (conspiratorial, political or otherwise) and treats them like facts. "Israel's real nuclear weapons",
says he. It is commonly accepted that Israel does have a nuclear
arsenal, but no-one knows for sure, myself included. Admittedly RMS's
never purported to be unbiased or politically-correct, but it bothers
- Fellow Israeli developer-blogger Oren Ellenbogen mentioned a few weeks ago a subtlety in the usage of interfaces
in C# I was not aware of. I've since used explicit interface
declarations with great success, however one caveat is that you can't
use the interface members even from a private scope (i.e. from a member
method within the class implementing the interface). So use this
feature with caution - it can reduce messiness (particularly where
intellisense is concerned), but often at the cost of forcing you to add
lots of unnecessary casts.
- Software patents are taking an increasingly alarming foothold in
common business practice. Litigation has always been part of business,
but when Creative sues Apple
for patent infringement over the iPod's navigation interface, to me it
means things have gotten completely out of hand. Face it, people:
one-click shopping, song navigation in menus etc. should not be patentable.
It's ridiculous, any UI-designer with more than 3 IQ could've come up
with that concept. Yes, Creative went to market first, but that is
completely irrelevant; just imagine if someone patented the "ability to
close a user interface component by clicking a button" - none of us
would be able to close windows. Does that make sense to you?
- This little hard-drive hack is really damn cool.
- The Blizzard vs BnetD
case is worrisome to say the least. I'm not versed in the particulars
of the case, but assuming the BnetD programers did not actually
reverse-engineer Blizzard proprietary code they should not have had a
case. I wonder how this case compares to the Microsoft vs Samba
litigation - I reckon I should do some further reading.
- I've been playing with Total Commander for several days now. Originally I couldn't stand the software, but admittedly it gives Servant Salamander a serious run for its money, and has quite a few features SS does not.
- I promised Oran (one of my colleagues) that if he found an IBM Model M keyboard
for me I would try it out for a week. He managed to find one and I've
spend a couple of hours on Sunday cleaning it up, and have been using
it since. It's a very nice keyboard; the buckling spring key design has
terrific tactile response and typing on it feels great. There are
several things I do not like about it, though: for one, it's missing
the Windows keys which I've grown accustomed to using (Left Windows key
+ D or L two dozen times a day...); the right shift occasionally gets
stuck; finally, it's a little big for my hands so certain keypresses
are far less convenient than they were with the trusty Microsoft
Natural Elite. It doesn't seem that the new keyboard has improved my
errors/character rate any, but it is a little early to tell. That said,
it's amazing that a keyboard manufactured in 1991 can favorably compare
to a modern, ergonomic keyboard. My model is a 1391408, in case you
were wondering. All in all, I still miss the old Microsoft Natural
classic (I've used one from 1996 to about 2001 when it crashed on the
floor one too many times. It's still working, by the way, just missing
- I came home from a pub last night and made the mistake of turning on the TV. Twelve Kingdoms
episodes 14 and 15 were on. No sleep for me tonight. Do yourself a
favour and watch that show; I own it in its entirety on DVD and it was
some of the finest money I've ever spent. Other anime favorites include
Trigun, Full Metal Alchemist and Cowboy Bebop. If you're curious about anime, NGE might be a good primer, although I have my gripes with it.
- Finally, I've made a list of all my DVD movies on IMDB, but unfortunately there is no way to link to it externally. I'll find some other catalogue, or write one on my own.
I was writing a relatively small GUI application (more on that later) and was looking for an easy way to add wizards to the application. A quick Google search brought me several options, but eventually I settled for Al Gardner's excellent "Designer centric Wizard control
" on The Code Project; it is combination useful, solid and open-source. I highly recommend it, however I did find two caveats:
For starters, this isn't actually the wizard designer's fault, rather Visual Studio's. I designed a moderately complex, 5-step wizard. The way the wizard designer works, all controls on all pages are thrown into the same class file. Since this is parsed and modified by the designer itself this wouldn't be an issue, however the wizard was also localizable. This meant that whenever I saved the wizard or moved from code view to design view and vice versa, the machine would chug for several seconds on regenerating the code. Add to that the usually-tolerable ReSharper parsing phase (I use build 165) and you've got 10-second stalls every couple of minutes, which makes development extremely tedious.
The other issue is that the Cancel event does not work as planned, and I can't figure out way. I added my own handler to the cancellation event with an "are you sure"-type messagebox, but whenever I answered no the wizard would still close. I tracked this down to the cancellation button on the wizard (btnCancel) having its DialogResult property set to DialogResult.Cancel (since I'm running the form instance with ShowDialog this would cause the form to close), however nothing in the application has ever set it to that value. Worse still, when I added the line:
this.btnCancel.DialogResult = DialogResult.None;
To the InitializeComponent method on Wizard, a breakpoint on the cancellation event handler would show that Wizard.btnCancel_Click:
this.FindForm().DialogResult = DialogResult.None;
I tried contacting Al to let him know about this issue, but there is no obvious way to get contact info from The Code Project. Any ideas?
So here I am, banging my head against the table repeatedly (quite
literally, feel free to ask my colleagues) because of a bug so idiotic
I can't even begin to describe it.
I wasted 20 minutes tracking down a bug just to find what Rik Hemsley says best:
Apparently, though no-one will tell you this, the selection could fail if you don't have the focus. Make sure you add a call to lstWhatever.Focus() before you mess with selections.
Eli Ofek has published a
5-part (well, 4-part really) series about migrating an actual project
from the classic triad of VS2003/.NET 1.1/VSS to VS2005/.NET 2.0/Team
Foundation Server. I used to be a developer on the "sister team" of the
project he's talking about, and I can tell you that it's a huge project
with an extremely talented and devoted team of developers, so if you're
going to be doing any migration work in the nearby future I highly
recommend you go ahead and do some serious reading on his blog. The
bottom line is that Beta 2 servers aren't stable enough, nor the IDE
performant enough, to do any proper work on. The little experience I
had with the VS2005 was that it was actually very good and the
performance just fine (on my 1.7GHz Dothan laptop w/1GB memory), but I
can't argue with server stability issues.
Regardless, I particularly recommend reading phase 3, which discusses critical language/library differences.
I've updated the article about events and .NET remoting with some source code. Let me know if
you find it useful. That said, I haven't been active on the 'net for
the last few days so I have quite a bit of catching up to do.