Skills

Coding Styles and Methods

My formal education is as a computer scientist. I was lucky enough to get this education at one of the cusps of computer development.

My Mentor went through a computer science program just 4 years earlier. There were classes he took that were not even offered in my program. The change was in moving from a need to understand hardware to a place where understanding the hardware wasn’t important to computer science.

What this meant was that my Mentor could design a computer from the gate up, I still struggle with hardware design.

My education included understanding low level instructions, instruction timings, bit manipulation, data structures, semaphores, and a host of other low level concepts. It also included much higher concepts.

At the time, my program included a year-long class where we wrote a working compiler, a required class where we wrote an operating system, as well as all the languages of the day. We even had theory class, such as the class on proving a program correct.

In addition to the formal classes offered by the University, I participated in an intense 8-week course where I was taught how to apply the classroom theory to actual working systems. This was the “systems class”. It started at 0800, ran through to 1200 with no breaks. We had a lunch break from 1200 to 1300. Then classes continued from 1300 to 1700.

We had to turn in our assignment of the day at 0800 the next morning.

This is what a day was like on the third week.

Wake up on a table in the student workroom of the computer center. Collect our work, stumble next door to start our 0800 classes. At 1200 hoof it out of there 2 miles to the house, shower, change clothes, move it back to the computer center and get there before 1300.

Being more than 15 minutes late was failure.

Study and learn new topics from the instructors. At 1700, head out to get dinner. Get back to the computer center by 1830. Work on assignments and projects until the computer was shutdown for nightly maintenance at 0400.

Decide if an hour of travel time to sleep in a real bed was worth more than an extra hour of sleep. Claim a table and fall asleep.

Repeat the next day.

Structured Programming

It is hard for a modern programmer to understand what a huge breakthrough the concept of “if-then-else-end if” was. It was the first of our structured code.

Before we had that type of language structure, we used “if condition goto”. Which was even more confusing when you used the FORTRAN IV construct of “IF value goto1, goto2, goto3” where the goto used was based on if the value was negative, zero, or positive. And yes, there was way too much code that used that instruction.

I helped my father with his MBA by being the computer dude to help him with the software he was using. It was written in FORTRAN IV or III. It wasn’t uncommon to be reading a section of code, have a GOTO that took you somewhere else in the code, which then had another goto back to the place where we just were.

In some cases, the code would conditionally jump to that “patch” which would then jump back into the other routine. It was a mess.


if condition then
do something
else if condition then
do something else
else
do something entirely different.
endif

Structured programming has at its base the concept of block correctness. Every block must be well-defined, do one job, have a set of well-defined inputs and outputs.

If this is satisfied, then you can verify the correctness of that block. You can test the set of acceptable and unacceptable inputs and verify that you get the correct outputs. If this test succeeds, then you can mark the block as ‘good’.

You can combine blocks in sequence. If you are connecting blocks, then the preceding blocks must contain all the outputs that will be used by the following blocks.

You can use conditional structures to create a block that is composed of verified working blocks.

Building from Blocks

One of the things about using blocks, is that you can build iteratively.

To give an example, I am working on a website. The front page has a carousel of rotating “hero” images.

From this, I knew I needed to be able to upload an image. The carousel has a fixed aspect ratio, this meant that I needed to have images in this aspect ratio. I also know that the user will want to decide what part of the uploaded image they wanted to use for the hero image.

In simpler terms, this means that I needed the ability to apply simple cropping to an uploaded image.

There is a black box in my head. It has defined the “cropper” block to take as input an image, the current cropping, and the current canvas to draw on. That block will interact with the user. When the user finishes, the block will output (x, y, width, height) in image pixel coordinates.

There is a different block box that takes two HTML elements and uses them to generate the required inputs to the crop block.

Another block takes the output from the crop block and turns it into a post to the server, to update those values.

Here is the thing, I’m using an obsolete cropping package because it is “simpler” while I’m extending my TypeScript and JavaScript knowledge. But I will be able to replace it with a very modern version and none of the other code will break, as long as the inputs and outputs do not change.

Currently, when you save your changes, the code submits the modifications as form data, which causes the page to reload.

Piece Wise Progression

What this means to me is that I’m constantly testing small changes. I will write a block of code, compile, deploy to the test server, test the results, edit some more.

Saturday was a lazy day. I only performed this cycle 50 or so times.

Every time I get a block working better, I make a git commit.

Friday, I had a breakthrough. I managed to make drag and drop work to select a file for uploading. Created a thumbnail of it. This was all via simple HTML and TypeScript.

