Joe's Life






News:

News from Joe's Life
January 2022

  • I worked as a finance assistant from November 2018 thru the end of December 2022.  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 to 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.)

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 re-used.  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:

      sink

    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 in making 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.

    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.

    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.

    I call the Python script dupe, and you can get it here.  Alternately, when you get SAM at the above link, it contains dupe in a menu called handy which is part of the example module.  The helper scripts are included.

    If you don't use SAM and the helper scripts, then I recommend that you make a bash script to invoke dupe as many times as needed with your choice of arguments for each invocation.  You'll also need to manually check the existence of the referenced files and the syntax of the invocations.

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

    Slak 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 ZombieSlak 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 ZombieSlak 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 ZombieSlak is an embodiment of Slackware.  My first ZombieSlak 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 ZombieSlak 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 ZombieSlak, 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 ZombieSlak/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

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

        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

      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
  • 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: 2022-01-28 01:39:37   |