Monday, March 30, 2009

Adventures in Amortization

Did I mention how thrilled I am to have gotten my mortgage refinanced at such an awesome rate? Because, I am!!! That was one of the best things to happen all month!

If you weren't my blogging audience, I might worry that you would make fun of me for being so excited about my refinanced mortgage. Instead, I know that y'all read this for the math (or, at least some of you do!), and are almost as excited for me as I am.

You may be wondering how mortgages really work. You borrow some amount of money for a very long term, often 30 but sometimes 15 years, repaying it on some sort of schedule. In each payment, you pay down part of the principal (the sum that you borrowed), and the rest is interest. Over time, the principal portion of the payment grows, but when you start out, most of the payment goes towards interest. How do they compute the mortgage payment schedule?

You get a mortgage at a certain interest rate, let's say 6% for the sake of argument. If you had a bank account where you were getting an annual 6% return, compounded monthly -- and if you have one, let me know where I can get one too! -- then if you left $100,000 in for 30 years and never took it out, you'd end up with nearly $602,258. On the other hand, if you took out a mortgage for the same amount, you would pay back only $215,838 over the lifetime of the loan. What is the difference?

The savings account accrues interest on the entire sum of money in the account, which grows every month by a factor of 1.005 (that 0.005 is equal to 6% divided by 12 months). So, after the first month, we obtain a balance of $100,000 × 1.005 = $100,500. Every subsequent month, the balance rises by that same factor multiplied by the previous month's balance, so we can compute the balance B after n months as
B = $100,000 × (1.005)n.

We can generalize this to any principal P and monthly interest rate i to obtain
B = P × (1+i)n.

With the mortgage, on the other hand, the principal p(t) at time t (upon which the interest is computed) decreases every month. We can express that principal as an equation in terms of the monthly interest rate i, the monthly payment A, and the original principal of the loan:
p(t) = p(t-1) × (1+i) - A,
with
p(0) = P and p(360) = 0.

These conditions represent the fact that at t=0, we owe the entire principal, and after 360 months, we should have paid the whole thing off.

We can plug the condition for p(0) into the equation, do some algebra, and obtain
p(t) = P × (1+i)t - A × ∑k=0 t-1 (1+i)k.

There's some algebra we could do to show that k=0 t-1 (1+i)k = 1 + (1+i) + (1+i)2 + (1+i)3 + … + (1+i)t-1 = ((1+i)t-1)/i. Substituting that in, we obtain
p(t) = P × (1+i)t - A × ((1+i)t-1)/i.

We haven't yet incorporated the other condition into the equation:
p(360) = P × (1+i)360 - A × ((1+i)360-1)/i = 0.

Since we know P and i, we can solve for the monthly payment A and obtain
A = P × i (1+i)360/((1+i)360-1).

So if i = 0.005 (6% yearly rate), then our monthly payment is
A = 100,000 × 0.005 (1.005)360/((1.005)360-1) = $599.55

and multiplying that by 360 payments, we obtain $215,838.19.

My 30-year mortgage rate was 6.5%, while my new 15-year mortgage rate is 4.5%. How much money am I going to save with this new mortgage?

Let's suppose for a minute that I haven't been paying on my old mortgage for three years, and compare the mortgages from their inception. Let's also suppose that they are for the exact same amount of money -- a convenient, round $100,000 -- and that I never pay anything extra on the mortgage. How much will I pay by the time I'm finished paying off these two mortgages?

The 30-year mortgage has an APR of 6.5%, but an APY of 6.7%. My monthly payment is $632, for 360 months. In the end I would pay more than $227,544 to borrow $100,000.

On the other hand, my 15-year mortgage monthly payment is $765, and I pay only $137,700 to borrow $100,000.

I didn't borrow exactly $100,000, but I did borrow some amount in that ballpark. So how am I paying only $50 more per month?

On my previous mortgage, I committed to paying an extra $100 per month, because I wanted to pay it down faster. In the example case, this means I would be paying an extra $33 per month. But by refinancing, I am able to pay roughly the same payment and pay off the mortgage in about half the time!

Friday, March 27, 2009

Conference Travel

I'm attending the Richard Tapia Celebration of Diversity in Computing in Portland, Oregon next week. Any of my vast fan base going to be there?

Thursday, March 26, 2009

Feeling Better, Thank You

Finally, I'm doing better!

