cmiles - info

Life, Tech and Unimportant Minutiae

Created and Updated by Charles on 3/22/2023.

2019 May Sunset over Green Mountain from Guthrie Mountain
Sunset over Green Mountain from Guthrie Mountain. Charles Miles. 5/9/2019.

Back in time, deep in the 2000s internet, you would have found my Flickr photographs consistently licensed with a Creative Commons license. I'm not sure what I would have said at the time about the license - but looking back I think it was mainly a signal, a way to be part of a community creating content online and looking with suspicion on older models of intellectual property.

Every now and then someone would use - or contact me about using a photo. But with only an occasional request, and no intention to make photography my job, licensing choices faded into the background - my licensing brain cells moved on to software licenses I guess...

2016 May Green Mountain and Guthrie Mountain from Barnum Rock
Green Mountain and Guthrie Mountain from Barnum Rock. Charles Miles. 5/18/2016.

Recently I have been thinking about photo licensing again:

Openverse Search Results for Guthrie Mountains - March 2023
Openverse Search Results for Guthrie Mountains - March 2023.

In the screenshot above you can see some of my photographs on Openverse - "a tool that allows openly licensed and public domain works to be discovered and used by everyone." I applaud the idea behind Openverse - educational material, historic places, important events... photographs of all sorts that can be searched and used liberally (especially in free projects) - hugely important. (Perhaps see and consider Wikimedia Commons for a variation of this idea with a hard to ignore impact).

Openverse searches across more than 300 million images from open APIs and the Common Crawl dataset. It goes beyond simple search to aggregate results across multiple public repositories into a single catalog, and facilitates reuse through features like machine-generated tags and one-click attribution.

It seems that a very important part of CC licenses has become signaling to machines that they can use content without any meaningful query to, conversation with or participation by its creator.

2012 December Guthrie Mountain
Guthrie Mountain. Charles Miles. 12/22/2012.

Openverse presents quite a lot of information of about a photograph - but no nuance. No creator profiles, no effective search for a specific creator, no stories, no context on what it would be appropriate for, nothing about why, wishes, hopes or dreams - no context... I don't doubt that this targets the needs of the average Openverse customer who wants to quickly get an image of ________ - but dehumanized mega-search isn't where my small records of place and time belong. My concerns about the usage of my photographs go well beyond what I can express with a CC license. The Creative Commons alludes to this general idea in their 2021-2025 Strategy Document:

Today, changed technological, social, cultural, political, legal and economic environments raise new challenges for the open movement. In order to protect what we have achieved so far and to create the world we want to see, we must expand our focus beyond copyright licensing, because content sharing cannot be decoupled from economic or ethical concerns. Indeed, the benefits of open sharing can be undermined by exploitative practices that threaten the financial sustainability of open endeavors, leading to economic hardship. Further, open sharing practices can also be marred by ethical concerns, such as the problematic use of open content to train potentially harmful artificial intelligence (Al) technologies or the use of open content in violation of non-copyright norms.

These days if you visit my photographs on Flickr you will see them listed as 'all rights reserved'. A relic from the old world I guess, but I don't think there is a license, metadata field or legal framework that would adequately define how I feel about these photographs or what I believe it would be appropriate to use them for. 'All rights reserved' seems to be the best stand in for 'let's talk like humans about it'... If you are interested in having a conversation about using my photographs contact me, regardless of my answer I bet you have an interesting story that I'd love to hear...

2012 December Snow on the Guthrie Mountain Trail
Snow on the Guthrie Mountain Trail. Charles Miles. 12/22/2012.

Created by Charles on 1/29/2023. Updated on 2/19/2023.

A little slice of life from 2022/2023 - my personal browsing setup frozen in time - maybe something of interest now but probably mostly something to look back on with amusement in the post-internet future when the AIs deliver all this straight into your brain...

2023 February - Kagi Search
A screen shot of Librewolf and Kagi Search.

$10 a month to use a search engine - when google search is free - and yet another subscription - seems like too much? But two months in and I'm hooked! I've tried to switch away from google search several times in the past few years and always switched back because the search results never seemed as good. So far with Kagi the results seem as good, or maybe even slightly better than google - and with NO ADS! It is a surprising relief not having the top third (?half) of every search result filled with paid spam... The Website Ranking Adjustment has also proved to be quite useful -> each search result has a small icon next to it where you can quickly apply a ranking adjustment for the site - this has allowed me to quickly eliminate a number of no-value-to-me sites and make it more likely that other sites appear at the top. For now I'm very happy giving Kagi my $10 a month.


