Parenting is…

Being a parent of young children gives new perspective. Things you used to think would be gross, aren’t.
In the spirit of a top 10 type of list. Parenting means:
Scooping poop 1 out of the bathtub. Kids are splashing away, getting cleaned up from the day’s activities, when you see a look of concentration. You know what’s about to happen, but by the time you pull your child out of the tub… plop. A turd drops in the water.
On another occasion, the child is pulled out of the water on time only to have a mushy turd land between your toes in your flipflop sandals.
It’s a hot summer afternoon. You’ve got the kiddie pool out, kids are in their swim suits or swim diaper. One of the younger kids, not yet potty trained, is taking a break sitting on your lap, when… what’s that wetness? A swim diaper is not really a diaper. It helps prevent a floater, but they’re not absorbent. In this case, being a parent means that instead of immediately changing your own shorts, you think, “well, my shorts are swim shorts. won’t hold a lot of pee. Will dryout quickly”.
I was at a wedding years ago. A friend was sitting across the table with her younger daughter on her lap. The daughter vomits but mom saw the signs and managed to catch it in her hand.  She calmly deposited the gift on her salad plate, wiped her hand with her napkin and continued as normal. At the time, I was impressed that she wasn’t grossed out, but it seems like such a normal response today.
Being children, there are lots of things that my kids haven’t tasted before. It happens regularly, that they’ll try something and then immediately spit it out. Instead of generating a garbage pile, it’s often easiest to just eat it yourself. What’s a bit of spit and tooth marks within the famiy?
My daughter is toilet trained now, but there was that transitional time. I remember one time, she’d pooped earlier in the day, yet didn’t wipe sufficiently 2. Later in the day, she’s running around in her birthday suit and sits on my lap. Heh, I now have a bit of a skid mark on my pants. Did I immediately change them? Given the theme of this post, I’ll let you guess.
We went car camping a couple weeks ago. Somewhere around  10pm, I hear crying from the tent were the kids are/were sleeping. My daughter is a pretty solid sleeper and only wakes up when she needs to pee. The problem is that she doesn’t really wakeup, staying in a sort of zombie state. I’ve come to learn to just pick her up and take her to the toilet. I bet there are many nights that she never really woke up throughout the whole process. This particular night, she resisted. “Put me down! I don’t need to go potty!”. I don’t really like to just force her to do anything against her will so I hesitated. Eventually, the river begins. The sleeping bags only got a little on them, but some does get on the floor of the tent. I quickly get her out of the tent; thankfully, I still had the door unzipped and we water the grass. Nothing like sleeping with a pee towel under your sleeping bag.
I refuse to have snot nosed kids. Anyone who’s been around kids knows what I’m talking about. A kid’s happily doing their thing with these two nasty, green, gooey snots hanging from their nostrils. I was once at the park where a kid had this going on. I look at the dad with this look of, “so… you gonna do something about that?”.  Nothing. Many/most parents just resolve themselves to this state of affairs. Snot can see unavoidable. Thankfully, there’s the Nosefrida AKA the snot sucker. It’s a tube with a funnel-like thing you jam in your kid’s nose and suck on the other end to vacuum out the green goodness 3. It sounds really gross, but I use this thing more than just about any other device. Being in Portland, I don’t get looks of disgust from other parents as I might in other cities. My 1.5 year old son has actually brought the thing to me to get a bit of relief.
All of these things either happened to me, my wife, or I personally witnessed the event. It’s a fact of life when being a parent, but it’s really not bad. As parents, we are in service to our children. We haul them from event to event. We go through zombie periods of not enough sleep. 4 These are the things we bear because we love our children.
Parenting is…

  1. parenting also means that you call it poop

  2. mom or dad still do most of the wiping

  3. it’s made in such a way to keep the parent from inhaling the snot. That would be gross be gross

  4. usually, it’s more the mom, but dads are affected too

Goofing off and Meeting expectations

