Over-aggressive GCC optimization can cause SIGBUS crash when using memcpy with the Android NDK

At work we’ve been developing new Android hardware, and as such I’ve been porting a lot of our existing C/C++ code to Android using the NDK, a collection of GNU build tools (gcc, objcopy, etc.) and associated scripts to aid the development of native C/C++ code on Android. One of our projects is nearly 1000 source files, and therefore can be a bit of a headache to debug. For a while I’ve had a problem where this project would crash when built in release mode, but work fine when built for debug. Unable to spend the time to figure out what was going on, I’d simply been using the debug build of the code. However recently the performance implications were too great and I needed to get to the bottom of what was going on. Interestingly enough, the issue wasn’t uninitialized memory (as is usually the case with debug/release inconsistencies) but rather a bug in GCC 4.4.3’s optimization of memcpy. Continue reading “Over-aggressive GCC optimization can cause SIGBUS crash when using memcpy with the Android NDK”

Modeling weight loss with differential equations

This comes from a talk I’m giving at Penguicon 2012. The talk in general is about weight loss and getting healthy but part of it involves doing some predictive modeling of future weights based on calorie counting.

Consider the question “if I eat X number of calories a day, will I gain or lose weight?”. It’s a supremely practical question but without doing some research it isn’t immediately apparent how to answer this. The best place to start is one of the formulas for calculating basal metabolic rate. The obligatory Wikipedia link provides some more background but in short it gives us a formula for the “baseline” number of calories our body needs. Mifflin-St. Jeor is considered by many [citation needed] to be the most accurate. It is of the form:

In this formula, m is mass in kilograms, h is height in centimeters, a is age in years, and s is a gender offset which is either +5 for men or -161 for women. This gives us P, our basal metabolic rate in calories. An interesting thing about BMR is that it’s a measure of your caloric needs at more or less complete rest. A normal person’s caloric needs to maintain weight will usually be strictly greater than their BMR. Because of this, P is usually scaled by an “activity factor” which factors in daily life. This can range from ~1.2 for someone with a desk job who gets no exercise to ~1.9 for someone who engages in some serious workouts. Now that we know our caloric needs, how can use this to model where our weight will be in the future? Continue reading “Modeling weight loss with differential equations”

Progressive drawing of simple SVGs on the HTML5 Canvas element

The HTML5 (is there supposed to be a space? I’m not sure) Canvas element is pretty cool! A recent school project involved visualizing some different data sets from factual.com in an “interesting” manner. Most of what we did just a standard Google Maps API mash-up but I decided to spruce it up a bit with an intro animation using the Canvas element. My group was visualizing TARP data and from this decidedly American theme I added an animation to the background that drew an outline of the 50 states. This really was my first exposure to JavaScript and HTML5 (mainly being a C++ developer), so it was an interesting learning experience.
Start animation

If you had an HTML5 browser (IE 9+, Firefox 2.0+, Safari 3.1+, Chrome 4+) you’d see something cool here!

Continue reading “Progressive drawing of simple SVGs on the HTML5 Canvas element”