If you're looking for a description of the professional me, please head on over to my career bio. If you're interested in who I am outside of work, you've come to the right place. Kick back and relax, and let me tell you about myself...

I was born May 28, 1956 at Saint Luke's Hospital in Richmond, Virginia to Native American parents and I'm a member of the Upper Mattaponi Indian Tribe. My grandfather was a chief, my uncle was a chief, my father served as acting chief for several years and the honor is currently held by my cousin, Kenny. The older I get, the more I realize how important my heritage is and how much it has shaped my life and value system. Having two older brothers who struggled through reservation life during the 40's and 50's has taught me a great deal about cultural tolerance and the real value of opportunity.

Both of my parents are deceased and I miss them daily. When I bought my first car, my father wouldn't let me drive it until I learned how to change the oil and change a tire. My mother taught me how to sew and how to inflict self-induced guilt when I don't do my best:

If a task is once begun,
Never leave it 'til it's done.
Be the labor great or small,
Do it well or not at all.
-- Author unknown, but oft repeated by Mom...

I started taking piano lessons when I was 6 and graduated from Shenandoah Conservatory in 1979. I still play piano and guitar when it suits me. My father always said "I can't play a piano, but I play a mean radio."

At the age of 40, I married my one and only husband in 1997. The best thing about our relationship is that I married my best friend and we're still best friends. The scariest thing is that I'm completely convinced we share a brain. More than anything else we do together, we laugh. It's nice to know you can still play when you've reached the era of black-balloon birthdays. I've never had a face lift, I don't dye my hair and I'm perfectly happy with the way I look.

The rest of the story remains to be written, because...

Life is what happens while you're busy making other plans.
-- John Lennon

Jan 042016

Sure, you can use the little Special Characters feature of the Edit menu. Or you can launch Google translate and use the pop-up keyboard.

But it’s a lot faster — and I think easier — if you just learn how to access these characters directly from the keyboard. Fortunately, the most commonly used characters — like à, é, ç and ô, etc. — are intuitive and easy to remember.

In short, holding down the option (alt) key will magically transform all of the other characters as indicated in the following table. For instance, if you want to type é, hold the option key and tap e, then tap e. To type á, hold the option key and tap e, then tap a.

 + Opt+ Shift+ Opt + Shift
