Cinnamon rolls (in five minutes a day)

Ever since I was a kid, I’ve loved cinnamon rolls. I remember a particularly glorious few days when my family went to visit my aunt and uncle and discovered that their son was working for Cinnabon that summer. Every evening he’d bring home left-over Cinnabons and my father and I would eat ourselves sick. Apparently love of gooey cinnamon pastries runs in the blood.

Despite my love affair with cinnamon rolls, however, I have never had the courage to experiment with them before. In part, it’s because yeast scares me (my early experiences with yeast bakes turned out poorly, to say the least). Mainly, it’s that I’ve never really had homemade cinnamon rolls that consistently turned out well. Mom would make them occasionally, but they were hit and miss; sometimes delicious, other times passable.

Fortunately for me, and unfortunately for my cholesterol levels, I have at last braved the cinnamon roll and discovered something wonderful: I make damn fine cinnamon rolls, and they’re really, really easy.

Like most of my recent excursions into yeast bakes, my cinnamon rolls start with Artisan Bread in Five Minutes a Day (available via Amazon or on Kindle). I cannot recommend this book highly enough; it is a brilliant introduction to bread baking that makes the task not only easy but quick. Like any baking, it takes a couple tries to figure out exactly how things work, but although my first attempts at recipes and doughs typically don’t end up quite like I planned, I’ve only had a single total disaster (my first attempt at naan was carbonized thanks to following the book’s instructions to heat the skillet on high prior to cooking the bread). If you’ve tried and been frustrated with yeast baking before, you’ll understand what an astonishing track record that is for a beginning baker.

If you have any interest in making fresh bread, go buy the book. You’ll need it to make cinnamon rolls my way, anyway, because they rely on the dough recipes and preparation methods that are the core of the book. Specifically, Artisan Bread in Five provides a Caramel Sticky Buns recipe on page 187, which will be your starting point. The key is instead of the rigamarole of coating the bottom of the pan and turning things upside down once you finish baking, etc. you’ll want to use this easy cinnamon filling:

Cinnamon filling
1 cup packed brown sugar
2 1/2 tablespoons ground cinnamon

Mix the brown sugar and the cinnamon together. You’ll have enough for 2-3 batches of cinnamon rolls (depending on how liberal you are with the sugar and how large you make the cinnamon rolls), so store it in a tupperware or similarly air-tight container for later.

After you’ve rolled the dough out into a rectangle as per the sticky bun recipe, spread all of it except for 1/2-1 inch around the edges with softened butter. I’m usually a bit more liberal with the butter if I’m using the master recipe, but particularly if you’re using brioche dough (which makes the richest, most desert-like cinnamon rolls) you’ll want to be a bit conservative with the butter. You just need enough to coat the dough with a thin layer.

Once you’ve spread the butter, sprinkle it liberally with the cinnamon-sugar mixture. You want to have enough cinnamon-sugar that you can’t see any dough or butter peeking through (except for the strip around the edge of the dough, of course). If you’re particularly liberal with the cinnamon-sugar, you’ll likely end up with a sticky goo at the bottom of the rolls similar to the stuff you’d find in a Cinnabon. Use a little less, and you’ll have a more subtly-flavored rolls that’s a bit cleaner to eat.

Roll and cut the dough as per the sticky bun recipe. I usually use a greased 9×9 glass pan, and always end up with nine rolls (counting the two end ones) each about 1-2 inches high. You can, of course, make more or less depending on how much dough you’ve got and the size of your pan. Place the rolls in the pan with a little bit of room between each one (they’ll spread out as they rise), and cover lightly with plastic wrap.

Whether the rolls rise or not will depend on the temperature of your kitchen. I often need to place a second 9×9 pan filled with hot water under the one with the rolls for 20-40 minutes of the rising time, since my kitchen tends to be cooler. Ideally, the rolls should rise upwards and outwards both, so that they are just touching their neighbors.

Bake according to the sticky buns recipe, about 40 minutes. Baking time will fluctuate depending on how large your rolls are, so start peeking around 30 minutes. Serve warm, preferably with some icing (I leave it to you to find a good icing recipe online; we typically just mix some powdered sugar with water and drizzle it over the warm rolls).