It took quite a while. I dragged myself to work yesterday, and managed to do a little bit. Today, I was able to accomplish a lot more. I talked to some people about some software we want to install on our system, talked about a possible new proposal with some other folks, and arranged to refinance our mortgage.

Yeah, that's right! I refinanced the old 30-year fixed-rate mortgage with a 15-year fixed-rate mortgage that's two percentage points lower. The payment is only $50-75 more than what we're paying now, and we own the house in half the time. We just have to wait for the appraisal and then the backlog of other refinances, and we should have the paperwork signed within six weeks!

Saturday, March 21, 2009

Blah

It was supposed to be a fun weekend. Granny and Granddad are here visiting for several days. Vinny and his daddy are having a fun time with them, but I am at home -- sick with the flu.

I'm aching, I'm congested, I have a headache and a sore throat, I have enormous, very tender lymph nodes, and I feel really weak and wobbly on my feet. So it's bed for me while my boys and our guests go out and have fun.

Wednesday, March 18, 2009

Interesting Conversation

Yesterday at about 6:00 pm, as I was walking to the car, I decided to call Jeff on his cell phone to see if there was anything I could pick up at the grocery store.  Instead of reaching Jeff, I ended up talking to a sweet little two-year-old in possibly the longest and most involved conversation we have ever had!

[Phone Rings]
Vinny: Hi, mama!
Me: Hey Vinny, whatcha doin'?
Vinny: I'm at Kroger!
Me: You are?
Vinny: I see fans!
Me: You do?  What else do you see?
Vinny: I see apples, grapes, pears...
Me: Wow.  Lots of fruit.  Are you in the produce section?
Vinny: I see blinking lights!
Me: Blinking lights!  Wow!
Vinny: Hey mama, I go playground today!
Me: You went to the playground today?  Did you have fun?
Vinny: Uh huh!  I play playground.
Me: Wow, sounds like fun.
Vinny: I see crackers!
Me: That's fantastic.  Say, is Daddy there?
Vinny: Yup.
Me: Can I talk to Daddy for a minute, please?
Vinny: I don't think so!  I see bagels!
Me: ... Wow, bagels!  Can you give the phone to Daddy for just a second, please?
Vinny: Uh uh.  I don't think so.  I see fan!

