Contact Info

(for those who care)

Instant Gratification   

Tue, 26 Apr 2016

Writing my First Watchface for Pebble

For the longest time I’ve had an idea for a binary clock that’s easier to read than the traditional “powers of two” ones you’ll find at the nerd stores.

The design I came up with has some inspirations from a very old linux desktop gizmo I believe from the GNUStep era. I don’t remember the name of that little clock app but I think I’ve done enough refinement and design to claim this design as my own.

You’ll see in the image below that “X” is located at the traditional “12:00” position on an analog clock and “Y” is located just before the “6:00” position (meaning it’s indicating “5:00”. This setup makes it easy to see at a glance what the hour hour is and while “binary” is really much closer to the hour hands of an analog clock.


    . . X . X . .  
    . . . . . . . 
  / . . . . . . . \
 9  . . . . . . .  3
  \ . . . . . . . /
    . . . . . . . 
    . . . . Y . Y 


Now the question is how to indicate minutes? Following a similar line of reasoning, you start counting from zero at the 12:00 position down towards the middle in groups of five. It works out that you can fit a full “minute hand” that grows inwards from the edges and covers all 60 minutes contained in an hour.

  . . X 1 X . .    . . X . X . .  
  . . . 2|. . .    . . . . . . . 
  . . . 3V. . .    . . .35 . . . 
  . . . 4 . . .    . . .34 . . . 
  . . . 5 . . .    . . .33^. . . 
  . . . . . . .    . . .32|. . . 
  . . . . . . .    . . .31 . . . 

My experiences working with the Pebble SDK

It has been a long time since I’ve written C code, but the SDK has good documentation, quick start guides and examples to build from.

Memory management hasn’t been too much of an issue since the trend for watchfaces seems to be “assume you’re the only thing running, and don’t be too afraid of global variables”. The code isn’t something I’d be proud of if I were shipping this as a library or if I were a professional C programmer, but so far it seems to work well enough.

Using C, pointers, static initializers, etc. really makes me appreciate dynamic languages a lot more and efforts around modernizing low-level languages that you see with Rust and others. It’s so convenient to have sane initializers, data access, iterators, and parameter passing for programmer comfort even though it can compile down to the same bytecode or instruction sequence. With raw C it seems like it’s always a struggle to factor out some code into a function call, much more so than in a dynamic language.

Making a “Professional” Watchface

I didn’t want to just build a static watch face. Once I got the basics working, I wanted to experiment with having a settings panel at least to flip between having a light background or dark background.

The settings infrastructure is honestly a weak point of the Pebble SDK. Each watchface can have an app.js which triggers a simple Pebble.openURL( 'http://...' ). You have access to basically a full web browser for users to configure the watchface but there were several problems I had working with it.

The basic demo configuration was OK and a good starting point, but I’d love a pebble new-config "KEY_FOO=toggle, KEY_BAR=color, KEY_BAZ=radio(1,2,3)". As it is now, there’s a lot of copying/pasting and trying to find examples that makes things more difficult.

Even better would be to have some sort of Pebble.js included or injected automatically so that you can simply say: Pebble.fetch( { "KEY_FOO": function() { ... }, "KEY_BAR": "#key_bar.value" } ); … handle the common cases easily and avoid as much code duplication as possible, especially on the frontend.

Also I don’t like that you have to have the configuration page hosted somewhere on the internet. Tying watchface configuration to public URLs will lead to watchface decay as developer domain names expire, heroku accounts get abandoned, etc.

I’ve experimented with using modern browser Blob and createObjectURL API’s to bundle the whole config page into the *.pbw itself, but it gets tricky to dynamically integrate that with the full build process. It’s an awful lot of somewhat risky work to be done to replace something that’s working fine right now so I’ve currently punted on investing programming time in that.

Areas for Improvement

It’d be great to have a set of open source modules for building watch faces, pebble grab-lib weather-access, or pebble grab-lib bluetooth-loss-vibrate. It’d be much more convenient to have some infrastructure in place to help raise the bar as to what users expect a watchface to have and to be pleasantly surprised when more watchfaces support more features.

Overall I’m very happy with the development process. It was fun to have a fast iteration cycle and to literally see the changes happening on my wrist as I was making changes to bitmasks and graphics calls. There was an immediacy around controlling a physical object through code that pebble has really nailed in their developer experience, and this doesn’t even begin to cover the fantastic CloudSDK or JS watchfaces.

The results of this work has gotten me featured in the “Brain Teaser” category of watchfaces and at least a few installs. It’s been a really fun process and has gotten me searching for cheap Pebble Time watches on Craigslist so I can experiment with color, hopefully pick up even more users and installs.

12:37 CST | category / entries
permanent link | comments?

Tue, 29 Mar 2016

Red Beans and Rice

Cook beans and pork in salted water.

Bring to boil then simmer for 45 minutes.

Add vegetables, seasonings, and tomato sauce.

Simmer 1hr, stirring occasionally.

Add sausage for extra body and cook 45 minutes more.

Cool, but do not necessarily refrigerate.

Reheat to a boil, then simmer for 30 minutes.

Serve over boiled, buttered white rice.

10:00 CST | category / entries / recipes
permanent link | comments?

Thu, 26 Nov 2015

Apple Pie

Pre-heat oven to 425 degrees.

Prepare pie crust / pan bottom, set aside top.

Stir sugar and spices into small or medium bowl.

Peel apples, slice thinly into bowl slightly larger than pie crust/pan.

apple slices should be ~1/16” or ~1mm. If you shake a slice back and forth it should wiggle instead of being solid

When you’ve peeled a heaping amount into the bowl, using both hands mix with sugar and spices by thirds, separating apple slices.

Spread heapingly into pie crust / pan bottom.

Dot with slices of butter or margarine.

Cover with pie crust top, press together edges, slice top to allow steam to vent.

Cover crust edges with aluminum foil.

Bake at 425 for 40-50 minutes, until golden brown and juice bubbles through slits.

Remove aluminum foil for last ~5 minutes.

01:35 CST | category / entries / recipes
permanent link | comments?

Chocolate Clusters

Melt chocolate and butterscotch chips in microwave (or double-boiler) until creamy and smooth

Gently stir in chow mein noodles and nuts

Drop onto waxed paper, roughly the size of golf balls

Refrigerate 4+ hours, remove from waxed paper and serve

01:29 CST | category / entries / recipes
permanent link | comments?

Pizza Dough

Dissolve yeast in warm water

When fully dissolved, add remaining ingredients in order listed

Dough should be slightly sticky and pull away from sides of bowl

Turn dough onto lightly floured surface (slightly more flour if dough is more sticky)

Knead 20 times, let rest 5 minutes

Knead 10 more times, let rest 15 minutes

Pre-heat oven to 425 degrees

Roll dough flat to be ~1/4” thick, transfer to cooking surface (pizza stone or lightly greased pan)

Blind bake crust (no toppings!) for ~5-10 minutes at 425 degrees until crust is almost cooked

Remove, top with sauce, cheese, toppings

Return to oven for ~5-10 minutes more until cheese melts and begins to bubble

Remove from oven, slice and serve

01:29 CST | category / entries / recipes
permanent link | comments?

Lemon Pie

Select enough ‘Nilla Wafers to stand upright around pie pan edge

Roughly layer bottom with ‘Nilla Wafers (broken and laying flat is preferable)

Crumble most of remaining ‘Nilla Wafers and layer over bottom, covering all visible parts of the pan

Zest/grate a single lemon peel into bowl

Juice both lemons into zest, straining seeds

Empty condensed milk into juice and zest, mixing thoroughly

Gently layer condensed milk mixture over crumbled ‘Nilla Wafers

Cover, refrigerate overnight

Serve with whipped cream

01:17 CST | category / entries / recipes
permanent link | comments?

Sat, 25 Jul 2015

Pan de Yuca - Cheese Bread - Almohabanas

From this recipe, gluten free

Melt butter and cool.

Combine the yuca starch or flour, cheese, baking powder and salt in a large bowl.

Blend until smooth, adding up to 1-2 tbsp water if necessary.

Shape into 1-2 inch balls and place on cookie sheet.

Pre-heat the oven to 400 F.

Optional: Chill for about 30 minutes before baking.

Bake at 400 for ~5 minutes then turn on broiler and continue until golden brown on top.

Serve immediately, they should be lightly crusty on the outside and chewy on the inside..

22:22 CST | category / entries / recipes
permanent link | comments?

Sloppy Lasagna

A modification of my family recipe for Lasagna for when you’re feeling lazy and presentation doesn’t matter. Meat is optional and can be used as a regular meatball recipe if you desire. This is a great chance to use up all your old random pasta noodles or you can be fancy and buy all of one kind.

Mix all meat, brown in frying pan.

Mix all cheese, mix into cooked meat mixture.

Boil noodles in salted water per package directions (make sure to stagger adding noodles, putting in longest-cooking ones first).

Drain noodles, place in baking dish.

Add half sauce, mix well to coat noodles, sprinkle meat and cheese mixture throughout.

Pour over remaining sauce, top with sauce and cheese.

21:33 CST | category / entries / recipes
permanent link | comments?

Tue, 02 Jun 2015

So You Want to Buy / Bought a Bicycle…

I’ve been going through the process of becoming a bike nerd and here’s what I’ve found. My focus in this guide is for general purpose practical commuting to work and grocery stores with the occasional long pleasure ride thrown into the mix.

Should You Buy a Bike?

First of all you should honestly decide if biking is right for you. Use a tool like the following “How Far Can I Travel” and plug in your address with a 10km and 10mi radius. 10k is ~6 miles and sounds like a lot but is leisurely 20-40 minute bike ride. 10mi starts to be a lot and is more like a 1hr bike ride plus time for breaks.

If there are places you would like to get to on a bike, the best two places to start learning about what bike to get are jwz’s post on bikes and which is a great site in general and has a lot of very thorough reviews for almost anything bike-related.

Bike and Helmet

I’ll share with you my saga of purchases with approximate costs and lessons learned from them so follow along.

First you need a bike (~$500 +tax). If you do it the way I did it (which was JWZ’s recommendations), you’ll pay about the same. If you can get in friendly with a bike-nerd and are willing to wait a little bit, you should actually do the Bike-Fit Calculator and then buy something from

If you don’t have a bike nerd friend you should try to find one… but if you can’t and aren’t comfortable with an online purchase go and buy something directly from a shop. It’s still almost worth it buy from BikesDirect because you’ll save $100-200 and won’t really know enough to feel the difference in fit anyway (if you start seeing the word “geometry” thrown around instead of “height” you should definitely consult with a bike nerd before buying something). Even if the bike you end up getting doesn’t fit very well you can probably sell it on craigslist for not that much less than you paid for it.

Since you don’t want to die and it’s the law, you also need to buy a helmet (~$40). They’re surprisingly expensive, but I recommend going to a local bike shop, trying a few and getting one that fits well and is comfortable. There’s not much difference in price versus buying online and you’ll probably want to make friends with the bike people anyway as you’ll likely be going back to them eventually.

Now you can ride your bike with confidence, but very soon you’ll need to add air to your tires. As Sweethome recommended, I like the Lyzene Steel-drive floor-standing pump WITH SCREW VALVE (~$50). It’s very nice and easy to use. Oh, and get one of those little velcro straps that go around your leg ($3) to keep your pants from getting dirty. I wrap mine around my handle bars when I’m not riding so it’s always ready to go.

Bike Locks and Locking Technique

After you’ve been riding a while you might feel confident enough to go somewhere on your bike. Bring an old ratty backpack to the store with you and then start looking at buying an effective bike lock (~$50) and learn how to lock it up.

As SweetHome says- You don’t have to be perfect, you have to lock it up enough to be annoying, have a cheaper bike than everybody around you, and a better locking technique. If you have a $500 bike protected by a $50 lock and you’ve locked it right, thieves will walk on by and look for the the $500 bike protected by a $10 lock, a $1500 bike that’s locked improperly or the $3000 bike protected by the same lock you’ve got but it’s worth their time to bust the lock and steal.

Obviously you’ll scale your locking techniques to the amount of theft in your area and the value of your bike, but the above links will do a great job of getting you started. Get into the habit of practicing your full, best locking technique religiously at first even if you’re parking in a really safe place so you’ll be quick and comfortable at locking your bike up in a more risky situation.

The ideal locking technique is:

This is an excellent locking job for the following reasons:

Common locking mistakes are to lock to something that the bike can be lifted over (a sign), locking only the wheel or the frame (not both) meaning your wheel or frame can be stolen, locking and leaving a lot of space, and finally forgetting to pass the frame through the triangle in the middle (basically locking the wheels together and leaving the frame free to be stolen).

You won’t always be able to lock your bike perfectly but it’s good to understand the tradeoffs you’re making, why you’re making them, and avoiding the most common mistakes.

Riding at Night (Lights and Reflectors)

Next up is blinky lights! If you’re biking more and more places, you might start biking at more and more times. Lights serve a dual purpose of letting you see in front of you and letting you be seen by other drivers. It’s actually far more important for you to be seen than it is for you to see (usually) so absolutely don’t skimp on the tail-light or rely only on reflectors.

Since I don’t want to die while riding my bike, I recommend a dual-setup on lights for front and real, but first a brief segue into reflectors and the like as they are non-powered and will always be helping to make you visible at night.

I recommend getting a couple of sets of 3M spoke-reflectors so you can be seen from the sides ($15). Get the 3M ones in white and a couple sets of cheap red ones ($5) as accents for the rear wheels. The 3M brands are very high quality and really get the point across while the red ones are sticker-based (not integrated reflective material) and I don’t trust that style for general usage.

The first time I saw the 3M ones I thought they were battery powered because they were so brightly reflective but when I asked the guy about them he gave me a link and a brand-name and I’ve been extremely happy with them.

Some general-purpose 3M reflective tape is incredible, and a steal at $5. When my pedal reflectors fell off I put this tape on them and am thinking of putting some bits of it on my helmet and bike chain just to increase visibility.

Last bit before getting back to blinky lights is helmet/rear-view mirrors ($20). I tried two and this one is by far the better one to get. The other one didn’t last more than two months but I got so used to having it I almost didn’t want to ride again until I had another one. There are ones that clip onto glasses frames as well, but they’re incompatible with mine and I like the convenience of having the mirror on my helmet at all times.

Now we’re back to blinky lights after that short delay on the non-powered ways of not dying! If you want you can totally geek out at the bike light database and get their recommendations, listen to sweethome’s recommendations or go straight for my setup.

Since lights are a huge safety issue, I like to have two installed with two different battery types at all times. I started with the red and white pack of Knog blinders ($50). They’re very bright to a bicycle newbie, but actually not that great and not that bright in the grand scheme of things so I effectively use them as a dual / backup lighting system. They’re nice because they’re small, easy to remove, have decent blinking patterns, and charge via USB so you can charge them prety much anywhere / any time IF YOU REMEMBER TO DO IT WHEN IT’S NOT ALREADY DARK.

That’s why I like to have another set of lights which are powered by AA/AAA batteries, in my case- rechargeable AA/AA’s. The real AA and AAA batteries last so much longer than any of the USB rechargeable lights and have the other benefit of being able to stop into any store or gas station and be up at full power for lights immediately. Also it’s easy to keep a few batteries in your seat-bag (coming up soon, be patient!) so in case you do get caught out with a dead battery you’re able to swap out in just a minute with no worries.

I ended up buying the Serfas SL255 (~$50) as a front light and the Planet Bike Superflash Turbo (~$30). Before I found the Bike Light Database, I also had previously bought a Serfas Thunderbolt (~$40) which I’d rigged up as a helmet-light and it’s also nice to have as a spare. If cost is a concern, learn from my lessons and go straight the the SL255 and Superflash Turbo. They are extremely bright. They take batteries. They will not break. Buy them if you don’t want to die. At the very least listen to me and buy the Superflash rear blinker, it is very effective.

I picked the SL255 for my main light because it was AA-powered and had a low-battery indicator. I’m not 100% happy with it because while it’s very bright it is also has a very narrow beam. Most manufacturers are shying away from “plain battery” bike lights so there wasn’t much choice and my top two concerns were for it to be battery powered as well as having a low battery indicator (so I know to recharge/swap). Eventually I’d like to get it helmet mounted and try a small wide-band/wide-beam filter on it so that is more of a flood light than a spot light which is what I prefer in the type of night riding I do.

Odds and Ends, Flats and Repairs

So now you have a bike, helmet, pump, lock, and lights, which are pretty much the bare minimums for a semi-serious rider, and you’re right around $800 total. The nice thing about it is you don’t have to make the investment all at once, it can be a slow and gradual build-up as you ride more often and in more situations.

Once you start getting even more serious about it and going farther / relying on your bike for transportation you’ll want a flat-repair kit with two tubes ($20), some tire-levers ($5), and a bike multitool ($30). Of course SweetHome has a great guide on all this. The multitool is necessary because you can do most minor maintenance using only that tool. This will all go into your seat-bag ($20).

Not mentioned above is what to use as a pump. I started with a hand pump that fit into the seat bag and fortunately/unfortunately haven’t had to use it before I switched over to the CO2 style inflaters (which I fortunately/unfortunately also haven’t had to use yet).

It works out that there are two very competing interests in portable bike pumps. First you want it so small it will fit in your under-seat bag (but will require 100’s of pumps to fill up the tire), or medium/larger so it clips onto your frame and will require proportionally less pumps.

However, if you have a nice expensive pump outside your frame then (drumroll…) it might get stolen. Otherwise you can get a CO2 system for about the same price or even less, three cartridges (one for front tire, one for rear tire, one as a spare) and it’s lighter, faster, and less likely to get stolen.

If you do get a pump, I would recommend a frame-mounted pump WITH A SCREW-ON HOSE. Just get the Lezyne Pressure Drive Medium ($40) with Lezyne Pen Gauge ($25). It looks and sounds like the best combo or you could get a random CO2 inflater ($15) with a few CO2 cartridges ($3 each) and be done with it quicker, faster, cheaper.


I also ended up getting a phone mount for my bike so I could have turn-by-turn GPS (google maps does a great job, even with bike-specific routes!). For a bike phone mount I can’t recommend enough the RAM X-Grip mount ($30).

Another big motivator for me to bike is the Strava phone app. It does a great job tracking the miles you’ve ridden and how fast you’re going. Turn it on when you start your ride, try to remember to turn it off and you can visibly see how much faster you’re getting or how much longer you’re able to ride. It’ll keep track of your miles which has been the best thing about it for me as I have finally crossed the $1/mile point of the bike I originally bought at ~550 miles ridden and ~$550 paid.

The Final Stretch

Last on the list assuming you stick with it is stuff like water-bottle cages for longer rides ($15), chain cleaners ($15), lubricants ($20), panniers ($100), a full tool kit ($75), and you’re pretty much a bicycle road warrior.

All told, getting into biking as a hobby / transportation is a slow burn from around $400 up to ~$1000 for a single bike, single rider. Once you’re into it, biking 20-40 miles per week is pretty easy to do. For me, with nice weather, a 5-mile bike ride (one way) is simple and easy, almost unquestionable that I’d bike there rather than driving. Going 8-10 miles is more of a commitment because taking a car becomes the clear winner on time, but making a bike ride out of it performs double-duty of getting you there and getting exercise. Biking back gets you up to around 20 miles and do that once or twice a week and you can see how the miles easily add up.

If you’re intimidated (and it’s easy to understand why) remember that all of these costs and accessories are solely based on how much you end up biking. If you only bike during the day on the weekends, you’re fine with a $400 bike, a $40 helmet and $40 pump and don’t have to spend another dime. I rode for 6 months and ~400 miles before I even bothered thinking about cleaning my chain, zero maintenance except for bringing the back in to where I bought it from and complaining that the brakes felt a little smushy which they tuned up for me.

Remember that this guide is just one man’s journey to bike nerd-dom and it’s entirely possible that your convenient stopping point will be earlier than mine. But seriously… buy that PlanetBike Superflash 1 watt tail light if you’re ever out after dark.

04:31 CST | category / entries
permanent link | comments?

Tue, 26 May 2015

Jasmine JazzyFizzle’s Lean and Clean Diet

The Grocery List

Buy this and only this. You will need to refresh about every 7 days:



You may make substitutions, but I suggest you try the diet with the recommended food your first time through, then tweak it when you get ready to do it again based on your results.

Your meals should look like this. If they don’t you’re doing something wrong and Jasmine will yell at you. She will also yell at you if you have cheese, any kinds of sauces (use powder / spices / dry rubs instead), any kind of alcohol, and if you don’t eat your vegetables. Don’t make Jasmine angry! :-)

The Diet:

Wake Up:

2 hours later:

2 hours later:

3 hours later:

2 hours later:

3 hours later:

23:04 CST | category / entries
permanent link | comments?

Next 10 entries

Like what you just read? Subscribe to a syndicated feed of my weblog, brought to you by the wonders of RSS.

Thanks for Visiting!