Tomer Gabel's annoying spot on the 'net RSS 2.0
# Thursday, 30 June 2005
If you ever find the need to contact me, here are a few options (prioritized, first is best):
  • Send me an e-mail - make sure to change the at/dot text to the appropriate characters
  • MSN Messenger alias tomer at tomergabel dot com (same comment applies)
  • Leave me a comment on this blogpost
Thursday, 30 June 2005 16:59:14 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
dasBlog's been behaving oddly today. First I find that I have an empty category (that is, a category with a blank name). Turns out that dasBlog caches the categories from its content XML files, but has no category deletion/rename tool (this tool can only rename categories and is not part of the project itself). I had to download the files, look up the offending category manually (another would-be bug: the category list in the XML was personal;music;" - note the trailing semicolon) and fix it, then touch the config file to get the site to reload and recache the categories. If I find the time I'll add this to the source.

The second issue is that my "contact me" entry has disappeared from the blog entirely, and somehow the links were replaced with links to another entry. *scratches head* Guess I'll have to rewrite that post...

Thursday, 30 June 2005 16:55:16 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
The vector engine saga continues!

One of the features required by the host application is for the vector engine to create a snapshot of the viewport at a given size. The current API implementation returns an HBITMAP for use by the client app and uses GDI (through MFC) for rendering the viewport. This in itself was OK, but since the viewport size is declared by the host application and the background for the vector engine is usually a bitmap the rendering engine copies the bitmap onto the viewpoint via GDI, which means the bitmap gets rescaled by GDI. This is a big nono because GDI rescaling is both horribly slow and looks like crap (na?ve rescaling, no nearest-neighbor or bicubic).

Bottom line, I had to rewrite the background rendering to utilize DirectDraw; luckily I've already done this for the actual rendering routines in the engine, and the snapshot generation uses that code. I just had to create a DirectDraw off-screen surface, render to its DC instead of the current compatible DC created from the screen surface, create a bitmap from the off-screen surface and return it.