I’ve tried using brioche dough and the master recipe both, and the cinnamon rolls turn out great either way. As you would expect, the brioche-based rolls are richer and more buttery, while the dough of the master recipe rolls takes more of a backseat to the filling. I’m itching to try the challah dough because it’s in between the two as far as eggs and butter content goes.

The only downside to this recipe is that it takes roughly two hours from when you decide to make cinnamon rolls and when they’re ready to eat, thanks to the rising and baking time (even if it’s passive time, it still makes it hard to make cinnamon rolls for breakfast before work). If anyone has any ideas for how to prep the rolls in the evening and have them ready to bake in the morning, I would love to hear them.

Even if I never find a way to cut down on the rising and baking time, though, needing to think ahead two hours is a miniscule price to pay considering that the payout is a dish that has warmed, comforted, and delighted me since childhood.

One Crayon redesigned

After working on it for the past couple months, I’m very happy to announce that my freelancing site, One Crayon, has been redesigned from the ground up.

One Crayon now looks several orders of magnitude better than its original design; offers information and documentation for TEA for Espresso, TEA for Coda, and my other projects in a single unified location; and offers numerous other improvements like a news feed for keeping up to date with general One Crayon news and updates to my various software projects.

I’m not actively seeking freelance work thanks to a busy full time schedule, but I’ve been wanting to revitalize One Crayon for a while, not least because I wanted to start migrating some of my sites over to ExpressionEngine and One Crayon seemed like a good place to start.

There are still some rough edges (I’m looking at you, IE 6) and I haven’t added my website or writing portfolios, but I hope you’ll enjoy it anyway!

Text Editor Actions for Espresso

I am extremely happy to announce that my Text Editor Actions for Espresso (or “TEA” for short) has at last been released as version 1.0. Version 1.0 is available for download, or you’ll also find it bundled in the upcoming Espresso 1.0.7.

So just what the heck is TEA for Espresso? Simply this:

  1. A selection of my favorite text actions, mostly (but not entirely) copied from Textmate
  2. Generic actions that allow you to create variations on TEA’s bundled functionality to suit your workflow by editing simple XML
  3. A general framework for coding and running text actions in arbitrary languages without needing to create a Sugar or (for third party Sugars) without needing compiled Objective-C classes

Espresso’s Sugar API was already pretty sweet. TEA makes it that much better by lowering the barrier to creating custom text actions for users and Sugar developers alike.

Documentation for TEA is currently limited to info on creating your own actions, so I’ll walk you through the basic actions included with the plugin.

The vast majority of TEA’s built-in actions focus on making HTML easier to edit, because editing HTML is most often why I need a text editor.

Generic text actions

Spaces To Tabs… and Tabs To Spaces…
As you might expect, these actions convert the type of indentation in your document or (if it exists) your selected text. When you run the actions you’ll be prompted to enter the number of spaces per tabs you wish to use (it defaults to whatever is in your Espresso preferences, so you can just hit enter most of the time).

Trim Line(s)
Trim Line(s) will, when invoked, either trim all of the lines in your selection or the current line the cursor is on (if no selection exists). Unlike some trim lines actions, TEA’s Trim Line(s) attempts to be smart about what whitespace it removes:

  • All whitespace at the end of the line will be stripped
  • Any whitespace at the beginning of the line that isn’t part of the indentation will be stripped

What the latter means is that if in the Espresso preferences you have the program set to use spaces instead of tabs with four spaces per tab, and the beginning of a line has ten spaces, two of the spaces will be stripped.

Select → Word, Select → Line, Select → Line Contents
As you might expect, these actions select the word under the cursor, the line under the cursor (including leading and trailing whitespace), or the textual contents of the line under the cursor (excluding leading and trailing whitespace), respectively.

Sorting → Sort Lines (Ascending) and Sorting → Sort Lines (Descending)
As you might expect, these actions sort all lines in the selection (or document, if no selection) in ascending and descending order, respectively.

Sorting → Randomize Lines
This randomly sorts all lines in the selection (or document, if no selection).

Sorting → Remove Duplicate Lines
If for some reason you need to strip all duplicate lines from your selection or document, this is the command for you.

Formatting commands