The things that are expected of us have a great impact on our performance. Sometimes you have to do what you’re told. Sometimes it’s better not to.
I was comparing notes with my friend Trey about college. The computer science program he went through at Cornell was similar to my college experience. In particular, the class 6.001. (videos of the lectures can be found here) 1. Some other schools offer a variation of this class but either cover it in multiple  semesters or omit much of the material. My point is not that MIT is so much better 2 In fact, I’d say that much of the teaching wasn’t that good. MIT professors get tenure for research and teaching is perhaps a bonus. (note Jeremy Wolfe). The biggest benefit I got out of being an MIT student was the extremely high level of expectation. The class 6.001, which covers more material in one semester than other good schools do in multiple semesters, is the first CS class encountered by students. “We expect you to do this. Figure it out.”
A second example (I’ll have a point eventually). I took a not very good calculus class in a not very good high school. I also spent a bunch of time over the summer before college with my nose in a calculus text. The things I learned lasted a lecture and a half of my first math class in college. “This is what we expect. Figure it out”. 3. A couple weeks into the class Prof Greenspan commented that much of the class didn’t seem to have a good grasp of one of the concepts. He passed out a handout, encouraged us to seek help from the teaching assistants, and then proceeded to continue at the same pace as before. Figure it out.
I’ve tried to maintain a high level of self-expectation throughout my career. Had I gone to a different school, I may have achieved a lower level of overall success only because I may not have learned I’m capable of as much.
Although I’ve often done what is expect of me, there are also lots of times that I do my own thing and that has also served me well. In my programming work, I often came across some unexplained behavior in the compiler or interpreter I was using. Perhaps a library didn’t really behave the way I expected. There is usually a work around to this but most of the time, I found myself compelled to really understand the mystery. More often than not, this resulted in a bit of not-so-useful trivia. Perhaps I’d find a bug. Not always, however, and the totality of the useful stuff I learned served me well and I became a better, more effective programmer overall. I thought of these hunts for the explanation as goofing off. I didn’t really need to know the answer, but I wanted to. The search was fun. This was particularly true about the Perl language, which is used a lot in Intel design. I can think of one person at Intel (a reader of this blog) who is probably as familiar with the ins and outs of Perl as I am. 4
Most people I worked with at Intel didn’t spend nearly enough time goofing off.
So, an example of a contrast. Intel has the best semiconductor process technology. I’d challenge you to find anyone who thinks that some other company can do it better. Intel’s designs are good, but not clearly better that those from other companies. My brother-in-law works in lithography of one of the cutting edge process nodes. 5 He works in a part of Intel that is better than the part I belonged to.
Recently, while hanging out, he asked for help converting an image file into something that JMP could accept. To me this sounded easy. ImageMagick has several conversion possibilities that could serve as a starting point. 6 One these gives something like this:
6,0: ( 1, 1, 1) #010101 srgb(1,1,1)
I removed the # comments and sent him the result for the sample image he gave me. JMP doesn’t like this format. It really wants tabs and really doesn’t want the ()’s.
I challenge you to find anyone in my department that would require more than 2 minutes for remove the ()s and swap the other stuff for tabs. If an interview candidate struggled with this, I’d hope we wouldn’t hire. Again, my BIL is in a leading edge part of Intel in a field that Intel is clearly dominating. To be fair, my department was mostly programmers for whom this stuff is easy but manufacturing involves a lot of automation, repetition,… the stuff that benefits from a bit of code.
I think it comes down to expectations and I’m getting closer to making a point. Before I do, I have another anecdote.
A guy I worked with in design used to be a technician in Intel manufacturing. One of the assignments he was given was a fairly repetitive task. Run a bunch of experiments for a week, taking data and come back with the results. He did this and was promptly asked to do the same thing on a different set of test batches. Fearing he’d jump off or a bridge at the thought, he automated the task and produced the same results in 4 hours, much of which was spent waiting for the computer to finish. With some simple automation, he reduced a task from a week down to half a day. This was not a new task; the old way had been the way for a long time.
On a recent neighborhood camping trip, I was talking to a former Nike manufacturing related engineer 7. Somehow JMP came up and I related these stories to him. “Same thing is true at Nike”.
These are not isolated incidents in an otherwise very capable portion of an industry dominating Intel division.
Intel’s technology development divisions are very high pressure with high results expectation… potentially at the expense of long term individual productivity. I did the file manipulations using Linux based tools but those same things are available on Windows through Cygwin 8. No one in process development seems to have the time or take the time to do what I call goofing off and learning these tools. Short term, there’s usually a way that will be quicker for the task at hand. Getting comfortable with scripting, grep’ing, perl,… takes some getting used to, especially for non-programmers.
High expectations can be wonderful (though it may not feel that way at the time), but they can also bite you. Be sure to spend lots of time goofing off.
Goofing off and Meeting expectations

  1. sadly, MIT no longer offers this class. I really think that’s a big loss. It was a wonderful class. I suspect that part of the reason is that electrical engineering types often struggled with it. My memory of test results is that computer science majors would score somewhere in the high 90 percents while EE types would score closer to 60%. I know a couple folks that switched to mechanical engineering in part because of this. Either way, I think it was one of the two most useful programming classes I took. Algorithms/Data Structs was the other

  2. many of my peers didn’t seem particularly motivated in their majors of choice.

  3. That second lecture of 18.011 (which I don’t see in the current catalog) was taught by Harvey Greenspan using a book he’d written and culminated with a derivation of the  and culminated with a derivation of the Taylor Series expansion of e. One of the mid-term questions expected us to derive the series for Sin-1 (inverse sine) expansion of e. One of the mid-term questions expected us to derive the series for Sin-1 (inverse sine)

  4. Randal Schwartz used to work at Intel. He surely knows more about it than both of us together  used to work at Intel. He surely knows more about it than both of us together

  5. to me, lithography is one of those things that seems like VooDoo. I think: “Really, people do that?”, when I hear about some of it when I hear about some of it

  6. ImageMagick is likely not known to engineers who havn’t done much photography, but the rest of my argument will not suffer from this

  7. much of what they do, like the pistons in some of their sneakers are actually quite difficult to produce

  8. I believe Intel’s internal IT software installer can include cygwin if desired