Progress was fairly slow on this, learning curve, but what I found interesting is that I would get to a point where I had a working image selection, and only then realize that I had not connected the save button to anything.

Once that was working, the edit process turned out to be more difficult than I expected. It was all working from before, but I needed to hook into the code from a different place. But because that edit process had well-defined inputs, it was merely a matter of creating the correct inputs and it all “just worked”.

Of course, once I click that save button, I found out that I wasn’t actually uploading the image. Which was another thing to fix.

That worked, and it turns out that the server side needed some changes.

But everything was working because the process was all about blocks. When a block didn’t do what I wanted, it was a simple process of checking the inputs for correctness, then checking the output for correctness. If input was good and output was bad, it was a logic error. Track it down and everything gets fixed.

Working On The Railroad

When we code, it is not uncommon to find that there is some exception which can’t be processed by “normal means”.

For example, you are expecting an integer, representing the width of something. You get a string instead.

You could go down a new path, or you can convert the string into an integer. I.e. “768” becomes, simply, 768. That’s simple enough.

But what happens if instead of 768 you get “100%”? The answer could be to go down a separate logic path to deal with width, height, x, and y as percentages.

The railroad method says that you treat the code as a railroad line.

There is the mainline, it is a single track running between two cities. If you have a fast train on the tracks, and it is followed by a slow train, that fast train will get held up behind the slow train.

The answer to this is sidings. Much like the passing lanes on a two lane road, a siding is used to shunt one train out of the way while another train passes.

When the fast training is getting near, the slower train is shunted onto a siding. It waits there until the fast train has passed, then continues down the siding and back onto the mainline.

You can write code this way. When there is a problem with the input, you are being shunted onto that siding. You can decide there is no way to continue and abort, throw an error, you can do something else to get yourself back on the mainline.

Using the “100%” example, the siding means that we will do whatever code is required to convert the 100% into an integer that meats the requirements. This could be as simple as looking up the size of the parent and using that size.

The 100% could mean that we want this size to be a match for the other size. I.e., if the natural size of the image is 640×480, 100% width could mean 640. It could also mean that if we scale the height to 75% of natural height, we want to keep the width as 100% of that natural height.

These logical choices are done, and that conversion takes place on the siding. After the conversion is properly completed, the code can join the mainline again and nothing on the mainline needs to change.

Prepping – Making Do

There’s a mindset, these days, that everything is disposable. If something breaks, just get another one. Toss the old one in land fill and ignore it. This is not a sustainable practice.

Use it up, wear it out, make it do, or do without.

Why did we become the strongest country in the world? We made do. We took everyone else’s outcasts, people who wanted to work and were motivated to become citizens, and we said “let’s do this.” Those people, coming into America, were coming here to become AMERICANS. They didn’t come to be African Americans or Cuban Americans or Chinese Americans or Polish Americans. They came here to be Americans, plain and simple. They came here because America provided (and still provides) a place for hard work and sacrifice to pay off in the creation of strong family and safe home.

Use It Up

If you buy something, use it up. It seems simple when you say it that way, but I have to ask you, how many times have you allowed that cabbage or bit of leftover stew in the back of the fridge until it turned into something approaching sentience? Too often, I’d wager. I’m bad at it myself, frankly. This is a basic thing that Grandma would have wanted you to know, though. If you’re in doubt, ask yourself: would Grandma be disappointed in me for doing this (or not doing it, as the case may be)?

Learn to turn little bits of leftover vegetables into something new. Learn how to make stews and soups. Learn how to dehydrate and can. Learn how to compost, too. If you have animals like chickens or goats or pigs, feed things to them rather than putting them in the trash. Make certain that every bit of food you purchase is actually eaten or preserved in some way.

This is how we end up with scrap quilts, by the way. When you buy (or thrift) fabric for clothing (or sheets or towels, or whatever), you will almost always be left with a handful of scraps. Sometimes they may be tiny, because you’ve patterned extremely well, and you can congratulate yourself. Still, stash away those scraps. They can be used to patch up clothing or sheets, or to fill holes in jeans. When you have enough scraps of whatever size, you cut them into a lovely pattern of squares or hexes or triangles, and now you have a quilt. Our grandmothers turned their leftover bits and pieces into huge sheets of stitched love that are now passed down from generation to generation. You, too, can do that.

Read More

The Weekly Feast – A Sallet for Fish Daies