Indent New Line (command-shift-enter)
One of my favorite parts of Textmate is that after creating an HTML tag, I only have to hit enter once to get a perfectly indented tag pair with the cursor in between and bumped in a level. The fact that Espresso doesn’t do this irks me greatly, and so this action allows you to force the issue. Indent New Line will turn this (pipe represents cursor):

<div>|</div>

Into this:

<div>
    |
</div>

If you have any text selected when you run the action, the selected text will be moved to the middle line and indented.

Insert Linebreak(s) (control-enter)
In HTML, Insert Linebreak(s) will insert a break tag (<br />). In some other contexts (like PHP double quoted strings), it will insert \n. In Markdown it will insert two spaces and a linebreak. If you have one or more selections, the tag or textual linebreak will be inserted at the end of each selection.

In case you didn’t quite catch that, Espresso allows you to have multiple selections (hold down command while you select multiple items with your mouse), and this action will affect all of them. This is extremely cool, and one of the features that I’m still learning to use; before now, I’d never come across a text editor that allowed me to so much as select multiple items at once. Of course, it isn’t all that often that you need to append br tags in a whole bunch of places around a document, but what about when you want tags for…

Strong (command-B) and Emphasize (command-shift-I)
These do about what you’d expect. If you have one or more selections, they’re surrounded with strong or em tags. If no selection, you get a tag wrapping your cursor. Incidentally, if you’re working with a single selection (or no selection) you’ll get a text snippet with tab stops, so hit the tab key to edit what’s inside the tag.

A note on Emphasize’s shortcut; command-I by default is used to show and hide the navigator sidebar, hence this somewhat odd shortcut for italics. If you wish to switch the shortcuts, you can do so through the System Preferences Keyboard & Mouse controls.

HTML actions

Entities → Convert To Named Entities (control-&) and Entities → Convert To Numeric Entities
Run one of these actions to have the character immediately to the left of the cursor converted from Unicode into an HTML character entity. If you have one or more selections, all non-ASCII Unicode characters will be converted to entities of the desired variety. If using named entities, Unicode characters without a named entity will still be converted to their numeric equivalent. These actions will also convert ampersands (but will ignore ampersands that are already part of an entity).

Entities → Insert Non-Breaking Space, etc.
Use these actions to quickly insert the named HTML entity for the given character.

Expand Abbreviation (control-,)
This action is much like Textmate’s “Insert Open/Close Tag (With Current Word)” which, when I saw it demoed in a screencast, changed my life. For far too long had I been toiling away, typing out every blessed less than/greater than symbol. With Expand Abbreviation, I merely type the HTML tag, hit the shortcut, and voilà. I have the complete tag ready to go with barely any effort at all.

And the fun doesn’t stop there! The reason for the action’s name change is that Expand Abbreviation is powered by the fantastic zen coding project, so in addition to Textmate’s functionality Expand Abbreviation offers the full range of zen coding abbreviations and CSS-selector style syntax to create complex markup from very simple declarations. Here’s a quick example of zen coding’s awesomeness:

div#stuff.things.booyah

Type that, hit control-, and you’ll end up with this (pipe represents cursor):

<div id="stuff" class="things booyah">|</div>

Or if you want to do something a little more complicated:

div#nav+div#content>p.item$*2

Which leads to this:

<div id="nav">|</div>
<div id="content">
	<p class="item1"></p>
	<p class="item2"></p>
</div>

And that’s just the tip of the iceberg. Zen coding offers numerous other selectors and scads of abbreviations for HTML and CSS. All of them will work with Expand Abbreviation.

You may also, if you need, use the old Textmate-style tag creation where you type out everything in the tag except the carets, highlight it, and run it through Expand Abbreviation to get a full tag. For instance, this:

div style="width:100%;"

Once selected and run through Expand Abbreviation leads to this markup:

<div style="width:100%;">|</div>

If there is no selection, this action will use the current word regardless of where the cursor falls in it (Textmate will only parse to the left of the cursor).

Wrap Selection In Tag (control-shift-W)
As you might expect, if you select some text and invoke Wrap Selection In Tag, the selection will be wrapped in an HTML tag. Just like in Textmate, you can type out tag attributes and they won’t be mirrored to the closing tag, and moving outside the tag is a tab away.

