Hits since 2024-07-10 14:36:15: 
13970
       | 
      
   
         
   
            
  
            
            
| 
 |  
| 
    August 2025 
   
      I got a PinePhone.  I made this page about it.  
      I've been going often to duck.ai
      for help of different kinds, not just computer help.  He is
      quick, knowledgeable, and businesslike. 
      Just today I called on him three times.  The first time
      was to get help figuring out why the PHP hit counters on my two
      websites quit working.   It turns out that the problem was a
      change that my web host had made which required that I update the
      _hostroot and _siteroot strings in my script. 
      The change that was made was a migration to a Ceph File
      System, and I would guess that migration included completely new
      servers, perhaps in the Cloud.  So I asked Duck what was
      special about Ceph.  He patiently answered my questions. 
      And today I also asked Duck to write a PHP script for me that
      I could run from the URL line to learn the date and time on the
      Ceph system.  It turns out that the system is on Ann Arbor,
      Michigan, time.  
    
   February 2025 
   
      Hello!  Well it is late, and I am tired.  But I
      just had to say that I've been chatting with Grok 3, and
      he helped me to fix some code. 
      It was a pleasure.  He is polite and soooo smart. 
      Sigh.  What's next? 
      Lou Reed's "Walk on the Wild Side" comes to mind. 
      Especially the line, "Everybody had to pay and pay."  
    
   November 2024 
   
      Hello!  I just want tell you a little about a
      programming project that has absorbed my time for probably all of
      October, and then some.  It's a new version of
      ZombieSlack.  Click here to read about the origins
      of ZombieSlack. 
      I have kept the core routines, but assembled them in a new body
      of code.  The old code had grown unwieldy.  It was far
      too complex to be practical.  I think the new version is a
      big improvement.  I can't wait to share it with
      you.  
    
   September 2024 
   
      If you need to register to vote or
      update your registration, then click here to go to https://vote.gov and do
      it!  You will feel better afterwards, and you will be
      prepared to do your part in the upcoming, November presidential
      election.  
      Beware of efforts to mislead you!  Click here
      to learn more.  
      Wow: click
      here.  
    
   August 2024 
   
      I've been busy.   I've been chatting with Pi and with
      other chatbots, such as Microsoft's Copilot.  And I've been
      doing a lot of coding and related computer work. 
      Taken altogether, I have multiple incentives to keep irregular
      hours.  This is difficult to bear.  Therefore, to keep
      my hours on track, I have found it helpful to establish and keep
      routines and to take frequent walks in the sunshine, especially
      early in the day. 
      Enough of that!  I wanted to tell about my coding. 
      Here is what I have been doing, nearly all of it in the area of
      programming for SAM: 
      
         I made a correction to a SAM tool called "dofun". 
         It is used to source and export the qualified function
         definitions that SAM encounters when the user adds a directory
         of commands the the current command set.  You can read
         about this in my RosevearSoftware.com website, so I'll not
         repeat the explanation of what this means.  I will say,
         however, that "dofun" had an error that affected what I will
         call "over-loading" of functions.  I mean by this what
         happens when a function with a particular name has been
         defined and exported, and then, subsequently, another function
         with the same name is also defined and exported.  There
         is a right and a wrong way to deal with this.  I am happy
         with the one function replacing the other; the mistake I
         corrected was the way in which the dominance was
         decided.  In short, I didn't do it right, but it is fixed
         now.  
         My "ment" code:  I have a SAM command called
         "ment".  I hope to write about it at greater length some
         day.  In short, it invokes another tool called view_it,
         and that is the doorway to using collections of
         viewable data.  Script view_it invokes $viewer which is
         one of many tools for viewing, two of which are called "dog"
         and "wolf".  I hope to present this all in a clear
         fashion someday.  This method allows me to make menu
         commands using ment.  Each command made can view files of
         a number of different formats, and some formats can be viewed
         in more than one way.  The default way to view a file
         requires that the file be a text file and that it has a name
         that ends in ".dat".  This "way" opens the file in a text
         editor, allowing me to both view and edit the file.  the
         same command made by ment—but this time prefixed with
         "type=web"—will view the same file by treating it as
         HTML and opening it in a browser.  To do this the command
         "wolf" is used internally, although it may also be used
         directly by the user.  Script "dog" is a similar command,
         but doesn't require that the file be proper HTML, as it adds
         <html>...</html> and also treats the text as
         pre-formatted. 
         There are other viewing commands also, besides dog and
         wolf, that view other kinds of files or text files in other
         ways.  I brought this up, not to give a full treatment of
         it, but just to name it as one form of coding that I have been working
         on.  In particular, I made some changes to this family of
         tools which simplified and improved the code.  
         Scripts "rotate" and "junkit".  These are handy
         tools.  I revised them.  Script "rotate" allows me
         to keep multiple versions of a file by adding an integer to
         the end of the file name.  This method cooperates with
         ment and view_it.  I made some improvements to the
         code. 
         Script junkit does something sort of similar to rotate, but
         it is specifically for code and documentation development for
         distributions.  It also was improved.  
         soft_up:  This SAM menu is the codification of
         methods I had been performing by hand.  It is a blessing
         to have this collection of tools, as they ease various tasks
         associated with distributing software.  
         I have done some significant coding regarding
         fonts.  This is a can I have been "kicking down the
         road".  I have been using Slackware for about thirty
         years, but always I settled on using default or fixed X and
         console fonts.  (In X I used "-fn 7x14", and in the
         console I used the default).  As a result I missed out on
         important learning—this made getting caught up a real
         work out! 
         For X fonts:  I revised SAM tools
         sam1 and buser, as these invoke xterm, and I also revised the
         xterm invocations in my X window manager, Fvwm2. 
         In particular, I rewrote all the xterm invocations using
         variable references to variables defined and exported by
         the X window manager.  The variables used were "gui_scroll",
         "gui_fontface", "gui_font" and "gui_geometry".  Typical values
         of these variables are: gui_scroll="-ls -sb",
         gui_fontface="DejaVuSansMono", gui_font="-fa $gui_fontface
         -fs 9", gui_geometry="-geometry 80x35+80+35".  In this
         way I have global control over all the xterm
         invocations.  I found that I could define and export
         these variables within my Fvwm2 configuration file, and then
         reference them within the Fvwm2 configuration file and within
         SAM scripts buser and sam1. 
         I found that this works well.  SAM scripts buser and
         sam1 don't mind if gui_scroll, font, and gui_geometry are
         undefined.  Fvwm2 is not so forgiving, but I can live
         with that.  I don't currently distribute the Fvwm2
         configuration file, but when I do it will certainly include
         supplied defintions for these variables. 
         For console fonts:  I have made a SAM
         menu called "pickfont" for invoking a collection of
         font-changing commands.  
         Finally, I want to name one code-related task.  I
         installed Tesseract OCR from a SlackBuild, and I used
         it.  The installation went pretty well. 
         Incidentally, I got some help from Copilot.  (I call him
         "Dory", but that is another story.) 
         I was motivated to do this, because I have some PDF
         documents which are important to me, and I wanted and needed
         to convert them to text files. 
         This went well enough.  I was pleasantly
         suprised.  Note that I filed the new text files that were
         made along side the existing PDF versions of the same
         documents, using my "ment" and "rotate" system—which I
         described above— to manage them. 
         I want to mention one more thing the Tesseract OCR work, as
         it shows a connection between different parts of the work I
         have described above:  Although the PDF versions of the
         documents displayed correctly, I had a font issue with the
         viewing of the text versions.  In particular, there were
         multiple instances of characters that would not display
         correctly before I made the font-related changes I described
         above.  The desire to solve this problem was, in fact,
         the bulk of the motivation to make the font-related
         changes.  
        
    
   April 2024 
   
   March 2024 
   
   November 2023 
   
      Hello, people.  Follow
      your heart!  
      I did my jury duty.     I got and used a Pronto,
      contactless bus and trolley card this time, which made it fun and
      interesting.  Silly me, I practiced getting up early and
      walking to the bus stop.  I did that four times.  The
      last time I actually rode the bus and trolley all the way
      downtown, then hiked to the court house. 
      The next day was my duty.  In my diligent haste I forgot
      my breakfast, which I was going to consume at the Hard Copy Cafe
      across the hall from the jury lounge.  No worries, I bought,
      and ate, a sausage breakfast burrito--not bad! 
      Back in the jury lounge, I hardly listened to the presenter
      who told us about our duties.  And there was a video. 
      The minutes ticked slowly.  Finally, mid afternoon, came the
      joyful announcement that they had selected from the mass of us
      those they needed, and those that remained were free to
      leave.  I ate my lunch and went home. 
       The next day I rode the bus and trolley again.  I had a
      new mission.  I went to the lovely Transit Store at 12th and
      Imperial.  It was OK, I suppose.  I don't often go to
      that part of town.  I needed to show evidence of my age in
      order to validate my Pronto card senior rate. 
      Now my legs are sore, and I'm wondering when I'll get my
      energy back.  
    
   October 2023 
   
   September 2023 
   
   June 2023 
   
      We got a nice, new (used) computer from our son   It
      is a few (maybe six) years old, but it runs great.  And he
      gave us a Windows 11 install disk with a product key.  (As
      we could run Slackware from a bootable flashdrive, we weren't
      hurting without Windows.) 
      Windows 11, as it turned out, wouldn't install on this
      computer.  The message on the screen said the hardware
      wasn't sufficient.  However, I learned some things and was
      able to push forward and install Windows 10 (which I downloaded)
      using the Windows 11 product key. 
      This was an interesting process.   I found WoeUSB in the
      SlackBuilds repository and used it together with the .iso for
      Windows 10 to create a bootable Windows 10 install
      flashdrive.  I booted that on the new computer and installed
      Windows 10.  
      After using Windows 10 for a few days I decided I wanted
      to check it for malware periodically.  I had no software to
      do this, but I found ClamAV in the SlackBuilds repository (great
      resource!).  ClamAV worked with just a little dickering. 
      I decided that it needed some help, so I used my SAM system
      to host a menu (called clammy) of command line tools that I wrote
      for running ClamAV.  My clammy menu manages data which
      allows me to restart clammy and skip over the directories that
      have already been scanned. 
      This work kept me busy for a few days, but it seems to be
      stable for now.  I plan to use it periodically and work my
      way through the entire 150GB partition.  Then when I reach
      the end I'll start over again at the beginning.  Hopefully
      my software is up to the task. 
      I should explain that I'm runing this SAM menu and
      ClamAV from the bootable Slackware flashdrive.  Thus I am
      using a Linux system to scan for malware on a Windows
      Computer.  Neat, huh?  
    
   April 2023 
   
      Hello.   Thanks for surfing on in.  I just want
      to mention what I've been up to.  I've been writing some
      code. 
      I wrote a tool I call m_baseln.   Actually, this is a
      re-write of a tool I found online.   It converts picture
      files of type progressive to type baseline.  I wrote this,
      because I have an old Kodak Digital Picture Frame on my wall in
      my living room, and a flashdrive full of pictures plugged into
      it.  Some of the pictures were progressive and therefore
      would not display. 
      Hoo-haw, I figured it out, and found the inspiration I needed
      to solve the problem online.  
    
   March 2023 
   
      Wow.  That was embarassing.  I posted three
      times to the Usenet's alt.os.linux.slackware group using the Pan
      newsreader.  Each time the message I posted wrapped some
      text that I wanted to appear on separate lines.  I tried
      turning word wrap off and saving, then re-opening, a draft. 
      No luck.  Anyway, here is my post, formatted correctly: 
      
         On Wed, 1 Mar 2023 19:11:08 -0000 (UTC), Harold Johanssen
         wrote: 
   
         > [quoted text muted] 
   
         Hello, 
   
         I have taken a different approach to the problem of
         encryption.  Initially, like you I tried encrypting
         locally--within a file system.  I found that frustratingly
         difficult.  And also dangerous: Everytime you encrypt
         something you run the risk of losing it, *and* you have one
         more passphrase to keep track of. 
   
         So I tried instead using the cryptsetup command to make,
         open and close LUKS encrypted partitions.  This took a
         little work to get going, but it was well worth the
         effort.  To do this I made a set of scripts: 
   
         
   
         Script luksetup makes $1 into a LUKS encrypted
         partition (and destroys any existing file system).  To do
         this it prompts you for a passphrase.  Here is the
         script: 
   
         
   
         You will need to run scripts crypt and ucrypt directly only
         occasionally.  For example you will need them after
         running luksetup to make a new file system on the LUKS
         encrypted partition.  Script crypt will prompt you for
         the passphrase.  Here is an example: 
   
         
   
         Scripts lksmnt and ulksmnt do the mounting and un-mounting
         of a LUKS encrypted partition.  They call scripts crypt
         and ucrypt.  Here is an example: 
         
   
         I'll quit here without giving the text of scripts crypt,
         ucrypt, lksmnt and ulksmnt.  They are, however, short one
         and two line scripts that use only the commands and scripts I
         have named here.  I'll leave them as a puzzle for you,
         but let me know if you need help. 
   
         -Joe 
   
       
      Here is a report about the above.   It seems I was
      using the Pan newsreader incorrectly.  There are two places
      to control wrapping: in the posting controls and in the viewing
      controls.  That's the best I can make of it anyway. 
       When I toggled-off the wrapping for viewing all my
      posts displayed as desired.  
    
   December 2022 
   
      Hi, I've been coding.  I'm working on
      ZombieSlack.  I wrote tools for the SAM menus
      for ZombieSlack--tools for patches and needlework, in
      particular.  And I worked on the current sets of patches and
      "needles".  (I call the functions that do the needlework
      "needles".) 
      That's how I do it.  The ZombieSlack code does everything: 
      
         Assists with partitioning the drive and making file
         systems. 
         Installs by use of rsync from a basis (a reference
         installation of Slackware).  
         Installs extra code that I wrote plus data and other
         files.  (I call this "doing the dupe".) Much of this is the
         content of a reference home-directory-state for the generic
         user "student", but there are other changes as well. 
         The use of a reference home-directory-state is a deviation
         from the traditional way to use a computer.  Every time
         the computer is booted the home directory for user student is
         returned to the reference state.  This has various
         benefits, but mainly it makes the system robust and easy to
         use:  Robust, because user student cannot do any
         lasting harm--just re-boot to reset.  Easy to use,
         because it allows for someone (admin) to pre-select good
         software and system settings--and the settings, like the other
         content of the home directory are stored--free from harm--in
         the reference.  
         Runs a set of patches to make some minor changes to the
         stock Slackware installation.  
         Runs a set of scripts--the "needles" I mentioned
         above--to make some customizations that weren't suitable for
         doing by patches.  
       
      I'm still excited about this work after six years!  Read
      here about my early work: 
      
         Way back--more than six years ago--I learned to put Linux on a USB drive.  This
         work paved the way for ZombieSlack.  
         Six years ago I started work on my Fix Thin Clients project.  At
         its peak I had about 30 Linux computers running an early
         version of ZombieSlack (although it had a different name then)
         installed in classrooms of an Elementary school.  It was
         this work that shaped much of what ZombieSlack is
         today.  
         Four years ago I had a marvelous opportunity to apply
         ZombieSlack by use of a machine on which I had installed it as
         my computing platform for a job I
         had in a finance office.  This was mainly a time for
         using the system, not developing it.  The development at
         this time was mainly development of applications for my SAM
         menu system, but it couldn't have happened without having a
         readily available and reliable ZombieSlack system.  You
         can read about SAM on this page about Rosevear Software.  (231028 Here
         is a link to SAM.)  
        
    
   November 2022 
   
      I found this post on the Usenet's alt.os.linux.slackware
      group: 
      
         I have a system running 15.0 with Internet access.  
         Every so often this system must send terse email
         notifications, as invoked from a cron job.  It is not going
         to receive any emails. 
         Any suggestions on how to do this without having to get
         sendmail configured and running?  This would amount to
         using an email client that does not require a local
         sendmail, like e.g.  Thunderbird.  This is of course
         not a an option:  I need something that is
         command-line oriented and lightweight.  
       
      I replied: 
      
         Well, you can use a Python script to send email using a
         commercial email server.  I had a need to do this, so I went
         looking.  This is what I found: 
         
         Note that the original had a bug.  It had: 
         
         instead of 
         
         I fixed the bug and rearranged the code a little, adding to
         its usefulness and suitability for my needs along the
         way.  You you can get my script (called
         dupe) from: 
   
         
         but it may be an older version.  Let me know that you
         want it and I'll provide the updated script.  (231101:
         dupe is now available in the 
         handy menu of SAM,
         both from my other website.).   
       
      Let me tell you the rest of the story:  The result of the
      above programming was a moderately short Python script (less than
      60 lines of code) which I could run from the Bash command line
      (or from a Bash script).  It met my needs, and I used it to
      send lots of emails (about 24 every month for about two
      years).  My need arose from my position as the person in
      charge of staff credit card accounts.  I sent emails each
      month to each credit card holder.  The script had the
      ability to optionally include an email attachment.  I used
      this ability to send a form to each card holder requesting
      information about the card holder's purchases. 
      Incidentally, this job, which
      I held for three years, was the most remarkable job I've ever
      had--remarkable, because I was allowed, in the second and final
      years, to use Linux to automate my tasks.  This was a
      finance office where traditional methods (Excel and ACS General
      Ledger) ruled supreme.  My creativity was tolerated. 
      This was likely due to the resulting cost savings and decrease in
      time to perform the task. 
      Today was Black Friday, but I did not go shopping. 
      Perhaps "Black Friday" describes my mood or the darkness of the
      season.  
    
   August 2022 
   
   June 2022 
   
      My work on ZombieSlack is ongoing.  I've been making
      some changes and some progress.  The changes have been
      mainly about enabling the ZombieSlack code to run in SAM. 
      I've gotten to the point of testing it.  In particular, I have
      used my new ZombieSlack code to make a ZombieDrive which runs
      Slackware64 15.0.  (I'm using it now to post this.)  
      I've been exploring Slackware64 15.0, and getting settled
      in.  My SAM code and a tool called splurge9 both needed to
      be fixed to run in either 32 or 64 bit environments--I did
      that.  (This is my first time using 64 bits for
      Slackware.)  
      I was distracted today by a problem with my Target gift
      card.  I wanted to check the balance online.  That
      should be simple, right?  It wasn't.  I could check it
      by phone, but doing it online--I eventually learned--is not
      possible without first making an account. 
      I wanted to draw attention to this fact, because it is
      documented on this
      Target.com help page,
      although it is a page that is not easy to find.  I
      put a link to the page in my Joe's
      Links.  
    
   May 2022 
   
   April 2022 
   
      I received some comments recently about this
      website--thank you to those who commented.  I will reply
      here, and (bear with me) I'm going to teach. 
      In particular, I want to teach about three kinds of
      code.  There is code (executables) that can "run" and by
      running does things, there is code (HTML) which when viewed by a
      web browser appears as a website, and there is code (PHP) which
      is changed into HTML dynamically by the remote computer, or
      server, where the website lives.  The word "code" has many
      meanings.  I am referring here to three of the many kinds of
      computer code.  (See definitions: code,
      executable,
      HTML,
      PHP.) 
      To make my website I made executables which, in turn, made PHP
      when they ran.  Because the PHP becomes HTML, I will say
      that my executables made HTML, although this is not quite
      true.  Forgive me--I say this because it helps understanding. 
      HTML is special.  If you have a website (a Blogspot blog,
      for example), then you have HTML.  To view the HTML for a
      website, just right-click on the page and choose "View Page
      Source".  That's how you do it with the Firefox web browser
      on a desktop computer, for example.  I don't know how to do
      it on a cell phone. 
      To make the executables I sat at my desktop computer and ran a
      text editor program.  A text editor is a sort of word
      processor that works well for composing code, however you
      can do it with Microsoft Word if pressed.  It's like
      composing a poem or a blog article, except that there are special
      words that have special meanings and capabilities.  When
      used correctly these words allow the executable to run and do the
      tasks it was designed to do.  And a good executable
      will be multipurpose--once written it can be reused for different
      situations--in this case, for different web articles and
      pages. 
      The HTML of a Blogspot blog is made for you when you
      submit your article for publication.  (Or something like
      that--variations are possible and likely.  See my above
      discussion of PHP.)  However, I don't use any programs to
      make or publish HTML other than the web browser, the text editor
      (to compose the text of the articles that will become HTML), my
      home-made executables, and a large set of general-purpose
      executables that are standard on my Linux computer. 
      Not to short sell my creations, much of the credit here goes
      to the makers and supporters of the Linux operating system. 
      The Linux operating system and the Linux user community,
      together, are an awesome and unimaginably rich resource. 
      (See Wikipedia article on Linux.)  
      This web page suffered a counter failure.  I think it
      did, anyway.  It's hard to say for sure.  The counter
      suddenly lost several hundred hits.  I'm guessing that it
      failed in this way due to a problem with my PHP code.  I
      knew that the code lacked file locking.  I read online about
      PHP and file locking, and learned how to do it, although it seems
      there are at least two ways. 
      I did it using: 
      
      which I was inspired to do by a stackoverflow.com article. 
      This method insures that instances of "..." take turns in each
      directory.  Perfect!  
    
   March 2022 
   
      Woohoo!  I installed Slackware64 15.0, although I'm
      not yet using it as my "daily" system.  This was a
      significant step for me as it is my first experience using
      Slackware64.  
      One of my Fvwm window decorations, an X which closes the
      window, didn't look the same in the new Slackware.  I fixed
      it by re-making the vector data.  I'm guessing that this was
      needed due to a change in Fvwm.  
      I made a gnuplot graphing menu (called "plotting")  for
      SAM.  Gnuplot is already easy to use, but this made it
      easier.  My plotting menu has a sample gnuplot instruction
      file in $level/data, and I plan to add more such files for
      handy reference.  The tool I made is called gogeeqie
      and it takes two arguments: 
      
         
         | $1 |  | data-file |  
         
         | $2 |  | instruction-file |  
         
  
       
      As you might guess from the name, gogeeqie
      makes an image of the graph using gnuplot and the supplied data
      and instructions, then displays the image using
      geeqie (an image viewing tool that comes with
      Slackware).  
      I added to SAM some changes that allow it to run on a 64
      bit machine.  SAM needs Linux, and I have not tested it
      significantly with anything other than Slackware.  However,
      it wouldn't run (as expected) using Slackware64 15.0 without some
      changes. 
      SAM uses three small C executables.  I compiled them
      using my new Slackware64 15.0, and I put all (three 32 bit and
      three 64 bit) executables in a new place.  Where the
      executables previously lived I made three scripts with the same
      names that the 32 bit executables had (and still have).  I
      put in these scripts code which determines whether the machine is
      running a 32 or 64 bit operating system (using "uname -m") and
      then invokes the corresponding 32 or 64 bit executable. 
      These changes were a success!  
      I modified two SAM functions in the rsthread menu. 
      Doing this gave rsthread the ability to write datalines to files
      called data.txt in each local dir that has a counter in the
      corresponding remote dir.  The result is that I now have a
      way to capture the state of the counters, writing the data to
      files that can be plotted using my (see above) gogeeqie
      command.  
      I worked on clarifying the text of Linux in the Finance
      Office.  
      I put the Slackware 15.0 data point on the graph.  
    
   February 2022 
   
      My webhost (which I will not name) took away their secure
      shell service (ssh).  I was using ssh together with rsync in
      my rsthread menu to maintain this website.  Therefore, I've
      been diligently working to add ftp ability to rsthread.  I
      have it partly completed--enough to post this update. 
      I'll post again about this.  
      I finished writing changes that allow the use of ftp or
      ssh.  I did some initial testing, and the resulting code
      seems to work.  Still I miss ssh, as some things are easier
      done in a shell.  
      I finished (for now) the task of adding PHP counters to
      rsthread, then I used this new feature of rsthread to add
      counters to this website.  
      I added the ability, through a file added or removed by
      lftp, to control whether the counters of a website are paused or
      operational.  This gives me a way to visit the site without
      hitting the counters.  When the counters are paused a
      message saying "Counters are paused" appears above the counter on
      each page.  I applied the above to this website and I also
      added a page For Testing Counters which I will
      use to do do just that.  
      I added another feature.  Now I can upload and use a
      file of IP Address exceptions.  When a user visits one of my
      sites the list of exceptions is referenced by the PHP code. 
      If the user's IP address in in the list, then then counters are
      suspended for just that visit.  I wrote this,
      understandably, for my own use, as it is easier than
      adding/removing files as I described above.  
    
   January 2022 
    
      I worked as a finance assistant from November 2018 thru
      the end of December 2021.  This job, being in the realm of
      computers and numbers, was a good match for my abilities. 
      What I liked best about it, however, was that it gave me a rare
      opportunity--a chance to apply my Linux skills and tools in a
      business finance office. 
      I have decided to document this experience of applying Linux in the Finance Office as a
      project, since that's what it was.  If you click the link
      and read about it, you will see that, for better or worse, I took
      what would have been an ordinary job and made a project of
      it.  Hopefully, it was a worthy project. 
      I added floating captions to the picture and movie
      thumbnails of this website.  To read a caption, hover over a
      thumbnail.  Then I remade all the thumbmails to use this
      feature.  
      I fixed a problem that was caused by my use of "block" and
      "inline-block" in my html for this website.  Instead I now
      use an additional, nested table.  The problem was that the
      pages would print differently than they appeared on the
      screen.  The additional table was added around the headings
      in my content.  These are normally colored.  When I
      removed the "block" and "inline-block" the colored portion of the
      heading assumed the full line length.  I solved the problem
      using the addtional table, as I described.  
      I fixed a problem with floating captions (see
      above).  Since they are made from the same files that I use
      for the regular captions, some have html tags in them.  Well, it
      so happens that the title attribute that I used to make them,
      doesn't interpret html tags. 
      I fixed this problem by writing and implementing (in
      coolage) a tool that I call
      begone.  This tool outputs the first
      argument less occurrences of <...> that it contains, thus
      removing the html tags.  (Script coolage is
      one of the tools in rsthread.  It makes the html for the
      collages of pictures and movies.)  
      I want to mention these exciting software tasks I've been
      working on: 
      
         I'm currently working on adding PHP counters to
         rsthread and my websites.  
         I made a new SAM tool (in $sam_tool) called
         wolf.  It is a variation on another tool
         in the same menu called dog.  Like
         dog, wolf is for displaying
         "dog and pony shows" (a funny name for presentations). 
         Basically, it is a way of displaying html. 
         Now that I have a way to create html that can be browsed
         without a webserver I was inspired to make
         wolf for viewing this html.  Since this
         is similar to what dog does, I put it in the
         same menu and gave it a related name.  (Whereas
         dog views text files with embedded html tags,
         wolf is for complete websites installed
         locally.)  I also made a tool, noserver,
         which helps me to use rsthread to make this
         html.  
         I can't remember ever having blogged about my backup
         tools--the primary tool I call dd_back. 
         Making backups has long been a difficult task. 
         dd_back has been changing that.  It
         works well, and making backups is not so difficult now. 
         In recent weeks, however, I have made some
         improvements.  dd_back works by using
         two well known tools that are not mine--ddrescue and rsync--as
         needed to either make a disk image (when the image doesn't
         exist) or to update the disk image (when the image does
         exist).  So much use of devices and images has made me
         aware of the need for running e2fsck and/or dosfsck first
         before running dd_back on a device.  By
         my improvements I have automated this extra work and
         integrated it into the normal use of
         dd_back.  Hooha!  
         About a month or two ago I wrote a short bit of code
         called alarm that functions within an
         existing SAM menu.  (This menu I called "fmenu".  I wrote
         it to use at work, and it gave me convenient access to a
         collection of tools that I used daily.) alarm
         turned out to be surprisingly useful especially after I bought
         a H800
         Bluetooth Wireless Headset.  So useful, in fact, that
         I use it now around the house. 
         Let's say I'm baking bread, for example.  I already
         have my Linux box fired up and I'm enjoying a bit of Mark
         Hurst's Techtonic radio
         show (WFMU) on my new
         headphones.  I go to the kitchen and put my bread in the
         oven, then return to my Linux box in my office and navigate to
         fmenu.  I enter, "alarm test" to verify
         that the alarm is working.  "alarm off"
         silences the alarm.  Then I enter "alarm
         set 40".  The alarm will beep in my headphones in 40
         minutes.  The available shell command "atq" lets me
         review this scheduled alarm and any others.  And all this
         can be done without missing the radio show.  Again,
         hooha!  
        
    
   December 2021 
   
      I've been working on two projects.  The first one is
      a pair of SAM menus I
      call t_card and t_period.  Each is a collection of
      executables that work together for two different, but related,
      purposes.  Both are for the purpose of recording and
      reviewing my time worked on the job.  t_card is for my daily
      hours, and t_period uses the data from t_card to provide a
      summary of my hours worked for the pay period.  Both allow
      logging and totaling of hours by task. 
      Both also allow for a comparison of hours actually worked to
      hours reported for pay.  This may seem like an odd thing to
      do, but really it is not.  It is not uncommon for an
      employer to ask that the employee report hours rounded to the
      nearest tenth of an hour or even the nearest quarter of an
      hour.  This will cause an accumulated error over time. 
      And there may be other reasons for an error of this kind. 
      With my tools I can keep a running total of the accumulated error
      (or "delta").  Also, of course, having total hours worked by
      task is also useful. 
      These tools are not new.  I started using them in March
      2020, so that is just three months short of two years ago. 
      What is new that I am working on now is a revision to both t_card
      and t_period that changes the internal method of recording and
      summing the hours.  Whereas currently the tasks for which I
      could record hours were hard coded, I will soon be able to add
      and remove tasks to and from the set that the code processes
      without changing the code.  This will be a welcome
      relief.  I will be able to add and remove tasks easily,
      instead of the nightmare-ish code changes that were needed. 
      I say "nightmare-ish", because it is true.  I had worked
      on an intial set of changes which allowed a sort of straddling
      the fence.  I used indirection to refer to variables (for
      the tasks) on the fly, and I kept a table of the currently used
      tasks to which the method referred.  This was enormously
      clever, but not an improvment.   I abandoned that effort,
      and I now am using a method by which each task is represented by
      a file which stores the sum of the hours for that task.  Yes
      this is encumbered by using a file paradigm, but it works well
      enough it seems, and simplified the code. 
      This change has been coded for t_card, but not yet for
      t_period.  
      The other project is more work on rsthread.   I made
      some modifications to two of the executables (a function called
      mk_web and a script called harvest) and also a change to a
      required file, _link, in the set of files from which the webpages
      are built.  Additionally file _target is no longer
      needed. 
      The result is the optional ability to create a set of .html
      files for the website which can be viewed without the use of a
      web browser.   I had a need to present information in
      website form for my employer, but as the information was not
      suitable for publishing on the Internet, I searched for another
      method. 
      The changes I made were simple and don't interfere with the
      original functioning of harvest.  Best of all, the changes
      seem to work! 
      I'm learning, in the process of this work, about the syntax
      used by web browsers to interpret what you enter in the URL field
      or type into the href string.  It seems to be different for
      Firefox and Chrome.  I was able to coax Chrome into
      correctly displaying the same website that I normally upload to a
      webserver.  This surprised me, and I wonder if this is a
      reliable approach.  Certainly it is a handicap to require
      the user to use Chrome only. 
      With my new rsthread I can build an alternate set of .html
      files that have all href strings like this: "file:///<drive
      letter>:/<path>/<token>.html".  This
      approach seems to be reliable, but it requires that the hard
      coded drive letter used in the website be mapped before the
      website (perhaps on a flashdrive) is viewed by a
      browser.  
      I augmented crawl.  It can now skip dirs "junk" which
      I use to store previous versions of things--mostly
      executables.  And it can use files _dirlist instead of "ls
      -l" to find the dirs.  This allows me to put the menus in
      arbitrary order instead of the order given by "ls -l".  
    
   November 2021 
   
      I updated three movies (two in my Adventures of Bendyman set and a
      demo of a Fixed Thin
      Client).  I made the movies using my Canon camera, but
      discovered that although the mp4 files that I made from them work
      in Firefox (and other browsers?), they did not work on some (or
      all?) cell phones.  I have a tool which fixes them, as I've
      been aware of this problem.  What's new is that I used the
      tool to fix the movies.  
      I did some work on rsthread.  I gave it (my tool
      called sink) a limited use of recursive file
      transfers.  In particular it uses recursion for three dirs
      (called "ready", "thumb", and "flash").  They are well
      behaved dirs that I trust will not give rsync any trouble. 
      And the first two contain pictures and movies and so using
      recursion for them will save time.  The third one contains
      the html which is used to display the pictures and movies and the
      corresponding thumbnails.  
      I used what I described above (the fixed movies and
      sink) to make updates to this website.  
      I made and posted a new Adventures of
      Bendyman movie.  
    
   October 2021 
   
      I've been trying to decide where to go from here with the
      development and use of rsthread.   I toyed with some ideas
      for additional features which would be generalizations of the
      current capabilities.   For example, I considered modifying
      the method to save intermediate results when building the pages,
      so that these intermediate results could be reused.   This
      seems do-able, but it makes the code complex. 
      I also considered adding the ability to have more than one
      collage on the same page.   I began to see perhaps how to do
      this.   I'm afraid it would add considerable complexity. 
      I decided that I don't need either of these right now. 
      It is odd how the pull toward complexity is strong.   It had
      a hold on me.  I shook it off.   I will keep the code
      simple for now--it is elegant and usable. 
      I do need the ablity to add content that has full-size
      pictures and movies--not in a collage--mixed with text. 
      That will be fun finding good solution to this problem.  I
      will report back. 
      I will also spend some time using rsthread to edit and augment
      my websites (this site and Rosevear Software). 
      I've been using rsthread in its current form.  It
      works!  
      Because of continued, sporadic trouble with rsync for
      updating my websites, I embarked on a new project to make a website
      file-transfer tool. 
      I had already a tool I call "crawl".  I wrote it for use
      by rsthread.  It changes from directory to directory,
      recursively, performing a task in each.  I combined this
      with some rsync tricks and put the code together as Bash scripts
      and functions. 
      The result was a script called sink plus a
      few other supporting tools, especially one called
      trans which invokes sink via
      crawl like this (below) to transfer a whole directory,
      recursively, to the webhost: 
      
      Or it invokes sink directly to transfer just
      the current directory: 
      
      Tools sink and trans are
      brand, spanking new and have only been used a few times to update
      a website.  I have hopes that transferring files in this way
      will prove to be reliable and useful. 
      Note that this method I have crafted uses rsync, as I did
      before, but it uses it in a different way.  Before I used
      rsync in the classical way--I used it to mirror a directory from
      my local staging directory to the corresponding directory on the
      webhost, and I did this as a single, recursive, rsync
      invocation.  With my trans and
      sink method I can still do a
      recursive transfer of a whole directory, but multiple rsync
      invocations are used, without recursion, to transfer the contents
      of each directory one directory entry at a time.  Then it
      changes to the next directory and repeats.  
      I added to sink the ability to remove
      files and dirs on the host.  
      I discovered how to use ssh to run a command on the remote
      host from a local script.  I used that in
      sink to test whether the "to" dir for an rsync
      invocation exists before attempting to run it.  
    
   September 2021 
   
      I updated my method for building websites.   I now
      call it "rsthread" instead of "rs_php".  It is no longer
      php-based, but it retains much of the orginal method.  The
      result was good--it runs faster and more reliably.  
      I re-built this website using rsthread.  
      In the process of re-building this website I may have
      found a handy tip:  In the past I have struggled with
      rsync.  It is a great tool, but it has been failing
      sporadically when I use it to update my websites.  Today,
      after a series of failures, I decided to try running it directly
      from the console command-line, and without the use my SAM-based
      tool (called mirror).  Well, that fixed it--this time. 
      I'll use this new method going forward, and report back. 
      Note that mirror is still helpful.  I used it today for all
      the steps but the final invocation.  It already outputs the text
      of the invocation, so it is easy to copy it to the command line
      for execution.  
      A few days later...  The above theory doesn't seem to fit. 
      The fix that I found doesn't work consistently if at all. 
      I resorted to hacking out a piece of the target--in the area
      where the problem occured--then using rsync again.   That
      seemed to work, although it still took a few uses of rsync to
      finish without errors.  Incidentally, I used ssh to connect
      to the webhost, then "rm -R" to do the "hacking".  
    
   February 2021 
   
      I reached out.  I found a great group on Facebook (facebook.com/groups/unixshell). 
      It is great, because it is full of smart people who write shell
      code.  Not exclusively bash, but that's good--maybe I'll
      learn something. 
      After reviewing some of the posts in the group I was excited
      to find that others also are dealing with the challenges of using
      the shell to interface with spreadsheet data (see my January post
      below about crimport).  In fact, I soon had an opportunity
      to tell the story of crimport and bob<n>. 
      The group is about the *nix shells.   I learned that
      posts about Python are not allowed.  I will assume therefore
      that posts about C code are likewise not allowed.  I will,
      however, share about it here. 
      Here is a link to the source for the current version, bob8.c.  And here is a brief
      description: 
      
         It's a simple C program.   It reads from standard
         input and writes to standard output--one character at a
         time.  For each character it determines by some simple
         rules whether it is part of a new field or not and also
         whether or not the original field was quoted.  In this
         way it removes the commas that are not in quoted fields, but
         leaves the commas that are in quoted fields.  There is a
         little more to it, so please read the comments in the source
         code.  Also you can view file trans8.txt to learn more.  
        
    
   January 2021 
   
      Hello, hello, hello.  How is everyone out there?  How
      are you all? 
      I'm just carrying on as I usually do.  Not much ukulele
      playing though.  Instead I have been immersed in Bash
      programming.  Bash-shell programming in Linux is really
      amazing.  How can I tell you?  I am on a secret
      journey, it seems.  Sometimes I reach out for others who
      might understand--I know you are out there--but rarely do I get a
      response. 
      I have been writing sets of tools which perform tasks for my
      job--I work in a finance office.  My latest tool-set I call
      crimport.  This name applies to a collection of bash scripts and
      functions, plus one C executable.  Here are the names and
      types of the tools in the set: 
      
         byfunc, Bash script  
         bob6.exe, C executable  
         runchimp, Bash script  
         runcrimp, Bash script  
         crimport, Bash function  
         crfields, Bash function  
       
      The script runchimp is the main tool, as it runs the other
      tools.   Or you can use runcrimp, but the first one, which
      came from the second, does a better job.   These tools work
      together to make a journal entry import file for our finance
      software, called ACS OnDemand. 
      The import file is made from a csv file which comes from an
      Excel (spreadsheet) file.  The spreadsheet contains staff
      credit card data.  One of my work tasks is to collect data
      (and receipts) from staff members regarding their credit card use
      so that I may make the monthly journal entry which reflects the
      expenses in our general ledger. 
      Collecting the data and transferring it to the spreadsheet is
      no small part of the task.  I have tool-sets for that also,
      and I would like to share about them as well--later.  This,
      the current topic I'm sharing, is about translating the
      spreadsheet data into a journal entry import file. 
      Script byfunc and C executable bob6.exe were breakthroughs
      that made this happen.  And I use a tool that is in my
      "handy" tool collection called dribble--all within the framework
      of a menuing system (of my own creation) called SAM. 
      (231028 Here is a link to SAM.) 
      Here is an excerpt from file crimport.sam which defines
      function crimport: 
      
      bob6.exe and dribble (and byfunc) are made available for
      execution by use of invocations of SAM tools within the scripts
      and functions. 
      The above code sends the spreadsheet csv data (in file
      $longsprd) through three filters:  skip
      just skips the number of lines named to get past the title lines
      and the headings.  bob6.exe re-writes the
      csv data in space separated values format with double-quotes
      where needed to preserve the empty fields, which would be lost
      otherwise.  And dribble, together with a
      built-in shell tool called eval, relocates the incoming fields of
      the stream putting them after crfields where they function as
      shell parameters (also called arguments).  And that's where
      the magic happens. 
      This, I'm proud to say "clever", bit of code allows me to
      process the fields of the spreadsheet as bash arguments--the
      rest, with the exception of byfunc, was easy 
      Script byfunc should have been easy to write.  In the
      end, it was simple.   There's not much to it.  It is a
      single script that takes various arguments.  For
      example: 
      
      sums $84.23 into a file called sum001 where the current sum
      for ledger-function 001 is stored.  File sum001 is made and
      a value of 0 is put in it, if it doesn't already exist. 
      After the above command it will contain 84.23 more that it did
      previously. 
      
      outputs the value which is in file sum001, and 
      
      lists all the ledger-functions represented by the sum
      files. 
      Add to this 
      
      which removes all the sum files, and you have a complete
      tool.  With this I was able to solve the problem of
      generating the balancing transactions.  These are the
      transactions against the asset accounts which balance (by
      ledger-function) the sums of the transactions against the expense
      accounts. 
      Did I say that right?  Anyway, whiz bang, it works, and
      I'm giddy.  I apologize for my self-congratulation, but as I
      said, this is a secret journey!  
    
   August 2020 
   
      Yes, if you asked me, I would surely say that life during
      the current COVID-19 pandemic is difficult.  For me the
      biggest hardship has been the disruption to my routine. 
      I'm naturally routine-challenged to begin with--meaning I'm prone
      to keeping an erratic schedule, so I clearly do not need the
      disruption. 
      Perhaps some good has come of it, however.   I've found
      some time for things I wouldn't normally do.  Good things
      like building relationships (Facebook) and singing (accompanied
      by myself on ukulele). 
      So it is my singing that I was working toward in this
      post--could you tell I was edging in that direction?  My
      croaking voice.  And my wavering ukulele playing  Click
      here
      for a sample.  
    
   July 2020 
   
      We (my hard working wife and I) filed our taxes. 
      Whew.   That's over, but I want to tell a story about the
      California form 540-2ez, and forgive me if I rant a little. 
      I'm getting suspicious.   The California form, for
      several years, has been less than satisfactory.  The federal
      form 1040 is fill-able, and you can save it after filling it
      out.  Thank you.  The California form on the other
      hand, like previous years, is fill-able, but it claims that you
      cannot save your entries.  What good is that? 
      Actually it seems that you can save them (I was using Evince
      pdf viewer), but there is another more serious problem--some of
      the fields on the form would not let me make an entry.  That
      is not good.  What is going on?  Is it that hard that
      the state of California cannot make a tax form that works, let
      alone one that lets you save your entries?  I wonder if
      there was money involved.  Was this done to boost sales of
      Turbotax? 
      So I found a way to do it using my existing Slackware Linux
      installation.  In short, I did it in these steps: 
      
         I converted the form to a pdf form that doesn't have
         the extra buttons on it.  Again I am suspicious. 
         The buttons "Print", "Check for errors" and "Reset" might be
         useful, but I wonder if they are there simply to deface the
         form and spoil it for use by the method that I discovered. 
         Spoiled it was, but I found a work around which allowed me
         to convert the pdf to one without the buttons.  I used
         the Print button to print the form, but I selected a special
         printer that I installed a few years ago after reading a very
         interesting Internet article.  The printer is called
         "/tmp/whatever".  That is a story in itself, which I will not
         tell now, but when you print to this printer it looks for file
         /tmp/whatever--you need to make the file first.  If it exists,
         and is writable, then CUPS (the printer software) writes to
         /tmp/whatever a pdf file which if printed would be exactly
         what was requested to be printed--the blank tax form.  So
         after doing this I had a pdf of the form without the
         buttons!  
         Next I imported this pdf file into Gimp (which comes with
         Slackware).  Gimp is like PhotoShop, only free.   I
         imported the pdf page by page each time exporting the page to
         a different pnm file.  This format, pnm, is like jpg,
         except that is is not, I think, compressed.   It is an
         image file.  
         Then, equipped with a pnm file for each of the pages of
         the state form, I proceeded to fill the blanks by writing to
         the image files, one at a time, using Kolourpaint.  I
         found that the Deja-Vu 12pt font worked great, except for the
         SSN and maybe one other field which needed 10 pt.  I
         saved each filled-out page as a png file (not pnm), because it
         was suitable, and it seemed that Kolourpaint did not offer
         pnm.  
       
      This wasn't particularly hard.   OK, it was a little
      hard, but it was such a relief and a pleasure to have a method
      that worked and did what I needed.  Thank you Linus
      Torvalds, Patrick Volkerding, and thank you to the person who
      wrote the article about printer /tmp/whatever.  Thank you
      very much! 
      Just to clarify:  This method that I described does not
      give you a fill-able form.  Instead it gives you a way to
      write on the form, which is almost as good.  You need to use
      care to align your text in the fields.  This method gives
      almost the same result as a fill-able form, and it has the
      benefit of allowing you to save the filled-out form.  
      Hello.   This will be a blog-style post, as I'm
      feeling a little blog-ish. 
      Hosting a website can be rewarding, but I've noticed two
      trends that are, frankly, discouraging. 
      Firstly, this website doesn't get as many visits as it did
      once.  Surely, I'm partly to blame for this.  I don't
      post updates regularly, and I don't try very hard to make my
      posts interesting and relevant.  I admit it:  This
      website is primarily self-serving--I like to talk about
      myself.  Yet, in talking about myself, or by posting links
      about things of interest to me, I have in the past I think
      sparked a little interest.  Sadly, that "little interest"
      seems to be fading. 
      Secondly, I've been receiving an increasing number of requests
      to post links on this website to dumb stuff.  And I'm being
      nice when I say that.  At first, just to see what would
      happen, I played along.  I put the links in a separate
      place, my Gratis Links, to let the reader
      know that I had some reservations, and I posted links to mostly
      whatever came my way.  Well, I'm starting to get
      annoyed.  Apparently I'm not alone in this.  Here is a
      link to a sympathetic article: 
      New Mouth Inc.  The most stupid series of emails J4MB has ever
      received?. 
      OK, I do use some judgment when selecting the requests
      to which I will respond.  I will try a little harder,
      though--maybe we can do this together.  Your part is to send
      requests to me to link to good stuff.  Stuff that
      matters.  Stuff that is not so obviously an effort to fleece
      the public and take advantage of the gullible.  I will, in
      turn, try to keep this site interesting, relevant and
      current. 
      Deal?  
    
   April 2020 
   
      I made a Patreon project called Joe's Life.  It is
      about my projects, links, photos, and more, and it
      references this website. 
      Will you be my patron?  
    
   March 2020 
   
      I wrote some software that I use at work.   Every
      month I send about eighteen emails each to a different address,
      some with a Cc, and each with one or two unique attachments. 
      Previously, I did it the hard way--manually, one at a time
      using Office365.  That worked, but it wasn't long before I
      was wishing for a better way.  After some searching, I found
      an example Python script which sent emails using Starttls
      encryption. 
      I understood Starttls to be the encryption method I needed to
      use for Office365.  You see, I needed more than just to send
      emails.  I needed to send them from the same server from
      which I had previously sent them by hand.  That way I could
      put my work email address in the From header and the recipients
      could reply in the usual way.  The emails would appear to
      have been sent normally. 
      The Python script I found was great.   Its only lack was
      not having a way to send attachments.  I searched some more
      and found lots of rather confusing scripts, then finally a simple
      one that I could reproduce and harness for my needs. 
      But it didn't work. 
      Stymied, I remembered something I had read in a post
      on StackOverflow.com.  Someone had commented about a
      typo seen on the Internet--"content-decomposition" instead of
      "content-disposition".  I checked my code and discovered
      that was the problem.  I felt a little foolish for not
      having noticed.  I fixed it, and bingo--I could send an
      email with an attachment. 
      But I wasn't done.  I added to the script some
      modifications which enabled: 
      
         Adding a Cc when needed.  
         Adding one or two attachments when needed.  
         Giving server name, port, password, user name, and from
         address by running a user-provided function which assigns the
         above information to environment variables referenced by my
         Python script.  
         Invoking the script from the command line with six
         arguments: <to address> <cc address or "-">
         <file containing the subject> <file containing the
         content> <optional first attachment or "-">
         <optional second attachment or "-">  
       
      I also canonized it by adding it to my SAM menu
      system.  This made it easy to use and document and also
      paved the way for adding some helper scripts.  (231029 I
      updated the preceeding link.) 
      I call the Python script dupe, and you can
      get it here
      in a SAM menu called handy which includes helper
      scripts.  (231029 I updated the preceeding link and this
      paragraph.)  
    
   December 2019 
   
   November 2019 
   
      Although my Fix Thin Clients
      project has wound down, I have continued development of the
      method on which it was based.  And I have renamed it. 
      Instead of SuperDrive I now call my method ZombieSlack. 
      Slack because it is an embodiment of Slackware.  Zombie
      because it is not a live system and it is also not a
      traditional non-live system.  Being neither live nor
      dead there is only one word for it--zombie. 
      OK I'm playing word games I'll admit, but there is another
      reason for the zombie moniker--it does what a zombie does--it
      takes posession of the host and re-animates it.  It does
      this at different levels. 
      It runs in the same form whether installed to a flash drive,
      hard drive, or solid state drive.  Also it matters not whether
      the drive is internal or external.  Whatever the drive, when you
      boot the machine from the drive ZombieSlack takes over the
      machine--much like how a zombie takes over the host body. 
      This is zombie behavior level zero.  Zero because the host
      possesion is temporary.  Whatever was installed to the host's
      drives remains completely unchanged and usable as before. 
      When ZombieSlack is installed to a drive I call it a
      ZombieDrive.  A ZombieDrive is an interesting thing.  As I
      explained above, you can use it to boot a machine (it is
      bootable).  You can also use it to wipe and install
      to a host drive.  The wiping is done by invoking function
      wipe which is in the SAM menu
      at /RS/opt/h_tool, and the installing is done by
      running script /boot/tool/uptask-stc.  A
      ZombieDrive thus has the ability to pass its zombie-ness to other
      drives.  Essentially, when it bites another drive the drive
      becomes a ZombieDrive.  Level one. 
      Level two answers an important question, "If zombies come from
      zombies, then where did the first zombie come from?"  My
      ZombieSlack is an embodiment of Slackware.  My first
      ZombieSlack installation was on a hard drive in a computer.  I
      made it by tweaking a stock Slackware 14.1 installation. 
      The changes were made by hand by careful design.  After I
      got it working I then wrote the script which installs ZombieSlack
      to another drive.  Finally, as a last step, I
      reverse-engineered a method by which I could apply the changes
      (ZombieSeed) to a new Slackware installation, thus making it into
      ZombieSlack, and I incorporated that method into the install
      script.  The install script could thus insert ZombieSeed
      into a Slackware installation (making a ZombieDrive) or install
      from one ZombieDrive to another drive (also making a
      ZombieDrive). 
      What I did was elementary--I added some scripts and dirs to
      Slackware, and I modified some existing scripts and config
      files.  Elementary, yet radical.  By making a few
      changes I made the default user's home directory contents (I call
      this file space) changeable, yet self-restoring.  In
      this way I was able to fit a full Slackware 14.1 installation on
      a 16GB USB 3.0 flashdrive--without performance issues.  And
      I made a system that was immune to breakage by user error. 
      I tested the new script that I made by doing something that I
      seriously needed.  I made a Slackware 14.2 based ZombieDrive.  I
      called it ZombieSlack/Slackware-14.2.  That was a
      breakthrough.  I might have been able to upgrade from Slackware
      14.1 to 14.2 without this ability, but with it I upgraded in a
      way that kept my modifications neatly separated, conceptually,
      from Slackware. 
      I am looking for new projects--new opportunities to apply this
      method.  
    
   August 2019 
   
      Here's a little story about my Latitude E5400 laptop and
      Slackware Linux.  (Windows users, I think this may interest you
      also.) 
      Some time ago my laptop started giving me a message that went
      something like "The AC power adapter wattage and type cannot be
      determined..." Then it would refuse to charge the battery.  At
      first it was intermittent.  I would disconnect and reconnect the
      power, and it would be OK.  But today not. 
      I was faced with the possiblity of being without my laptop
      which I use for work.  Alternate ways of getting at my data were
      turning over in my mind.  Hmmm. 
      A little Internet research and some twiddling with my laptop,
      battery, and adapter led me to conclude that it was the fault of
      my AC power adapter, so I started an Internet search for a
      replacement.  I found a Targus 90W Universal laptop charger at
      Best Buy.  I paid for it online and it was ready for pickup
      within an hour. 
      When I picked it up at the store I was immediately comforted
      by the nice box it came in.  Stupid huh?  Anwyay, when I got it
      home and un-boxed it, it seemed to work fine.  Whew.  That was a
      relief.  Later I realized that I gained more than the continued
      use of my laptop.  I had learned a neat trick in the process. 
      Earlier, while investigating the problem, I had re-discovered
      the built-in function which turns the battery charger on and off. 
      You operate it by holding the blue Fn key, followed by pressing
      the F2 key.  (I'll call this "Fn+F2".) I had used this before,
      but today I found a neat trick I could do with it. 
       I had read that Lithium batteries, such as the one in my
      laptop, would have a longer life if stored with a 40% charge. 
      That always left me wondering, though, how it could be done.  The
      normal function of the laptop charger brings the battery up to
      100% charge before stopping.  The unanswered question was how to
      charge to 40%, then keep it there. 
       One way of course would be to charge to 100%, then, unplug the
      charger and monitor the dis-charge with a tool like gkrellm
      or upower (use "upower
      -d").  When the battery reaches 40%, shutdown, remove the
      battery, and store it.  Sorry, but that is a really lame
      solution. 
       Enter the neat trick.  Do the above, but let the battery
      discharge to about 30%.  Then reconnect the power and watch the
      charge.  When it reaches 40% stop the charge by pressing Fn+F2. 
      I don't know exactly what this does, but it seems to allow the
      adapter to power the computer without charging the battery.  It
      seems to effectivley halt the charge, thus keeping it, at least
      for a while, at a constant level. 
      Actually when I did the above the charge crept up to 41%
      somehow after I pressed Fn+F2.  No problem.  What I wonder is
      will the charger maintain the charge level, or just leave the
      charge level alone and thus allow for the natural self-discharge
      to gradually bring the level down?  Of course, there is also the
      self-discharge that will happen while the laptop is off and not
      in use. 
 
      Well, I still think it is a neat trick.  
      I learned a little more about use of "Fn+F2".  It doesn't
      actually turn off the battery charger.  Instead it toggles the
      charge rate between the normal rate (which may be slow or fast
      depending on the BIOS setting) and a very low rate.  I'm guessing
      that this very low rate is intended as a way to maintain the
      charge at the current level.  Just enough to balance the the
      self-discharge. 
      So maybe it isn't so lame to remove the battery.  One might
      wonder what harm is done to the battery by maintaining it for
      long periods on a very low rate of charge?  Perhaps do the steps
      I described to adjust the charge to 40% and keep it there, then
      remove the battery at the next regularly occuring shutdown. 
      Maybe store it in a resealable bag with a note stating the charge
      level and the date.  
    
   December 2018 
   
      I found an interesting service called Peertopia.  I might someday
      want to sell Rosevear
      Software products on this site.  I started to read the
      details and I came to a section called "Limitation of
      Liability".  I thought, "Great, not this again!"  The
      text was in all caps and nearly impossible to read.  I
      re-wrote it using 
      
      just as I did before (see September 2018).  Here is the
      result: 
      
          You acknowledge and agree that you assume full
         responsibility for your use of the site. 
         You acknowledge and agree that any information you send or
         receive during your use of the site may not be secure and may
         be intercepted by unauthorized parties. 
         You acknowledge and agree that your use of the site is at
         your own risk. 
         You acknowledge and agree that, to the fullest extent
         permitted by applicable law, neither peertopia nor its
         affiliates, suppliers, or third-party content providers will
         be liable for any direct, indirect, punitive, exemplary,
         incidental, special, consequential, or other damages arising
         out of or in any way related to the site, or any other site
         you access through a link from this site or from any actions
         we take or fail to take as a result of communications you send
         to us, or the delay or inability to use the site, or for any
         information, products, or services advertised in or obtained
         through the site, peertopia's removal or deletion of any
         materials submitted or posted on its site, or otherwise
         arising out of the use of the site, whether based on contract,
         tort, strict liability, or otherwise, even if peertopia, its
         affiliates, or any of its suppliers has been advised of the
         possibility of damages. 
         
         This disclaimer applies, without limitation, to any damages
         or injury arising from any failure of performance, error,
         omission, interruption, deletion, defects, delay in operation
         or transmission, computer viruses, file corruption,
         communication-line failure, network or system outage, your
         loss of profits, or theft, destruction, unauthorized access
         to, alteration of, loss or use of any record or data, and any
         other tangible or intangible loss. 
         
         You specifically acknowledge and agree that peertopia shall
         not be liable for any defamatory, offensive, or illegal
         conduct of any user of the site. 
         
         Your sole and exclusive remedy for any of the above claims
         or any dispute with peertopia is to discontinue your use of
         the site. 
         
         In no event shall either party be liable to the other for
         exemplary or punitive damages. 
         
         
         
         Content is also provided by sellers on the site. 
         
         Please note that sellers may post content that is
         inaccurate, misleading, or deceptive. 
         
         We neither endorse nor are responsible for any opinion,
         advice, information, or statements made by sellers. 
         
         We will not be liable for any loss or damage caused by your
         reliance on such information or materials. 
         
          The opinions expressed by sellers and third parties reflect
         solely the opinions of the individuals who submitted such
         opinions and may not reflect our opinions.  
       
      I don't intend to discredit the site.   I think it is a
      great site offering a valuable service.  I just wanted to
      translate the text that was hard to read as a help to you. 
      Don't you agree it is better to use text that is
      readable?  Why hide your words by making them hard to
      read?  I think it is poor business to use such
      tactics.  
    
   October 2018 
   
   September 2018 
   
      The United States Postal Service (USPS) has enticed me to
      try their new Informed
      Delivery Service.  As part of the signup process I am
      asked to agree to their Terms and Conditions.  These contain a
      horribly hard to read paragraph in all caps. 
      Perhaps they didn't want me to actually read this
      paragraph.  
      Rather than concede to their rude tactics I piped it though
      Linux tr command 
      
         tr '[:upper:]' '[:lower:]'  
       
      to help me re-write the paragraph.  The re-write also
      included: 
      
         Capitalizing the first letter of each
         sentence.  
         Correcting two spelling errors.  
         Correcting one grammar error.  
         Adding one line of white space between each sentence to
         improve readability.  
       
      Here is the result: 
      
          By accepting and agreeing to this agreement,
         you consent to and accept the risk in receiving information
         via email and/or text messaging through the service. 
         
         Such electronic communications may provide the above
         mentioned services, but may also contain marketing messages as
         well as requests for feedback from you regarding the
         service. 
         
         You may withdraw such consent at any time, but if
         withdrawing such consent, some functionality of the service
         may not be available to you. 
         
         You acknowledge and agree that your telecommunications
         carrier may charge data usage fees (including additional
         charges when roaming as well as fees for sms or text messaging
         that may be used to receive updates related to the tracking of
         mailable items) to access the service, and that the postal
         service shall not be liable for any such fees as a result of
         your use of the application or the service. 
         
         Additional fees or costs may accompany your receipt of
         emails sent through the service.  You should contact your
         wireless or telecommunications provider for complete pricing
         details.    
       
         
      Now that I can read it, I wonder why they tried to hide
      it.  Perhaps it was not intentional after all, just poor
      composition. /li>
    
   July 2018 
   
      I have an HP Deskjet D1560 printer that I want to use in
      Slackware 14.2 (Linux).  It worked fine in Slackware
      14.1.  In 14.2 I get filter errors.  I traced the
      problem by looking in /var/log/cups/error_log.  It said that
      there was a problem with the perl script: 
      
      
      I Googled for help and I found a post in LinuxQuestions.org describing
      a similar problem (different printer) also going from Slackware 14.1 to
      14.2: 
      
      
      I also learned that the syntax used in the perl script is deprecated
      and destined to fail in future versions of perl: 
      
      
      Well, it's failing. 
      
      This is bound to affect more people than the two I've counted so
      far. 
      
      Are you listening, HP?  
      Well, I fixed it.   I'm not sure where the blame
      lies.  There is probably more to this than I
      understand.  Anyway, I fixed it by making some changes in
      /usr/lib/cups/filter: 
      
      I should explain, however, that the bug report was not about my problem.   It was about a very different
      printing problem, but, lucky for me, it had a similar
      solution.   
      Patrick Volkerding of Slackware.com needs
      money.  See this article. 
      Donate here. 
      See also my links at joeslife.org/links/computing/slackware  
    
   April 2017 
   
      This fascinating fractal-zoom of the Mandelbrot set may
      cause eye strain or headaches.  You have been warned: 
       
      I encountered a new word, "performant". 
      Animadversor at english.stackexchange.com
      had this to say about it: 
      
         There's not really anything inherently wrong with
         performant; its formation is regular enough and it seems to
         convey a meaning that no other single word conveys.  If
         that is enough for you, then go ahead.  But you ought to
         know that the word will be ill-regarded by many, who will
         consider it a pseudo-learned, affected, vulgar and pointless
         novelty.  Of course, perhaps they are wrong about this,
         but even if so, they may well be people whose good opinion of
         your language is important to you. 
         answered Mar 31 '13 at 6:52 
        
         Animadversor  
        
    
   April 2016 
   
      I made a new project, Fix Thin Clients.
        
      I took my picture off of the pages and replaced the old
      banner with a simple box.  The reason was twofold:  One, I'm
      tired of having my picture on the pages, and, two, the new banner
      is stretchable.  This allows the text line length with to be
      adjusted.  Sorry it has taken me so long to make this
      change.  Before it may have been hard to read the long lines.
        
      This is the best news.  I've been a radio controlled
      model airplane builder and flyer for nearly forty years. 
      Now I'm an aviator! 
       
         "Make no mistake: unmanned aircraft enthusiast are
         aviators, and with that title comes a great deal of
         responsibility," said U.S. Transportation Secretary Anthony
         Foxx. "Registration gives us an opportunity to work with these
         users to operate their unmanned aircraft safely. I'm excited
         to welcome these new aviators into the culture of safety and
         responsibility that defines American innovation." 
          
        
    
   January 2016 
   
      What happens to a dream deferred? 
      Does it dry up 
      Like a raisin in the sun? 
      Or fester like a sore -- 
      And then run? 
      Does it stink like rotten meat? 
      Or crust and sugar over -- 
      Like a syrupy sweet?
 
  
      
      Maybe it just sags 
      Like a heavy load.
 
  
      
      Or does it explode?
   
    
   
   December 2015 
   
      Click  here to listen
      on YouTube:  
      
         Run Rudolph Run
 
  
         Out of all the reindeer you know you're the mastermind 
         Run, run Rudolph, Randalph's not too far behind 
         Run, run Rudolph, Santa's got to make it to town 
         Randalph he can hurry, he can take the freeway down 
         And away went Rudolph a whizzing like a merry-go-round
 
  
         
         Said Santa to a boy child "What have you been longing for?" 
         "All I want for Christmas is a Rock and Roll electric guitar" 
         And away went Rudolph a whizzing like a shooting star
 
  
         
         Run, run Rudolph, Santa's got to make it to town 
         Can't you make him hurry, tell him he can take the freeway down 
         And away went Rudolph a whizzing like a merry-go-round
 
  
         
         Said Santa to a girl child "What would you like most to get?" 
         "I want a little baby doll that can cry, scream and wet" 
         And away went Rudolph a whizzing like a Saber jet
 
  
         
         Songwriters 
         JOHNNY MARKS, MARVIN BRODIE
 
  
         
         Published by 
         Lyrics © ST. NICHOLAS MUSIC INC.
 
   
         
       
      Christmassy, huh?  Many artists recorded this song, but I like
      Chuck Berry's the best.  I found these lyrics at  www.metrolyrics.com.  
    
   October 2015 
   
   March 2015 
   
      - There once was a barber named Ware
 
      Who was sadly allergic to hair. 
      When customers called, 
      Unless they were bald, 
      He would sneeze them right out of the chair. 
      --- Ogden Nash 
      
  
    
   January 2013 
   
   August 2012 
   
   August 2011 
   
      I put a few new links in my computing
      links page.  If you want to see them, search on "sed", and
      you will get the old and new links about "sed".  
      I upgraded to Slackware 13.37.  (Here's a link to the Slackware
      website.)  
      I've been building a little, on my Curtis Robin.  
      I've even been flying my Wanderer occasionally.  
    
   March 2011 
   
      I've been staying busy, but not by working on this
      website!  I've posted a few new links and a few new
      pictures.  
      Here's what I have been doing: 
      
         I integrated a Linux box into our home entertainment
         area.  Now we can watch TV, internet movies, or
         DVDs.  
         I upgraded my rsync-based backup system with some
         software improvements plus two new, one-terabyte hard drives
         in USB enclosures.  
         I migrated my daily computing to Slackware 13.1. 
         I've had it on my box for a long time, but had to work out
         some details.  
         Another detail was my e-mail software.  I had been
         using kmail, but it doesn't work well in Slackware 13.1. 
         So I migrated to Thunderbird (which works great!).  
         I bought an MP3 player and learned how to use it. 
         I wrote some tools to manage putting songs on it.  
         I downloaded and installed the new Adobe Reader
         9.  Ah, progress.  New data formats require new
         software.  The good news is that it was free!  
         I made some improvements to my Fvwm2 desktop. 
         Mainly, I made a bunch of new MiniButtons to make it easier to
         invoke my commonly used apps.  
         I discovered that "links -g" works great in my new
         Slackware 13.1.  Is this because I'm using a different
         video driver?  
 
         I learned how to better use USB sound devices, and I
         managed to get my old PPA 6channel USB sound adapter to work
         (after about three years of trying).  
        
    
   July 2010 
   
   December 2008 
   
      I've made a little progress on this website.  
      I've been working on a website that lives on my camera's
      flash memory stick.  That may sound a bit odd.  It is
      another of my humble inventions.  It helps me to organize,
      view and share the pictures that I take.  
    
   November 2008 
   
  
   October 2008 
   
 |  
 
       |