My goodness…

April 17th, 2008

What a wild ride the last three months have been!

Things were beginning to pick up in my professional career, having started a couple of new projects with enthusiasm (and funding!), and having ramped up my energy for supporting an existing project. On top of that, I'd been hired as a long-term contractor at a compensation rate commensurate with my experience for the first time in years.

Then, things kind of went "splat" in an aspect of my personal life. I will not detail it here, but I was not prepared to handle what happened and keep the above flowing smoothly. Projects stalled, this blog went pretty dark, my enthusiasm and concentration waned, and I found myself sending a resignation letter to my newest employer. (Thankfully though, that at least was quickly upgraded to "indefinite personal leave" after speaking with them.)

I want to start writing again, for a multitude of reasons, but it's time for me to set the ROTR journal down for a while. I will likely start other blogs for specific reasons -- if I do, I'll probably post about them here -- and I may one day start posting on ROTR again. For now though, it's time for me to set it down. :)

7 dishes in 11 hours

April 10th, 2008

I made it!

Yesterday, in just about 11 hours, I prepared six recipes to completion, started a seventh based on leftover ingredients, and left the kitchen cleaner than it was when I began the project.

Why?

Because my darling wife loves cooking from scratch, but doesn't want to get burnt out on it, and I haven't done a lot of intense food preparation for a spell. So I offered to spend an entire day cooking as many meals as I possibly could, so neither of us would have to think about it for a few days.

How?

The day before, we bought some ingredients, loosely based on some recipes in Dr. Joel Fuhrman's books, and including some other ingredients that we just like to have around.

The morning of, I transcribed the recipes to paper using the "tabular recipe notation" showcased at Cooking for Engineers. For example, the "Veggie 'Meat' Loaf" recipe:

/rotr/wp-content/uploads/2008/04/photo-43-300x225.jpg

I then created a rough schedule for the day across two sheets of paper, with recipes in columns and each row containing actions to be taken for each recipe. The rule of thumb: nothing within each row should contend with another thing. If two ovens are needed, defer one of the recipes to a later row where the oven is no longer in use by another recipe.

The schedule was key for keeping the flow going with so much resource contention -- there's only three burners that work well on our stove, and we only have one oven, yet three recipes used the stove and three used the oven.

Here's my schedule, complete with markups as I altered it:

/rotr/wp-content/uploads/2008/04/photo-44-300x225.jpg /rotr/wp-content/uploads/2008/04/photo-45-300x225.jpg

What?

Ingredients available when I started: diced tomatoes, pumpkin, tomato paste, barley, quinoa, brown rice, yellow split peas, garbanzo beans, red kidney beans, blackeye peas, great northern beans, oatmeal, oat flour, whole wheat flour, pastry flour, dark rye flour, lemons, tomatoes, garlic, sweet onions, red onion, yellow bell pepper, red bell pepper, raw sunflower nuts, walnuts, raw almonds, dates, raisins, jalapeños, carrots, celery, green onions, romaine lettuce, cabbage, spinach, apples

Ingredients now available: diced tomatoes, pumpkin, barley, quinoa, brown rice, blackeye peas, great northern beans, oatmeal, oat flour, whole wheat flour, dark rye flour, lemons, tomatoes, garlic, jalapeños, romaine lettuce, spinach, apples

Ingredients untouched by this project: diced tomatoes, pumpkin, brown rice, jalapeños, romaine lettuce, spinach

Prepared dishes now available for us to choose from: tons of Cabbage Raisin Soup, 4 servings Quinoa in Color (already gone!), a Veggie "Meat" Loaf, several snackfuls of Apple Walnut Surprise, 12 Whole Wheat/Rye Burger Buns, 25 Bean Burgers (and some salad crumblings from the ones that fell apart).

On the way: Something with the leftover sunflower nuts and almonds (currently soaking) and walnuts; the leftover raisins and dates (currently soaking); and canned pumpkin. My wife wants to turn it into a pudding of sorts. :)

So?

Both parents needn't worry about preparing food for some time.

I want to do this again, with regularity, helpers, more ingredients, even more food in mind, and perhaps with extended family from time to time.

