Snow day

"Driving" in the snowLast night I had the pleasure of driving my car less than a mile from the nearby metro to our apartment, during a heavy snow, in rush hour. Normally I walk, but this area is bad about keeping sidewalks clear in snowy weather, so driving is sometimes the safer option. It took me an hour and a half to cover the distance, at a blazing average speed of 2/3 mph.

Along the way I learned some unwritten rules of driving in DC snowstorms:

  1. Traditional traffic patterns no longer apply. If a road once traveled east-to-west, it now goes west-to-east.
  2. Ditto with traffic lights: let’s just collectively ignore them.
  3. When traffic is blocked, do attempt, and fail, to perform a three-point turn. This will ensure that traffic in front of you will begin moving again, and traffic behind you will get to participate in pushing your car out of a snowbank.
  4. At random, get out of your car and just leave it there. Say, in the middle lane of a three-lane highway.
  5. If three cars are already abandoned at various places halfway up a short, inclined on-ramp, try it yourself anyway. They probably just weren’t doing it correctly.

Wrapping up

I just submitted my application for graduation here at Hopkins, so as my grad_school bit settles over the next couple of months, I must now contemplate what to do next. I haven’t given it a whole lot of thought, except that I will be glad to be out of academics for the rest of eternity. I’ll save an account of my experience here for another post, but it has been generally positive. Anyway, my dance card is far from empty, but while I’m in limbo between real work and finishing school, and deciding where our family will live, I might as well be promiscuous and see what’s out there.

I guess if I had to enumerate my occupational preferences, they would go something like this:

  • Unix kernel hacker or driver developer. Between school and the new parental status, time for my ath5k / karma / android hobby has dwindled to a trickle. I hate to see my x86 assembly skills go to waste. Looking at you, Ginormous Linux Company.
  • Systems work on problems of huge scale. This has been a recent theme of my studies, and there are some fascinating problems to tackle.
  • Systems work on small scales. Embedded work is just a lot more fun than desktops.
  • Any cool project with smart coworkers
  • Open source
  • Usual niceties like close to home, close to child care, health plan, big bag of cash…

Minus points for: UI work, remote object technologies, anything with angle brackets, function names with too many capital letters, centralized version control, marginally reinvented functional languages

New syscall proposal

CLONE3(2)                   System Programmer's Manual                 CLONE3(2)



NAME
       clone3 - create a child process

SYNOPSIS
       #include <clone.h>

       int clone3(pid_t parent, pid_t co_parent,
                 int (*fn)(void *), void *child_stack,
                 int flags, void *arg, ... );

DESCRIPTION
       clone3()  creates  a new process, in a manner similar to fork(2).

       Unlike fork(2), these calls allow the child process to share  parts  of
       its  execution  context  with  the  parent and co-parent processes,
       such as their home, food, and approximately half of their genetic
       material.

       The main use of clone3() is to implement offspring: sentient beings
       that run concurrently with the parents in a shared environment.

       When  the  child  process  is  created  with  clone3(),  it executes the
       function  application  fn(arg).   (This  differs  from  fork(2),  where
       execution  continues  in the child from the point of the fork(2) call.)
       The fn argument is a pointer to a function that is called by the  child
       process  at the beginning of its execution.  The arg argument is passed
       to the fn function.  Although the parent processes may supply a suitable
       fn function, the child process has a mind of its own and may deviate
       from its execution at will.

       Executing clone3 will randomly select half of the genes from each
       parent, resulting in a selection of phenotypes according to
       Mendelian inheritance.  By design this process increases the
       number of bits in the global entropy pool, making recovery of the
       random state impractical.

       The  child_stack  argument  specifies the location of the pile of
       diapers used by the child process.  After the child process leaves
       the EMBRYO state and until it acquires the CAP_POTTY capability,
       it may frequently dump core.  The calling process must therefore
       set up a large store of waste disposal units and pass a pointer to
       this store to clone3().  After a successful core dump it is necessary
       for a parent to handle the condition as soon as possible.

       The flags parameter may  be  bitwise-or'ed  with zero or more of the
       following constants, in order to specify  the behavior of the system
       call:

        CLONE_XY
              Setting CLONE_XY indicates to the system that a child of the
              male gender is requested.  This is only a hint to the system
              and may not be honored.

        CLONE_XX
              Setting CLONE_XX indicates to the system that a child of the
              female gender is requested.  This is only a hint to the system
              and may not be honored.

              If both CLONE_XY and CLONE_XX are set, results are undefined.

RETURN VALUE
       On  completion,  the  thread  ID  of  the child process is returned in
       both parents' thread of execution.  During execution, the child process
       may signal an error condition by raising any of the following signals.

SIGNALS
       HUNGRY  The stomach monitor process has detected an empty condition.
               The parent may correct the condition by supplying food.

       TIRED   The process has executed too many cycles and must enter
               sleep(3).

       GRUMPY  The process is raising signals at full volume for unknown
               reasons.  The parent process should attach pacifier(2) to
               the child process and attempt to cause it to enter sleep(3).

       HAPPY   The process is in a suitable state for taking pictures for
               grandparents.

