Waffles (by weight)
- 200g All Purpose Flour
- 30g Sugar
- 8g Baking Powder
- 2.5g Salt
- 225g Total (Yogurt Cup + Remainder Milk)
- 50g Vegetable Oil
- 3g Vanilla Extract
- 1.5g Apple Cider Vinegar
- 1 egg Large
Great waffle recipe, but measure everything “by weight” into two large bowls (dry, wet)
Measure the small amounts (less than 10g) very slowly, or by teaspoons.
Mix/sift dry ingredients.
Stir wet ingredients.
Gently fold dry into wet (do not overmix, should be like a fluffy cake batter)
Makes 4 waffles.
13:46 CST | category / entries / recipes
permanent link | comments?
Chili California Salsa
- 3/4 parts chile california (dried)
- 1/4 parts tomatillos (fresh)
- garlic
- salt
Boil, Blend, Strain.
Works especially well for “red” chilaquiles.
14:34 CST | category / entries / recipes
permanent link | comments?
Pan Cake Waffles
Sift:
- 200g flour
- 30g sugar
- 8g baking powder
- 2.5g salt
Add:
Barely mix into cake-like batter (fold, don’t whip)
Heat waffle iron (4-plate)
Spread batter/dough onto waffle iron.
Cook until crisp (I checked/re-placed around halfway through when it was steaming a lot)
Serve with butter and syrup
12:59 CST | category / entries / recipes
permanent link | comments?
Did You Know That `gofmt` Emits Tabs(?!)
For God so loved his children that we finally have a programming language that has solved the tabs
v. spaces
debate!
This is truly exciting news! In recent years, I’d resigned my position to “use spaces everywhere” because of two justifications:
Spaces
are near-impossible to mess up (across all editors and programmers)
Tabs
are technically control characters and “do not belong in files” (eg: you wouldn’t put ^G
in your file, so why put ^T
?)
However golang
bucks tradition in a particularly compelling way: Tabs
are indeed control
characters (increasing indent for control-flow modification), and due to near-ubiquitous use of gofmt
, it’s also near-impossible to mess up(!).
If you control exactly the language, the compiler, and the formatter, it’s an incredibly compelling simplification to use tabs
. Most editors “support them as expected” such that backspace and tab are commutative. This is effectively an upgrade for a moderate amount of people who were stuck backspacing over spaces.
Any misbehaving editor or stubborn user who uses spaces instead will simply get processed through the mold of gofmt
… their transgressions are short-lived and forgivable.
Small victories may lead to large victories… with the tabs
v. spaces
debate definitively settled, mayhaps we finally can move on to figuring out Elastic Tabstops.
00:47 CST | category / entries
permanent link | comments?
Really Good Baked Potato Soup
- 2-3 large potatoes, cooked, diced
- 2-3 tbsp chicken bouillon powder (lightly coat potatoes)
- 2-3 tsp black pepper, ground (lightly coat potatoes)
- 1-2 tbsp butter
- 1 medium onion, diced
- Celery, Bacon, Carrots (optional: sliced, diced to taste)
- 1-2 tsp garlic, minced
- 3 tbsp butter
- 1/4 cup all purpose flour
- 1 cup heavy cream
- Herbs (to taste)
Cook potatoes until tender (recommend: properly microwave).
Dice potatoes into ~1/2 inch cubes.
Coat with salt, pepper, chicken bouillon powder, set aside.
Melt butter in soup pot, dice onions, vegetables, etc
Cook until onions are translucent, add garlic towards the end (so as not to burn)
Mix together vegetables and coated potatoes in the soup pot.
Add enough boiling water to barely cover / float potatoes, and simmer ~30 minutes.
In separate frying pan, melt butter and mix with flour to make a roux.
Temper in milk/cream, and herbs.
Transfer herbed milk roux to soup pot.
Blend ~50% of the soup to thicken.
Serve, top with bacon or croutons.
20:13 CST | category / entries / recipes
permanent link | comments?
Trompo de Pastor
- 2 tbsp salt
- 2 tbsp Paprika
- 2 tbsp Chili Powder
- 2 tbsp Cumin
- 1 tbsp pepper
- 1/2 cup lime juice
- 2 lbs Pork Loin, Sliced into Medallions
- 2 skewers
- 1 onion, sliced in half
- 1 onion, sliced in strings (julienned)
- Red, Green Peppers, sliced in strings (julienned)
- Pineapple Chunks
- Salt
- Pepper
- Olive Oil
Preheat oven to 300 degrees farenheit
Blend spices into slightly watery paste (using lime juice)
Slice meat into medallions, coat with paste in a bowl.
Refrigerate covered bowl for 30 minutes
Slice vegetables for fajita/veggie mixture into a bowl.
Coat vegetables with salt, peper, olive oil.
Slide meat onto skewers, use onion halves as base and skewers as the “trompo”
(Pierce skewers into onion, straight down, such that the meat is free-standing)
alternately, cook the meet on a wire rack with a pan to catch the drippings
Cook meat on skewers in 300 degree oven for 1.5 hrs
Remove meat, slice, dice, arrange on a baking tray beside coated and spiced vegetables.
Cover meat with a layer of tortillas and aluminum foil
Broil pan underneath broiler ~10-15m until veggies get sweated / roasted.
00:38 CST | category / entries / recipes
permanent link | comments?
What does #BleedPurple mean to you?
“What shirt should I wear to work today?” was my thought while standing in the closet, excited about our team’s new hire and some exciting news on the products our team works on.
My “Upcoming.org” shirt, I thought. I want to be reminded of the potential. Not many people remember Upcoming, but it was a Yahoo! acquisition many years ago. Along with Del.icio.us and Flickr it really defined Web2.0, moving from a web of documents to apps, UGC and crowd-sourcing.
Upcoming had a kickstarter (that’s where I got the shirt), trying to recapture the magic. The ghost of del.icio.us lives on- acquired by Yahoo!, spun-off, and re-acquired by a startup that was originally inspired by del.icio.us.
I get compliments all the time about the quality of work and the quality of people at Yahoo! (with exclamation point #grump). It’s easy to forget that for years at Yahoo! we solved problems w/o thinking that eventually became startups!
When Hadoop was spun off and open-sourced, it started a wave of companies, big and small, that came together around “Big Data” which led to “Machine Learning” and quickly commoditizing into “Data Science”.
What will happen with Vespa? How will its ghost live on, what impact to the global economy will it have?
See more ...
11:31 CST | category / entries
permanent link | comments?
Ruth Woodard’s Spaghetti
* 1lb bacon, cooked, drained, and crumbled (reserve grease)
- 3 tbsp bacon grease
- 1 tbsp flour
3 onions, sliced into thin strips
* Salt + Pepper (to taste)
1 large can tomatoes, stewed (28oz?)
* 3 tbsp oregano
* 1 lb cheddar cheese, sharp
- 1 lb spaghetti, cooked
- Salted water (to taste)
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?
Molasses Sugar Cookies
- 3/4 cup shortening, melted
- 1 cup sugar
- 1/4 cup molasses
- 1 whole egg
- 2 cups flour, sifted
- 2 tsp baking soda
- 1/2 tsp salt
- 1/2 tsp cloves
- 1/2 tsp ginger
- 1 tsp cinnamon
- 1/4 cup sugar (for rolling)
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?
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?
Like what you just read? Subscribe to a syndicated feed of my weblog, brought to you by the wonders of RSS.