Wrap Selected Lines In Tag (command-control-shift-W)
This one acts just like Wrap Selection In Tag, except that each line in the selection is wrapped.

Wrap Selection In Link (control-shift-L)
Unsurprisingly, selecting some text and invoking this command will wrap it in an HTML link tag. What makes this action more worthwhile than some of the others is that if you have a recognizable link on your clipboard it will be inserted, and there are several tab stops set up to make removing or editing the link’s title extremely easy. Unlike Textmate, this action does not attempt to populate the title from the actual webpage’s title. I’ve had Textmate hang while it waits to retrieve the webpage too many times to want to implement that functionality myself.

If you use this action while editing Markdown or Textile, the selection will be wrapped in a Markdown or Textile link rather than an HTML anchor.

Documentation For Tag (control-H)
If your cursor is inside an HTML tag, you can run Documentation For Tag to have the word under the cursor (or the selection) searched for in HTMLHelp.com’s HTML reference. If the cursor is inside an HTML tag, you’ll be taken straight to the first result (almost always the correct tag page). Otherwise, you’ll get a Google result listing.

TEA Preferences

TEA → Preferences offers a GUI to modify some TEA-related preferences. You’ll need to have a document open in order to access the prefs due to limitations in how Espresso sets up actions.

General Prefs
Checking “use XHTML by default” will cause TEA-based snippets that use the $E_XHTML variable to leave it blank. At some point in the future, TEA will hopefully be more intelligent about detecting whether a document is HTML or XHTML, but for now you’ll need to control it using this preference.

Similar to Textmate, anything entered in the Custom Shell Variables section of the preferences will be available as an environmental variable to any shell scripts you run through TEA. For instance, if you add a variable with the name “MY_CUSTOM_VARIABLE” and the contents “I love TEA!” then wherever you use the shell environmental variable $MY_CUSTOM_VARIABLE you’ll get “I love TEA!”

Actions
If you check “Enable custom user actions” you will be able to create custom actions without needing a custom sugar. This is useful not only for custom TEA-based actions, but for custom actions using third party sugars, as well.

Beyond the bundle

If TEA’s included actions aren’t enough for you, it’s extremely easy to add your own custom actions, port actions from Textmate bundles, and otherwise use TEA to jumpstart your own Espresso customizations. The TEA for Espresso wiki has lots of info on this sort of thing, or you can take a look at the HTMLBundle.sugar’s source for an example of porting Textmate snippets and bundle items (the HTMLBundle.sugar may also be of use to other folks who want Textmate’s HTML tab completions, among other things; download it here).

I’m also usually available in the forums or Espresso IRC channel if you have questions about using TEA, feature requests, bug reports, or other comments. Alternatively if you have a GitHub account, you can file bug reports and feature requests directly into the TEA for Espresso Issues tracker.

I hope you enjoy TEA with your Espresso!

The ideal feed reader

I have never found a Mac OS X RSS feed reader that, after extended use, I was completely happy with, and this makes me sad because my feed reader is right up there with my email client for regular usage. Every time a new feed reader comes out, I eagerly try it, am often very happy with it initially, and then inevitably become dissatisfied with its shortcomings after a week or two of use.

I’ve tried and discarded NewsFire, Vienna, NetNewsWire, NewsLife, Times, and many others which were on my computer such a short time they don’t deserve a mention. None of them fully satisfied my needs.

Most recently, I decided to give Fever a try. Though I highly dislike web apps (I’ve never found a web app that was remotely as good as its desktop counterparts, mainly thanks to speed and usability issues), I love Mint and figured that maybe, just maybe, Shaun Inman would be the one who could write a web app that was actually useable day to day.

Sadly, my hopes were dashed. Fever is too slow to handle the speed that I can skim through feeds, and has some of the same problems that drove me from NewsFire (like refreshing automatically and losing your place in whatever you’re viewing after an update). I find that I never use the “Hot” functionality because it is so useless at actually predicting what I’ll find interesting (partially thanks to my lack of Spark link blogs, but others have had similar issues), and as a result Fever for me has turned out to just be a rather unresponsive generic feed reader.