Updates from the McCoo homestead

The weather’s been nice and the garden is booming.
The Hydroponics are doing well. This was a month ago:
Dutch buckets 1
This is now. A little spindly since they are in the shade of the house for much of the day:
A month ago:
My Kratky Beds
and now (there are several boxes that were not present in the previous picture):
Dutch buckets 2
Last fall, I planted a bunch of tulips in the middle of the lawn, which did well. They are gone now, however they prompted me to not mow that part of the yard. I’ve continued the habit and it’s yielded a nice little meadow. If the whole lawn looked like this, it’d just be overgrown, but surrounded by the manicured putting green that is my lawn, I think it looks nice. My part of Portland tends to not water the grass. I plan on giving the “meadow” some water here and there, especially when emptying the kiddie pool.
Part of the inspiration for this was the book On Meadowview Street that we’ve read many times to Lydia:

The most abundant part of the yard is the bee hives.
It would be logical to ask why we have three hives. Well, it started with just one composed of the larger boxes. Then I realized how heavy a fullsized hive body (one of the levels of the box) weighs. So I bought a bunch of the shallow ones which still get pretty heavy. I also tried making some myself as a woodworking project. The result is that I have three hives worth of components. Only two of them were occupied through the winter. When I harvested some honey from the right most hive, I noticed that many of the frames had brood (larvae) so I took a risk at moved some of those to the empty middle hive. The bees can raise a queen from some of those brood and build a new hive. Now that it’s a couple months later, it appears to be healthy. Hopefully, they’ll become strong enough to survive.
A couple days ago, I harvest honey from the left most hive, which was the strongest. Here is some of what I got from them; about 4 gallons. These are all quart mason jars.
My extraction process is pretty simple. Just a 5 gallon paint strainer duct taped to a cut bucket. Most of it strains in a couple days but I’ll likely get another quart over the next month. Note that there are another five frames that are still waiting. I was starting to worry that the duct tape won’t be strong enough to hold the weight.IMG_4934
If anyone cares for honey, let me know. If you’re an Intelite, I will get some to JF to be passed along. If you’re somewhere else, give me your address and I’ll mail some.
I’ve also melted/separated the beeswax. Here’s what I’ve accumulated over the past two years. I don’t know what to do with it. I’ve you’d like any or all of it, let me know and I’ll send it to you. Anyone know how to make lip balm? I’ve included a quart mason jar for scale. The middle ones are the more recent ones. Remelting the others should bring back the nice yellow color.
Updates from the McCoo homestead

Role models and inspiration

