banner

















Blog

Home

Comments

Read and Write

Recent Posts

Atlanta Trip

Family

Sliders

Happy Thanksgiving

When God Shows Up

Elon Musk

Busy Day

DX

Ham Radio Day

Not Again

Categories

Spiritual

Health & Fitness

Politics

Ham Radio

Weather

Website Technology

Archives

Repeaters

By Callsign

By Channel

By County

By Frequency

Repeater Map

Pictures

The Story

The Lift

The View

The Seawall

The Pine Tree

The Kayak Trip

Filmmaking

More Memories

Genealogy

DeLoach

Hughey

Personal

About

Weather

Ohatchee Radar

Hurricane Tracker

US Severe Weather



HTML and PHP

OCTOBER 21, 2022


HTML

10/20/22 02:45 PM

Had some more fun changing, and cleaning up, the format for comments here on the blog.

It's still possible to see what has been done without having to add a comment or do anything to the blog. Simply click on the "Display Comments" menu item in the left-hand menu to view what has been done.




Web Stuff

OCTOBER 20, 2022


Web

10/19/22 10:00 AM

I made the normal changes to my system to add today's post. When I went to test the search function it was not working. Worse yet, I hadn't tested in a while and wasn't sure how far back I might have to go to find the problem.

Usually, I know exactly what the problem is and just have to go and do a hunt for the location of that known problem. Unfortunately, that was not the case today.

I went through a lengthy process of deleting and adding back code in an attempt to find the problem. The problem was difficult enough that I seriously considered doing away entirely with the search function. That is, until I found the problem. Apparently, back on October 12 I did a sloppy copy and paste and left out some critical code.

That's what broke the routine. And once I knew what the problem was, I was able to copy some good code from an existing post and set it against the October 12 problem post to get the whole search routine working again. Problem solved!

While I was doing the code thing, I decided to add a date and time function to user comments. It went much better and faster than I expected and seems to be working well, although no one has yet used the comment feature. Oh well, the coding is fun anyway. And, if you want to see the new feature without adding a comment, you can still click 'Display Comments' over in the menu to see the evidence of the new change.

My greatest challenge continues to be the amount of time it takes to add a post. As I've noted before, I have to do several things to simulate what a tool like WordPress does in a more automated fashion. And as I've also noted before, the juice is just not worth the squeeze to try and add that functionality to my system. Either way, it's a lot of fun and that's why I keep at it.




October!

OCTOBER 01, 2022


October

10/01/22 06:40 AM

Well, it's a new month! And with a new month comes a busy season in the web development side of the house. There are new test pages to be built. Along with that, there's new archives and primary pages to be built. There are new labels to be affixed and a whole load of other new things to be constructed.

It's property tax season too. Statements are mailed out the first of October here in Ohatchee. And, the yard cutting season is also coming to an end.

We're just over a week away from our three-month anniversary here in the new house, (new to us anyway!) and with it there are some odds and ends to take care of such as repairs on the garage door opener and the ice maker.

The winds and Fall chill are already in the air and we're looking forward to the kind of lower temps we haven't experienced since we lived in Douglasville. Elections are just around the corner and Thanksgiving and Christmas are waiting in the aisles.

There are so many good things yet to come before we wrap up 2022 and start our journey into 2023!




Bots

SEPTEMBER 19, 2022


Bot

09/19/22 07:30 AM

Well, the more I build in PHP, the more I learn about why things are the way they are. I'm talking about those crazy messages to which I have to respond to prove I'm not a 'bot' or anything like that.

I chose to do sort of the opposite. If someone doesn't leave their name, then I don't send an email to my account. If someone does, then I send the email notification.

A bot can't leave it's name so I shouldn't get emails unless someone really created a message and left their name to confirm who sent it. Of course if someone leaves a message but doesn't leave their name, then I won't be notified.

That's the downside of what I'm having to do to avoid the 'bot' problem.

Footnote

Bots2

More on Bots

09/19/22 07:55 AM

