David Lane

About David Lane

Fire in the Neighbourhood

We had a bit of excitement in the neighbourhood yesterday. A small fire, which means the house is still standing but the family was displaced for a bit.

fire trucks

Hopefully things will be put back in order soon.

According to the city:

The City of Manassas Fire and Rescue Department responds to a structure fire, Manassas Virginia, January 16, 2021 15:49. The City of Manassas Fire and Rescue Department responded to a working structure fire in the 10100 block of Allwood Court (box 2135).

Battalion 581 arrived on the scene of a two story single family house with fire showing from the chimney with extension to the garage roof. Engine 501 advanced a hose line for extinguishment. Tower 501 and Rescue Engine 521 performed searches and roof ventilation. Battalion 581 had Allwood Command. FM584 responded to the scene. The origin was determined to be accidental and started above the chimney flue. Damage is estimated at $20,000. Five people were displaced. Manassas City units that responded included Rescue Engine 521, Engine 501, Tower 501, Battalion 581, Medic 521, Ambulance 521 and FM 584. Additional units from Prince William County Department of Fire Rescue and Manassas Park Fire Rescue also responded.

Can I Get The Recipe For That – Gingerbread Cookies

The Ingredients – cookies

  • 3/4 cup (6 oz/185 g) unsalted butter, at room temperature
  • 3/4 cup (6 oz/185 g) firmly packed light brown sugar
  • 1/4 cup (2 fl oz/60 ml) light (unsulfured) molasses
  • 2 egg yolks
  • 2-1/3 cup (12 oz/375 g) unbleached all-purpose (plain) flour
  • 2 teaspoons ground cinnamon
  • 2 teaspoons ground ginger
  • 1 teaspoon ground allspice
  • 1/2 teaspoon baking soda
  • 1/4 teaspoon ground cloves
  • 1/4 teaspoon salt

The Ingredients – white icing

  • 1 cup (4 oz/125 g) confectioner’s (icing) sugar
  • 1/4 teaspoon vanilla extract (essence)
  • 4-5 teaspoons milk

Directions – cookies

Note: This is a very heavy, thick dough. You will need a strong mixer. I use a Kitchen Aid, having killed more than my share of hand mixers on this recipe.

  1. In a bowl, using an electric mixer set on medium speed, beat together the butter, brown sugar, and molasses until fluffy, about three minutes.
  2. Beat in the egg yokes. In a sifter, combine the flour, cinnamon, ginger, allspice, baking soda, cloves, and salt. Sift the flour mixture directly onto the butter mixture. Reduce the mixer speed to low and beat until well combined.
  3. Gather the dough into a ball; it will be soft. Wrap in plastic wrap and refrigerate overnight.
  4. Position racks in the upper third of the oven and preheat to 375°F (190°C). Butter two large, heavy baking sheets.
  5. Remove one-third of the dough from the refrigerator. On a lightly floured work surface, roll it out to 1/4 inch (6 mm) thick.
  6. Using a figure-shaped cookie cutter, cut out your gingerbread people, trees, ornaments, etc. Carefully transfer them to the prepared baking sheet, placing them about an inch (2.5 cm) apart.
  7. Gather up the scraps into a ball, wrap in plastic and chill. Repeat rolling and cutting the cookies with the remaining dough, in two batches. Then reroll the scraps and cut more cookies.
  8. Bake until the cookies begin to turn golden brown on the edges, about ten minutes. Transfer to racks and let cool (if you don’t, the icing will run away when you try to ice them).
  9. Decorate the cookies with the white icing as desired.
  10. Store in an airtight container at room temperature for up to a week.

Makes about 20 cookies, depending on the shape and size of cutter

Directions – white icing

In a small bowl, combine the confectioner’s sugar and vanilla. Stir in enough of the milk to thin the icing to the desired consistency.

Makes about 1/2 cup.

We have lost the bubble…again

New guidance from President Donald Trump’s administration that declares teachers to be “critical infrastructure workers” could give the green light to exempting teachers from quarantine requirements after being exposed to COVID-19 and instead send them back into the classroom. Teachers could stay in classroom if exposed to COVID-19

I understand the idea of essential workers. More I understand the desire, or need for some parents to get the kids out of the house, but am I the only one who wonders about the priorities of this nation when they say, essentially, we don’t care if you are sick, the kids are going to recover and if you spread COVID around, well, that’s OK too.

And we wonder why no other county on the planet will let US citizens come and visit without a mandatory quarantine period. And Canada still has the northern border closed.

This Could Stop Now