Years ago my browser choices were driven by compatibility and tooling - eventually Chrome was all I used. In recent years most of the browsers I have tried work without many issues and it has been fun trying a few different browsers for daily use. So far my favorite is LibreWolf:

This project is a custom and independent version of Firefox, with the primary goals of privacy, security and user freedom.

LibreWolf is designed to increase protection against tracking and fingerprinting techniques, while also including a few security improvements. This is achieved through our privacy and security oriented settings and patches. LibreWolf also aims to remove all the telemetry, data collection and annoyances, as well as disabling anti-freedom features like DRM.

2023 February - Kagi Search
A screen shot of Librewolf and Kagi Search.

So far the problems I've had have been covered by the LibreWolf FAQ, if you try LibreWolf I recommend having it open as you get started...

Some settings changes/exceptions that I made are listed below - these aren't 'recommended', just some perspective on what I found that balanced security, privacy and everyday use:

  • Enable WebGL - Disabled by default with the note "WebGL is a strong fingerprinting vector. If you need to enable it, consider using an extension like Canvas Blocker." I found a number of sites I use need WebGL so I enabled it and installed CanvasBlocker.
  • Add an Exception to HTTPS Only Mode for our BirdNET-Pi site since it is setup as local and http only.
  • Enable letterboxing - This anti-fingerprinting measure works by only allowing your screen to adjust to certain sizes, rather than a unique size that might help identify you. I thought the extra space/border around everything would be distracting, but I turned this on, it didn't bother me and now I always have it on.
  • Make exceptions as needed for Canvas Access - To the left of a site's URL in the address bar an icon will appear if canvas access has been silently blocked. On many sites LibreWolf's default behavior of silently blocking canvas requests works great - but on other sites it results in items like icons appearing as strange striped blocks...

The list of extensions below is largely similar to a list I would make for any browser - but just-in-case it is interesting, there are a few LibreWolf specific details:

KeePass Password Safe

There are quite a few password managers available and I've only tried a handful - but so far the one that is the best fit for what I want is KeePass. KeePass runs on your local machine and stores passwords in an encrypted database file. Services like Dropbox can sync your database file across devices, Android apps are available and desktop browser support is provided by Kee. No centralized service to trust, no subscription fees and an offline first experience while still getting good-enough-for-me browser and mobile device support!

(Worth mentioning that KeePassXC is also an excellent choice - it works essentially the same way and can use the same encrypted database files. I currently use KeePass in part because the KPSimpleBackup Plugin is a notable benefit to my personal workflow, but largely the programs are interchangeable - great to have multiple programs that support the same file format!)

I run KeePass with two plugins:

  • KPSimpleBackup - Backup Plugin for KeePass2 - with KeePass it is completely up to you to keep your password database backed up. You should have a backup strategy that covers all of your important personal digital information, but given the extraordinary value of passwords I use KPSimpleBackup to also provide additional backups on multiple machines.
  • KeePassRPC - provides communication between KeePass and a browser plugin like Kee - worth the extra time to setup.
2023 February The Sun Near Home
The Sun Near Home. Charles Miles. 2/6/2023.

It was fun to write this down - it is an amusing game these days trying to guess what tech will survive 1, 5, 10, 20+ years into the future - and maybe an even tougher game trying to guess what tech will remain personally relevant. Even during the short time I was writing this there was an explosion of interest in a Microsoft announcement of AI-powered Bing Search - I suspect it is mostly hype for my personal use, but I've already had some fun at work trying ChatGPT for product descriptions (interesting) and trail descriptions (disappointing) so who knows...

Created by Charles on 1/1/2023. Updated on 1/12/2023.

2023 January Saguaros and Cloud Break Light
Saguaros and Cloud Break Light. Charles Miles. 1/1/2023.

Andrew Whitechapel's 2005 "Getting the Application Object in a Shimmed Automation Add-in" - now only available via the Wayback Machine - was an early code source and inspiration when I start creating Excel files in .NET over 15 years ago.

For many years the COM Interop approach facilitated by the code above was the main technique I used for generating Excel files - but by the mid-2010s it was clear to me that using libraries like ClosedXML, which don't require the Excel application to be installed, are a better approach.

