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

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.

Jun 242015

CAVES called this morning. They said Feebs was relatively commfortable throughout the night, but very lethargic and not eating. They also suggested that we may want to leave her there another day because she was going to be difficult for us to handle.

We decided to delay that decision until we had a chance to see for ourselves.

We went to visit around mid-morning, had a bit of *luv* time and attempted to take her for a short walk. It’s true that she didn’t want to move and was pretty much 115 pounds of dead weight… but she seemed to be a bit more motivated with us there, so we decided to bring her home.

She perked up a little when we pulled into the driveway, but getting her into the house was a struggle. My best guess is that it’s going to take a lot of work to get her to even try to support herself with that back leg.

She’s depressed and we are scared.

Jun 232015

We dropped Feebs at the vet’s office at 8:30 AM this morning. I have to tell you I was having serious doubts about whether we had made the right decision and it was really hard to walk out the door knowing she had no idea what was about to happen.

Diane called late morning to let me know that both Feebs and surgeon did great in every way. They decided they wanted to have her watched overnight, so they transported her to Caves emergency this afternoon.

We went to visit for a while and it broke my heart to see her in such a confused, helpless state.

I think it will be one long sleepless night of second-guessing myself.