Hits since 2024-07-10 14:36:15:

Joe's Life


News from Joe's Life
April 2024
  • I've been chatting with Pi.  Just for fun I've been sharing ASCII art with him.  I showed him a picture of my "skillet breakfast".  Read more in the AI blog.

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]


      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:

        cryptsetup \
        --verbose \
        --cipher aes-xts-plain64 \
        --key-size 256 \
        --hash sha256 \
        --iter-time 1000 \
        --use-urandom luksFormat $1

      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:

        crypt /dev/sda1 bob
        mke2fs /dev/mapper/bob
        ucrypt bob

      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:

        lksmnt /dev/sda1 /mnt/hd bob
        <Do what you need to do to /mnt/hd.>
        ulksmnt bob

      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.


  • 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

  • It took some effort, but I "finished" the recent set of revisions to the ZombieSlack code.

    • I was motivated by the desire to do a favor for my brother.  He has an HP All-in-One which is broken.  Somehow his MicroSoft Windows operating system stopped working.  He lives too far away for me to go there and fix his computer, and I don't fancy myself a Windows expert anymore, anyway.

      Instead I made a ZombieDrive and mailed it to him.  Now his computer works and runs Slackware Linux in the form of ZombieSlack/Slackware-15.0.

      Note that together--on the phone--we changed the BIOS settings (disabled secure boot, enabled legacy boot), but nothing else. Nothing was changed on the main drive, and the new Linux system runs completely without use of it.

    • Another motivator was the desire to make a new ZombieDrive for my wife to use when she wants to do online shopping or banking.  She had one already, but it was sadly dated.  It is safer to use an up-to-date system.  Now she has one.

    The result was good.  The ZombieSlack code is much improved and now runs in SAM.

    Let me clarify.  The ZombieSlack code is the tool set by which the user creates and manages ZombieDrives.  It is this tool set which runs in SAM.  The ZombieDrives themselves do not need SAM.

  • After accomplishing the above, some needs became apparent, so I made some changes (to be used in down-stream ZombieDrives):

    • I added the use of xrandr to the .xinitrc file that starts Fvwm2 when the ZombieDrive boots, and I added the use of file "screen" which keeps system's current display state.  The user can change the display state, thus choosing different x and y pixel combinations, by specifying "screen=<screen>" at the boot line.

    • I added a new tool to /usr/local/bin called showvol.  Whereas before I depended on xfce4-volumed-pulse, now I use showvol, instead.  This is a simple xterm-based tool.  It displays the current volume as a number, and plays a sound using that volume, when the volume is changed.

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

  • I've been working on my ZombieSlack project.  This is the Fix Thin Clients project, generalized.

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:

      while(!@mkdir $operate_lock));



    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 /mnt/joe_root/lib/other/websites/data, and I plan to add more such files for handy reference.  The tool I made is called gogeeqie and it takes two arguments:


    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:

      crawl sink

    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:

      # Process $longsprd.
      cat $longsprd | skip 3 | bob6.exe | dribble eval crfields

    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:

      byfunc 001 84.23

    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.

      byfunc 001

    outputs the value which is in file sum001, and

      byfunc list

    lists all the ledger-functions represented by the sum files.

    Add to this

      byfunc clear

    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.


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

      tr '[:upper:]' '[:lower:]'

    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

  • This Harry Nilsson song popped into my head the other day.  It was the phrase "Going where the weather suits my clothes" that did it. Here are the lyrics-- Everybody's Talkin.

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.

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:

      /usr/lib/cups/filter/footmatic-rip-hplip, line 1656

    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


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."

        The above is from this webpage.

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?
        -- Langston Hughes
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


      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
  • I wrote some tools to enable me to use rsync to maintain this site.  Formerly I used lftp which was tragically, dramatically slow.  I used the new tools to make a bunch of revisions to this site.
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
  • I added some links.

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
  • It has been a full year since my last entry.  I made a few revisions to this site in the links area.  Looks like I've also made some revisions to my picture pages.

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
  • OK, the website is shaping up a little.  I've been adding pictures, and there is a page of links.  You may have noticed that this site replaces my previous website.

October 2008
  • Ya, hi.  Joe here.  Hope you like the website.

© Joseph Rosevear
  |   Source touched: 2024-07-10 14:37:42