Sunday, May 11, 2008

I took Zack Arias' OneLight Workshop on Friday. It was, on the whole, awesome, as many others have reported, with the personal exception explained below.

We spent several hours reviewing the science and the analysis of light, shutter speed and aperture. Being an engineer, I can pretty much memorize this level of technical stuff when it's presented as clearly as Zack does: words in my eyes (slides), words in my ears (him speaking), a couple diagrams, quite a few examples and definite humour. So far so good.

The next part of the workshop I was totally unprepared for. This was the part where Zack set up a lighting situation and a model, explained the setup, and then let everybody in turn use their own camera (but his light) to shoot the model. I was a nervous wreck and confused and embarrassed and disfunctional.

Half of my problem -- and both halves were my problem, not the workshop's -- was that I didn't know my camera well enough. I thought I knew how to shoot in manual mode, but while nervously fiddling to get that to actually work, I screwed up several other settings on my camera. It took me another hour after that to recover proper focus, because I could not relax and look and see what was wrong. I've used other fully manual cameras before, and I've shot with the Rebel in aperture priority or shutter priority mode, but I needed to know *this* camera well enough to be able to focus on other things besides the camera's button's and dials and screen. Ouch.

The other half of my problem was sudden incapacitating social awkwardness. I was completely bashful about working with live, volunteer models I'd never met before. I was intimidated by going before and after professional photographers who knew their cameras and who were joking comfortably with the models. I was embarrassed at wasting everybody's time, the models and the other photographers waiting to use the same light setup. I was too wrapped up in my own awkwardness to ask the models to turn their head, or move closer to the light, or up or down. Stupid, huh? They were lovely, friendly, patient models but I was completely flustered. I think I babbled incoherent apologies at them at the end of each "shoot".

As this part of the workshop continued into our third and fourth light setups, or about two hours after quietly flipping out, I started pulling things together. Several people definitely tried to be helpful and were in fact helpful (thanks Tara and of course Zack) but I was at that point where I was too self-conscious to be very effective at accepting help. I've seen other people in that position but haven't experienced it myself recently. It's a humbling reminder for when I'm in "helper" role of saying "Oh, just do it this way". I got my focus straightened out. I started adjusting my aperture in the right direction instead of consistently doing it in the wrong direction. I got to that moment where I decided to try to alter a shot by taking down the light on the background compared to the model. I worked it through: I remembered I had to increase the shutter speed to pick up less ambient light, while maintaining an aperture that picked up the flash on the subject at the same brightness. The result, while in no way a good photo -- I mean, not at all -- was at least the product of an intention that I formulated to make use of what I'd learned.

It all went uphill from there. I started to be able to make a plan and imagine a look and adjust what part of the background was in the photos and how much light it had. I really didn't take a lot of good photos but increasingly I was able to make changes that I thought of. I took notes of what I was doing to cement the principles.

At the end, I finally got comfortable photographing one of the photographers. This was in the part of the workshop where we split into groups and set up our own lighting. Tara setup a shoot-through umbrella near a wood fence, and Bärbel was the fellow photographer who sat for my shooting, as I sat through hers:

Bärbel in our 7th light setup

I was now comfortable enough to ask Bärbel to move away from the fence, to give more separation between the light on her and the light on the fence, thus more control at dialing one up and one down. I was comfortable enough to move the umbrella/flash stand closer to her to her. I was still trying to be quick and didn't take a zillion shots with different facial expressions or different compositions, but since I was there to learn the lighting part that was OK. And I got this shot, and I was happy.

Thanks to our hosts who provided excellent food and a location, and the models and fellow photographers and Zack. I was too dorky to act normally but if you happen to stumble on this I want you to know I enjoyed myself and learned a lot.

Monday, May 05, 2008

I'm getting into geographical distributions and shapefiles now for the health data accessibility project. Ekr and Cullen got the basic R and maptools extension commands working for me. I tweaked it a bit and now have thumbnails and detail views (shown here, deaths attributed to HIV in white males):



  



One thing I've learned about freely-available shapefiles is that they have a lot of crap in them. Crap is, of course, in the eye of the beholder. In my case, I want the shapes of the regions only, and not the population, households, whites, blacks, males, females, density, age distributions, divorced, married, never married, single-parent household, household units, vacancies, mobile homes, farms, crop acres and more counts/rates, for every region.

I can probably get a shapefile editor and remove that stuff but it will only slim down the files slightly. Even bigger than all that data are the latitude and longitude of every vertex required to draw a state outline. Think coastline and all those islands in Alaska, Puget Sound, etc. Since my map sizes are limited anyway, I wonder:
  • how many vertexes I could afford to lose without losing any
    resolution in the larger size, and how I could find a shapefile appropriate for that
  • how much smaller the resulting shapefiles would be
  • whether that would be any faster anyway
Performance is a problem right now! I can trivially do caching of drawn maps but it's at the point of slowing development down at times I do not want to cache.

Thursday, May 01, 2008

The code review I got from Grant last weekend was really great, but I'm back to programming solo. Luckily, one of the nice things about code reviews is that when you explain something, you are likely to see problems with it before the person you're explaining to even finishes parsing your tech-tech-tech. And you don't even need the other person to make this work if you're disciplined enough to read code aloud all by your lonesome. (I can read code to the cat at home, but maybe I need a teddy bear at work.)

So here's how I read some code to myself yesterday:


Okay, first step here is we get a list of graphs to draw, it's a generator.
We go through each graph figuring out which datafiles we need to load so we
only load them once.

This we know is working so far because of print statements, showing two
datafiles in this case.

Now the next step, we're going through the generator again,... oh.


Yeah, you can't use a generator twice in Python and I knew it, but I didn't remember it until I heard myself speaking out loud. What's up with that?

Friday, April 25, 2008

Paul commissioned me to knit a tie-dye, Grateful-Dead-inspired, tie. I made it, he gave it to the UCSC Chancellor at a press announcement. Cool!

Wednesday, April 23, 2008

Kids car seats are getting bigger (apart from the ultra-portable infant seats). Three reasons why, all related to new safety requirements:
  1. LATCH (Lower Anchors and Tethers for CHildren) are anchor points in cars that make installing carseats much safer since roughly 2003 when they became standard in all passenger cars. Manufacturers of car seats have made them bigger as a result. The seat needs to accommodate a strap between LATCH points as well as routing for old-fashioned seat-belts. The tether for the top of the seat, which goes over the back of the car's seat back and fastens there, has caused the manufacturers to make the back of the carseat taller and have a little more room for hardware above the kid's head.
  2. Around the same time as LATCH, the US has seen more stringent regulations for when car seats must be forward facing or rear facing. To save parents from buying multiple seats, there are convertible seats that can be turned around somewhere between infancy and toddler/preschool age, and still be used up to 60 pounds in some cases if the kid is not too tall. Of course, seats that can be converted from rear-facing and reclined positions to front-facing and upright positions have bulkier bases to accommodate the different LATCH points, seat belt slots and tilt options.
  3. New requirements and recommendations for booster seats for kids up to 6 years old and 60 pounds (or even 8 years old and 80 pounds) have been enacted in many states in the last three or four years. A pure booster seat, to raise the kid and position the belt safely, is currently thought to be best for school-age kids once they're too big to sit in a full carseat. However, in order to provide an option that parents can buy to last from pre-school through school age, many forward-facing car seats are now convertible to pure booster seats.
In my recent research, I found it's hard to buy a mainstream car seat that is not convertible either from forward to rear facing, or from forward-facing (with a seat back) to booster seat. I was looking for a seat for a kid over 22 pounds and over 1 year old, that is 16 inches wide and lightweight. And the main special requirement? FAA approval.

I'm going on five more trips with my kid in the rest of 2008. I usually need a car seat when I get to my destination. I also need something to keep my kid in the airplane seat more securely. Even if you believe airplane crashes are so low probability that it's not worth worrying about, I can vouch for the sanity that comes from a wriggly kid well-secured in an airplane seat. I held somebody else's baby during turbulence on a recent flight (while the other mom vomited repeatedly) and I was glad my own kid was asleep and strapped into a car seat with a five-point harness. He didn't even wake up during the turbulence, because I didn't have to wake him up to hold him down during the stomach-inverting drops of altitude.