Each summer, I spend an inordinate amount of time dressed up as a medieval kitchen drudge, cooking feast foods over an open fire in a cow field. Beside me, knights and dames fight with sword, pole arm, axe, and shield to display their prowess to huge crowds. I’m not much noticed during the fights, but before and after I always have a bevy of fair patrons coming by to ask questions and see what I’m up to. They’re always amazed to see the foods I produce, from pies to salads to stews and soups.

Last summer, it was beastly hot, and I didn’t want to do much cooking at one particular event. The heat was too oppressive to think of spending hours kneeling by the flames, tending to whatever morsel I felt like making. Instead, I retreated to the shade of the kitchen tent, and put together a cold meal for our fair knights and gentle ladies. This dish is deceptively simple, but incredibly tasty and pretty to boot.

Based on A Sallet for Fish Daies, aka a cold shrimp salad:

Ingredients:

  • 1 lb carrots, minced or shredded
  • 2 cups small shrimp, cleaned, cooked, & cooled
  • 1/2 cup finely minced red onion or green onion
  • 1 cup white wine vinegar
  • 1 cup olive oil
  • salt to taste

Mince your carrots with a knife or food processor, or do what I did and cheat: purchase the finely shredded carrots in a bag. In a bowl, combine the oil, vinegar, and salt, and whisk until thoroughly mixed. Drizzle the carrots with just enough of the dressing to lightly coat them, and then use a mold to shape the carrots. This could be a circle biscuit cutter, a fancy and large cookie cutter, or whatever you have on hand.

If you want a heavier onion flavor, use the red onion. Otherwise, use the green onion (whites and greens together). Mix together the onion and shrimp, then toss with just enough of the dressing to lightly coat them, and arrange them gently on top of the carrots. Serve chilled.

Notes:

A Tudor Rose.

Traditionally, this was made in the shape of a fleur de lys using a gelatin or pudding mold, but I skipped that entirely and just tossed everything together. The first time I made it, I used red onion, and the second time I used green onion. I liked both, but my taste testers (the various knights and dames) preferred the green onion one. I found it definitely looked more “fancy”, for what it’s worth. I also sprinkled some minced parsley over the top of the sallet, and garnished it with a carrot coin carved to look like a Tudor rose and a few sprigs of parsley. It was well received, and I could have made a lot more of it and it would have disappeared.

As we were outdoors (in the aforementioned cow field) with no modern cooling equipment, I made the salad in a metal bowl, and set that into a wooden bowl filled with ice. This kept it lovely and chill for most of the day. It was cool, refreshing, tasty, and the perfect foil for the sliced sausage, cheese, and bread that I served it with.

The Weekly Feast – Chicken Shawarma

I have been a fan of shawarma since I tried it back after the first Avengers movie. I wanted to see what it was like because I knew the scene of them all eating shawarma at the end of the movie was actually them eating, and it sparked my interest. I totally fell in love. The flavors are amazing, and it’s very easy to make dairy free. This is a fairly quick dinner if you set the meat to marinate the evening before. It comes together fast, and hits the table with a minimum of mess and fuss.

Ingredients:

  • zest and juice of 1 lemon
  • 1 tbsp tomato paste
  • 1 tsp ground coriander
  • 1 tsp ground cumin
  • 1 tsp smoked paprika
  • 1/2 tsp freshly ground black pepper
  • 1/2 tsp ground turmeric
  • 1/4 tsp cayenne pepper
  • 1/4 tsp ground cinnamon
  • 2 tbsp plus 1/2 cup full-fat Greek yogurt, divided
  • 5 tbsp extra-virgin olive oil, divided
  • kosher salt
  • 2 lbs boneless, skinless chicken thighs, sliced into 1/2″ strips
  • 2 garlic cloves, grated or finely chopped
  • 2 tbsp tahini
  • 2 tbsp plus 1/4 cup chopped fresh parsley, divided
  • 1 cup cucumber, finely chopped
  • 1 cup cherry tomatoes, quartered or halved
  • 1 medium red onion, sliced into 1/4″ to 1/2″ wedges
  • toasted pita, for serving

In a large bowl, mix together the lemon zest, tomato paste, coriander, cumin, paprika, black pepper, turmeric, cayenne, cinnamon, 2 tbsp yogurt, 2 tbsp oil, and 2 tsp salt. Alternatively, you can use a pre-made shawarma mix, which is what I did, though I still added the tomato paste in. I get mine from Auntie Arwen. Add chicken and toss to coat. Let marinate 30 minutes or overnight.

