 Wednesday, March 15, 2006
I haven't been working with Visual Studio 2005 that much thus far; the
project I've been working on for the last 8 or so months was launched before
VS2005 came out (around beta 2), and given the relatively schedules between
milestones (first version was to be demoed in about two months) it seemed far
too risky to invest in a codebase around the yet-unproven features
of .NET 2.0.
I still think that was the right decision. I've been doing some work with
Visual Studio 2005 lately, primarily on PostXING and other minor projects, and have
come to the conclusion that Visual Studio 2005 is practically
unusable. The IDE is even heavier than Visual Studio 2003, ridiculously
slow and extremely prone to stalls; it feels like working on a huge solution in
VS2003 with a buggy alpha version of ReSharper. The debugger has an incredibly
annoying tendency to just stall for tens of seconds at a time whenever I step
in/out/over. The IDE feels more like NetBeans than Visual Studio, and is about
as responsive, but while NetBeans can be forgiven as a relatively new - and
partially open source at that - effort, Visual Studio 2005 is an
evolutionary step on a reasonably mature IDE that itself is the 7th version of a
12 or so year-old effort.
Too bad I can't really stick with 2003, it's just not an option - but I would
rather have my trusty old combination of VS2003 and R# (which in itself is not
without issues) than the heap of bugs and unoptimized UI that is VS2005. At
least until VS2005.1 comes along (maybe they'll launch VS2006 with .NET 2.1,
like they did with 2003...)
 Tuesday, March 14, 2006
I didn't really believe there were any genuinely crapy onboard sound card
this day and age. Being a gamer and audio enthusiast I've always considered
sound cards to be one of the most important aspects of my PC (along with the
monitor, keyboard and mouse). My PC soundcard timeline goes something
like:
When I bought my latest desktop at the end of 2003 I had a
newly found faith in onboard solutions; onboard network adapters were
finally up to snuff and the latest SoundStorm (the onboard sound
solution found in nForce2-class boards) was
being heralded by the online hardware press as the next best thing.
Seeing as I was serving my stint in the army at the time and was relatively low
on cash I opted to save money on a dedicated sound card and went with the
onboard solution. This turned out to be a mistake; the audio quality of
SoundStorm was not on par with the five year-old Live! and has pretty major
bugs in the hardware acceleration layer; mixing would sometimes clip -
particularly when very low rumbles were mixed in the general sound, as in System Shock 2's
elevator shaft - and the EAX implementation was so poor it was next to
unplayable. There were also major compatibility issues, such as the sound cutoff
problem prevalent in a lot of Ubisoft
titles and the extreme sound stuttering with Half
Life 2. This was probably the game developers' fault for not ensuring
compatibility, but nVidia did not seem overly inclined to work with developers
to resolve these issues; conversely I would seriously doubt Creative would stake
its reputation on this sort of bug.
At work I have an Athlon 64-based machine with the ubiquitous onboard Realtek
AC97 codec (Gigabyte
GA-K8NF-9 mainboard). I constantly listen to my music collection, streaming
audio etc.; I don't game, I don't edit audio, I don't do anything that requires
more than a passable audio solution. The onboard audio should have been
perfectly acceptable, and so it was. Until a few days ago when I started
noticing crosstalk from the I/O subsystem to the audio lines; in other words,
there was a weak sort of static hiss which would change pattern and frequency
depending on how hard my hard drive was churning. I probably wouldn't have
noticed that with lesser headphones, but that's no excuse! Why is it that in the
year 2006, 18 years after the first commercial sound card for the PC was
developed, I can't even get reasonable, 2D stereo audio from onboard
solutions?
The only reasonably-priced sound card in the market at the moment is the
Sound Blaster Audigy 2 Value (around $70 in Israel - the price of a new Audigy 4
in eBay!). Guess I better start hammering at those auctions.
 Sunday, March 12, 2006
ReSharper EAP build 222
totally barfed on one of my source files and I was too lazy to reinstall build
219. The result? I was working on this one file for a couple of hours without
any help from R# (no advanced syntax highlighting, static analysis, improved
intellisense etc.)
I would like to reassert my statement that R# is the best thing that happened
to C# programmers since, well, C#. Working with Visual Studio 2003 and without
R# feels a little like trying to use a pen with an amputated
finger.
 Friday, March 10, 2006
Chris has finally released a beta
version of PostXING v2.0 (an opensource
blog client for Windows)! The development version is pretty stable and usable,
but the more people that use it and post
bugs and feature requests the more motivated the developers get 
Grab it from Project
Distributor (requires .NET
2.0).
 Thursday, March 02, 2006
I've been working with build 219 for about a week now. With Visual Studio 2003 it's perfectly stable (only one exception so far), seems considerably faster and I haven't encountered any major (and very few minor) bugs so far. I haven't worked with Visual Studio 2005 at all over the last week (sorry Chris... project schedules  ) so I've nothing to report on that front. I'll keep the ReSharper: New And Improved post up-to-date, as always.
 Sunday, February 26, 2006