At work the task of moving many years of Excel COM Interop based reporting to ClosedXML is an ongoing, long-term, low-priority task.

At the end of 2022 I tackled converting a heavily used report where the final step of the report creation is splitting and positioning the user's initial view. (Note here that 'splitting' is not the same as 'freezing'...)

I couldn't find a way to do this in ClosedXML... So I decided that after writing the file to disk with ClosedXML I would use OpenXML to setup the split. A simple enough approach (that eventually worked), but working directly thru OpenXML is not my usual code path and the first few failures made it clear that I was going to need some reference material on what properties to set with what values.

I used the one trick I remembered for these files to help me look at the underlying XML - I renamed the file with a .zip extension and then navigated into it. This works and it is a good trick because it doesn't require any additional programs/tooling - if I had managed to immediately intuit the correct code changes I wouldn't have given this hack a second thought... But I didn't get the code right in the first few tries and as I tested code changes I very quickly wanted a better way to take a direct look at the files' XML.

After a little searching I found the Borislav Ivanov's Open XML Package Editor Power Tool for Visual Studio. Once installed in Visual Studio you can drop an Open XML/Excel file into Visual Studio and start exploring. This was fantastic and let me find the last detail I needed...

The code below has so far stood up to some light testing - presented as research and reading material more than code you should copy and paste...

  1.     /// <summary>
  2.     ///     Splits the first sheet in an OpenXML Excel File into 2 vertical panes.
  3.     ///     If the file, workbook or worksheet don't exist the method will exit
  4.     ///     without throwing an exception.
  5.     /// </summary>
  6.     /// <param name="filename">Full Path and Filename of the OpenXML Excel Files</param>
  7.     /// <param name="verticalSplitHeight">Value in 1/20th of a point</param>
  8.     /// <param name="topLeftCellAddressForUpperPane">
  9.     ///     In A1 style - upper left corner of the top pane, left column for both
  10.     ///     panes
  11.     /// </param>
  12.     /// <param name="topRowForLowerPane">Top row for the lower pane</param>
  13.     /// <returns>The Filename</returns>
  14.     public static string ExcelFileFirstSheetTwoSplitVerticalPanes(this string filename, double verticalSplitHeight,
  15.         string topLeftCellAddressForUpperPane, int topRowForLowerPane)
  16.     {
  17.         //1/1/2023 - As far as I can tell ClosedXML doesn't offer options to create a Vertical
  18.         //Split (not Freeze) with the TopLeft Cell set for both panes.
  19.         //
  20.         //Let me know if this is incorrect and this functionality is available - it would be
  21.         //better not to re-open and re-save the file...But all things considered getting the
  22.         //correct view setup for a user can be an important enough
  23.         //feature to merit this approach.
  25.         if (!File.Exists(filename)) return filename;
  27.         using var xl = SpreadsheetDocument.Open(filename, true);
  29.         var workbook = xl.WorkbookPart;
  30.         var worksheet = workbook?.WorksheetParts.FirstOrDefault();
  31.         if (worksheet?.Worksheet.SheetViews?.FirstOrDefault() is not SheetView view) return filename;
  33.         //Clear the view for the new Pane and Selections created below
  34.         view.RemoveAllChildren();
  36.         //This will set the upper pane's top left cell
  37.         view.TopLeftCell = topLeftCellAddressForUpperPane;
  39.         //Setup the split - note that VerticalSplit is the number of rows when Freezing
  40.         //but is "Vertical position of the split, in 1/20th of a point" when splitting.
  41.         //
  42.         var newPane = new Pane
  43.         {
  44.             VerticalSplit = verticalSplitHeight,
  45.             TopLeftCell = $"A{topRowForLowerPane}",
  46.             ActivePane = PaneValues.BottomLeft,
  47.             State = PaneStateValues.Split
  48.         };
  50.         //Set a reasonable Selection
  51.         var lowerPaneTopLeftCellAddress =
  52.             $"{string.Concat(topLeftCellAddressForUpperPane.Where(x => !char.IsDigit(x)))}{topRowForLowerPane}";
  54.         var selectionSor = new ListValue<StringValue>();
  55.         selectionSor.Items.Add(lowerPaneTopLeftCellAddress);
  57.         var selection = new Selection
  58.         {
  59.             SequenceOfReferences = selectionSor,
  60.             ActiveCell = lowerPaneTopLeftCellAddress,
  61.             Pane = PaneValues.BottomLeft
  62.         };
  64.         //Add the Pane and Selection - save the file.
  65.         view.Append(newPane);
  66.         view.Append(selection);
  67.         worksheet.Worksheet.Save();
  68.         workbook.Workbook.Save();
  69.         xl.Close();
  71.         return filename;
  72.     }
