Monthly Archives: April 2016

Pebbles, rectangles and stack overflow

UntitledWhile working on my Pebble watchface “Future Time” I have encountered persistent annoying problem – watchface would run for a while and then crash – and not only crash, but actually restart the watch. What made this even more frustrating – after 3 restarts in a row Pebble would revert to recovery mode and complete firmware reinstall was required (did I accidentally write a Pebble virus?).
When I dug into device logs I found out that every restart was given reason: “Dangerous Stack Overflow”. Which is kinda strange – I don’t have any recursions nor deeply nested function calls nor large local variables. I tried lots of things – including extreme ones like declaring all local function variables as global or static – nothing helped.
Finally Christian form Pebble developers forum shed a light. He pointed out that I use a lot of GRect constructs which is basic rectangle building block for pretty much anything from defining layers to graphics functions. I used GRect inline directly inside function calls, which I thought wasn’t a big deal, after all “everybody does that” – including Pebble in its examples. Well, as Christian pointed out those GRects are kind of local variables, and either memory is not reclaimed fast enough when they go out of scope or they spring memory leak.
Keeping this in mind I created a global GRect variable and when needed to use a GRect in local function, first I’d assign it’s value to the variable and then use variable in the function.
So something like this:

static void layer_update(Layer *layer, GContext *ctx) {
   //...
   graphics_draw_rect(ctx, GRect(10, 10, 30, 30));
   //...
   graphics_draw_bitmap_in_rect(ctx, bitmap, GRect(20, 20, 40, 40));
}

Becomes thus:

GRect temp_rect;

static void layer_update(Layer *layer, GContext *ctx) {
   //...
   temp_rect = GRect(10, 10, 30, 30);
   graphics_draw_rect(ctx, temp_rect);
   //...
   temp_rect = GRect(20, 20, 40, 40);
   graphics_draw_bitmap_in_rect(ctx, bitmap, temp_rect);
}

That’s it. This simple change cured the plague, no more crashes, restarts or recovery – just smooth sailing.

Trump wants to bring Pebble home

Trump on PebbleDonald Trump’s plan to “Make America great again!” would have you spending a whole lot more dough on your next Pebble smartwatch.

Not surprisingly, that would be the logical consequence of the Republican presidential front-runner’s latest ambitious promise: Getting Pebble to start manufacturing their products in the US instead of China.

“We’re going to get Pebble to build their damn watches in this country instead of in other countries” Trump said in a speech at a rally in Supai, Arizona.

The Donald’s claims are made to appeal to a voters having difficulties finding jobs in the US. Pebble, the world’s most innovative company with cult of followers, designs its best-selling Pebble Time, Pebble Time Steel and Pebble Time Round in the US but relies on partners in China and Chinese factory workers to assemble all of them. But what would be the price to build those “damn watches” in the US? Even a rough estimate of the basic costs shows it’s an unrealistic option, leading to a Pebble smartwatch with a potentially jaw-dropping price tag.

To keep things easy, let’s just observe salaries of workers occupied with assembling a Pebble. A labourer at Chinese manufacturing factory gets paid roughly $400 a month before overtime, according to the New York Post.

Now assume Pebble goes the cheaper route and utilizes a factory in Wyoming or Georgia, which happen to have the country’s lowest minimum wage at $5.75 an hour. Working 8 hours a day, 5 days a week, a US worker will earn $824 a month, or more than double the Chinese labourer. And if Pebble were to utilize someone in its home state of California, where the minimum wage is $9 an hour, the monthly pay is $1,400, or more than triple of the chineese.

And that’s ssuming you have number of workers with enough technological skills to do the job (and you don’t) and also assuming those workers will work for minimum wage (they will not). After awhile, things don’t add up.

While there are a number of other factors that go into a Pebble, including the components, shipping, marketing and research and development, doubling the labor costs could significantly hike up the price of a Pebble. Current price of Pebble Time is $150 — will you pay for the same smartwatch $300? $400? Or more?

“Twice the price is a very modet estimate” says Clara Mileshti, an analyst at Dumas CostEff, about the price hike of a Pebble if it were manufactured in the US.

In another speech, Trump proposed a 35 percent tax on products built outside of the US. So at a minimum, that would mean your next Pebble Time’s price could start at over $200.

Pebble declined to comment on Trump’s comments and didn’t want to get into the potential math of bringing watch manufacturing back the US.

Trump’s comments ignore the fact that Pebble does buy some of its components from US companies, including LEG’s Cortex-MI5 processors. The company said earlier that it believes it affects jobs creation in the US throug encouraging developers to learn and and create software for their appstore ecosystem. And by the way, creating and submitting an app to Pebble appstore is free for developers.

Pebble couldn’t afford to build a watch in the US at a reasonable price. Making a more costly, “Made in the USA” product is not an option, especially as consumers start to wise up about how much they’re spending on their smartwatches. Today Pebble is the leader in low-cost efficient watches. But alternatives are cropping up.

So strike it up as another crazy, wild claim by Trump. Or is it?