(It went on like this for several more minutes until Jeff finally wrestled the phone from Vinny's grasp.)

Monday, March 16, 2009

Adventures in Pseudorandom Number Generation

When I made my Pi Day cake, a circle inscribed within a square, I decorated it with sprinkles to represent the Monte Carlo quadrature algorithm that could be used to compute π.

You can see that I tried to distribute the sprinkles evenly but somewhat irregularly over the cake. I did not want them to be in a grid, but at the same time I didn't want them to be clumped together.

In the case of computing a two-dimensional area, a grid and a pseudorandom distribution will yield the same order of accuracy, but for three dimensions and higher, the pseudorandom distribution always comes out ahead. This is because in finding the area or (hyper)volume of a D-dimensional object, the accuracy of the number you get from N points is proportional to one over the Dth root of N for a grid, but always one over the square root of N for a pseudorandom distribution. In other words, for two digits of accuracy in computing the volume of a three-dimensional blob, I need a million points on a 3-D grid, but only 10,000 points in a pseudorandom distribution.

So, these Monte Carlo algorithms can really save us a lot of effort. So how can we create pseudorandom distributions? Furthermore, what does pseudorandom even mean?

I'll start with the last question first. Pseudorandom means that something seems random but actually is not. A sequence of numbers that we generate using a mathematical formula cannot be random by definition. But if it shares certain desirable properties with random number sequences, then it is pseudorandom.

Basically, if a sequence of numbers that we generate looks random, meaning that there are no discernible patterns in it, then it is a pseudorandom sequence. A good pseudorandom sequence has the following qualities:
  1. It has a very long period (meaning there are many millions or billions of numbers generated before the sequence starts repeating itself) -- generally they have a period of 2n, where n is the number of bits in the computer's representation of numbers, although longer periods are better.
  2. It is uniformly distributed (meaning that the sequence lands on every possible value with equal frequency).
  3. It is reproducible (meaning that you can regenerate the same sequence over and over again just by initializing it with the same seed value). This is the primary advantage of pseudorandom number generation: it is useful to use the same "random" numbers every time when you are debugging a program, for example.
  4. There should be no correlations in higher dimensions, meaning that if I generate n-tuples from the sequence (for example, pairs (x, y) derived from elements a2k and a2k+1 in the sequence), there should be no discernible pattern.
  5. If the sequence generation is quick and cheap, that would be helpful too.

How, then, can we generate a pseudorandom sequence? Pseudorandom number generation is hard! I had a tough time generating the points on my cake. At first, I had a lot of clumps of sprinkles, and I actually had to go back in and carefully fill in some of the bare spots. So "Rebecca sprinkling sprinkles over a cake" is not a very good generator.

Likewise, most pseudorandom number generators (PRNGs) aren't actually very good. For example, the RANDU generator, commonly used in the 1960's and 70's, was a very poor PRNG. Check out the graph in the Wikipedia article, and you will see how bad it was. If you used RANDU to generate triplets and then graphed them as (x, y, z) coordinates, all the points would fall into one of fifteen two-dimensional planes. So if you were using this for your 3-D Monte Carlo integration, it would almost be as if the points were pseudorandom in two dimensions, and gridded in the third, leading to inaccurate results.

The best PRNG for scientific applications is the Mersenne Twister, developed in 1997 by by Makoto Matsumoto and Takuji Nishimura. Its period is more than 106000, it is equidistributed up to 627 dimensions (so you won't have the problem described above), and it is cheap and easy.

Most computer programming languages have a built-in PRNG. In C, for example, you can call the rand() function, which will output a number between 0 and RAND_MAX (a constant that is machine dependent). But these generators are usually pretty lousy, because they are linear congruential generators, sharing the correlation characteristics of RANDU. They are acceptable for program development and debugging, but when the time comes for production runs, you should replace the built-in PRNG with something better.

For serial pseudorandom number generation, the GNU Scientific Library (GSL) provides a large suite of PRNGs, including the Mersenne Twister. The GSL is open source and freely available online.

Generating pseudorandom sequences in a parallel application is a more difficult task. You want all the processes to generate different sequences; otherwise, you've gained no information because you duplicated the same Monte Carlo integration across all processes. The standard parallel PRNG is called SPRNG. The advantage of SPRNG over just generating sequences with different seed values on different processors is that SPRNG can generate multiple independent sequences, more than one per processor, with only a minimum of communication as each new stream of numbers is initialized.

Pseudorandom number generation is an important topic of study not only for those who use Monte Carlo simulations: it's also an important component of cryptographic applications. But that is a topic for its own post...

Sunday, March 15, 2009

Adventures in Computing Pi

My Pi Day cake illustrates a method that you could use to compute π. If the circular layer has radius R, then its area is πR2. And since the circle has radius R, then the side of the square is of length 2R, for an area of (2R)2 = 4 R2. Taking the ratio of these areas, we obtain
πR2/(4 R2) = πR2/(4 R2)= π/4.

So if we could figure out a way to measure the areas of the circle and square accurately, we could approximate π.

One way to find the area of a shape is known as Monte Carlo integration. The idea behind Monte Carlo methods is that if you threw darts blindly, the percent of time that you hit inside the shape you're trying to find the area of would be proportional to the area of the shape. In other words, if I had a "blob" shape inside a square, and I threw a bunch of darts "randomly"* at the square, then the relative area of the blob to the square would be the ratio of the number of darts that landed inside the blob to the total number of darts thrown. The more darts we throw, the better accuracy we get.

If you look at the cake, it is decorated with sprinkles.


Ideally, we could count the number of sprinkles on the circular layer and compare that to the total number of sprinkles, and we should get π/4. In reality, due to the imperfections of the cake (e.g., the rounded edges of the square layer, the imperfect shape of the circular layer, the challenge of distributing the sprinkles evenly yet pseudorandomly) the ratio is probably off.

But even if it were a perfect cake with perfectly distributed sprinkles, we would not have a particularly accurate value for π. This is because at most, there are a couple hundred sprinkles on the cake. The error in our calculation of π is proportional to one over the square root of N, where N is the number of sprinkles. So, if we have 100 sprinkles, this means our calculation is right to within ±1/10 of π, or ~0.3. For each additional digit of accuracy, we'll need to increase the number of sprinkles by a factor of 100. So, if we wanted π to three decimal digits of accuracy, we'd need to have on the order of a million sprinkles.

As you can tell, this is not the most efficient way of computing π. In fact, if you needed an accurate value of π to many decimal places, this would definitely not be the way to go. Instead, allow me to suggest the following methods:
  1. Look it up on the internet. Even bigger nerds than me have computed and posted π to many decimal places.
  2. Most computer languages have a constant PI that is accurate to at least 15 decimal places. Generally that's all you need.
  3. You can use a numerical quadrature method to find the integral of a function on an interval which is known to equal π (e.g., the integral of sqrt(1-x2) from 0 to 1 = π/4). You could use a quadrature rule such as Simpson's rule, a higher-order Runge-Kutta method, or a Gaussian quadrature rule, which, in one dimension, have much faster convergence than Monte Carlo integration. (Monte Carlo does not become competitive until we're doing three or higher dimensional integration.)
  4. Finally, there are many formulae that can be used, e.g., the BBP Formula.

* While there's actually no way to throw darts randomly, you can distribute them pseudorandomly. But this is a topic for another post.

Saturday, March 14, 2009

Happy Pi Day (and a Cake)!

Happy Pi Day!

In honor of the occasion, I decided to bake a cake. (I'm not a pie baker so it's gonna be a cake.) It has to be π-themed, of course. So I decided to make a cake that represents a method of calculating π.

Imagine a square with a circle inside it:


Let's take the ratio of the area of the circle and the square. If the radius of the circle is R, then the area of the circle is πR2. The length of the side of the square is 2R, so the area of the square is (2R)2 = 4 R2. So the ratio is
πR2/(4 R2) = πR2/(4 R2) = π/4.

I chose my old standard, the cocoa devil's food cake from The Joy of Cooking; here are the ingredients:



And here are the pans in which I will bake the layers:

You can see they are nearly the same size:

I'll spare you the details of making the cake except to mention that since I'm using buttermilk powder I added the powder in with the dry ingredients, and put plain water in the wet ingredients:


Here are the finished layers:
Unfortunately the round layer is too large
so I have to trim it a bit:
Here I start frosting the square layer
and here it is after frosting
Then I added the round layer
and sealed in the crumbs where I trimmed it, with a thin layer of frosting,
before frosting over with a thicker coat
This is what it looks like with the frosting, before I decorate it further:
At the recommendation of avid reader and real-life friend Rico, I decorated the cake with sprinkles;* here's an overhead view
and a view from a more photogenic angle:
I made some frosting sandwiches with the leftover frosting and circumference
which was enjoyed by my two boys.


* You'll see why in a later post!

Wednesday, March 11, 2009

Change

In the BBC mini-series version of George Eliot's novel Middlemarch,* Mr. Brooke, waxing eloquent in a political speech about change, declares that "since it's bound to happen anyhow, I'm all for it!"

As trite as his statement is, Mr. Brooke is right about change. People change, times change, attitudes change, and there's not much that we can do about it. When faced with big changes that are out of our hands, we can go one of two ways: stubbornly hold on to the way things were despite all evidence to the contrary, or adjust to the changes and look for new opportunities that result from this change.

For example, the evidence for anthropogenic climate change is quite clear. We must change our carbon-emitting ways, and fast. But for decades, the big oil companies, the United States government, and others with a big stake in the status quo have denied this and fought carbon emissions restrictions, alternative energy research, and energy efficiency regulations every step of the way. If they had instead realized that the change was something that they could take advantage of to broaden their product portfolio, develop new technologies, and create jobs, things would be a lot different today. And in fact, slowly we see that the oil companies are diversifying into alternative energy, as they are beginning to see the writing on the wall.

The people in our lives change, too, and I think it's really important to see them as ever-evolving rather than static beings. For example, it would be ridiculous to hold against me the fact that some thirty years ago, I regularly peed in my pants. Why then, is it so easy for people to hold grudges against junior high classmates, or treat their adult children as if they are still petulant brats?

It's vitally important to allow people the breathing room to change -- to be a different person than they were ten years, ten months, or even ten hours ago. For example, a person near and dear to me was once a very rigid perfectionist. Sometimes, her perfectionism, and the silent judgments she was passing over you for being so imperfect, made it hard to be around her. But if you met her now, you'd hardly even know she used to be that way.

I used to tease this person about her perfectionism, in an effort to get her to lighten up. But you know, she has moved on from perfectionism, and I no longer tease her about perfectionism, or even bring it up with her. She's stopped being so judgmental, and, taking a page from her new book, so have I when it comes to her. But doing so required noticing and respecting her changes. It required leaving behind my old, well-worn, behavioral ruts and my automatic reactions. It required thinking of new opportunities to interact with her, and adjusting my behaviors accordingly. And it was one of the best things I ever did -- I count this person as one of my dearest allies in this world, and I never would have found that kind of relationship with her had I continued to relate to her in the same static way.

I've heard it said that the only constant in life is change. Since it's bound to happen anyhow, you may as well make the best of it.


* This line does not actually appear in the novel, but it does succinctly express the character's attitude about change (he is the worst, most regressive landlord in the county).

Tuesday, March 10, 2009

Doing Our Part to Keep the Economy Strong (Part 2)

New glasses!

My old ones (see below) date from around the turn of the millennium:
So it was time for an update.



Here's a picture of my entire face with the new glasses. I think they make me look brainy:

Monday, March 09, 2009

Doing Our Part to Keep the Economy Strong (Part 1)

A new-to-us vehicle:




In case you can't read that, it's a Toyota Highlander Hybrid (2006 model, with all the bells and whistles). It's some sort of gold or copper color that doesn't photograph very well. We bought it a week ago and it seems like a really good vehicle so far. (Priscilla the blue Chevy Impala is going back to the dealer after her lease is up next month. They wanted way too much for us to justify keeping her.)

Sunday, March 08, 2009

Running Update

So, I am still running. I had to take a break after my ankle-spraining stupidity, but I started running again on Monday after a nearly two-week hiatus. Can I just say that it was really hard to do when I went back to it? It wasn't as hard as the first day I ran, when I thought that I was never ever going to breathe normally again, but it was challenging for sure, even though I was going a shorter distance than I had gone with less effort before I stopped.

I wore my figure-eight brace when I ran this week, because the ankle still twinges a bit. I think it was a good idea to wear it because it kept me from doing anything stupid.

Thanks to my clumsiness-induced break I don't think I'll be able to get up to the 5K distance in time for a race at the end of this month (which was my original goal), but that's okay. There are other races.

Friday, March 06, 2009

Work-O-Rama

Sometimes, there gets to be a pile-up of work to do.  These past few weeks have been that way for me at work.  

In addition to all my other work, my boss gave me an additional responsibility.  I am now charged with maintaining the software infrastructure on our supercomputers.  I  have to make sure that the software is up to date and installed correctly.  I don't have to install it all myself; and in fact, my philosophy is that if someone installed a piece of software last time, that person is responsible for installing it this time.  But of course that involves nagging motivating people to do the work that they're being paid to do.

I'm also in charge of the decisions about what new software to install.  When a user comes to us with a request, I give them our decision (which is made by the consensus of a committee, but I'm the face of the committee).  So far this has been okay except for one user who refused to take no for an answer.  But I think I may have convinced him that I'm not going to budge, because I haven't heard anything from him lately.

