Contact Info

(for those who care)

Instant Gratification   



Thu, 10 Aug 2017

Ruth Woodard’s Spaghetti

* 1lb bacon, cooked, drained, and crumbled (reserve grease)

* 1 lb cheddar cheese, sharp

Cook bacon, drain and reserve grease

Heat bacon grease + flour until combined and slightly browned (do not burn)

Cook sliced onions in bacon grease w/ salt and pepper to taste

Add stewed tomatoes and oregano, simmer 30m

Cut or blend large tomato chunks

Add cheddar cheese, crumbled bacon, stir into cooked pasta

20:15 CST | category / entries / recipes
permanent link | comments?

Sun, 27 Nov 2016

Molasses Sugar Cookies




Melt shortening in saucepan or microwave.

Remove and let cool (otherwise egg will cook).

Add sugar, molasses, and egg, mix well.

Sift together all dry ingredients.

Add dry ingredients to wet ingredients and mix well.

Wrap and chill thoroughly.

Roll into 1 inch balls, roll in sugar.

Bake at 350 degrees for 8 minutes and let cool on wire racks.

15:31 CST | category / entries / recipes
permanent link | comments?

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.

         /0\

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

         \6/      

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?

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!