tag:blogger.com,1999:blog-355783402023-11-16T08:36:32.033-08:00Goldfishy...from the relative safety of my fish bowl...kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.comBlogger47125tag:blogger.com,1999:blog-35578340.post-66367110133213323172012-12-05T17:15:00.002-08:002012-12-05T17:16:34.948-08:00Thank You, Gordon MooreIn October of 2007, I wrote about hardware assisted brute force attacks. Namely, that it was an error to assume today's computing power was what we'd have access to in the future. For example, if you know some computing operation is going to take ten years, one option is to wait five years, at which point (assuming Moore's law) your operation will only take 2.5 years. You save kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-16254018186178070942012-11-18T14:48:00.002-08:002012-11-21T19:03:06.773-08:00Rewriting directshow?Directshow is a pretty tenacious interface, having been used for approaching two decades at this point. The official party line from Redmond is "use MediaFoundation," but it's never seemed particularly useful given that MediaFoundation is absent in older versions of Windows.
I've always (perhaps foolishly) thought it'd be fun to write my own media framework. So I spent some time kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-52414925131555901462012-10-29T20:32:00.003-07:002012-10-29T21:10:16.781-07:00State Machines Made SimpleI recently stumbled across a bug in some code where our embedded device would sometimes fail to take the correct behavior on disconnecting from our back-end servers. This was actually the third fairly major bug in this particular code. When I dumped the code to a state machine using gliffy, it became clear we had a problem with state. It looked something like:
Okay, okay....kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-29952699031155862272012-02-21T23:39:00.002-08:002012-02-22T00:01:35.219-08:00Thunderstone, Or An Abbreviated Guide to Comp Climbing TreacheryLately in my spare time I've been playing Thunderstone with my wife and an acquaintance. It's a fantasy card game where players basically build up a deck of cards during the game in an attempt to vanquish monsters in a dungeon. There's a lot more to it, of course, but the strategy and creativity of the game is really wonderful.
Anyway, our acquaintance is an avid gamer who's clearly kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-89555290054897496822011-12-21T18:10:00.000-08:002011-12-26T12:27:57.933-08:00What do we actually know about software development?I recently saw this video on Vimeo; to say it blew my mind would be an understatement:
In it, Greg Wilson makes a compelling argument that we have a responsibility to seriously question the efficacy of the software engineering practices we employ. For example, do we know code reviews will really lead to better code, or are we just trusting our gut? Is pair programming effective? Does kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com2tag:blogger.com,1999:blog-35578340.post-48813222195358154282011-07-14T19:20:00.000-07:002011-07-15T08:21:09.378-07:00Who Really Wants a Digital Home?Let me start by saying I'm not a technophobe. I work in video surveillance, I write code in multiple languages, I cross-compile C++ code, I browse various open source projects in my spare time, I like python's structured use of white space, etc. I'm a nerd, and an unabashed one at that.
But let me be the first to say: I do not want a "digital home." Yep, that's right. I don't want a digital kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com1tag:blogger.com,1999:blog-35578340.post-33497710433243090462011-05-10T11:46:00.000-07:002011-07-15T08:52:06.651-07:00Unroll that loop, homeboyA month or so ago I was wrestling with a pretty thorny algorithmic problem at work. Eventually I worked out a solution that worked great on our Windows emulator, so I figured my job was done...was I ever wrong.
Once I got it running on our embedded processor (a lowly ARM926EJ-S at ~270 MHz), I quickly found my algorithm had some serious performance issues. So, I fired up oProfile andkidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-4041115436865389582010-10-15T17:15:00.000-07:002010-10-25T17:34:12.641-07:00A closer look at JPEG performanceIn my previous post, I compared JPEG to the newcomers, WebP and JPEG XR. For the most part, JPEG held its own pretty well. WebP was better in a few respects, worse in a few...overall decent. JPEG XR was utterly horrible.But this got me thinking: how optimized was my JPEG encoder? I first used MSFT's .NET JPEG implementation, but I had to wonder just how good that implementation actually was.kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com4tag:blogger.com,1999:blog-35578340.post-91294486750881335832010-10-10T12:53:00.001-07:002010-10-12T18:11:31.226-07:00Comparison: WebP, JPEG and JPEG XRGoogle recently released a new image format called WebP, which is based on the intra-frame compression from the WebM (VP8) video codec. I'd seen a few comparisons of WebP floating about, but I wasn't really happy with any of them. Google has their own analysis which I critiqued here (executive summary: bad comparison metric--PSNR--and questionable methods).Dark Shikari's comparison was limited kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com30tag:blogger.com,1999:blog-35578340.post-34445120040496400522010-10-01T13:42:00.001-07:002010-10-08T00:53:14.432-07:00Not again...Google decided to use the intra-frame coding algorithm of WebM to create a new image format for the web called WebP. And, of course, they make bold claims like "...an average 39% reduction in file size." There's nothing wrong with bold claims, but after reading the details of how they arrived at that conclusion, there are a few problems.First, Google should stop using PSNR as a metric for imagekidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com4tag:blogger.com,1999:blog-35578340.post-21674942484365682332010-05-28T16:24:00.001-07:002010-06-11T15:42:00.040-07:00HD Video Standard, Cont.Last year, there was brief discussion about a standard for high definition video; you can see my previous comments here.One of the big questions about a high definition standard is how to make sure the quality of video encoding is acceptable. Sure, video can be 1080P, but if it's over-compressed garbage produced with a sub-par encoder then it's really difficult to claim that it is "high kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com2tag:blogger.com,1999:blog-35578340.post-81875483490427183372010-05-09T14:55:00.000-07:002011-05-02T19:37:51.806-07:00Object Tracking for ScientistsMy significant other works in zoology. She needed a program to analyze about a thousand hours of video containing salamanders. Since image and video processing is my primary focus, I offered to take a stab at analyzing her video.
The goal was to determine how much distance the object (in this case, a cute little salamander known as Plethodon Shermani) traveled over the course of the video. kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com4tag:blogger.com,1999:blog-35578340.post-86148946138966299002010-03-13T19:18:00.000-08:002010-12-14T15:13:57.392-08:00Memory Corruption Makes Me SadNothing makes programmers cower in fear more than memory corruption. These bugs are almost always A) fatal and B) ridiculously difficult to track down and C) hard to reproduce consistently. The combination of these three things can make you start thinking of your memory in surprisingly literal ways:
(and literal in more ways than one, since your memory is "trashed" hahahaha, oh that was bad...kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-28511124526197185872010-03-01T09:01:00.000-08:002010-06-09T11:11:03.773-07:00DMOs Considered HarmfulLately I've been working with DMO filters. Typically I've written regular DirectShow filters derived from the base classes, but after reading this article I decided that maybe it was time to start writing DMOs instead of transform filters. The advantages seemed attractive, and being able to write a filter that would work in Media Foundation was tempting.After writing two of them, I can now say kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-82907188698091501582010-01-07T10:13:00.000-08:002010-01-07T10:18:56.984-08:00A fellow poster on a forum I frequent often says to gravity skeptics (yes, sadly people like this exist) "well, if in doubt, jump off a cliff." Someone commented that there wasn't such a succinct retort for evolution skeptics, but I think there is:...all the intelligent design advocates die; settles that debate, I believe.kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-758030762447079882009-12-21T10:48:00.000-08:002010-01-07T10:32:22.384-08:00H264 media subtypes in DirectshowThe media subtypes supported by Directshow are outlined in an MSDN article. Although the article lists five separate types, there are really only two distinct types:MEDIASUBTYPE_AVC1: h.264 bitstream without start codes, andMEDIASUBTYE_H264: h.264 bitstream with start codesBasically, a subtype in directshow communicates the type of media that a filter outputs, so these types let connecting kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-70254451848033550022009-09-29T16:08:00.000-07:002009-09-29T16:19:11.443-07:00Programming Fail: Directory.GetFiles()I went to demo some shiny new code for a friend, and we both had a laugh when my program pretty much puked all over itself.Admittedly I had not run this code on this particular machine before, and it was running Vista and .NET 3.5 (neither of which I'd tested against) But upon finding the bug, I find it difficult to understand what sort of design decision would involve such an arbitrary kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-62753142100642130532009-09-21T12:48:00.000-07:002009-09-21T13:25:24.901-07:00More fun with AM_MEDIA_TYPEWhile messing around with CMediaType (a wrapper class for AM_MEDIA_TYPE), I came across an inconsistency/bug. If you execute the following code: pmt->cbFormat = sizeof(WAVEFORMATEX); WAVEFORMATEX *wfex = (WAVEFORMATEX*)pmt->AllocFormatBuffer(sizeof(WAVEFORMATEX));...you will find that wfex (which is a pointer to pbFormat) is NULL. My first thought was "out of memory?!" and the next thought waskidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-21054182909310420362009-05-14T13:05:00.000-07:002009-09-03T13:26:41.497-07:00HD Video StandardDespite the last couple of years being a time when "high definition" video has really gained traction, there's one surprising thing about HD video: it doesn't have an obvious definition. Dan Rayburn brings up this observation in a recent blog post:For an entire industry that defines itself based on the word "quality", today there is still no agreed upon standard for what classifies HD quality kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-51429948403584920522009-05-04T18:44:00.000-07:002009-05-04T20:38:41.488-07:00Dealing with Image FormatsOne of the most common tasks when working with video is dealing with colorspaces and image formats. In this post, I'll discuss the two major colorspaces commonly used in Microsoft code, converting between different formats of a given colorspace. In some future post, I might talk about converting one colorspace to a totally separate colorspace, but that topic is worthy of its own discussion.In kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-9215591581803363572009-02-02T16:19:00.000-08:002009-05-04T20:54:40.986-07:00How to fix Vista lag spikesVista has a nasty bug that can cause lag spikes when attached to a wireless network; every sixty seconds, the PC will experience a rather substantial lag spike: 10.0.0.1 is my router; notice everything is going along just fine, and then out of the blue, I get a ping time of 836 milliseconds, which for any latency-sensitive application is a very consequential amount of time. And it isn't like mykidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com6tag:blogger.com,1999:blog-35578340.post-50244302333934872572008-12-06T15:10:00.000-08:002008-12-06T16:19:23.684-08:00It's big, it's heavy, it's wood!Everybody loves log:...this posting concerns a different type of log: the type we programmers use to keep a history of what our application did.I love Jeff Atwood. I really do. I read his blog on a regular basis. I enjoy his style of writing, and both of us are unabashed nerds. We both post on Silent PC Review. His blog, Coding Horror, has possibly been my favorite blog over the last few kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-59810274646165135242008-11-05T20:59:00.000-08:002008-11-07T09:40:26.144-08:00Ye Olde Rippin' Budget BuildI have to be honest: one of my favorite things to do is go on newegg and see the best budget system I can piece together.Anyone can toss a buttload of money at a computer and end up with something really nice. It doesn't take any creativity, really--money solves a lot of problems. The real talent comes in making a shoe-string-budget system that is decently fast, efficient, has room to grow, useskidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0tag:blogger.com,1999:blog-35578340.post-9973345044445088312008-10-16T14:24:00.000-07:002009-05-14T17:03:53.833-07:00Why Windows Media Player is not VLCExtremeTech had an article by John Dvorak outlining his Windows 7 wish list.First, let me say that I am not a Dvorak fan. I think most of his columns are prone to hyperbole, and his technical expertise is questionable at best. I think of him as a Bill O'Reilly/Michael Moore of the computing world: basically a talking head who represents the triumph of outrage over substance.That said, in the kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com3tag:blogger.com,1999:blog-35578340.post-43471896307436834302008-08-01T16:43:00.000-07:002008-11-12T20:24:01.435-08:00RAID-0 and Amdahl's LawWhen I see comments like this:Ok, yeah, a 10k drive is fast. Guess what? Two 7200 drives in Raid 0 are faster. Four drives in RAID 0+1 are bigger, cheaper, faster, and... yeah. Better. You have a measly 300GB drive - I have a 1TB (2TB counting mirroring) array that's faster and with automatic mirroring for less than what you spent on one 10k drive. And your cost doesn't include the second slower kidjanhttp://www.blogger.com/profile/11185942510889801693noreply@blogger.com0