When you’re ready to make your meal, use a small bowl to whisk garlic, tahini, lemon juice, 2 tbsp oil, and the remaining ½ cup yogurt together. Stir in 2 tbsp parsley. Refrigerate at least 20 minutes or until you’re ready to use it.

In a medium bowl, toss together the cucumbers, tomatoes, a heavy pinch of salt, and the remaining parsley. Refrigerate until ready to use.

Arrange a rack in lower third of your oven; preheat to 425°F. In a small bowl, toss onions, ½ tsp salt, and the remaining 1 tbsp oil until onions are coated. Transfer onion mixture to a large baking sheet. Arrange marinated chicken around and over the onion wedges in a single layer. You’re going to need to use your hands, and it’s messy, but it’s worth it. If there’s any marinade left in the bottom of your bowl, drizzle it over the chicken on the pan.

Roast the chicken until cooked through and some lightly charred bits form. If you want to be sure it’s ready, an instant-read thermometer should registers 165°F, and it will take about 25 minutes to cook. During the last ten minutes of cook time, add a pizza pan or baking pan with pitas on it, to toast. You can put them in dry, or you can brush them lightly with olive oil. Take the pitas out before they get too crispy; you want them to be able to fold taco-style around your other ingredients.

To serve this, put out the salad, tahini yogurt sauce, and the meat in separate containers. Give everyone a pita or two, and then layer the ingredients onto the pita. Fold like a taco around your ingredients, and eat. Alternatively, you can halve your pitas and stuff the meat and veg inside the pockets.

How Many Mallets Do I Need?

These things round between $40 and $90. They weigh about a pound. This is in Rock Maple. I have one in some exotic wood I purchased years ago.

Yesterday I started my third. Why three?

Well, it is much more likely that I will have more than three.

This simple wood turning is a great way to turn small logs into wood chips. In doing so, I’m learning how to do wood turning.

I’ve watched a half dozen videos on how to use a skew to rapidly turn a rough piece round. Most of what I’ve accomplished is catches and ouches.

A catch is when the chisel catches in the wood and the chisel has a great deal of force applied, rapidly. If you are holding the chisel correctly, with a light controlling grip, nothing bad happens. It is scary, loud, and your chisel will move.

If you have a death grip on the chisel, it is much worse. In that case, you can throw the wood out of the lathe, you can have a piece of wood ripped out of the work, and you can feel the jolt to the bottom of your soul.

The tool I would like to learn is the skew chisel. This is a straight chisel, no curve, 1/2″ to 1.5″ wide and about 1/4″ thick. It is sharpened on both sides to an edge.

I’ve watched a few videos on how to do this right. And I’ve been failing.

Yesterday I made some real progress. The first thing I learned is that the speed at which you advance the chisel is dependent on the surface speed of the work.

My lathe is a light weight, only a hundred or hundred fifty pounds. If the work is out of balance, it will vibrate the entire lathe. You fix this by slowing the lathe down.

The slower it turns, the lower the surface speed. This means that when doing a pealing cut, you have to slowly work inward because you have an interrupted cut. If you advance too quickly, when the high spot comes around at speed, you will be cutting too deeply, which is a type of catch.

It just takes time to get most of the high spots worked down enough that you can turn up the speed. I’m still running it to slowly.

So I’m slowly turning this rough-cut log into something of value to me, and learning skills as well. I’m doing ok with the peeling cut — now. I’m also doing better on the shearing cut.

The thing about the shearing cut is that it leaves a nearly finished surface. It only takes a very light touch up with the sand paper to take it to a finished product.

Now to take this skill to the treadle lathe at The Fort.

The Weekly Feast – Cheshire Pie from 1747

I went to the Fort last weekend and I made an amazing pie. Cheshire Pie is one of the recipes shared by Hannah Glasse in her cookbook The Art of Cookery Made Plain and Easy. The original recipe:

 

As you can see, it’s fairly sparse with its directions, which is a common theme among recipes prior to the early 1900s. One of the things I do is “redact” or recreate recipes from earlier times. I do this using my own skills as a cook, and it pleases me to no end when I find a great combination. This is one of those times, though I  can’t take the credit. I went to the class to learn how to make a good pie crust (and succeeded: that’s my actual pie in the header image), and learned the recipe along the way.

For the pastry, I don’t have an exact recipe. I was taught to measure by feel, because your crust turns out much nicer. As this was my first successful crust, I have to say I agree it works. 😉 Basically, you can either purchase a pie shell (you’ll need a top and bottom), or you can use your own recipe. Or you can try this one, which I’ll describe as best I can.