Well, it just hit me that a comment is required and if comment is blank, then the visit has to be from a bot (or someone who only visited but didn't leave a comment or a name.) Either way, that works better.

So, I'm checking to see if a comment was left (since it is a required field.) If none was left, then send no email because it must have been a bot. If a comment was entered, then it's not a bot and I send an email to my account.




New Features

SEPTEMBER 16, 2022


Website Update

09/15/22 07:15 PM

I've added two new features over in the upper portion of the left hand menu. One is for adding a comment and the other is for reviewing comments. If you want to add a comment, feel free to view them first. It's up to you.

I know I said that I don't really expect a community of readers. But it's still fun to build new features that would be put to more good use if I had a community.

I've always felt sort of odd that I have never included anything to allow responses from those (imaginary) readers. But without a readership, only now have I decided to try my hand at building a comment feature.

I could take what I've done and multiply it such that comments might be added for each post. But, without a real community of readers it's just not worth it to build (and maintain!) the necessary infrastructure.

And so, I'll see if there are any real readers out there (beyond my faithful and loving wife who always reads and has a word of encouragement for me.) No expectations but I thought it would be fun to see if I could build something simple - and especially without having to add any database/SQL features. I've been there before and am not real interested in going back again anytime soon.




New Web Feature

SEPTEMBER 06, 2022


Rep Map 2

09/05/22 05:30 PM

In the left-hand menu, I added a new feature in the repeater section to display a map of the repeaters I can reach. It corresponds to the Repeaters by Channel page and displays the locations of those repeaters.

I'm still amazed at the distances I can reach with this mountainous terrain that we have up here in the northern part of the state. Even in some points south, such as Cheaha Mountain at just over 4,000 feet, we find prominent repeaters that are well known throughout the south for their coverage, due to their antenna elevations.

I'm up to 19 repeaters, including one in Summerville, Georgia that was very active with the recent flooding that occurred up that way and that made the news. The reports I was hearing from that area were absolutely amazing. And so have been the video reports that I've seen in the news. Incredible!

Footnote

Cousins

John Frederick Banzhaf

09/06/22 07:45 AM

Today would have been my cousin's 67th birthday. We lost him just over a year ago as he was approaching his 66th birthday.

Long ago, I used to call him up to wish him a happy birthday and then would call my sister the next day to do the same. I still call my sister each year, and that call is a reminder that my cousin is no longer with us.

Johnny is survived by a son, (Forrest) who was named after my Father, as was I. His son now lives with, and is cared for by, a niece (Liz) and her other half (Josh) up in Atlanta. I look forward to seeing them and my sister and the rest of her crowd at our Thanksgiving celebration this year.




PHP Code

AUGUST 25, 2022


PHP Code and Logic

08/25/22 06:55 AM

The problem with making changes to the PHP code on this website is that I don't do it often enough to recall everything I've learned. Also, there is so much more to learn and figuring out how to use those new things takes time.

Yesterday's code changes are a good example of what I'm talking about. I somehow forgot that the = (equal sign) in PHP is actually a == (double equal sign) and it's the same for the !== (not equal sign.)

Worse yet, when PHP fails it generally results in a blank screen. So, you have to change or delete code and retest until you find the problem. This can be a real pain and a minor problem related to a simple code change can take quite a while to diagnose and correct.

This was the case in yesterday's changes to my search logic. Putting in the double equal signs fixed one of my two problems.

The second problem was a bit more subtle. It was not a code error, but rather a logic error. By testing several conditions, I found one that did not respond properly to my logic and had to rewrite my code to include that particular scenario.

Turns out that with the high number of posts I have, I can hit a condition where my search finds a hit but the percent of total still remains at zero. I wound up having to hard code for that scenario by injecting a statement that displayed a less than 1% to cover the situation.

I wonder if my logic failed to account for any other unique scenarios like that one?

Footnotes

08/25/22 07:55 AM

PHP Logic Example

If you want to see a realtime example of what I'm talking about, try typing in the word the in the search box in the upper right-hand corner of your screen and then press the search button. Scroll down to the bottom and it will reveal the condition I anticipated.

Now type in hello and press the search button to see a realtime example of the other condition that I failed to anticipate and where I had to hard code the less than 1% PHP statement.

The logic I wrote into the code checked for two conditions. (First) the average had to equal zero and (second) the number of hits must not equal zero.

New Lunch Hangout

Patty and I rode over to our Walmart for grocery pickup yesterday, and went searching for a good place close by where we could eat lunch. We are big users of Google Reviews and almost missed our new favorite hangout due to a couple of bad reviews among many good reviews.

We were thinking Mexican and had tried Old Mexico and took a risk and tried El Patron. The place was nice and clean and while not quite as new as Old Mexico, the food was much, much better. I think we've found one of our new lunch hangouts!

Two More Logic Problems

08/25/22 11:55 AM

I found two logic problems with my PHP code. After the PHP checks for the two conditions I mentioned above, it should also check for one condition (were there any hits on the search) and if the condition is not met, the message I added (with the percentage) should not be displayed.

For the other condition, even if no hits were found, I would still like the user to be informed of the search duration that is not showing up.

Problems fixed!




Time Flies

AUGUST 24, 2022


Time Flies

08/24/22 07:15 AM

Wow, where does the time fly? It's already Wednesday and only a week away from September!

I can't say enough about the great job the guys did in the yard yesterday. Sounds like every other Tuesday will be our yard day from now on.

Looking forward to a lunch out with my soul mate and picking up the groceries, especially since we're buying some new plastic utility shelves for the carport to get everything up and off of the ground. Should be a very nice change.

Will be interesting to see what we choose for our lunch out today. Not much else to report.

Footnotes

08/24/22 07:45 AM

Monster

I think we've converted our cat into a monster. We've let her become a part-time outside cat and I think she wants to go full-time. All she does now is fuss about wanting to go outside, even if we're both inside. What to do?

Facebook

I got off of Facebook (again!) about 3 or 4 days ago. It started out as a way to avoid any response to my upcoming birthday, and finished as a means to get away from posts for the upcoming 50th class reunion, not to mention our neighborhood facebook account. I just don't care for being social in those arenas.

Just read on Twitter that Facebook has experienced a major hack and it is affecting many of their most followed accounts. Interesting!

Search Function

08/24/22 03:30 PM

Just modified the search function to provide a percentage of total posts where the search string was located, in addition to the total number of posts where the search string was located.




More Repeater Stuff

JULY 27, 2022


Repeater 2

07/27/22 06:55 AM

I made some more changes to my repeater page based on new repeater research. There is now a 'notes' section that explains what I'm doing and what I'm finding.

The repeater page can still be accessed via the left-hand menu near the top.




Three Things

JULY 19, 2022


List

07/19/22 08:18 PM

This post will be short and sweet since it's late. I spent most of the day 1) moving the j-pole antenna outside and 2) completing the building out of my list of all the repeaters that I can hit and 3) adding a new feature to the website to present that repeater list.

On the left menu right near the top, I've included a new menu item for the repeater list. Feel free to check it out.

I was quite surprised at some of the repeaters I was hitting and especially for Cullman, which is quite a distance away.

I was also pleasantly surprised at getting the hole drilled through the outside wall of the house where I could feed the coax to the antenna from the rig. The difference was night and day!




Website Visits

MAY 24, 2022


Website Visits

05/23/22 07:25 AM

I've mentioned the log I built for my website. If I haven't mentioned it, I also constructed a PHP viewer that will display my log of visitors to the website.

Over time, I've expanded the functionality of my log and the logging program. I already had been logging the city and country from which the visit took place, in addition to the more technical things like the IP address.

I wound up deleting the old log a good while back and built a new one around ten days ago. I've gone back and added a field to each row of data that states the visitor's organization. For example, Amazon or Google.

Like before, most of the visits come from web crawlers that exist to build indexes for the website pages that they crawl. These indexes provide for faster access to those pages when a person goes searching for something on the web.

If a visit is made by a crawler, the logging PHP program now adds the name of the organization that owns the crawler. If a visit is made by an individual, the PHP program adds the name of the company used by the individual to access the web. For example, GoDaddy or Verizon.

Over ten days I've had 363 entries provided in my log. I've also manually added the organization name and IP address from those log entries to my logging program. So, as the log obtains more entries the logging program becomes smarter and is able to provide those organization names for future log entries. It accomplishes this feat by using the IP address as the unique key for each entry.

It's pretty cool to see the PHP log program gain artificial intelligence and to see the website log automatically capture those organization names based on the unique IP address from a previous visit!

Foot Notes

05/23/22 12:37 PM

Flash! Had to do rescue #3 today. The first two were baby rabbits but it turns out that this rescue was for a very young gray squirrel that was able to stay rested and alive by finding a place to hold on at the opening of the automatic skimmer. Fortunately for him the skimmer wasn't running because the water flow would have probably pulled him in without providing much opportunity for survival.

On an unrelated note, it seems like the weather forecast will often call for several days of rain with each day being forecast to provide a full day of rain to our area. Fortunately, or unfortunately, that rarely if ever happens.

That's been the forecast lately but the rain seems to come and go during those days with a much smaller overall level of rain-fall then was called for in the forecast. I'll be expecting multiple inches in the rain gauge only to find somewhere between half an inch to an inch on many of those days. Today may be shaping up to be one of those days where multiple inches really do arrive.

On a different note, I got a run in and a lot of weeding before the rain arrived. Hopefully the rain will hang around for the rest of the day. We sure could use the water on the grass. And, I've got to do something about those darn weeds!

Oh, and by the way! I saw something on the weather map yesterday that resembled a late-stage (disorganized?) hurricane. It just missed us to our east (over near Pensacola) and turns out (according the what my wife saw on the local weather reports) to have been a late-developing system that formed just off the coast before making landfall. Interesting!




More Blog Updates

MAY 16, 2022


New Blog Update

05/14/22 7:55 AM

I added back a web log yesterday (Friday, May 13th) and it's been interesting to see the locations where the hits are originating. I can't tell who's there, but I can tell that the hits are coming from users who are clients of the web service providers that own the pool of IP addresses from which the hits are coming.

I also intend to add back the capability to keep my IP address logged so that I can eliminate any logging activity that comes from that IP address. That will allow me to make changes to the blog without those updates presenting log entries.

I'm also anticipating adding back the capability to see website stats for the hits on the menu and various pages on the website. It will be interesting to see what's being reviewed and how often, and also whether or not the hits are coming from users via web providers or web crawlers owned by folks like Google.

More on that to come as I get things developed.

Foot Notes

05/14/22 03:50 PM

Well, in paragraph #2 above, I went ahead and wrote some code with a hard-coded IP address in it. That should suffice in the short-term, since my IP almost never changes, but I'll need to update that code to remove the hard-coded IP address and ensure the tested IP address is the current IP address - just in case the IP address does change.

From paragraph #3 above, I went ahead and finished up the hit counters for all of the pages I built. I won't be tracking visits to other sites, but will be tracking all visits to anything I have built, which turned out to be 15 pages in total.

I want to dabble with some more changes to the tracking of visits and the logging, but am not quite sure what I want to add. More to come on that...

While I'm able and usually do write at least a day ahead of anything I publish, I've also added the capability to review unpublished material as it will appear when it is published and have been enjoying that feature for a while now. It's pretty cool the way it works!

I've also manually added the owners of the webcrawlers and web service providers to the log entires and plan to add some code to do that automatically. That should be an interesting project! (Addendum) In fact, I've been doing some of that today (05/15/22) and it turns out to be a very interesting and challenging project!

05/15/22 7:00 PM

Finally getting some much needed rain as can be seen below.

WX051522-2




More Search Updates

APRIL 20, 2022


Search

04/19/22 11:25 AM

One of the things I failed to test, and therefore failed to incorporate into my updated search routine, was the former test on whether or not a search term was entered and how it was handled if it was not found. I kept getting odd messages from a PHP program that was behaving as if a search term had been located in the search file, when in fact it had not.

I wound up having to nest if statements (first) to check for whether or not a search term was entered and then (second) to check whether or not the search term was found in the search file. I had not ordered the logic correctly, which was producing the odd messages.

Reordering the logic and ensuring the syntax was correct both took more time and effort than I had anticipated. However, in the end I got it working and haven't received any more odd messages being presented by the search PHP program.

Foot Notes

04/19/22 05:56 PM

On the weather front, we've had two and a half inches of rain in the past week. It all started on Thursday April 15th with our new rain gauge capturing one and a half inches followed on Saturday by a quarter inch and then again on Sunday with an additional inch.

While Alabama ranks #4 among states with the most rain per year, our neighbor (Mobile, Alabama) ranks #1 among cities with the most rain each year in the U.S. We have most certainly experienced that rain over here in the Spanish Fort, area as well. Only Hawaii (63.7"), Louisiana (59.15"), and Mississippi (56.8") lead Alabama (56.0") in terms of annual rainfall averages.




Another Search Update

APRIL 19, 2022


More Web Stuff

04/18/22 10:22 PM

I decided to further expand the functionality on the search feature. I wanted to know how many posts there were and how many of those posts contained the search term.

I actually wanted to know how many times in total the search term was found, but writing the code for that would have been far too time consuming. I was able to use the search and replace all function once to simply and easily add code to each post in the search file that would obtain the number of posts containing the search term, whereas I would have had to manually update each and every post (376 posts as of this writing) to find out how many times in total the search term was found.

So, I went with the easier route and was very excited to see the program work and produce results. Now when a search is performed, the program will report both the number of posts and the number of posts containing the search term.

On a related note, I've noticed that a search sometimes will run slower on the first shot than on subsequent runs. I'm guessing there's some caching going on to produce that kind of result.

Still, it's all pretty cool to me!




Search Feature Update

APRIL 18, 2022


Website Update

04/17/22 12:31 PM

Well, I finally went back and performed the update to the website search function that I mentioned in a previous post. I used PHP to record a start time and an end time (based in seconds) and subtracted the former from the latter in order to determine the length of time used to process the search of all posts written to-date.

The difference was always less than one second so I decided to make the search file larger and see if that made any difference. I tripled the size of the search file by copying it back to itself two times, in addition to the initial file that already existed.

To my surprise it still performed a search in less than one second. In order to check my work, I confirmed that I was getting 3 results for each search, one for each of the copies I had built into the file when I tripled its size. Based on those results, I'm guessing it's going to be a long time before the search time extends beyond 1 second and the coded message for that condition executes.

Foot Note

04/18/22 10:05 AM

I got the microtime function working, which means I am now reporting sub-seconds. I will go ahead and post this and then add to these comments when I get the format function working.

That function will allow me to reduce the length of the floating point time output. In fact, as I typed floating point, I realized that it might be easier to convert the floating point number to a string and shorten the length of the string.

More to come very soon...

04/18/22 10:27 AM

I was able to format the search time by converting the floating point number to a string and then using the substr function to reduce the total length. It all seems to work well now!

I was also very surprised to see how little time the entire search took. At the present file length (743,158) my search took .00136303 seconds. That's 1.36303 thousandths of a second.

That's very fast and very cool!




Search Function Update

MARCH 25, 2022


search

I spent a good amount of time today attempting to update the search function I created here for the website. I like the way the function works, and it works quickly. However, I wanted to see how quickly so I set out to have the search php program also calculate the amount of time it took to run and display that value in the search result output.

Each time I create a blog entry, I add it to the file that is searched. Currently there is about 700k of data in that search file. Much to my surprise, the php search always runs in less than one second.

I found the microsecond function that I could have used to display the exact value in microseconds (parts of a second) of the start time subtracted from the end time. However, the server does not support the microsecond function so I got shot down on my attempt to create the update to the php program.

As a result, I let the php program simply display the < 1 second message based on the fact that the seconds value in the start time and end time is always the same. I'll test that difference from time to time and if it ever goes over one second, I'll update the process to reflect the math and display the actual calculated value in seconds in the output.




Archive Update

FEBRUARY 27, 2022


Archive

I was testing my search capability and, just like in other instances, discovered an anomaly. It seems that a search pointing to the current month still points to an archive even though no archive exists for the current month.

No archive exists for the current month because posts from the current month are located in the index file, which happens to be the primary set of posts and the set that comes up whenever the site is visited.

To remedy this problem, I simply built an additional archive file for the current month and will have to add posts for the current month both to the index file and to the archive for the current month. It's one more thing to remember but corrects the misleading message produced by the search feature that pointed people to a current month archive that did not actually exist.

Just one more reason I enjoy building the code for this blog and the challenges associated with fixing website problems, even if they only arise from misleading messages.

SIDE NOTE

P.S. I'm still enjoying using Microsoft Word to spell check my work. It sure has been helpful for spell checking words I didn't know as well as careless spelling mistakes.




Microsoft Account

FEBRUARY 22, 2022


Microsoft Account

When I purchased the new PC I'm using, it asked me to enter my Microsoft Account. I've never really seen any benefit from having that account, but decided to be a good lad and look it up on my phone and enter it during the setup.

Well, yesterday I accidentally brought up Microsoft Word and my Microsoft account remembered I own a copy of Word and actually brought it active for me. How cool was that? I certainly wasn't expecting it.

And now, with my new and verified copy of Word, I was once again able to start spell checking my posts. I went back through all of February and then went through all of the posts for the category lists.

At some point, I'll go through the past months and get everything cleaned up. That's been really bugging me as I knew there had to be more than a few misspelled words and even a bit of grammar I could clean up. And both did indeed need some attention.

Never thought I'd hear myself say it but, thank you Microsoft!




Website Video Test

JANUARY 19, 2022








Still Under Construction

JANUARY 04, 2022


Under Construction

Yesterday, I finished adding back all of the entries in the archives and also finished updating the posts in the categories and the related menu work.

Here forward, I am working on the search feature and hope to spend some time editing my spelling and working on the most recent posts.

It's not like I have an audience that will use these features, but working on them (even if just adding them back) is what I enjoy most about working with this website. I look forward to dabbling with the other ideas I might be able to bring to the table.




Under Construction

JANUARY 03, 2022


Under Construction

The website may look a bit wonky for a while since I'm working to add some technology back that I had removed a short while ago. I'll have to put the stuff back and add the technology updates that fall between the time I removed everything and the present.

I haven't decided how much of the technology I want to put back of everything I removed. I'll try to figure that out along the way, or quit when I get tired - which ever comes first.

LOL!!!




Computer Hacking

DECEMBER 22, 2021


Computer Hacker

My first computer was purchased back in the late 70's. I've seen a lot of firsts in the technology sector since that time.

I saw laptops show up on the scene. The first of the heap were very clunky. I saw dial-up modems and ram memory starting at 4k. When 32k hit the scene we couldn't imagine anyone needing that much, other than maybe a business.

I saw the internet and the world wide web become popular. I saw client/server when it arrived. Oh my, I could write a book about all of the firsts that came along. But, there's one arena that showed up with little fanfare and shocked all of us. It was the world of computer viruses, worms, trojan horses, etc., and hackers!

I built a very simple virus at my office, way back when, just to see if I could do it and to see what I would do to protect against it. The level of sophistication in that world that has now taken hold came in quickly and has taken off without me. In other words, there's no way that I (or anyone else for that matter) can keep up with all that has happened in a very short time.

Fortunately, I don't need any sophisticated protection. Even this blog, which is not well protected, has no real intrinsic value to me. If someone wants to hack it, I'll start over.

In fact, I used to keep a log of all my website visitors with a PHP program that I wrote, and someone hacked it. They didn't actually hack the PHP program, they inserted their malicious code in my log. And, when I went to use the other PHP program I wrote to view the log, it of course executed the code the hacker had inserted into the log and sent me to a website where I didn't want to be.

I exited the site quickly, and fortunately without incident.

Finding the hack was not so fast... or easy...




Gaming Systems

DECEMBER 20, 2021


Gaming

I've been researching gaming systems for a family member and am amazed at how much has and has not changed over the years. Gaming systems are all about system performance, and that is an incredibly complex area in which to become an expert. There are so many dependencies in that arena.

I spent a lot of years dabbling with system performance across a wide variety of environments including mainframe and client/server, not to mention desktops and laptops. At the end of the day, performance means one of two things.

Either you have a bar you have to reach in terms of performance requirements or you are trying to determine the limiting factor in a specific architectural scenario. Once the limiting factor has been determined, more resources can be added. At that point, performance requirements have been met or the search continues for a new limiting factor.

In the gaming world, the application can also be a limiting factor. Is the application smart enough to use all of the hardware? For example, can the application use multiple cores and multiple threads?

It will be interesting to watch this scenario unfold and discover the results.




High Speed Internet

DECEMBER 13, 2021


internet

There are a number of benefits to the new place including access to high speed internet and streaming services to go along with it. We had little of either in the old place since we were out in the sticks. Needless to say, being away from everyone and on the ocean came with a stiff price for a lot of things.

When we first moved to the old place, I was still with IBM and used a cantenna from Verizon to access all of the internet I needed for the job, even with video and the strong online focus. The cantenna was destroyed during hurricane Michael and had to be replaced due to the surge.

Interesting that just after I retired in July of 2018, Verizon did away with support for the cantenna I had been using and so I pretty much did away with internet, except for what I could get with my laptop tethered to my phone. Basically, it was just enough for things like email and blogging. Plus, I no longer had IBM to pay for my very expensive internet, so it just made sense.

Well, now we're enjoying affordable high speeds and all of the bandwidth we need for streaming, not to mention pretty much anything else we may want to do in the future. With the more demanding needs I picked up a powerful new laptop at a surprisingly good price and have been delighted with its performance. I forgot how nice it was to have a fast laptop that no longer required me to wait on things.




Back to Blogging

DECEMBER 10, 2021


Blogging

Well, it was bound to happen. I just enjoy the technology far too much to stay away from it for very long.

We put our house up for sale in June of 2020 and I dropped out of the blogosphere. We sold the house on August 12, 2021 and purchased the new house on August 13, 2021. And now, several months later, I've tailored the blog to suit our new lives and brought it online again.

I've left some of the old stories, pictures, and posts from our time on the water in Florida and look forward to sharing our stories of the adventures yet to come on our journey.

I started to put a title on this blog entry of Blog 2.0 but the truth is the version is much higher than two by the time you count all the years I've been blogging and the number of times I've restarted.

Once again, this blog is more a journal or scrapbook than anything written with the expectation of a readership. Still, if you have dropped by, I welcome you and hope you enjoy your visit.


NEW FEATURE!

Today I'm adding a new feature called Side Notes. I'll be announcing this new feature for the next few days in case anyone misses it. I tend to write a day ahead and, as a result, some of the things that occur and might be worth writing about go without attention here on the blog. It has happened often enough that I want to make the change.

Side notes will be located at the end of the daily post and, as I said, will reflect any additional things that might be worth sharing on the day that they occurred. They will be added after the daily post goes out (and may be added more than once in a day) so it may become relevant to check back on a previous day's post for any side notes that might have been added.

WEBSITE CATEGORIES

MAY 10, 2021



Website Categories

Even though I've chosen to take my website and generally aim the design in the direction of a blog, I've still taken some liberties that aren't quite in keeping with traditional blog designs. You don't have to look very far to see some of the differences.

Once such example is that I've taken a bit of liberty in the way I'm treating Categories. You may notice that I've grouped them with my Home button. This could be a bit confusing to the user, but it has spared me going in directions with my code that I just didn't want to go.

First of all, there are a number of posts that will be viewed by clicking on Home that will not show up under any of the other categories. This is because they're probably not topics about which I write that often. In fact, I initially didn't have any categories listed and only added them in later to help those who might be interested in reading about a particular topic or two.

With this post I'm introducing a new Ham Radio category since it's an interest that earns a lot of my time and about which I've either written or mentioned in more than a few posts. It's also the focus of my Twitter account so I wanted those who might visit this site from that location to have easy access to posts (or mentions) from that category.


LAPTOP STUFF

MAY 06, 2021



Laptop Stuff

The hard drive on my laptop has been slowly but surely dying. There have been plenty of warning signs and I've been fighting things and putting off the obvious for a while now.

It started when my laptop was doing disk scans and fixes pretty much on its own. And, since that started it's only gotten worse. Anytime I booted the machine it started a disk scan, so I knew things were getting bad.

Then it started slowing down rather dramatically so I was pretty sure the hard drive was being forced to dance around an ever increasing number of bad spots on the drive, although I had not yet gotten to a point where I had lost any data.

I purchased Patty and I the same HP laptop, but she resorted back to her nice desktop and packed her laptop away. Well, that saved me the time and money of having to buy another one, so I started the arduous task of saving everything on Patty's laptop and transferring everything on mine over to hers.

There were quite a number of significant projects that came with the transfer. Included in the list was the wsjt-x ham radio program that I use, which was by far the most demanding of the projects. There was also my Filezilla program and all of the files for this website. Fortunately, those were copied on the server so I wasn't very concerned about losing anything on that particular effort.

There were several other pretty substantial projects that came into play as I continued the transfer, but one of the more troublesome was bringing Patty's old laptop up-to-date with both the operating system and the security system. I don't think I realized what I was going to be up against with those!

On some of the larger efforts, deciding in what order to perform the required tasks was also a rather complex item to manage. Fortunately, that's the kind of thing I enjoy and since there was no deadline looming (except for my concern about the ultimate death of my failing hard drive!) I was able to plan it out and execute the plan step by step.

It's good to be operational once again!


PHP BATTLES

APRIL 16, 2021



Code Wars

More PHP coding wars!

I say that because sometimes coding turns out to be a real war, or at least a battle anyway. And, sometimes the difference between success and failure on that battlefield can be whether I'm coding something wrong when I know better versus coding something wrong when I simply don't know any better.

I know those two sound similar, but what I'm trying to say is that in the former case I'm breaking a coding rule that I know exists and in the latter case I'm breaking a coding rule that I don't know exists.

The latter was the case today when I was trying to make another simple adjustment to update the same online weight log program that I updated yesterday. The problem that I encountered was one I definitely wasn't expecting.

To put it in the simplest terms I know how, I was putting too much complicated PHP code into single lines. It turns out, as a result, that the PHP interpreter could not resolve my code. I had to break those single lines into multiple lines so that the interpreter could better understand my intentions regarding the order in which things were to be done, also known as the order of execution.

I have to chuckle at myself for the amount of time and effort I put in for such a small (and apparently not as simple as I thought) change. All I was trying to do was tell my program not to display data without at least one decimal value. If my weight was saved as 173.1, it would display 173.1 but if my weight was 173.0 it would display 173 without the decimal and trailing zero. I wanted to make sure the result was 173.0 and not just the whole number.

So much for my simple code change!


MORE CODING FUN

APRIL 15, 2021



PHP

I decided to update my private and unpublished weight tracking program to provide me with additional stats. I already had engineered logging the data in a text file using PHP and reversing the file order so that the most current information is at the top of the list.

In this iteration of my logging program, I have it calculating and displaying the highest logged daily weight, the lowest logged daily weight, the average daily weight, and am displaying all of this, once again, at the top of the list of data.

I learned several things in the process of making this update. First and foremost, I had to figure out how to strip the daily weight value out of a long string of daily data. I also had to figure out how to convert PHP strings to numeric values and came across the floatval feature for that one.

Amidst all of this, I spent some time fighting syntax errors, mostly because I wasn't being careful with nested if statements, my semicolons, and the separation of my variables. Pretty common stuff! And using the freestyle that I tend to employ, even more common.

I guess for me, the fun comes from two things. Just designing the logic and writing the code that yields a solution is quite rewarding. But, the rest of the fun comes from the puzzles that must be solved during the debugging process. And like I said, using my freestyle approach to coding is bound to deliver a few exciting opportunities for debugging.


FILE MANAGEMENT

MARCH 30, 2021



Weight Tracking

I've kept my online weight tracking system privately published, but have really enjoyed all I'm learning about text file management with PHP and HTML. It's been very interesting, as usual, to see just how much code is already out there and available to be adapted and adopted to meet my needs.

w3schools.com and php.net are great for purposes of research, but I particularly like stackoverflow.com and the interactive nature of Q&A on that site. I've found solutions for a great many of my needs on that particular site, and I've even managed to find plug-and-play examples for some of the code I needed. Best of all, everything I try to build brings with it a great deal of new examples and sample code that can be reapplied in future projects.

In my private weight tracking system, when I input and store the data, PHP defaults to store the data with the most current entries at the bottom of the file. That's fine with me overall, but it doesn't provide a very good user experience (UX) in some cases.

For example, I don't want a user having to scroll down through a long list of data to get to the most current entries. I would rather have them on top of the list so they are seen up front and on top. To avoid that problem, I found the following:

$file = array_reverse($file);

Applying a simple array_reverse allows me to reverse the order of a stored text file. That combined with a simple echo command re-sorts and displays a file with the most current data at the top of the list. Just what I wanted!


BUG FIXES

MARCH 18, 2021



Bug Fixes

I mentioned yesterday that I needed to correct a bug (problem) with the way my online log was performing. It works, but it's not performing in the manner in which I intend it to perform.

Turns out I am able to just click the Comment button (for the online comments) or the Submit button (for the online weight tracking log) without entering a respective comment or daily weight and the result is a blank row of data in the file.

I discovered the ability to make the comment and weight fields required to prevent this problem from occurring. It was a nice and easy fix once I searched the internet to find a coded example of the required attribute for a form field. That's all it took and things shifted to good working order.

And, now to chase down the coding approach to sort and save the file with the most current row up top and the least current row at the bottom. I don't want to have a user scroll through a large set of data to locate the most current information.

This coding exercise may prove to be a bit more difficult than I would have anticipated. That's because similar coding examples that I've seen so far have tended to demand a lot more effort than I would have imagined.


ONLINE WEIGHT LOG

MARCH 17, 2021



Online Weight Log

I set up a private online weight log using the same technology I developed for entering and reviewing comments - except I'm tracking my weight on a daily basis and publishing it privately.

I'm basically doing this to shift my weight maintenance log from my computer to my phone. I like the idea of having that data readily available no matter my location. I also like the idea of being able to enter that data remotely.

In yesterday's post, I mentioned a bug in terms of the way this new technology performs versus the way I want it to perform. I'll have the same problem with this new online weight log until I determine how to correct it.

I also want to make one other change and track the new data at the top of the log instead of tracking it at the bottom of the log as is currently the case. I've seen coded examples of this and hope to be able to plug in the new code and make the desired change. If/when I get it working, I would like to inject the same change to my comments feature to keep the most current comments at the top of the log.


WEBSITE ARCHIVES

FEBRUARY 27, 2021



Website Archives

As a new month approaches, I know it's about time to get in gear and prepare a new archive for all of the posts in the most recent month. It's definitely not worth trying to automate the process as is the case with most modern blogsites. And, to be honest, the required effort to archive the previous month's posts in a more manual fashion does not involve much more effort than is required just to publish a new post.

The archival process is something I look forward to because it demonstrates continued progress as more and more monthly archives are generated. And, I've been true to my (until now) unspoken goal of creating a post each and every day, which makes the archival process even more worth while.

I also like the button I generated for the archives feature over in the left-hand menu and the way it ties into this monthly effort. The button presents a nice alternative versus other options when it comes to saving website real estate over in the menu area.

If I should add more categories, I'm thinking about adding the same functionality there as I have in he archives section. However, I'm quite a distance from taking any definitive steps in that direction. I'll need to generate enough posts on a single topic in order to justify such a new category. Presently, spiritual, running, and website tend to earn most of my attention when it comes to website posts.


WEBSITE VISITORS

FEBRUARY 08, 2021



Website Visitors

My writing posts here on the blog, designing the website, building new features, getting creative, and dabbling with the technology all have one thing in common:

I don't do any of them with the aim of engaging an audience.

I know, it sounds a bit odd.

But, it's true.

Every now and then I will write a post like this one just in case the rare visitor drops by and doesn't happen to read my about page, where I have also explained a few of my reasons for doing what I do here on the website.

The logging feature that I built will indicate I have visitors from time to time. But again, that's not the goal. All I can really see in the log is that I had a visitor visit my website via a web service provider or I had a visit from one of the countless web crawlers that serve all of the major and lesser known technological organizations.

So, I don't know anything about the individual users or the folks working behind the scenes with the corporate crawlers. And, I haven't added any comments capabilities either because connecting is not why I do what I'm doing here.

The times on the log entries also provide a hint as to the origin of the hits. For example, a web crawler usually just hits a page and moves to the next one. So, from one hit to the next from that crawler, the time intervals between hits are usually quite small and insignificant.

On the other hand, a legitimate user working via a web service provider will take the time to read various pages. And, the time it takes to do that also shows up in the log and tends to suggest that it was indeed a user who visited. That's about as close as I come to engaging an audience and serves my purposes completely.

Believe it or not, I actually had a user who was able to add some malicious code to one of the fields in my log. The program that I wrote to display my log also executed the malicious code as the user must have intended and anticipated. For anyone who is curious, that's what is known as a SQL injection and was executed by the PHP program that I mentioned I had written to display the log.

Fortunately, the code that executed initiated a sequence of events that required a response from me to proceed. While the request for a response looked very legitimate at first glance, it still looked just suspicious enough to tip me off before I responded. And, by closing things down without responding, I was able to prevent any damage to my system.

Chasing that code down, to determine the origin of the problem, was quite an interesting exercise. It was my first exposure to malicious code presented via a SQL injection and my first ever exposure from the victim's side of an event.

That's just one more reason that I enjoy building and adding to this website. There's so much to learn about so many aspects of the technology, especially including security and the efforts from hackers made against the code I write.

Still, if you are reading this and want to reach out to me for any reason, feel free to use the CONTACT menu link in the left column or follow the right column to my Twitter account and ping me there.


MORE WEB STUFF

FEBRUARY 02, 2021



WEBSITE UPDATE

I'm always impressed with all of the coding examples that are just waiting to be discovered out on the web. I'm especially amazed at how much there is to learn by plugging in the code and then making very small changes to try and achieve a specific result.

That was exactly the case last night as I went about trying to develop a dropdown box for the menu access to my archives. As I continue to add monthly archives, the entire feature has begun to occupy too much website real estate so I wanted to recapture space by converting the whole thing to a dropdown box.

I didn't like the simplistic examples that used web forms to accomplish the task. I'm not real excited about the idea of having to select an archive from a dropdown list and then hit a submit button to be taken to the appropriate archive. I wanted to produce what I've already seen on major blogging sites where an item in the dropdown box list is selected and automatically delivers me to a specific location in the blog.

I also wasn't really excited about debugging javascript to achieve the effect and found a CSS dropdown button example that looked very enticing. I plugged in the code and then started dabbling with the CSS in the primary style sheet until I got things just the way I wanted them.

It was a great learning exercise and a lot of fun to build it out and tailor it to meet my needs.


BLOGGING IN 2021

DECEMBER 29, 2020



Blogging in 2021

Well, I went back to my ideas of two day ago for blogging in 2021 and decided to make a go of it in a very different direction. I updated that post but wanted to also mention it here.

Stay tuned...


NEW YEAR NOTES

DECEMBER 27, 2020



New Year Notes

I had been thinking about some changes to my blog in the upcoming New Year. However, as quickly as I found myself with new ideas, I have since found myself with even newer ideas.

And so, two days after the blog post date above, I'm changing this post and my ideas for blogging in the New Year. There's more to come.

Stay tuned...


MORE WEB STATS

DECEMBER 14, 2020



PHP Code

Back on December 09, 2020 I published a blog post about Website Stats. I didn't think about it at the time, but it's a post that I can, and probably will, expand over time. In fact, I just finished updating it with some new capabilities. I've also added it to the website menu since it's self-updating each time it's accessed and will therefore produce a report of current information each time someone visits that page.

While it was not easy, and while I had to familiarize myself with some new PHP functions in the coding process in order to get it all to work; it was in fact easier than I had anticipated. I thought I was going to have to build some new files, but was able to process the data and report it in realtime without having to store and track any information in additional files.

I really like using PHP to perform calculations, store and track data, and work with simple graphic designs. It's much more sophisticated when combined with a SQL database instead of flat files and when working with complimentary front-end languages such as javascript. Still, you just can't beat PHP for it's all around capabilities. And unlike BASIC (another language with which I still really enjoy working) I particularly appreciate its extended reach when dispensed over the world wide web.

I really enjoyed adding more analytics capabilities yesterday and plan on doing more development as ideas come to mind and time permits.


WEBSITE STATS

DECEMBER 09, 2020



Web Stats

This page intentionally deleted due to the presence of, and problems associated with, executable code.


SEARCH FEATURE

DECEMBER 07, 2020



Search Feature 2

In an effort to remain true to form (no pun intended!), I'm bringing another website related post to the blog. This time I'm writing about a new Search Feature that I've introduced to the site.

I had to think long and hard about how I wanted to accomplish this task. I came across some PHP code that was new to me and that helped make the task a lot easier. However, based on my design, providing a search capability still adds a bit of overhead to each post. The good news is that it's still manageable.

I knew I would need a Form to collect the search terms. With that form I was able to provide a search box and search button on top of the right margin to perform the collection.

Next, I would need to pass the search terms to a variable in a PHP program. In order to pull that off, I grabbed the search terms from the form in 'val1' and handed them over to a PHP variable named '$srchstr' using PHP's htmlentities function as follows:

$srchstr = htmlentities($_GET['val1']);

Next, I needed to build my search string and assign it to a PHP variable. In other words, I needed to take the post for any given day and wrap double quotes around it and set a PHP variable equal to that lengthy string of text.

Whenever I'm testing PHP and the screen goes blank, I know I've got a problem. This was the case until I followed the information in the error log and discovered I had double quotes located in my posts that were adding confusion to the PHP program. Note to self: No more double quotes in my posts.

Next, I added a PHP If statement to see if my search terms were located in that lengthy string and, if so, to set a $flag equal to '1' and present a message that the terms were found, providing the specific location where a user might go to read the post that includes those terms.

Finally, at the end of my program I checked to see if $flag = 1 and if it was not, and was instead still equal to '0', then I presented a message to the user that the program was unable to locate the search terms. I also combined all of the lengthy text strings into one file so that everything could be searched in one easy effort. And, I simply add each new post to that file to keep the search function operational on an ongoing basis.


MORE WEBSITE STUFF

NOVEMBER 30, 2020

More Web Stuff

Adding the capability for Recent Posts and Post Archives was fun and taught me a lot about what goes on behind the scenes with the code in familiar blogging sites like WordPress and BlogSpot. Admittedly, it would take me an eternity to match the features and capabilities coded into those sites, but that's honestly not the goal.

My most important goal in building this website is to have fun! Creating a maintenance nightmare is the last thing I want to do. So, any feature that adds overhead, in the form of routine maintenance or overwhelming complexity management, is carefully considered before any work begins.

If adding a new feature will drag me kicking and screaming toward a new technology that adds too much work and/or overhead for too little benefit, then that feature and that technology are not destined to find a place in my website.

On the other hand, if the effort to add a feature or capability can be easily contained to avoid that scope creep with which those of us who spent time in the corporate world are so familiar, then it is likely to find a place on my website development to-do list.

There's a lot that I know I'm sacrificing in order to enjoy the control I maintain over this blog site. For example, on a traditional blog site when you click the Publish button, a lot of things can be user defined to happen behind the scenes, such as notifications. Do I want to build a publish function? If I did, I would be forced to use it and lose any benefit that comes with the changes I can make in a manual publishing operation. A publish function fits well in my too complex to build and maintain category.

Another example of sacrifice is the built-in audience that comes with a more traditional blogging site. I used to live on WordPress and they do a great job of driving users to each other's blogs. In its season, I enjoyed that.

But the level of sophistication that has evolved, in terms of advertising and monetizing, is just not something with which I want to be involved. In fact, and as I have said before, I'm not even looking for an audience. I'm just looking to have fun with the technology and perhaps the opportunity for writing and artistic creativity that come with building and maintaining a website.


WEBSITE STUFF

NOVEMBER 29, 2020

Website Stuff

Decades ago, when I started playing with HTML and my first website, I discovered PHP, and in particular PHP includes. The entire idea of PHP and server-side code opened a new door for me back then, even allowing me to draw from my extensive experience with relational databases and SQL.

With PHP includes, I was able to reduce (and almost eliminate) the redundant HTML and content I had been using in so many places and which had become such a major chore to update when anything changed. These PHP includes were a great addition to my website developer's tool bag!

Still, old habits die hard as they say and while I found myself learning new and improved techniques, I was not always recognizing their potential application and the places where they might benefit me. I had a very good example of that occur just today.

In the past when a new year arrived, I often found myself weighed down with extensive updates changing all of the years in the copyright notices over to the new year. Even today I was realizing that project was looming large and only a month away. Without giving it a thought, I was mentally preparing to take on that annual project. But, then it occurred to me - couldn't I add that copyright notice in a PHP include and update it only once instead of a multitude of times?

How in the world had I missed something so simple? Well, the answer resides in the way I initially set things up. To keep things neat and tidy, I host all content on an HTML page and I host each HTML page with a PHP page that contains all of the structural definitions.

The copyright notices had been added like content on the HTML pages as I had always done before. But, if I were to update the copyright notice in one location and build an include for that location in the PHP page's structural definitions, I could relieve myself of that annual (and tiresome) project and make the update in one location!

I just completed that change and it seems to be working well. No more lengthy projects for copyright notice updates. Now the copyright notice updates for the New Year will be like flipping a switch!


WEBSITE UPDATES

OCTOBER 16, 2020

Website

Had a fun time adding some updates to the website yesterday. As I have mentioned before, it's probably the thing I enjoy most about having a website/blog.

I added the capability to see recent posts which required some retooling of the infrastructure. It was probably the most demanding and time consuming change that I made to the site in yesterday's changes.

I also removed my Twitter feed on the right side and moved some menu items from the left side to make room for the recent posts menu entry. And, I dabbled with the menu labels font size to allow for more text without a crowded appearance.

I added a website archive and performed some modifications to the main page to ensure a proper alignment between it and the left and right menus, both of which were quick and easy changes. I added back my genealogy post from an earlier entry on my previous website since it's something to which I like to refer back from time to time.

Finally, I modified the Home section so that the entries from the current month will always show up on the main feed. I may dabble with that some more, but need to give it some additional thought.


BACK TO BLOGGING

OCTOBER 11, 2020

Blogging

It all started with a website I created in September of 2005. At that time, the one and only topic was running. Truth be told, I was in it as much or more for the fun of learning to build and maintain a website than with any belief that I had something to say and that was worth writing about.

I was most interested in learning more about the technical side of this new thing (at that time anyway) called blogging and, to one degree or another, that has basically remained my focus over the years since. Without a doubt, anything I had to say and write about was secondary to the technical aspects of the website.

Years ago, I moved to WordPress and enjoyed the opportunity to gain exposure to a more diverse picture of blogging. Writing posts from my phone and entering the world of comments was new and exciting, but it didn't last very long. I missed the control I had over website design and decided to move back to building and maintaining a blogging website and expanding upon its offerings with a database and PHP managed comments that more resembled what I had observed in WordPress.

As I expanded the list of topics about which I was writing, I lost focus and with it any readership I had earned. As a result, I removed the technology I created for comments. My blog evolved to become a personal scrapbook and has pretty much remained in that category since. And, if I'm truly honest, I like this new paradigm.

I have no interest in monetizing the site (and thus turning it into a job) and I have no interest in attempting to build a readership that requires my participation. I enjoy the technology, the creativity, the artistic elements, and the writing. As for the social elements, I'll leave them to those who pursue that kind of thing.

From a technical standpoint, I'm quite happy to pioneer what has already been pioneered. I'm very comfortable rediscovering that which has already been discovered. And, I'm very much at home improving upon that which has already been improved.


GOOGLE HANGOUTS

February 13, 2020

js

I have two grandsons, of which I'm very proud, and they now live over in Germany. One (Gabe) is an animal and bug wizard, who also is already becoming a master chef in the kitchen with mom.

The other grandson (Noah) is a technology wizard and he and I have just started enjoying Google hangouts together. He already helps everyone with any computer issues they have and his ability to learn new things, including Google Hangouts, with no assistance from anyone, continues to boggle my mind!

He and I have been using Google Hangouts from our phones and yesterday I did a hangout with him from a parking lot while Patty was inside on an errand. What a cool way to multi-task!

Since the cell phone screen is very limiting, I picked up a Logitech C270 (HD) webcam from Walmart yesterday and installed it on my HP laptop and placed it on top of my Acer monitor so that I could enjoy a better view of our hangouts from the comfort of my office desk. The photo of Noah (above) is from our first hangout using the new setup.


JAVASCRIPT

February 12, 2020

js

As you may have noticed, I added the capability to use fade out and fade in to display a number of my pictures on the home screen banner. It was actually a fun and interesting experience.

As for the fades, all it took was a few lines of code (javascript) to pull it off. As for the pictures, well that was another matter. I had to get the pixel dimensions for the banner and then do whatever it took to convert the other photos to those same dimensions. For some of the pictures, it was no problem. For others I had to do some trimming in order to avoid a dramatic change to the picture due to a vastly altered aspect ratio (the ratio each picture's width to height.)

I initially played with another idea for featuring the pictures in The View section of the website by adding the javascript and captions to the photos. It was also a fun exercise, but it ultimately led me to go with the changes to the home page banner instead.

Here's to all that can be done with cool coding!


SEARCH TOOL

January 25, 2020

analytics

Learning what features I can add to this website is really about learning all that PHP, Javascript, and of course HTML, can do. I was intrigued with the question as to whether or not I would be able to develop a Search Tool for the website.

Despite being rather labor intensive, I was pleasantly surprised at how easy the project turned out to be. I've taken a simplistic approach on the first pass, and will probably expand on that in the near future.

I'm also planning to reorganize the categories since there are some topics that I want to write about more frequently and that will likely warrant a unique category.


WEBSITE ANALYTICS

January 16, 2020

analytics

I mentioned in an earlier post that I've enjoyed developing some website utilities. I've been using PHP and HTML to develop data collection and analysis utilities for this website.

One thing that has intrigued me is the website crawler activity that occurs against the site. In 2020 I've already collected evidence of 464 crawler hits against the site that included 224 unique IP addresses from 55 unique locations and 34 unique organizations.

A large number of the hits were from Microsoft and Google but also included were some exotic locations such as Moscow, Russia; Beijing, China; Hongkong; Berlin, Germany; and Thessaloniki, Greece; among others.

I was also able to determine that the malware injection (see previous post) redirected to a website that is apparently owned by an organization named PDR which is located in Mumbai, Maharashtra, India. Disclaimer: I have no way of knowing whether PDR is the offending organization, which injected the malware, or simply a client of the offending organization.


CHASING DOWN A MALWARE INJECTION

January 10, 2020

injection

In years past, I had become relatively comfortable with the idea that computer system security breaches were most often possible due to help from an insider. In fact, long ago I had personal exposure to exactly that sort of thing. To put all of this in perspective, back at that time a computer virus was more an idea than a reality. We sort of chuckled at those who gave this idea any serious attention. Well, that was then and this is now!

More recently, I was reading about SQL injections. I'm quite familiar with SQL (or Structured Query Language - a commonly used database access language) but was not familiar with the idea of SQL injections. It wasn't difficult to imagine the kind of damage that might occur if the wrong person had access to a database and could inject SQL code to gather private data.

However, little did I know that the term injection was meant to communicate a highly unusual and stealthy method for inserting or injecting code into the system through readily accessible port holes such as the user name and password fields in a sign-on screen. This approach can allow an experienced individual to whittle away at collecting enough knowledge of the system's structure to ultimately locate and collect usernames and passwords. With those in hand, enough information would have been gathered to sign into the system and potentially gain full access to everything in a fashion that would likely appear completely legitimate to even the most attentive technical insider.

I had no idea, when I read about SQL injections, that I would soon be the victim of a similar injection and one that would stretch my knowledge and problem solving skills beyond anything I had previously experienced. And, ironically, any such knowledge and experience I had gained over the years would work against me as I repeatedly tried to make the problem even more difficult than it already was.

On my website, and as I mentioned in an earlier post, I've been playing with some back office tools that I built using PHP in order to keep up with various website stats. As it turns out, someone hacked me in such a way that executing one particular utility resulted in a redirect to another website and the screen pictured above instead of the screen I had constructed and was expecting. I felt a bit out of my league in attempting to chase down the cause and instead considered my alternatives for performing some kind of clean-up so I could get on with life.

The good news was that by accessing that PHP utility tool from multiple locations, I had been able to prove that the malicious code was somewhere on my website host's system and not on my computer. The bad news was that my website host's sales people wanted to charge me an arm and a leg for a one-time cleaning service to correct the problem and they wanted the other arm and leg for an ongoing service to prevent future reoccurrences. For a site where all I really do is play, they were asking far more money than I wanted to pay. So, I decided to go forward without executing that utility and all was fine.

Out of fear of either additional attacks or the spread of my current problem, I finally decided I had to do something. I renamed the PHP program to see if that would help, but it didn't. I deleted the program and transferred a new copy from my laptop, but the infection was still there somehow. The thing that was throwing me off was that none of my other PHP programs had become infected. I tried copying the code off my laptop and placing it up on the server in a new file, but the malicious redirect still occurred.

I was trying to imagine how some type of metadata location on my infected php file (metadata that would surely be beyond my knowledge and experience) might contain the hacked code that was causing my problem. After all, my PHP program only contained a few lines of very simple PHP code and all it was doing was displaying a log file of all the web crawlers that had visited my site. For the same reason that I mentioned earlier, where it challenged my thinking to inject SQL code in a userid or password field, it hadn't occurred to me that anything malicious might have actually been in the log file. After all, log files don't execute code. They usually just contain data. How would displaying that data execute any code, malicious or otherwise?

To make sure my thinking was on target, I tested it by creating an empty log file and running the utility against it. And, to my surprise, it ran without a redirect. I put the log file entries back in the empty log file and ran it again and, sure enough, it redirected to the bad website.

Could there be some malicious code stored in some place I didn't know existed such as a metadata location on the log file? After all, the only other thing the file contains is rows of log data about the crawlers that visited my website. How could that hurt anything?

Remember the rule of thumb from Occam's Razor whereby the simplest answer is most often correct? Well, that was definitely the case here. It's just that a simple answer may not be that simple if you've never had any experience with the question or the answer before! And, that was definitely the case for me in this instance. The answer was sitting right in front of me, but I didn't have the experience to see it.

Was there a bad row of data in the log file causing the redirect? If there was, I didn't even know that could be done. And, even if I had known, I would probably have no idea how to do it! There were over 300 rows in this log file and so I started removing them in blocks of 100 in an effort to narrow things down to the potentially offending row.

I was able to prove that the malicious code existed somewhere between row 100 and row 199. I removed rows 100 through 150 and the problem still occurred. I glanced at the remaining rows 151 through 199 and there it was on row 172! Executable scripts had been injected into the fields that would usually contain the browser definition and the referrer definition for a legitimately logged website visit. I removed everything from the log file except row 172 and restarted my PHP utility program. Once again I was redirected. I had found the problem and it was a code injection into an otherwise harmless row of user agent log data.

Here's an example of a legitimate log entry from a Google web crawler:

6 2019/12/30 11:15:23pm 66.249.70.30 Browser = Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Referrer = Direct

In the malicious code (which I will not show here) the creator injected a script into both the Browser = location and the Referrer = location of the creator's User Agent String.

Fortunately, I did not click the Allow button on the redirected website page pictured above. Quite frankly, I almost did, considering how Windows has programmed me to respond positively to the same question. From all of the documentation I've read about this particular attack, the consequences for clicking that allow button are pretty extreme and in some cases considered rather permanent.

All in all, chasing down this injection was quite an interesting and highly educational experience.


INTERNET?

January 4, 2020

internet

With respect to internet access here at the house, Patty and I have been living off of tethered connections from our phones. We've been with Verizon pretty much all along for our cell phones and out in these rural areas along the coast there simply is no access to fiber or cable.

On our senior plan, which is very affordable, Verizon provides a reasonable speed to our phone. However, the moment we try and tether off of our phone with our computer, Verizon steps in and slows things down to a crawl. And, we've been living with that for quite a while.

Even in using Filezilla from my computer to provide updates to this website, I'm frequently confronted with errors due to long waits trying to upload even the smallest (text only) web page. In dealing with this, I've had to adjust to a new way of life and get comfortable doing many things from my phone that I would have done (in the past) from my computer.

When I was working from our new home for the first year we lived here, I was using a Verizon cantenna and paying a pretty steep price for the kind of access I've always been used to and that I needed to host meetings, provide online training, and perform other work-related tasks. When I retired, I honestly couldn't justify the price for that kind of access even though it was tempting due to the amount of time I tend to spend on the internet each day and the more data-demanding things that I wanted to do.

For example, I've been itching to add a weather underground weather station and a camera or two to our setup. But, with our present internet capabilities, those hopes and dreams are nothing more than a fantasy.

Well, that's all about to change! It turns out that there are now government imposed mandates to provide folks like us with reasonable options and they are indeed reasonable. Thanks to some great research performed by one of our neighbors, we should be high-speed here at the house very soon - perhaps next week! Things are about to get exciting!


WEBSITE CODING

December 31, 2019

weather

I've enjoyed writing posts for the various topics on this site, but the real fun still comes from all of the coding going on in the background - the stuff that brings the site to life!

I've built a number of highly interactive sites over the years using HTML, PHP, Javascript, and a MySQL Database. From likes and comments to security and intuitive functionality, there's an incredible amount that can be done with all of the aforementioned technologies.

I'm not quite ready to incorporate likes and comments into this site since I'm not really looking for all of that, but I have enjoyed building some back-office logging and analytics capabilities into the site for my own entertainment.

One of the interesting things upon which I've been educated in years past and even more recently are the web crawlers (aka Bots, SpiderBots, Internet Bots, and Crawlers) that are out there! My back-office coding shenanigans and logging capabilities have introduced me to the wide world of an often-unseen part of the web used for indexing and organizing the web pages out there for easier and more efficient retrieval.

Some of what I have found led me to this interesting article that really brings clarity to the browser's user agent string or UA. It's an item that each browser provides to identify itself, its version, and the operating system. It's worth a read if you're so inclined.


BLOGGING AGAIN...

December 10, 2019
Blogging

I'm really excited to get active once again with blogging. More than anything it's always been a fun way to record and share memories with friends and family. Beyond that, I enjoy the opportunities to write about anything and everything that's interesting to me, dabble with the technology, be creative, and dive into a bit of artistic expression with website design.

I'm moving away from Wordpress for a lot of reasons and getting back to my roots with my own website. For the most part I've wiped the slate clean from almost 15 years of posts, completely rebuilt this website, and look forward to a new start.

And so, here I am back in the world of blogging and website development. Since this site is honestly nothing more than an online scrapbook, I've removed the PHP code that previously allowed for comments and likes. If anyone needs or wants to get in touch with me or leave a message, I've provided a "contact" form over in the menu. Feel free to reach out!

I hope you enjoy your visit!


Copyright © 2022 Hutch DeLoach









Search Archives