Fiber Installed at Cabin

I met with Bevcomm on July 1 2023 to give them the go ahead to install fiber at our cabin. They thought it would take about a year and today — one year and two days later — it was installed and activated! Bevcomm sent two technicians out and everything went very smooth.

I had made several upgrades to the network infrastructure in preparation. I don’t have ethernet here and was using ethernet-over-power adapters before with Eero infrastructure.

I knew I wanted to switch everything to UniFi. I use UniFi at home and am very pleased with it. I decided to use the existing coax wiring for the backbone using MoCa adapters. Each of the four MoCa adapter then has a little 4-port switch. I’ve also got 2 WiFi 6 LR access points and a UniFi U6 Mesh access point that is installed outside. I’ve now got direct line-of-site for my external network devices. External WiFi signal is way better!

Today the last part clicked in with the fiber getting turned on. I provisioned 500 Mbps service. I didn’t think full gigabit made sense. Speeds look great and response times are very snappy.

Importing 240 Word Documents to Micro.blog

This weekend I helped get my cousin Josh setup Rambling Josh, a new website to host the column he’s been writing for 20 years. He knew I used micro.blog and was game to use that. I suggested he get a domain name at NameCheap which he did. I got in and twiddled some settings and I had the site up and running easy enough.

The challenge here was going to be the content. He had shared some documents with me earlier and it seemed like he wrote each column in Microsoft Word. They were very minimal on formatting (like almost none) since the target is a printed newspaper. In the end he had 240 Word documents, each representing an article, that we needed to get into Markdown and posted to the Micro.blog API.

I figured there were two steps:

  1. Convert these files to Markdown
  2. Post the Markdown to Micro.blog

Converting to Markdown

I’ve used Pandoc for this kind of thing before so knew it should handle this pretty easily. I tried with one file passing the source DOCX file and it did good with the MD file. However, it was word wrapped at 72 characters. I did a similar use of Pandoc when I imported content into my website at one time and didn’t realize the word wrapping was happening and now I have hundreds of posts that are word wrapped at 72 characters. In reality, nobody but me ever will see the Markdown so it has no impact. But it still bugs me. I found --wrap=none and was happy with the output.

A quick bash loop did the rest:

#!/bin/bash