First, take about 3 cups of good flour. We used a mix of all purpose, white, and bread flour (and no, I didn’t get ratios, so I’ll have to try it on my own), and put it into a large bowl. A pinch of baking powder was added in, and then we added “a bit” of Crisco vegetable shortening (you can also use butter or lard, but I’ve never had success with either and had GREAT success with Crisco, so I’m sticking to it), about a cup or so. Just plop it into the flour. Then, slowly use your fingers to rub the flour and fat together. You don’t want to handle the fat too much or it will melt, so you kind of scoop up a handful of shortening and flour and then rub gently but briskly between your thumb and across all your other fingers. It helps if you keep your elbows tight to your body while doing this. You continue doing this until all the fat is mixed in evenly to the flour. It will start to make little “peas” or look like coarse cornmeal. Add a bit more Crisco and keep doing it until the bits of dough are about pea sized. It took me about 20 minutes to do this by hand. At home, I think I’ll use my pastry cutter to do the early part, and just switch to hand mixing at the very end, which should cut the time down quite a bit. Two knives may also work, but I’d say that handling it at the end is important.

Read More

Would It Hurt To Document The Device You Sent Me?

I am actually good at this computer stuff. It is what I do. So I get frustrated when I order hardware and it doesn’t work.

A month ago, I ordered a Mini-ITX board. It was cheap, and it wasn’t 17×17 cm, it was 17x19cm. Which didn’t fit in the case. The low profile CPU cooler/fan I ordered was too tall, so I needed to get a shorter unit. It just wasn’t worth the fight.

I ordered a new Mini-ITX board. This was supposed to be the right size. Not only was it the wrong size, it only had 3 SATA ports, not the 4 on the board I ordered.

That was taken care of with still another motherboard purchase. This time all was good. And amazingly, I didn’t have to wait 2 weeks for the board to get here from China.

Everything is installed, I install the PCI SFP+ NIC, it won’t power up. I don’t know if the card is bad but I replaced the card and that machine is now in production.

Switches are the next big issue. I gave up trying to find a cheap switch, I ordered a new switch, the same as the last I purchased. It should just work.

This switch is an 8 port SFP+ unit, similar to the one in the featured image. It is powered by a 12v DC wall wart.

What arrived was a plastic box with 8 RJ45 connectors. Similar switches can be found on Amazon for under $8. To make it pass the Amazon inspectors, they threw in a free USB-A to USB-C connector. That was returned and a refund was issued.

So I ordered another L3 switch. It arrived in short order. When I powered it up, the power light came on. Then the SYS light started blinking.

Read the manual. Green blinken SYS light means the unit is starting up. Figure that it might be that the unit isn’t fully configured. No problem, I connected it to the network.

Still the blinken light. I scan the network where the device is supposed to be. No response.

Well, the instructions don’t mention the “console” port on the unit (missing from the image because they used the wrong image on the Amazon listing). I ordered a generic console cable to watch the boot sequence, maybe I can spot what went wrong.

What went wrong? Nothing.

The unit is working exactly as it should. I’ve configured it, ready to go into production. The documentation is wrong about what the green blinken light means.

Frustration with hardware, yet this time it is working correctly.

Once this device is in place, every machine, but one, will have at least on 10Gbit fiber link to the main back plain network. Every machine will have a connection to the management network.

As a side effect, it means that each data closet will have at least two fibers into the closet for redundant backup links.

Oh, this also means I can consider using bonded links to get 20G bit transfer rates. That will be cool.

Prepping – Surviving in the Cold

I had the joy of staying at the Fort last weekend. Originally, the temperatures were supposed to be in the high 40s at night, and the 60s during the day. Perfect Fort weather! That didn’t turn out to be correct (go figure…). It was below freezing overnight Friday night into Saturday morning, and Saturday night into Sunday morning it was 33*F. Saturday was above freezing but very wet and raw. Sunday wasn’t bad, being in the mid 50s and overcast, but dry.

Staying at the Fort always gives me an appreciation for what our ancestors lived through. In one weekend (with albeit “white man fires” going full blast), we went through an entire bin of wood. Some of that was for cooking, because we ran into our usually spring thaw challenges with warming up the fireplaces. Some of it was because my cabin-mates were cold at night. The first was a necessary issue, but the second just left me flabbergasted. Regardless, if we went through that much wood in a weekend, how much wood would the entire fort community have gone through in an average month? It’s no wonder that the entirety of NH was essentially deforested during that period!

