More from: Crafting

Fasnacht Time ANY time now!

On the Saturday night before Ash Wednesday, the people of Helvetia (West Virginia, USA) put on scary masks and decorate their homes with scary figures to frighten away Old Man Winter. Then they gather at a local restaurant, light colorful lanterns, and walk to the community hall, where they parade around the dance floor as their masks are judged. They dance until midnight, when the fiddler announces it is time to burn Old Man Winter. The prettiest girl gets on the shoulders of the tallest man and cuts down the effigy of Old Man Winter that is hanging in the middle of the room. They drag it out into the snow, rough it up, and throw it onto a bonfire, showing that it’s time for winter to end!

From: the Americas Library

This slideshow requires JavaScript.

Or from WikiPedia:

Fastnacht Day is dependent upon the day of Easter, and Ash Wednesday. Easter Day varies from year to year because of the spring equinox, or full moon, and is usually the last Sunday of the month of March. Fastnacht Day takes place 47 days before Easter Day, on the Tuesday prior to Ash Wednesday.

Fastnacht Day dates

  • March 5, 2019
  • February 25, 2020
  • February 16, 2021
  • March 1, 2022
  • February 21, 2023

Fastnacht Day (also spelled Fasnacht) is an annual Pennsylvania Dutch celebration that falls on Shrove Tuesday, the day before Ash Wednesday. The word translates to “Fasting Night” in English. The tradition is to eat the very best foods, which are part of the German tradition, and much of them, before the Lenten fast. Fastnachts (pronounced /ˈfastnaxt/ in German) are doughnuts. There are three types of Fasnacht, one made with yeast, one made with baking powder, and one made with potatoes and yeast. All are slightly crispy on the outside and not as sweet as standard doughnuts. From WikiPedia

Recipe #1:Fastnachts with baking powder

3-1/2 cups sifted all-purpose flour 1 tablespoon baking powder 1/2 teaspoon salt 3/4 teaspoon ground mace (can use nutmeg) 1/4 cup solid vegetable shortening (use lard if you can get it) 1 cup granulated sugar 2 large eggs, beaten 1 cup milk vegetable or canola oil for frying, about 2 quarts

Place the flour, baking powder, salt and mace in a medium bowl. Stir with a wire whisk to combine. Set aside. In a large bowl of an electric mixer, cream together the shortening and sugar until fluffy. Add the eggs and mix until creamy. Gradually add the dry ingredients, alternating with the milk, mixing on low speed, just until well-combined. Place on a floured board. Work the dough lightly with hands, adding a little more flour as needed if it is too sticky. (This dough should be very soft, something like a biscuit dough, so don’t add more flour than necessary.) Gently roll the dough into a 1/2-inch thick rectangle or square. Using a sharp knife, cut into 2-inch squares or similarly sized rectangles. Heat the oil in a deep-sided pot over medium heat to 375 °F. Carefully add the fastnachts to the oil, about 6 per batch, and fry until well-browned on one side, about 2 minutes. Flip and brown the other side for another 2 or 3 minutes. Remove with a slotted spoon and place on a baking sheet lined with paper towels to drain. Repeat with the remaining fastnachts.[6]

Recipe #2: Fastnachts with Yeast

2 cups scalded milk, ½ cup lard, 1 cup mashed potatoes, 2 teaspoons salt, ¾ cup sugar, 2 well beaten eggs, 1 package yeast, 7 cups flour, approximately

Scald milk and add mashed potatoes, sugar, salt, and lard. Cool until lukewarm. Add eggs. Add yeast and enough flour to make a soft dough. Knead well and place in a greased bowl. Cover with a cloth and let rise about 1½ hours. Roll ¼ inch thick on a floured board. Place on a cloth and let rise until doubled in size and fry in hot fat.[7]

Recipe #3: Fastnachts with potatoes and baking powder

2 1/2 c. hot mashed potatoes 1 cup milk 3 beaten eggs 2 Tablespoons melted butter 2 cups sugar 2 Tablespoons baking powder 5 cups all-purpose flour

In a large bowl combine all ingredients, but add flour slowly. Divide dough in half and roll to 1/2″ thickness. Cut with doughnut cutter. Fry in deep fat or oil, turning when brown. Drain on paper towels and let cool.[7]

For more recipes:


Conky Weather

Changes in formats for available weather information recently required me to revise my conky script. Conky can be installed from the Ubuntu / MINT repos or downloaded from github and documentation is on sourceforge or by the man page. This information is furnished AS IS – use it at your own risk. Most recent version of the GPL applies.

The following code is how I get my weather information directly from and display up to date weather information for my area. The code for surface weather observations is found on the Weather.Gov web page for your zip code and the state / county codes for weather alerts is at the bottom of the page here.  My code is KFWA and my county is INC003. Replace these with the ones appropriate for your area.

The recommended pull time for your area is in the xml file that you get from Here is a sample of part of the lines in that file showing the suggested pick time and frequency:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="latest_ob.xsl" type="text/xsl"?>
<current_observation version="1.0"
xmlns:xsi="" xsi:noNamespaceSchemaLocation="">
<credit>NOAA's National Weather Service</credit>
<title>NOAA's National Weather Service</title>
<suggested_pickup>15 minutes after the hour</suggested_pickup>
<location>Fort Wayne International Airport, IN</location>

The part of my .conkyrc script dealing with weather is as follows:

