<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Rocasta Dot Com</title><link>https://www.rocasta.com/posts/</link><description>Recent content in Posts on Rocasta Dot Com</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 07 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.rocasta.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The Adventure of the Engineer's Thumb — Story Guide</title><link>https://www.rocasta.com/posts/2026-07-07-engineers-thumb-story-guide/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rocasta.com/posts/2026-07-07-engineers-thumb-story-guide/</guid><description>&lt;div class="sect1"&gt;
&lt;h2 id="_story_guide"&gt;&lt;a class="anchor" href="#_story_guide"&gt;&lt;/a&gt;1. Story Guide&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The original story runs approximately 6,000 words. For a 32-page picture book
(13-14 double-page spreads after front matter), target text is ~600 words,
roughly 40-50 words per spread.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;This guide lists every spread with its scene, text, and the cats&amp;#39; involvement.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_page_credits"&gt;&lt;a class="anchor" href="#_page_credits"&gt;&lt;/a&gt;1.1. Page Credits&lt;/h3&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pages 1-3: Front matter (half-title, title, copyright)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pages 4-31: Story content (14 spreads)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Page 32: Back matter / colophon&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_spread_1_the_clock_strikes_seven"&gt;&lt;a class="anchor" href="#_spread_1_the_clock_strikes_seven"&gt;&lt;/a&gt;2. Spread 1 — The Clock Strikes Seven&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;strong&gt;Page 4 — Full-page illustration&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Bash Operator Cheatsheet</title><link>https://www.rocasta.com/posts/2025-03-26-bash-operator-cheatsheet/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rocasta.com/posts/2025-03-26-bash-operator-cheatsheet/</guid><description>&lt;div class="paragraph"&gt;
&lt;p&gt;This cheat sheet covers Bash operators including file tests, string comparisons, logical operations, and arithmetic evaluations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_file_test_operators"&gt;&lt;a class="anchor" href="#_file_test_operators"&gt;&lt;/a&gt;1. File Test Operators&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;File test operators check the status of files.&lt;/p&gt;
&lt;/div&gt;
&lt;table class="tableblock frame-all grid-all stretch"&gt;
&lt;colgroup&gt;
&lt;col style="width: 33.3333%;"/&gt;
&lt;col style="width: 33.3333%;"/&gt;
&lt;col style="width: 33.3334%;"/&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class="tableblock halign-left valign-top"&gt;Operator&lt;/th&gt;
&lt;th class="tableblock halign-left valign-top"&gt;Description&lt;/th&gt;
&lt;th class="tableblock halign-left valign-top"&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-e&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File exists (any type)&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -e file.txt ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File exists and is a regular file&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -f script.sh ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File exists and is a directory&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -d myfolder ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is readable&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -r data.txt ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-w&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is writable&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -w output.log ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-x&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is executable&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -x script.sh ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File exists and is not empty&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -s nonempty.txt ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-L&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is a symbolic link&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -L shortcut ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-b&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is a block device&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -b /dev/sda1 ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is a character device&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -c /dev/ttyS0 ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is a named pipe (FIFO)&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -p pipefile ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;-S&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;File is a socket&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;code&gt;[[ -S /var/run/docker.sock ]]&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;</description></item><item><title>Diagnosing SMB Latency</title><link>https://www.rocasta.com/posts/2025-03-26-diagnose-smb-latency/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rocasta.com/posts/2025-03-26-diagnose-smb-latency/</guid><description>&lt;div class="sect1"&gt;
&lt;h2 id="_diagnosing_the_problem"&gt;&lt;a class="anchor" href="#_diagnosing_the_problem"&gt;&lt;/a&gt;1. Diagnosing the Problem&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;
&lt;p&gt;Check Network Speed&lt;/p&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;iperf3&lt;/code&gt; to measure network throughput between the two Macs.&lt;/p&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="rouge highlight"&gt;&lt;code data-lang="shell"&gt;&lt;span class="c"&gt;# On Mac B (SMB Server)&lt;/span&gt;
iperf3 &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;span class="c"&gt;# On Mac A (Client)&lt;/span&gt;
iperf3 &lt;span class="nt"&gt;-c&lt;/span&gt; &amp;lt;Mac B&lt;span class="s1"&gt;&amp;#39;s IP&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the speed is close to 1Gbps, the network is performing as expected.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If it’s significantly lower (e.g., below 500 Mbps), there may be a bottleneck in the network hardware or cabling.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check Latency with &lt;code&gt;ping&lt;/code&gt;&lt;/p&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;ping&lt;/code&gt; to measure round-trip time between Mac A and Mac B.&lt;/p&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="rouge highlight"&gt;&lt;code data-lang="shell"&gt;ping &lt;span class="nt"&gt;-c&lt;/span&gt; 10 &amp;lt;Mac B&lt;span class="s1"&gt;&amp;#39;s IP&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description></item><item><title>Building a Gigabyte Brix SUSE Distro</title><link>https://www.rocasta.com/posts/2024-07-09-building-a-gigabyte-brix-suse-distro/</link><pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.rocasta.com/posts/2024-07-09-building-a-gigabyte-brix-suse-distro/</guid><description>&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;
&lt;p&gt;Download the latest copy of SUSE &lt;a href="https://get.opensuse.org/tumbleweed"&gt;tumbleweed&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Burn this ISO image to thumb drive&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="rouge highlight"&gt;&lt;code data-lang="sh"&gt;&lt;span class="nb"&gt;dd &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;location_of_iso&amp;gt; &lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/rdisk&amp;lt;thumbdrive_disk_number&amp;gt; &lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1m&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;
&lt;p&gt;Put this in the front USB slot of the Brix&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Power off and power on (a hard reboot is important)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Press the delete key repeatedly to get to Brix BIOS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change boot order in boot section to specify USB drive as 1st boot&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save and Exit (reboot on thumb drive)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run installer&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item></channel></rss>