Here’s the deal: the Fort is made of logs and flagstones and local stone and brick, in a rather haphazard way. In the 1700s, that fire would never have gone out. Ever. During the night it would have been banked, and during the day they’d have been cooking over it. It’s much easier to keep a fire going than to get one started, and that’s exactly what they would have done. When we leave the Fort in November, and it doesn’t get opened up again until March, it’s been sitting almost five months with no fire. Over that time, the damp and cold get into the stones in a way that would never have happened historically. It takes at least two days of heavy fire burning to bring the entire hearth and wood oven up to heat, so that cooking can be done. This was something our ancestors would never have had to concern themselves with.

No matter how you look at it, when we arrive, it’s going to be COLD at the Fort, and we’re going to have to work hard to change that.

This is what I do when I’m going on an overnight trip to the Fort (or anywhere, quite honestly):

  • check the temperature for the time I’ll be there at least a week in advance
  • keep checking the temperature to catch any trends up or down as the week progresses
  • check the projected temperatures for my trip the day I’m leaving, and make appropriate choices for sleeping and clothing
  • pack extra warm stuff, just in case

Read More

The Weekly Feast – The 80s Want Their Spinach Dip Back

For whatever reason, every party I ever went to in the 1980s included at least one version of this dip, served in a bread bowl. I’m not sure why we stopped making it, because it’s iconic comfort food, tasty and with a healthy kick to it from the spinach. Therefore, I shall share it with you, dear readers. Because it’s yummy. 

Ingredients:

  • 10 oz frozen chopped spinach (cooked, cooled and squeezed dry)
  • 16 oz sour cream
  • 1 cup mayonnaise
  • 1 package Knorr ® Vegetable recipe mix
  • 8 oz water chestnuts, drained and chopped (optional)
  • 3 green onions, chopped (optional)

Combine all ingredients in a bowl and mix. Chill the spinach dip for about 2 hours.

In a good size round of bread with a chewy crust (in other words, one that won’t fall apart being used as a bowl), cut a circle out of the top. Using a knife or your fingers, pull out bits of bread to make the round into a bowl. Add the chilled spinach dip to your bread bowl.

Serve this classic spinach dip with the bread that you pulled out of your bread bowl, and a stack of fresh vegetables as well. Make a double batch, because you will need to refill the bowl before the night is over.

Notes:

You can make this vegetarian or vegan! Replace the sour cream with 16 oz of cashew yogurt. Replace the mayo with Nayonaise or another vegan mayo. That’s all you need to do! Another alternative is to use a cashew cream cheese in place of the mayo, for a thicker dip. Be prepared to thin it out with a bit of oat milk if it’s too thick.

Prepping – Annuals and Perennials

There are two main types of plants in the world: annuals, which you plant from seed (or cutting or slips or whatever) each year, and perennials, which come back every year.

Some examples of annuals are cucumbers, lettuce, potatoes, peppers, and zucchini. Each year, you need to plant new plants. Each year, they complete their life cycle entirely in the span of one season. You get seeds (or slips or cuttings or whatever) from them to plant again next year.

Some examples of common perennials are asparagus, rhubarb, many kitchen herbs (sage, thyme, and chives in particular), horseradish, and strangely enough, tomatoes. With all but the tomatoes, you plant them once and then harvest each year after they’re established. Tomatoes are technically perennials, in that they can be kept from year to year if you’re in a warm enough climate. Up here in the north where I am, we treat them as annuals, but if you have a hot house or you live in a warm area, you can keep them alive and producing without having to replant each year.

Annuals are important. They’re here for a brief season, they grow, and we harvest them. The majority of vegetables we eat are annuals. You can pick up pre-sprouted annuals like cucumbers and peppers at your local feed store each spring. For those of us with a yen for gardening, going to Agway is a dangerous thing right now. Somehow, these plants always end up in my dang trunk… You can also pick up seeds, both for indoor seeding and for planting right outside in your garden beds.

Perennials, though, are even more important (in my opinion, of course). With perennials, you plant once, harvest for years. As I get older, I look for more and more perennials so that I have less work to do in the garden each summer! An asparagus bed will keep giving for 20 to 40 years, with nothing more than an occasional fertilizing and weeding. Rhubarb, too, doesn’t require a lot. You do have to “split” it up into bits every five to eight years, to keep it healthy and growing, but that’s not too arduous. Some of my herbs have been in my garden for more than a decade, and are coming along very well. I recently had to get medieval on my oregano, because it was escaping its enclosure and getting into the lawn. While that smells nice during mowing time, it’s a waste.

Read More