20 Apr 2025, 06:48

Dream skateboard on highway

I was skating on a highway in the city and Jess wanted to come with me so I had her sit on my lap as I sat on the skateboard and I used her shoes to touch the pavement as necessary to help us turn one direction or another and add stability. So we were able to flow down one highway hill and then back up another at least one full time and navigated through some other skateboarders until we got to a part of the highway that was under construction. So we went through the construction zone until we got to some stairs and we had to get off the skateboard at that point.

I went down the stairs a little bit and saw some construction workers down there so I held still so they wouldn't see me and then went down the stairs where I got to see all of their equipment that was in this workshop and I went through the next door which had hanging plastic strips to allow humans easy access but to keep air conditioning on one side of the door. I made sure to close the plastic carefully which took extra time and someone saw me so after I went back up the other stairs a security guard came up behind me and holding a gun so I realized it was a dream. He said "stop right there; get on the ground." I said "it's okay" and woke up.

19 Apr 2025, 13:34

Working on AB

I need to work on AB today; gotta ask Nate about upgrading the image server.

13:44

Done! Hopefully we can sort something out soon.

19 Apr 2025, 06:18

An expensive dinner dream

I watched a documentary about my favorite comedian winning the game by connecting with audiences around the world without regard to making quick cash. Standing in a dining hall, the reporter asked the maître d' about prices; one of the patrons chimed in proudly "a hundred fifty dollars per plate!"

The maître d' nodded his head with a shrug.

18 Apr 2025, 12:51

date with Hunbun

Today Jess and I went shopping and discovered nearly all the shops are closed on Easter Friday! 🐰

Close to the beach more things were open and we were able to get a great Indian vegan samosa and pakora which we ate at the beach.

I saw a pigeon with some fishing line stuck to his foot but I couldn’t do anything to help him because I’m sure it would take a net to catch him, plus gloves, and possibly scissors to safely remove the fishing line.

I made a football shaped triangle out of the bag and tried to toss it into the trash can but it didn’t make it in.

Jess wanted me to get up and put it in the trash can but I decided to throw it in, just for the experience.

I missed, but just barely!

We got some tea at a tea place, where I lamented not asking for “no ice” because they specifically have “no ice” as an option.

We stayed until the place was overrun with teens, one of whom wore fuzzy pajama bottoms… Reminds me of YRUU!

18 Apr 2025, 07:11

Dream in a new city

In a new city Jess and I were jogging toward the botanical Gardens. She went left around a school and I continued going directly through the school building because it was a more direct route to the garden.

Inside the school building were lots of students and I tried asking them if I was heading the correct direction.

Climbing inside a large construction site, I was discovering empty rooms in a large 3D maze of buildings.

I was standing with some of my peeps next to a food truck when Jeff called and asked me if I could bring him a sandwich. I asked what kind he wanted and he said "anything" so I headed to the back of the school to go up and realized I was going up the wrong building but I knew they were connected at the lower levels so I went to the uppermost connected level, into the building toward the front, and then turned right to go into the correct tower.

Lots of people were in the building which offered a nice view of the fields below. I found some gummy bear crackers that could fly in circles if thrown like a boomerang.

I threw a few and could even get a cracker to fly two loops before I caught it again. The loops got smaller each time so I would just walk forward a bit to catch them after three or up to about five loops, at which point the cracker would have ended up flat and drift spinning straight down like a maple seed.

17 Apr 2025, 04:30

Cuddle Party plan dream

I came into the bar area 15 minutes before the show was scheduled. No MC was there so I announced myself. "Hey everyone my name is Rob and I'll be doing stand up in fifteen minutes so I'm going to go think of some jokes."

That got a laugh. So far so good.

Then a young woman came up to me and asked if I'd be running another Cuddle Party. 'Yes; it will be Sunday April 27th from 1pm to 4pm in Crafers. Would you like to join us?"

She hugged me closely and our lips were slightly touching as she spoke. "I cannot attend then, but we're having a Cuddle Party at the" and she proceeded to tell me a place I don't yet know.

I felt excited about the new possible event as I woke up.

16 Apr 2025, 17:41

Highlight testaroo

Syntax Highlighting Test

This file includes code blocks in multiple languages to confirm Hugo’s syntax highlighting.

Add this to Perl journal head tag:

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>

Perl

my $name = "Rob";
print "Hello, $name!\n";

Bash

#!/bin/bash
echo "Hello from Bash"
ls -l /home/robnugen