Then, there are lots of other things going on, mostly just the usual work, but some other fun things too.  Last week a colleague and I gave a workshop about high-performance computing to some people in a different division who do a lot of computing but haven't made the leap to parallel computing yet.  The size of the problems they work on is limited by the computing capacity of desktops and workstations.  So we tried to present supercomputing in an accessible way to them, and I think it was a success.  They came out of the workshop really interested in parallel computing and the things they could do with it, and resolved to engage in some further dialogue with us.

I felt really good about that.  The thing I love the most about my job is when I feel like I have enabled people to solve really hard science problems that they couldn't have solved on their own.  I think the people in this group really have the potential to become big-time HPC users in the future.

Tuesday, March 03, 2009

Interview Q&A

EcoGeoFemme sent me six interview questions, which I answer in this post. If you'd like to receive interview questions from me, please leave a comment. The first five commenters will get questions from yours truly.

  1. How do you like living in Tennessee? How does it compare to Illinois?
I like Tennessee overall. It is quite different from Illinois in a number of ways. First of all, the states have very different government types. Tennessee has a philosophy of low taxes and low services, while Illinois has higher taxes and more services. That's something I really miss about Illinois, actually. I'm not crazy about paying taxes, but you got so much for your money. I paid close to $3000 a year in property taxes on my crappy starter home in Illinois; I pay half that for a much bigger house here. That's a lot of money to pay in property taxes, especially on a graduate student's stipend, but you get good libraries, parks, schools, colleges, and mass transit for that money. Urbana's library was consistently ranked as one of the top libraries in the country. On the other hand, the first time I went to the library here in Tennessee, I cried because it was so pitiful. In Illinois, I took karate through the park district for $25/month. Here, the park districts don't even offer classes. So I really miss all the fantastic services that my property taxes paid for back in Illinois.