(Side note: I haven’t been happy with Fever, but I’d still hesitantly recommend it for some people. Simply the fact that its capable of standing up with options like NewsFire and NetNewsWire is a big point in its favor if you don’t mind the Ajaxy slowness.)

Despite my rampant discontent, I still do not want to code a feed reader myself, so on the off chance that someone is trying to make the perfect feed reader, here’s what it needs.

Make sure keyboard navigation is easy to use. This is the part of Fever that I enjoy most. Hit space bar to jump to the next item. Right arrow opens the item in the browser. Enter swaps between excerpt and full text. Left arrow jumps back to the source list to select a different group. Brilliant.

Allow grouping items by source feed. NewsFire does this beautifully, but for some reason none of the other feed readers have even attempted it. I typically want to read or skim items based on which feed they’re in, and grouping items visually by feed makes it very easy for me to do so. Sticking the source website in a column, or under the title, or over the title, or next to the title does not work as well.

Don’t use a three-pane interface. Mail is a brilliant application for reading email. Feeds are not email. Go use Fever, NewsFire, or Times and find out why designing a great, feed reader-specific workflow is a better plan than rehashing the tired old three-pane news reader.

Settings should be possible to apply per feed, per group, or as application defaults. I love that NetNewsWire and Fever both allow me to granularly set behavior preferences for feeds. Setting refresh rates on a per-feed basis is rarely necessary, but when you need it you’ve got to have it. When I was hunting up freelance work, I subscribed to a few Craig’s List feeds. I eventually had enough work that the feeds were just noise, so (thanks to NetNewsWire), I stuck them in a group and turned off refreshing for that group. They were ready for when I needed them in the future, but out of my way for now.

Don’t sacrifice performance for aesthetics. Times, I’m looking at you. Times is a beautiful feed reader, with an innovative approach to feed reading, and a great set of features. I’d be using it right now if it weren’t buggier than an anthill. The somewhat recent 1.1 update fixed a lot of the really annoying bugs, but the program still isn’t usable. Maybe in another few point updates.

Don’t sacrifice aesthetics for performance. Hi, NetNewsWire! To be fair NetNewsWire mitigates this problem somewhat by offering some really top-notch themes, but although the application is certainly solid and obviously has been given a lot of attention to detail, it could still use a bit of the flair of NewsFire, Times, or Fever. I think there’s a middle road here, and on that middle road a talented designer and talented developer are collaborating. Sadly, feed readers appear to be primarily one-man-in-his-basement affairs.

Remember that users will subscribe both to feeds they want to read every word and those they merely want to skim. Times and Fever are both best for feeds that you want to focus on every headline. NewsFire is great for skimming through lots of headlines thanks to its group-by-feed feature. NetNewsWire is actually pretty good at both, as long as you’re careful about how you sort feeds into groups. The problem here is that the needs (and thus best interface) for feeds with lots of signal versus feeds with lots of noise are quite different, yet feed readers invariably only offer a single interface for browsing and accessing feeds (or offer multiple possible interfaces, but you have to switch between them globally for the whole program). I don’t know what the perfect solution is here, but I do know that it can only exist if the program recognizes that I have two very different approaches to feed reading and provides options accordingly.

Perhaps I’ll never see my perfect feed reader, and instead be destined to keep bouncing between substandard options as they release new upgrades and rekindle my hope that maybe this time they’ll have gotten it right. Perhaps Mac OS X feed readers simply aren’t profitable enough to attract the time and care necessary to craft something that does everything I want without being bloated and terrible, and I’ll eventually just have to suck it up and go with a web app.

But I hope that isn’t the case.

Estimates

Estimation

My other favorite time estimator is Stuffit, which back when I still used it would tell me that files would be completely unstuffed anywhere from -16,000 to 1,000,000,000 minutes. I never was sure how a file could have been unstuffed in negative minutes. Possibly Stuffit was trying to tell me that it had been unstuffed once before in the past, so why the hell was I opening it again?

Beating the game