2023 January A Rainbow for the New Year
A Rainbow for the New Year. Charles Miles. 1/1/2023.

PS - COM Interop is still a key desktop technology especially if you want to read data from, or write data to, a file the user has open in Excel. For a modern update to Andrew Whitechapel's approach see Jamie Faix's Automate multiple Excel instances on Codeproject. I have lightly modified Faix's code for the ExcelInteropExtensions in my Pointless Waymarks Project.

Created by Charles on 12/20/2022. Updated on 12/27/2022.

2022 November Fall Color in Ash Creek 01
Fall Color in Ash Creek 01. Charles Miles. 11/7/2022.

2022... This year started with a week long septic install and ends with COVID - questionable bookends but there were lots of great times and great people in-between. Notes from the end of the year.

Pointless Waymarks CMS - Main Interface - 12/25/2022
The Main GUI Interface for the Pointless Waymarks CMS.

I've been working on the Pointless Waymarks CMS for over 3 years! I currently use it to create and maintain this site, Pointless Waymarks and 2 private sites. This is by far the largest and longest-lived personal software project I have worked on and I am excited to continue development in 2023! The targets/goals/setup of the project still seem like good choices to me:

  • Desktop Software: This continues to be a good choice for zero cost personal projects that are fully functional offline - three years in and all things considered I'm glad Pointless Waymarks is a WPF Windows Desktop Application.
  • Static Sites with Simple Presentations: The sites that I am creating and maintaining with the Pointless Waymarks software are purely personal - no growth goals or investors, no need to be on-trend. I continue to suspect that static sites with simple presentations are a great bet for long term durability with minimal maintenance.
  • Offline Viewing: with a custom way to organize and present content why limit the output to online presentation - the project includes a simple offline viewer.
  • Custom Software: There are a practically infinite number of programs, sites and frameworks that you can use to create websites - but I remain very happy with the decision to write custom software. It can be surprisingly nice to use software that is actually 'for you'.
Pointless Waymarks GeoTools - Connect GeoTagging Preview
Pointless Waymarks GeoTools - Garmin Connect GeoTagging Preview Screen.

Late this year I added a GeoTools GUI to the Pointless Waymarks Project. This program is centered around geotagging photographs and adding tags automatically based on locations.

My interest in geotagging photographs has waxed and waned over the years. Part of the reason that my interest dwindled is because I believe that it is rarely appropriate to make public the exact location of a landscape photograph. But more recently I have been convinced that having the GPS location of a photograph for personal use is well worth the cost of having to carefully manage what metadata is exported when publishing an image.

Colliding with my renewed interest in geotagging is my long term use of Garmin Connect. In addition to geotagging from local .gpx files the GeoTools program can use an Unofficial Garmin Connect Client to geotag photographs.

Pointless Waymarks GeoTools - Feature Intersect GeoJson File Setup
A screenshot from the Pointless Waymarks GeoTools showing the setup screen for GeoJson files that will be used as a reference in Feature Intersect Tagging.

I have added tags (keywords) to at least 8,000 photographs by hand over the last two decades. Especially in the last decade I have tried to include location information including land ownership and management agency, for example: 'Santa Catalina Mountains', 'San Pedro River Valley', 'Coronado National Forest', 'Zion National Park'. For the most part I have remembered to apply these tags and have applied them correctly - but just like all 'by hand' data entry no matter how much you know, care and try there will always be mistakes...

After working with more geospatial data this year it occurred to me that tagging locations - if the photograph is geotagged - is really better done by a computer! I'm based in the Southwestern United States and there is quite a bit of publicly available data about Public Lands - a great example of the available information is the Protected Areas Database (PAD-US) from the U.S. Geological Survey.

How it works:

  • You setup reference GeoJson files for the program to use - including telling it which properties you want to become tags
  • You select the photographs to tag
  • The program scans the GeoJson files for features that intersect the photograph's location and creates tags from the intersections