While working on one of our projects at Monfort, we encountered a very
strange problem. The project was dependant on several COM objects, one of which
queries a database according to a predefined interface and returns the results
in an ADO Recordset. Our project is key-signed, so
we had to import the COM objects using the .NET SDK tlbimp utility; everything worked perfectly until we added
the querying logic that receives the Recordset
result object. The class loader would throw an exception on calling the relevant
method (it was invoked dynamically) claiming that the "referenced assembly adodb.dll could not be found." To quote Monty Python: this is, of course, pure
bullshit. The imported ADODB wrapper was right there in the directory. I
couldn't figure out the problem in a reasonably timespan, and finally decided to
ignore it altogether by using the ADODB primary interop assembly distributed
with .NET 1.1. I added a reference to the ADODB PIA and everything compiled and
seem to run fine.
This turns out to have been a mistake. I was absent from work for a few days
getting ready for a test, and came back to find that a colleague has encountered
the same problem but elsewhere; examination of the compiled executable's
references (via ILDASM) revealed that it was in fact
generated with two separate references to ADODB with two different public
key tokens. One of the references was the PIA, which was just peachy, but
the other one (in the hidden namespace ADODB_19 of
all things) referenced a non-existing assembly with the same public key
token we sign our other assemblies with. I concluded that there must be
some sort of problem with the build process - left over dependencies that
weren't compiled properly or something of the sort. Cleaning up the build
directory and rebuilding did not alleviate the issue. In desperation I tried to
manually edit the project files but couldn't find anything.
I then decided that one of the COM object wrappers we created using tlbimp was, for some reason, referencing a non-existing
version of the ADODB wrapper; I went through the wrapper assemblies one by one
and managed to find the offending library. Turns out that tlbimp does not, by default, look for primary interop
assemblies and opts to import ADODB every single time (singing the new wrapper
assembly accordingly). When I deleted what I thought was a redundant ADODB
wrapper assembly, I in fact deleted a version of the wrapper that was referenced
by one the imported COM wrappers. So now all I had to do was add a /reference: directive to the tlbimp call in our build script and voilla - everything
works!
Only it doesn't. Another COM object which references ADODB was still
generated with the mangled assembly reference (i.e. it still referenced the
wrapper with our own public key). I retried all sorts of tricks and couldn't
figure out why it was generated that way; I eventually tried to re-import it
manually with a /strictref directive, which resulted
in the following error message:
C:\Temp>tlbimp SomeComServer.exe
/keyfile:PublicKey.snk /reference:"%PROGRAMFILES%\Microsoft.NET\Primary Interop
Assemblies\ADODB.dll" /strictref Microsoft (R) .NET Framework Type Library to
Assembly Converter 1.1.4322.573 Copyright (C) Microsoft Corporation
1998-2002. All rights reserved.
TlbImp error: System.ApplicationException
- Type library 'ADODB' is not in the list of references
A fit of confused rage and an hour later I sat at the computer again to try
to figure things out; finally (as usual) it was just a matter of asking Google
the right
question:
The problem was that MyCOMLib.dll was compiled against ADO 2.5 and
the PIA released by MS is registered only for ADO 2.7. I don't have access to
the COM component to recompile it for ADO 2.7, so I had to get a PIA for ADO
2.5.
Further research into this turned out a little
detail most .NET developers are probably unaware of:
Issue 7: You experience problems working with components that
expect ADO 2.8 interfaces
The ADODB PIA that is included with Visual Studio 2005 is the same
component that was included with Visual Studio .NET 2003 and was built by
using the Microsoft .NET Framework 1.1. The ADODB PIA was built to interact
with ADO 2.7 interfaces and has not been updated to work with ADO 2.8
interfaces.
Therefore, attempts to use the ADODB PIA together with components that
expose ADO 2.8 interfaces will fail. This
scenario is not supported with the ADODB PIA.
Oh, great job, Microsoft! You spent so much time on the interop issues with
.NET (of which, by the way, there is an impressively small number), came up with
the concepts for Primary Interop Assemblies, Publisher Policy Files and
everything else that went into .NET in order to prevent DLL hell, you tout
Primary Interop Assemblies as a way for component publishers to guarantee that
their components are usable under .NET, and finally you go on to release a PIA
for one of the most widely used COM objects in Windows which only
supports one version!
So there you are, I hope this might save someone the frustration of having to
figure all of this out on their own.
As a footnote, ILDASM is one of the worst tools
I've ever used. I can't believe how Microsoft managed to wrap a useful debugging
tool with one of the most frustrating and least usable UIs I've ever
encountered. Don't know what I'm talking about? Try double-clicking on a node
(method, manifest, whatever). You can't run a search through the text; worse
still, you can't even Ctrl+A, Ctrl+C then paste into notepad! Only now, days
after I needed it, did it occur to me to rightclick and "select all". I suppose
it's OK if you don't follow the classic usability patterns and guidelines in a
small and esoteric development tool, but please try and exercise a bit of
common sense...
I couldn't access the comments on my own website for an indeterminate amount of time (at least a week) and had to dig in the sourcecode to find the culprit (now described in bug 1439112). To make a long story short, it appears I got my dasBlog cookies mangled, so if you have the same issue either contact me or get rid of all cookies from www.tomergabel.com. (If you're using Firefox and don't know how to access your cookies, here's how. If you use IE just go to d:/Documents and Settings/ username/Cookies).
 Tuesday, February 14, 2006