`` + any character~`
e´ + any characterE´
iˆ + any characterIˆ
n˜ + any characterN˜
Dec 192015

This is my favorite 2×2 cast on for pretty much any gauge and type of yarn. The beauty of this cast on is that the comb is hanging on a temporary row of stitches that will be removed after the piece is off the machine. This keeps the comb from pulling on your first real row of stitches.


This example ends with both selvages on the same bed which creates some special circumstances for the cast on.

  • Set the beds for half-pitch (needles alternating) and rack the front bed to the left to achieve the zig-zag needle configuration (1).
  • The right-most pair of needles on the front bed (2) will be shifted into zig-zag position.
  • But the right-most pair of needles on the back bed (3) will be orphaned.

tank-setup2png(click to enlarge)

To fix this issue for the duration of the cast on, transfer the edge needle from the back bed to an empty needle on the front bed. You’ll only need to do this when the edge needles are on the same bed.

tank-setup3png(click to enlarge)

Now we have a perfect setup for the zig-zag row (1). Note that if your selvages are on the front bed, you’ll rack to the right instead of the left.

To cast on:

  1. Position carriages on the left.
  2. Set the carriage to the lowest tension (smallest possible stitch size). On the Superba, set the bed spacing to 3.
  3. Knit the zig-zag row from left to right.
  4. Hang the cast on comb and weights, making sure there’s a tooth in each V.
  5. Move your feet out of the way (just in case), decouple the front carriage and move it to the left to drop all the stitches on the front bed.
  6. Move the front carriage back to the right and recouple the carriages.
  7. Knit a second zig-zag row.
  8. Set both carriages for circular and main tension. On the Superba, set the bed spacing as appropriate for your yarn. Knit 1 circular rows (1 carriage pass).
  9. Transfer the stitch on the right edge from the front bed to the back bed. Knit 2 more circular rows (2 carriage passes).
  10. Set the beds for full pitch (needles opposite), rack the front bed to the left for 2×2 rib and set both carriages to knit.

I like to knit my first circular row on the bed opposite the edge needles, but you’re free to do what works best for you. At the end of the circular rows, the carriage will be on the right.

When you take the piece off the machine, you’ll have a bunch of ugly loops on the edge:


There will be a big loop on the corner opposite the yarn tail. Grab that loop and pull the yarn tail all the way through to achieve this:


Dec 192015

I fell in love with this tank the moment I saw it:

DéBardeur Femme #427-T4-480 by Phildar Design Team

After a lot of speculation about how it’s done, I managed to get my hands on the original pattern, painstakingly translated it from French to English and managed to duplicate the slanted rib pattern on a knitting machine.

If you’re not scared off by lots of transfers, it’s pretty easy once you get a rhythm going. Here’s how…

The pattern must be knit over a multiple of 4 plus 2. If you’re going to try a swatch on a standard gauge machine, cast on for 2×2 rib over 54 needles (27L to 27R):

tank-setup1png(click to enlarge)

  • The two center needles (1) must be in work on the front bed.
  • The four edge needles (2,3) can be on either bed, but they must be on the same bed. In our 54 needle sample, they will be on the back bed.

You can use any cast on you like, but my personal preference is broken toe.

Knit 2-3 inches of 2×2 rib, ending with the carriage on the right.

The pattern will be a lot easier to understand if you look at it as 5 sections:

tank-sectionspng(click to enlarge)

  • The two static rib sections (1) at the sides (shown in orange) – This section consists of some number of 2×2 rib pairs with the innermost pair always on the back bed. If the edge pairs are on the front bed, there will be an even number of pairs in the side ribs. If the edge pairs are on the back bed, there will be an odd number of pairs in the side ribs. The width of this section never changes. The rest of these instructions will assume there are 5 pairs of side ribs on each side — 2 on the front bed and 3 on the back bed spanning needles 18 to 27.
  • The two slanting rib sections (2) between the stockinette center and the side ribs (shown in yellow) – This section will slant towards the sides and give the appearance of disappearing behind the side ribs.
  • The stockinette center (3) that forms the V (shown in green) – This section starts out on the ribber, but once we start the transfers, this section will grow wider by two stitches (one each side) every two rows. This section will always be flanked by one stitch in work on the front bed.

Now… just one more thing before we start. We’re going to give some nicknames to a few of our needles:

tank-patternpng(click to enlarge)

  1. This is the anchor. This needle represents the inner edge of the side rib section. Every two rows, we’ll be transferring an extra stitch to the anchor, but otherwise the stitches between the selvage up to and including the anchor will remain on their needles throughout.
  2. These two stitches are the orphans (you’ll see why in a moment). Every two rows, we’ll be transferring the orphans to the back bed. This is what forms the V-shaped stockinette section in the center.

The V-pattern is created by performing the same 4 (or 5) steps every two rows:

tank-transferspng(click to enlarge)

  • Starting at the left anchor (1), find the next stitch towards the center and transfer that stitch to the anchor. This leaves a 1 needle gap (2). Do the same for the right anchor. Note that because the slanting ribs are travelling towards the edge, the stitch next to the anchor may be on either bed.
  • Starting at the left gap (2) and working towards the left orphan (4), transfer each stitch (3) one needle towards the left edge on the same bed. Now you have a 1 needle gap (5) between the slanting rib section and the left orphan. Do the same for the stitches between the right anchor and orphan.
  • Transfer the left and right orphans (4) to their respective needles on the back bed.
  • Pick up the heel of the stitch immediately to the left of the old left orphan and create a new orphan in the left gap (5). Note how your left orphan has now moved 1 needle closer to the left edge. Repeat to create a new right orphan using the stitch immediately to the right of the old right orphan.
  • Optional: If there are more than two consecutive needles in work on the back bed at the anchor (1), you can do one of two things:
    • Leave it alone. It may look wrong, but it’ll turn out just fine. The one or two extra knit stitches will happily disappear behind the side ribs as you knit subsequent rows. This was the method I used in the sample shown below and you can clearly see a little wave at the anchor.
    • Transfer one stitch from the back bed to the front bed to maintain a purl ditch just inside the side ribs. This will produce a straighter edge at the anchor.

Now, it looks like this:

tank-transfer1png(click to enlarge)

  • The anchor (1) holds two stitches.
  • The slanting ribs (2) are shifted over by one needle.
  • We have a new orphan (3). From this point forward, the orphan will be a single purl stitch on either side of the stockinette section in the center.
  • The center stockinette (4) section has grown wider by two stitches.

Knit two rows and repeat the same steps until all that’s left on the front bed between the anchors are the two orphans (one on each side).

If you have more rows to knit before you reach the bind off at the armhole, you’ll continue doing transfers every two rows as follows:

  • Transfer the orphans to the anchors on each side.
  • Create new orphans by picking up the heels of the old orphans and hanging them in the gaps on the ribber.

Here’s a closeup of our complete swatch:


And here’s the chart:


  • Row 1 is repeated for the length of the rib.
  • Rows 2-33 create the V-pattern. The number of rows in the pattern will depend on the width of the piece.
    • The dark orange stitches are the decreases made by transferring the adjacent yellow stitch in the previous row to the back bed (two stitches on these needles).
    • The dark yellow stitches were transferred one needle right or left on the same bed.
    • The goldstitches are the increases made hanging the heel of the adjacent yellow stitch on the empty front bed needle.
    • The dark green stitches were transferred from the front bed to the back bed.
  • Rows 34-35 are repeated up to the armhole shaping.
Oct 182015

Again… sigh.

I’ve recently relocated some web sites and blogs I manage to EC2 so I’ve been watching my logs a little closer than usual. That’s how I detected a ginormous number of hits for wp-login.php from certain IP’s:

They’re not getting in because of some alternate security measures I’ve put in place, but it’s annoying to see 47K redirects over the course of about 2 1/2 hours… so I installed the mod_evasive module for Apache.

The module itself was reasonably easy to install and configure… but I had to think a little bit about how to take advantage of its ability to take some action when an IP is blocked. Sure, I could just add a rule to my .htaccess files, but that doesn’t prevent the traffic from hitting my sites. What I really wanted was a way to block them at the edge of my VPC. With the AWS command line interface, a bit of shell programming and mod_evasive’s DOSSystemCommand setting, I got exactly what I needed.

It should be pretty easy to follow what’s going on (read the comments)… I’ve reserved rules 1 through 999 for the hackers. AWS processes rules in order so I changed the ID for the default ALLOW rule from 100 to 1000 to make this work. The script won’t add a rule for an IP if one already exists.

At the same time I create the ACL, I create another temporary script that will revert the DOS after 3 days have passed. This lets me recycle the designated range of rule ID’s.

Once the script was known to be working, I modified the mod_evasive configuration to trigger the script:

It didn’t work out of the gate, though. The first issue was that I originally configured DOSLogDir as /var/log/httpd/modevasive, but didn’t create it. On my system, /var/log/httpd is owned and writable by root. My Apache modules are writing as apache. The following commands took care of the problem:

Note that if logging is failing, sending email notifications will fail as well. It seems that logging failures terminates the current operation. If you’re concerned about whether logging is working, try a grep for evasive in /var/log/messages. If you have a permissions issue, you’ll see messages like this one:

The second issue is that /bin/mail does not exist on my system. To resolve that, I created a symlink to /usr/sbin/sendmail:

If everything is working, you should see output in your system log:

With this fix, I see about 20-25 requests before the ACL kicks in and the hacker can no longer reach any port on my server.


Zdziarski’s Blog of Things
How To Stop An Apache DDOS Attack With mod_evasive

Jul 122015

Crusty Bread

I don’t believe in doing anything the hard way… and I’ve got this bread down to as simple as bread can be. You may have to invest in a few tools you don’t have, but it’s worth it.

Prep time: 10 minutes
Total time: About 3 hours 30 minutes

The Tools

You’ll need a bread machine, a rectangular banetton (proofing basket), a rectangular Sassafras covered stone baker and some parchment paper. Before you start wondering about whether it’s worth the expense… assuming you already own a bread machine (who doesn’t), here’s how it breaks down. A 25-pound bag of bread flour is about $9 at a super-store. That’s 29 loaves of bread at about 35 cents a loaf. You’re paying somewhere between $2 and $3 to buy bread like this at your supermarket — twice that if you’re buying it at an artisan bread shop. You’ll recover the cost of your banetton and baker before you even get through your first bag of flour.

The Dough


3 cups (360 gm) bread flour
2 tsp active dry yeast
3/4 tsp salt
2 tsp sugar
1 cup water
2 tbs olive oil


  1. Measure the flour, yeast, salt and sugar in a large bowl and mix well with a wire whisk.
  2. Measure the water and olive oil into the pan of your bread machine.
  3. Dump the flour mixture on top. Yes, I really am telling you to ignore the instructions that came with your bread machine.
  4. Set your machine for the basic dough setting and let it do all the work of mixing everything for you. This should take about 90-100 minutes to mix and do the first rise.
  5. While you’re waiting, line the banetton with parchment paper. It doesn’t have to be neat. Secure it with a big rubber band if you like.

The Second Rise

  1. Dump about 1/2 cup of flour on a cutting board and spread it around.
  2. Pour a dollop of olive oil into your palm and grease both hands like you’re applying lotion. If you want to make it even easier, don a pair of disposable plastic gloves. You can get a 3-pack of 500 gloves each at a super-store for about $8.
  3. Dump the dough onto the floured board.
  4. Shape the dough into a rough 9×12″ rectangle, pressing out the air bubbles as you go. Don’t futz with it too much. This should only take you 15-20 seconds.
  5. Fold it in thirds — lift one of the long edges up and lay it over the center, then do the same thing with the other edge. The dough rectangle should now be about 3″ wide.
  6. Transfer the dough to the banetton seam side down. Stretch or compress where you need to so you have a nice even layer of dough in the bottom of your basket.
  7. Cover with a cotton towel or dinner napkin and put it in a warm place to rise.
  8. Set a timer for 40 minutes.

The Baking

  1. When the timer goes off, place the stone baker  in a cold oven.
  2. Turn the oven temperature to 425℉.
  3. Set a timer for 20 minutes.
  4. When the timer goes off, remove the extremely hot baker from the oven with your trusty mitts — I know you have them — and take the top off.
  5. Grab the edges of the parchment paper in your banetton and pick up the dough, parchment paper and all… and lower it into the baker. It may look like it’s too big to fit, but do it anyway.
  6. Place the cover on the baker and return it to the oven and bake for 35 minutes.
  7. Immediately transfer bread to a board to cool.

The Clean Up

None. The banetton was lined with parchment paper so it should still be clean as a whistle. If you managed to get a little flour on it, brush it off and put it away. The same goes for the baker. Over time, it’s going to have brown spots where it came into contact with olive oil and other moist food items. Ignore it. It’s meant to look like that after it has been heavily loved.

If you’re absolutely adamant about cleaning your tools, rinse them with warm water and let them dry thoroughly before you use them again.

The Satisfaction

I dare you to not cut it the moment it comes out of the oven. Use butter if you like, but it doesn’t need it. If your household is like mine, don’t be surprised if it’s half gone before dinner hits the plate.