
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yokel Economics &#187; Linux</title>
	<atom:link href="http://192.168.0.198/archives/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://192.168.0.198</link>
	<description>Writings, notes, and data</description>
	<lastBuildDate>Mon, 30 Mar 2026 02:04:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>IceWM, Picom, and LXQT on Debian 12</title>
		<link>http://192.168.0.198/archives/2823</link>
		<comments>http://192.168.0.198/archives/2823#comments</comments>
		<pubDate>Sun, 08 Feb 2026 17:17:43 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[IceWM]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[LXQT]]></category>
		<category><![CDATA[Picom]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2823</guid>
		<description><![CDATA[This article details how to customize the user interface on Debian using IceWM and picom, and includes a useful font. This applies to Debian 12 at present and applies to any installation of IceWM and Picom as of this date. The version of IceWM used is 3.31, which is copyright 1992-2012 Markko Macke, and 2001 [...]]]></description>
			<content:encoded><![CDATA[<p>This article details how to customize the user interface on Debian using IceWM and picom, and includes a useful font. This applies to Debian 12 at present and applies to any installation of IceWM and Picom as of this date. The version of IceWM used is 3.31, which is copyright 1992-2012 Markko Macke, and 2001 Mathias Hasselman. The Picom version is 9.1, which is from 2022. These are the versions in the Debian repositories for Debian 12 as of this writing.</p>
<p>Download <a href="http://192.168.0.198/wp-content/uploads/2026/02/themes.tar.gz">themes.tar</a>, which contains 155 themes for IceWM including BlueSteel. This theme set is larger than the default extra-themes archive that one finds in Arch Linux or older version of other distributions. Download <a href="http://192.168.0.198/wp-content/uploads/2026/02/ubuntu-font-family-0.83.zip">ubuntu-font-family-0.83</a> for the complete set of Ubuntu fonts.  One font that I enjoy is AG57, <a href="https://github.com/neueneue/AG57">Akzidenze Grotesk</a>, some details of which can be found <a href="https://www.hackinggutenberg.berlin/en/work/ag57">online</a>.  That font is the precursor of Helvetica, which is also a wonderful font to use .</p>
<p>Extract the individual themes to ~/.icewm/themes.</p>
<p>Then, to modify that size of the text in the title bars regardless of theme, create a prefoverride file.  This is needed in the case of high resolution displays where the standard scaling settings do not modify the size of the window title bar text in IceWM.</p>
<p>Filename: ~/.icewm/prefoverride</p>
<pre># TitleFontNameXft="Impact, Condensed:size=10"
TitleFontNameXft="ubuntu:size=12"</pre>
<p>In this example, the font that I enjoyed called Impact is commented out, and Ubuntu is set to active. I used Impact, but choose to change it to Ubuntu. I left the comment there so that I could remember that one in the future.</p>
<p>By default, with this version, there is a sample config file in /usr/share/doc/picom/examples/picom.sample.conf.  Copy this file to ~/.config/picom/picom.conf and modify to to suit your preferences.</p>
<p>In my case, I changed the shadow widths on the windows and their starting locations.  I also disabled transparency because I dislike the effect of partially transparent windows.</p>
<p>Here is my config file (~/.config/picom/picom.conf):</p>
<p>&nbsp;</p>
<pre>#################################
#             Shadows           #
#################################

# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;

# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 12;

# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
shadow-opacity = .60

# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -10;

# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -10;

# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0

# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0

# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0

# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
# shadow-color = "#000000"

# Specify a list of conditions of windows that should have no shadow.
#
# examples:
#   shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
  "name = 'Notification'",
  "class_g = 'Conky'",
  "class_g ?= 'Notify-osd'",
  "class_g = 'Cairo-clock'",
  "_GTK_FRAME_EXTENTS@:c"
];

# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
# clip-shadow-above = []

# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
#    shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""

# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false

#################################
#           Fading              #
#################################

# Fade windows in/out when opening/closing and when opacity changes,
#  unless no-fading-openclose is used.
# fading = false
fading = true;

# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;

# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;

# The time between steps in fade step, in milliseconds. (&gt; 0, defaults to 10)
# fade-delta = 10

# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []

# Do not fade on window open/close.
# no-fading-openclose = false

# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false

#################################
#   Transparency / Opacity      #
#################################

# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
#inactive-opacity = 0.8;

# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
#frame-opacity = 0.7;

# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
# inactive-opacity-override = true
#inactive-opacity-override = false;

# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
active-opacity = 1.0

# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0

# Specify a list of conditions of windows that should never be considered focused.
# focus-exclude = []
#focus-exclude = [ "class_g = 'Cairo-clock'" ];

# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0

# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
#    opacity-rule = [ "80:class_g = 'URxvt'" ];
#
#opacity-rule = []

#################################
#           Corners             #
#################################

# Sets the radius of rounded window corners. When &gt; 0, the compositor will
# round the corners of windows. Does not interact well with
# `transparent-clipping`.
corner-radius = 0

# Exclude conditions for rounded corners.
rounded-corners-exclude = [
  "window_type = 'dock'",
  "window_type = 'desktop'"
];

#################################
#     Background-Blurring       #
#################################

# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
#
# blur-strength = 5

# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = false

# Blur background of windows when the window frame is not opaque.
# Implies:
#    blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false

# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false

# Specify the blur convolution kernel, with the following format:
# example:
#   blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ""
blur-kern = "3x3box";

# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
  "window_type = 'dock'",
  "window_type = 'desktop'",
  "_GTK_FRAME_EXTENTS@:c"
];

#################################
#       General Settings        #
#################################

# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false

# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
# backend = "glx"
backend = "xrender";

# Enable/disable VSync.
# vsync = false
vsync = true;

# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false

# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;

# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;

# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;

# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
# detect-client-opacity = true;

# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false

# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false

# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0

# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []

# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true;

# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. This usually means windows from the same application
# will be considered focused or unfocused at the same time.
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
#
# detect-client-leader = false

# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1

# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []

# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false

# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false

# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true;

# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false

# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ""

# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false

# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false

# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0

# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false

# Set the log level. Possible values are:
#  "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";

# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = "/path/to/your/log/file"

# Show all X errors (for debugging)
# show-all-xerrors = false

# Write process ID to a file.
# write-pid-path = "/path/to/your/log/file"

# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
#     "unknown", "desktop", "dock", "toolbar", "menu", "utility",
#     "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
#     "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
#   fade, shadow:::
#     Controls window-type-specific shadow and fade settings.
#
#   opacity:::
#     Controls default opacity of the window type.
#
#   focus:::
#     Controls whether the window of this type is to be always considered focused.
#     (By default, all window types except "normal" and "dialog" has this on.)
#
#   full-shadow:::
#     Controls whether shadow is drawn under the parts of the window that you
#     normally won't be able to see. Useful when the window has parts of it
#     transparent, and you want shadows in those areas.
#
#   clip-shadow-above:::
#     Controls wether shadows that would have been drawn above the window should
#     be clipped. Useful for dock windows that should have no shadow painted on top.
#
#   redir-ignore:::
#     Controls whether this type of windows should cause screen to become
#     redirected again after been unredirected. If you have unredir-if-possible
#     set, and doesn't want certain window to cause unnecessary screen redirection,
#     you can set this to `true`.
#
wintypes:
{
  tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
  dock = { shadow = false; clip-shadow-above = true; }
  dnd = { shadow = false; }
  popup_menu = { opacity = 0.95; }
  dropdown_menu = { opacity = 0.95; }
};</pre>
<p>To use picom effectively, add &#8220;picom -b&#8221; to the session manager for startup options.  Steam does not like picom, so use &#8220;pkill picom&#8221; before launching games that rely on Steam.  In my particular case I have a session that uses the KDE destkop and I switch into that for steam gaming and then back to my LXQT session with IceWM and Picom for everything else.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2823/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Self-Sufficient Backup System</title>
		<link>http://192.168.0.198/archives/2693</link>
		<comments>http://192.168.0.198/archives/2693#comments</comments>
		<pubDate>Sat, 10 Jan 2026 17:04:06 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[7Zip]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2693</guid>
		<description><![CDATA[What is the reason for a document on backing up one&#8217;s data?  The reason is that this is a critical thing that one must get handled, out of the way, and automated in order to possess peace of mind while undertaking a comprehensive work involving data.  For years I have searched for a great piece [...]]]></description>
			<content:encoded><![CDATA[<p>What is the reason for a document on backing up one&#8217;s data?  The reason is that this is a critical thing that one must get handled, out of the way, and automated in order to possess peace of mind while undertaking a comprehensive work involving data.  For years I have searched for a great piece of backup software.  I will share this great backup schematic and ensure it is in place on my own systems before tackling the first article on a place.  </p>
<p>There are several backup solutions in the marketplace but most of them are not really backups in the tradition sense.  Microsoft&#8217;s One Drive, which is probably now the most popular is not a backup at all, but a transitioning of data to someone else&#8217;s computer in the first place.  The Acronis version that one obtains license to via purchasing a Western Digital hard drive constantly uses network activity, despite working as a local backup solution.  Others such as Veeam included end user license agreement clauses allowing them full on premise access for an audit any time they wish, at the customer&#8217;s expense.  Other cloud backup solutions require you to have an active subscription to their product and wait for a backup to restore, it it restores at all.    I once restored about 72 GB of data from a Spider Oak backup and it took almost a month. Jungle Disk was an excellent resource years ago, but they changed branding and shifted how they operated.   Amazon S3 is very cost effective but the software to use requires one to custom build the backup solution or trust someone else or someone&#8217;s software with their keys to Amazon web services.  The best backup software that I personally used was Evorim Advanced Backup, but it is only available in a fully-featured version for citizens of the European Union.</p>
<p>That brings us to what we want.  A differential backup solution using 7zip so that the files can be encrypted and stored on Dropbox (or other cloud option of one&#8217;s choosing).  The key aspects being encryption and differential backups so that one is not constantly reuploading their entire reference corpus every day.</p>
<p>This covers a differential backup scheme using 7Zip and Dropbox and it works on both Linux and Windows.  With the Dropbox folder on a second hard drive, this scheme satisifies the 3-2-1 backup standard, which is  three copies of the data, on two different media, with one offsite copy.</p>
<p>I initially had a backup scheme that created a zip archive and ran that file through openssl to create a new file with a .encrypted extension, that I uploaded to Amazon S3 or Dropbox for long term backups. The process was cumbersome and prone to inconvenience because I had to keep the decryption script somewhere so that I could remember the password and long command. Amazon S3 became more and more cumbersome over time due to needing to constantly update authentication schemes, login details, and the like that it became unreliable as a long term strategy for my needs. I am getting older and do not want to spend all my spare time troubleshooting, upgrading, and learning how redo things that were working perfectly the week before. It is also inconvienient to pass a lengthy filename to a script via a different script or by typing it into the command line. I finally settled on 7-Zip and Differential archives since the procedure works on both Windows and Linux with slight modifications to the paths and variables in the scripts. Windows uses / for path names, and Linux uses , and Batch files use %VAR% for variables, and Linux uses \${var} or \$var depending upon one&#8217;s mode and purpose.</p>
<p>The intial backup scheme is not as efficient as possible because it could be reduced to a single script that with a function that takes arguments, but that requires time that I have not devoted. On Windows three scripts are used. The first script is the backupcaller.bat. Backup caller uses a single argument, that argument being a 1 or a 0. Depending upon which argument is passed, the script then calls the full backup script, script0.bat, or it calls the differential backup script, script1.bat. A task exists to run *backupcaller 0* every three months. That creates a new full backup of the designated folders every three months. A task exists to run *backupcaller 1* every week. That creates a weeekly differential backup of the differences since the the last full backup.</p>
<p>The 7Zip command line for both the Windows and Linux versions of the scripts is the same. I will now discuss the Linux version.</p>
<p>The Linux version calls the fullbackup script every 90 days via cron job. It calls the differential backup script daily via a cron job. In Dropbox the full backups go into a folder named after the year, eg. backups/2025. The differential backups go into a folder named after the month, e.g. backups/2025-12 in the case of month 12. After the turn of the year, the old full backup will not be erased, and the new full backup will appear in backups/2026. I have a specific cronjob to run a full backup on 2026-01-01 so that I do not have to wait 90 days from the last full backup to get one for the year 2026.</p>
<p>In my case, I mount the dropbox folder in the home folder, but have it physically on a different drive. This satisfies the two media requirement in a 3, 2, 1 schema. User and mountpoint would need to be changed to reflect the actual username and path to the Dropbox folder, and CustomPasswordGoesHere should be changed to reflect an encryption password that one wishes to use long term.</p>
<pre>
#!/bin/bash

# This is a function to archive the files in an encrypted zip file on dropbox
fullarchive() {
unset IFS
OLD_IFS=$IFS &#038;&#038; IFS=$'\n'
directory="/home/user/mountpoint/Dropbox/backups"
timestamp=$(date +"%Y-%m-%d-%H%M")
hostname=$(hostname)
year=$(date +"%Y")
month=$(date +"%m")
7z a -mm=Deflate -mfb=258 -mem=AES256 -p"CustomPasswordGoesHere" -mx9\
 ${directory}/${year}/"$1"-${hostname}-FULL-${year}.zip "$1"
IFS=$OLD_IFS
}

# NON HOME DIRECTORY LOCATIONS
cd /
fullarchive "etc"

# HOME DIRECTORY LOCATIONS
cd /home/user
fullarchive ".fonts"
fullarchive ".icons"
fullarchive ".themes"
fullarchive "Apps"
fullarchive "Data"
fullarchive "Dictionaries"
fullarchive "Documents"
fullarchive "Music"
fullarchive "Notes"
fullarchive "Pictures"
fullarchive "Scripts"
fullarchive "Server"
fullarchive "Templates"
fullarchive "Videos"

cd /home/user/.local/share

# contains customized .desktop files
fullarchive "applications"

cd /home/user
# contains Joplin media assets, among other things
fullarchive ".config"
</pre>
<p>The result of this script is a collection of encrypted zip files with names like *backups/2025/Documents-HOSTNAME-FULL-2025.zip* in folder based on the year in the Dropbox location. The metadata of the files can be viewed, but they cannot be extracted without the password.</p>
<p>If one is ultra paranoid, they could create a 99 character password with this script:</p>
<pre>
#!/bin/bash


long="$(openssl rand -base64 256)"
short="${long:0:100}"
echo "${short}"
# It becomes 99 characters because new line characters
# are removed to make it all one line when the output is on two lines.


</pre>
<p>From experience, such a password becomes annoying because I have had to extact from these zip files far more that I ever expected and that needs to factor into password selection. With a 99 character password, one must copy paste it for each extraction which means one must not lose some digital file with the password stored in it.</p>
<p>Now back to the differential portion of the backup.</p>
<pre>
#!/bin/bash


# This is a function to archive the files in an encrypted zip file on dropbox


diffarchive() {
unset IFS
OLD_IFS=$IFS &#038;&#038; IFS=$'\n'
directory="/home/user/mountpoint/Dropbox/backups"
timestamp=$(date +"%Y-%m-%d-%H%M")
timestamp2=$(date +"%Y-%m-%d")
hostname=$(hostname)
year=$(date +"%Y")
month=$(date +"%m")
7z u ${directory}/${year}/"$1"-${hostname}-FULL-${year}.zip "$1"  -mm=Deflate -mfb=258 -mem=AES256 -p"CustomPasswordGoesHere" -mx9 -u- -up0q3r2x2y2z0w2!"${directory}/${year}-${month}/"$1"-${hostname}-Differential-${timestamp2}.zip"
IFS=$OLD_IFS
}


# NON HOME DIRECTORY LOCATIONS
cd /
diffarchive "etc"

# HOME DIRECTORY LOCATIONS
cd /home/user
diffarchive ".fonts"
diffarchive ".icons"
diffarchive ".themes"
diffarchive "Apps"
diffarchive "Data"
diffarchive "Dictionaries"
diffarchive "Documents"
diffarchive "Music"
diffarchive "Notes"
diffarchive "Pictures"
diffarchive "Scripts"
diffarchive "Server"
diffarchive "Templates"
diffarchive "Videos"

cd /home/user/.local/share

# contains customized .desktop files
diffarchive "applications"

cd /home/user
# contains Joplin media assets, among other things
diffarchive ".config"
</pre>
<p>This will create encrypted zip files in the monthly folder of the form *backups/2025-12/Documents-HOSTNAME-DIFFERENTIAL-2025-12-26.zip*. Most of the differentials will be tiny files since no files changed. In the event one changes a huge number of files, one could run another full backup for that folder only, or just allow the differentials to duplicate.</p>
<p>On my Linux machine, I run the differential backups daily because I realized after a Windows machine erasure that I had missed obtaining some data on it since the weekly differential had missed a massive data reorganization that I had done on my source code archives. That is a painful lesson as I had years of C# winforms projects.</p>
<p>The following cron runs the full backup scripts at 7:30 PM every 3 Months.   It runs the differential backup script every day at 10:30 PM.</p>
<pre>
30 19 1 */3 * /home/username/scripts/fullbackup  
30 22 * * * /home/username/scripts/diffbackup
</pre>
<p>It is also imperative that one ensure they are not accidentaly overwriting a backup with an empty one via errors such as two of them labeled Documents. For my data organizations, I label source folders differently. For example, Linux source code is Linsource, and Windows source code is Winsource. That way, regardless of OS, I have a zip of each that I could open easily.</p>
<p>I did run into a problem with the Windows version, where some of the backups I thought I had were not present, because I set the filenames wrong and large archives were being overwritten with the wrong collections for backup to that name.</p>
<p>These solutions are not maximally efficient because I created them by hand just to get the job done.  They could be reduced to a single script taking arguments, or more improved functions.</p>
<p>This is the set of Windows scripts, illustrated with only one folder called Pictures.  To backup more folders than that, copy and paste the start line in backupcaller and change the filename to something else and specify the correct path.</p>
<pre>
REM ###################################################################
@echo off
REM Command enxtensions are enabled by default, but to ensure they are
REM working, it is set below.  This allows mkdir to create entire trees
SETLOCAL ENABLEEXTENSIONS

REM This is the script to call for the backups
REM This Edition: 20 July 2025
REM %1= type of backup, with 0 meaning full and 1 meaning diffrential


REM CALL the script for each folder for backup
REM the call keyword is necessary to run more than one script in a
REM sequence.  The start keyword will create a new process for each
REM script and run them all at the same time. Use either call or start

REM could do a simple for each folder script to get them all
REM &#038;&#038; means execute the command if the one before was successful

REM PLACE FOLDERS ALPHABETICAL   DRIVE THEN FOLDER NAME
REM %1, 0=full backup 1=differential
REM ### C DRIVE USER FOLDER ###
start C:\Users\username\Scripts\admin\script%1.bat "Pictures-%COMPUTERNAME%-%USERNAME%-UsersDir" "C:\Users\username\Pictures"
</pre>
<p>In this script, backupcaller.bat, we are calling script%1.bat and passing two arguments to it. The first is to the filename of the zip file, and the second is the path to be compressed and encrypted.   Once per quarter, this script is called by task scheduler via backupcaller.bat as the command and 0 as the argument.</p>
<pre>
backupcaller.bat 0
</pre>
<p>Which makes the start command insert a zero as follows.</p>
<pre>
start C:\Users\username\Scripts\admin\script0.bat "Pictures-%COMPUTERNAME%-%USERNAME%-UsersDir" "C:\Users\username\Pictures"
</pre>
<p>Here is script0.bat</p>
<pre>
REM ###################################################################
@echo off
REM Command enxtensions are enabled by default, but to ensure they are
REM working, it is set below.  This allows mkdir to create entire trees
SETLOCAL ENABLEEXTENSIONS

REM Name Full Backup Script
REM This Edition: 18 July 2025
REM %1= Folder Name to be used as the zip file name
REM %2= Folder Path to be archived

REM %1 %2 and %3 are like $1 $2 and $3 in Bash
REM create a timestamped zip file of a directory
REM ^ is a line continuation mark
FOR /F "TOKENS=1* DELIMS= " %%A IN (^
'DATE /T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN (^
'DATE /T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN (^
'echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN (^
'echo %CDATE%') DO SET yyyy=%%B
for /f "tokens=1-3 delims=:." %%A in ("%time%") do (
    set hours=%%A
    set minutes=%%B
    set seconds=%%C)

REM -mhe=on for encrypting headers only works with 7-zip format, not zip

REM The date variable numbers differ from other scripts

SET date0=%yyyy%
SET date1=%yyyy%-%mm%
SET date2=%yyyy%-%mm%-%dd%
SET date3=%yyyy%-%mm%-%dd%-%hours%%minutes%

mkdir "D:\PathToDropboxFolderForZipFiles\%date0%"

REM CREATE THE FULL BACKUP ONCE PER QUARTER
REM TEST DATA:   Quicken  "C:\Users\username\Quicken"
REM script0.bat Quicken "C:\Users\username\Quicken"
REM mpass=15 is the maximum passes for max
REM mx9 is the maximum compression for max
REM "C:\Program Files\7-Zip\7z.exe" a -mm=Deflate -mfb=258 -mpass=15^
REM -mem=AES256 -p"AwsomePasswordGoesHere" -mx9^
REM "D:\PathToDropboxFolderForZipFiles\%date0%\%1-Full-%date0%.zip" %2
REM The above is the max compression of the much faster one below
REM the one below is insanely faster, to about an hour vs a day
"C:\Program Files\7-Zip\7z.exe" a -mm=Deflate -mfb=258^
 -mem=AES256 -p"AwsomePasswordGoesHere" -mx1^
 "D:\PathToDropboxFolderForZipFiles\%date0%\%1-Full-%date0%.zip" %2
endlocal
exit
</pre>
<p>The mx1 above could be as high as mx9.  Those are the compression levels for zip files.  The setting of mx1 is essentially store only, which makes the operation very quick, even for large amounts of data.  Replace AwsomePassWordGoesHere with the encryption password that you want to use and remember for the future.  In the Linux examples above, I used mx9 because after using it with large amounts of data for a while, it suits me to prioritize space savings rather than speed.<br />
This will create a full backup of the form Pictures-computername-username-UsersDir-Full-2025.zip</p>
<p>Task scheduler calls using the argument of 1 for the days a differential backup is needed.</p>
<pre>
backupcaller.bat 1
</pre>
<p>script1.bat</p>
<pre>
REM ###################################################################
@echo off
REM Command enxtensions are enabled by default, but to ensure they are
REM working, it is set below.  This allows mkdir to create entire trees
SETLOCAL ENABLEEXTENSIONS

REM Name Differential Script
REM This Edition: 18 July 2025
REM %1= Folder Name to be used as the zip file name
REM %2= Folder Path to be archived

REM %1 %2 and %3 are like $1 $2 and $3 in Bash
REM create a timestamped zip file of a directory
REM ^ is a line continuation mark
FOR /F "TOKENS=1* DELIMS= " %%A IN (^
'DATE /T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN (^
'DATE /T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN (^
'echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN (^
'echo %CDATE%') DO SET yyyy=%%B
for /f "tokens=1-3 delims=:." %%A in ("%time%") do (
    set hours=%%A
    set minutes=%%B
    set seconds=%%C)

REM -mhe=on for encrypting headers only works with 7-zip format, not zip

REM The date variable numbers differ from other scripts

SET date0=%yyyy%
SET date1=%yyyy%-%mm%
SET date2=%yyyy%-%mm%-%dd%
SET date3=%yyyy%-%mm%-%dd%-%hours%%minutes%

mkdir "D:\PathToDropboxFolderForZipFiles\%date0%"
mkdir "D:\PathToDropboxFolderForZipFiles\%date1%"

REM CREATE THE FULL BACKUP ONCE PER QUARTER
REM TEST DATA:   Quicken  "C:\Users\user\Quicken"
REM q1script0.bat Quicken "C:\Users\user\Quicken"
REM mpass=15 is the maximum passes for max
REM mx9 is the maximum compression for max
REM "C:\Program Files\7-Zip\7z.exe" u^
REM "D:\PathToDropboxFolderForZipFiles\%date0%\%1-Full-%date0%.zip" %2^
REM -mm=Deflate -mfb=258 -mpass=15 -mem=AES256^
REM -p"AwsomePasswordGoesHere" -mx9^
REM -u- -up0q3r2x2y2z0w2!"D:\PathToDropboxFolderForZipFiles\%date0%\%1-Differential-%date0%.zip"
REM The above is the max compression of the much faster one below
REM the one below is insanely faster, to about an hour vs a day
"C:\Program Files\7-Zip\7z.exe" u^
 "D:\PathToDropboxFolderForZipFiles\%date0%\%1-Full-%date0%.zip" %2^
 -mm=Deflate -mfb=258 -mem=AES256^
 -p"AwsomePasswordGoesHere" -mx1^
 -u- -up0q3r2x2y2z0w2!"D:\PathToDropboxFolderForZipFiles\%date1%\%1-Differential-%date2%.zip"
endlocal
REM pause
exit
</pre>
<p>This wil will create a differential<br />
Pictures-computername-username-UsersDir-Differential-2026-01-02.zip.  To create this zip file, it will compare the contents of Pictures-computername-username-UsersDir-Full-2026 and only add the files that are new or updated.  That is because of the arguments -up0q3r2x2y2z0w2! passed to 7Zip.</p>
<p>Weekly backups just add to the space, but you could add those by customizing scripts further, or setting asside every 7th daily backup. You can leave old months, and have monthly differential backups relative to the quarterly. 2026-02 differential backups will compare against the 2026-Full, and 2025-01 differential backups will not be erased until you erase them.  Differential backups via this method will not work with split archives, so you must great one large zip file.  Zip files are necessary rather than 7Z files because 7Z files do not maintain Linux permissions such as the executable status of a file or read and write permissions.  Zip format maintains those permissions in Linux.  For tens of gigabytes in data, the time difference between mx1 and mx9 on a single large can be numerous hours.  In my case, mx1 takes about 15 minutes and mx9 takes an entire day with multiple CPU cores at high temperature. The space savings can hit around 30%.  That amount may not be worth it, but on a 2.7 TB usable drive, 300 GB of additional space available because of higher compression becomes relevant eventually.  With a terabyte free, saving disk space matters less, and completing the full backup in about 15 minutes works well.</p>
<p>For each new folder one creates that they want to backup, add it to the backup scripts.  Either to backupcaller on Windows or fullbacup and diffbackup both on Linux.  One may revise the scripts or improve it however they desire.  One could use One Drive, iCloud, or another cloud storage. Dropbox works for my purposes.</p>
<p>Now that a backup schema is in place, one can seriously begin to create.</p>
<p>Thank you for reading this newsletter. Next on the schedule is a look at North Dakota.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2693/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zettelkasten and Writing with Joplin, BPG Fonts, Aider, Ollama, Deepseek r1 14B</title>
		<link>http://192.168.0.198/archives/2672</link>
		<comments>http://192.168.0.198/archives/2672#comments</comments>
		<pubDate>Sun, 28 Dec 2025 20:08:43 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Aider]]></category>
		<category><![CDATA[Joplin]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[paired comparision]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2672</guid>
		<description><![CDATA[This is my first attempt at weekly posts. I created an organizational schema and setup the files to begin the work. One of the things this week that I accomplished was the use of Aider to create a rapid prototype of a paired comparison analysis tool that works on the console in any operating system [...]]]></description>
			<content:encoded><![CDATA[<p>This is my first attempt at weekly posts. I created an organizational schema and setup the files to begin the work. One of the things this week that I accomplished was the use of Aider to create a rapid prototype of a paired comparison analysis tool that works on the console in any operating system that uses Python. I used Ollama with Deepseek R1 14B running locally as the backend model. The code for version <a href="https://memorymatrix.cloud/archives/2667.html">25.26.12.20153 is accessible on my website</a>.</p>
<p>The idea of creating an economics website with a spiritual element began to intrigue me quite some time ago. It satisfies several stipulations related to the use of my time in the future. After some experimentation, adding images via Zettlr, which is the word processor that I am using, is cumbersome. I could add them another way or in another program, but this program inspires me to write. I have finally settled on simply using Joplin because I am aging daily and have less time than in the past due to my long commute.</p>
<p>Part of my inspiration for this post today results from the 27 December 2025 issue of Coffee and Covid by Jeff Childers. In that issue, he details his writing and organization process. I have several hundred megabytes worth of notes in Joplin.  I migrated many notes to Obsidian, but now I want them back. With Joplin, one may right click a note and copy a markdown link to use within another note.  That procedure is less efficient than Zettlr&#8217;s ability to start typing a colon and then select the note from a list that filters the notes based on what one types.  I changed font families to the following:</p>
<blockquote><p>Editor font family: BPG Courier GPL&amp;GNU</p>
<p>Editor Monospace font family: BPG Courier S GPL&amp;GNU</p>
<p>Viewer and Rich Text Editor font family: BPG Serif GPL&amp;GNU</p></blockquote>
<p>This allows me to see a preview of my writing in a serif font which helps me write more effectively. Joplin automatically exports a backup of all the files in a single file daily.  I need a second machine configured to export these and individual files in case something happens and the collective archive file fails.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2672/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QOwnNotes and Zettelkästen</title>
		<link>http://192.168.0.198/archives/2648</link>
		<comments>http://192.168.0.198/archives/2648#comments</comments>
		<pubDate>Thu, 18 Dec 2025 03:07:31 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Joplin]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nextcloud]]></category>
		<category><![CDATA[QOwnNote]]></category>
		<category><![CDATA[Zettelkästen]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2648</guid>
		<description><![CDATA[I love Joplin, but Joplin seems more like an incredible file cabinet and set of bookshelves. It is possible to link from one note to another, but a Joplin icon appears by that link in the text. It can also be cumbersome to navigate between multiple documents while working on one. Joplin recently added the [...]]]></description>
			<content:encoded><![CDATA[<p>I love Joplin, but Joplin seems more like an incredible file cabinet and set of bookshelves. It is possible to link from one note to another, but a Joplin icon appears by that link in the text. It can also be cumbersome to navigate between multiple documents while working on one. Joplin recently added the ability to open documents in a child window which really makes the problem wonderful. QOwnNotes includes an excellent Markdown Cheatsheet that one can open in a tab. I am looking for a solution for the extensive file cabinet, and one for the rough drafting. QOwnNotes syncs with Nextcloud.</p>
<div>
<pre><code>chmod +x QOwnNotes-x86_64.AppImage </code></pre>
</div>
<p>This .AppImage file not extract via the normal method. Running the AppImage works, but an extraction to squash-fs fails as it leaves nothing in the folders. It is necessary to run it directly from the .AppImage file.</p>
<p>When creating new notes, they automatically receive file names like <em>Note 2025-12-17 20h10s34</em>. From this, I remove the word note and add a title and tags so that the name may serve me well in the future.</p>
<p><a title="http://192.168.0.198/wp-content/uploads/2025/12/QOwnNotes-25.12.6.source.tar.gz" href="http://192.168.0.198/wp-content/uploads/2025/12/QOwnNotes-25.12.6.source.tar.gz" data-from-md="">A local mirror of the source is available</a> on this website. <a title="http://192.168.0.198/wp-content/uploads/2025/12/QOwnNotes-x86_64.appimage" href="http://192.168.0.198/wp-content/uploads/2025/12/QOwnNotes-x86_64.appimage" data-from-md="">A local mirror of the AppImage file for version 25.12.6 is available</a> on this website. <a title="https://github.com/pbek/QOwnNotes" href="https://github.com/pbek/QOwnNotes" data-from-md="">The developers release the source and binaries on Github</a>. <a title="https://addons.mozilla.org/en-US/firefox/addon/qownnotes-web-companion/" href="https://addons.mozilla.org/en-US/firefox/addon/qownnotes-web-companion/" data-from-md="">The web companion for Firefox and LibreWolf is online</a>, as is the <a title="https://chromewebstore.google.com/detail/qownnotes-web-companion/pkgkfnampapjbopomdpnkckbjdnpkbkp" href="https://chromewebstore.google.com/detail/qownnotes-web-companion/pkgkfnampapjbopomdpnkckbjdnpkbkp" data-from-md="">Chrome extension</a>. The web companion features seem to require more scripting than I am comfortable with for them to work. The number of Linux distributions for which for which one may <a title="https://www.qownnotes.org/installation/" href="https://www.qownnotes.org/installation/" data-from-md="">download via official repositories</a> is very impressive. Zettlr remains prettier and more fun to type in, but QOwnNotes builds documents that are ready for a simple copy-paste into the WordPress editor for publishing.</p>
<p>Nothing can replace Joplin. Joplin recognizes the reference style links of QOwnNotes, and the preview with preformatted text fields for code copy-pastes perfectly into WordPress. Joplin is a definite winner. Especially with the MDI interface.</p>
<p>I tried all these apps, and settled back on Joplin, but Zettler is fun to type in. Zettlr is for making a book, and Joplin is for making a reference library. All of this experimentation leads to me deciding to use Joplin better. Zettlr makes it easy to link existing notes by simply starting to type. The <a title="https://docs.zettlr.com/en/academic/readability/" href="https://docs.zettlr.com/en/academic/readability/" data-from-md="">readability feature in Zettlr</a> is also very helpful and helps me focus. Joplin can also use Zettlr&#8217;s footnote features.</p>
<p>This entry may have meandered a bit. I have settled on Joplin or organizing and remembering and and Zettlr for crafting. I will post completed pieces via Joplin preview to WordPress.</p>
<p>This post used Joplin 3.4.12 on Debian 12 and Zettlr 3.6.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2648/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joplin AppImage Integration</title>
		<link>http://192.168.0.198/archives/2604</link>
		<comments>http://192.168.0.198/archives/2604#comments</comments>
		<pubDate>Sun, 07 Dec 2025 23:05:50 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[AppImage]]></category>
		<category><![CDATA[digital sovereignty]]></category>
		<category><![CDATA[Joplin]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2604</guid>
		<description><![CDATA[Joplin is the beautiful open source replacement for Evernote. Once upon a time, Evernote was a dream app, but then they sent out an atrocious terms of service change after turning their user interface into drab garbage compared to the old colorful beauty that existed in version 4 and before. Joplin is fully functional and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://joplinapp.org/">Joplin</a> is the beautiful open source replacement for Evernote. Once upon a time, Evernote was a dream app, but then they sent out an atrocious terms of service change after turning their user interface into drab garbage compared to the old colorful beauty that existed in version 4 and before. Joplin is fully functional and syncs on every platform. They also provide a pure APK for download so that one can install it on LineageOS or other nongeminized Android system.  It offers full digital sovereignty.</p>
<p>One helpful tip that I spent a long time searching before learning, is that you can customize an image per notebook name, by right-clicking on the notebook, choosing edit, and then selecting an emoji.  Each notebook can have a different emoji as the icon.</p>
<p><a href="http://192.168.0.198/archives/2604/screenshot_20251207_170902" rel="attachment wp-att-2610"><img class="alignnone size-full wp-image-2610" title="Screenshot_20251207_170902" src="http://192.168.0.198/wp-content/uploads/2025/12/Screenshot_20251207_170902.png" alt="" width="223" height="98" /></a></p>
<p>Here is the procedure to integrate it into the Linux desktop. Notably, the icon is still the beautiful blue icon, and not the atrocious black and white one that has taken center stage on Windows versions of the app.</p>
<pre>chmod +x Joplin-3.4.12.AppImage 
./Joplin-3.4.12.AppImage --appimage-extract
mv squashfs-root joplin-3.4.12
mv joplin-3.4.12 $HOME/Apps
cp $HOME/Apps/joplin-3.4.12/joplin.desktop $HOME/.local/share/applications
kate $HOME/.local/share/applications/joplin.desktop</pre>
<p>Edit the file to say the following, but with $HOME replaced by the actual home directory of the relevant user:</p>
<pre>[Desktop Entry]
Name=Joplin
Exec=$HOME/Apps/joplin-3.4.12/joplin --no-sandbox %U
Terminal=false
Type=Application
Icon=$HOME/Apps/joplin-3.4.12/joplin.png
StartupWMClass=Joplin
X-AppImage-Version=3.4.12
MimeType=x-scheme-handler/joplin;
Comment=Joplin for Desktop
Categories=Office;</pre>
<p>Local download links:<br />
<a href="http://192.168.0.198/wp-content/uploads/2025/12/Joplin-3.4.12.appimage">Joplin-3.4.12 AppImage</a> | <a href="http://192.168.0.198/wp-content/uploads/2025/12/joplin-dev-25.12.7.zip">Source as of 7 December 2025: joplin-dev-25.12.7</a></p>
<p>The last version that worked on OSX Catalina was <a href="https://github.com/laurent22/joplin/releases/tag/v3.2.12">3.2.12</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2604/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LibreWolf 145 &amp; Integrated AppImage</title>
		<link>http://192.168.0.198/archives/2573</link>
		<comments>http://192.168.0.198/archives/2573#comments</comments>
		<pubDate>Sun, 23 Nov 2025 20:24:19 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[AppImage]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[LibreWolf]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2573</guid>
		<description><![CDATA[LibreWolf is a fork of Firefox that removes many of Mozilla&#8217;s bad decisions.1 A mirror of LibreWolf 145.0.1-2.x86_64 appimage is available here. Debian stable requires one to use a format other than the LibreWolf repo because as of 23 November, 2025 their site says the following: sudo apt update &#38;&#38; sudo apt install extrepo -y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://librewolf.net">LibreWolf</a> is a fork of Firefox that removes many of Mozilla&#8217;s bad decisions.<sup>1</sup> A mirror of LibreWolf 145.0.1-2.x86_64 appimage is available <a href="http://192.168.0.198/wp-content/uploads/2025/11/LibreWolf-145.0.1-2.x86_64.appimage">here</a>. Debian stable requires one to use a format other than the LibreWolf repo because as of 23 November, 2025 their site says the following:</p>
<pre>sudo apt update &amp;&amp; sudo apt install extrepo -y
sudo extrepo enable librewolf
sudo apt update &amp;&amp; sudo apt install librewolf -y</pre>
<p><a href="https://packages.debian.org/sid/extrepo">Extrarepo exists only in Sid</a>, which makes it unsuitable for Bookworm, or other stable Debian editions.  Adding Sid repos can turn Debian into something akin to a rolling distribution but it can cause problems if one wants older software.</p>
<p>To integrate the linked appimage into the operating system, take the following actions.<sup>2</sup></p>
<pre>./LibreWolf.x86_64.AppImage --appimage-extract
mv squashfs-root librewolf-145.0.1-2
mv librewolf-145.0.1-2 $HOME/Apps
cp $HOME/Apps/librewolf-145.0.1-2/io.gitlab.LibreWolf.desktop $HOME/.local/share/applications</pre>
<p>Then, modify the four lines in $HOME/.local/share/applications/io.gitlab.LibreWolf.desktop that say <em>exec</em>. Those lines need to reflect the path where the executable resides.</p>
<p>I was working on this with Obsidian and preparing to archive the appimage on this website when I ran into a snag. The Obsidian .desktop referenced the AppRun from the AppImage whereas Librewolf referenced the executable named librewolf. After resolving this, I checked the licenses. Obsidian distributes software that is under the Apache License. That license allows one to add other requirements to their additions to the software. Their additional term is that you may not redistribute their software. They are even more onerous that IBM was with Lotus Symphony 3. Lotus Symphony 3 was an office suite built on Open Office that had an excellent tabbed document interface. It was a beautiful interface that Open Office should have incorporated, but for some reason they did not. The Symphony 3 license allows you to redistribute on physical disc to your friends and family, but not via internet website. Obsidian says no to redistribution at all. I was using Obsidian extensively on all my mobile devices, but will have to discontinue using it now. I have no interest in building open source machines with open source operating systems and having software that does not allow you to mirror it.</p>
<pre>
./Obsidian-1.10.3.AppImage --appimage-extract
mv squashfs-root Obsidian-1.10.3
mv Obsidian-1.10.3 $HOME/Apps
cp $HOME/Apps/Obsidian-1.10.3/obsidian.desktop $HOME/.local/share/applications

Modify the exec line in $HOME/.local/share/applications/obsidian.desktop to reflect the path where the AppImage contents appear. The exec should point to the application binary and not the AppRun file. e.g. $HOME/Apps/Obsidian-1.10.3/obsidian
</pre>
<p>I will leave this here for memory and education, but will discontinue the use of Obsidian since its future as an ongoing concern is limited to their availability of their website as a distribution channel.  That does not bode well.  Symphony 3 (1.3 on Linux) is nearly extinct, but one can still run it on old virtual machines.  </p>
<ol>
<li>Mozilla&#8217;s strategic direction seems to be toward operating as an advertising company that uses the software clients themselves as the vehicle for advertisements and user data rather than websites and advertising platforms showing advertisements on those sites.</li>
<li>I use $HOME/Apps and $HOME/Applications to install programs like this rather than opt so that I can easily modify files or use them in backup scripts. Typically Apps contains smaller programs, and Applications contains larger ones such as GPT4ALL which consumes tens of gigabytes.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2573/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running old versions of Java Minecraft</title>
		<link>http://192.168.0.198/archives/2557</link>
		<comments>http://192.168.0.198/archives/2557#comments</comments>
		<pubDate>Wed, 22 Oct 2025 23:27:01 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Minecraft]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2557</guid>
		<description><![CDATA[One source for the Java 8 (1.8) runtime is the Oracle Archives page.&#160; Another helpful one is the standard Java download page for the desktop Java Runtime Environment, JRE. I downloaded the Linux x86 (32-bit) version even though the host is a 64bit Linux.&#160; The reason for that is that at some point in the [...]]]></description>
			<content:encoded><![CDATA[<p>One source for the Java 8 (1.8) runtime is the <a href="https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html">Oracle Archives page</a>.&#160; Another helpful one is the <a href="https://www.java.com/en/download/manual.jsp">standard Java download page</a> for the desktop Java Runtime Environment, JRE.</p>
<p>I downloaded the Linux x86 (32-bit) version even though the host is a 64bit Linux.&#160; The reason for that is that at some point in the point in the past Minecraft and various mods and the Forge loader required a 32 bit Java virtual machine (JVM).&#160; It was so problematic to install both 64bit and 32bit via the package managers and manually configure them, that I developed a practice of installing 32-bit Linux so that the Java in the repository would also be 32bit and then everything would be fin.&#160;&#160; It was much easier to run 32-bit Java and 32-bit Wine on a 32-bit operating system than reconfigure everything and try to switch between them depending on what was running.</p>
<p>I extracted the zip file from Oracle and then ran the Minecraft server instance with the following command.</p>
<blockquote><p>home/username/Downloads/Java8_i586/jre1.8.0_461/bin/java -jar /home/username/Minecraft_x86/instances/b1.7.3/b1.7.3.251019/b1.7.3.jar nogui</p>
</blockquote>
<p>Running the program that way worked very well.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2557/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.ssh config for Windows and Linux</title>
		<link>http://192.168.0.198/archives/2548</link>
		<comments>http://192.168.0.198/archives/2548#comments</comments>
		<pubDate>Sun, 19 Oct 2025 01:26:02 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2548</guid>
		<description><![CDATA[The ~/.ssh/config file works for OpenSSH on Windows and for SSH on Linux. To prevent disconnects, add the keepalive messages for all hosts. For specific hosts that use a specific key type, such as RSA on CentOS 6, add the specific algorithm via the HostkeyAlgorithms + functionality. To add a private key for SSH key [...]]]></description>
			<content:encoded><![CDATA[<p>The ~/.ssh/config file works for OpenSSH on Windows and for SSH on Linux.</p>
<p>To prevent disconnects, add the keepalive messages for all hosts.  For specific hosts that use a specific key type, such as RSA on CentOS 6, add the specific algorithm via the HostkeyAlgorithms + functionality.   To add a private key for SSH key logins, add the IdentityFile line.  it is possible to allow the ssh-rsa algorithms on both outgoing and incoming connections for all hosts. The PubkeyAcceptedAlgorithms functionality is which key can be used to log into the host the config file sits on.  the ForwardX11 setting sits on Linux hosts and not on Windows..</p>
<p>example ~/.ssh/config</p>
<pre>
IdentityFile ~/.ssh/Minecraft-Micro.pem

Host *
    ServerAliveInterval 40

Host 192.168.0.0
    HostkeyAlgorithms +ssh-rsa
 
ForwardX11 yes
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2548/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switch a data volume on Linux</title>
		<link>http://192.168.0.198/archives/2540</link>
		<comments>http://192.168.0.198/archives/2540#comments</comments>
		<pubDate>Sat, 18 Oct 2025 01:10:08 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2540</guid>
		<description><![CDATA[How to move /var/www/html/mydata/ to a new disk: 1. fdisk /dev/nvme4n1 &#160;&#160;&#160;&#160;&#160;1.i. create a new DOS partition and write it to disk 2. mkfs -t ext4 /dev/nvme4n1p1 3. lsblk -f (and copy the UUID for use in FSTAB) &#160;&#160;&#160;&#160;3.i. a0e2e1e7-4034-4876-a005-ae5fcca39751 4. mount /dev/nvme4n1p1 /mnt 5. shopt -s dotglob 6. rsync -aulvXpogtr /var/www/html/mydata/* /mnt 7. edit [...]]]></description>
			<content:encoded><![CDATA[<p>How to move /var/www/html/mydata/ to a new disk:</p>
<p>1. fdisk /dev/nvme4n1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.i. create a new DOS partition and write it to disk<br />
2. mkfs -t ext4 /dev/nvme4n1p1<br />
3. lsblk -f (and copy the UUID for use in FSTAB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.i. a0e2e1e7-4034-4876-a005-ae5fcca39751<br />
4. mount /dev/nvme4n1p1 /mnt<br />
5. shopt -s dotglob<br />
6. rsync -aulvXpogtr /var/www/html/mydata/* /mnt<br />
7. edit /etc/fstab and replace the UUID for the data storage drive<br />
8. mount -av to test<br />
9. reboot</p>
<p>[_] Expand 7 to show fstab options</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2540/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian 12 Sources</title>
		<link>http://192.168.0.198/archives/2450</link>
		<comments>http://192.168.0.198/archives/2450#comments</comments>
		<pubDate>Sun, 07 Sep 2025 02:38:50 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[bookworm]]></category>
		<category><![CDATA[bullseye]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2450</guid>
		<description><![CDATA[This is a listing of Debian sources for future reference.&#160; Debian maintains&#160; an archive of older versions on the Distribution Archives website.&#160; It may be necessary at some point in the future to change the bullseye information below so that it points to the distribution archives. /etc/apt/sources.list.d/vivaldi.list ### THIS FILE IS AUTOMATICALLY CONFIGURED ### # [...]]]></description>
			<content:encoded><![CDATA[<p>This is a listing of Debian sources for future reference.&#160; Debian maintains&#160; an archive of older versions on the <a href="https://www.debian.org/distrib/archive">Distribution Archives</a> website.&#160; It may be necessary at some point in the future to change the bullseye information below so that it points to the distribution archives.</p>
<p><strong>/etc/apt/sources.list.d/vivaldi.list</strong> </p>
<pre>### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out this entry, but any other modifications may be lost.
deb [arch=amd64] https://repo.vivaldi.com/stable/deb/ stable main
</pre>
<p><strong>End of File</strong> </p>
<p>&#160;</p>
<p><strong>/etc/apt/sources.list</strong></p>
<pre>                                                
#deb cdrom:[Debian GNU/Linux 12.4.0 _Bookworm_ - Official amd64 NETINST with firmware 20231210-17:56]/ bookworm main&gt;

deb http://deb.debian.org/debian/ bookworm main non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware

deb http://security.debian.org/debian-security bookworm-security main non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware

# bookworm-updates, to get updates before a point release is made;
# see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports
deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm-updates main non-free-firmware

# Debian 12 &quot;bookworm&quot; dropped by Python2.  Adding Debian 11 &quot;bullseye&quot;
# removed bullseye non-free-firmware from each of the below bullseye lines
# due to errors on 7/24/25</pre>
<pre>
deb http://deb.debian.org/debian/ bullseye main
deb-src http://deb.debian.org/debian/ bullseye main
deb http://security.debian.org/debian-security bullseye-security main
deb-src http://security.debian.org/debian-security bullseye-security main
deb http://deb.debian.org/debian/ bullseye-updates main
deb-src http://deb.debian.org/debian/ bullseye-updates main


# added 7/24/25
# https://fasttrack.debian.net/


deb http://fasttrack.debian.net/debian-fasttrack/ bookworm-fasttrack main contrib
deb http://fasttrack.debian.net/debian-fasttrack/ bookworm-backports-staging main contrib



# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching &quot;deb cdrom&quot;
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.
</pre>
<p><strong>End of File</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2450/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring network connections on Linux</title>
		<link>http://192.168.0.198/archives/1259</link>
		<comments>http://192.168.0.198/archives/1259#comments</comments>
		<pubDate>Mon, 25 Nov 2024 16:32:41 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1259</guid>
		<description><![CDATA[Here is a great TCP/UDP Port finder tool.   This was useful for finding out which port “cbt” was in my Iftop listing.  It was 7777, which was in use for the Unreal Engine on an Ark: Survival Evolved game server. Iftop is the best real time network monitoring tool for Linux that has graced my [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.adminsub.net/tcp-udp-port-finder/cbt">Here is a great TCP/UDP Port finder tool</a>.   This was useful for finding out which port “cbt” was in my <a href="https://linuxhint.com/iftop-command-linux-examples/">Iftop</a> listing.  It was 7777, which was in use for the Unreal Engine on an Ark: Survival Evolved game server. <a href="https://linuxhint.com/iftop-command-linux-examples/">Iftop</a> is the best real time network monitoring tool for Linux that has graced my system to date &#8212; or so it seems until one finds Iptraf. <a href="https://us.informatiweb-pro.net/system-admin/linux/network-monitoring-in-real-time-with-iptraf.html">Iptraf</a> is another excellent tool for monitoring network traffic in real time.  The Iptraf manual is <a href="http://iptraf.seul.org/2.6/manual.html">here</a>.  Netstat wasn’t suitable for this purpose due to the use of UDP as the main protocol.  Netstat is certainly useful, but no switches that I could locate would enable the program to show the UDP traffic in real time and the associated addresses of those connected to the server.  Iptraf shows the UDP traffic in a rapidly updating scroll box.  Iftop shows the traffic in an easy to read display that includes the address and hostname of the connected system.</p>
<p>This list doesn&#8217;t relate to more in depth management tools. This list is for easy console monitoring of a server running such games as ARK Survival Evolved.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install cron on Fedora 38</title>
		<link>http://192.168.0.198/archives/1042</link>
		<comments>http://192.168.0.198/archives/1042#comments</comments>
		<pubDate>Tue, 22 Oct 2024 07:38:48 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1042</guid>
		<description><![CDATA[dnf install cronie systemctl enable crond.service systemctl start crond.service]]></description>
			<content:encoded><![CDATA[<pre class="prettyprint">dnf install cronie
systemctl enable crond.service
systemctl start crond.service</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1042/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building an anti-bitrot bunker</title>
		<link>http://192.168.0.198/archives/1034</link>
		<comments>http://192.168.0.198/archives/1034#comments</comments>
		<pubDate>Sun, 20 Oct 2024 10:18:31 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1034</guid>
		<description><![CDATA[When I first obtained a CompTIA A+ certification some time ago, the concept of bit rot related to what happens to software reliability as the number of updates to the system increases. Over time, software that worked in years past ceases to work as new system updates block system calls or change permissions and files [...]]]></description>
			<content:encoded><![CDATA[<p>When I first obtained a CompTIA A+ certification some time ago, the concept of bit rot related to what happens to software reliability as the number of updates to the system increases. Over time, software that worked in years past ceases to work as new system updates block system calls or change permissions and files that the software originally relied upon. This slow decaying of reliability was called bit rot. There are some other definitions floating around on the internet, but that is the one most relevant for me.</p>
<p>To prevent this and reduce the amount of time spent in sorting out the bit rot introduced to my investments by Microsoft&#8217;s proclivities, I have standardized on two operating systems for major time investments in computing that occupy my life.  Windows still has a place since I sometimes use Windows only games to play with my child.  Other than that necessity, I have built the things I rely on for use with Linux.  The two versions that I have standardized on are Debian and Fedora. Specifically Debian 12 and Fedora 38.  These are not what is used for the website, but they are the major components of my anti-bitrot infrastructure.  I am aware this may not be good security practice, but this isn&#8217;t to get me a job, this is to serve an aging man and his family reliably over time.</p>
<p>There are a few reasons that I selected Fedora 38 and Debian 12. Fedora 38 still has Python 2.7 in the repositories.  It was within 2 versions for upgrading from Fedora 36. Fedora 36 was what I was running in my Windows Subsystem for Linux instance, and I upgraded it to Fedora 38.   When deciding to move back to bare metal for my Linux software development and automation needs, I decided to standardize on that one.  Debian has a 32 bit version. I have both the 32-bit and 64-bit deployed in my network.  Debian 32 bit allows on to easily 32-bit builds of Java on a Linux server.  One can add the testing repository and have the latest Java in 32 bit form.  32-bit Java is necessary to run older Minecraft versions.  My family has a large set of mod-collections and old Java Minecraft instances and maps going back about 8 years. I can then run the latest JVM and the latest Minecraft on the same server because the 32bit JVM is available.  It is very annoying to try and  manage 32bit and 64bit Java virtual machines on the same host, so having it all 32-bit solves a huge problem.  One can add the Debian 11 repository and install Python2.7 if one wants to use old Python versions.  I need this old Python version for a project that I worked on over the course of the last 8 years.</p>
<p>The general anti-bit rot measure for Debian is to always use apt-get to install packages as this will leave the .deb file in the cache.  Then copy those .deb files on a regular basis to another location for use as a repository for other Debian installations.  This can be configured to work via a cron job.  Debian is really the only long-term viable game in town if one wants a 32-bit anti-bitrot bunker that will last into the future, over say, a ten year time horizon. Save the .deb files on a private web-server inside the network and periodically update that repository with the files copied via the sweeps from the cache directory.</p>
<p>For Fedora, this should work with any version.  Fedora 38 is the one I use.  Edit the /etc/dnf/dnf.conf file to say keep_cache=True, and this will save the dowloaded RPMS.  One can then build their repository using only what they need if so desired.  The other genuine long term standardization option is to mirror the entire repositories to the private webserver within one&#8217;s network.  To do this, install yumdownloader.   Then, move all of the .repo files from /etc/yum.repos.d except for one to a temporary location.  Then, go into a directory with a lot of space.  For Fedora 38, the complete mirror was 229GB.  Then use yumdownloader * and it will download all files from that repository.  Then, use yumdownloader &#8211;source * and it will download all source packages for the packages that it just downloaded.  Then, go back to /etc/yum.repos.d and switch that .repo file out with one that was moved previously, and repeat the process until all repositories have been completely downloaded.  Then, copy all downloaded RPMS to one large directory on the webserver and use createrepo to create the meta data.  Then on the client machines, create a .repo pointing to your own webserver, and move the existing .repo files in /etc/yum.repos.d to an archival location.   Then all of your installations will occur from your own webserver and all machines will have the same versions of packages.</p>
<p>In my case, I then install the data science specifics that I need for the automated software that I created.  The process varies slightly depending on whether the system is Fedora or Debian.</p>
<p>For Debian:</p>
<p>Add bullseye to sources.list<br />
Install python2 via bullseye repositories<br />
Install pip via the downloaded file from <a href="https://linuxhint.com/install-pip-on-debian-11/">https://linuxhint.com/install-pip-on-debian-11/</a> that is to say,<br />
1. wget <a href="https://bootstrap.pypa.io/pip/2.7/get-pip.py">https://bootstrap.pypa.io/pip/2.7/get-pip.py</a><br />
2. python2 ./get-pip.py<br />
Apt-get install libcurl4-openssl-dev</p>
<p>R:<br />
Install.packages(‘curl’)<br />
Install.packages(‘fpp2’)<br />
Install.packages(‘magrittr’)<br />
Install.packages(‘urca’)<br />
Install.packages(‘vars’)<br />
Install.packages(‘psych’)<br />
Apt-get install r-cran-rjava<br />
Install.packages(‘rJava’)<br />
Install.packages(‘xlsx’)<br />
Install.packages(‘Hmisc’)<br />
Install.packages(‘prophet’)<br />
Install.packages(‘dplyr’)<br />
pip2 install parsedatetime==2.5<br />
apt-get install awscli<br />
pip2 install boto3<br />
apt-get install r-cran-car</p>
<p>Troubleshooting steps if .xlsx and others are not built:<br />
Are all R packages installed successfully with a 0 exit status?</p>
<p>On Fedora, the repositories do not contain R components in the same way the Debian repositories do.  Here is the process for Fedora 38.</p>
<p>Used the script https://bootstrap.pypa.io/pip/2.7/get-pip.py<br />
pip2 install parsedatetime==2.5 &#8211;user<br />
dnf install libcurl<br />
dnf install libcurl-devel<br />
dnf install R<br />
dnf install awscli<br />
pip2 install boto3 &#8211;user<br />
dnf install cmake</p>
<p>Within R:<br />
install.packages(&#8216;car&#8217;)<br />
install.packages(&#8216;curl&#8217;)<br />
install.packages(&#8216;fpp2&#8242;)<br />
install.packages(‘magrittr’)<br />
install.packages(&#8216;urca&#8217;)<br />
install.packages(&#8216;vars&#8217;)<br />
install.packages(&#8216;psych&#8217;)<br />
install.packages(&#8216;rJava&#8217;)<br />
install.packages(&#8216;xlsx&#8217;)<br />
install.packages(&#8216;Hmisc&#8217;)<br />
install.packages(&#8216;prophet&#8217;)<br />
install.packages(&#8216;dplyr&#8217;)</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1034/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a systemd service for YaCy</title>
		<link>http://192.168.0.198/archives/744</link>
		<comments>http://192.168.0.198/archives/744#comments</comments>
		<pubDate>Sun, 22 Sep 2024 15:08:58 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[systemd]]></category>
		<category><![CDATA[yacy]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=744</guid>
		<description><![CDATA[Create file /usr/lib/systemd/system/yacy.service and add this content: [Unit] Description=YaCy search server After=network.target Restart=always [Service] Type=forking User=yacy ExecStart=/opt/yacy/startYACY.sh ExecStop=/opt/yacy/stopYACY.sh Restart=on-failure RestartSec=1s [Install] WantedBy=multi-user.target Then use systemctl enable yacy.service.]]></description>
			<content:encoded><![CDATA[<p>Create file <em>/usr/lib/systemd/system/yacy.service</em> and add this content:</p>
<blockquote><p>[Unit]<br />
Description=YaCy search server<br />
After=network.target<br />
Restart=always</p>
<p>[Service]<br />
Type=forking<br />
User=yacy<br />
ExecStart=/opt/yacy/startYACY.sh<br />
ExecStop=/opt/yacy/stopYACY.sh<br />
Restart=on-failure<br />
RestartSec=1s</p>
<p>[Install]<br />
WantedBy=multi-user.target</p></blockquote>
<p><span style="color: #333333;">Then use <em>systemctl enable yacy.service.</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/744/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox Disk Conversion</title>
		<link>http://192.168.0.198/archives/653</link>
		<comments>http://192.168.0.198/archives/653#comments</comments>
		<pubDate>Mon, 10 Jun 2024 04:58:45 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=653</guid>
		<description><![CDATA[To convert a dynamic VirtualBox disk to a Fixed disk, run the following command: vboxmanage clonemedium disk /path/disk.vdi /path/newdisk.vdi -variant Fixed using –variant Standard would create a dynamic disk.  Then open the virtual machine and remove the existing disk and attach the new disk.  Then use the media manager to delete the unused media. Use [...]]]></description>
			<content:encoded><![CDATA[<p>To convert a dynamic VirtualBox disk to a Fixed disk, run the following command:</p>
<pre>vboxmanage clonemedium disk /path/disk.vdi /path/newdisk.vdi -variant Fixed</pre>
<p>using –variant Standard would create a dynamic disk.  Then open the virtual machine and remove the existing disk and attach the new disk.  Then use the media manager to delete the unused media.</p>
<p>Use the following command to list registered virtual disks:</p>
<pre>vboxmanage list hdds</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/653/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian 12  PATH and X11</title>
		<link>http://192.168.0.198/archives/592</link>
		<comments>http://192.168.0.198/archives/592#comments</comments>
		<pubDate>Sat, 18 May 2024 07:46:10 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[X11]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=592</guid>
		<description><![CDATA[A few quirks with Debain 12 include that path not being set in similar fashion to Fedora, Ubuntu, and other distributions.  One must regularly set export PATH=$PATH:/usr/sbin In Gnome, applications will open on the server instead of the client when using X11 forwarding.  This will occur even though xcalc opens on the client normally.  The [...]]]></description>
			<content:encoded><![CDATA[<p>A few quirks with Debain 12 include that path not being set in similar fashion to Fedora, Ubuntu, and other distributions.  One must regularly set</p>
<pre><code>export PATH=$PATH:/usr/sbin</code></pre>
<p>In Gnome, applications will open on the server instead of the client when using X11 forwarding.  This will occur even though xcalc opens on the client normally.  The way to avoid this is to add the following to .bashrc</p>
<pre>unset XDG_RUNTIME_DIR 
unset GDK_BACKEND</pre>
<p>The general rule is compress, then encrypt.<sup>1, 2</sup></p>
<p>1. <a title="https://stackoverflow.com/questions/4676095/when-compressing-and-encrypting-should-i-compress-first-or-encrypt-first" href="https://stackoverflow.com/questions/4676095/when-compressing-and-encrypting-should-i-compress-first-or-encrypt-first">https://stackoverflow.com/questions/4676095/when-compressing-and-encrypting-should-i-compress-first-or-encrypt-first</a></p>
<p>2. <a title="https://crypto.stackexchange.com/questions/33737/is-it-better-to-encrypt-before-compression-or-vice-versa" href="https://crypto.stackexchange.com/questions/33737/is-it-better-to-encrypt-before-compression-or-vice-versa">https://crypto.stackexchange.com/questions/33737/is-it-better-to-encrypt-before-compression-or-vice-versa</a></p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/592/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Move /var to new disk</title>
		<link>http://192.168.0.198/archives/588</link>
		<comments>http://192.168.0.198/archives/588#comments</comments>
		<pubDate>Sat, 18 May 2024 07:40:47 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Partitions]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=588</guid>
		<description><![CDATA[To add a new virtual disk and move the existing Linux partition to the new disk use the following process. The process assumes standard partitions without the use of Logical Volume Manager (LVM). 1. Backup the existing VM. One good way to do that is to clone the Virtual Machine and use the procedure on [...]]]></description>
			<content:encoded><![CDATA[<p>To add a new virtual disk and move the existing Linux partition to the new disk use the following process. The process assumes standard partitions without the use of Logical Volume Manager (LVM).</p>
<p>1. Backup the existing VM. One good way to do that is to clone the Virtual Machine and use the procedure on the new Virtual Machine.</p>
<p>2. Create the partition and format it.</p>
<pre>$ mount /dev/sbd /mnt</pre>
<pre>$ shopt -s dotglob</pre>
<pre>$ rsync -aulvXpogtr /var/* /mnt</pre>
<pre>$ nano /etc/fstab</pre>
<p>Add this line, replacing sdb and ext4 as necessary:</p>
<pre>/dev/sdb /var ext4 defaults,noatime,nofail 0 2</pre>
<p>Then</p>
<pre>$ mv /var/ /var.old</pre>
<p>Reboot and enjoy the new drive.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/588/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install Java 21 in Debian 12</title>
		<link>http://192.168.0.198/archives/361</link>
		<comments>http://192.168.0.198/archives/361#comments</comments>
		<pubDate>Sun, 05 May 2024 02:50:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=361</guid>
		<description><![CDATA[Minecraft Java edition lost compatibility with Java 17 between 1.20.4 and 1.20.6. Version 1.20.4 works with Java 17, and 1.20.6 no longer works with Java 17.  Several guides appear online for installing downloaded packages of the 64-bit runtime from Oracle or other sources.  Since Debian offers 32-bit server operating systems in the present day, the [...]]]></description>
			<content:encoded><![CDATA[<p>Minecraft Java edition lost compatibility with Java 17 between 1.20.4 and 1.20.6. Version 1.20.4 works with Java 17, and 1.20.6 no longer works with Java 17.  Several guides appear online for installing downloaded packages of the 64-bit runtime from Oracle or other sources.  Since Debian offers 32-bit server operating systems in the present day, the package manager versions are the easiest option if one uses the 32-bit version of Debian.  One of the reasons to use the 32-bit version of Debian is for use with older versions of Minecraft such as 1.10 and 1.12.  The older versions’ ecosystem contain an incredible number of mods.  The older versions require 32-bit java runtimes and the easiest way to handle that is to use a 32-bit operating system and then one can have newer versions of Java alongside older versions of Java and then one can run any version of Minecraft and Minecraft Forge that they desire.</p>
<p>Edit /etc/apt/sources.list to contain the following lines:</p>
<pre>deb <a href="http://deb.debian.org/debian">http://deb.debian.org/debian</a> testing main
deb-src <a href="http://deb.debian.org/debian">http://deb.debian.org/debian</a> testing main</pre>
<p>Then, run the following commands.</p>
<pre>apt-get update
apt-get install openjdk-21-jre</pre>
<pre>java –version</pre>
<p><a title="https://wiki.debian.org/DebianTesting" href="https://wiki.debian.org/DebianTesting">https://wiki.debian.org/DebianTesting</a> contains a good reference guide for using Debian Testing, including details on upgrading to the next distribution.  The approximate Java lifecycle can be found at <a title="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html">https://www.oracle.com/java/technologies/java-se-support-roadmap.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/361/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Print environmental variables in Bash</title>
		<link>http://192.168.0.198/archives/1052</link>
		<comments>http://192.168.0.198/archives/1052#comments</comments>
		<pubDate>Wed, 03 Apr 2024 09:06:02 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1052</guid>
		<description><![CDATA[Use printenv to see what environment variables are set. #!/usr/bin/env bash printenv set -x]]></description>
			<content:encoded><![CDATA[<p>Use printenv to see what environment variables are set.</p>
<pre class="prettyprint">#!/usr/bin/env bash
printenv
    set -x</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1052/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.nanorc in CentOS</title>
		<link>http://192.168.0.198/archives/1050</link>
		<comments>http://192.168.0.198/archives/1050#comments</comments>
		<pubDate>Wed, 03 Apr 2024 09:03:04 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nano]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1050</guid>
		<description><![CDATA[Edit $HOME/.nanorc to contain the following: include /usr/share/nano/java.nanorc include /usr/share/nano/man.nanorc include /usr/share/nano/nanorc.nanorc include /usr/share/nano/python.nanorc include /usr/share/nano/sh.nanorc include /usr/share/nano/html.nanorc include /usr/share/nano/perl.nanorc include /usr/share/nano/php.nanorc CentOS 7 uses a much older version of nano than the one that presently ships on most distributions. The php.nanorc on newer The following should appear in /usr/share/nano/php.nanorc on CentOS7 to allow syntax [...]]]></description>
			<content:encoded><![CDATA[<p>Edit $HOME/.nanorc to contain the following:</p>
<pre class="prettyprint">include /usr/share/nano/java.nanorc
include /usr/share/nano/man.nanorc
include /usr/share/nano/nanorc.nanorc
include /usr/share/nano/python.nanorc
include /usr/share/nano/sh.nanorc
include /usr/share/nano/html.nanorc
include /usr/share/nano/perl.nanorc
include /usr/share/nano/php.nanorc</pre>
<p>CentOS 7 uses a much older version of nano than the one that presently ships on most distributions. The php.nanorc on newer The following should appear in /usr/share/nano/php.nanorc on CentOS7 to allow syntax highlighting for php:</p>
<p>&nbsp;</p>
<pre class="prettyprint">## Syntax highlighting for PHP

syntax "php" "\.(php[23457s~]?|phtml|ctp)$"

# PHP markings.
color brightgreen "()"

# Function names.
color white "\</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1050/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The .bashrc file I use on CentOS6</title>
		<link>http://192.168.0.198/archives/1047</link>
		<comments>http://192.168.0.198/archives/1047#comments</comments>
		<pubDate>Wed, 03 Apr 2024 09:00:37 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1047</guid>
		<description><![CDATA[The .bashrc file I use on CentOS6 &#160; # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # system variables export VISUAL=nano # sets nano as the crontab editor export GZIP=-9 # maximum compression [...]]]></description>
			<content:encoded><![CDATA[<p>The .bashrc file I use on CentOS6</p>
<p>&nbsp;</p>
<pre class="prettyprint"># .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# system variables
export VISUAL=nano  # sets nano as the crontab editor
export GZIP=-9      # maximum compression
export XZ_OPT=-9    # maximum compressions

# ls modifications
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# calculator
calc() { echo "$*" | bc -l; }

# Generate a UUID
uuid() { UUID=$(cat /proc/sys/kernel/random/uuid) &amp;&amp; echo $UUID; }

# CHANGE SHELL/WINDOW TITLE
# Works on Opensuse 15.3
# PS1=$PS1"\[\e]0;test1\a\]"
shellrename() { read -p "Enter new shell name: " name &amp;&amp; PS1=$PS1"\[\e]0;${name}\a\]"; }

# For older versions of gnome-terminal
# shellrename() { read -p "Enter new shell name: " name &amp;&amp; PROMPT_COMMAND='echo -ne "\033]0;${name}\007"'; }

# Zen Burn
# Another old way that works great in gnome-terminal while causing problems
# in some configurations involving SSH:
echo -ne '\e]12;#BFBFBF\a'
echo -ne '\e]10;#DCDCCC\a'
echo -ne '\e]11;#3F3F3F\a'
echo -ne '\e]4;0;#3F3F3F\a'
echo -ne '\e]4;1;#705050\a'
echo -ne '\e]4;2;#60B48A\a'
echo -ne '\e]4;3;#DFAF8F\a'
echo -ne '\e]4;4;#506070\a'
echo -ne '\e]4;5;#DC8CC3\a'
echo -ne '\e]4;6;#8CD0D3\a'
echo -ne '\e]4;7;#DCDCCC\a'
echo -ne '\e]4;8;#709080\a'
echo -ne '\e]4;9;#DCA3A3\a'
echo -ne '\e]4;10;#C3BF9F\a'
echo -ne '\e]4;11;#F0DFAF\a'
echo -ne '\e]4;12;#94BFF3\a'
echo -ne '\e]4;13;#EC93D3\a'</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1047/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The best Alias for ls</title>
		<link>http://192.168.0.198/archives/165</link>
		<comments>http://192.168.0.198/archives/165#comments</comments>
		<pubDate>Sun, 03 Mar 2024 02:14:19 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=165</guid>
		<description><![CDATA[The best alias for ls is ls –halF It is easy to remember, and produces easy to read output with human readable file sizes and / marks present by the directory names..]]></description>
			<content:encoded><![CDATA[<p>The best alias for ls is</p>
<blockquote><p><em>ls –halF</em></p></blockquote>
<p>It is easy to remember, and produces easy to read output with human readable file sizes and / marks present by the directory names..</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/165/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install iftop on Oracle Linux 9</title>
		<link>http://192.168.0.198/archives/1702</link>
		<comments>http://192.168.0.198/archives/1702#comments</comments>
		<pubDate>Fri, 23 Feb 2024 22:18:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[iftop]]></category>
		<category><![CDATA[iptraf]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[Oracle Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1702</guid>
		<description><![CDATA[dnf install oracle-epel-release-el9 dnf install iftop iptraf is already in the default repositories.]]></description>
			<content:encoded><![CDATA[<p>dnf install oracle-epel-release-el9<br />
dnf install iftop</p>
<p>iptraf is already in the default repositories.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1702/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A good version of ll</title>
		<link>http://192.168.0.198/archives/162</link>
		<comments>http://192.168.0.198/archives/162#comments</comments>
		<pubDate>Tue, 20 Feb 2024 06:37:45 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=162</guid>
		<description><![CDATA[A really good version of the ll alias is: ls –lahF, although on some versions ls –lahp looks better than F.]]></description>
			<content:encoded><![CDATA[<p>A really good version of the ll alias is:</p>
<p><em>ls –lahF</em>, although on some versions <em>ls –</em>lah<em>p</em> looks better than <em>F</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/162/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LS alias and Mozilla DRM bar</title>
		<link>http://192.168.0.198/archives/159</link>
		<comments>http://192.168.0.198/archives/159#comments</comments>
		<pubDate>Sun, 11 Feb 2024 06:11:06 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[LibreWolf]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=159</guid>
		<description><![CDATA[Some useful aliases that are not always preconfigured on every Linux version: alias ll=&#8217;ls -alF&#8217; alias la=&#8217;ls -A&#8217; alias l=&#8217;ls –CF&#8217; To eliminate the DRM warning in Firefox and Librewolf without enable DRM, add this to &#8220;userChrome.css&#8221;: notification[value="drmContentDisabled"]{ display:none !important; } toolkit.legacyUserProfileCustomizations.stylesheets must be set to true in about config.]]></description>
			<content:encoded><![CDATA[<p>Some useful aliases that are not always preconfigured on every Linux version:</p>
<blockquote><p>alias ll=&#8217;ls -alF&#8217;<br />
alias la=&#8217;ls -A&#8217;<br />
alias l=&#8217;ls –CF&#8217;</p></blockquote>
<p>To eliminate the DRM warning in Firefox and Librewolf without enable DRM, add this to &#8220;userChrome.css&#8221;:</p>
<pre> notification[value="drmContentDisabled"]{ display:none !important; }</pre>
<p>toolkit.legacyUserProfileCustomizations.stylesheets must be set to true in about config.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Double Sided Scan and PDF</title>
		<link>http://192.168.0.198/archives/124</link>
		<comments>http://192.168.0.198/archives/124#comments</comments>
		<pubDate>Thu, 01 Feb 2024 16:15:16 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Ghostscript]]></category>
		<category><![CDATA[HPLIP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[QPDF]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=124</guid>
		<description><![CDATA[The following script scans PDFs via an auto-document feeder in Hp-Lip and then collates the pages to the correct order when there are reverse sides. No scans will be saved if no data is transmitted for the second set of scans. The second set of scans is the reverse of the pages. #!/usr/bin/env bash YMD=$(date [...]]]></description>
			<content:encoded><![CDATA[<p>The following script scans PDFs via an auto-document feeder in Hp-Lip and then collates the pages to the correct order when there are reverse sides. No scans will be saved if no data is transmitted for the second set of scans. The second set of scans is the reverse of the pages.</p>
<pre class="prettyprint">#!/usr/bin/env bash

YMD=$(date +"%Y-%m-%d")
Y=$(date +"%Y")
WORKDIR=/home/username/Temp/
OUTPATH=/home/username/Scans/${Y}/
#  Create a folder, ~/Temp and create a folder, ~/Scans
mkdir -p "/home/username/Scans/${Y}"

hp-scan --adf --mode=color &amp;&amp;
PART=hpscan
LATESTSCAN=`ls -t ${PART}*pdf | sed "1q"`
echo "${LATESTSCAN} ready for ${FILEOUTPUT}"

#  Why you shouldn't parse the output of ls
#  http://mywiki.wooledge.org/ParsingLs 
#  This does not use the FILEOUTPUT variable itself because the cp command
#  seems to have trouble copying the file correctly, even with switches. 

# Thanks Elektropepi at https://github.com/qpdf/qpdf/issues/259
function pdfscanmerge() {
	if [ $# -ne 3 ]; then 
		echo "Usage: pdfscanmerge<output>"; return; fi let odd_pages=$(qpdf --show-npages $1) let even_page=$(qpdf --show-npages $2) argument= for (( odd_page=1; odd_page0 ]; then argument+="$2 $even_page " fi let even_page-- done qpdf --empty --pages $argument -- $3 } cp ${LATESTSCAN} "$WORKDIR$1-uncompressed-scanned-${YMD}.pdf" gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -sOutputFile="$OUTPATH${YMD}-$1.pdf" ${LATESTSCAN} sleep 1 rm -f ${LATESTSCAN} rm -f "$WORKDIR$1-uncompressed-scanned-${YMD}.pdf" killall evince read -p "Load the reverse sides and press any key:" n hp-scan --adf --mode=color &amp;&amp; PART=hpscan LATESTSCAN=`ls -t ${PART}*pdf | sed "1q"` echo "${LATESTSCAN} ready for ${FILEOUTPUT}" cp ${LATESTSCAN} "$WORKDIR$1-uncompressed-scanned-reverse-${YMD}.pdf" gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -sOutputFile="$OUTPATH${YMD}-$1-reverse.pdf" ${LATESTSCAN} sleep 1 rm -f ${LATESTSCAN} rm -f "$WORKDIR$1-uncompressed-scanned-reverse-${YMD}.pdf" killall evince pdfscanmerge "$OUTPATH${YMD}-$1.pdf" "$OUTPATH${YMD}-$1-reverse.pdf" "$OUTPATH${YMD}-$1-collated.pdf" rm -f "$OUTPATH${YMD}-$1.pdf" rm -f "$OUTPATH${YMD}-$1-reverse.pdf"</output></pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/124/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automated Database Restart</title>
		<link>http://192.168.0.198/archives/113</link>
		<comments>http://192.168.0.198/archives/113#comments</comments>
		<pubDate>Sun, 21 Jan 2024 22:41:11 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=113</guid>
		<description><![CDATA[Here is a script that checks to ensure the database is running and restarts the service if it is not running.  This was used on a very low memory server to ensure a database remained operational, despite it sometimes crashing due to out of memory errors. #!/bin/bash timestamp="$(date)" systemctl stop httpd &#38;&#38; echo "${timestamp}" Stopping [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a script that checks to ensure the database is running and restarts the service if it is not running.  This was used on a very low memory server to ensure a database remained operational, despite it sometimes crashing due to out of memory errors.</p>
<pre class="prettyprint">#!/bin/bash

timestamp="$(date)"
systemctl stop httpd &amp;&amp; echo "${timestamp}" Stopping Apache... &gt;&gt; /home/centos/administration/apache.log
systemctl is-active mariadb &amp;&amp; echo "${timestamp}" MariaDB is active so not starting &gt;&gt; /home/centos/administration/mariadb_active.log || echo "${timestamp}" MariaDB is not Active &gt;&gt; /home/centos/administration/mariadb_inactive.log
systemctl is-active mariadb &amp;&amp; echo "${timestamp}" No need to restart MariaDB || systemctl start mariadb
systemctl start httpd &amp;&amp; echo "${timestamp}" restarting apache...&gt;&gt; /home/centos/administration/apache.log</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/113/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AppImage Integration</title>
		<link>http://192.168.0.198/archives/66</link>
		<comments>http://192.168.0.198/archives/66#comments</comments>
		<pubDate>Sun, 21 Jan 2024 19:12:41 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[AppImage]]></category>
		<category><![CDATA[LibreWolf]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=66</guid>
		<description><![CDATA[To install AppImages and integrate them with the desktop environment like a conventional package,  use the AppImage Launcher. LibreWolf’s documentation contains a how-to document on using AppImage Launcher.]]></description>
			<content:encoded><![CDATA[<p align="left">To install AppImages and integrate them with the desktop environment like a conventional package,  use the <a href="https://github.com/TheAssassin/AppImageLauncher">AppImage Launcher</a>. <a href="https://librewolf.net/">LibreWolf</a>’s documentation <a href="https://librewolf.net/installation/linux/">contains a how-to document</a> on using AppImage Launcher.</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/66/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Functions in Bash</title>
		<link>http://192.168.0.198/archives/41</link>
		<comments>http://192.168.0.198/archives/41#comments</comments>
		<pubDate>Sun, 21 Jan 2024 14:57:01 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=41</guid>
		<description><![CDATA[This is the code for a function in Bash script. #!/bin/bash # Define a function greet() { echo "Hello, $1" } # Call the function with "World" as the argument greet "World"]]></description>
			<content:encoded><![CDATA[<p>This is the code for a function in Bash script.</p>
<pre> #!/bin/bash
 # Define a function</pre>
<pre> greet() {
 echo "Hello, $1"
 }
 # Call the function with "World" as the argument
 greet "World"</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/41/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looping through filenames in Bash</title>
		<link>http://192.168.0.198/archives/22</link>
		<comments>http://192.168.0.198/archives/22#comments</comments>
		<pubDate>Sun, 21 Jan 2024 01:59:27 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=22</guid>
		<description><![CDATA[To loop through the subdirectories in a folder, when those subdirectories may contain spaces in the file names, use the following procedure. OLD_IFS=$IFS &#38;&#38; IFS=$'\n' for directory in $HOME/somefolder/*/; do echo “some code here” done IFS=$OLD_IFS &#160;]]></description>
			<content:encoded><![CDATA[<p>To loop through the subdirectories in a folder, when those subdirectories may contain spaces in the file names, use the following procedure.</p>
<pre>OLD_IFS=$IFS &amp;&amp; IFS=$'\n'
 for directory in $HOME/somefolder/*/; do
 echo “some code here”
 done
 IFS=$OLD_IFS</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/22/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash and *nix Note no. 2</title>
		<link>http://192.168.0.198/archives/6</link>
		<comments>http://192.168.0.198/archives/6#comments</comments>
		<pubDate>Wed, 10 Jan 2024 06:18:42 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nextcloud]]></category>
		<category><![CDATA[WSL]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=6</guid>
		<description><![CDATA[&#160; This document contains some notes on .bashrc for use with Linux systems. alias ll=&#8217;ls -alF&#8217; alias la=&#8217;ls -A&#8217; alias l=&#8217;ls –CF&#8217; if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi The preceding two blocks come standard on Ubuntu as of version 2022.04. One tweak for WSL2 on Windows might be the addition of this [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>This document contains some notes on <em>.bashrc</em> for use with Linux systems.</p>
<blockquote><p>alias ll=&#8217;ls -alF&#8217;<br />
alias la=&#8217;ls -A&#8217;<br />
alias l=&#8217;ls –CF&#8217;</p></blockquote>
<blockquote><p>if [ -f ~/.bash_aliases ]; then<br />
. ~/.bash_aliases<br />
fi</p></blockquote>
<p>The preceding two blocks come standard on Ubuntu as of version 2022.04. One tweak for WSL2 on Windows might be the addition of this line.</p>
<blockquote><p>sudo bash “/etc/rc.local”</p></blockquote>
<p>and in the rc.local follow, add the following.</p>
<blockquote><p>#!/bin/bash<br />
rm -f /etc/resolv.conf<br />
echo &#8220;nameserver 1.1.1.1&#8243; &gt;&gt; /etc/resolv.conf<br />
echo &#8220;nameserver 8.8.8.8&#8243; &gt;&gt; /etc/resolv.conf</p></blockquote>
<p>This is because WSL2 may place non-routable IP addresses using 172… in <em>resolv.conf</em>. As of this writing, following steps recommended to disable the generation of the file fails to resolve the issue where the file is newly generated with every new terminal launched in Windows terminal. Having this run with each new Bash login ensures success with network communications.  The location /etc/rc.local may seem like an odd location for this.</p>
<p>The crontab to ensure to check each minute to ensure a virtual machine is running in VirtualBox is as follows.</p>
<blockquote><p>*/1 * * * * VBoxManage startvm &#8220;VMNAME&#8221; &#8211;type headless<br />
*/1 * * * * VBoxManage startvm &#8220;VMNAME2&#8243; &#8211;type headless</p></blockquote>
<p>If the virtual machine is already running, then it will not start a new copy of it. This is better than attempting to run the script via a system wide script after a reboot.  Running it this way allows a simple crontab for the user for whom the machine needs to run under. To run a script every five minutes, add the crontab as follows:</p>
<blockquote><p>*/5 * * * * /home/USERNAME/nextcloudcron</p></blockquote>
<p>In this example, the <em>nextcloudcron</em> script will run every five minutes.  This particular script is one for use contacting my Nextcloud instance for webcron.  It does not contain a .sh on the filename, because some implementations may disallow crontab scripts with file extensions.</p>
<p>The following checks inside a subdirectory and pulls in the files therein as bash sources. This is useful for breaking aliases, variables, and other items into different files.</p>
<blockquote><p>if [ -d ~/.bashrc.d ]; then<br />
for rc in ~/.bashrc.d/*; do<br />
if [ -f "$rc" ]; then<br />
. &#8220;$rc&#8221;<br />
fi<br />
done<br />
fi</p></blockquote>
<p>The following uses nano as the crontab editor.</p>
<blockquote><p>export VISUAL=nano</p></blockquote>
<p>On Oracle Linux 9 on AWS, it is necessary to install <em>Cronie</em> to enable cron jobs.  To ensure this starts after reboots, add the following to <em>/etc/rc.local</em>.</p>
<blockquote><p>bash /sbin/crond</p></blockquote>
<p>To create a date line for a log file, use the following:</p>
<blockquote><p>echo $(date) &gt;&gt; /home/USER/FILENAME</p></blockquote>
<p>The Shebang for the top of bash files is</p>
<blockquote><p>#!/usr/bin/env bash</p></blockquote>
<p>To auto-update via DNF and leave a log of what was accomplished, use the following script.  The script will write a list of the updates to the systemupdates.log file, and then update the system with details of that process written to the dnfupdates.log file.</p>
<blockquote><p>#!/usr/bin/env bash<br />
echo $(date) &gt;&gt; /home/USER/systemupdates.log<br />
sudo dnf check-update &gt;&gt; /home/USER/systemupdates.log<br />
echo $(date) &gt;&gt; /home/USER/dnfupdates.log<br />
sudo dnf update -y &gt;&gt; /home/USER/dnfupdates.log 2&gt;&amp;1</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bash and *nix Note no. 1</title>
		<link>http://192.168.0.198/archives/8</link>
		<comments>http://192.168.0.198/archives/8#comments</comments>
		<pubDate>Fri, 07 Jul 2023 23:41:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Zen Burn]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=8</guid>
		<description><![CDATA[7 July 2023: Ubuntu 22.04′s update notifier seems to not include the option to configure any settings, at least after certain conditions exist on a particular system.  To stop the notifier from appearing.  To stop the notifier from appearing use sudo apt-get remove update-notifier 7 July 2023: There are non-snap builds of ungoogled-chromium for Ubuntu [...]]]></description>
			<content:encoded><![CDATA[<p>7 July 2023:<br />
Ubuntu 22.04′s update notifier seems to not include the option to configure any settings, at least after certain conditions exist on a particular system.  To stop the notifier from appearing.  To stop the notifier from appearing use</p>
<pre>sudo apt-get remove update-notifier</pre>
<p>7 July 2023:<br />
There are non-snap builds of <a href="https://software.opensuse.org//download.html?project=home%3Aungoogled_chromium&amp;package=ungoogled-chromium">ungoogled-chromium</a> for Ubuntu</p>
<p>6 July 2023 and prior:</p>
<p>To disable automatic updates on Ubuntu:</p>
<pre>sudo dpkg-reconfigure unattended-upgrades</pre>
<pre>sudo apt remove packagekit</pre>
<pre></pre>
<p>In .bashrc create the following alias:</p>
<pre>alias nano="nano -c --guidestripe 80"</pre>
<p>This will open always Nano with line and column numbering along with a long line marker at the specified column. The long line marker feature works for Nano version higher than 4, which doesn’t include the version in the CentOS 7 repositories.</p>
<p>In .bashrc add the following line:</p>
<pre>export DISPLAY=\
"`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"</pre>
<p>This adds the IP address of the instance to the display variable for use with Windows Subsystem for Linux and VcXsrv.</p>
<p>In .nanorc add the following items. The first two lines are commented because the command line switch used in the alias for the line numbers creates no artifacts when using copy-paste.</p>
<pre>#set linenumbers
#set constantshow

# https://www.nano-editor.org/dist/latest/nanorc.5.html
set guidestripe 80

include /usr/share/nano/autoconf.nanorc
include /usr/share/nano/patch.nanorc
include /usr/share/nano/nanorc.nanorc
include /usr/share/nano/groff.nanorc
include /usr/share/nano/awk.nanorc
include /usr/share/nano/man.nanorc
include /usr/share/nano/java.nanorc
include /usr/share/nano/sh.nanorc
include /usr/share/nano/po.nanorc
include /usr/share/nano/texinfo.nanorc
include /usr/share/nano/python.nanorc
include /usr/share/nano/perl.nanorc
include /usr/share/nano/pov.nanorc
include /usr/share/nano/ocaml.nanorc
include /usr/share/nano/tcl.nanorc
include /usr/share/nano/debian.nanorc
include /usr/share/nano/lua.nanorc
include /usr/share/nano/xml.nanorc
include /usr/share/nano/gentoo.nanorc
include /usr/share/nano/objc.nanorc
include /usr/share/nano/tex.nanorc
include /usr/share/nano/guile.nanorc
include /usr/share/nano/php.nanorc
include /usr/share/nano/c.nanorc
include /usr/share/nano/nftables.nanorc
include /usr/share/nano/spec.nanorc
include /usr/share/nano/elisp.nanorc
include /usr/share/nano/ruby.nanorc
include /usr/share/nano/go.nanorc
include /usr/share/nano/nanohelp.nanorc
include /usr/share/nano/default.nanorc
include /usr/share/nano/json.nanorc
include /usr/share/nano/css.nanorc
include /usr/share/nano/mgp.nanorc
include /usr/share/nano/asm.nanorc
include /usr/share/nano/mutt.nanorc
include /usr/share/nano/javascript.nanorc
include /usr/share/nano/postgresql.nanorc
include /usr/share/nano/rust.nanorc
include /usr/share/nano/fortran.nanorc
include /usr/share/nano/cmake.nanorc
include /usr/share/nano/makefile.nanorc
include /usr/share/nano/html.nanorc
include /usr/share/nano/changelog.nanorc</pre>
<p>Using Tar and Gzip:<br />
tar -zcvf output_file_name[.tar.gz or .tgz] directory_to_compress</p>
<p>tar -Jcvf output_file_name[.tar.xz] directory_to_compress<br />
reads compression level for XZ from environmental variable, but note that xz utils is not installed by default on ubuntu 10.04</p>
<p>tar -xvf works to extract .tar.gz file created like in the above<br />
The Tar and Gzip commands use compression settings specified in .bashrc</p>
<pre>export GZIP=-9

export XZ_OPT=-9</pre>
<p>Add the following to .bashrc for a console calculator:</p>
<pre>calc() { echo "$*" | bc -l; }</pre>
<p>For the ll alias, use the following in .bashrc</p>
<pre>alias ll='ls -alF'</pre>
<p>To change the terminal name use the following in .bashrc.  The command differs depending upon which version of Gnome one uses.</p>
<pre># For older versions of gnome-terminal
#shellrename() { read -p "Enter new shell name: " name &amp;&amp; PROMPT_COMMAND='echo -ne "\033]0;${name}\007"'; }
# Works on OpenSUSE 15.3
#PS1=$PS1"\[\e]0;test1\a\]"
shellrename() { read -p "Enter new shell name: " name &amp;&amp; PS1=$PS1"\[\e]0;${name}\a\]"; }</pre>
<p>To obtain a uuid, add the following to .bashrc:</p>
<pre>uuid() { UUID=$(cat /proc/sys/kernel/random/uuid) &amp;&amp; echo $UUID;</pre>
<p>Zen Burn color scheme for the terminal, but sometimes causes problems with work via SSH.</p>
<pre># Zen Burn
# Another old way that works great in gnome-terminal while causing problems
# in some configurations involving SSH:
echo -ne '\e]12;#BFBFBF\a'
echo -ne '\e]10;#DCDCCC\a'
echo -ne '\e]11;#3F3F3F\a'
echo -ne '\e]4;0;#3F3F3F\a'
echo -ne '\e]4;1;#705050\a'
echo -ne '\e]4;2;#60B48A\a'
echo -ne '\e]4;3;#DFAF8F\a'
echo -ne '\e]4;4;#506070\a'
echo -ne '\e]4;5;#DC8CC3\a'
echo -ne '\e]4;6;#8CD0D3\a'
echo -ne '\e]4;7;#DCDCCC\a'
echo -ne '\e]4;8;#709080\a'
echo -ne '\e]4;9;#DCA3A3\a'
echo -ne '\e]4;10;#C3BF9F\a'
echo -ne '\e]4;11;#F0DFAF\a'
echo -ne '\e]4;12;#94BFF3\a'
echo -ne '\e]4;13;#EC93D3\a'</pre>
<p>Circa 2015: Adding Windows to CentOS 7 and Grub 2 after installing CentOS and no automatic configuration of Windows boot options. The file to manually edit is /etc/grub.d/40_custom.</p>
<pre>menuentry "Windows 10 Professional" { set root=(hd0,1) chainloader +1 }</pre>
<p>After editing, update Grub and reboot using the following command.</p>
<pre>grub2-mkconfig –output=/boot/grub2/grub.cfg</pre>
<p>The following shows one of the custom file contents circa 2018 or 2019 after some changes to installers and autodetection.</p>
<pre>#!/bin/sh</pre>
<pre>exec tail -n +3 $0</pre>
<pre># This file provides an easy way to add custom menu entries. Simply type the menu entries you want to add after this comment.</pre>
<pre># Be careful not to change the 'exec tail' line above.</pre>
<pre>menuentry "Windows (system) (on /dev/sda1)" --class windows --class os { insmod part_msdos insmod ntfs insmod ntldr set root='(hd0,msdos1)' ntldr ($root)/bootmgr}</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/8/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minecraft Tweaks</title>
		<link>http://192.168.0.198/archives/1091</link>
		<comments>http://192.168.0.198/archives/1091#comments</comments>
		<pubDate>Thu, 16 Mar 2023 08:34:27 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Minecraft]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1091</guid>
		<description><![CDATA[To launch java -Xms2048M -Xmx2048M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar server-1.21.1.jar nogui]]></description>
			<content:encoded><![CDATA[<p>To launch</p>
<pre>java -Xms2048M -Xmx2048M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar server-1.21.1.jar nogui</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1091/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rudimentary versioning system</title>
		<link>http://192.168.0.198/archives/2158</link>
		<comments>http://192.168.0.198/archives/2158#comments</comments>
		<pubDate>Mon, 19 Oct 2020 17:14:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2158</guid>
		<description><![CDATA[Some time ago, Python 2 was the default language for use with Linux and Gnome 3. A set of extensions for Gnome, called Nautilus Python existed which allowed one to create customized right click menus. One of these was called “Historical Copy” and it created a lovely copy of the file with a timestamp inserted [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, Python 2 was the default language for use with Linux and Gnome 3. A set of extensions for Gnome, called Nautilus Python existed which allowed one to create customized right click menus. One of these was called “Historical Copy” and it created a lovely copy of the file with a timestamp inserted into the file name. The timestamp was constructed to allow the files to appear easily sorted when perusing directories. Software rot affects all software and especially software that requires Python 2 libraries that maintainers no longer ship on new versions of Linux. To counter this problem, we have a rudimentary versioning system which adheres to the Keep it Sweetly Simple (KISS) principle.</p>
<p>The following code is appended to the .bashrc file in the home directory.</p>
<pre class="prettyprint">### Historicaly copy rudimentary versioning system
### Saves a historical copy and a note about that copy
### Compressed to 68 character width for website display purposes

historicalcopy() { mkdir -p local-historical-versions &amp;&amp;\
 timestamp=$(date +&quot;%y.%m.%d.%H%M&quot;) &amp;&amp; read -p\
 &quot;Enter filename:&quot; n &amp;&amp; read -p &quot;Enter note: &quot; note &amp;&amp;\
 filename=$(pwd)/$n &amp;&amp; file_name=$(basename $filename) &amp;&amp;\
 left_side=&quot;${file_name%.*}&quot; &amp;&amp; extension=&quot;${file_name##*.}&quot; &amp;&amp;\
 cp $filename\
 local-historical-versions/${left_side}-$timestamp.$extension &amp;&amp;\
 cp $filename\
 /var/www/html/hv/archives/${left_side}-$timestamp.$extension &amp;&amp;\
 sed -i &quot;11i${left_side}-${timestamp}.${extension} ${note}&quot;\
 /var/www/html/hv/index.php; }</pre>
<p>From the directory with the file to be versioned, the command historicalcopy is typed.&#160; This creates a directory in the current directory called local-historical-versions and copies the historical version into that directory.&#160; It then copies the file to a complete historical versions archive and appends a PHP file in the web-server directory with both a link and comment.&#160; The reason periods are used instead of dashes is because experience demonstrated that my software using Python had difficulty with filenames incorporating dashes.&#160; This naming style is similar to the RPM naming convention which uses name-version-release.&#160; This rudimentary versioning system uses a timestamp as the version number.&#160; There are plenty of more advanced systems such as git, but sometimes we can work more efficiently with a simple direct historical list of what file did what way back when.&#160; This could easily be changed so that an html file is updated in a local directory instead of a PHP file on a web-server.&#160; The PHP file is future usage incorporated with user authentication and a long term code repository.&#160; The code can then be used on OSX and Windows Subsystem Linux by pulling the PHP to the local machine, inserting the necessary file, and then transferring it back to the web-server via SSH.&#160; In a way that seems like Git, but this is for the use case where one wants a simple to use list.</p>
<p>A typical workflow goes something like this.&#160; Open up a terminal and navigate to the directory containing a heavily evolved r script.&#160; Use the historicalcopy command on that script with a note something like “prior to adding the new data frame for time series data on Kentucky unemployment”.&#160; Then open that file in the editor of choice to work on it.&#160; It is very useful for Python programs where huge changes can take place which require significant removal of existing code.&#160; This is the case for one of my projects which has been an ongoing project involving thousands and thousands of lines of code that has evolved over four years.&#160; This simple scheme lets me remember which files had the important code that I still want to use in the future. The flat file format and easy naming convention allows easy migration, backups, and reduces the learning curve.</p>
<p><a href="http://192.168.0.198/wp-content/uploads/2025/05/image.png"><img title="image" style="margin: 0px; display: inline; background-image: none;" border="0" alt="image" src="http://192.168.0.198/wp-content/uploads/2025/05/image_thumb.png" width="422" height="205" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Persistent Notification in Gnome 3</title>
		<link>http://192.168.0.198/archives/2160</link>
		<comments>http://192.168.0.198/archives/2160#comments</comments>
		<pubDate>Sat, 15 Aug 2020 17:18:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=2160</guid>
		<description><![CDATA[This is a GTK notification in Linux that remains on screen until it is clicked. #!/usr/bin/python3 import gi gi.require_version('Notify', '0.7') from gi.repository import Notify gi.require_version('Gtk', '3.0') Notify.init(&#34;Hello world&#34;) Hello = Notify.Notification.new(&#34;Hello world - the heading&#34;, &#34;This is an example notification.&#34;, &#34;dialog-information&#34;) # https://www.devdungeon.com/content/desktop-notifications-linux-python Hello.set_urgency(2) # Highest priority Hello.show() Last updated and tested 12 December 2020 [...]]]></description>
			<content:encoded><![CDATA[<p>This is a GTK notification in Linux that remains on screen until it is clicked.</p>
<pre class="prettyprint">#!/usr/bin/python3

import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify
gi.require_version('Gtk', '3.0')

Notify.init(&quot;Hello world&quot;)
Hello = Notify.Notification.new(&quot;Hello world - the heading&quot;,
                                &quot;This is an example notification.&quot;,
                                &quot;dialog-information&quot;)

# https://www.devdungeon.com/content/desktop-notifications-linux-python
Hello.set_urgency(2) # Highest priority
Hello.show()</pre>
<p>Last updated and tested 12 December 2020 on CentOS 8 (not Stream).</p>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/2160/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synchronize time on CentOS 6</title>
		<link>http://192.168.0.198/archives/1696</link>
		<comments>http://192.168.0.198/archives/1696#comments</comments>
		<pubDate>Wed, 28 Dec 2011 02:45:00 +0000</pubDate>
		<dc:creator>Yokelheim</dc:creator>
				<category><![CDATA[Computing Notes]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ntp]]></category>

		<guid isPermaLink="false">http://192.168.0.198/?p=1696</guid>
		<description><![CDATA[This will start the time service and synchronize the clocks on CentOS 6. yum install ntp chkconfig ntpd on ntpdate pool.ntp.org /etc/init.d/ntpd start]]></description>
			<content:encoded><![CDATA[<p>This will start the time service and synchronize the clocks on CentOS 6.</p>
<pre>yum install ntp 
chkconfig ntpd on 
ntpdate pool.ntp.org 
/etc/init.d/ntpd start</pre>
]]></content:encoded>
			<wfw:commentRss>http://192.168.0.198/archives/1696/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
