September 2006

6 posts

« August 2006 | Main | October 2006 »

September 11, 2006

Vista Issues

I have been testing my software under Vista pre-RC1 (5536) and noticed some issues. My multithreaded application is no longer as responsive as it was under Windows XP during scanning. I had done the right thing and separated the scanning code from the UI thread; I also gave the scanning thread a Below Normal thread priority. I used the AnimateWindows from Win32 to animate various child windows in my application. However, the Vista’s Desktop Window Manager doesn’t play well with AnimateWindows, leaving the windows being animated undrawn, so I will probably remove the animation. Shame. Here’s what it would looked...

Framework Bug #1

This snippet is from the file _baseoverlappedasyncresult.cs in the SSCLI project (aka Rotor). This function is used in the Base Class Library of the .NET Framework. private void InternalFree() { m_Overlapped = null; m_PinnedObjects = null; if (m_NativeOverlapped != IntPtr.Zero) { unsafe { Overlapped.Free((NativeOverlapped*) m_NativeOverlapped); } m_NativeOverlapped = IntPtr.Zero; } } In this snippet is a bug that eluded Microsoft's many static analysis tools (RaceTrack, Spec#, etc). See if you can find it.
September 08, 2006

Great Developers

Joel have been talking about finding great developers. Every bloggers seems to have their own ideas about what makes a great developer. [1] [2] [3] [4] Maybe I do too. We could ask widely-acknowledged great programmers, like Stiff did, what makes a great programmer. Ironically, one of these great developers, Linus Torvald, has terrible habits that violate the criteria of each blogger. Paul Graham, who wrote about Great Hackers, also notes that is difficult to recognize a great hacker without working with one. So who are the great hackers? How do you know when you meet one? That turns out...
September 07, 2006

High Level Languages & Performance

I suspect that the performance advantage of procedural languages does not necessarily exist over newer exotic languages. Over time, this should the performance gap should lessen. An ecosystem of processor features, developer tools, and algorithms have evolved over the past quarter century that favor the Algol-based languages like C and C++. Fortran once regularly outperform C, probably in part, because it was developed and popularized much earlier. A large part of performance advantages in a language is due to the quality of the compiler and tools , which is usually dictated by the popularity of a language, its commercialization, and...


Last April, I wrote about a profound design change I was making into my document-based applications, which was to make all my document data structures immutable--standard practice in some functional programming languages. My original motivation was to make each of my model objects an expression that I could work with in a functional way and apply transformation rules to. (My first attempt a few years ago failed because I earlier assumed that mutability was required for editable documents.) The result is substantially less code and tight integration between my document and my AI framework. From the user's point of view,...

Software Design Philosophy

A year ago, I wrote that I would soon describe my software design philosophy in developing commercial desktop applications. I never actually did write directly on my philosophy. I still had unresolved design issues, which I have since resolved through making document and view objects immutable. I also felt that it was perhaps too early to disclose some information, especially after recalling Joel Spolsky's article "Mouth Wide Shut." On the other hand, I did offer glimpses of my approach through various seemingly random posts like Silver Bullet and Software Reliability. I also did mention a preliminary wordprocessor I was working...