On the other hand, Tennessee really has a lot more natural beauty to it than Illinois. There is really nothing more beautiful than an early morning fog breaking over the green hills, or a spring green landscape dotted with the bright pink blooms of redbuds. Nothing in Illinois can compare.

As for the people, you can find like-minded folks wherever you go, although they are seemingly more scarce here than they were in the People's Republic of Urbana. (I mean, compare election results and you will understand that I vote more like an Illinoisan than a Tennesseean.) But our neighbors here are very nice, and there are plenty of wonderful people at my workplace as well. And salespeople and others you interact with here are generally more friendly than comparable people in Illinois, because Southern culture just tends to be friendlier than Midwestern culture.

  1. A while back you blogged about buying a bunch of new clothes. Do you still enjoy your wardrobe as much as when you first got it? Have you added to it?
I am still enjoying my new wardrobe. For those of you who may not know, I got a whole bunch of clothes for work (mostly business casual) in tall sizes about a year ago. I am now sold on tall sizes. Until I bought tall blouses, I never realized how poorly my clothes actually fit. I've added a few new tops every couple of months, usually a couple of items at a time. I usually try to get things on sale, and with free shipping too if I can.

When I put on a blouse or sweater that's not a tall size, I feel really uncomfortable because if I lean over too much my bare midriff shows. I'm just so used to that not happening anymore.

  1. Do you feel like the timing of having Vinny was optimal? Would your answer change if Jeff worked outside the home?