It took very little time to write the rendering code (particularly after finding a couple of tutorials), but the copied bitmap wouldn't save properly; the resulting BMP file had a black rectangle instead of the rendered image, and when I tried to copy the bitmap to the clipboard I couldn't display it (got a "can't copy data from clipboard" error message from mspaint, and clipbrd wouldn't display anything). It took an additional several hours of beating around the proverbial GDI bush to find a solution, and I still can't figure out why it works:

  1. Create a DirectDraw surface
  2. Render image
  3. Create a compatible DC for the surface (bmpDC)
  4. Create a compatible bitmap for the surface
  5. Select the compatible bitmap into bmpDC
  6. Blit the surface DC onto bmpDC
  7. Here comes the cinch: call ::GetDIBits to fill a BITMAPINFO structure, then to get the bitmap bits (note: make sure to negate the bitmap height, or you'll get an inverted bitmap)
  8. Delete the original bitmap
  9. Recreate the bitmap using ::CreateBitmap with the info from the previous step
  10. Clean up
  11. Return the newly created bitmap

What really baffles me is that what I'm doing is effectively creating a device-dependant bitmap (DDB) out of the previously created compatible DDB. If that is the case, why is the newly created bitmap functional (that is, I can save from it and copy it to the clipboard properly)? Why was the original bitmap behavior different? And why, when I tried to ::CreateDIBitmap instead, I consistently got an error where the documentation specifically states the only possibly error is an invalid parameter (there were none that I could find)?

I'm completely baffled by this; the solution outlined above is (aside from being ugly) not supposed to work. Has anyone any idea?

Thursday, 30 June 2005 15:40:49 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
Here's part of a spam mail:
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!

And I say, what the hell?

Update (July 25th): after noticing a referral to this entry from Google with the search term "gouranga spam" I figured I might as well find out what this thing's all about. A little more searching revealed the following:

Gauranga (Gouranga) was a nickname of Sri Caitanya Mahaprabhu, a monk in India who 500 years ago founded the branch of Hinduism that during the 20th century was brought to the west by ISKCON (International Society for Krishna Consciousness, better known as the "Hare Krishna" sect).

The one recollection I had upon reading this bizarre mail was that, in the original Grand Theft Auto, if you ran over all members of the occasional groups of monks prowling the strings, you'd get a massive bonus with the word "Gouranga!!!" superimposed on the screen. Apparently I wasn't the only one to notice this, as the fact is featured prominently on wikipedia. At least now I know what the hell gouranga means!

Thursday, 30 June 2005 08:36:15 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
# Sunday, 26 June 2005
Lev (my friend from Eilat) hopped back north for a visit, which was perfect timing to go to the Hot Fur CD release concert in the Koltura club in Tel-Aviv. And let me tell you, it was the absolute bomb!

We arrived a little early (the show was supposed to start at 22:00 with the doors open at 21:00), the place was still nearly deserted and a Frank Zappa concert played in the background. We went out to grab a bite to eat, and when we came back people were starting to pile up. I don't really have much of an idea how many people were present when the show actually started (half an hour late...) but it was probably 150-200 as the place is supposed to be able to hold 400 people and it wasn't horribly packed.

Audience at large (you can thank Ilya Konstantinov for the pictures)

Hot Fur started by playing their new music video for "Adventure In Space", which was hilarious and got everyone riled up and ready for the concert; they immediately proceeded with "The Letter Vav" and over the next 1.75 hours proceeded to play most of their bread-and-butter repertoiré, including (but not limited) to "Sabres 15003", "I Won't Give Up" and (I think) "Tomatoes". Now what's really great about Hot Fur concerts is that they do not only make and play great music, but they also know how to put on a great show:

Between (and often during) musical segments guys related to the band would put on bizarre costumes and indulge in what must be the greatest fun the world: acting really stupid in front of hundreds of people who appreciate stupidity. I particularly liked this character (the main character in the "Adventures In Space" video), who for lack of a better name I like to call The Dude:

The Dude makes many appearances during the show...

... like this one

Among diverse distractions the band kept throwing roses at the audience, and I finally found myself looking thus:

Roses are red, violets are blue...

And eventually broke down altogether:

... I love Hot Fur, and so should you

At the end of the show, we finally managed to get our hands on our preordered Hot Fur CDs (which we've been eagerly awaiting for for the past year). Besides the great music us preorderers were delighted to find our names in the "thank you" section of the CD...

Hot Fur'll be appearing in Koltura again on July 27th (I think). Don't miss it.

Sunday, 26 June 2005 13:25:34 (Jerusalem Standard Time, UTC+02:00)  #    -
Music | Personal
# Thursday, 23 June 2005

Three of my colleagues here at Monfort are Israeli demo-scene alumni (specifically, Borzom / Tatoo, Scroll-Lock and Crunch / YOE). We got word of an IGDA Israeli Chapter meeting that was going to take place in a day, where demo-sceners are expected to attend (Civax / Moonhunters is the IGDA organizer in Israel), so we quickly rang up everyone we still have contact with (the last scene event in Israel was in 2000...), took a car and went there.

It was great! More than great, it was absolutely brilliant. Fewer sceners attended than I expected/hoped, but the ones that did come were pretty much the core of the Israeli scene to begin with. Borzom, Scroll-Lock and I arrived in the Leo Blooms Irish pub in Tel-Aviv a little after 19:00 to meet up with Kombat / Immortals and Jonny / YOE who were already there, and were shortly joined by Civax and One / Moonhunters, Crunch / YOE and after a little while Protopad / BSP (my brother Mickey), Dark Spirit / TTOM, Hex / ULC^Tatoo and Rage / Immortals.

The Gang
From left to right: Jonny, Crunch, Borzom, Scroll-Lock, Holograph (myself), Civax and Kombat in the bottom

Over the course of about five hours we sat around, drank and ate all sorts of shit and had loads of fun talking to people none of us have seen in years. The results were sometimes disturbing:

What. the. fuck.

All in all, it was an absolute blast, and I'm now planning a demoscene get-together (which will hopefully include a BBQ and demos displayed constantly on a projector) sometime towards the end of July. If you're a demoscener and have any inclination to attend, get in touch...

Update: Oran put up pictures from the event on his Giant Mitzy site. You can download them here.

Thursday, 23 June 2005 16:26:16 (Jerusalem Standard Time, UTC+02:00)  #    -
Demos | Personal
# Monday, 20 June 2005
Doom 3 owns.

I also got around for an hour or so of Resurrection of Evil; unfortunately I was left less than satisfied. The Grabber weapon is more useful than Half-Life 2's Gravity Gun, but also far less interesting or cool. The physics engine is adequate, but nothing like HL2's Havoc engine, which also detracts from the weapon's cool factor; the whole thing just basically feels like a ripoff of HL2 (which is something id Software should not feel compelled to do). I'll give it a fresh attempt tomorrow.

Finally, of note is the Classic Doom 3 project, which is sort of a must-have for any Doom fan.

Monday, 20 June 2005 23:18:10 (Jerusalem Standard Time, UTC+02:00)  #    -
Gaming
I'm generally fascinated by the effects of nuclear bombs. It's not the technology I'm interested in as much as the aftermath; the images from the Hiroshima and Nagasaki bombings, along with the stories and related social phenomena (Godzilla is just a trivial example) hold an irresistible sway over me.

After spending about 20 minutes reading through George Weller's rediscovered report of Japan's nuclear aftermath it was really, very difficult lifting my jaw off the floor. It's an astonishing read, particularly because it combines the early 20th century technical ignorance regarding nuclear weaponry and its various effects with surprising candour and lack of naivette. I was a little concerned with the reliability of the publication, but I suppose having it reported on CNN and subsequently slashdotted lends it at least some credibility.

At any rate if you have any interest in the post-apocalyptic, you owe it to yourself to read the report. That said, you also owe it to yourself to play Fallout. Sleep tight.

Monday, 20 June 2005 14:33:09 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
Brian Moriarty (creator of Loom) speaks! Besides explaining how Loom was originally meant to be a trilogy, he adds an insight on the reason its sequels never came out:
Contrary to popular belief, the LOOM sequels were not abandoned because LOOM didn't sell well. LOOM has sold more than half a million copies in various formats since it was published in 1990. The reason the sequels weren't made is because I decided I wanted to work on other things, and nobody else wanted to do them, either.

As a huge fan of Loom I'm not sure which saddens me more: the original theory that Loom did not sell well (aside from being an astoundingly good game, Loom had an Israeli version - in native Hebrew no less! - and sold extremely well here), or the fact that the trilogy was simply... neglected.

Another interesting bit of trivia: a Japenese re-arrangement of the soundtrack was made but never released. Moriarty sold one of the only existing copies on eBay last April. I contacted the buyer and hope to get the music available on the internet.

Last but not least, you know you've played way too much Loom when not only do you recognize the source of the following passage, but you can actually hear Cygna's voice in your head when you read it:

Destiny shall draw the Lightning
Down from Heaven; roll its Thunder
Far across the Sea, to where I
Wait upon the Shore of Wonder
On the Day the Sky is oepened,
And the Tree is split asunder.
Monday, 20 June 2005 11:01:11 (Jerusalem Standard Time, UTC+02:00)  #    -
Gaming
# Saturday, 18 June 2005
I somehow managed to miss the release of The Ur-Quan Masters alpha 0.4. Just so you understand, alpha 0.3 was quite stable and I was able to complete a game successfully. Alpha 0.4 is even more stable and adds some more features (PC intro/ending sequences, "triscan" filter to name two). It is the best free PC game you will ever play.

Also, the Precursors' remix project contains some pretty kick-ass remixes and covers of the various SC2 tunes. I've made an addon for Ur-Quan Masters which contains what I perceive as the best version for each tune; I'll post a link when I can find some web-space for that (the package currently weighs in at about 90mb) - alternatively I'll do some reading about the new trackerless BitTorrent and see if I can use it instead.

One thing I do wish UQM had is the ability to select a tune at random from a selection (for example, there are two or three very good versions of the Thraddash theme I would like to be able to put in the remix pack). I'll see if I can file a feature requests or maybe even add it to the source code myself.

Saturday, 18 June 2005 16:23:38 (Jerusalem Standard Time, UTC+02:00)  #    -
Gaming
# Thursday, 16 June 2005
Slava, one of my colleagues, asked me to help him out on a strange issue: he's integrating an old 2D vector engine (written in C++/MFC) into a new .NET 1.1 WinForms application. The vector engine exposes an API through a native DLL export, along with a bunch of structures. The issue was with unmarshalling one of the native structures: everything seemed to be unmarshalling correctly except for the double values (we got things like 2.53e-250 - uuh, not likely).

Slava's already managed to consume the same DLL successfully from Delphi, and upon reviewing the two we couldn't find any difference. What we managed to miss at first was that the Delphi marshalled structure was declared with a {$a-} prefix, which means "ignore alignment" - otherwise Delphi might assume that the structure might be in some way memory-aligned.

Figuring that our .NET woes might be due to the same issue, a quick look around MSDN revealed to us that the StructLayoutAttribute(LayoutKind.Sequential) declaration also relied on the "pack" member of the same class, which "controls the alignment of data fields of a class or structure in memory." My logical conclusion as a programmer would be that creating a sequential structure would default to a straighforward memory representation - i.e. no alignment - but apparently it's misguided; .NET defaults to 8-byte alignment for managed structures. We set the alignment size to 4 and voila - problem solved.

This only goes to prove that even the simplest and subtlest of programming challenges can baffle even experienced developers, and both Slava and I wasted quite a bit of time on this issue. The moral? There isn't one, really; just expect to be baffled now and then no matter what you've seen or been through.

Thursday, 16 June 2005 09:04:19 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
# Wednesday, 15 June 2005
It took me ages to understand the fundamentals of internationalization, (man-) language interoperability etc. In fact, only after working on MFC software over a year I encountered a problem so fundamentally accute I couldn't for the life of me figure it out, and it took a bitchslap from my friend Ilya (Konstantinov) to make me halt and figure the problem out properly.

Internationalization is hard. Perhaps its hardest aspect is support for the various languages; each language has its own character set, and although most widely-used languages derive from the basic latin alphabet there are still subtle differences. German makes extensive use of accented characters (é and ü for example); Czech makes use of the relatively unknown caron (č) and that's just the tip of the iceberg. Imagine the thoroughly different requirements of Arabic and Hebrew: complex script languages that are not only written right-to-left, but employ a completely seperate alphabet with different requirements. For example, did you know there are two ways to write several letters in the Hebrew alphabet, depending on their location (middle or end of a word), but those versions of the same letter have the same semanthics? Or maybe you've run into the latin letter Eth (Ð), which to my knowledge only exists today in Icelandic?

Finally, to the point: if you've ever received an e-mail with question marks instead of words, entered a website in your native language but got gibberish instead or perhaps (for the more astute) wondered how it is possible to display text from so many different languages on one document (web site...), you're not alone. Most programmers are completely unaware of these fundamental issues, and cause massive headaches to users and fellow programmers alike. I've come across an article Joel Spolsky wrote back in 2003 with an absurdly long name; no matter: finally someone (certainly with more credability than myself) has taken it upon himself to write a thorough introduction to the subject for people - developers in particular, but the technically savvy among you might also be entertained - who do not realize its importance. Please, please please go and read it before you go on with your daily lives.

Wednesday, 15 June 2005 15:23:13 (Jerusalem Standard Time, UTC+02:00)  #    -
Development | Software
Eric Lippert has an incredibly interesting five-part blogpost about the mathematical essence of musical theory, along with some pretty nifty demonstrations. I've dabbled a little in the more practical applications of musical theory before (writing wave and module players and some basic software synths) but honestly have never been really interested in its mathematical/physical aspects.

This, ladies and gentleman, is interesting shit.

Wednesday, 15 June 2005 13:59:35 (Jerusalem Standard Time, UTC+02:00)  #    -
Music | Personal
I've been developing Exchange and Outlook-centric applications for the last 4 years or so, and now I can tell you that I have absolutely no nerve endings in my forehead as a result (try bashing your head against the table, keyboard or wall repeatedly for four or so years and you'll see what I mean).

Developing applications for Outlook is an impossibly frustrating task; from the lackluster documentation (MAPI documentation is scarce, not to mention obfuscated and outdated) to unexpected behaviour (Outlook COM API shutdown events never occur) to missing features in high-level APIs (CDO is missing a lot of functionality, and Extended MAPI can only be used from C++ code) to depracated critical features (the password parameter for CDO.Session.Login is ignored outright). All that if you readily ignore proper bugs (CDO session logoff taking between 30 and 180 seconds, instead of - say - 0.02), COM Threading Apartment issues (CDO can only be used from STA threads - say goodbye to convenient remoting or web services) and the ghastly Outlook Object Model guard which made creating an entirely new Extended MAPI wrapper necessary to write the simplest code even for secure enterprises. Are you getting my drift here?

I distinctly recall doing some Outlook add-in work for a guy on Rent A Coder; what was originally intended as an Outlook add-in template on which the guy can build his own code turned into a fully-fledged commercial application, because the buyer simply could not afford to learn Outlook/MAPI basics. The good news for me was that the years of suffering resulted in my becoming something of an Exchange/Outlook expert and that this kind of knowledge pays very well indeed; the bad news are that it's literally impossible to do an Outlook project without reducing your life expectancy considerably (all you cardiologists must be really damn pleased about that).

Anyways I just read that according to Eric Carter I must despair no more! Apparently the new VSTO (Visual Studio Tools for Office) 2005, currently in beta, includes a proper managed API for Outlook. Hurray! Huzzah! Finally Microsoft delivers something for Outlook/Exchange programmers that might not utterly suck. Break out the champagne, everyone - our torment is over!

NOT. Unfortunately the managed API for Exchange is nowhere in sight (mind you, I've been promised an alpha version by a Microsoft premier representative back in September 2003 or so), and Exchange/MAPI programming is still a major hassle (what with the Exchange OleDB provider not functioning under ADO.NET, CDO being STA-only requiring workarounds, WebDAV being slow and often times irrelevant if Custom Forms are used, TNEF specs few and far between etc.) All in all I'd still rather choke than write an Exchange-based service. Fortunately it still pays well enough for me to afford a guy sitting behind me constantly, ready to invoke the Heimlich maneuver at any given moment.

Wednesday, 15 June 2005 12:30:07 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
# Tuesday, 14 June 2005
A bunch of tidbits to get you through the day:
  1. Three words: what. the. fuck.
  2. Do you recall that classic picture of the back of a girl? I recall seeing that picture demonstrating the graphic prowess of generations of computers and video cards (from the earlier Macs, through a friend's 286/VGA machine and the first true color-capable PGA video card another friend used to own). Ilya sent me a link detailing the original story. Interesting, if you're a history buff like me.
  3. This (Hebrew only) news post only goes to show that stupidity knows no bounds.
  4. While not American, I find the very concept of a senate intelligence committee voting on expanding an already-problematic Patriot Act extremely disturbing. What really yanks my chain, though, was that the vote was held during a secret meeting, to which members of the press were barred entry. Does anyone else consider the very concept of legislation in secret anti-democratic in the extreme?
  5. I came across an amusing definition of a particular class of bugs, dubbed heisenbugs. I think I'll start using the term.
  6. Finally, it appears we have an Aibo here at work! The damn thing is really disturbing. Photos and experiences to come (as soon as I get my ass off the chair long enough).
Tuesday, 14 June 2005 16:55:30 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
One of the most useless, slow and annoying features in Visual Studio.NET (2003 included) is its crappy "dynamic help" feature. It cripples the IDE performance, adds horrendous I/O overhead, pops up on top of the property sheet constantly and is completely useless to boot.

Gladly Fabrice managed to Come up with a way to get rid of it completely! Good riddance to bad rubbish. (Note that the registry change should be made in HKCU and not HKLM)

Update: Alternatively, go ahead and download VSTweak. It does the above and other things as well.

Tuesday, 14 June 2005 09:40:09 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
So I haven't had a proper vacation in ages. Sure, I've had days off on occasion, went on trips on Saturdays etc., but not a vacation per se. The last time I spent any amount of time doing nothing specific was about a year and a half ago when I went with my family to Eilat (the southernmost city in Israel, and its most [only?] popular tourist attraction).

A very good friend of mine went to live in Eilat a few months ago, so I figured since I haven't seen him for a while it might be a chance to make good use of a few days off (weekend combined with the Shavu'ot holiday). So midnight on Thursday I took a bus from my home town of Haifa to Eilat. I'll take this opportunity to extend a hand of friendship and understanding to the poor buggers who live in countries where several hours-long bus rides are a fact of life; busses suck. It's the most uncomfortable thing in the universe. I spent two 5.5 hour trips trying to find "the position" which would actually allow me to sleep a bit and failed miserably, the direct result of which is my coming to work today tired and quite off, not to mention cramped muscles, knees and back. Yech.

That said, Eilat kicks much ass. First off, coming to Eilat in your own vehicle is idiotic: to begin with parking is difficult (particularly around the city center, promenade and major attractions), the roads are quite packed and there's a constant stream of pedestrians crossing the street everywhere at all hours. Add to that the amazing availability of low-cost (particularly compared to the Tel-Aviv area) taxis that literally materialize out of thin air the second you raise your hand, where the cabbies are knowledgable and even courteous (in Israel, no less!). All that combined with the fact that everything is a short walking distance away (the entire city center, promenade included, can be crossed in a comfortable one-hour stroll) mean that it's cheaper, more efficient and certainly healthier and more enjoyable to just stroll around the city. The climate was difficult to get used to at first: the temperatures are considerably higher in Eilat than in my native Haifa bay area (37C vs 27C by day), however moisture is considerably lower - 20% vs 65%. The direct result is that it's generally quite a bit hotter but far easier to breath, and it's much more convenient to move around by foot: I'm now back north and a short walk from the bus to work got my all sticky, whereas in Eilat I would walk the 2km from my friend's house to the promenade and not feel the worse for wear.

Eilat is either a shopping heaven or a shopping nightmare, depending on what you're looking for and how hard you're willing to look. Being a free trade zone the prices in Eilat are VAT free - Israeli VAT is currently at 17% - the direct result of which is that certain commodities (CDs, cameras and books for example) are considerably cheaper, whereas simpler things are ridiculously expensive (like a can of coke). The promenade offers an insane variety of tidbits mostly aimed at tourists, but there's still pretty cool stuff to be found: I finally tried on a sharwal (also known as "fisherman's pants") and actually liked it in the extreme - I'm starting to understand the Japanese and the scots, even though the lack of pockets can be an encumbrance. Even the local shopping mall has its moments: every time I'm in Eilat I find myself spending $100-$200 on CDs; the local CD shop (Disc Club) is VAT free and cheap to begin with.

The beaches in Eilat are terrific. I've only been out of Israel once so I wouldn't know how they compare, but the beaches are clean, the water is cold and transparent and you get to swim alongside a huge diversity of wildlife. If you're into diving I probably don't have to tell you about the possibilities as the city's pretty famous for its diving attractions. There are various tourist attractions (desert trips on jeeps and camels, etc.) and it's also pretty relaxing just strolling all over the place on foot.

Being used to some pretty high quality pubs back north I was slightly disappointed with what Eilat had to offer in this area as it was particularly hard to find reasonable beer. I've found a couple places that sold Leffe Blond and Weinstephan (and the mandatory Guiness, Carlsberg, Heineken and local Goldstar that I personally dislike), but that's pretty much it. The pubs themselves however are pretty good - at least the ones I've been to (DeBar was absolutely terrific, thumbs up David!) Lastly, food-wise there are some really great places to eat in Eilat, my personally favourite being Casa Do Brasil: an absolutely terrific all-you-can-eat south-American grille. I make it a point to go there and crunch my body weight's worth in meat whenever I'm in Eilat, and this time was no different (with one exception: apparently they make the best beef fillet I've had yet in Israel). Basically everywhere you look there's great food in abundance, just take your pick and ask around for recommendations.

Tuesday, 14 June 2005 08:31:24 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
# Wednesday, 08 June 2005
I tried to help a colleague analyze an issue with an ASP.NET 1.1 application. The application was installed and worked properly on both an on-site server and a local mirror, in both cases under Windows 2000 Server with Windows 2000 SP3. The on-site administrator installed SP4 on the server, after which the application promptly stopped working properly: it didn't crash, it didn't register any errors what-so-ever and it didn't even time out, the client (in our case Internet Explorer) simply remained waiting for a response from the web server. My colleague attempted to install SP4 on the local server with the exact same result.

Oddly enough switching the application to ASP.NET 1.0 resolved the issue (but obviously is not an acceptable solution), so we tried re-registering ASP.NET 1.1 with aspnet_regiis.exe -i which had no effect. Obviously server restarts and iisreset had absolutely no effect either.

Eventually through trial and error we devised the following solution:

  • Remove the .NET framework 1.0 and its service packs (so that only 1.1 remains)
  • Reinstall .NET 1.0
  • Make sure to have a cup of coffee next to the machine at this stage (very important!)
  • Switch the application to 1.0
  • Test the application
  • Get another cup of coffee, make sure it's between 20cm and 1m from the development machine
  • Switch the application back to 1.1
  • Test again

This seems to have consistently resolved the issue with both local and on-site servers, but is obvious not a stable (nor acceptable) solution. It is also very non-scientific, because we haven't measured the volume of coffee in the mugs (mind you, neither was mine - I hardly ever drink coffee).

In short it's goddamn voodoo. I'm used to that kind of crap from Windows, but programming .NET has been impressively voodoo-free so far. I couldn't find anything similar with Google searches; has anyone ever seen (even better, solved) this issue before?

Wednesday, 08 June 2005 20:24:17 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
# Tuesday, 07 June 2005
I thought I wouldn't bother with the third Star Wars movie. I really did. Well no, not really; it took me exactly five minutes to snap out of it and stop lying to myself: I was going to watch the movie in the theater even though I knew it's going to suck, much like Matrix Revolutions or Terminator 3. I can't help myself. It retrospect it amuses me that I'm willing to spend money on a purely mainstream product I know there's no chance I'll enjoy, but then - it's Star Wars, if I didn't go I'd feel left out...

Anyway, bottom line - I did go and did see it in the theaters. And it did not suck. Not even remotely as much as I feared it would. Now admittedly I've read the various "it doesn't suck" quotes on the 'net, but being my usual sceptic self I had to see for myself. I wouldn't call it terrific, though; it has two major problems without which it would probably have been the best in the series: crappy dialogues that seem to have been written by a 6-year old (particularly the various Padme vs Anakin scenes), and Hayden Christensen. Not even Ewan McGregor, whom I hold in very high regard since Big Fish, was able to keep me from noticing how poorly the dialogue is written, and not even the really terrific action scenes and utterly astounding visuals could keep the grimace off my face whenever Anakin came on-screen. Add to that an anti-climaxic Darth Vader experience and what you have is a pretty decent movie that could've been the biggest thing since, well, Lord of the Rings. A crying shame.

I had a completely opposite experience with The Hitchhiker's Guide to the Galaxy: I was never a big fan of the series (yes, I read all of them) and had very low expectations. When the trailer came out I was plesently surprised to find that I thoroughly enjoyed it and laughed quite a bit, so it was with mixed feelings that I went to see it in the theater. Suffice to say that when the lights came on for the half-time break I was quite surprised: 45 minutes had gone by, and I didn't even notice. This movie is funny as hell! It's well-written, well-acted and even well-designed (visually); there are a lot of subtle jokes (as opposed to the incoherent in-jokes I originally expected) and this just made everything even better. I'm also very happy that the authors of this movie didn't give in to the fanboys, which means the authors did have some artistic license - I actually prefer the movie to the book this way. So in summary: this movie rocks. Watch it.

I had reasonably high expectations for Sin City: I like dark films and the trailer seemed very nifty. I had no idea what the movie was about though (never read the comic, nor could be bothered with previews) so I had no idea what I was getting into when I went to watch it. All in all I dub this film "high quality garbage." The production values are as high as it gets, but it doesn't stop the movie from being generic comic-based film-noir. The plot lines are overly simplistic and what the movie lacks in story-line it makes up for in insane amounts of gratuituous violence. When I made this argument a friend of mine challenged it, saying that I enjoyed Kill Bill immensely despite the level of violence which was at least as high; now don't get me wrong - I'm not squeamish and enjoy a good violence scene at least as much as the next guy, but the difference is that where violence in Kill Bill is intentionally portrayed as ludicrous and works to advance a simplistic plot (not to mention homage to '70s Hong Kong action flics), the violence in Sin City is not portrayed as ludicrous at all and works mostly to take the place of a nonexistant plot. It may work in the context of a comic, but I've never been a comic fan, so for me it merely detracts from a quality production. That said, the acting is top notch and the graphic design is absolutely beautiful, but as a whole Sin City is one movie I'm probably not going to watch again.

Finally I have a recommendation to make: grab Oldboy from the nearest Blockbuster and watch it. It's a Korean movie and I'm not sure how to best define it, but it's combination violent, disturbing and thought-provoking, with incredible acting, visual design and music to boot. Heartily recommended. Also, if you get the time, check out Kung Fu Hustle - I think it's in the theaters (in Israel) right now, or will be soon.

Tuesday, 07 June 2005 17:57:18 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal | Movies
Tidbit time:
  • Raymond has an über-interesting post on the potential security issues with C's strncpy, including an interesting bit of history.
  • Senthil Kumar's found out an interesting detail regarding the equality (==) operator in .NET System.String.
  • GAIM joins in on Google's Summer of Code project. I just wish I were a student living in the States with enough free time...
  • Remember the old Amiga game Cannon Fodder? Well I found this promitional (?) video for the CD-32 version of Cannon Fodder - so funny it's disturbing.
  • A pretty interesting post at The Register claims Microsoft's Windows 2000 operating system was a complete flop as far as security's concerned, but it marked an interesting shift in the company (and therefore the industry).
  • I don't find myself completely disagreeing with Roy Osherove that often, but his his take on The Grudge is completely opposite my own: the movie was not scary at all, for the most part very poorly acted and I came out of the theater feeling as though I've just wasted 37 NIS (the price for a preordered movie ticket in Israel, approximately $9 US - way too high anyway) and two hours of my life. On the other hand, I've found White Noise quite appealing; it didn't scare me proper (only System Shock 2's managed to do that in recent memory), but it did leave me unsettled, which is also pretty unusual. Probably the only good horror/thriller I've seen in ages is 2002's The Ring. I openly admit to not having seen the original Japanese version, nor have I seen the supposedly great The Sixth Sense. Working on it.
Tuesday, 07 June 2005 17:00:40 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal
# Monday, 06 June 2005
Paniq came out with a new album a couple of weeks ago, the second track from which is called Elektronische Musik (can be downloaded from here). It's in German though, so make sure you read the lyrics.
Monday, 06 June 2005 09:38:15 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal | Music
# Sunday, 05 June 2005
Despite my lately-discovered tendency for open-source evangelism, I constantly use proprietary software in my day-to-day computer exploits. Here's a list of a few of the more useful ones:
  • Everyday use:

    • Windows Live Writer - Microsoft's blog client/word processor. Microsoft entered a saturated market full of mediocre and/or abandoned software, and simply did everything right from the get-go. This is one hell of a tool - stable, convenient and extensible. Recommended.
    • XMPlay - a great audio player for Windows. Has excellent module playing capacity, plays streaming audio perfectly, basically does everything WinAmp does only better and in a much lighter package. I have yet to find a (preferably portable) open source platform which compares..
    • Microsoft Outlook - Outlook has its moments, but I've enjoyed working with Mozilla Thunderbird a lot more. I originally switched to Outlook for its PDA synchronization capabilities (via ActiveSync); since this is no longer an issue for me, I'm planning on switching back to Thunderbird as soon as I can find the time to take care of the migration.
    • Total Commander - I simply can't work properly without a Norton Commander clone. I switched from Servant Salamander to Total Commander and so far never looked back. An open-source replacement is definitely #1 on my wish list though.
    • AVG Free Edition - the free (for home use) version of the AVG Anti-Virus is an impressive piece of software. It's lightweight, nonintrusive and simply works. I'm sceptical that open-source antivirus software can be as up-to-date and effective as proprietary software.
    • Windows XP Professional - bought a copy with my laptop, and can honestly say I do not regret it. It is impressively full-featured, completely stable, has terrific hardware support (I will tell the story of my Linux hardware woes in another post) and despite being very powerful it is also very intuitive to work with.
    • Trillian Basic - a free multi-IM client (I use ICQ and MSN). It's not lightweight, nor it is the fastest, but from all the multi-IM clients I've used (GAIM, Miranda, Trillian) it has the best combination of stability, features and looks.
    • ACDSee (at work) - Best of breed photo browser. The new version seems quite bloated, but it's still the best program of its sort I've used (since version 3...)
    • XnView (at home) - Great photo browser that's fairly quick and lightweight. Free for non-commercial purposes, basically does everything almost as good as ACDSee.

  • Development tools:

    • Visual Studio 2005 - being a primarily .NET developer, this is an absolute must-have. It has a lot of issues though, and missing some features that I can only enjoy with ReSharper.
    • JetBrains ReSharper -the quintessential upgrade to Visual Studio. Improved autocompletion and syntax highlighting, fully customizable code reformatting, code navigation, refactoring, code templates, unit test runner and more, all in one package. I've been using this since version 1.0 after seeing a presentation by Roy Osherove, and nowadays I find it daunting to work without it.
    • Araxis Merge - best of breed commercial diff and merge utility. WinMerge and the various diff/merge utilities that come with source control provides (Vault, Perforce etc.) simply can't compare.
    • Stylus Studio - I tried this out as an alternative to XmlSpy a few years ago and got hooked. Although it's still a terrific XML IDE, unfortunately they have very annoying registration, activation and upgrade policies, so I may yet take XmlSpy for a renewed spin.
    • SourceGear Vault - the source control provider we use at work. It's like a moderately improved version of SourceSafe: reasonably fast, fairly full-featured and mostly works. I've used Microsoft VSTS and Perforce since and both are far superiour, but also considerably more expensive.

  • Occasional use:
    • Nero Express - a lightweight version of the fully-fledged Nero. This has been my CD-burning software of choice for about 6 years. Since a copy came with my laptop I haven't found the motivation to seek a proper open source replacement yet.
    • PowerDVD 5.0 - probably the only reason I still use PowerDVD is because it came (OEM) with my laptop. I don't watch many movies on my laptop so I couldn't be bothered to find an open-source replacement.
Sunday, 05 June 2005 18:34:44 (Jerusalem Standard Time, UTC+02:00)  #    -
Personal | Software
The Thunderbird nightly build for yesterday seems to kick quite a bit of ass. It's just as stable as the 1.0.2 stable build, has a useful spellchecker, works like a charm with the BiDi Mail UI extension and feels over-all very solid. Can't wait for the official 1.1, so I could recommend it to other people.
Sunday, 05 June 2005 11:12:05 (Jerusalem Standard Time, UTC+02:00)  #    -
Software
Yes, CSS2 is very cool, but apparently way more problematic than I originally thought. It seems even minor details are the cause of much consternation, giving headaches to programmers and designers alike.

The whole thing started when I noticed that the blog title ("banner") was not displayed properly on my grandfather's machine (Internet Explorer 6); it appeared as though the text class wasn't handled properly. Give or take 20 minutes later I found out that I accidentally used a class="banner" declaration where in the CSS it was defined as A.Banner. Apparently Mozilla was misbehaving in ignoring the case. At first I thought Microsoft finally got something right with Internet Explorer 6, then figured I might as well delve a little deeper into it and figure out which behaviour is right.

Enter the CSS2 specifications, specifically section 4.1.3 Characters and case, where it is clearly stated that CSS is assumed to be case-insensitive "except for the parts that are not under the control of CSS". This a very subtle distinction, which apparently goes on to include the "... values of the HTML attributes "id" and "class"".

Now, seeing that I love to be standards-compliant, I naturally included the correct <!DOCTYPE> declaration in the beginning of my blog template, putting Internet Explorer in standards-compliant mode; unfortunately I did not read the CSS2 specifications carefully enough and therefore did not properly understand the case-sensitivity issue.

Therefore I will quote what I perceive is a very good piece of advice from Zen and the Art of Website Maintenance:

Last but not least, let me touch on the issue of case sensitivity. CSS selectors are not, by definition, case-sensitive. However, if the page language within which they are used is case-sensitive, then they become case-sensitive. HTML is not case-sensitive [HTML 4.01 is, though, so take care! -TG], so CSS is not when used within it. But XHTML and XML are case-sensitive and so, therefore, is any CSS used within it. Given this, the only sensible choice is to regard all CSS as case-sensitive: this will save you from considerable pain in the future.

And to sum the whole thing up: yes, Microsoft seem to have done something right for a change, and Mozilla does indeed misbehave (unless, which is just as likely, I've missed another subtle but important issue...)

Sunday, 05 June 2005 10:05:04 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
# Wednesday, 01 June 2005

One of the features carried over from my first website (amazingly still available) is a digital rendition of the ingame music from the Amiga version of Defender of the Crown. Back in the year 2000 I had this to say:

Defender of the Crown

Defender of the Crown is a computer game by Cinemaware, originally released in 1986 for the Commodore Amiga and later ported to every major platform (including the PC, C64, ZX80, NES and Atari ST). The game is branded an "interactive movie" and was one of the earliest Amiga games released. It was used by many Amiga enthusiasts to demonstrate the abilities of the computer, and with good reason: the game had beautifully drawn graphics by James D. Sachs and never-before experienced atmosphere.

One of the most prominent aspects of the game is its music. I've heard the game's music throughout my childhood as I went to a neighbouring Amiga owner and played this and many other wonderful Amiga games. The music was composed by Jim Cuomo, who now pursues a career as a musician.

The music here is recorded from the Amiga version via an Amiga emulator, specifically Fellow 0.3.3. Due to an emulator handicap the WAV files produced had some bugs which I fixed using Sound Forge 4.0. The tunes are now almost identical to the original Amiga ones (as verified using my A500+), depsite a somewhat shoddy MP3 conversion using MusicMatch 4.0.

The tunes provided are distributed with permission from Jim Cuomo, who was also gracious enough to send me one of his CDs entitled Gameplay, which contains excellent revisited tunes from several computer games he had composed music for. He also permitted me to post the Defender of the Crown tunes from the same CD - they will be added in a few days.

I am still, unfortunately, missing the Love theme (rescuing the princess) and the victory/loss themes, the latter of which will be posted as soon as I finish working on them.

At the time free hosts were usually limited to 5 or 10mb per user, and my having no desire to pay for storage meant it took more than a few days to post the Gameplay sound snippets - more like 5 years. Also, scratch the comments about Fellow 0.3.3 and MusicMatch 4.0; I've re-recorded some of the tunes from my A500+ (softkick'ed to 1.3) and re-encoded everything with OGG Vorbis (which means stereo [in the new recordings] and much higher quality for just slightly larger files - well worth it in my opinion). When I find the time, all themes will be re-recorded from a proper A1000 (512k, kick 1.0) through a more modern soundcard with lower SNR. I also pledge to re-rip and re-encode the GamePlay tracks properly.

Avast! Files off ye starboard bow!

In-game recordings:

GamePlay CD tracks:

Wednesday, 01 June 2005 22:10:49 (Jerusalem Standard Time, UTC+02:00)  #    -
Gaming
I've updated the blog's design to something a little more to my taste. I hope you like it, and would very much welcome comments!

I've been mucking about for a few hours with dasBlog themes, CSS2 and relevant technologies and learned a great deal. CSS2 is so damn cool! Back in the day - what, four years ago? - I used to have a bunch of perl scripts to do the style/content seperation for me utilizing a bunch of macros. Nowadays it's not only a great deal easier to seperate the content, CSS2 also helpes you avoid a lot of HTML hacking and HTML bloat: no more hacking tables where design elements go. It kicks ass!

That said, there are a few things that are nontrivial with CSS2. For example, check out the blog title; notice how the horizontal line stops next to the text. The border itself is easy enough (see next section though), but it took me a little while to figure out how to make it 'stop'. Eventually I settled for the following hack:

  1. A <div> section acts a container for the entire blog title and contains two additional <div> sections
  2. Both sections have the exact same content. The first section maintains the appropriate flow and layout for the page but is not itself visible (it has style="visibility: hidden")
  3. The second section floats over the entire container (style="float: left")
  4. This is where it gets interesting. The lower part of the second section must cover the lower border of the container; originally I did this with a <br&rt; tag, but as I suspected this proved problematic when the client text size was changed. Eventually I settled for an additional padding-bottom: 2px; style for the second section, which solved the issue nicely.
  5. Finally we want the horizontal border to stop before it hits the text; the solution couldn't be simpler: just add padding-right: npx (in my case I used 5) and you're good to go.

Next stage is to find out how to gradient the border when it gets close to the cell. Also, the whole thing might've been easier with a table and a couple of columns, but not nearly as fun :-)

Finally, I have to rant: Microsoft IE programmers are a bunch of shitcocks. Even in standard-compliant mode (why in the hell do I have to, as an author, worry about IE modes anyway? Why isn't it standards-compliant to begin with?) the damn thing just doesn't process CSS properly. In my case it turns out that dotted borders simply do not work in Internet Explorer (except for Mac IE version 5.5 or something bizarre of the sort); if you're reading this post using Internet Explorer you're probably seeing a solid border around the post itself. This is NOT the correct behavior. IE displays dashed borders instead of dotted ones; this looked aweful, so I used a couple of hacks to get IE to display solid borders instead. And this is just one of myriad bugs. I wonder if they'll get fixed in IE7, but would advocate a move to Firefox regardless.

Wednesday, 01 June 2005 17:16:25 (Jerusalem Standard Time, UTC+02:00)  #    -
Development
Me!
Send mail to the author(s) Be afraid.
Archive
<2026 June>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
All Content © 2026, Tomer Gabel
Based on the Business theme for dasBlog created by Christoph De Baene (delarou)