CONFORMING TO
       Biology 101.

BUGS
       Child process may spit-up on your new shirt; a burping cloth is
       recommended.

EXAMPLE
       The following psuedo-code illustrates the intended usage:

       #include <clone.h>

       int main(int argc, char *argv[])
       {
            pid_t ange = /* ... */
            pid_t bob =  /* ... */
            pid_t alex;

            alex = clone3(ange, bob, fn, stack, CLONE_XY, NULL);
            sleep(86400 * 30 * 9);

            take_snapshot(alex);
       }

       This yields the following:

       
       Alexander Yit-Keung Copeland
       Born 26 June, 2010
       Weight 7 lbs 12 oz

SEE ALSO
       fork(2),    futex(2),    getpid(2),    gettid(2),   set_thread_area(2),
       set_tid_address(2),  tkill(2),  unshare(2),  wait(2),  capabilities(7),
       pthreads(7)


CLONE3(2)                         2010-06-26                          CLONE3(2)

Moved

Apologies, dear reader, for not having updates lately: I have been quite busy.

Angeline and I just “completed” moving from one side of the street to the other side (the lie-quotes indicating our plan to live out of boxes for the near future). If you have our old mailing address or home phone number, it’s probably a good idea to drop me an email to get the new data.

The new place seems nice so far except for the water being shut off the day we moved in, and the towing of my car from the space they told us to park in (evidently they were just kidding when they said that).

Here’s the view from our window:


Moving on up

Proof (as if you needed any) that Ange and I are inveterate nerds — 8 of the dozens of boxes crammed full of books:


Books

19110

Welcome belatedly to the tens. I suppose I should summarize the previous year as is my typical MO in January.

We kicked off 2k9 freezing our appendages watching the inauguration in DC. Still worth it.

Angeline settled in to her new private practice, wowing patients and colleagues alike with her acumen and meticulousness. At the same time, in a series of poor decisions, I gained a renewed respect for Clark Kent jobs as I went part time with mine to attend grad school.

We cheered the Caps on in another playoff run from our seats in aisle 117, row G. I took ice skating lessons. My cred as honorary Canadian waxes.

We spent some time in Germany, increasing our vocabulary slightly beyond words learned from Castle Wolfenstein.

I’m close to making good pizza at home. Ange is mastering Cirque du Soleil yoga. She has also picked up lots of trivia on hockey great Bobby Orr, and learned the true meaning of “imaret” through daily application to the NYT crossword puzzles.

My goal of 100 kernel patches in 2009 was reached (123). This year, my goal is to be a better maintainer and stop sitting on patches, even while having much less time to contribute due to school.

’10 promises to be a big year as we continue that whole nucleotide ordering experiment.

me |= grad_school

I let the month of September elapse with nary a post. So in case you’re wondering, I’m still around and I just haven’t had time to return your emails yet. Instead, I’m busy getting destroyed by grad school, where I’ll be for the next seven {months/years} of my life.

PS Happy birthday, Karen!

Hello from Berlin

Angeline and I arrived safely to Berlin a couple of days ago. So far it’s an interesting city. It would definitely be useful to have more than a passing familiarity with the German language, but most people understand enough English that we get by. The European style lights and bath fixtures take a bit of thought to operate. Train system is very extensive, and despite the presence of graffiti almost everywhere, the trains themselves are very clean. German television consists primarily of overdubbed US market cast-offs (“The Nanny” is inexplicably on nearly 24/7). Food so far has been hit or miss, some good stuff, some rather average; tomorrow night is our most anticipated dinner.

The wireless summit was great by the way, perhaps more on that later.

All accounted for

As a traveler through the DC Metro system in yesterday’s evening rush hour, I learned that Metro employees euphemize “horrible train wreck” as “train experiencing mechanical problems.” To what end? It just sounds callous, and all of the passengers on my unaffected route already knew of the incident.

Unvacationed

Ange and I just returned from a long weekend in Florida with my family. After a perfect storm of flight delays and down computers, and US Airways personnel blaming the passengers over the intercom for ruining their holiday, we arrived in the state a mere six hours late. Everything from then on was smooth sailing though: sparkling sandy beaches, excellent weather, lots of playtime with the kids, and so on. My nephews’ superhero kites did in fact fly — after a trip to the local kite store to pick up some tails. We got in a full day of standing in line at Disney World, and an afternoon traipsing through ye olde shopping centre of St. Augustine. And I mostly didn’t touch the computer the whole time.

Anyway we are back and reinserted to the river of normal life. This trip should hold us until a month from now when we will be flying off to Berlin, Germany. I get two days of being nerdy at the Linux wireless mini-summit, and then the rest of it will be spent enjoying the city.

FiOS

Dear Verizon,

Thank you so much for the thoughtful racial profiling you sent us. However, despite my wife’s last name, no one at our address can read Chinese. Can you send us your ads in English again so that we may more easily peruse and purchase your products? Or better yet, not send them at all? Warm regards, us.