It has been unusually warm in Northern Virginia. As you may know, most of the south (NoVA is considered to be in the south) is under a heat dome, and temperatures are warmer than usual. But we have passed the point of hot enough for you and progressed to enough already!

Let me explain.

The DC region has a standing record of 21 days in a row of above 90-degree temperatures. Forget the feels like (that is with the humidex 1 included. This is the raw bulb temperature. Because of two days below 90° (it only got up to 89° even though the humidex put us into the middle 90s) in the middle of the streak, we have not broken the consecutive day record – yet. But since June 25th, again except those two blustery cold days, every day has seen temperatures in the mid to upper 90s and little to no rain. Sure, we get a gully washer for ten minutes that causes more damage than penetration, but that is about all. And it is expected to continue until the end of this week. Almost six weeks of 90+ temperatures. And it is not August yet, which is when our hottest temperatures are experienced (and higher humidity). I am not sure my body can take much more of this. Much less my air conditioner.

Stay cool!

  1. The humidex is an index number used by Canadian meteorologists to describe how hot the weather feels to the average person, by combining the effect of heat and humidity. The term humidex was first coined in 1965. The humidex is a nominally dimensionless quantity based on the dew point. Wikipedia

AWS Template Creation by Script

During an AWS architecture class, we had to create and launch an AWS Stack. Within the stack, it was Infrastructure as Code, but the actual launch of the stack was done at the console. Once upon a time, I knew I had worked with stack creation as IaC. I dug back through some of my old examples and found the code (below) that I used to create the stack, along with some of the variables.

The Code

Line numbers are for reference. Note that this is a single bash shell block (hence the “\” at the end of each line starting in line 2.

1.  cfn_stack_name="${JOB_NAME}-${pipeline_instance_id}"
2.  cfn_stack_id=$(aws cloudformation create-stack \
3.     --disable-rollback \
4.     --region $region \
5.     --stack-name "$cfn_stack_name" \
6.     --template-body "file://${cfn_template_path}" \
7.     --parameters ParameterKey=amiID,ParameterValue=$baseami \
8.         ParameterKey=vpcID,ParameterValue=$vpc \
9.         ParameterKey=subnetID,ParameterValue=$subnet \
10.        ParameterKey=keypairName,ParameterValue=$jenkins_key_name \
11.    --tags Key=BuiltBy,Value="Jenkins_$(hostname)" \
12.    --tags Key=AWS_OP_ENV,Value="$aws_op_env" \
13.    --tags Key=Server,Value="$server_function" \
14.    --tags Key=System,Value="$system" \
15.    --query 'StackId' --output text)
16. max_waitime=600
17. wait_interval=5
.
.
.
18. # wait until the stack is created
19. echo "Waiting for CFN stack to be created..."
20. time monitor_stack --region "$region" --stack "$cfn_stack_name"
21. cfn_instance_id=$(aws cloudformation describe-stacks --region $region --stack-name="$cfn_stack_name" --query 'Stacks[0].Outputs[0].OutputValue' --output text)
22. echo "CGN stack created!"

The other thing to note is you need to have the AWS CLI installed in your build environment for this to work. In most cases, you will be building this inside AWS, so the CLI will be available to you.

The Explanation

In the code starting on line 1:

cfn_stack_name="${JOB_NAME}-${pipeline_instance_id}"

The JOB_NAME and pipeline_instance_id are generated by the Jenkins job. You can name it however you want, that was just what we used. We originally started with just date/time stamps.

Line 2 begins the actually stack creation:

cfn_stack_id=$(aws cloudformation create-stack

The cfn_stack_id is generated at the end of the code block: --query 'StackID' --output text. The syntax may be old, check the documentation for the correct call for the StackID. The rest of the data is necessary to define the stack.

Most of the variables are defined higher up in the script, most based on calls to a DymanoDB instance where we would store various bits of data that may or may not have changed throughout the build process, or as defined by the customer. We also saved the stack name in that same DB system so we could tear it down later.

Finally we wrapped it with a timer value. This may need to be adjusted based on the speed of the environment or number of variables you are pushing into the stack. You want the system to error out if things are too busy, otherwise the script will hang and the build server will appear to be stuck. We also had some additional verbiage at the bottom of the script that pushed text to the log file/console output so you could see it succeed as shown in lines 18 – 22.

One other thing to note is that the stack also launches an AMI (again pulled from reference). Once this stack and associated AMI are up, the next part of the pipeline starts. This could populate the AMI, test it, turn it into a Jenkins build server, whatever was necessary. The key here is it is all code.