${color FFAA00}WEATHER ${hr 2}$color${font Verdana:size=9}
#${execi 3600 curl -s > wwraw.txt}
#${execi 3600 wget -q --output-document="walerts.xml"}
${color 00FF00}${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 00FF00}${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Wind: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color FFFF00}Humidity: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}% ${color}
${color 00FF00}Temperature: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Dew Point: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1}${color}
${color 888888}Pressure: ${exec cat wwraw.xml | sed -n '//p' | cut -d'>' -f2 | cut -d'<' -f1} in Hg${color}${font}
${font Verdana:style=bold:size=10}Warnings:${font}${color}
${exec cat walerts.xml | sed -n '/\/p' | cut -d'>' -f2 | cut -d'<' -f1}

Notice the two lines which I have commented out with the pound # sign. These fetch the surface weather observations and weather alerts from They are commented out in my conky script because I fetch them instead using cron, 15 minutes after each hour,  the time recommended by They don’t HAVE to be in the script but I leave them there in case I need to refer back to them at some future date, such as if I accidently delete my weather fetching bash script. Edit your crontab in terminal by typing “crontab -e”.

# m h dom mon dow command
15 * * * * ./

The .xml file provided by says what time is recommended to pull. I try to avoid pinging more frequently than needed as a matter of respect: the weather is updated once per hour so more frequent pulls achieve nothing useful and cost in bandwidth.

To pull the weather information I use a bash script as follows. Remember a bash script must be “executable” for your login. Search on linux permits if you need more information. I can let cron call this once per hour, and it is also called through my .bash_profile when I log in.

#pull weather from

wget -q --output-document="wwraw.xml"
wget -q --output-document="walerts.xml"

To have the script prevent excessive downloads, I use this complete bash script:

#pull weather from
#ONLY IF it has not been pulled recently
#weather is updated once per hour
# recommended time to pull is hour+15
# manually noted weather is updates about
# 54 minutes after the hour
#last_update: 20170826 JDN

# define minimum time lapse before new pull is permitted
declare -i MINAGE=22
echo 'Min age' $MINAGE

# calculate time lapsed since last pull
if [ -f wwraw.xml ];
declare -i LAPSE=$(( ( $(date +%s) - $(stat wwraw.xml -c %Y)) / 60 ))
echo 'Lapse' $LAPSE
declare -i LAPSE=999

# allow override of command line parameter #1 is --force
if [ -n "$1" ]; then declare -i FORCE=1; else declare -i FORCE=0; fi
echo force is $FORCE

# calculate if pull is permitted (boolean)
echo dopull is $DOPULL

# test time lapse vs. minimum time lapse to allow pull or override
# Check if file older
if [[ $(($DOPULL + $FORCE)) -gt 0 ]]; then
# debugging message output if pull was performed
echo "File was pulled $LAPSE minutes ago. Pulling new weather data"
# get surface observations
# file will have date / time from
wget -q --output-document="wwraw.xml"
# mark file with current time to prevent hammering
touch wwraw.xml
# get weather alerts
wget -q --output-document="walerts.xml"
# debugging message output if pull was not performed
echo "File was pulled $LAPSE minutes ago. Ignoring request to pull again."

unset FORCE
unset DOPULL
unset MINAGE
unset LAPSE
exit 0


DSCN3666 Leather repair: replaced worn strap on hammer holster. Used copper rivets this time instead of the assembly line crimp rivets it was made with. Shaped it a bit to reduce future problems – when you want to put your hammer back on your belt, you don’t want to fight to get it back in there – aim and drop. Properly shaped leather does that. I can make work belts also, with cinches rather than buckles if so requested.

If you have leather that needs to be repaired this is the time to get it to me.

Anyone see a way to improve this?

// inputs are form $_POST[] variables login and password

// relevant table columns are id,login,password,and sometimes key_chain
 // id is integer, the rest char with password being a hash 
 // the output success/fail flag is $id is set upon success, unset if failed

 //Check Keys Table for this Login
 if(isset($staff)) $sql = "SELECT `id`,`password`,`key_chain`"; else $sql = "SELECT `id`,`password`";
 $x = mysqli_real_escape_string($my_db_link,strtolower(trim($_POST['login'])));
 $sql .= " FROM `keys` WHERE `login`='$x';"; 
 $result = mysqli_query($my_db_link,$sql) or die(mysqli_error($my_db_link));

 // is there a matching login in the table?
 if (mysqli_num_rows($result)>=1) {
 //matching login found
 $row = mysqli_fetch_array($result);
 $id = $row['id'];
 $password = $row['password'];
 if(isset($staff)) $key_chain = $row['key_chain']; //text string to determine user's privilege

 //if password is null, then it is not set yet, so set it
 if( (!isset($password)) OR (strlen(trim($password))<60) ){ //min hash length is 60

 // set the password
 $x = password_hash(mysqli_real_escape_string($my_db_link,strtolower(trim($_POST['password']))), PASSWORD_DEFAULT);
 $sql = "UPDATE `keys` SET `password`='$x' WHERE `id`='$id' LIMIT 1;";
 mysqli_query($my_db_link,$sql) or die(mysqli_error($my_db_link));

 //if password not null, then test it
 } elseif (!password_verify( mysqli_real_escape_string($my_db_link,strtolower(trim($_POST['password']))),$password)) {
 // bad login -- wrong password

 }//if(isset($id) AND

 }//if (mysqli_num_rows($result)>=1) {

Bible Reading Program updated 30 SEP 2015

screen-cutThe BRP Bible Reading Program released in 2008 has been updated to prepare for the changes in PHP v7.0 and improve the code some. This would be a good time for feature requests.

Individual files can be downloaded from A .zip archive is also attached here.