Tuesday, 14 June 2011

Raspberry Oatmeal Spinach Cups

I'm no culinary genius, but I am an adventurous cook and a fearless eater, and that gets me a lot of mileage in the kitchen.  This morning, while making steel-cut oatmeal, I had a good-crazy experiment.  I smooshed some raspberries into my oatmeal and served it on a plate of baby spinach leaves.  And it was good.

In fact, it was so tasty that I thought there must be some "real" recipe out there that incorporates these three ingredients.  You know, one that explains that the real secret is to drizzle 20-year old balsamic vinegar over the finished product, or roast the oatmeal and place in a bag with 1/4 teaspoon of an exotic Australian spice 24 hours before cooking.  Or use one of those creme brulee blow-torches.  Something top-chef-y.

So I looked on Google Recipe Search for a recipe with oatmeal, raspberry, and spinach...and got zero recipes.  (Well, actually I got 13 results, but none of them *actually* have all three ingredients.  Google Recipe is a big fat liar.)

Dang...this was so tasty that I thought I should share it:

Ingredients:
  • 3/4 cup of water
  • 1/4 cup of steel-cut oats
  • 1/4 cup of raspberries
  • 2 oz of baby spinach leaves
Preparation:  (15 minutes)
Boil water.  Add raspberries and oats and reduce to simmer.  Stir the oatmeal and smoosh the berries occasionally for the next 10-12 minutes until the oatmeal is a reddish paste, while spreading out the spinach leaves on a plate.  When the oatmeal is ready, put little dollops of the red paste on each of the leaves, like little lettuce cups!
If someone with serious culinary skills wants to improve on my accidental discovery, I'd love to hear about it.  In the meantime, I'm thinking that maybe I should submit it to the three ingredient recipe challenge!

Tuesday, 8 February 2011

Your friend's first programming language

Your friend wants to dip a toe into the world of computer programming...and has asked you for advice.  There are so many languages out there...which would you recommend?

So you ask your friend some questions, like:

  • What do you want to do with the language...what kind of programs do you want to write?
  • Is this the first of several languages you want to learn lightly, or do you want to go deeply into one language for an extended period of time?
  • How important is the personality of the user community?

 And then you recommend the one that's most aligned with their needs and personality.

However, before your friend can get started using this first programming language, they're going to have to install the language on their machine.  Here's a reminder of what they'll need to do before they get started:
  • JavaScript:
    • Pre-installed in the browser
    • (optional in theory) Firebug or Chrome Developer Tools or IE debug bar
  • Java:
    • Pre-installed on OSX, or download from http://www.java.com. 
    • (optional in theory) Install free IDE (Eclipse, IntelliJ, Netbeans, etc.)
  • Python: (Beyond trypython.org)
    •  Pre-installed on OSX, or download from http://www.python.org/downloads
    • (optional, in practice) If you don't like IDLE, there are several other IDEs.
  • Ruby: (Beyond tryruby.org)
    • Pre-installed on OSX, or download from http://www.ruby-lang.org/
    • (optional in theory) Rails.  Pre-installed on OSX, or download from http://rubyonrails.org/
  • PHP:
    • Pre-installed on OSX, or download from http://www.php.net/
    • (optional in theory) Webserver. (if not preinstalled).
  • C + make:
    • Likely pre-installed on Linux, on developer-tools CD for OSX, or use cygwin on Windows.
    • (optional)  Subscription to O'Reilly Bookshelf.
  • C#:
    • On Windows, install Visual Studio, else suffer using Mono port.
    • (optional, in theory) MSDE developer account
  • Objective-C:
    • On OSX, install from developer-tools CD, else suffer using GNUSTEP port.
    • (optional, in theory) Apple developer account and iPhone/iPad
  • LISP:
    • Pre-installed on OSX and several others, else install emacs.
    • (optional)  A *readable* LISP book, last published in the 1980's
  • Go: (Beyond golang.org)
    • Install Python (see "Python", above).
    • Use Python to install Mercurial
    • Use Mercurial to check out the Go source code.
    • Install C and Make tools on the platform.  (See "C+Make", above)
    • Build the Go source code.
    • Modify your environment to add GOROOT and add $GOROOT/bin to your PATH
It's a shame that the process of installing Go is so painful.  Go's rather simple syntax makes it a really promising language for teaching beginners, but the installation process is so onerous that beginners are going to have a really tough time doing it unchaperoned.

But this is totally fixable...Go just really needs an installer so that you aren't required to install two other languages and a DVCS before you can write "Hello, World."

Friday, 21 January 2011

Footprints(tm)

I dreamed I was walking along the beach with the Verizon guy.
Many scenes from my life flashed across the sky.
In each scene I noticed footprints in the sand.
Sometimes there were two sets of footprints,
other times there were one set of footprints.

This bothered me because I noticed
that during the low periods of my life,
when the lure of technology failed me,
and I couldn't download that critical email,
or use my phone's GPS to pinpoint my location
and I was lost in a maze of twisty passages, all alike
looking at the sand, I could see only one set of footprints.