I am a somewhat risk-adverse person. I did not want to have a child until I was sure that I would be able to support that child without the help of my extended family, the government, or anyone else. So it had to be after I was out of school. While I was a graduate student, Jeff was our primary breadwinner for most of that time, so if he stopped working to take care of our child, we would have been completely broke. I didn't think I could concentrate on both having a child and getting a Ph.D., and childcare would have eaten up his entire salary and probably most of mine too, so it had to wait until after that.

So I think the timing was right in the sense that I can afford to raise my child the way I want to now. But it probably would have been better if I'd waited until I was a staff member and not a postdoc, because as a staff member I would have actually gotten maternity leave rather than having to use up all my sick days and all my vacation days and then go without pay for a month, for a total of 8 weeks away because I couldn't afford any longer. Certainly if Jeff were working then the financial impact of my time away from work would not have been as drastic, and I might have been able to take longer. But having him at home made it easier for me to go back to work -- who would be a better choice to leave your child with than the child's other parent?

  1. I think you’ve mentioned that you are quite tall. What’s that like? Name the best thing and the worst thing about it.
I am in the 99th percentile of heights for women. I can't really say what it's like to be tall because I've always been tall (I was taller than my 5th grade teacher, for example) so I can't really compare it to short. The best thing about being tall is that it is really good in my male-dominated profession because I am at the same height as most of my colleagues (5'11" is about average for men). I don't get lost and they don't look down on me (literally -- figuratively, they very well could). The worst thing is probably the fact that I have to buy special clothes that usually cost $5 more per garment than the regular size. Maybe also sometimes it's hard to fit in places -- for example, in one car that we have, I can't sit up straight because the ceiling is too low, which makes travel pretty uncomfortable.

  1. Do people ask you to fix their home computers? Can you do it? Are you willing to do it?
When people hear I'm a computer scientist, their minds inevitably turn to their home computer problems. While I wouldn't mind helping people with their home computers, I'm actually pretty ignorant when it comes to that. I haven't used Windows in ages, and Windows machines are what most people have. When people ask me to fix their computers, I always defer to Jeff because he actually worked in the cable modem service area when we lived in Illinois, and knows a lot about computers as a result. I tell them I could make their computer solve systems of equations really well, but that's about all I know how to do.

  1. Have you taught or do you have plans to teach Vinny to cook anything other than pancakes?
The reason we cook so many pancakes is because he loves to use the whisk, and as an extra bonus he enjoys eating pancakes. They're pretty simple, and making them doesn't involve much that's off-limits to a two-year-old, at least until you start cooking them up. He also loves the mixer, so I had him help me make rolls at Thanksgiving, a cake for some occasion that I can't seem to remember, and banana bread a couple of times, including last weekend.

Ultimately, my goal is for him to become a competent cook so that when he moves out on his own someday, he'll be able to create delicious and nutritious meals for himself. But two-year-olds can't yet do a lot of the things he will need to learn, such as chopping vegetables or using the oven. Someday, he will learn. In the meantime, we'll just mix pancake batter together...