This time around, I did it alone (I didn't even ask for help from my wife until all the kids were in bed!) since I had never synchronized so many food preparation tasks at once, and thought that keeping the kitchen off-limits to everyone but myself for most of the day would help keep the flow smooth (it did).

It was tremendous fun. Next time I'll have even more fun!

Morning choconana green smoothie

March 30th, 2008

Four times, in eight twirls of the Magic Bullet, for four people this morning:

  • Add, then blend:
    • 1/4 C rice milk
    • 1 heaping TB fresh ground flaxseed
  • Add, then blend:
    • 2" diameter wad of fresh spinach leaves
    • 1 banana
    • 1 heaping TB peanut butter
    • 1 heaping TB cocoa powder
    • drizzle of real maple syrup
    • 1/4 C water

Leopard surprises

February 18th, 2008

Apple, no matter what kind of company you or I may think it is, sure has some good software artisans working for their OS X team.

It's nice to be able to just start using svk without worrying about installing it.

I started using it, then realized I hadn't installed it yet -- but it was working. which svk told me that it was in /usr/bin/svk, which tells me that it was installed with the rest of the system. Nice!

List container impedance mismatch

February 15th, 2008

Oh yeah. I forgot about this until now.

In Python, ([] == []) == True.

In ActionScript (and JavaScript and EMCAScript), ([] == []) == false.

Task number one for tomorrow: make it easy to compare Array objects using assertEquals within FlexUnit tests.

Taming and trimming FlexUnit async tests

February 14th, 2008

I don't have time to update the HOWTOs associated with this before I end my day at the computer, but I had an ah ha! moment this evening with regard to getting FlexUnit to play nicely with RemoteObject against a PyAMF server.

Changelogs: ah ha moment, refinement and abstraction.

Files: the new test, the new class.

Some observations, where I use terminology loosely:

  • ActionScript looks superficially like Java, which is a language that I haven't used a lot, but that I've glanced at enough to notice certain patterns.

  • ActionScript is actually more like JavaScript, but has enough static typing to make it easy to follow Java idioms.

  • FlexUnit/RemoteObject samples that I've studied seem to define callback functions for asynchronous tests outside of the test case. This is unnecessary, in my opinion, and makes the test case much less readable.

    If you look at the example test above, there are five variable assignments, then a call, that comprise the entirety of the test:

    1. Line 41-42: Trigger an asynchronous operation that will produce a value object that we want to inspect.
    2. Lines 43-48: Define a function to compare the state of that object with our expectations of it.
    3. Lines 49-54: Boilerplate to connect the two together.

To me, this is a clearer way of defining tests. I hope to refine this even further by turning item 3 above into one or two lines of code.

To get to that point, my plan is to develop an API for deleting the database collection (if allowed by the server), create an empty named database, list database names, and delete a named database. That should give me enough code to figure out where the lines of fissure are to reduce that boilerplate.

Does anyone else out there know of more FlexUnit tricks? :)

Cross Domain XML

February 14th, 2008

Cross Domain XML:

Adobe Flash Player can be used to create applications that load data from public services and APIs. Flash can load data across domains on a permission basis (permission from the server). This is done by the server having a small crossdomain.xml file that specifies whether Flash can connect to services on that server.

Apparently I need to pay attention to this file if I want to be able to serve up a resource using the http:// scheme on localhost, and access it using a SWF file that was loaded using the file:// scheme.

Nothing's infallible of course, but I suppose this crossdomain.xml file is a reasonable way to allow opt-in usage of resources from Flash.

Finding documentation

February 13th, 2008

Adobe Flex 3 Language Reference, via bytearray.org, via searching Google for flex 3 actionscript Remoting.

I'm not sure why I didn't find this sooner (perhaps I did but didn't bookmark it at the time) but I'm sure this will be a useful resource, since all of the other pages I've found for Flex remoting deal with using MXML -- which I'm trying to avoid, since I'm embedding the remoting calls into FlexUnit tests. :)

On the safe side of upgrading to OS X 10.5.2

February 13th, 2008

Out of the corner of my eye, I noticed that there was a process transferring a lot of data at a sustained rate. A glance at Activity Monitor showed that it was the Apple software updater.

A few seconds later, it told me a new update for Leopard was available. I went for it.

Having read reports in the past of isolated problems with upgrades in the 10.4 series, I anxiously waited: Soon, I'll invest in a matching external drive, but at the moment, I keep backups of important files and projects but not my entire machine.

Thankfully, the upgrade process was smooth and went rather quickly. The more-opaque menus are a nice touch right away. I'm sure I'll discover more as time passes.

Using Flex 3 without MXML, only ActionScript

February 12th, 2008

Using Flex 3 Component without MXML:

This post is a sample AS3 code without any MXML that enables you using Flex Component in pure AS3, initializing manually Flex Application.

This should be an excellent resource for me to use tomorrow. I'm still on my quest to learn Flex and ActionScript by way of test-driven development.

So far, I have dabbled in PyAMF enough to run a remoting server that responds to remoting client code in a Python unit test, confirming that the server side is set up correctly.

The next step is to get a FlexUnit test working that does the same operation.

Not tonight, though! :)