Well not as such, no, but it sometimes feels like way. Particularly today,
when I wasted about 40 minutes on a bug that should've taken me less than 1
minute to work out, simply because of issues with the Visual Studio debugger
(2003, mind you - you'd think after three years it would be a mature
product?)
Check this out, for example:

m_ltInfer is of a class deriving from DictionaryBase. What the hell am I
supposed to understand from this? The fact that I can't see my dictionary is bad
enough, but what's up with those blank spaces? And if that wasn't bad enough,
the immediate window's expression parser - limited to begin with - is flatly
lying to my face:

op.Parameters is an array. It has a Length property. The
intellisense displays it. The managed expression parser prints it out as the
default property for arrays. But attempting to access any of the object's
properties, or even its ToString() method, results in a "... does not exist"
error message. What the hell is going on here?
 Monday, February 13, 2006
So I'm sitting at work, listening as I usually do to all sorts of music in
the background. I found myself listening to the excellent soundtrack written for
A Clockwork
Orange (which also happens to be one of the best movies I've ever
seen). Some of the classical pieces there have a distinct ring to them,
as if they've been performed in a very peculiar and distinct (somewhat
synth-y, for lack of a better word) style. It kept bugging me that I've
heard this someplace before, and after some 40 minutes it finally struck me: it
sounds highly similar to the soundtrack written for the movie Tron (also highly
recommended).
I took a better look at the tracks to see who wrote them - a Walter Carlos.
This was even more surprising for me, because I recall the Tron soundtrack
credited to a Wendy Carlos. What's up?
Some digging in
wikipedia proved once again extremely fruitful:
Her first six recordings were released under the name Walter Carlos,
although, being a transsexual woman, she had already changed her name from
Walter to Wendy. In 1972, Carlos underwent gender reassignment therapy. The
last release to be credited to Walter Carlos was By Request (1975). The first
release as Wendy was Switched-On Brandenburgs (1979). Carlos's first public
appearance after her gender transition was in an interview in the May 1979
issue of Playboy magazine, a decision she would come to regret as it brought
unwelcome publicity to her personal life. On her official site, her transition is
discussed in an essay stating that she values her privacy on the
subject.
The universe never ceases to surprise me.
I eventually get fed up with the various ReSharper builds I've been
using for the past 7 months; the stability has been going steadily downhill
since build 208 and performance is yet to improve. 217 originally seemed stable
but turned out to be useless both for VS2003 and VS2005. I've been waiting in
vain for a build as stable as 208 (which was practically beta-ready) but to
no avail.
Eventually I broke down and installed the official 1.5.1 (build 164) for
VS2003; unfortunately there are no official builds for VS2005 as of yet. I must
say working with the official version is a pleasure - it's absolutely stable
and, even more important, fast. So fast, in fact, that it feels just as
responsive as the "regular" VS2003 IDE is, and the only drawback is a small
increase in startup time.
I'm tenacious so I'll probably check the beta builds again when 218 is out,
but in the meantime I can't help but feel pleasure in working with a mature
product.
|
 Be afraid.
Navigation
Categories
Archive
| September, 2008 (4) |
| August, 2008 (2) |
| July, 2008 (3) |
| June, 2008 (5) |
| March, 2008 (1) |
| February, 2008 (2) |
| January, 2008 (5) |
| December, 2007 (8) |
| October, 2007 (2) |
| September, 2007 (4) |
| August, 2007 (2) |
| July, 2007 (6) |
| June, 2007 (5) |
| May, 2007 (2) |
| April, 2007 (1) |
| March, 2007 (2) |
| February, 2007 (2) |
| January, 2007 (8) |
| December, 2006 (12) |
| November, 2006 (3) |
| October, 2006 (2) |
| September, 2006 (10) |
| August, 2006 (2) |
| July, 2006 (4) |
| June, 2006 (9) |
| May, 2006 (6) |
| April, 2006 (12) |
| March, 2006 (6) |
| February, 2006 (7) |
| January, 2006 (10) |
| December, 2005 (8) |
| November, 2005 (5) |
| October, 2005 (12) |
| September, 2005 (8) |
| August, 2005 (22) |
| July, 2005 (12) |
| June, 2005 (26) |
| May, 2005 (7) |
Blogroll
Search
Advocacy
|