Over at the DirectX blog, they’ve announced the Direct2D Debug Layer. For those of you using Direct2D, this will be a welcome addition to figuring out problems with using the API.
Over at the DirectX blog, they’ve announced the Direct2D Debug Layer. For those of you using Direct2D, this will be a welcome addition to figuring out problems with using the API.
Fanboy.com has an interesting post about DEC’s attempt to enter the PC market:
This is an promotional film produced by Digital Equipment Corporation (DEC) documents their attempt to enter the PC market in 1982. DEC owned a major chunk of the mini-computer market and to their credit they got the idea that the PC was the wave of the future and they knew they had to compete.
VMWare Workstation 7 now has better support for 3D graphics with Direct3D 9.0c with Shader Model 3 and OpenGL 2.1 support. I’ve always liked VMWare for testing, particularly for testing installations. The one drawback with it has been the 3D support; sure, it was always great for testing business applications in multiple OS environments from a single machine, but for graphics applications it was pretty weak. Where I work, we recently bumped up the minimum OpenGL requirement to version 1.4 and that was not supported in VMWare Workstation 5. Now that VMWare 7 is out, I’ll try the upgrade and see how the new version supports our applications. I’m not expecting it to be as fast as a native machine, but I’m willing to pay a performance penalty for an environment where I can reset to known conditions quickly. Our applications are content creation applications, so while its annoying to have them perform poorly during testing, its not going to make the testing worthless.
Fellow MVP Nick Gravelyn has written a two-part article series on getting started with SunBurn.
When developing Direct3D code using test-driven development, you need test doubles to stand in for interfaces used by your code. This way you can control the interaction of your system under test with its environment. This post is the first in a series of posts that discuss several ways you can create test doubles for the COM interfaces used by a Direct3D application.
I’ve created a project on codeplex, http://d3dgraphicspipeline.codeplex.com, to house the sample code from my book. It will also be used to distribute sample code on other Direct3D related articles that I write on this blog. Initially you will find the code from my article on description helpers, but I will be uploading the sample code from the book there in the next few days.
Windows Installer provides a rich set of standard actions that handle the typical needs of an installation: installing files and folders, manipulating the registry, searching for existing resources in the registry or the file system, controlling Windows services and so-on. Custom actions are handy things for when you need to do some custom processing that isn’t covered by one of the standard actions. You can customize your UI experience by invoking an action when the user interacts with a control by publishing a DoAction control event for the control. This post describes some guidelines (and one workaround) for custom actions invoked by the user interface in a Windows Installer MSI package.
Wizard dialog sequences are common in Windows Installer packages as they lead the user through a series of questions to customize the installation of a product. Welcome to the install, select the installation directory, ready to install and so-on are common dialogs present in the wizard dialog sequence. Sometimes you need to make a choice between two dialogs based on the user’s input, however:
So you’ll need to branch to different dialogs on the Next button of the Installation Type dialog (and the Back button of the Install Location dialog) based on the user’s input. This post describes the best way to achieve this branching dialog behavior in Windows Installer, using Windows Installer XML (WiX) as the authoring tool.
My first exposure to Macintosh programming was with THINK’s Lightspeed Pascal in 1988. I was a graduate student at the University of Utah and the teaching assistant for the introduction programming course using Pascal. The student machines were Mac SEs running Macintosh System 2. Pascal provides a fairly encapsulated runtime environment to simplify its use in teaching programming, so it wasn’t really “Macintosh programming” although you could interact with the toolbox if desired.
Twenty years later, I find myself working at a digital content company and our content creation applications support both Windows and Mac OS X as a customer platform. While we largely rely on UI toolkits to isolate our applications from UI differences between platforms, we still need to build and debug code on Mac OS X. All of this work is done in Xcode. I was in a weird situation: I needed to know how to use Xcode, but I didn’t need to know how to program Mac native applications. I needed a book that would tell me about Xcode and how to accomplish typical developer tasks in it, but I didn’t need a book that would spend too much time on Objective C, Carbon APIs, Cocoa APIs and other Macintosh specific coding tasks. “Xcode 3 Unleashed” by Fritz Anderson is just the book I needed.
Jonathan House passed along a link to Testing Race Conditions in Java, a post from google’s open source blog. It describes ThreadWeaver, a tool for unit testing concurrency in java.
This reminded me of a recent article in MSDN magazine Code Coverage for Concurrency. It describes SyncCover a tool for measuring code coverage in unit tests involving concurrency.
Java and C# both provide language level primitives for synchronization. This makes it difficult to write unit tests that force the code down different paths relating to concurrency and synchronization. The nature of the language level primitives doesn’t lend itself well to faking them out by encapsulation through interfaces or virtual methods.
C++ takes a library approach to concurrency and synchronization. While I haven’t tried this yet myself, I have a feeling that the library approach would make it easier to control the playout of various synchronization and concurrency scenarios when writing unit tests.
Resource management can be a challenge for Direct3D applications. Before DirectX, display adapters had limited amounts of fast device memory and programmers had to manage that memory manually in order to achieve the best performance. The Direct3D API provides different memory pools to allow the application to specify the lifetime management policy of a resource.
In my post on agile code reviews, I described how we were attacking our code through automated refactorings that we trusted to apply without tests. Mostly we applied a series of Extract Method refactorings to long methods in the process of performing a Compose Method refactoring on the long method. Eventually, your team will run out of situations where you can apply automated refactorings to improve the design of your code and you’ll have to start applying actual code changes. Several of the commenters on my previous post remarked that making changes without unit tests implies risk that can only be averted with sufficient manual testing and that such risk is better mitigated by automated tests. In this followup post, I’ll describe the results from our team at applying the decoupling techniques described by Michael Feathers to our legacy code so that we could backfill unit tests onto the legacy code in preparation for a design change we want to make.
Gery Derbier forwarded a link on the agile list for “Exploding Software Engineering Myths”, an article by Janie Chang at Microsoft Research. Chang describes the research of the Empirical Software Engineering and Measurement (ESM) research group at Microsoft . The group investigated a number of software engineering myths empirically using the large software engineering teams at Microsoft.
The Salt Lake Agile Roundtable meets the first Thursday of every month at the Borders bookstore in Murray, UT from 2pm to 5pm. These are my notes from the October, 2009 meeting.
Check out hachti’s gallery A few impressions from Kiel for a peek at a large stash of vintage computing gear in Kiel, Germany. Apparently they need to downsize this huge collection into a smaller permanent exhibit. There are some early Tektronix storage scope graphics terminals showcased there, among other things.
C++ is a language that lets you express yourself in many ways. One of the ways you can express yourself is with very low-level detail oriented code. The kind that deals with raw character pointers instead of string classes, the kind that has you writing your own linked list instead of using std::list. Many times in C++ programming newsgroups and on gamedev.net we counsel new programmers to use the standard string class, the standard resizable array class and so-on, but they seem completely oblivious to their existence.
Here’s some more information on the Federal Reserve that was sent to me by a couple of friends today.