The Pointless Waymarks GeoTools Feature Intersect Tagging works offline and it is easy to create your own reference files (perhaps for unofficial areas/names - is a good starting point. Because the program scans thru the local GeoJson files on each run it can be relatively slow - but for now it seems 'good enough' considering the amount, quality and value of the tags that it produces.

If you are a C# programmer it is worth knowing that this functionality is fairly simple to code if you leverage the NetTopologySuite.IO.GeoJSON and NetTopologySuite packages.

Pointless Waymarks GeoTools - Feature Intersect Tags
A screenshot of the Pointless Waymarks GeoTools showing new tags generated from Feature Intersect Tagging.

When I was in High School in the 1990s I saw Night Music on TV - I remember several episodes but the episode that stick in my memory the most over the years is Night Music #210. This episode manages , in 40-some minutes, to show Diamanda Galas, Indigo Girls, Daniel Lanois, Aretha Franklin, Sonic Youth and Evan Lurie & His Tango Band in both individual performances and collaborations! Rewatching random episodes of Night Music in 2022 it strikes me as the most interesting, diverse and authentic media I have ever seen - it is almost beyond belief that this made it onto commercial over-the-air TV - what a marvel...

2022 December Sunset and Moon
Sunset and Moon. Charles Miles. 12/6/2022.

Created by Charles on 7/17/2022. Updated on 8/17/2022.

2020 December Lines to the Past
Lines to the Past. Charles Miles. 12/6/2020.

At the end of 2020 we did a big clean-up at work - old manuals for tape backup units, routers with notes about bad ports, floppy disks with long disused software, prismatic CDs with mysterious sharpie scribbles, an array of legacy cables, on and on... Decades of moving forward and leaving things behind.

My favorite two items from the cleanup were old handsets from a telephone setup that I believe date to the late 1990s and the box for Delphi Power Builder Software box. Mostly these are just items of amusement and nostalgia - fun techy anti-relics good for a knowing laugh.

But it turns out that Delphi and (different) phones are still in use in the business today: the Delphi is important but aging, sometimes painful and has largely been replaced by .NET code; the phone system is more sophisticated than handsets with labels. I'm glad we have moved on, but I have to admit that corded phones and Delphi look suspiciously functional...

2022 August Borland Delphi Studio 7 and Adobe Photoshop 3 Disks
Summit Hut IT Office! Charles Miles. 8/13/2022.

In the IT area, when the motion detecting lights question my existence and leave me in the dark, the old relics seem to be giving me silent knowing glances, subtle suggestions that maybe I have been going in circles - relentlessly making things more complicated when these phones and that version of Delphi might have just done the entire job the whole time - scary ghost stories from long dead tech, I exit the IT area and head back to my desk in the Buying Office to calm my nerves with a YouTube video about the new improvements in the latest preview vNext version of .NET Core while downloading a .NET Rocks episode about a technology I don't yet know exists...

Created by Charles on 6/10/2022. Updated on 7/21/2022.

There is so much Starlink information online that it can be hard to discern the useful details... Most of this post is just a 'for fun personal story' - but if you considering a Starlink system and are here for info the tldr quick details I can offer are below, ymmv:

  • Not only do you need an obstruction free view of the sky but you need a view in a specific direction (basically North in North America I believe)... In retrospect this seems obvious but in my first round of research I missed the part about the specific direction - I hadn't considered that our generally rather open view of the sky might not look the right way... (Thankfully it does!)
  • The Starlink cable is proprietary and has connectors permanently attached on both ends - you'll want a 3/4" hole thru your wall for the cable - this is larger than anything I have ever wanted to pass thru a residential wall. For most people this is a non-issue involving enlarging or creating a hole in your wall - but if you are in a rental, end up with some special circumstance or, like me, just have a deep dislike of holes in your house this is probably worth knowing in advance...
  • Upload speeds are not impressive - if this rather vague statement concerns you at all be sure to look at reported speeds online and confirm the upload speeds will work for you...
  • We are happy with the service so far, but a friend 1.5 miles away who started service a few weeks before us is unhappy with network interruptions causing streaming videos to freeze and VOIP calls to drop, why? Who knows... And for reference we are fairly 'easy' internet consumers (no games, not so picky about streaming quality, we have remote work meetings but on the order of a few week max... )
  • Getting an invite to start service was the 'hardest' part of the whole process for us. (We waited for and are on a residential service plan.)
  • If you want to do anything interesting with your router (or maybe just don't want to re-setup various devices around your house) just order the Starlink Ethernet Adapter immediately...

The long version:

In the summer of 2021 my wife and I moved to Vail, AZ - the property isn't tremendously remote, but it is much more rural than our homes in Central Tucson (where we lived for two decades). When we moved we tried to ask all the right questions - and had a friend who lived in the area to consult - but in retrospect, regardless of amount of time and research, I just don't think we would have ever understood the differences moving 45 minutes away would mean - Internet service is one of those slightly interesting details...

In the early 2010s we switched to using mobile hotspots for internet - at first because we had problems with a DSL connection, later because it just worked and it was great to travel with. For many years this was directly thru carriers like Verizon, for the two of us and our internet usage the data caps generally weren't a problem. But the addition of the NordicTrack iFit Treadmill (which essentially streams video while you workout) and COVID making our long time patronage of Casa Video less attractive data caps became a problem. Rather than switch to a wired connection in 2019 we tried an unlimited AT&T data plan thru OTR Mobile, great for awhile but we had problems as the company grew, and later from Unlimita Wireless.

Our Nighthawk MR1100 4G LTE Mobile Router and Unlimita Wireless Plan made it to our new house and sometimes worked better than it did in town (thanks, I think, to a hillside location with a great view). But with our new location things changed - we started working remotely more often (during the Covid shutdowns we were physically in the office - part of a radically slimmed down staff doing 'everything' in order to keep the business going) and with a longer commute, gas prices soaring and inflation cutting into our budget we started to think about a more remote future - more remote work? Remote education opportunities? Maybe other things ... ?

So in 2022 when the opportunity for Starlink Residential Service came up we said yes! Basically at our location Starlink seems like the only reasonable chance for any considerable improvement in our internet connection. We don't have any options for 'wired' internet - other options we looked at: Simply Bits, Rincon Wireless and HughesNet - I'm grateful to have all these choices at our location but considering connection quality, price, speed and data caps Starlink seems like the most interesting option atm.

The gen 2 system that we received has a dish (rectangular), mount, long cable and router. With a largely unobstructed view of the sky to the West/North/East our setup was pretty simple - put the dish on the mount, set it in the yard (eventually we used the Starlink Pipe Adapter to attach it to a mount on the roof), enlarged an existing hole from outside to inside the house and plugged it in. For us it 'Just Worked' and so far the app has reported speeds between 40-160 Mbps down (seems like 75 is typical) and 7-20 up (often on the lower side of that...). The downloads are much improved from our previous setup! The upload speed is basically the same, or sometimes a little slower than our hotspot setup. Too bad the uploads haven't improved, but for us it has not been a huge problem and for the most part the download speeds mean more for our current internet usage.

Probably the only install detail of note is that we had to enlarge an existing hole thru the wall (to 3/4") to accommodate the Starlink cable. The cable has custom connectors at either end (apparently ethernet with custom power - see Hacking the Rectangular Starlink Dishy Cable) that you aren't intended to detach. (Btw if you are passing the connector directly thru the wall (not thru a nice cable pass thru) consider taping the connector - the cable enters the connector near the mid point and if things go wrong and you need to pull the cable back the connector can catch and pivot into a shape that is quite like a wall anchor making getting it out of the wall frustrating...)

Now that the system is setup and running it seems like the biggest challenge was getting a dish/service - our timeline: email interest June 2020, deposit February 2021, changed address (different Starlink zone I believe) May 2022, subscription opportunity end of May 2022.

I'm excited that Starlink is working well for us so far - but have been concerned by my close by friend's report of issues. The investment in the equipment is admittedly a bit of a gamble, who knows if Starlink will be around in 5 years and if they are what the quality/price/details of their service will be...

2022 July Starlink Dish mounted on the former DirecTV Mount
Starlink gen 2 (rectangular) dish on a Starlink Pipe Adapter attached to a mount previously used by a DirecTV dish (on the ground). The mount that came with the system is in the lower right - while we tested the system we just sat it in the yard (secured with tent pegs and cinder blocks - it can be rather windy here). Charles Miles. 7/17/2022.

Posts Before:
2022 April Dusty Sunset
2022 April Sun over Cat Mountain
2022 December Peering into Winter Water