Using the car seat in the airplane has become a real problem at his current height, however. It's so bulky (thick back, thick seat) that in coach he runs out of leg room and can already powerfully kick the seat in front of him. Time to start investigating alternatives, and as I found out, the alternatives do not reasonably include lightweight, narrow, FAA-approved seats that are also legal in cars in most states.

Here's how airplanes are different from cars, as far as child restraints are concerned:
  • No LATCH points. I don't know if airplane seats will ever have LATCH points.
  • Airplane seats are designed to recline/fold. I think this is why booster seats are forbidden by the FAA. So are seats that can convert to booster seats.
  • Not as much room, obviously. It can even be hard to bring a toddler-size car seat down the aisle, let alone fit into the width and depth limitations of coach seating.
FAA did recently approve a harness product (CARES) that has no seat or back parts at all. It attaches to the airplane seat back and to the seat belt and looks like it will hold a wriggly kid and handle turbulence. It's the only legal option for booster-seat aged kids on planes, aside from just using the regular lap belt. I've purchased one and will certainly mention if it doesn't work well.

Since I still need* a car seat at my destination, I'll probably start putting the Britax Roundabout into checked luggage. *Big sigh* -- it will be years before I'm likely to travel without checked luggage again. If it weren't for carseats, I can pack my own clothing and my kid's for 3-6 days into one carry-on.

* As a final note, let me define "need" in the last paragraph. It turns out the law in BC, for example, is different for residents and visitors. Residents must use car seats for kids up to 40 pounds, but visitors can omit car seats with children over 20 pounds. On average that weight is reached at nine months! A slightly heavy baby might reach 20 pounds at an earlier age and still not be able to sit up on his own. So although the law doesn't require me to have a car seat on my upcoming trip to Vancouver, I have decided I need one.

Monday, April 21, 2008

I'm making good progress on the public health statistics visualization site. I just added the ability to use pycha's multi-line line graphs:

This shows the incidence rates of kidney cancer in the Northern California population, according to the NCCC.

Wednesday, April 16, 2008





Whew, I finally got the right minimal equipment to do off-camera flashes. With my Canon Digital Rebel, this meant
  • Canon Off Camera Shoe Cord OC-E3
  • Canon 430EX Speedlite Flash for Canon Pro1
I meant to do this months ago but got the wrong parts -- a flash synchro cable and hot shoe adaptor that just don't all fit together in a way that connect the camera to the flash (a $25 mistake at worst, and I still haven't had time to find out if they might be useful anyway).

Anyway, here are my first photos with this setup, with our cat as a model because she stays still better than other live models in the household (!). The one with whitish carpet and wall as background was really the first photo, slightly cropped but otherwise unedited, just connected the flash pieces and snapped the camera in automatic portrait mode. The one with the dark background is not even in an unlit room, it just had the nice effect that the flash lit the kitty and stuff you can't see, while overwhelming the less-lit background into black.


Only three weeks until Zack Arias' One Light Workshop. Hat tip to Ted Leung for letting me know about that workshop and inspiring me to try all this.
The site I'm building will make public health data more accessible. This means both findable and visualizable. Kai just came by my office and demonstrated a use case for both aspects of accessibility for this data.

Kai's task this morning is to put together a presentation which involves talking about the "long tail" of diseases: for every common disease that pharmaceutical companies target, there are a hundred orphan diseases. Pharmaceuticals typically ignore these because the revenues from a drug targeting an orphan disease are necessarily small.

A good graphic for Kai's presentation would be a classic long tail graph, with specific incidence rates filled in: possibly lung cancer on the left with a high incidence, tuberculosis in the middle with a vastly lower incidence, and Ebola at the real tail end. But how do you fill in the numbers for incidence of these diseases -- say, for the US, for a given year?
So pulling together incidence rates even for a presentation is hard, and if you wanted to do science it would be even harder to ensure that the same population was looked at. Googling this stuff is harder than you would think. It's fun doing something about this kind of use case.

Tuesday, April 15, 2008

In order to keep my life and work organized, the tool I use to track tasks has to be streamlined and seamless. Do you know what I mean? Any hassle or delay, and I'm likely to get distracted or postpone the bookkeeping of adding a new task or updating the status of a task. If I'm hampered in bookkeeping, I fall behind and the system becomes less trustworthy so I can even fall out of the habit of keeping it up-to-date simply because it's already not up-to-date. It requires discipline as well as ease-of-use.

My system is not just one single task list. That would be too long. Instead, it's organized roughly as "Getting Things Done" suggests, into contexts. This is crucial, for reasons I won't go into now. So one of my requirements is that I have several groups of tasks, and a task can only be in one group/context. Another requirement is that I be able to mark tasks as "done" to make them disappear (but not deleted).

For three years now I've been using iOrganize. It's a small and reliable note-taking program that I don't mind running constantly in order to do bookkeeping at a moment's notice. It has folders for "notes", and lists notes by title within a folder. Click on a note and a view pane shows the body text. I have a couple conventions to make this function as a task manager: I mark the tasks that have top priority with a ** so they show up in a quick search, and I drag a note to the _Done folder (which sorts last with the underscore) to mark as done.

The thing is, I unthinkingly upgraded to a new version when prompted, and a few things are driving me crazy, and worse, driving me towards dis-use.
  • The search function now only searches in the current folder. This breaks my ability to quickly use search for ** to find top tasks. Even though the functionality to search all folders is still there, it now won't show me which folder the search results are in.
  • The drag to the _Done folder now changes the view to the _Done folder, when it used to (and I really want to) keep the view on the source folder, the context where I'm getting stuff done.
... *sigh*

I have been experimenting this morning with TextMate's awesome extensibility to see if I could use it for a task manager since I run it constantly anyway, but am running into barriers. Can I downgrade my running version of iOrganize instead?

Monday, April 14, 2008

Shortest recognizable quotes

Three words
  • I'll be back
  • Feed me, Seymour
  • Yippee Kiyay, M*F*
  • Et tu, Brute
  • Phone's ringing, Dude
  • Run, Forrest! Run!
  • As you wish.
  • Clatto... Verata... Necktie?
  • God is dead.
Two words
  • A Handbag!
One word
  • Inconceivable!
  • Stella!
  • Doh!
Well, recognizable to me, anyway. I'm surprised I can't think of any more two-word quotes.

Saturday, April 12, 2008