So I said to the Verizon guy,
"You promised me, Verizon guy
that if I followed you into the land
of the $49.99 unlimited data plan
you would walk with me always,
and that you would "hear me now."
But I have noticed that during
the most trying periods of my life,
when I couldn't reach my gmail,
And map tiles were not forthcoming,
there have only been one
set of footprints in the sand.
Why, when I needed you most,
have you not been there for me?"

The Verizon guy replied,
"The times when you have
seen only one set of footprints,
and felt so terribly disconnected
is when I forgot to throttle bittorrent.
You can switch providers, but remember
There's still nine months left on your contract."



Wednesday, 19 January 2011

Banned (password) poetry corner

Twitter's list of banned passwords is embedded in the source of their signup page...search for BANNED_PASSWORDS.

[It's interesting that both "iloveyou" and "tequiero" made the list.]


Poetry ingredients: 100% banned passwords, plus punctuation.

Ode to Joe Jackson:
jennifer, jennifer, helpme
jennifer, jennifer, iwantu
jennifer, jennifer, iloveyou
8675309, 8675309

Life of a Roadie:
testing, testing, 123123, (marlboro)
testing, testing, 123123, (marlboro)
testing, testing, fucking guitar, (midnight!)
(marlboro, marlboro) whatever, asshole, (marlboro)
suckit, michael jackson, fuckyou slayer
testing, testing, success!
zzzzzz

Real football:
america: raiders, eagles, packers, dolphins, dallas cowboys, redskins, broncos.
canada: whatever.
london: chelsea? arsenal gunners? united? please. (soccer pussies)
america: jaguar, panther, gators/bulldog/orange/knight (college)... winner!

Route 66 (21st century edition)
phoenix, austin, dallas, chicago, newyork, boston, (swimming), london, (swimming), russia, (swimming), sydney, (swimming), brazil...

Brokeback haiku:
sierra mountain
welcome cowboys! fishing...aaaaaa
fucking? 000000...trouble.

British Royalty:
george, dragon slayer
...whatever...
edward, charles, george, george (biteme, america. freedom?)
...whatever...
prince charles/princess, prince charles/mistress?
prince badboy, princess fucked, prince freedom
...
prince william?

Whine pairings:
rainbow/sunshine
superman/batman
monica/rachel
victor/victoria
angels/america
baseball/football
biteme/blowme
123456/654321
bond007/trustno1
driver: porsche/ferrari/camero/corvette/mercedes/saturn/toyota...harley
startrek/starwars (ncc1701/thx1137)

The Made Men and the Crying Game (Mike Judge meets David Mamet):
beavis: fuckyou, sparky
butthead: fuckme? fuckyou, asshole
beavis: fuckme? fuckyou, mother fucker
butthead: danielle, please
beavis: hooters? blowme!
danielle: blowjob?
beavis: letmein, bigtits
000000....bigdick cumming, bigdick cumming,
(hardcore cumshot)....danielle!
butthead: daniel.
beavis: daniel?
daniel/danielle: daniel.
beavis: daniel? fuckme!
daniel/danielle (killer): fuckyou! (hammer, hammer, hammer)
beavis: aaaaaa...helpme
butthead: fuckyou, sparky

The next seven dwarves (starting with "s")
scooby, skippy, smokey, spanky, sparky, sticky, stupid


Source:
twttr.BANNED_PASSWORDS = ["000000","111111","11111111","112233","121212","123123","123456","1234567","12345678","123456789","131313","232323","654321","666666","696969","777777","7777777","8675309","987654","aaaaaa","abc123","abc123","abcdef","abgrtyu","access","access14","action","albert","alberto","alexis","alejandra","alejandro","amanda","amateur","america","andrea","andrew","angela","angels","animal","anthony","apollo","apples","arsenal","arthur","asdfgh","asdfgh","ashley","asshole","august","austin","badboy","bailey","banana","barney","baseball","batman","beatriz","beaver","beavis","bigcock","bigdaddy","bigdick","bigdog","bigtits","birdie","bitches","biteme","blazer","blonde","blondes","blowjob","blowme","bond007","bonita","bonnie","booboo","booger","boomer","boston","brandon","brandy","braves","brazil","bronco","broncos","bulldog","buster","butter","butthead","calvin","camaro","cameron","canada","captain","carlos","carter","casper","charles","charlie","cheese","chelsea","chester","chicago","chicken","cocacola","coffee","college","compaq","computer","consumer","cookie","cooper","corvette","cowboy","cowboys","crystal","cumming","cumshot","dakota","dallas","daniel","danielle","debbie","dennis","diablo","diamond","doctor","doggie","dolphin","dolphins","donald","dragon","dreams","driver","eagle1","eagles","edward","einstein","erotic","estrella","extreme","falcon","fender","ferrari","firebird","fishing","florida","flower","flyers","football","forever","freddy","freedom","fucked","fucker","fucking","fuckme","fuckyou","gandalf","gateway","gators","gemini","george","giants","ginger","gizmodo","golden","golfer","gordon","gregory","guitar","gunner","hammer","hannah","hardcore","harley","heather","helpme","hentai","hockey","hooters","horney","hotdog","hunter","hunting","iceman","iloveyou","internet","iwantu","jackie","jackson","jaguar","jasmine","jasper","jennifer","jeremy","jessica","johnny","johnson","jordan","joseph","joshua","junior","justin","killer","knight","ladies","lakers","lauren","leather","legend","letmein","letmein","little","london","lovers","maddog","madison","maggie","magnum","marine","mariposa","marlboro","martin","marvin","master","matrix","matthew","maverick","maxwell","melissa","member","mercedes","merlin","michael","michelle","mickey","midnight","miller","mistress","monica","monkey","monkey","monster","morgan","mother","mountain","muffin","murphy","mustang","naked","nascar","nathan","naughty","ncc1701","newyork","nicholas","nicole","nipple","nipples","oliver","orange","packers","panther","panties","parker","password","password","password1","password12","password123","patrick","peaches","peanut","pepper","phantom","phoenix","player","please","pookie","porsche","prince","princess","private","purple","pussies","qazwsx","qwerty","qwertyui","rabbit","rachel","racing","raiders","rainbow","ranger","rangers","rebecca","redskins","redsox","redwings","richard","robert","roberto","rocket","rosebud","runner","rush2112","russia","samantha","sammy","samson","sandra","saturn","scooby","scooter","scorpio","scorpion","sebastian","secret","sexsex","shadow","shannon","shaved","sierra","silver","skippy","slayer","smokey","snoopy","soccer","sophie","spanky","sparky","spider","squirt","srinivas","startrek","starwars","steelers","steven","sticky","stupid","success","suckit","summer","sunshine","superman","surfer","swimming","sydney","tequiero","taylor","tennis","teresa","tester","testing","theman","thomas","thunder","thx1138","tiffany","tigers","tigger","tomcat","topgun","toyota","travis","trouble","trustno1","tucker","turtle","twitter","united","vagina","victor","victoria","viking","voodoo","voyager","walter","warrior","welcome","whatever","william","willie","wilson","winner","winston","winter","wizard","xavier","xxxxxx","xxxxxxxx","yamaha","yankee","yankees","yellow","zxcvbn","zxcvbnm","zzzzzz"];

Simple, easy, and obvious considered harmful

There's a standard university story that goes something like this:
A math/science instructor is deriving a complicated formula on the blackboard. Each
step gets increasingly, hideously convoluted, until the instructor boldly states: 
"From here, it is obvious that..."
And writes down a radically simpler formula, seemingly unrelated to any of the previous steps. Upon finishing, the instructor pauses. His eyes dart up to the tangled mess of the previous step, then down to its far-too-distant cousin. The students wait to commit this deus ex machina to their notes, as the instructor, his writing hand still elevated, furrows his brow. 
He starts to speak, then catches himself. He looks away from the board, then back again.  He begins pacing back and forth in front of the board, examining it from different angles.  Suddenly and without a word, he walks out of the room, as the students sit in befuddled silence. Should they leave? Should they wait? After a minute, he bursts back in, and continues:
"Yes, this is obvious. Moving on..."
This happened to me exactly once during my university days. It was an entertaining professor who enjoyed the occasional theatrical moment...but he was also a darn good teacher, and a few minutes later, he rewound the lecture and derived the magical step (with several blackboards full of formulas), and all was right in the world.

In my life as a software engineer, I read a lot of documentation.  In that domain, instead of the word "obvious" (which reads as "obvious-to-me-and-if-it-isn't-obvious-to-you-then-this-so-called-documentation-will-be-utterly-useless-to-you") writers substitute the word "easy" or "simple":
It is easy to foo a bar using BazLibrary.  You simply use the qux() method.
Well, of course it's easy and simple for the writer, whose full-time job is working on the BazLibrary and may even be one of its developers.  And it truly might be easier and simpler than the OtherBazLibrary that causes contractors to raise their rates.  But it has 50% more words and 0% more helpful content than this version:
To foo a bar using BazLibrary, use the qux() method.
Words like easy and simple and obvious are like Ding-Dongs...they're the empty calories of the documentation world.

Exercise for the reader: search for occurrences of the words easy/easily, simple/simply, and obvious/obviously in your code/documentation.  Are any of them necessary?  How many you can simply remove or easily edit  to obviously avoid these filler words?


Friday, 13 August 2010

Jerks and Yanks

Businessspeak includes lots of metaphors from physics: talk about how things are "positioned" in the marketplace, or how a team's "velocity" is high, or how the company's production is "accelerating." Why stop there?

The derivative of acceleration is "jerk" and is a measure of how fast your acceleration is changing. It's the thing that can cause you to spill your drink in a moving car or give you whiplash. And you can quantify how much of a jerk you're experiencing -- you could express it in meters-per-second-cubed.

And when you figure mass into the equation, the equivalent derivatives to velocity/acceleration/jerk are momentum/force/yank. So yank equals mass times jerk.

Or, in business-speak, a massive company only has to be a minor jerk to be a huge yanker.