for FILE in docx/*.docx; do

  # Extract the filename without the extension
  filename=$(basename -- "$FILE")
  filename="${filename%.*}"

  echo "Processing $filename...";

  pandoc -s "$FILE" \
    -t markdown \
    -o "md/$filename.md" \
    --wrap=none

done

Posting to Micro.blog

So now I had a new directory with 240 Markdown files. First step done. Luckily Josh used a standard approach to each document. The files had names like:

The Wall 3-20-2019.md
Coach2-2-11.md
Boxed Out 1-18-2017.md
Fantasia 11-15-2017.md
Brooklyn Bound 10-16-2019.md
Memories 6-17-2020.md
Genius 4-19-17.md
Mirror Mirror 4-18-2018.md
Floored 3-6-2019.md
Good Man7-19-2017.md

So I had a fairly good way to get a title as well as a publish date from the filename.

Inside of each file he had the title, byline, and date as well at the top of each article. These had less conformity so I decided to ignore those and just use the filename for metadata.

As I put each article into Micro.blog I wanted to:

  1. Make sure the title was set right.
  2. Make sure the publish date was the original publish date, not now.
  3. Add a static category.

I started to whack away at this script and then decided to ask my friend ChatGPT 4o to give me a hand. I could have written what it helped me with, but it did it about 10x faster. It also had an easier time frankly handling the fact that not all the years had 4 digits. 🤓

#!/bin/bash

# Your Micro.blog token and API endpoint
MICRO_BLOG_TOKEN="SECRET TOKEN HERE"
API_ENDPOINT="https://micro.blog/micropub"

# Directory containing the markdown files
MARKDOWN_DIR="md"

# Function to post a markdown file
post_to_microblog() {
    local file="$1"
    local filename=$(basename -- "$file")

    # Extract the title (all characters before the date)
    local title="${filename%%[0-9]*}"

    # Extract the date part (all characters from the first digit to the last dot)
    local date_part=$(echo "$filename" | grep -oE '[0-9]{1,2}-[0-9]{1,2}-[0-9]{2,4}')
    local month=$(echo "$date_part" | cut -d'-' -f1)
    local day=$(echo "$date_part" | cut -d'-' -f2)
    local year=$(echo "$date_part" | cut -d'-' -f3)

    # Format the year to 4 digits (assuming 20xx)
    if [ ${#year} -eq 2 ]; then
        local year_formatted="20$year"
    else
        local year_formatted="$year"
    fi

    # Format the date to Y-M-D
    local timestamp_formatted="$year_formatted-$month-$day"

    # Set the time to midnight Central Time (CT)
    local timestamp_ct="${timestamp_formatted}T12:00:00-06:00"

    # Read file content and remove the first three paragraphs
    local content=$(awk 'BEGIN{RS="";ORS="\n\n"} NR>3' "$file")

    # Post to Micro.blog
    curl -X POST "$API_ENDPOINT" \
        -H "Authorization: Bearer $MICRO_BLOG_TOKEN" \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "h=entry" \
        -d "name=$title" \
        -d "published=$timestamp_ct" \
        -d "category[]=Ramblings" \
        -d "content=$content"
}

# Iterate over markdown files in the directory
for file in "$MARKDOWN_DIR"/*.md; do
    if [[ -f "$file" ]]; then
    	echo "Processing $file..."
        post_to_microblog "$file"
        echo "\n"
    fi
done

I was impressed that ChatGPT had no issue knowing the signatures for the micro.blog API. It isn’t a super common API but it didn’t miss a beat. The regular expression on the filename was the same approach I would have used. I always forget about cut but it was a smart use to pull apart the date. The part I would have struggled with was ignoring the first three paragraphs (not necessarily lines) in the file itself. These had the title, byline, and date. I just wanted to ignore it. I know a little awk but not enough to have it do that for me.

I ran this and voila I had 240 blog posts from all those Markdown files. I was honestly surprised it didn’t take me longer. ChatGPT probably saved me a couple of hours of banging around at different approaches.

There were a couple of bugs.

  • Articles that contained an ampersand caused problems with curl. The content after the first ampersand was lost. There were only eight or so articles that had that (thanks grep) so I remedied that by hand.
  • I didn’t like what Pandoc did with superscript. Because Josh had written these in Word every occurence of 7th or 20th had superscript. There were a number of ^ that needed to get erased. I used MarsEdit to both find the posts that had that, and do a quick find and replace with nothing. I wish that was a batch operation in MarsEdit but you have to do it one-by-one, but it is fast.
  • Pandoc also littered a bunch of backslash characters attempting to do some formatting. I had to fix those by hand too.

It is entirely possible if I spent more time with the Pandoc testing I could have avoided the last two. Pandoc doesn’t have command line flags for those but it does have multiple Markdown targets and some of them may have made more suitable Markdown for me. Either way it only took about 10 minutes to clean up thanks to MarsEdit.

Wrapping up

I was pretty happy that I go this all going and even completed in just a couple of hours. The rest of the archive will be less easy to get, but with this we got a great start!

Rambling Josh

My cousin Josh Ellis has been writing a twice-monthly column in the Burke County Tribune for nearly 20 years. He has been writing old school, publishing in an actual printed newspaper all those years. He’s written over 450 columns! Over the years I’ve been able to read some of his writing but not much because of the limited distribution. I’ve always wished I could read them all.

I had recently been chatting with Josh. He shared a couple of columns he had written about Ireland and thought I may like them after our recent trip — Lucky Man and Friends and Children. I thought they were great and told him that if he ever wanted to get a website running for his column on I would be happy to help.

About a week later he pinged me asking how to start and shortly after Rambling Josh was up and running! 1

He sent me 240 of his columns and I imported them into his site. Plenty to read, but only about half of all of them. We are going to keep working to add more. I also made sure to get his first column Shadow Puppets up. I hope to be able to help him get them all online. Some of them will have to be OCR off of clippings he has saved.

It was awesome to help Josh get this going. I can now get his new column in my feed reader. He also has a subscribe option so you can get it via email. Plus, his collection of columns will now be available for all. And even better, the open web gets a great site. I joke that when a blog is started an angel gets their wings. 🪽

He is a really good writer. There is wit and personality in all of it. Check out Rambling Josh and add to your reader. He may get an email subscription option going too.

PS: The “Surprise Me” button is a good way to read random columns. Just keep clicking.

Update: We’ve added another 80 columns, for a total of 320 now!


  1. Josh’s column has always been titled “Ramblings” ↩︎

I find it incredible that Pump 1 in our sump pump system has run 324,989 times. Pump 2 has only run 15,179 times. It also indicates that Pump 1 flow rate is 59 GPM and Pump 2 is 81 GPM. I would guess the extra 309,810 times it has run has reduced its rate a little.

We decided to have dinner at Crisp & Green last night so that we could see Mazie at work! She was surprised when we showed up. Delicious bowls! 🥗

Lake Cam Properly Mounted

Last week when I repositioned one of the UniFi G4 Cameras so that I could keep an eye on the flooding and the pontoon I didn’t consider raccoons getting interested in the camera. I had just put it on a 2x4 on the ground. The 2x4 was to keep it from being on any pooled water. That didn’t even make it 24 hours.

Luckily I had a yard stake and some scrap wood. Problem solved! Additionally I’m now looking closer to eye height instead of having a view from the ground. Stay away raccoons! 🦝

Wondering about all that green stuff on the water? That is floating algae that collects in the little alcove that our dock sits.

Cannon Lake Flooding Update

We stopped at our cabin yesterday to check on the flooding on Cannon Lake. Lucky for us the only real situation we are managing is our pontoon and dock. The water was down a few inches from last week but still very high. The lake association also sent a warning that the water may be contaminated due to all the flooding upriver from us.

I also replaced the sump pump discharge line. Usually the sump pump there doesn’t run often but it is running every minute to two now and I noticed the discharge line had several holes and it was spraying water all over the place. I figured with all the flooding I may not be able to find a replacement but Faribault Ace Hardware had our back. Our sump pump didn’t have a threaded connector but I was able to make it work and got the new line in place.

We drove along Cannon Lake Trail and the water had receded a few inches but still a lot of flooding and even more debris after a week. We also looped through Dodge Court and most of the really big houses there were still okay but there were a few that were badly flooded. In Warsaw I was surprised that bridge that crosses the Cannon River on Farwell Ave was still open. I thought it ould be flooded too. The Channel Inn was not flooded, but Doc’s Dock was flooded and several of their permanent RV spots were as well.

It is fun to think back to 17 years ago right now, tweeting on iPhone launch day, when I got my hands on the original iPhone. What a journey! 🚀

Lovely stroll with Lucky this evening. A blooming Northern Catalpa, Minnehaha Creek brimming with water, and Asiatic Lilies.

Ledger Stax Arrived

This weekend I received my Ledger Stax crypto wallet! I pre-ordered this in December 2022 because I loved hearing how Tony Fadell, who designed the original iPod, approached designing this. The device is meant to look like a book and you can customize the spine and cover however you wish to help see what is “inside” the wallet. I unboxed it tonight.

The packaging is well done but very big for such a small device. The box it comes in is the same book shape as the Stax itself, and then the Stax is simply tucked away inside. Very nicely done and all simple cardboard so very recyclable.

I didn’t set it up yet, but I did power the Stax up and it makes a nice twinkle sound and the screen comes to life. It is a touch sensitive screen and is surprisingly responsive when you touch it. Very cool.

I have a Ledger Nano X already so I’m going to need to sit down and figure out how I want to configure and setup the Stax. I actually pre-ordered two of these so am expecting another one to show up soon.

Summer Challenge: Create a Counter using Shortcuts

This post is part of the Summer Challenge Collection, a collection of tasks or projects for our kids to do over the summer.

For this challenge you will create a simple counter to keep track of any number of events that you might want to track. You could use this to keep track of the number of books you’ve read, the number of times you did a certain activity, or how many summer challenges you’ve completed.

The counter must be created using Shortcuts and Data Jar. The shortcut should have at least these functions:

  • Increment a counter
  • Decrement a counter
  • Create a counter
  • Remove a counter

Once you have created the Shortcut then write a post about how you created it, and include a link to install the shortcut via the share sheet.

Completed!

Summer Challenge: Write about a book

This post is part of the Summer Challenge Collection, a collection of tasks or projects for our kids to do over the summer.

For this challenge you can write about any book that you’ve read. A book report style post is fine, but you could also share something different about the book. The post should include an image of the cover. Preferably it would also include some text quoted from the book as well.

You can redeem this challenge up to five times.

Summer Challenge: Write about a video game

This post is part of the Summer Challenge Collection, a collection of tasks or projects for our kids to do over the summer.

For this challenge write about a video game that you have played. It doesn’t necessarily need to be a review of the game. It could be about how you approached the game or any other aspect of it. The post should include screenshots to help share your message.

You can redeem this challenge up to three times.

Summer Challenge: Do a photo walk

This post is part of the Summer Challenge Collection, a collection of tasks or projects for our kids to do over the summer.

This challenge is about expressing your creativity through images. First, identify a topic or theme that you want to focus on. It could be something like flowers, or water as a topic. For themes it could be movement, warmth, wind. Then take a walk with your phones camera at the ready and capture five to ten photos that express the topic or theme that you picked. Share the photos along with the topic or theme on your blog.

You can redeem this challenge up to three times.

Raccoons v Webcam

With Cannon Lake flooded I had repositioned one of the UniFi G4 Instant cameras so it was pointing right at the boat.

I’ve also been battling with raccoons at our place. This summer I had 6 of them trapped and taken away. But there are still more.

And on the very first night of having this camera in position the raccoons decided to play with it.

Thankfully later in the day the lawn care folks showed up and amazingly one of them put the camera back in place for me. Thank you! We’ll see if the raccoons leave it alone.

I received my Rabbit R1 tonight! I only had time to get it out of the box, do the basic setup, and get it updated. Will play more later.

Helped Tyler order the first three components for his Gaming PC from NewEgg. He’s officially starting that project. Fun!

Cannon Lake Flooded

In September 2016 we experienced a major flood on Cannon Lake, and now in 2024 we are going through an even more severe flood. I’m going to use the completely unscientific gauge of the seating at the end of our dock. In 2016 the water was right up to the seat. This year, only about 3 inches of the upper part of the seats is popping above the water.

I wasn’t sure how bad the flooding would be this year. I have cameras mostly for keeping track of weather and storms and things were generally looking okay. Tammy went to the lake on Thursday to check on things and reported the lake was a couple inches below the top of the dock. Given there wasn’t much rain in the forecast I sort of thought it would be okay.

Then today the lake association sent an email that there were sandbags available at the Channel Inn for homeowners that needed them, and the lake was probably going to rise another foot. I got into the car immediately and went drove there.

As I got to Faribault I started to see how bad the flooding was. There was a road on the periphery of Faribault that was flooded and impassable. As I drove toward Cannon Lake I saw that the water was up very high. Shager Beach wasn’t there at all, entirely under water. The public docks along the south side of the lake were all badly damaged. As I got closer to our place I saw that some of the houses had as much as 100’ of lakeshore underwater.

The good news for us is our place is on a bit of a rise. We are at least 20 feet higher than many other places. Happily our basement is still dry. The biggest issue is the pontoon, which was why I was there. Unfortunately the sumac trees along our shore have gone nuts and the camera I can usually watch the boat from showed nothing of value.

When I got there I could see right away we had some problems.

What to do? I had to think on it a bit. There is no chance of getting the pontoon out from under the canopy. I didn’t like the look of the back of the pontoon. It was much lower and the back of the canopy was visibly higher in the air. I don’t want the motor sinking. After some consideration I switched into swimming shorts, put on a life jacket, and got a single aluminum paddle. I wasn’t going to repeat walking off the dock like I did in 2016, so I use the paddle and very carefully made my way step my step down the stairs and along the dock. I was about waist high in the water.

Once I got to the boat I lowered the ladder and used that to climb into it. The boat was pretty high up to get into otherwise. My goal was to make the boat as short as possible. The bimini was on its lowest setting, but I could drop it all the way down and get another foot. This was not easy. The boat was holding the canopy up and there was a lot of weight. I gave it a lot of muscle and finally lifted the canopy off enough to get the bimini down all the way.

Then I crawled into the boat and noticed that one of the cover poles was bent into a C-shape. I knocked out all of the poles to again lower the profile of the boat. After doing this, I could tell the boat was floating a little bit. It wasn’t pinned in place anymore. I then carefully grabbed a tie down and went back down the ladder. I loosely tied the boat to the canopy support. It cannot go anywhere, it is totally trapped. But when the water lowers the rope could be useful.

I don’t think there is anything else I can do. I definitely bought myself some room. I think the lake could raise another 6" or 12" and it would probably be okay. We’ll see. 🤞

After I took care of this, I repositioned the lake camera and put a new access point in place outside to make this work. Now I have full eyes on the boat and know what is going on. 👀

After tending to my situation I looked around a bit and took some photos. I’ve got it pretty easy. Some folks have their entire houses flooded. It was sad to see.

I also took a video as I drove along Cannon Lake Trail, which is the small road on a strip of land between Cannon Lake and Wells Lake. Feel for these folks. 🙏

On our walk around Lake Harriet today we took a stroll through the Rose Garden as well. There were many roses out in full bloom but it seemed like they had either been battered heavily in the rain or were maybe a bit past their prime. Probably a bit of both.

Just heard the water level on Cannon Lake is expected to increase another foot. Time to head to the cabin to make sure things will be okay. 🛟