Shortly after it came out, I beat Braid, a puzzle platformer initially released for the Xbox 360 as an arcade title and incidentally the single best game I’ve played in years (it is now also available for Mac and PC). Braid was a short game (I finished it in one Saturday with lots of play, and a couple hours the following Monday; probably around 6 hours total) but it was one of the most satisfying gaming experiences I’ve had in a long time. Braid’s puzzles all revolve around your ability to affect time, and each one is unique. No puzzle requires you to travel until you find an appropriate item or hint that makes everything clear. You could, with patience and a willingness to think outside the box, solve each puzzle sequentially the first time you played the game. In a world where puzzle and adventure games have mostly devolved into mindless color matching or poking around until you find the hidden lever, Braid is a breath of fresh air.

If you’d like to get a great feeling for Braid take a moment to read through the Official Braid Walkthrough. I promise, it won’t spoil anything. Quite the contrary.

Early on when I was playing the game, I got frustrated at one of the puzzles and resorted to the internet to find a walkthrough with some pointers. I stumbled across the official one, read it, and rather sheepishly returned to the game without looking further (incidentally solving the puzzles that I’d had trouble with after leaving them alone for a while and coming back).

But the day that I beat the game, I cheated for real. In my defense, one of the puzzles that I sought help-via-walkthrough on was something I probably wouldn’t have figured out without some sort of hint, dumb luck, or an outside opinion.

For the second puzzle whose solution I looked up, though, I was just being lazy. I had one puzzle left, as far as I could tell it was impossible, and I wanted to beat the damn game and go to bed. After reading the solution, I realized that it was far from impossible, that if I had slept on it one more night and come back with a fresh perspective I would doubtless have figured it out for myself, and that I had just cheated myself out of the pleasure of discovering a solution on my own.

Which makes me wonder; when did beating the game become so important to me?

I don’t really know for sure, but I suspect I have beat maybe only 25% of the video games I’ve ever played, and most of those I completed before I entered junior high. This is in part thanks to the fact that my prime game-playing time (high school and college) I spent working for Inside Mac Games where it was more important to play lots of games than to play games to completion. Even for games that I loved and had a compelling reason to finish (like a few of Spiderweb Software’s games) I inevitably got interrupted by something new that needed to be played and written up; a few interrupted games I went back to and finished, but many more I simply let fall to the wayside. The rest of the reason that I have such a rotten record for games that I’ve beaten compared to when I was young is that I can now afford to just buy a new game if something ends up frustrating or annoying me. When I was in elementary school, Riven pissed me off more times than I can count. I constantly came up against impassable obstacles, and there were weeks or more when I would leave the game alone in disgust and frustration. I couldn’t afford to buy any other games, though, thanks to my all but non-existant allowance, so I kept coming back to Riven until I finally beat it.

Given my record, beating a game isn’t high on my list of priorities. Hell, just looking at my Xbox arcade collection proves that; of the twenty-two I own, I’ve only beaten two (one of which was Braid).

Which brings me back to the question: why was beating Braid important enough to cheat myself out of further time with it? I know, both from experience and from the official Braid walkthrough, that the journey is the reward and sometimes all you need is a good night’s sleep for a puzzle to open up to you. And I still ruined it.

My temptation is to blame the internet. The games I remember most fondly are the old LucasArts adventure games (Indiana Jones and the Fate of Atlantis, Sam & Max, Day of the Tentacle, The Dig), and I played them through either before my family had internet, or when walkthroughs were harder to find. In a way, I couldn’t find spoilers, so I couldn’t spoil myself.

That argument, however, is unfair. The problem isn’t that walkthroughs exist and are easy to find. I actually prefer information to be readily available; there’s nothing worse than having something in a game you can’t solve that you’ve been working at for days with no luck, and then being unable to find any information online to help you. The fault lies somewhere else.

I think the real reason that I became so focused on beating Braid, despite knowing better, was because I have become accustomed to games having some worthwhile content that is then expanded with mountains of filler. A game of Braid’s caliber, where every puzzle is lovingly crafted and unique, took me completely by surprise.

And that makes me sad, both because the game industry as a whole is so focused on quantity rather than quality and because I as a gamer have reached a point where I’m so immured to games without redeemable qualities past the bullet points on their boxes that I unintentionally spoil the few gems that I do come across.

If you have not yet come across Braid, I urge you to learn from my mistakes: don’t just beat the game; play it.