PHP

<?php
echo "Hello from PHP!";
?>

JSON

{
  "name": "Rob",
  "role": "Connection Coach",
  "barefoot": true
}

No Language Specified

This is a code block with no language.

It should still render with a monospaced font,
but no syntax highlighting.

16 Apr 2025, 12:15

Getting my Perl journal markdown parser working

Nearly four years ago, I wrote about my desire to get my old Perl journal to correctly display my recent journal entries which are in markdown files.

I’ve consistently used ~/journal/yyyy/mm/ddtitle-here.ext as the filename, where ext is either txt, html, or md.

I couldn’t get the Perl markdown processors installed on Dreamhost, so I asked ChatGPT to write one for me. This is what we’ve got so far:

# Text/RobMiniMarkdown.pm
package Text::RobMiniMarkdown;
use strict;
use warnings;

sub new { bless {}, shift }

my @para_buffer;

sub flush_paragraph {
    my $joined = join ' ', @para_buffer;
    @para_buffer = ();
    return "<p>$joined</p>\n" if $joined =~ /\S/;
    return '';
}

sub markdown {
    my ($self, $text) = @_;
    my @lines = split /\n/, $text;
    my $html = "";
    my $in_code_block = 0;
    my $in_list = 0;
    my $list_type = '';
    my $in_frontmatter = 0;
    my $in_html_block = 0;
    my $in_indented_code = 0;
    my @html_block;
    my @code_buffer;
    my @indented_buffer;

    foreach my $line (@lines) {
        # Skip YAML frontmatter
        if ($line =~ /^---\s*$/) {
            $in_frontmatter = !$in_frontmatter;
            next;
        }
        next if $in_frontmatter;

        if ($line =~ /^```/) {
            if ($in_code_block) {
                $html .= join('', @code_buffer) . "</pre>\n";
                @code_buffer = ();
            } else {
                $html .= "<pre>";
            }
            $in_code_block = !$in_code_block;
            next;
        }
        if ($in_code_block) {
            push @code_buffer, "$line\n";
            next;
        }

        # HTML block: detect opening tag
        if (!$in_html_block && $line =~ /^\s*<(\w+)[^>]*?>\s*$/) {
            $in_html_block = 1;
            @html_block = ($line);
            next;
        }

        if ($in_html_block) {
            push @html_block, $line;

            # If we detect the closing tag, flush
            if ($line =~ /<\/\w+>\s*$/) {
                $html .= join("\n", @html_block) . "\n";
                $in_html_block = 0;
                @html_block = ();
            }
            next;
        }

        # Indented code blocks
        if ($line =~ /^ {4,}/) {
            if (!$in_indented_code) {
                $in_indented_code = 1;
                @indented_buffer = ();
            }
	    $line =~ s/^ {4}//;   # remove four spaces from beginning of each line indented with four or more spaces
            push @indented_buffer, "$line\n";
            next;
        }

        if ($in_indented_code) {
            $html .= "<pre>" . join('', @indented_buffer) . "</pre>\n";
            $in_indented_code = 0;
            @indented_buffer = ();
        }

        # Headings
        if ($line =~ /^(#{1,6})\s+(.*)/) {
	    $html .= flush_paragraph();
            my $level = length($1);
            $html .= "<h$level>$2</h$level>\n";
            next;
        }

        # Horizontal rule
        if ($line =~ /^\s*(\*\*\*|---|___)\s*$/) {
	    $html .= flush_paragraph();
            $html .= "<hr/>\n";
            next;
        }

        # Blockquote
        if ($line =~ /^>\s?(.*)/) {
	    $html .= flush_paragraph();
            $html .= "<blockquote>$1</blockquote>\n";
            next;
        }

        # Unordered list
        if ($line =~ /^\s*[-+*]\s+(.*)/) {
	    $html .= flush_paragraph();
            if (!$in_list || $list_type ne 'ul') {
                $html .= "</$list_type>\n" if $in_list;
                $html .= "<ul>\n";
                $in_list = 1;
                $list_type = 'ul';
            }
            $html .= "  <li>$1</li>\n";
            next;
        }

        # Ordered list
        if ($line =~ /^\s*\d+\.\s+(.*)/) {
	    $html .= flush_paragraph();
            if (!$in_list || $list_type ne 'ol') {
                $html .= "</$list_type>\n" if $in_list;
                $html .= "<ol>\n";
                $in_list = 1;
                $list_type = 'ol';
            }
            $html .= "  <li>$1</li>\n";
            next;
        }

        # End list if current line isn't a list item
        if ($in_list and $line !~ /^\s*([-+*]|\d+\.)\s+/) {
	    $html .= flush_paragraph();
            $html .= "</$list_type>\n";
            $in_list = 0;
            $list_type = '';
        }

        # Tables (simple row)
        if ($line =~ /^\s*\|.*\|\s*$/) {
	    $html .= flush_paragraph();
            $html .= "<div class=\"table-row\">$line</div>\n";
            next;
        }

        # Inline code
        $line =~ s/`(.*?)`/<code>$1<\/code>/g;

        # Bold
        $line =~ s/\*\*(.*?)\*\*/<strong>$1<\/strong>/g;

        # Italic
        $line =~ s/(?<!\*)\*(.*?)\*(?!\*)/<em>$1<\/em>/g;

        # Links and images
        $line =~ s/!\[([^\]]*)\]\(([^\)]+)\)/<img alt="$1" src="$2" \/>/g;
        $line =~ s/\[([^\]]+)\]\(([^\)]+)\)/<a href="$2">$1<\/a>/g;

        # Paragraph (default case)
        if ($line =~ /^\s*$/) {
            $html .= flush_paragraph();
        } else {
            push @para_buffer, $line;
        }

    }

    # Close any open list
    $html .= "</$list_type>\n" if $in_list;

    # Final flush, just in case the file ends with indented code
    if ($in_indented_code) {
        $html .= "<pre>" . join('', @indented_buffer) . "</pre>\n";
    }

    return $html;
}

1;

And it’s working pretty well!

To Do:

  • Add the newer journal URL of this entry down below
  • Ensure these lists show up correctly in the Hugo journal (which I plan to stop using soon (haha)"
  1. Copy this file to my Perl journal directory
  2. Confirm these lists show up correctly in my Perl journal
  3. Post RobMiniMarkdown.pm on Github
  • Confirm unordered lists show up correctly
  • Confirm the Perl journal link to this file down below

The next big trick will be to allow journal entries to be visited at either URL

https://www.robnugen.com/journal/2025/04/16/getting-my-perl-journal-markdown-parser-working/

or

https://perl.robnugen.com/journal.pl?type=all&date=2025/04/16 (which can show multiple entries for that date)

16 Apr 2025, 06:49

Dream playing frisbee

In a very large tall grassy field there were some guys playing frisbee with some frisbees that basically looked like big hats that had strange shapes.

I wasn't sure if they would be open to me playing, but I basically went to get the frisbee and looked up as a way to ask and got no response. So, I picked it up, threw it and it went perfectly to the guy so I was thereby welcomed into their game. They had a blue disc that looked like Indiana Jones hat, but with the crown all the way to one side of the disc. They had a yellow disc with extra curves on the rim.

I threw the yellow disc while they weren't looking and it got lost in some bushes so I went over to where it landed but I couldn't find it. I said "the yellow desk is over here" and then one of the guys immediately found it. I was surprised because I didn't see it in the same area.

One of the guys was standing in a concrete doorway and I threw the blue disc which got lodged up in the upper left corner of the doorway. I think he could have reached it by jumping, but his friend lifted him up on his shoulders and then the guy bumped it out of the corner with his head.

After retrieving the blue disc, one guy said, "if you don't break it, we're going to leave this disc here."

I asked if it was due to its weird shape and they agreed.

I was surprised because I thought it was a fine disc with just a bit of a strange shape and throw. They apparently experimented with it today and chose not to keep using it.

14 Apr 2025, 08:26

Slept in cool house in Perth

One of the staff men at the NWTA said I can sleep at his place if I’m okay with an air mattress.

The house was amazing, with modern floating stairs leading up to a balcony bridge inside which connected bedrooms on either end of the house.

With his family and two other guests, we enjoyed making pizzas and prepping them in the pizza oven (2 minutes per pizza) which helped us connect over various preferences and sharing the workload. I made a pizza featuring trail mix, apples, and bananas. It was great!

I watched a construction process the next morning, digging trenches for waste water plumbing and preparation to grade the surface with sand.

I enjoyed using this literal vision of construction represent construction of a new house for me and Hunbun.

Alas, I had to head out toward the airport for my flight to Adelaide to see Hunbun in Adelaide, our preferred city in OZ.