Three thumbs up for the Chariot Cougar 2 I bought a couple weeks ago. When you use something day to day the smoothness of use matters a lot:
  • One thumb for the easy way it attaches to the bike. It's got a ball joint to slip into a socket, held with a pin, and the pin is held with a rubber cover, and then a safety strap in case all that fails, but it's still fast to put together. Somehow with the Burley I never got snappy at getting everything all at the right angles.
  • One thumb for the carrying capacity and organization thereof. I went to the grocery store today with D. and came back with two big (cloth) bags plus a watermelon. There's two exterior pouches in back, one of them very big yet it folds up when not in use, and small side pouches inside the cab for the spare yoke or Darwin's stuff.
  • One thumb (Darwin's) for the comfortable, secure safety restraints. The chest yoke comes down over his head and snaps to a strap between his legs, and the seat belt snaps over that. Snap, snap, done.
When you use something day to day the smoothness of use matters a lot. I'm enjoying this.

You may ask if I'm turning into a diligent environmentalist, abandoning even my Prius in order to bike to work and the grocery store. Ok, well even if you don't ask, I'll tell you, there's are different things mixed into the satisfaction return of this practice. There's saving gas, yes, and knowing where I can find a spot to park without frustration. There's the physical well-being from exercise and feeling sun on my face or at least fresh air. I like to think I look pretty cool on the sharp red bike with red trailer, so yes there's a bit of pride too! Whatever keeps me pedaling.

Tuesday, April 08, 2008

Programmers sometimes shave yaks. But fiber artists sometimes engage in yak [hair] spinning, plying, winding and fulling -- and best of all, yak whacking. Yea, verily. Not sure which I'd rather do or not do right now.
Unit testing and doc testing are working in the Django-based project. A couple wrinkles:

1. In the unit tests, I created some model instances in the setUp() method easily. I then discovered that the setUp() method is called before every method in the test class, not just once when the test class is instantiated. Ah yes, I remember this from Java days too. Is there some deep reason why tests (in this case functional tests) shouldn't share the exact same setup but need to recreate it? The fix that seemed to meld most smoothly with what the unit testing framework offered, was to tearDown() all the model instances after every test method, even if I was going to use the same work for the next test.

2. Django only seems to pick up doctests in the models module. I found a hint online (can't even find it anymore) about creating a "__test__" dictionary and putting this in models.py worked:
__test__ =  {"1": Source, "2": DataFrame}

In this case Source is a class in models.py, and DataFrame is a class imported from a file called query.py. The labels "1" and "2" are arbitrary and I don't yet know how they're used. What worries me about this is that I don't want to import everything into the models module in order to test it.

Monday, April 07, 2008

Finally fixed the archives link. The only way I could figure out to do it within the limited time I gave myself was to throw away my custom template and use a Blogger layout. Less control over other things, but it is better having inaccessible archives.

Thursday, April 03, 2008

Sometimes programming goes too fast, and I actually have to stop and think.

Friday, March 28, 2008

I miss working closely with other developers; that's part of why I'm blogging right now.
Python exacerbates that, because there's so many ways to do things, particularly the kinds of things I'm doing right now, like parsing text files with tables in human-readable but not-particularly-computer-readable formats.

Here's a tiny example: I needed to remove commas from strings like "1,207" before converting them to integers to graph them. I thought of using slicing, which is a powerful Python feature on lists, strings and more:
>>> string="1,207"
>>> string[:string.find(',')] + string [string.find(',')+1:]
'1207'
It got ugly fast so I looked for something else:
>>> string="1,207"
>>> string.replace(',','')
'1207'
Splits are also powerful:
>>> string = "1,207"
>>> ''.join(string.split(','))
'1207'
Of course I could also define a simple "removefrom(char, string)" function:
>>> string="1,207"
>>> def removefrom(char, string):
... return string.replace(',','')
...
>>> removefrom(',', string)
'1207'



To find good ways of doing things, I end up browsing a lot of Python code online. That's frustrating because some sites have started hosting "sample code" mostly as a way to put advertisements on-screen and in pop-ups. And I'm sure the most trivial code review would identify plenty of areas my code could be much more Python-clever.

Thursday, March 20, 2008

Internships for CommerceNet this summer: I'll be the one hiring and managing. If we get a great proposal for a project from the right intern candidate, CommerceNet might simply hire that intern to work on that project. Otherwise, here's what I have in mind.

CommerceNet is an entrepreneurial research institute, dedicated to fulfill the promise of the Internet. We are currently seeking Software Engineer interns to implement a data visualization Web application for public health information. Involves JavaScript and Python, both data access and graphics. CommerceNet may also accept proposals for internships to work on well-specified projects of the intern's own design.

What you'll do
  • Develop open source libraries or widgets for graphing and data visualization
  • Build public service, community oriented Web site
  • Be part of a small team or work nearly independently
  • Develop with minimal guidance, using rapid iteration and feedback loop and with leeway in choices of tools.
  • Borrow, create or collaborate on visual design and visual elements
Required Skills:
  • Web Applications development, including CSS and JavaScript
  • Python or demonstrated ability to pick up languages
  • MySQL or similar data management experience
  • Great ability to extrapolate from raw ideas to realistic implementations.
  • Demonstrated initiative pulling a project forward
  • Some experience using graphics libraries
  • Familiarity with Cleveland or Tufte principles would be a bonus
Email ldusseault@commerce.net with questions or cover letter and resume.

Tuesday, March 18, 2008

There is so much IETF work on email these days. There are five separate WGs (one in the Security area), a Research Group and a couple informal efforts. I tend to have to summarize the work to pull it together in my head. Here's the post-71st-IETF sitrep. Also see Barry's post for more detail on SIEVE, DKIM, LEMONADE and ASRG. Document links collected at bottom.
  • The IMAPEXT WG is so close to shutting down, it did not meet last week. One of its work items was to internationalize parts of IMAP (including mailbox names, and how to sorting strings like subjects) and those documents were delayed but finally got approved.
  • The LEMONADE WG met, and seems to be winding down. Although its extensions are all linked by being useful to mobile email clients, there are some extensions there of general interest.
  • The SIEVE WG just finished publishing a whack of documents around its new core spec, RFC5228. At its meeting, the group discussed whether to recharter to do another round on the core SIEVE documents and standardize some more filtering extensions.
  • EAI WG has requested publication for most of its documents. These are Experimental Standards for using non-ASCII characters in email addresses, which affects IMAP, POP3, SMTP in interconnected and complicated ways.
  • A design team is nearly done updating SMTP (RFC2821) and the Internet Message Format standard (RFC2822). They're handling "last call" issues on the list.
  • DKIM -- having previously published its core signatures doc (RFC4871) and requirements for signing practices (RFC5016) -- is now working on the signing practices standard itself.
  • ASRG, the Anti-Spam Research Group, is documenting various anti-spam techniques.
  • In informal discussions, several of us keep talking about rearchitecting email access. However, nobody's ready to predict, let alone commit, that their company will implement something new. Does that mean that there's not really enough pain around using IMAP? Or that the pain is the user's and not the software vendor's?
Documents:

Monday, March 17, 2008

One of my favourite tools for keeping on track is doing a regular report to my management.
Ever since Max Dunn, a former co-worker, told me about the "four P's" (progress, plans, problems, personnel) mnemonic, that's been a useful concept. Writing down some notes in each of those categories makes me remember stuff better, catch up, and plan better. I get almost all the value even without sending the report.

Right now I send a somewhat different monthly activity report to the Apps Area Discuss mailing list and to the Working Group chairs of the WG's I advise. It serves some of the same purpose to me, and other people have found it useful. I indicate what I think is the status of each document I'm sponsoring to become an RFC, and if the authors think the status is different (e.g. one of those common "I was waiting for you while you were waiting for me" traps) they tell me. I mention a couple notable things at the top of the report, and try to summarize what state each WG I advise is in.

I try to send these in the first week of the month, which means I'm two weeks late for March due to being sick and having the IETF meet last week. Maybe later today??

Tuesday, March 11, 2008

Although I'm mostly doing IETF stuff at IETF this week, I took advantage of Andrew's expertise while he's here too, to help me get a Python library running and working. I had gotten blocked last week and we worked through several more problems this afternoon. Some notes follow for the record, to add to the couple blog posts out there that help one out on these problems.

I was trying to install pycha and play with its simple charting. To do this, I needed to have py-cairo and cairo version 1.4.12 installed on python 2.5.

The easiest way to get cairo installed is using MacPorts. This is fine, although it installs cairo into the MacPorts version of Python, not the Mac OS X version of Python. The Mac OS X version of Python already has cairo installed, but it's apparently an older version. I didn't know how to upgrade the system cairo library so I focused on doing this with the Python installed by MacPorts. This led to later complication.

After apparently successfully installing cairo version 1.4.14, attempts to install py-cairo failed. It kept on insisting that only cairo 1.4.10 was available. Andrew tracked this down, and we're pretty conviced that the information that the MacPorts cairo package applies to pkg-config is false: it says version 1.4.10 right inside the 1.4.14 cairo.pc file. We edited this file directly and went on.

Next we tried to install py-cairo using the regular "python setup.py install", but that failed -- it is not set up to work on Mac OS/X and there were numerous errors. MacPorts rescued me again, thanks to a hint we ran across from KenKeiter -- this port package has a bunch of hacks (string replacements in directory paths it looks like) to make py-cairo work on Mac.

Finally, back to installing pycha itself. This has a nice handy Python Egg available, so I installed "easy_install" to install that. I goofed and installed that in the default System version of Python, so while installing easy_install worked, installing the pycha egg failed. It turns out there is a MacPorts port of the same thing, called py-setuptools. Only you don't want that one, you want py25-setuptools if you have Python 2.5. I installed that.

OK, back to installing pycha for real again and it finally worked. One gotcha in following the main documentation page example, which is otherwise very nice -- I needed to "import pycha.bar" for the sample code to work (Update: Lorenzo Gil Sànchez fixed this already). And it did work.

Proof:

Tuesday, March 04, 2008

Mike from work pointed me to EpiSpider, which does dynamic graphs and uses in part an in-browser library for faceted browsing called Exhibit, from the SIMILE project. This project also has a beautiful Timeplot library, again in-browser.

The basic approach here is minimalist: all a site developer needs is a place to host Web pages, some of which are data files. No database, no content management system. Still, those have their places too, and I can already see how to make great use of Django features as well as Exhibit and Timeplot features, and I know databases. To tie these together, one just needs a bit of AJAX code to call a server-side process to pull the appropriate subset of data from the database in JSON or other simple format, and I know that exists too.

I had been ready to try generation of static chart images in order to save time -- that was why I was trying to use R (also the data import, manipulation, analysis and export features could be useful). But ultimately good online charts need features like mousing over to see point values, scrolling, and zooming; static charts can't provide that but in-browser canvas code like that used in Timeplot can.

Sample here.

Update: removed annoying iframe

Friday, February 29, 2008

Nearly two years ago, I made a prediction that Atom would replace WebDAV. At the time I was even working on revising WebDAV and just beginning my involvement with Atom standardization. I told this prediction to Cullen Jennings and documented it in a note dated 5/9/06. "Replace" is a fuzzy term, because they're not equivalents, but here's what I see today.
  • Google turns Atom, RSS and AtomPub into GData and uses that for blogs, calendars and task lists for starters. Google does not use WebDAV as far as I know.
  • Microsoft is unifying its developer platform protocols on Atom and AtomPub, and using those protocols for unstructured application storage, e.g. photo albums to blogs. (h/t James Snell. Hey, I used to work with David Treadwell, haven't talked to him in years.) WebDAV support in projects like Exchange is downplayed.
  • IBM has a bunch of projects using Atom but it has a bunch of projects period and I haven't seen strategy announcements about either standard.
  • Apple uses Atom and RSS in quite a few applications, although it's also using WebDAV and CalDAV on .mac and in its calendar server.
  • Blog service sites are ubiquitous and all use Atom or at least RSS. File sharing sites or other WebDAV public services are rare. Photo sharing sites are more likely to use Atom than WebDAV by a long shot.
Were I to propose CalDAV today it would probably be CalAtom -- some things would be easier, some harder, but it would catch a wave instead of drifting in the tail of something that was never much of a popular wave. Oh well, we needed something then, and WebDAV gave the most leverage at the time.
The Django stuff was going so well, I switched over to learning R a couple days ago just to depress myself. It's tricky to get into. The documentation is very scattered (kudos to those who are improving it at the wiki but that's a work in progress). I haven't yet found a way to get documentation for arbitrary libaries. The cute name 'R' makes it very hard to Google for R libraries. E.g. I haven't yet found a core graph or a library function that creates horizontal bar graphs (though maybe somebody will tell me to do vertical bar graphs with all the labels turned, then turn the whole image).

One headache in particular was trying to work with display strings that needed to be converted to numbers. I had a table containing this tiny fraction of data (out of 8 columns and 15000 rows):

ICD.Chapter    Crude.Rate
A00-B99 22.0
C00-D48 193.2
D50-D89 3.2 (Unreliable)
E00-E88 33.7
F01-F99 21.0
...

To graph the Crude Rate without the occasional "Unreliable" strings, I needed to break the information about which measurements were unreliable into a separate column (not losing the information), reduce the Crude Rate to be a number and convert it into an R 'numeric' type. I spent about 8 hours. The first four I managed to solve the first problem: I looked for a "contains(string, substring)" style function but there was none; "grep" produced errors that were really hanging me up whenever the input cell did not have the string I was looking for. Finally I wrote my own little contains function using regexpr:

contains <- function(pattern, string) { 
regexpr(pattern, string) != -1
}

It looks simple now, but it was tricky to get a function that worked properly when converting 15000 cells to 15000 new cells.

The next four hours were spent trying to remove the "(Unreliable)" string from the cells that had it. Again poring through documentation, I tried various approaches and got the closest with this one:

first.word <- function(x) { 
substr(x, 0, regexpr(" ", x)[1]-1)
}

The problem was that although this one worked fine on single strings when I tested it, it didn't work on turning a whole column into a whole new column.

Today at 11:00 am I turned to Excel to see how quickly I could do it in Excel. It's been a long time since I've used Excel formulas, but I knew this kind of thing could be done. In many ways the Excel formula documentation is worse, but it's a smaller set of controls (or at least a clear subset) and it was comprehensive and organized.

In Excel the two new columns are created like this from the H column:

=NOT(ISERROR(SEARCH("Unreliable", H2)))
=IF(ISTEXT(H2), VALUE(REPLACE(H2, SEARCH(" ",H2), 13, "")), H2)

I'm sure this could still be done in R but making those two formulas work for this particular table took me 20 min in Excel instead of four hours.

Tuesday, February 26, 2008

Development work went much smoother today. I set aside installation of Apache and MovableType and decided I could do something easier at least for now. Believe it or not it was easier -- for me at least -- to implement a minimalist blog in Django, from the database on up to the display pages, than it was to install and hook together software.

I also wrote some of the core data model for the site using Django's standard model tools. It's a site that will improve the accessibility of health-related statistics (costs, health surveys, incidence registries and other epidemiological data) by offering good search and lookup and simple clean visualizations. So I started by creating data models for data sources, report names and conditions that are tracked, and hooking those data models primitively into the Web pages where I want them to show up.

Of course development involves writing new code, but that's not nearly all of it. Even when writing new code, part of development is debugging: when you know what you want to do and have chosen a way to do it, but it's not working. Another chunk of new development time is decision-making, e.g. deciding how objects will relate or how interfaces will look. It's interesting how fast this style of development goes from decision-making to debugging and back, without a lot of time spent writing new code.

Any quick pointers on
- unittesting Django sites?
- Integrating C libraries into Django projects?
- Departing from Django DB models -- when to create one's own tables and how?

Monday, February 25, 2008

Since Ravelry ate my blog, I'm going to see if I can't restart this with a different idea. I originally started a blog to try to say clever (and subtly snarky) things about news, particularly science news. Then this turned into a lame knitting blog. Now I feel like I don't know what to post here. So how about I post what I like, eh?

I am trying to learn how to use a camera and a flash better. I bought a Canon Speedlite 480ex so that I could point my flash in different directions, dial up or down the light intensity, and use a diffuser. I also tried to buy a hot shoe adapter and cord so that I can use the flash at a distance from the camera, but it looks like I might have bought the wrong model of something. The cord has a little plug just like a single earphone plug, and there's a dock space on the Speedlite, but it's empty. Behind the hole there's no socket, just plastic.

Still, the Speedlite is better than nothing. I used the diffuser for some of the shots taken of people in a big, poorly lit conference room at the Ravelry meetup.


I think it turned out better than with a standard Rebel built-in flash. I had fun anyway.

At work, I'm immersing myself in Django and oh-my-god real setup of Web, database and other server software. This intimidates me. When I get something working (like an index.html page with working stylesheet and logo links in Django) I take a little "success" break to let the feeling last.

I hate how easily this kind of work can go wrong. There have got to be common ways of doing things that just work. But I don't know what those are, and software for developers errs on the side of flexibility and power, rather than on the side of making choices for you so that it just works. And some choices work but are awkward. Where do I install Apache? Where do I locate the static files served by Apache? Where do I install MySql so that it can be used by MovableType as well as Django? Do I upgrade to Python 2.5 inplace or have it co-exist with Python 2.3? Invariably on the Mac there are permissions issues: do I change the permission of the file so I can do what I'm trying to do with my login account or do I switch to 'sudo' the command? I normally get things working eventually but it's sooo slow.

Sunday, January 27, 2008


What pictures of curious and fast-crawling babies often look like.

Thursday, January 24, 2008

Clearly my lack of posting is explained by the fact that I have died in a knitting accident. It was the size 1 lace Addi turbos I've been knitting the cellular automaton shawl with, those are some sharp needles.

Maybe it's just a metaphor for this blog: I haven't been posting much since I joined Ravelry, so the blog was what died in the knitting accident.

Have I anything else to say? I've been thinking about email software, and I concluded that a really great email-focused program would include GUI design contributions from a game designer. Email management needs to have the same smoothness and responsiveness that a good console game does. I deal with hundreds of emails a day; dealing with them should be so smoothly software-assisted that I'm eager to click to kill the next one. I mean file it. Instead my flow gets interrupted constantly by tasks that draw me away from getting through my email.

Sunday, November 25, 2007

I've been pretty busy but just had time to learn a bit of JavaScript and the canvas element. Since I'd been playing with cellular automata ideas in knitting, I put together one of those. Pretty!

Tuesday, October 02, 2007

Blogging here is going to continue to be light for the foreseeable future. I am now a member of Ravelry, so that's a more obvious place for me to post knitted projects -- the whole point of doing that was so that other knitters could find my projects as they research what project to do next, as I do. Ravelry was built for that purpose and makes it easier for knitters to post their own projects, and to find other projects done with a certain yarn, or with a certan pattern, etc.

But I did want to post a link to this Telegraph article by Liz Hunt, and that doesn't fit naturally either on Ravelry or on the CommerceNet blog. The article bitterly critiques a book called The Gentle Art of Domesticity (not available in US yet), by Jane Brocket. I wish I could figure out what has Liz Hunt so bitter, because I can't see anything intrinsic in the work of this enthusiastic cook and craftster to inspire the tone. The comments on the Telegraph article vary from wondering how Jane Brocket could be so "perfect" to angry reactions to the article's tone and criticism of a domestic lifestyle.

I've been following Jane's blog since she started it in early 2005, staying as she progressed her writing style and particularly her photographic abilities (from this to this, for example) even as her posts on knitting became more and more infrequent. Most of what she documents and extols I have no desire to imitate. I'd rather bake oatmeal squares and butter tarts than elaborately decorated cakes and "fairy buns". I hate gardening and do not want to live in a remote town or in the country. I do knit and sew but I've been knitting for five times as long as her blog has been up so I already have my own style and inspirations. But it's a gentle, beautiful picture she paints, and it's like visiting an English village house and garden for a quiet moment when I read a new post on Jane's blog.

The only way I can reconcile this with the Telegraph article is the tension over feminism vs. domesticity again. Liz Hunt brings up careers and Shirley Conran in opposition to the domestic values. I haven't got a copy of Jane's book yet but I suppose Jane even started the argument by extolling domesticity as an antidote to ambition and stress. But I'm pretty sure that if a woman wrote a book extolling jogging, swimming, line dancing, playing cello, online gaming, sculpture, reading, bird-watching, photography or dirt-biking as an antidote to ambition or stress, it would be seen as trite at worst rather than threatening.

Tuesday, August 07, 2007

I frequently try Web applications out just for the sake of seeing what they can do, and usually abandon using them. But I like keeping up with the field, particularly for email, calendaring and task-related applications.

Today I tried one that does all three, that I heard about originally from Rael Dornfest (back when I worked at OSAF; it wasn't available then and it is now). I might abandon this online app too because I like to manage my time offline better than online, but there was one point when testing the application sent a frisson of pleasure down my spine. Usually that reaction is reserved for either more private pleasures, or when fondling yarn.

The site is stikkit.com, launched last year. The site is very smart at telling what kind of note you're creating, detecting todos and events from linguistic cues. For example, it detects Quiltathon on September 30 as an event and puts it on the correct date on the calendar.

The 'frisson' moment was when I created a task to email somebody. It was recognized as a task by the phrase do send mail to So Andso. Then I noticed that the new task had a linked stikkit for a person: "So Andso". When I clicked on that, the automatically-created stikkit had a line reading name: So Andso. I intuited that if I added another line to the stikkit with email: soandso@example.com would make the new stikkit into a contact, and voilà, it did!

It was a little disappointing to find that while Quiltathon on September 30 was detected seamlessly as an event, September 30: Quiltathon was not. Also when I had a space between the "name: ..." and the "email: ...." lines in my second attempt at creating a contact stikkit, it didn't work until I removed the empty line.

Oh, and I love, love love applications with hotkeys so that I don't have to mouse around. Even better when they can be discovered.

Sunday, July 08, 2007


These cute kid items were knit by Uta Hayward for her son. I'm completely tickled to see the blanket because it's the pattern I published on For the Love of Yarn. It looks very different in the multicoloured yarn chosen by Uta's son, but it looks terrific. I like the way the colour pooling forms little arcs because of the decreases, and that the little arcs are separated by the yarn-over columns. Maybe I'll knit the pattern again myself in multicoloured yarn!

Wednesday, July 04, 2007

Happy Independence day. Then again, I'm working today -- I've got IETF stuff scheduled tomorrow with people who aren't in the US and they'll be prepared.

I would have said Happy Canada Day three days ago, but I was travelling home from Canada on that day. There were nice people on the plane with maple leaf body paint or temporary tattoos or something. Even nicer, the man who switched seats to give me more room for the baby, and his wife who held the baby while we switched.

I am having fun despite the work (hey, work's fun too). I just discovered the FireFox plugin Tab Mix PLus, which I have used to set it up so that each new tab opens to my local home page which has quick links to stuff I use a lot. Yay smoother work processes!

I was also sucked into Facebook last week by my cousins and siblings. I initially felt too old but then a bunch of people in my class in grade school and high school contacted me immediately so I already feel like I belong a little. We were making fun of Facebook at work recently. One jibe was that it's a classic force multiplier: it allows you to form cliques and shun people at great efficiency! Before you could only shun people in sight, while out socially -- but now you can shun people anywhere, anytime!

Tuesday, June 12, 2007

Reading Tukey's Exploratory Data Analysis:

If we want to see what our plots ought to tell us, there is no substitute for the use of tracing paper (or acetate). If we slip a well-printed sheet of graph paper just below the top sheet of a pad of tracing paper, we can plot on the top sheet of tracing paper almost as easily as if it were itself ruled. Then, when we have the points plotted, some boundary or reference lines drawn, and a few scale points ticked, we can take away the graph sheet and look at the points undisturbed by a grid. We often gain noticeably in insight by doing this. (And we have had to pay for a sheet of tracing paper rather than for a sheet of graph paper.) [...]

An alternative that:
  • can be even mre effective,

  • is no more expensive,

  • takes a little more trouble to prepare for,

replaces the tracing paper by the thin sheets of transparent plastic (acetate) made for use in overhead projectors. Two cautions are important:
  1. You can only use markers specially made for the purpose. [...]

  2. It is important to keep one's fingers off the plastic until the picture is completed. (A piece of thin graph paper, placed upside down, works very well as a hand shield.)


Much of this classic textbook is obsolete tips and tricks -- e.g. for collecting data on paper and checking that you've copied it accurately to another piece of paper. The notes on cost of tracing paper vs. graph paper vs. acetate strikes me as quite funny now!

I think I learned to graph by hand in school but never had to except as an academic exercise -- I was using graphing software before entering University (summer job in a water testing lab). I wonder what kids today do in school, if they even bother with the academic exercise. I hope so, because it was kind of fun playing with numbers on paper. For some values of fun :)

Thursday, May 31, 2007

Random Stuff

If you know me, you know I've been pretty busy and no surprise that I've been neglecting my blog! Rather than let the blog languish for even longer waiting for the perfect post, I'll just be random today.

1. The Atom Publishing Protocol (APP) is up for approval by the IESG this week and I'm the sponsoring Area Director. I'm excited about APP because it will serve as a model or basis for much future work in accessing and editing structured content on the Web. (Will the IETF APP area one day be assumed to stand for Atom Publishing Protocol rather than APPlications?) I observed some of the Atom Interop event last month (summarized by Tim Bray here) and it was great.

2. I am apparently a sucker for some kinds of advertising copy, not necessarily what one would call good copy. Witness: here is the entire Product Description for the ice cube trays I bought online when my freezer was mysteriously not making ice cubes automatically, before it mysteriously started to again.

Ice Cold Fun! These wild and wacky Flexible Ice Trays are just plain crazy. The flexible designs allow ice to just pop out! Its quick and easy. And fun! Better still are the nutty shapes the ice forms into Stars or Hearts! Wild! Fun! Each tray container contains twelve individual molds perfect for all the fun ice youll be making. Blue star tray and pink heart tray. Made of high quality rubber.

Nutty shapes! Wild and wacky! Oh the fun we'll have with ice cubes!

3. I continue to knit stuff. I just don't have time to post about it any more. Here's a shot of me with other knitters at a meetup at Nine Rubies, and the project at my feet is now a completed scarf (with an estimated 40,000 stitches, which is why I normally don't calculate stitch counts).

4. I also made a mei-tai baby carrier. Again, this photo is obviously not taken by me, otherwise I probably wouldn't have a photo of the carrier at all. I don't even have photos of the sweater or bag I finished a while back.

5. Looks like IETF Chicago will be exciting: the Apps area will have BOF meetings on HTTP, notifications from email stores, and personal address book access.

Wednesday, April 11, 2007

"For the Love of Yarn", an online knitting magazine, has now published my Cielo baby blanket pattern in their spring '07 issue. Oh the fame!

Seriously I did get a query already about yarn substitutions. I knit this with Elann.com "Den-m-nit" but that appears to be discontinued. There are two special effects inherent in this yarn: one is that it will fade like blue jeans over time as it's washed and used, and another is that it will shrink %10 to %20 the first time it's washed. Rowan Denim yarn behaves the same way and is widely available, thus it's a perfect substitution -- but expensive. Another less-well-known option is Twilleys Freedom Denim Yarn. I found a couple online vendors for this:

  • Texere in the UK
    sells this for 2£/50g, which is currently about $3 US. Even with the shipping, for 13 balls (what the pattern suggests) this is cheaper than US sources.

  • Erica's Yarn sells and ships in the US for $5/50g.

It should be easy to substitute other worsted weight yarns to get other colours besides indigo, although of course the faded jeans effect won't happen. Note that there are two main kinds of 100% cotton yarns, mercerized and unmercerized. Mercerized cotton yarns do not shrink, therefore behave differently than the denim yarns. Still, some of these can be wonderfully cheap and colourful, like Elann.com Sonata, which has great stitch definition and sheen and is $1.98/50g. It's also possible to use cotton blend or non-cotton worsted weight yarn for another kind of look. To substitute a yarn that doesn't shrink, the knitter just has to stop knitting the main body when the blanket is big enough, and knit the edging on as written.

Some unmercerized cotton yarns do shrink and others don't. Worse, unmercerized cotton yarn isn't always advertised as such. For example, I've used Mission Falls 1824 cotton and Blue Sky Organic cotton without any noticeable shrinking (and they're both great yarns though with the Blue Sky you have to live with some pilling and fuzzing). Knitter's Review confirms that Mission Falls 1824 cotton is unmercerized and various blogs say that the Blue Sky cotton is unmercerized. So just getting an unmercerized yarn doesn't guarantee that it will or won't shrink.

Tuesday, April 10, 2007

I hadn't yet seen the talk by Hans Rosling, last year at Ted 2006. It's fascinating from a technology perspective but even more so from a political or social welfare perspective.

I browsed a little further into other Gapminder presentations, including one given by Ola Rosling at Google a year ago, where he talks about the significant differences made by left vs. right politics in achieving health advances vs. wealth advances -- a point which didn't appear in Hans' talk.

What is news is that Google bought the Trendanalyser software and hired its team from Gapminder, announced last month. The Gapminder foundation continues its mission separately although I'm not entirely clear what that is now.

Wednesday, April 04, 2007

Needed: Web 2.0 Hackers

CommerceNet (my employer) would like to start a bunch of Web 2.0 projects in the areas of calendaring, security, schemas/standards and health information. We're looking for some hot Web 2.0 developers to help us prototype some of these sites. The job descriptions and address to apply to are here but you can ask me directly for information if you'd like -- I'm a hiring manager.

Saturday, March 03, 2007

I am part of a panel hosted and organized by Scott Rosenberg on why Software is Hard at the Hillside Club tomorrow evening. Scott's got more exposure to this than any other journalist I can think of, perhaps you've seen his book Dreaming in Code. Eric Allman and Chad Dickerson will be part of the panel too.

Friday, February 23, 2007

How to shop at Ikea with a Prius:

Prius packed with Ikea purchases

This is packed with $860 worth of furniture and storage boxes from Ikea. The big-ticket items were a full height and width Bonde shelf unit with doors, and a four-unit-tall Effectiv unit with doors. Even bulkier, however, were the two storage baskets and various plastic bins. The amazing thing was that we still fit two adults and a baby in his carseat in the car, too. The adult passenger had to hold plastic boxes on her lap for that to work.

Other pictures: another view of the packed car, and the purchases spread out on the driveway.

Monday, February 19, 2007


Just posted pictures from yet another baby project -- a lace angora/silk handspun baby hat -- to my current knitting page.

Tuesday, January 16, 2007

Perogies from Lisa's Test Kitchen!

I was inspired by the America's Test Kitchen approach from the Cook's Illustrated folks, which results in the full-disclosure style of "The New Best Recipe", and from there, my newly-reliable baking skills. So for my yearly Ukrainian 12-meatless-dishes feast, since I scaled down to making only perogies and kutya this year and my lovely friends brought the rest of the food, I decided to do some testing. Like Cook's Illustrated, I began by collecting a range of perogy dough recipes that differed significantly, and tried three of them. Here are the results of testing three different base recipes, with the main criteria being handling (rolling out dough and sealing the filling in side is hard to do properly with my mom's recipe) and tenderness.

1. Growing Alberta's recipe: in one of the many, MANY ways of combining just oil, flour, water, salt and eggs, this recipe is very simple and similar to many pasta recipes (e.g. ravioli dough). Most other perogy dough recipes I found online had the same basic ingredients in only slightly different quantities. Results: the dough itself is easy to make up, and then sufficiently easy to work. However, when boiled, this ended up making mutant-looking perogies: oddly lumpy, with a surface texture that looked a little more shiny and bubbly. The texture, more importantly, was a little more rubbery than ideal, and was not anybody's favourite in taste-testing.

2. Epicurean's recipe: this had a cup of sour cream instead of any water, and it also adds some baking soda (the rest is flour, egg, salt). This seemed sufficiently different to be worth trying. Result: this made a fine dough that rolled out reasonably well and sealed well. This was the most robust and even dough: every single perogy made using this dough looked like a perfect, even, golden half-moon, even after boiling and frying. At least one person decided this also produced the best texture or tooth.

3. My usual recipe, from my mom, given to her by a Polish friend in Edmonton who was a fabulous cook. This dough is my standard to compare to because I've made it before: it's very tender and everybody loves it, but it's a pain to roll out and use for perogies as it's so fragile. There are usually a few casualties during boiling, where the dough opens and water gets inside the perogy even if the filling doesn't spill out. It's also unreliable: it uses 1/2 cup of mashed potatos, which is hard to standardize (varies by type of potato, size, how long boiled, how carefully mashed, and how long left to stand to accumulate or release moisture after boiling/mashing). I couldn't find any recipes on the Web that had mashed potato in the dough, so it appears to be a unique recipe. Taste-testing results: most people found this was the best texture.

Here's that "heirloom" recipe for comparison:

1 and 3/4 cup flour2 egg yolks
1/2 cup mashed potatos2 tablespoons shortening
1 teaspoon cream of tartar1/2 cup warm water
1 teaspoon salt

Mix flour, cream of tartar and salt together. In separate bowl, mix mashed potatoes, egg yolks, shortening and water together. Now mix wet and dry ingredients together, adding flour as necessary for a workable dough [this always comes up too wet, I need to adjust that]. Let sit 10 minutes before rolling dough. Roll a portion of the dough to a couple millimeters thick. Cut circles [I use a water glass inverted]. Put a spoonful of filling on each circle. Fold over circle and seal with water.
The next step in this testing process appears to be to start varying the best recipe found so far, to see if its most important advantages can be improved, its drawbacks minimized, or its technique simplified. This is helped along by hypotheses about what makes this the best (or by what makes it difficult). These are the variations on my usual recipe that I've tried so far.

  • Try omitting the cream of tartar as its role is not apparent in the absence of egg whites. Result: the exact same dough made with and without cream of tartar had apparently the same texture, but turned quite grey while standing, as the potato starch interacted with air. The grey blotchy dough was so unappealing that I threw it out without attempting to roll it out, cook it, etc. Conclusion: keep using cream of tartar as long as the recipe contains potato.

  • Try using a beater on wet ingredients, both to save labour and to improve consistency and robustness of dough by making sure the potatos are well-mashed. My regular dough always has a few visible bits of potato once I roll it thin, and sometimes this creates a weak spot as I form or cook a perogy. Results: using the beater made the dough turn out too gluey and it stuck to everything, making the rolling/folding even harder than normal and without making the dough any more robust. This result could have been guessed if you knew not to over-mash potatoes.

  • If letting it sit 10 minutes is good, is letting it sit longer even better? I tried a couple variations here. Results: Overnight wasn't good (though the results may be conflated with having used a beater on that batch). I also didn't see any difference waiting 10 minutes or an hour when the recipe was otherwise done the same way.


That was enough experimenting for one person for one year. What are the promising avenues for testing next year?

  • Sometimes the Cook's Illustrated people form a hypothesis about what makes a recipe good, and try to achieve the same goodness with a different approach. My hypothesis here is that the point of adding mashed potato to the dough is probably to increase the amount of starch relative to the amount of gluten. This should make the dough a little less rubbery or more tender. This hypothesis suggests there might be a more reliable way of reducing gluten ratios than using mashed potatos -- for example, using more cake flour and less all-purpose flour. Thus, I should look into how to reduce gluten ratio without using mashed potatoes (or using less of them). How much all-purpose flour should be replaced with cake flour?

  • Try to simplify technique and increase reliability by using instant mashed potatos. This approach would not suffer from variability in the starch content or waxiness of the potatoes, or from changes in the details of cooking and mashing.

  • Try the sour cream dough again. It was definitely easier to work with and people were not unhappy with the result. I want a bit more direct comparison (with the exact same filling, side by side) and evaluation to be confident that this is as tender, or just about as tender, to see if it's worthwhile switching from my traditional recipe.

  • Combine the two most successful recipes: what about using the mashed potato recipe with sour cream instead of water?


Also, next year I need to take pictures. As I write this blog post two days later, it's too late: they're all gone. Very popular, I tell you. My guests take home leftovers if there are any (last year there weren't) although I insist they leave leftovers for me too.

Wednesday, January 10, 2007

I guess the new year is a good time for me to finish projects. I finished a sweater that I've had on the needles for months, as well as a period baby hat (a rare non-knitting project). I'm almost done a Noro Kureyon felted purse, too.

Sunday, December 31, 2006

A few pairs of socks posted on my Knitting gallery for completeness. Thus ends 2006. Happy New Year!

Saturday, December 23, 2006


A new "Objet tricoté" on my gallery, complete with pattern.

This happens to be for me, but if you knit, you *could* still make this in time for a Christmas gift. Jo-ann is open until 9pm on Saturdays and may even be open tomorrow.
I just found the KnitWiki. I'd been thinking for a while about creating a Wiki for knitting, because I frequently look through the Web for advice or ideas on how to use a particular yarn that I bought because it felt so great in the store. Of course, most of the search hits you get are yarn stores selling the yarn, not knitters telling you how it worked up and what problems they encountered. So I didn't learn until too late that Karabella Aurora widens dramatically when it's first washed, or that using a silk (drapey, less elastic) yarn in a side-to-side pattern would pull a neckline competely out of shape. I don't know if knitters are sufficiently interested in contributing their experience but judging by the number of knitting blogs that exist and are being created every day, they might.

Tuesday, December 19, 2006

Just how predictable am I? I've been enjoying the first season of Boston Legal on DVD, and particularly the James Spader character, Allan Shore. On thinking why, I realize he's a Bad Boy who's really a Good Guy (just like Dr. House). He's petty, grand, nasty, gentle, happy to help a colleague and has an enormous ego. As a TV series must, the show keeps his character's tension going, episode after episode -- no easy redemption or complete conversion as one can find in movies sometimes.

Here's some classics of the archetype, whether charming or aloof. See if you can figure out which movie BBwraGG I'm thinking of, described from the point of view of the heroine.
  • He's cynical, brusque and appears selfish, claiming to be helping you only for the money. Yet he turns out to be idealistic too, and shows up in the final battle to save the young hero just in time for the defeat of the bad guys.

  • He gambles and womanizes and definitely runs with the wrong crowd. Yet he knows how to be charming and gentlemanly and certainly how to have fun. When he helps recruit for your holy cause, is it just because he wants to win a bet, or does he really care?

  • He's haughty, aloof and seems conceited and cold. He appears to have hurt people just to maintain social class distinction. Happily it turns out the full story was secret to preserve a lady's reputation, and his actions really were quite correct. Plus, he has a really great house.

  • He's a low-class rebel, part of the summer staff. He's dreamy but when you get closer, he's also hot-tempered, impatient and people believe him to have abandoned his lover and illegitimate unborn child. He didn't though, he was really just helping her.

  • He's a beast, literally. But he can turn back into a man if only you truly love him...

In the tragic romances, the bad boy doesn't quite make it either to conversion or to redemption. Rhett Butler continues to mix bad behavior in even after the appearance of good behavior, and ultimately rejects Scarlet due to her own flaws. Rick Blaine is a charming egotist who proves himself not entirely selfish by saving Ilsa and Laszlo, whereas Laszlo is a dull idealist whom Ilsa ultimately chooses.

Saturday, December 09, 2006

It was at an OSAF picnic more than a year ago that somebody (not from OSAF) asserted baldly that Open Source and Open Standards were entirely complementary. I must have been in a perverse mood or found him disagreeable, because I immediately looked for reasons to disagree with him. It's taken me a while to work them into a blog post but it's interesting that I remember the exact moment this theme began.

Tuesday, December 05, 2006

Scott Mace is so right:

With a standard, one can have a standard server running independent of the Internet that one can test against.

Scott was inspired by Spanning Synch:

Building an application on top of Google Calendar (which is itself still in beta) [...] "building a house during an earthquake".

I'd broaden Scott's stability principle to any well-defined, stable API. It's easier to build an application on top of a stable (public, or standard, or external) database API than one you're developing as you go. I'm not sure whether it's better or worse when the developer making the API churn is on the same team or a different team as the developers using the churning API but it's bad either way. There are lots of techniques to try to enforce stability so that you're not building your application on quicksand and one of them is certainly to use a standard for an important interface -- it's a way of enforcing discipline one might not otherwise have.

Friday, December 01, 2006

If cheesy alternative lyrics turn you off, stop now. I deeply regret it if the season inspires excess cheese chez moi, but I cannot help it.

To be sung to the obvious seasonal tune...
On the first day of Christmas, I caught my cat as she...
Was eating needles off of the tree.

On the second day of Christmas, I caught my cat as she...
Was barfing on the floor,
And eating needles off of the tree.

On the third day of Christmas, I caught my cat as she...
Was peeing on the bed,
Barfing on the floor,
And eating needles off of the tree.
[skipping ahead]
On the twelfth day of Christmas, I caught my cat as she...
Was climbing on the curtains,
Chewing power cables,
Scratching up the sofa,
Coughing up a hairball,
Jumping on the counter,
Pushing things off tables,
Drinking from the toilet,
Meowing at my door! ...
Tangling my yarn,
Peeing on the bed,
Barfing on the floor,
And eating needles off of the tree.

Now I just need these guys to perform this for me!

Thursday, November 30, 2006

Today my post on CommerceNet's blog: email standards waves. A capsule summary:
  • Internet-scale delivery, addressing and use of domains.

  • Standards to access email on the server, and to use multimedia and non-ASCII characters within the body of the email.

  • Security

  • Internationalization, mobile access, and more security.

Monday, November 27, 2006

New on my knitting page today, a poncho designed by a 7-year-old girl, which I knit (and crocheted) out of the yarns she and her mom provided. It was fun filling in the necessary details within the strict design parameters she provided.
Peacock kid's poncho.
So much fun knitting for girls -- frills and waves and sparkles and fuzzy fringes!

Friday, November 17, 2006

Yesterday on the CommerceNet blog I ranted about the concept of "HTTP compliance", one way in which that's a very weak concept, and how worrying too much about compliance can limit a protocol design team from making needing improvements.

Tuesday, November 14, 2006


I finished another baby blanket a couple months ago, but I didn't want to post it until I'd given it away. It's my own simple lace design and was fun to make -- much of it got done during a long-weekend visit to my parents'.

Next up on the needles: lace socks, lace poncho commissioned by young friend, and lace reproduction 1920s baby bonnet. So much lace!

Monday, November 13, 2006

A while back I posted about whether "feminist" was a dirty word, asking who considered themselves not to be a feminist because of the connotations of the word. I was sort of thinking at the time that surely most people I knew approved of the advances made so far under the name of feminism so why reject the label? Since then, I polled a few friends and colleagues informally (not as many as I intended; I've been busy).

I didn't ask men this question directly -- I don't think there's much downside when a man to call himself a feminist. Nonetheless I appreciate the input I got, and that all the men who commented here or in-person describe themselves as feminists. Thanks guys! Of course this isn't a universal, but probably an artifact of who volunteered this opinion. I didn't mention it in my original post but it was a male family member who (despite having very liberal, equality-oriented views himself) strongly objected when I said my views might be feminist! He likes me personally and was distressed when I labelled my views -- which he agreed with -- with this nasty word.

Of the women I polled, several said they do indeed consider themselves feminist (I can't remember them telling me this before though I've known many of them for years), and a couple said so quite strongly. Perhaps defensively re-appropriating the label? It's hard to tell. Of course they had good reasons for calling themselves feminist and some interesting discussions ensued.

Finally, three female friends did *not* call themselves feminists. I found their answers the most interesting.

M: "I don't know. I never really thought about it."

L: "I don't think it describes my positions well. I think of myself as somebody who believes all people should be treated equally, rather than that women in particular need different treatment."

S: "The people I know who call themselves feminist talk about issues all the time, and are obsessed with little things like who cooks dinner each night."


All these women have active tech careers, I think they're all pro-choice, and I think maybe S. does cook dinner each night. Anyway, I appreciated their answers and didn't have anything to particularly convince them of but it sure led to a few interesting conversations around the water cooler and in friends' living rooms.

Sunday, November 12, 2006

How do you wash grapes?

I got food poisoning a couple weeks ago, during an otherwise lovely trip to Portugal. While it's probably pointless to try to figure out how, I do wonder about a bunch of things.
  • Generally, how long before food poisoning takes effect? Must the cause have been the same day I got sick? The day before? Within a couple hours? The meal I was eating when I started feeling sick was a hotel buffet. Nobody else got sick.
  • I drank local water, because locals do; I drink a lot of water and it's not always easy to buy a new bottle while it is often easy to refill. How likely is it that local water is fine for locals but not for visitors who may not be adapted to the local endemic bacteria? Is it possible that the rainstorms and small floods during my week in Portugal (apparently the only week of rain the whole year) may have worsened the water supply during my visit? I had been drinking local water for a week before I got sick.
  • I shared from a plate of steamed clams a day or two before getting sick, and the first one I bit into clearly had ice crystals. How did one "steamed" clam stay half frozen? Did they toss it on at the end? Nobody else who shared the clams got sick.
  • I bought some grapes from a small fruit stand. I washed them all and kept them in my hotel room for a few days. I certainly didn't get sick on the first bunch of grapes I ate. Is it possible that I didn't wash them well enough and the bacteria grew over time? How do you wash grapes?
Somehow it's that last question which bugs me, seeming so simple. How do you wash grapes? They're fragile and nearly impossible to scrub or even rub individually. Should one soak them? Spray them from several angles with a decent pressure spray? Put them in a colander and allow water to run over for a longish period of time? Most search hits for "how to wash grapes" say simply to "wash carefully" just before eating (rather than before storing), but a few food sites mention "cold running water" or "gentle spray". Is this any good at all besides rinsing out a bit of grit?

Tuesday, October 17, 2006

Today's post on the CommerceNet blog is a brief overview of my ApacheCon talk last week: "Beyond Passwords", promises and policies of Identity 2.0. Although it was the very last talk of the last day of ApacheCon, I enjoyed that venue as I always do, and appreciated every one of the dozen people in the audience who hadn't yet flown home :)

Monday, October 09, 2006

Since CalDAV was approved last week and will become an RFC in the fulness of time, I thought I'd post a bit of the history of CalDAV (so far!) over on the CommerceNet blog.

Tuesday, October 03, 2006

I've started a new job recently, as a Fellow at Commerce Net, continuing my IETF Area Director work with their support. I wrote an introduction to my self and my work, as my first post on the Commerce Net blog. I'll try to remember to post a pointer here when I blog there.

Best part of new job (well, other than getting paid to do absolutely cool stuff): biking to work! I'm not much of a biker so I toodle off on my ten-year-old squeaky fifteen-speed, leisurely pedalling down Channing and Bryant to the office on University Ave. Most often I'll bike in whatever I happen to be wearing to work that day, whether it be a skirt or work pants, blazer or sweater. I do wear a helmet. I don't stop for most stop signs -- cars should stop for me!

Wednesday, September 06, 2006

Am I a feminist? Are you? I've been reading about Mary Wollstonecraft, who wrote A Vindication of the Rights of Women, and it's obvious that if one of us were to time-travel to visit the other, and she were to question me about what I felt women were fit to do, she would consider me a radical feminist. Probably you, too, if you believe that:
  • Women ought to be able to own property, instead of having a man (husband, father, brother, son) own and dispose of all property.

  • Women can decently write books and be paid for it.

  • Girls should go to school, not just to learn to sew but also to think and reason.

  • Girls should be allowed some modest exercise to keep their bodies healthy.

  • A grown woman is responsible for her own moral behavior.
Ok, maybe 1792 is too easy to compare to. Do you believe women should vote? Then according to the mores of UK, US and Canada in 1906, just a hundred years ago, you're a suffragist and feminist.

How about comparing to a time less than 50 years ago, then. In 1963, the Kennedy administration published the findings of a moderate commission on the status of women, and in 1964 came the Civil Rights Act which covered sex as well as race discrimination. Do you agree that:
  • It's unfair discrimination if a qualified woman is turned down for a job, and a less-qualified man hired instead, particularly in government and government-funded jobs.

  • Women should be allowed to use contraceptives.
Even though I know nobody, personally, who strongly disagrees with any of these points, I also know nobody who calls themselves a feminist, and thinking back 25 years can't remember knowing any self-declared feminists. Yet of course I know many women who wear pants (heh) and have technically-demanding careers, some of them also raising children. I also know many husbands and boyfriends who support demanding careers, help with housework, and have spoken in favour of equal pay and equal access to promotions and high-status jobs. There's some social differentiation around sexual acts -- it's better for your reputation to be sexually promiscuous if you're male than if you're female -- but I still have trouble of thinking of many people who would seriously discriminate on that basis (e.g. refusing to associate with an adulteress or reproving her while approving the company and behavior of adulterers).

What turned "feminist" into a nasty epithet? Was it the introduction of issues around sexual promiscuity and pornography? Was it the opposition of domesticity to feminist belief, making a woman who enjoyed cooking, sewing or having a clean house feel like she couldn't be a legitimate feminist? Was it fictional portrayals of feminists?

I can't decide if it's a good thing that we don't have as deep a need to be feminists any more, or a bad thing that the word is still so tarred after 30 years. I'd be interested in hearing opinions on that and whether you, male or female, consider yourself a feminist.

Thursday, August 24, 2006

We just got the second season of House, MD on DVD, and I'm enjoying it although it may be slightly darker than the first season, so far. The show continues to focus on ethics with a great twist: most episodes seems to demonstrate, one way or another, that nice isn't always ethical, and ethical isn't always nice. Or as the creator David Shore puts it, "What's more important --Kindness or Truth?"

The show is entirely driven by the acerbic, blunt character of Dr. House, played masterfully by Hugh Laurie. He's one of my favourite actors with a huge range of talent (including humour: notably Blackadder and Jeeves and Wooster where he plays an utter fop ) and the ability to melt into a role like this. IMDB says:
During Hugh Laurie's audition, David Shore says that Bryan Singer, one of the executive producers, said, "See, this is what I want: an American guy." Singer was completely unaware of the fact that Laurie is English.
Also, Robert Sean Leonard is still cute. Awww, those puppy-dog eyes.

Image from 'http://www.housemd-guide.com/'

Wednesday, August 23, 2006

I have another finished, knitted item to show off. It's from a shawl pattern called "Frost Flowers" in A Gathering of Lace. The goal of the project was a baby blanket, not a shawl, so I used superwash wool in fingering weight instead of laceweight. That choice would probably have worked out perfectly if I'd used slightly larger needles, but since I didn't, the square is more than a square -- the stitches were not quite as long as they needed to be for the overall blanket to come out flat, so instead it's got wavy edges. I blocked it by stretching it out very big on the spare bed, which definitely helped.

Frost flowers lace baby blanket

I love it anyway. I love the colour, which is called "Celadon", custom-dyed by Lisa Souza using her wonderful, soft superfine Merino superwash sock yarn. Celadon isn't shown as a standard colour but if you compare, it's a lighter shade of sage. Mmm.

A few more pics of the objet: center detail, edge detail, and Ophelia modeling it as a shawl at Knitter's Studio.

Thursday, July 06, 2006

A new finished knitting project is up on top at my knitting page. It's a pair of crazy, wavy lacy socks for a friend. Yay gift-making and gift-giving! Especially as a total suprise.

Blog Archive

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License.