Sunday, September 1st, 2013
In June of 2013 Sony and Microsoft unveiled the hardware details of their next entries into the upcoming console generation — the PS4 and Xbox One, respectively. Like many others, I couldn't help but notice the similarities between the two platforms. Both supposedly use an 8 core AMD Jaguar based CPU and a Radeon GCN GPU, integrated into an AMD Fusion package. Both platforms also have 8GB of unified memory and a Blu-ray drive.
Saturday, June 15th, 2013
Imagine is an image processing framework that I began writing in 2009. The framework makes it easy to load, manipulate, and analyze images and perform lots of common tasks. I've used imagine in several of my projects involving graphics, games, computer vision, and artificial intelligence. There are a lot of components in the framework that we could cover in this post, but I'd like to focus on one particular area: image resampling.
Saturday, March 5th, 2013
A few years ago I came across a snippet of code that was causing problems in a multi-platform product I was working on. The code was attempting to perform a shift-right operation but, in certain circumstances, used negative right hand operands.
The C++ language supports this as valid syntax (it should compile), but the results are undefined (see ISO 9899:1999 6.5.7). Needless to say, use of negative right hand shift operands is highly discouraged!
For the sake of simplicity, I've expanded a series of macros and reduced the offending code down to the following trivial example:
Tuesday, January 17th, 2012
The SEGA Dreamcast has always been one of my favorite consoles. It had a ton of great games, powerful hardware for its time, and lots of innovative — even if underused — features like online support and the VMU.
It's impressive 624 game catalog included exclusive titles like Soul Calibur, Shenmue, Sonic Adventure, Power Stone, Crazy Taxi 2, and Mars Matrix which gave the Dreamcast a reputation for offering a diverse and innovative library that appealed to both hardcore and casual gamers, making it a beloved console despite its short lifespan.
In 2008 I built a prototype emulator for the Dreamcast that could run on the Xbox 360. The goal was to salvage as many Dreamcast games as possible and offer them a second life with improved visuals and online play through Xbox Live. Publishers could make their Dreamcast games available through the Xbox Live Marketplace and run on existing Xbox hardware without modification.
The idea spawned from a conversation I had with Peter Moore at Microsoft in 2006. Peter was at Sega through the Dreamcast launch, and Microsoft had actually collaborated to bring Windows CE and DirectX to the platform almost a decade earlier. In several ways, the Xbox project had advanced the original vision of the Dreamcast through its focus on online, community features, competitive gaming, and of course, challenging the dominance of Sony.
It seemed like the Dreamcast catalog could thrive within the Xbox ecosystem.
Wednesday, July 6th, 2011
There is one particular mistake that stands out to me as the most common error made by beginning iOS developers (even above misuse of auto-release pools). It essentially boils down to a (quite forgivable) lack of understanding of how properties and reference counting work within Modern Objective-C.
Sunday, July 3rd, 2011
Cairo is a simple
video codec that I developed in early 2011 during the later stages of everyAir.
The purpose of this codec was to experiment with compression features and learn about their individual
impact on efficiency while developing a simple framework for future work. Cairo was also designed to be easy to
understand, and serves as a great learning aid for students.
Throughout the development of Cairo I was greatly assisted by the availability of several world class H.264 encoders.
These encoders provided a benchmark to which Cairo was tuned and re-tuned. Now that Cairo is complete, I
thought it might be interesting to see how it performs against the best H.264 coder around: x264.
Note that this is not a rigorous comparison by any means. Further, it is notoriously difficult to compare video codecs
due to the subjective nature of quality, inherent sampling error, operator bias, etc.
This comparison is no doubt biased in favor of Cairo and should be taken with a large grain of salt.