It’s been a month now since I left Intel. Life is busy. There are lots of days when I go to the park with the kids not once, but twice. It’s gotten to the point that I’m on the lookout for more parks; can’t just go to the same place day in and day out. As I’ve kept mentioning, I still want to do technical work. I continue to chair the SystemRDL committee and that’s still engaging. Beyond that I have some other programming projects (I do like to write my for loops). I haven’t done much so far, I’m mostly setting up a work environment. Getting a linux box running in the basement, configuring a windowing environment like the one I used at work plus some additions I should have implemented years ago. I’ve installed the Android environment.
It’s all normal pre-work. A slow start, but I’ll be productive soon enough 1. The thing that concerns me a little bit is that I have less access to role models, inspriration, muses. So I figured I’d talk a little about where I’ve drawn from in the past. There are a bunch of sources:
  • Books and discussions around them
  • People online doing cool stuff
  • Code reviews.
  • Serendipitous cubical interactions.
  • CADPax
It hasn’t happened as much in recent years, but the early times of my career felt like a Renaissance of Computer Science. The folks in my work environment were reading lots of books and implementing the ideas found therein. There must have been 15 or more participants in my local circles. Some of the books that come to mind.
  • Code Complete
  • Writing Solid code – written by Microsoft at a time when their products seemed so unstable.
  • Design Patterns 2
  • Modern C++ Design – quite a tough read, but worth it. It reminded me of some of my MIT math classes that were taught from a thin (1/4″ thick) book yet only covered a quarter of the material in it.
  • Effective C++ – The author Scott Meyers visited Intel on at least two occasions. First to consult on some stuff the dept was working on and later to give a talk on Programmer’s Day. From a conversation with him on the second occasion, I was amused to learn that he’s never really been a developer.
Cool online folks
In recent years, I’ve come to value the ideas I get from online personalities. This section warrants a digression to my childhood.
I’ve always been a curious person 3 but, as a kid, I lacked in world experience and hence had trouble filling my time. I can remember one summer, when I basically burned time by watching not so interesting television. Don’t ask my why I didn’t just spend more time reading or at the library. Had Youtube been available, things would have been much more interesting. I would have spent more time tinkering.
Jeri lElsworth is super awesome with a great story. She grew up largely in her dad’s auto service station. She made a living for a while building race cars and later doing circuits. I don’t believe she ever went to school for any of it. As a bonus, she’s from the sticks near Portland.
Dave Jones of EEVBlog and The Amp Hour podcast. I enjoy hearing his frank critiques of various electronic designs. Lots of great real world stuff.
As I’ve mentioned before I enjoy the ATP podcast. Although they talk about Apple stuff (which I am opposed to), they do it in a way that is interesting. It’s good to get a look into how knowledgeable people look at stuff.
Dangerous prototypes I appreciate how a tinkerer put up an open design of his Bus Pirate, was eventually approached by the  Seeedstudio people which became popular and he made a career out of it.
Through links like these, one can get to a ton of others like them.
Code Review
Early in my career, some coworkers came across the only way I’ve seen to do effective code reviews. It goes like this:
  • Print out the code in a line-numbered way such that everyone sees the same numbering
  • Everyone takes an hour to read and markup their copy (we did it on paper, but I’ve found that Code Collaborator can be used for this 4
  • You get together in a room and, round robin, everyone makes an observation.
  • Discussion ensues.
It’s a fairly standard code review thing, but there are some things I find really important:
  • I don’t care if we find actual bugs. Sure, that’s a bonus, but we usually don’t find something earth-shattering. The code is usually specialized and only the author really understands it. The frequency of significant finds is not enough to keep everyone motivated.
  • Personally, I find that coding standards are a waste of time. They always seem to devolve into arguments about where the curlies should go, how much spacing, camelcase,… I have only one universal rule:
    • Be consistent to the rest of the file/function. Just because the placement of the curlies doesn’t make sense to you is not reason enough to be different from the rest of the code you’re modifying.
  • Each reviewer makes comments based on their own experience and hangups. If it’s important enough for them to fixate on it, it must be worth noting and sharing.
  • The real value comes from the discussion. It goes like this:
    • A: on line 27, I don’t like leaving out the curlies on a single statement if.
    • B: really? that adds clutter
    • A: sure but what happens when you add a debug statement two years from how.
    • B: add the curlies then.
    • A: ok. but what if you first make this change, then this other change, then you delete this original line,… you have a bug.
    • B: …. oh.
  • After many discussions like this, the group will come to a consensus:
    • Oh, that’s just something that Miles was bit by years ago, but we don’t agree it’s an issue.
    • You really do want to do A, B, and C.
  • Most important of all, in the end, the owner of the code is a well paid professional, who’s employed to use engineering judgement. The real value of these reviews is to educate each other and improve that collective judgement.
Cubical interactions
I’ve found that I don’t work so well in isolation. I need to talk to people. The people don’t need to be particularly knowledgeable on what I’m doing. I sometimes wonder whether a manikin would work as well. Just the process of explaining is enough to get my juices flowing. There are a couple ways in which the other side needs to be human.
When I worked in Israel supporting mask designers 5 to more effectively use the design tools. There were often times that I didn’t feel like working, so I walked around finding other people to corrupt. We’d shoot the breeze a bit, how are the kids?, going on a vacation?… Eventually, I’d ask them what they’re working on. What are you doing? How are you approaching it? Which commands are involved? Why don’t you do it this other way? Ah, I see why you can’t do it that way. Still why are you using this command. How about this other one? Response: well, that command has this side effect…. Me: I can fix that. We’d talk about what the thing should really do and I was motivated to work again.
Second story. My original manager, Avner, mostly left me alone. He sat in the cube next to mine but we often wouldn’t talk for days. Eventually, he’d come by “your cube has been quiet for a couple days. That usually means you’re cooking up something”. I’d explain what I was working on even though he likely didn’t understand most of it. What he did understand was how I talked about stuff when I wasn’t entirely convinced it was the correct approach. Maybe I just wanted to get it done, but he would zoom in on that. He sensed the chinks in the armor and didn’t let me get away with it. I’d try to explain why doing it the right way would be too hard but the process of explaining often showed me an easier way to do it right.
Of course there are also the people I can always go to for engaging discussion about whatever I’m trying to do.
Years ago, in the golden age of programming in my department, someone noticed that all of us had our own little library of routines that made our programming lives easier. Code for spawning execution of several jobs, how to do common things in the tool we were working on, ways to make it easier to interact with TCL/SWIG. We got together to figure out a ways to reduce the duplication of effort. Releasing this stuff with the main tool didn’t really make sense. Each small library was too small to justify it’s own sub-tool. So we created an umbrella tool called CADPAx. (packages for the family of CAD tools we all worked on).
CADPax eventually became a pile of stuff I grew to depend on, but that wasn’t the main benefit of the library. Instead, it was the mindset it put me in. The mere act of considering the re-usability aspects of my work made my work better. Doing things cleanly often doesn’t require much more than thinking about it for an extra minute on a regular basis.
When done and managed well, the human work environment of a programmer can do a lot help hone the skill, maintain motivation, enable miracles to happen. Now that I’m not at Intel anymore, I need to find replacements for some of these.
  • Please comment with any book titles I should checkout.
  • I’m a good code reviewer (at least I think so), bug me if you’d like to do one.
  • I have one or two prospects for collaborative projects. Let me know if you have an idea.
Role models and inspiration

  1. Robie and I have agreed on a family schedule that gives me the equivalent of a couple solid days to do whatever I want… Garden, programming, lunch with friends. It’s mostly 4 hour chunks.

  2. I’ve had exactly two interviews in my career (in which I was the one interviewed). The second one was with Autodesk about eight years ago. Sadly one of the questions I did poorly on about a design pattern. I supposed that had the culture of discussing books continued around me I might have done better and gotten an offer. In retrospect, I’m glad I didn’t get the job. There’s no way the hiring manager and I would have gotten along. No real way to know

  3. my older sister likes to tell a story from when I was 5 or 6. I had watched my dad build a set of speakers. Soldering and all that. Some time later, I wanted to listen to the radio in my room, but the stereo was in the living room. In the closet’s junk pile, I found a length of antenna wire and one of my dad’s unused speaker drivers and wallah, the music was in my room

  4. you just have to ignore CC’s strong desire to do the standard thing of only reviewing diffs

  5. people who are employed to draw the polygons representing the wires and transistors that make up a semiconductor circuit. At car companies, they be called draftsmen/women.