<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6426345363781422461</id><updated>2026-08-04T00:22:51.197+00:00</updated><title type='text'>The Return of Agent Zlerich</title><subtitle type='html'>As far as the Internet can tell me, no one uses &quot;Zlerich&quot;. I call dibs.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>183</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7600348059378598141</id><published>2026-08-04T00:22:51.196+00:00</published><updated>2026-08-04T00:22:51.197+00:00</updated><title type='text'>The Alexandrian Moment</title><content type='html'>&lt;p&gt;
For giggles, I put a short story up as an Amazon Kindle offering: &lt;a href=&quot;https://www.amazon.com/dp/B0HCQXZXZN/&quot;&gt;The Alexandrian Moment&lt;/a&gt;
&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7600348059378598141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7600348059378598141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7600348059378598141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7600348059378598141'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/08/the-alexandrian-moment.html' title='The Alexandrian Moment'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8533995272694503871</id><published>2026-07-30T19:58:02.273+00:00</published><updated>2026-07-30T19:58:02.273+00:00</updated><title type='text'>Workaround gamescope invisible cursor bug in Ubuntu 26.04</title><content type='html'>&lt;h2&gt;The bug&lt;/h2&gt;

&lt;p&gt;On Ubuntu 26.04 (resolute, which ships gamescope 3.16.20), launching a game
through gamescope with &lt;code&gt;--force-grab-cursor&lt;/code&gt; can make the mouse
pointer vanish.  Upstream:
&lt;a href=&quot;https://github.com/ValveSoftware/gamescope/issues/2180&quot;&gt;https://github.com/ValveSoftware/gamescope/issues/2180&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dropping &lt;code&gt;--force-grab-cursor&lt;/code&gt; avoids the bug, but that flag is
what confines the pointer to the game window on a multi-monitor setup, so
removing it is not an acceptable fix here.&lt;/p&gt;

&lt;h2&gt;A Workaround&lt;/h2&gt;

&lt;p&gt;Only one thing worked for me: &lt;strong&gt;build the older questing gamescope
3.16.15 and run it instead of resolute&#39;s 3.16.20.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything else raised on #2180 and related threads failed or did not
apply:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;--hide-cursor-delay 99999&lt;/code&gt; — no effect.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;WLR_NO_HARDWARE_CURSORS=1&lt;/code&gt; — no effect.&lt;/li&gt;
  &lt;li&gt;Borderless-windowed / backend switching — unreliable.&lt;/li&gt;
  &lt;li&gt;winecfg / protontricks &quot;capture mouse in fullscreen&quot; — Proton/Wine only,
      so no help for a native-Linux game.&lt;/li&gt;
  &lt;li&gt;Downgrade further, to 3.14.x — unnecessary; 3.16.15 sufficed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both 3.16.15 and 3.16.20 are 3.16.x, so the regression landed in a commit
between those two tags.&lt;/p&gt;

&lt;h2&gt;Procedure for Agents&lt;/h2&gt;

&lt;p&gt;Build gamescope &lt;code&gt;3.16.15-2&lt;/code&gt; from Ubuntu questing sources and
install, self-contained, under &lt;code&gt;~/Stow/gamescope-questing&lt;/code&gt;.  No root,
no system changes.  resolute dropped wlroots 0.18 (ships 0.19), which 3.16.15
needs — Debian patch &lt;code&gt;0006&lt;/code&gt; wires gamescope to the system
&lt;code&gt;libwlroots-0.18-dev&lt;/code&gt;, and the Debian tarball strips the vendored
&lt;code&gt;subprojects/wlroots&lt;/code&gt; — so build wlroots 0.18 from its matching Ubuntu
source into the same prefix.&lt;/p&gt;

&lt;h3&gt;Sources&lt;/h3&gt;

&lt;p&gt;All from the Ubuntu archive.  Confirm each download&#39;s checksum against the
&lt;code&gt;Checksums-Sha256&lt;/code&gt; field of its &lt;code&gt;.dsc&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;gamescope &lt;code&gt;3.16.15-2&lt;/code&gt;, &lt;code&gt;pool/multiverse/g/gamescope/&lt;/code&gt;&lt;br&gt;
      &lt;a href=&quot;https://packages.ubuntu.com/source/questing/gamescope&quot;&gt;https://packages.ubuntu.com/source/questing/gamescope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;wlroots &lt;code&gt;0.18.2-3&lt;/code&gt; (source behind questing&#39;s
      &lt;code&gt;libwlroots-0.18-dev&lt;/code&gt;), &lt;code&gt;pool/universe/w/wlroots/&lt;/code&gt;&lt;br&gt;
      &lt;a href=&quot;https://packages.ubuntu.com/questing/libwlroots-0.18-dev&quot;&gt;https://packages.ubuntu.com/questing/libwlroots-0.18-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Prerequisites&lt;/h3&gt;

&lt;p&gt;Install both packages&#39; &lt;code&gt;Build-Depends&lt;/code&gt; (see each &lt;code&gt;.dsc&lt;/code&gt;).
gamescope&#39;s &lt;code&gt;libwlroots-0.18-dev&lt;/code&gt; is supplied by the wlroots build
below; wlroots&#39; &lt;code&gt;libcairo2-dev&lt;/code&gt; is needed only for examples, which are
disabled.&lt;/p&gt;

&lt;h3&gt;Build&lt;/h3&gt;

&lt;p&gt;Prefix for both: &lt;code&gt;PREFIX=&quot;$HOME/Stow/gamescope-questing&quot;&lt;/code&gt;.  Apply
each package&#39;s Debian quilt patches before configuring:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;while read p; do patch -p1 -i debian/patches/$p; done &amp;lt; debian/patches/series&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;1. wlroots 0.18.2 -&amp;gt; $PREFIX&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;meson setup build --prefix=&quot;$PREFIX&quot; --libdir=lib --buildtype=release \
  -Dexamples=false -Dwerror=false
ninja -C build install&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Installs &lt;code&gt;libwlroots-0.18.so&lt;/code&gt;, headers under
&lt;code&gt;include/wlroots-0.18&lt;/code&gt;, and &lt;code&gt;lib/pkgconfig/wlroots-0.18.pc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. gamescope 3.16.15 -&amp;gt; $PREFIX&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two source edits after patching:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;src/meson.build&lt;/code&gt;: patch &lt;code&gt;0006&lt;/code&gt; hardcodes
      &lt;code&gt;/usr/include/wlroots-0.18&lt;/code&gt; in &lt;code&gt;reshade_include&lt;/code&gt;.
      Replace with
      &lt;code&gt;join_paths(get_option(&#39;prefix&#39;), &#39;include&#39;, &#39;wlroots-0.18&#39;)&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;src/meson.build&lt;/code&gt;: &lt;code&gt;vcs_tag()&lt;/code&gt; has no git tree, so the
      &lt;code&gt;--version&lt;/code&gt; banner is blank.  After
      &lt;code&gt;gamescope_version_conf = configuration_data()&lt;/code&gt; add
      &lt;code&gt;gamescope_version_conf.set(&#39;VCS_TAG&#39;, &#39;3.16.15&#39;)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;export PKG_CONFIG_PATH=&quot;$PREFIX/lib/pkgconfig:\
/usr/lib/x86_64-linux-gnu/pkgconfig:\
/usr/lib/pkgconfig:\
/usr/share/pkgconfig&quot;
meson setup build --prefix=&quot;$PREFIX&quot; --libdir=lib --bindir=bin --buildtype=release \
  -Dpipewire=enabled -Denable_openvr_support=false \
  -Dcpp_link_args=&#39;-Wl,-rpath,$ORIGIN/../lib&#39; \
  -Dc_link_args=&#39;-Wl,-rpath,$ORIGIN/../lib&#39;
ninja -C build install&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Choices, matching the Debian &lt;code&gt;rules&lt;/code&gt; except where noted:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;-Dpipewire=enabled -Denable_openvr_support=false&lt;/code&gt; from Debian
      &lt;code&gt;rules&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;bindir=bin&lt;/code&gt;, &lt;code&gt;libdir=lib&lt;/code&gt; (Debian uses
      &lt;code&gt;/usr/games&lt;/code&gt;) so the tree suits a stow package.&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;PKG_CONFIG_PATH&lt;/code&gt; puts &lt;code&gt;$PREFIX&lt;/code&gt; first so the staged
      wlroots-0.18 wins.&lt;/li&gt;
  &lt;li&gt;rpath &lt;code&gt;$ORIGIN/../lib&lt;/code&gt; lets &lt;code&gt;gamescope&lt;/code&gt; find its
      bundled &lt;code&gt;libwlroots-0.18.so&lt;/code&gt; both in the raw prefix and after
      stowing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Verify&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;readelf -d &quot;$PREFIX/bin/gamescope&quot; | grep RUNPATH        # $ORIGIN/../lib
ldd &quot;$PREFIX/bin/gamescope&quot; | grep wlroots               # resolves inside $PREFIX
&quot;$PREFIX/bin/gamescope&quot; --version                        # gamescope version 3.16.15&lt;/code&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8533995272694503871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8533995272694503871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8533995272694503871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8533995272694503871'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/workaround-gamescope-invisible-cursor.html' title='Workaround gamescope invisible cursor bug in Ubuntu 26.04'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8594213182707835832</id><published>2026-07-24T15:03:34.041+00:00</published><updated>2026-07-24T15:03:34.041+00:00</updated><title type='text'>Time Machine Quick Reference</title><content type='html'>&lt;p&gt;
  The &lt;a href=&quot;https://www.spertilo.net/&quot;&gt;Spertilo Live Music Time Machine&lt;/a&gt; is a great little device, with a delightful interface.  It streams live shows from archive.org and phish.in, especially Grateful Dead for 1966&amp;ndash;1995.
&lt;/p&gt;

&lt;p&gt;
  I use it frequently but I infrequently need to comb their site/FAQ/etc to find button combinations for some Micro edition features.  Here&#39;s a quick reference:
&lt;/p&gt;

&lt;section id=&quot;micro-time-machine-quick-reference&quot;&gt;
  &lt;p&gt;
    Micro model reference only. No Bluetooth. No Experience Mode.
  &lt;/p&gt;

  &lt;h2&gt;Setup&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Audio&lt;/strong&gt;: analog out via 1/8&quot; headphone jack. Plug into powered speakers, an amp, or earphones.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Power&lt;/strong&gt;: USB cable, lower right corner.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;WiFi&lt;/strong&gt; (first boot, or after a failed connection):
      &lt;ul&gt;
        &lt;li&gt;Turn &lt;strong&gt;Year&lt;/strong&gt; to scroll network names; red name with &quot;&amp;gt;&quot; is the candidate. Press &lt;strong&gt;Select&lt;/strong&gt; to choose.&lt;/li&gt;
        &lt;li&gt;Hidden network: choose &lt;code&gt;HIDDEN_WIFI&lt;/code&gt; and enter the name manually.&lt;/li&gt;
        &lt;li&gt;Passkey entry: turn &lt;strong&gt;Year&lt;/strong&gt; to move the cursor, &lt;strong&gt;Day&lt;/strong&gt; to jump 10 characters, &lt;strong&gt;Select&lt;/strong&gt; to enter a character, &lt;code&gt;DEL&lt;/code&gt; to erase, &lt;strong&gt;Stop&lt;/strong&gt; to finish.&lt;/li&gt;
        &lt;li&gt;Credentials persist until the network changes.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Play a Show&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Stage a date with the &lt;strong&gt;Month&lt;/strong&gt;, &lt;strong&gt;Day&lt;/strong&gt;, &lt;strong&gt;Year&lt;/strong&gt; knobs. Venue appears if a tape exists; no venue, no show.&lt;/li&gt;
    &lt;li&gt;Press &lt;strong&gt;Select&lt;/strong&gt;. The best tape plays.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Play/Pause&lt;/strong&gt;, &lt;strong&gt;Stop&lt;/strong&gt;, &lt;strong&gt;Rewind&lt;/strong&gt;, &lt;strong&gt;FFwd&lt;/strong&gt; behave as expected.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Hold Select&lt;/strong&gt;: cycle through every tape on the staged date; release to play the one displayed. White id = soundboard, red id = audience.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Rew / FFwd&lt;/strong&gt;: previous / next track.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Stop&lt;/strong&gt;: halt playback, return play head to start of show.&lt;/li&gt;
    &lt;li&gt;Staged and selected dates are independent: browse while listening.&lt;/li&gt;
    &lt;li&gt;Set break: 10 minutes of silence between sets. FFwd skips it.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Knob Presses&lt;/h2&gt;
  &lt;table&gt;
    &lt;thead&gt;
      &lt;tr&gt;&lt;th&gt;Knob&lt;/th&gt;&lt;th&gt;Press&lt;/th&gt;&lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;&lt;td&gt;Month&lt;/td&gt;&lt;td&gt;Dim the screen&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Day&lt;/td&gt;&lt;td&gt;Jump to next date with a tape&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Year&lt;/td&gt;&lt;td&gt;Today-in-history for staged year; press again to cycle years with tapes&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
  &lt;p&gt;&lt;strong&gt;Volume&lt;/strong&gt;: dim the screen (press &lt;strong&gt;Month&lt;/strong&gt;), then &lt;strong&gt;Rewind&lt;/strong&gt; lowers and &lt;strong&gt;FFwd&lt;/strong&gt; raises volume. Turn any knob to wake the screen.&lt;/p&gt;

  &lt;h2&gt;Screen&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Top: staged date, MM-DD-YY.&lt;/li&gt;
    &lt;li&gt;Below: venue/city/state, alternating with tape id (scrolls if long).&lt;/li&gt;
    &lt;li&gt;Middle: current and next track, red text.&lt;/li&gt;
    &lt;li&gt;Bottom: selected date, MM-DD-YYYY. Bottom right: playstate.&lt;/li&gt;
    &lt;li&gt;Screen sleeps after 30 minutes idle. Any knob or button wakes it.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h2&gt;Menu &amp;mdash; Hold Power&lt;/h2&gt;
  &lt;p&gt;
    Hold &lt;strong&gt;Power&lt;/strong&gt; until the menu appears. The site says 3 seconds in one place, 5 in another; hold until you see it.&lt;br&gt;
    A short &lt;strong&gt;Power&lt;/strong&gt; press stops playback and dims the screen.
  &lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Collections&lt;/strong&gt;: add artists. Spell the collection name with the Day and Year knobs; once under 30 matches, pick from the list, choose Finished. Device restarts.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;WiFi&lt;/strong&gt;: force reconnection to a different network.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Update Code&lt;/strong&gt;: wait ~1 minute for the &quot;Press Select Button&quot; prompt, then press &lt;strong&gt;Select&lt;/strong&gt;. No prompt, no update.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Update Firmware&lt;/strong&gt;: runs on its own. Update encouraged; pre-update units skip tracks since archive.org went https-only (March 2024).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Factory Reset&lt;/strong&gt;: restore shipped software.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Current versions as of April 2024: software 2.1.3, firmware 1.23.0 20240408.&lt;/p&gt;

  &lt;h2&gt;Troubleshooting&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Dead on arrival&lt;/strong&gt;: reseat both ends of the power cable, plug in, wait 10 seconds, unplug, plug back in.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Connected but silent&lt;/strong&gt;: check the audio connection.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Phish silent&lt;/strong&gt;: run Update Code.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Tape choice&lt;/strong&gt;: default ranks soundboard first, then favored taper, downloads, track count, named tracks, rating. Hold &lt;strong&gt;Select&lt;/strong&gt; to override.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/section&gt;

</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8594213182707835832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8594213182707835832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8594213182707835832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8594213182707835832'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/time-machine-quick-reference.html' title='Time Machine Quick Reference'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2091570491018073587</id><published>2026-07-21T12:46:02.947+00:00</published><updated>2026-07-21T12:46:02.947+00:00</updated><title type='text'>Disabling Ubuntu Tile Groups via gsettings</title><content type='html'>&lt;p&gt;In Ubuntu 25.10, clicking window B (to focus it) can unexpectedly raise a sibling window A above an overlapping window C. This happens because A and B are in the same &lt;strong&gt;Tile Group&lt;/strong&gt; — a spatial grouping the Ubuntu Tiling Assistant forms when windows are snapped/tiled edge-to-edge. The extension&#39;s &quot;Raise together&quot; rule raises the entire tile group whenever any member is raised, so raising B drags A upward too. The fix is to disable that group-raise behavior while keeping tiling itself intact:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gsettings set org.gnome.shell.extensions.tiling-assistant enable-raise-tile-group false
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To verify it took, run &lt;code&gt;gsettings get org.gnome.shell.extensions.tiling-assistant enable-raise-tile-group&lt;/code&gt; — it should print &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2091570491018073587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/2091570491018073587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2091570491018073587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2091570491018073587'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/disabling-ubuntu-tile-groups-via.html' title='Disabling Ubuntu Tile Groups via gsettings'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2181925726614530615</id><published>2026-07-16T20:41:04.123+00:00</published><updated>2026-07-16T22:37:28.962+00:00</updated><title type='text'>Money and Recognition: The Two Axes of Compensation</title><content type='html'>&lt;p&gt;(&lt;i&gt;The following observation, including its linkage to Aristotle, is fun but not novel as noted at the end of the essay.  The text/references came from &lt;a href=&quot;https://help.kagi.com/kagi/ai/kagi-research.html&quot;&gt;Kagi&#39;s Research Assistant&lt;/a&gt;&lt;/i&gt;)&lt;/p&gt;

&lt;p&gt;Compensation has two parts that work like directions on a plane. One direction is &lt;strong&gt;money&lt;/strong&gt;. The other is &lt;strong&gt;recognition&lt;/strong&gt;. Every job pays out along both, but the mix is different for each one.  The mix is a two-vector and getting it right matters.&lt;/p&gt;

&lt;p&gt;Examples abound. A doctor earns good money and high respect. Both directions are strong. A ballet dancer earns little money but receives great prestige. The recognition direction does almost all the work. A soldier may earn modest pay but gains deep honor, especially in moments of sacrifice.  Respect, prestige, and honor are three words for the recognition axis — the one that money cannot buy.&lt;/p&gt;

&lt;p&gt;Money and recognition are different goods for different kinds of merit. Paying someone in the wrong way causes problems. A wealthy person does not need more money. A person who cannot buy groceries does not care about awards. The right reward is the two-vector that addresses what the person actually lacks on both axes.&lt;/p&gt;

&lt;p&gt;This is an old idea, with concepts going back to at least &lt;strong&gt;Aristotle&lt;/strong&gt;. He saw that honor (not &quot;recognition&quot;) and money were separate goods. He tied each to a different kind of contribution. He warned that mixing them up causes political trouble.  The passages below trace his argument.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse;&quot;&gt;
  &lt;colgroup&gt;
     &lt;col/&gt;
     &lt;col/&gt;
     &lt;col style=&quot;width: 14ch;&quot;/&gt;
  &lt;/colgroup&gt;
  &lt;tr&gt;
    &lt;th&gt;Concept&lt;/th&gt;
    &lt;th&gt;Aristotle&#39;s Words&lt;/th&gt;
    &lt;th&gt;Source&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;!-- ONE --&gt;
    &lt;td&gt;Honor and profit are two distinct currencies of reward. In unequal friendships, each party should receive more — but not more of the same thing: the superior receives the larger share of honor; the needy party receives the larger share of material gain.&lt;/td&gt;
    &lt;td&gt;&quot;both parties should receive a larger share from the friendship, but not a larger share of the same thing: the superior should receive the larger share of honor, the needy one the larger share of profit; for honor is the due reward of virtue and beneficence, while need obtains the aid it requires in pecuniary gain.&quot;&lt;/td&gt;
    &lt;td&gt;&lt;a href=&quot;https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.01.0054:book=8:chapter=14&quot;&gt;Nicomachean Ethics VIII.14&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;!-- TWO --&gt;
    &lt;td&gt;Honor and property are independent axes of competition. People compete for them separately, and inequality along each axis produces discontent in opposite directions: the masses resent unequal property; the upper classes resent equally distributed honors.&lt;/td&gt;
    &lt;td&gt;&quot;civil strife is caused not only by inequality of property but also by inequality of honors, though the two motives operate in opposite ways—the masses are discontented if possessions are unequally distributed, the upper classes if honors are equally distributed.&quot;&lt;/td&gt;
    &lt;td&gt;&lt;a href=&quot;https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.01.0058:book=2:section=1266b&quot;&gt;Politics II.7 (1266b)&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;!-- THREE --&gt;
    &lt;td&gt;&quot;Merit&quot; is not a single dimension. Different political traditions measure it differently — by free birth, by wealth, or by virtue — so what counts as a fair reward depends on which axis of merit is being applied.&lt;/td&gt;
    &lt;td&gt; &quot;all men agree that what is just in distribution must be according to merit in some sense, though they do not all specify the same sort of merit, but democrats identify it with the status of freeman, supporters of oligarchy with wealth (or with noble birth), and supporters of aristocracy with excellence.&quot;&lt;/td&gt;
    &lt;td&gt;&lt;a href=&quot;https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.01.0054:book=5:chapter=3&quot;&gt;Nicomachean Ethics V.3&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;!-- FOUR --&gt;
    &lt;td&gt;Paying along only one axis gives poor outcomes. Each group is partly right but wrong when it claims the whole.&lt;/td&gt;
    &lt;td&gt;&quot;All those who dispute about the forms of constitution assert a part of the just principle.&quot;&lt;/td&gt;
    &lt;td&gt;&lt;a href=&quot;https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.01.0058:book=3:section=1281a&quot;&gt;Politics III.9 (1281a)&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;This article&#39;s two-axes presentation is not original.  For example, Nancy Fraser, in her contribution to &lt;a href=&quot;https://books.google.com/books/about/Redistribution_or_Recognition.html?id=Iu1OEAAAQBAJ&quot;&gt;Redistribution or Recognition?&lt;/a&gt; (co-authored with Axel Honneth), proposes a two-dimensional theory of justice in which economic redistribution and cultural recognition are distinct, irreducible axes. Her redistribution and recognition map directly onto the money and recognition axes described here.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2181925726614530615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/2181925726614530615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2181925726614530615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2181925726614530615'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/money-and-prestige-two-axes-of.html' title='Money and Recognition: The Two Axes of Compensation'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5635617676266137318</id><published>2026-07-11T21:24:03.370+00:00</published><updated>2026-07-11T21:45:42.468+00:00</updated><title type='text'>Screen Time extensions are Intermittent Reinforcement</title><content type='html'>&lt;p&gt;(&lt;i&gt;The following observation/structure is mine but the text/references came from &lt;a href=&quot;https://help.kagi.com/kagi/ai/kagi-research.html&quot;&gt;Kagi&#39;s Research Assistant&lt;/a&gt; per &lt;a href=&quot;https://assistant.kagi.com/share/90c37524-7c9a-422e-be16-e3e13d8dd434&quot;&gt;this specific prompting&lt;/a&gt;.&lt;/i&gt;)&lt;/p&gt;

&lt;p&gt;Your child&#39;s iPhone or iPad locks. They look up at you. &quot;Can I just have a little more time?&quot;&lt;/p&gt;

  &lt;p&gt;You say yes. Or maybe no. Next time, you say the opposite. It feels like parenting. It isn&#39;t. It is one of the most powerful addiction triggers in psychology, and Apple has built it directly into Screen Time.&lt;/p&gt;

  &lt;p&gt;Psychologists call it intermittent reinforcement. The concept is simple. When a behavior is rewarded sometimes, but not always, that behavior becomes more persistent, not less. The uncertainty is the point. As one introduction to the subject puts it, &quot;unpredictability can create a stronger association between the behavior and the reward, making it more compelling and often more difficult to extinguish.&quot; &lt;a href=&quot;#ref1&quot;&gt;[1]&lt;/a&gt; This is why slot machines work. You keep pulling the lever because this time might be the one. The reward doesn&#39;t have to come often. It just has to come sometimes.&lt;/p&gt;

  &lt;p&gt;Apple&#39;s Screen Time feature is marketed as a parental control tool. It lets parents set daily limits on how long a child can use an app or a device. When a child hits that limit, the iPhone or iPad locks. Apple describes what happens next on its own child safety page: the child &quot;can ask parents for more time.&quot; &lt;a href=&quot;#ref2&quot;&gt;[2]&lt;/a&gt; CNET, reviewing the feature approvingly, puts it plainly: &quot;your child can send a request for more time if more time is needed.&quot; &lt;a href=&quot;#ref3&quot;&gt;[3]&lt;/a&gt; The parent then decides. Yes, no, or no answer at all. The child never knows which it will be.&lt;/p&gt;

  &lt;p&gt;That uncertainty is not a minor flaw. It is the mechanism. The behavior is using the phone until the limit hits, then sending the request. The reward is more screen time. The schedule is unpredictable. That is a textbook variable-ratio reinforcement schedule. It is the same structure that makes gambling compulsive. &lt;a href=&quot;#ref1&quot;&gt;[1]&lt;/a&gt; The child is not being taught that the phone has limits. The child is being taught that the phone has a lever. Pull it enough times and it pays out. The parent, intending to set a boundary, has instead become the slot machine.&lt;/p&gt;

  &lt;p&gt;The fix is not complicated. Set the limit. Hold it. Every time. No exceptions. A limit that bends is not a limit. It is a reward on a variable schedule. The parent who always says no to extension requests is not being cruel. They are being consistent. And consistency is the one thing that intermittent reinforcement cannot survive. &lt;a href=&quot;#ref1&quot;&gt;[1]&lt;/a&gt; Your child does not need more time on their phone. They need a parent who means what they say. Do not use time extensions.&lt;/p&gt;

    &lt;h2&gt;References&lt;/h2&gt;
    &lt;ol&gt;
      &lt;li id=&quot;ref1&quot;&gt;&quot;The Power of Intermittent Reinforcement in Psychology.&quot; &lt;em&gt;Unplugged Psych.&lt;/em&gt; &lt;a href=&quot;https://www.unpluggedpsych.com/the-power-of-intermittent-reinforcement-in-psychology/&quot;&gt;https://www.unpluggedpsych.com/the-power-of-intermittent-reinforcement-in-psychology/&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;ref2&quot;&gt;&quot;Child Safety.&quot; &lt;em&gt;Apple.&lt;/em&gt; &lt;a href=&quot;https://www.apple.com/child-safety/&quot;&gt;https://www.apple.com/child-safety/&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;ref3&quot;&gt;&quot;Apple&#39;s Screen Time Feature Saves Parents from Being the Bad Guy.&quot; &lt;em&gt;CNET.&lt;/em&gt; &lt;a href=&quot;https://www.cnet.com/tech/services-and-software/apples-screen-time-feature-saves-parents-from-being-the-bad-guy/&quot;&gt;https://www.cnet.com/tech/services-and-software/apples-screen-time-feature-saves-parents-from-being-the-bad-guy/&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5635617676266137318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5635617676266137318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5635617676266137318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5635617676266137318'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/do-not-use-screen-time-extensions.html' title='Screen Time extensions are Intermittent Reinforcement'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1349018143229378028</id><published>2026-07-04T18:07:22.755+00:00</published><updated>2026-07-04T18:07:51.110+00:00</updated><title type='text'>Tinkering on old projects</title><content type='html'>&lt;p&gt;
  Over the past year I&#39;ve dusted off several projects hosted at &lt;a href=&quot;https://github.com/RhysU/&quot;&gt;https://github.com/RhysU/&lt;/a&gt;:
&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;&lt;a href=&quot;https://rhysu.github.io/ar/&quot;&gt;RhysU/ar&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Autoregressive process modeling tools in header-only C++.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://rhysu.github.io/ESIO/&quot;&gt;RhysU/ESIO&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Parallel-HDF5 library for high-throughput I/O of structured turbulence simulation data.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://rhysu.github.io/suzerain/&quot;&gt;RhysU/suzerain&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Spectral, direct numerical simulation of the compressible Navier-Stokes equations for turbulence research.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/c99sh/blob/master/README.md&quot;&gt;RhysU/c99sh&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Shebang interpreter that runs single C99, C11, and C++ files with rcfile support.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/blob/master/README.md&quot;&gt;RhysU/jobserver&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Nestable Python jobserver with thread-safe futures, callbacks, and type hints.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/droll/blob/master/README.md&quot;&gt;RhysU/droll&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Command-line implementation of the Dungeon Roll dice game.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/tuna/blob/master/README.rst&quot;&gt;RhysU/tuna&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Lightweight autotuner that picks the fastest among interchangeable code chunks at runtime.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/war/&quot;&gt;RhysU/war&lt;/a&gt;&lt;/dt&gt;
  &lt;dd&gt;Simulation of the card game War.&lt;/dd&gt;
&lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1349018143229378028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/1349018143229378028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1349018143229378028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1349018143229378028'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/07/tinkering-on-old-projects.html' title='Tinkering on old projects'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-289532781242608024</id><published>2026-06-30T14:59:38.693+00:00</published><updated>2026-06-30T15:03:37.400+00:00</updated><title type='text'>Underling</title><content type='html'>&lt;p&gt;Thirteen years ago, while working on the dissertation, I put together a 3D pencil transform library atop FFTW MPI called &lt;a href=&quot;https://github.com/RhysU/underling&quot;&gt;underling&lt;/a&gt;.  It looked great in isolation.  It never integrated correctly with my dissertation code.  I eventually ran away because spending time on it wasn&#39;t time spend graduating&lt;/p&gt;

&lt;p&gt;In the last couple of days I learned that there was no problem with the library from a correctness perspective.  Instead, the mysterious problem was &lt;a href=&quot;https://github.com/RhysU/suzerain/issues/11&quot;&gt;MKL exposes an incomplete FFTW implementation that simply returns NULL for a lot of methods&lt;/a&gt;.  After some linking tinkering in &lt;a href=&quot;https://github.com/RhysU/suzerain/&quot;&gt;my dissertation&#39;s primary codebase&lt;/a&gt;, my little pencil decomposition library snapped right into place.&lt;/p&gt;

&lt;p&gt;This is both immensely satisfying (it worked after all!) and frustratingly painful (would have loved to benchmark/publish during the grad school days!).  Alas.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/289532781242608024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/289532781242608024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/289532781242608024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/289532781242608024'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/06/underling.html' title='Underling'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3880591787829793475</id><published>2026-06-28T22:43:14.300+00:00</published><updated>2026-06-28T22:43:14.300+00:00</updated><title type='text'>Two Sons</title><content type='html'>&lt;p&gt;&lt;i&gt;Written back in August 2020&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;I have two different sons. However, at the West End Suprette each one chose the same Häagen-Dazs ice cream bar. Something with dark chocolate. I chose a Nestle Crunch ice cream bar from another part of the freezer. I paid while they continuously touched things that I asked them not to touch.&lt;/p&gt;

&lt;p&gt;We three walked a block south to a tiny park, Septuagesimo Uno, and plunked ourselves on some benches. I handed the Häagen-Dazs bars, which came boxed-then-wrapped, to the boys. They tore open the boxes but the wrappers stymied them. I chuckled and wondered if, sufficiently motivated, they&#39;d get the packaging open by themselves. They endeavored.&lt;/p&gt;

&lt;p&gt;I opened my Crunch bar, lifted it by the popsicle stick, caught half a bite, and the whole bar fell away from the stick and onto the nasty city ground. Evidently the Crunch bar had passed its days in a warmer freezer spot. The old Eddie Murphy ice cream man skit, where a kid loses a whole cone, ran through my head while I debated if anything could be salvaged. My wife would rightly kill me if she heard I taught the kids that food could be eaten off the nasty city ground. And the kids would certainly tell her. I sighed, shook my head, and then looked up into two pairs of wide eyes.&lt;/p&gt;

&lt;p&gt;Each boy gazed into my disappointed face while still ineffectively fumbling with a wrapper. I got out “Too bad” before twice “Dad, would you please help me open this?” arrived. I held out my hand, the little one handed me his package, I opened it, and I handed back an unmelted ice cream bar. A pause, then into the mouth. I held out my hand, the bigger one handed me his package, I opened it without looking, and I passed back a second bar. Turning down again, I couldn&#39;t resist a tiny bit of the chocolate coating. Perhaps, adequately distracted, the kids wouldn&#39;t report me to their mother.&lt;/p&gt;

&lt;p&gt;“Dad, would you like some of mine?” spoken softly startled me. A dark chocolate Häagen-Dazs bar floated into my gaze attached to a popsicle stick attached to an outstretched arm attached to my nine-year-old son. He had offered me his very first bite. I choked up briefly, politely declined, told him how kind that was, and hugged the boy. He blinked, stepped back, and then launched into his bar.&lt;/p&gt;

&lt;p&gt;Fortunately, neither kid made so much of a mess that their not-yet-broken tendency to wipe their mouths on their shirts didn&#39;t solve said mess. I collected then threw away the two boxes, three wrappers, and three sticks. Starting home, I hugged the big one again. He ran ahead maybe twenty feet.&lt;/p&gt;

&lt;p&gt;The six-year-old generally lags behind me on the street. Now, however, he kept pace as we walked in silence. Halfway home he says “Dad, I would have offered you mine but I knew you wouldn&#39;t eat it so I didn&#39;t offer it.” And I tell him thank you and I hug him too. Quickly thereafter, we enter our building lobby and call the elevator.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3880591787829793475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3880591787829793475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3880591787829793475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3880591787829793475'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/06/two-sons.html' title='Two Sons'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7574410571211706444</id><published>2026-06-26T20:22:40.698+00:00</published><updated>2026-06-26T20:23:24.709+00:00</updated><title type='text'>The Greatest Skit in the World</title><content type='html'>&lt;p&gt;Inspired by &lt;a href=&quot;https://en.wikipedia.org/wiki/Tribute_(song)&quot;&gt;&quot;Tribute&quot; by Tenacious D&lt;/a&gt; and another meta-bench skit. Arrived at through prompting and re-prompting Claude until it cried...&lt;/p&gt;

&lt;p&gt;A Campfire Skit for 5 Scouts (~2 minutes)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No props. None. That’s the whole joke.&lt;/strong&gt; Play it big.
The crowd should get the ending long before the characters do.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;cast&quot;&gt;CAST&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DIRECTOR&lt;/strong&gt; — the Camp Director. Gruff.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SCOUT 1&lt;/strong&gt; — the leader. Certain. Wrong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SCOUT 2&lt;/strong&gt; — the loud one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SCOUT 3&lt;/strong&gt; — small, nervous. Keeps blurting the right
answer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SCOUT 4&lt;/strong&gt; — eager. Quick to strike a pose.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-skit&quot;&gt;THE SKIT&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(The FOUR SCOUTS stand in a row, in order 1–2–3–4. The DIRECTOR
storms in.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DIRECTOR:&lt;/strong&gt; Scouts! I need a skit tonight. A GREAT
one. Or it’s latrine duty till you can vote!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 1:&lt;/strong&gt; Director… we will perform THE skit. The
greatest skit this camp has ever seen. We did it once. The Scoutmaster
&lt;em&gt;wept.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 2:&lt;/strong&gt; The whole crowd was on their feet! They
wouldn’t stop cheering!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 3:&lt;/strong&gt; &lt;em&gt;(quietly)&lt;/em&gt; A raccoon stood up and
clapped.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DIRECTOR:&lt;/strong&gt; &lt;em&gt;(arms folded)&lt;/em&gt; Then do it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 4:&lt;/strong&gt; Positions!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(All four strike a dramatic pose. They hold it. Their faces
slowly fall.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 3:&lt;/strong&gt; &lt;em&gt;(through his teeth)&lt;/em&gt; …What was
it?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 2:&lt;/strong&gt; I thought YOU remembered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 1:&lt;/strong&gt; I remember it was GREAT. I don’t remember
what it &lt;em&gt;was.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 2:&lt;/strong&gt; &lt;em&gt;(flat)&lt;/em&gt; There were no props. That
was the whole thing. We had &lt;em&gt;nothing.&lt;/em&gt; &lt;em&gt;(pregnant silence)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DIRECTOR:&lt;/strong&gt; &lt;em&gt;(throwing up his arms)&lt;/em&gt; Nothing?!
You’re telling me the greatest skit ever was a bunch of Scouts with
NOTHING?! &lt;em&gt;(throws up his hands)&lt;/em&gt; I give up. &lt;em&gt;(walks behind
the row of Scouts and lowers himself into a seated position at bench
height — knees bent, arms crossed, sulking, perched on nothing)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 3:&lt;/strong&gt; &lt;em&gt;(brightening)&lt;/em&gt; We just… sat
down.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 2:&lt;/strong&gt; On what?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 3:&lt;/strong&gt; On the bench.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUT 2:&lt;/strong&gt; WHAT bench?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCOUTS 1, 3 &amp;amp; 4:&lt;/strong&gt; &lt;em&gt;(slow, together)&lt;/em&gt;
…Exactly.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(On the word, the DIRECTOR topples backward off the invisible
bench and crashes to the ground. Hold. Bow. Everyone runs off.)&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;performance-notes&quot;&gt;PERFORMANCE NOTES&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stand in numeric order.&lt;/strong&gt; Every handoff passes to the
Scout next to the speaker, so the focus slides down the line instead of
jumping across it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Director sells the ending.&lt;/strong&gt; He sits behind the
row on “I give up,” perched on nothing the whole time the Scouts talk —
then topples on “…Exactly.” The longer he holds the sit, the bigger the
fall.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Land “…Exactly.” big.&lt;/strong&gt; All three say it together,
dead serious, gesturing at the empty air.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Let the silence breathe&lt;/strong&gt; before the Director’s last
line.&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7574410571211706444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7574410571211706444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7574410571211706444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7574410571211706444'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/06/the-greatest-skit-in-world.html' title='The Greatest Skit in the World'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4292804151044436409</id><published>2026-06-20T05:28:34.879+00:00</published><updated>2026-06-20T05:34:09.926+00:00</updated><title type='text'>A nestable Jobserver with thread-safe futures, callbacks, and type-hinting</title><content type='html'>&lt;p&gt;I have been hacking on &lt;a href=&quot;https://github.com/rhysu/jobserver&quot;&gt;https://github.com/rhysu/jobserver&lt;/a&gt; for a long time.  Today I put the &lt;tt&gt;jobserver&lt;/tt&gt; package up on PyPi: &lt;a href=&quot;https://pypi.org/project/jobserver/&quot;&gt;https://pypi.org/project/jobserver/&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;My initial motivation was improving robustness over the process-pooling approaches that I was using back in August 2019.  I needed something where my worker tasks could SIGSEGV or SIGPIPE without my entire pool crashing.  I also needed extension hooks for a few specific applications, like advisory flocking when a worker was active and being mindful of RAM limits.&lt;/p&gt;

&lt;p&gt;It&#39;s stayed fun to intermittently hack on.  From the tag messages, you can tell I began using LLMs with this project after tag v1.12.  Some features, like &lt;tt&gt;JobserverExecutor&lt;/tt&gt;, were simply beyond my personal bandwidth before employing coding agents.  I&#39;ve tried to keep the technical quality at least as high as if I&#39;d been hand-coding.&lt;/p&gt;

&lt;p&gt;The timeline&#39;s been...&lt;/p&gt;


&lt;dl&gt;
  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.0&quot;&gt;v1.0&lt;/a&gt; &amp;mdash; 2020-02-17&lt;/dt&gt;
  &lt;dd&gt;First feature-complete release of the jobserver.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.1&quot;&gt;v1.1&lt;/a&gt; &amp;mdash; 2020-02-22&lt;/dt&gt;
  &lt;dd&gt;Added &lt;code&gt;when_done&lt;/code&gt; callbacks along with grammar and type-annotation improvements.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.2&quot;&gt;v1.2&lt;/a&gt; &amp;mdash; 2020-03-03&lt;/dt&gt;
  &lt;dd&gt;Introduced per-submission &lt;code&gt;env&lt;/code&gt; and &lt;code&gt;preexec_fn&lt;/code&gt; support, and adopted black/flake8/mypy tooling.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.3&quot;&gt;v1.3&lt;/a&gt; &amp;mdash; 2020-03-04&lt;/dt&gt;
  &lt;dd&gt;Added grandchild polling, configurable defaults, and a pluggable &lt;code&gt;sleep_fn&lt;/code&gt;.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.4&quot;&gt;v1.4&lt;/a&gt; &amp;mdash; 2020-03-09&lt;/dt&gt;
  &lt;dd&gt;Simplified both the public API and the internals.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.5&quot;&gt;v1.5&lt;/a&gt; &amp;mdash; 2020-03-10&lt;/dt&gt;
  &lt;dd&gt;Wrote the README and made assorted touch-ups.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.6&quot;&gt;v1.6&lt;/a&gt; &amp;mdash; 2020-12-18&lt;/dt&gt;
  &lt;dd&gt;Removed the sentinel push/pop at work submission, since &lt;code&gt;__getstate__&lt;/code&gt;/&lt;code&gt;__setstate__&lt;/code&gt; are now handled explicitly.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.7&quot;&gt;v1.7&lt;/a&gt; &amp;mdash; 2021-01-08&lt;/dt&gt;
  &lt;dd&gt;Exposed &lt;code&gt;reclaim_resources&lt;/code&gt; on the public API.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.8&quot;&gt;v1.8&lt;/a&gt; &amp;mdash; 2021-02-16&lt;/dt&gt;
  &lt;dd&gt;Added support for CPython 3.9.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.9&quot;&gt;v1.9&lt;/a&gt; &amp;mdash; 2021-03-18&lt;/dt&gt;
  &lt;dd&gt;Exposed &lt;code&gt;MinimalQueue&lt;/code&gt; and improved test robustness.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.10&quot;&gt;v1.10&lt;/a&gt; &amp;mdash; 2022-04-06&lt;/dt&gt;
  &lt;dd&gt;Added Python 3.10 support and the ability to unset environment variables.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.11&quot;&gt;v1.11&lt;/a&gt; &amp;mdash; 2024-09-29&lt;/dt&gt;
  &lt;dd&gt;Confirmed Python 3.11 and 3.12 work correctly.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.12&quot;&gt;v1.12&lt;/a&gt; &amp;mdash; 2026-01-01&lt;/dt&gt;
  &lt;dd&gt;Confirmed Python 3.13 works correctly.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v1.13&quot;&gt;v1.13&lt;/a&gt; &amp;mdash; 2026-03-28&lt;/dt&gt;
  &lt;dd&gt;Added &lt;code&gt;JobserverExecutor&lt;/code&gt; (a &lt;code&gt;concurrent.futures.Executor&lt;/code&gt; wrapper), &lt;code&gt;Jobserver.map()&lt;/code&gt;, and signal-based cancellation via &lt;code&gt;Future.done(..., signal=...)&lt;/code&gt;. Also hoisted submit defaults, named worker processes, fixed re-entrant &lt;code&gt;CallbackRaised&lt;/code&gt; double-wrapping, and shipped nine worked examples.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v2.0&quot;&gt;v2.0&lt;/a&gt; &amp;mdash; 2026-03-30&lt;/dt&gt;
  &lt;dd&gt;Added context-manager support to &lt;code&gt;MinimalQueue&lt;/code&gt; and &lt;code&gt;Jobserver&lt;/code&gt;, rewrote &lt;code&gt;reclaim_resources()&lt;/code&gt; as O(k) using &lt;code&gt;wait()&lt;/code&gt;, and added &lt;code&gt;repr()&lt;/code&gt;. Fixed a &lt;code&gt;Future.wait()&lt;/code&gt; sentinel/waitpid race and added &lt;code&gt;Future.done()&lt;/code&gt; as a &lt;code&gt;wait(timeout=0)&lt;/code&gt; shorthand.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v2.1&quot;&gt;v2.1&lt;/a&gt; &amp;mdash; 2026-03-31&lt;/dt&gt;
  &lt;dd&gt;Corrected timing, resource-leak, and type-safety issues found after v2.0, including a &lt;code&gt;py.typed&lt;/code&gt; marker, a fixed queue-timeout overrun, and event-driven dispatcher polling. Replaced asserts at public boundaries with explicit &lt;code&gt;TypeError&lt;/code&gt;/&lt;code&gt;ValueError&lt;/code&gt;.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v2.2&quot;&gt;v2.2&lt;/a&gt; &amp;mdash; 2026-04-01&lt;/dt&gt;
  &lt;dd&gt;&lt;code&gt;JobserverExecutor&lt;/code&gt; can now own a default-constructed &lt;code&gt;Jobserver&lt;/code&gt; automatically, making it drop-in, and slot acquisition became O(k) via a persistent selector. Also let &lt;code&gt;preexec_fn&lt;/code&gt; return a context manager, added resource/callback warnings, and generalized nesting examples across all start methods.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v2.3&quot;&gt;v2.3&lt;/a&gt; &amp;mdash; 2026-06-01&lt;/dt&gt;
  &lt;dd&gt;Child tracebacks now survive &lt;code&gt;Future.result()&lt;/code&gt; via &lt;code&gt;__cause__&lt;/code&gt;, escaping &lt;code&gt;BaseException&lt;/code&gt;s became diagnosable, and &lt;code&gt;concurrent.futures.Future.cancel()&lt;/code&gt; was wired through the executor. Many hardening fixes followed for &lt;code&gt;map()&lt;/code&gt; slot reclamation, submit/shutdown races, &lt;code&gt;MinimalQueue&lt;/code&gt;, validation, and the public API surface.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v2.4&quot;&gt;v2.4&lt;/a&gt; &amp;mdash; 2026-06-01&lt;/dt&gt;
  &lt;dd&gt;Fixed nested fan-out under the fork start method via a lazy per-process selector that rebuilds when the PID changes. Also deduplicated pickle-error handling and the &lt;code&gt;env&lt;/code&gt; type signature, and added a stdlib-only benchmark harness under &lt;code&gt;draft/&lt;/code&gt;.&lt;/dd&gt;

  &lt;dt&gt;&lt;a href=&quot;https://github.com/RhysU/jobserver/releases/tag/v3.0&quot;&gt;v3.0&lt;/a&gt; &amp;mdash; 2026-06-20&lt;/dt&gt;
  &lt;dd&gt;Major API redesign: &lt;code&gt;Jobserver&lt;/code&gt; became a thin handle over a shared, reference-counted &lt;code&gt;Resources&lt;/code&gt; object, submission controls moved off &lt;code&gt;submit()&lt;/code&gt;/&lt;code&gt;map()&lt;/code&gt; into sibling handles (&lt;code&gt;revise_env()&lt;/code&gt;, &lt;code&gt;replace_preexec()&lt;/code&gt;, &lt;code&gt;replace_sleep()&lt;/code&gt;), and &lt;code&gt;SubmissionDied&lt;/code&gt; was renamed &lt;code&gt;LostResult&lt;/code&gt;. Added a &lt;code&gt;__version__&lt;/code&gt;, eager timeout validation, a redesigned queue hierarchy, suppressed worker traceback noise, hardened deserialization, and modernized packaging, docs, tests, and examples.&lt;/dd&gt;
&lt;/dl&gt;
  
 </content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4292804151044436409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4292804151044436409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4292804151044436409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4292804151044436409'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/06/a-nestable-jobserver-with-thread-safe.html' title='A nestable Jobserver with thread-safe futures, callbacks, and type-hinting'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-779159791044429704</id><published>2026-05-26T18:43:09.538+00:00</published><updated>2026-05-26T18:43:09.538+00:00</updated><title type='text'>To differentiate unsuccessful from successful experiments</title><content type='html'>&lt;p&gt;I chased down this quote by &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_H._Goddard&quot;&gt;Robert H. Goddard&lt;/a&gt; via &lt;a href=&quot;https://database.goddard.microsearch.net&quot;&gt;The Goddard Papers Database&lt;/a&gt; .  The original context of the letter, often omitted when using the quote, makes Goddard&#39;s words all the more delightful:&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
R. H. Goddard&lt;/a&gt; to F. T.&lt;b&gt;*&lt;/b&gt;, Jeffersonville, Indiana&lt;br/&gt;
Roswell, February 5, 1942
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
It is not a simple matter to differentiate unsuccessful from successful experiments, since most work that is finally successful is the result of a series of unsuccessful tests in which difficulties are gradually eliminated...
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
&lt;b&gt;*&lt;/b&gt;This was in response to a young experimenter who complained that many of his tests had been unsuccessful
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;
SOURCE: Goddard, Robert H. The Papers of Robert H. Goddard. Edited by Esther C. Goddard and G. Edward Pendray. Vol. 3, 1941–1945: JATO and Variable Thrust for the Military. New York: McGraw-Hill, 1970, page 1453.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/779159791044429704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/779159791044429704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/779159791044429704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/779159791044429704'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/05/to-differentiate-unsuccessful-from.html' title='To differentiate unsuccessful from successful experiments'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1688235021879642208</id><published>2026-05-01T20:16:15.662+00:00</published><updated>2026-05-01T20:16:15.662+00:00</updated><title type='text'>Scam Likely</title><content type='html'>&lt;p&gt;
&lt;i&gt;A first person temporal tragedy to the tune of &quot;Let It Be&quot;...&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Verse 1]&lt;/b&gt;&lt;br/&gt;
When I call during time troubles&lt;br/&gt;
You won&#39;t answer though I plea&lt;br/&gt;
Call shows &quot;Scam Likely&quot;&lt;br/&gt;
Scam Likely&lt;br/&gt;
And in my hour of darkness&lt;br/&gt;
Past you won&#39;t pick up for me&lt;br/&gt;
Phone shows &quot;Scam Likely&quot;&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Chorus]&lt;/b&gt;&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Need to change history&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Verse 2]&lt;/b&gt;&lt;br/&gt;
And when my parents never meeting&lt;br/&gt;
Means I&#39;ll cease to ever be&lt;br/&gt;
Still phones show &quot;Scam Likely&quot;&lt;br/&gt;
Scam Likely&lt;br/&gt;
For historic missed connection fears&lt;br/&gt;
Haunt me that no one will ever see&lt;br/&gt;
Past the words &quot;Scam Likely&quot;&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Chorus]&lt;/b&gt;&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Nah, please Lord make them answer&lt;br/&gt;
Scam Likely&lt;br/&gt;
Can&#39;t I be?! Scam Likely&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Insert myself in history&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Instrumental Break]&lt;/b&gt;&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Guitar Solo]&lt;/b&gt;&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Chorus]&lt;/b&gt;&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Scam Likely, yeah, Scam Likely&lt;br/&gt;
Need to change history&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Verse 3]&lt;/b&gt;&lt;br/&gt;
And when the timeline&#39;s getting cloudy&lt;br/&gt;
There&#39;s hope shining yet in future me&lt;br/&gt;
Light more digits tomorrow&lt;br/&gt;
Scam Likely&lt;br/&gt;
Frantically dial numbers&lt;br/&gt;
Every phone rejects my plea&lt;br/&gt;
All show &quot;Scam Likely&quot;&lt;br/&gt;
Scam Likely, yeah&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;[Outro]&lt;/b&gt;&lt;br/&gt;
Scam Likely, Scam Likely&lt;br/&gt;
Scam Likely, nah, Scam Likely&lt;br/&gt;
Oh, there must be an answer&lt;br/&gt;
Scam Likely&lt;br/&gt;
Can&#39;t I be?! Scam Likely&lt;br/&gt;
Scam Likely, yeah, Scam Likely&lt;br/&gt;
Oh, there must be an answer&lt;br/&gt;
Scam Likely&lt;br/&gt;
Might not be? Scam Likely&lt;br/&gt;
Scam Likely, nah, Scam Likely&lt;br/&gt;
Insert myself in history&lt;br/&gt;
Scam Likely&lt;br/&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1688235021879642208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/1688235021879642208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1688235021879642208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1688235021879642208'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/05/scam-likely.html' title='Scam Likely'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3604963837723524672</id><published>2026-04-13T16:51:00.005+00:00</published><updated>2026-04-13T16:59:14.194+00:00</updated><title type='text'>Tidbits from the World</title><content type='html'>&lt;p&gt;&lt;b&gt;Just quotes, etc. where I frequently want the original source… &lt;/b&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://jdebp.info/FGA/legacy-is-not-a-pejorative.html&quot;&gt;“Legacy” is not a pejorative.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“Invert, always, invert”&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.anup.io/invert-always-invert/&quot;&gt;Jacobi originally&lt;/a&gt; but &lt;a href=&quot;https://fs.blog/inversion/?ref=anup.io&quot;&gt;popularized by Munger&lt;/a&gt; : “...it is in the nature of things that many hard problems are best solved when they are addressed backward”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Algorithm for inversion:&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Define the problem - what is it that  you&#39;re trying to achieve?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Invert it - what would guarantee the failure to achieve this outcome?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Finally, consider solutions to avoid this failure&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;“[Not naming software tools] is actually a lesson that originates from the early days of Call of Duty at IW. From what I’m told, IW never named their engine, because any time you name something it becomes a bit more of a thing, and you start working for it. And they were a studio making games, the game is the thing. Nothing else.” [&lt;a href=&quot;http://c0de517e.blogspot.com/2019/03/what-i-learned-at-activision.html?m=1&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“You have to do basic science on your libraries to see how they work…” [&lt;a href=&quot;https://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two&quot;&gt;Sussman as reported by Wingo&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“A pointer is an integer with a shiv” [&lt;a href=&quot;http://lambda-the-ultimate.org/node/5553&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Optimal stopping problems are solved with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Odds_algorithm&quot;&gt;odds algorithm&lt;/a&gt;, e.g. the  &lt;a href=&quot;https://en.wikipedia.org/wiki/Secretary_problem&quot;&gt;classical secretary problem&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“The Statistics of Sharpe Ratios” by Andrew Lo [&lt;a href=&quot;https://www.tandfonline.com/doi/abs/10.2469/faj.v58.n4.2453&quot;&gt;paper&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“You are in a drawdown.  When should you start worrying?” [&lt;a href=&quot;https://arxiv.org/abs/1707.01457&quot;&gt;paper&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;NIST has several excellent references:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://xlinux.nist.gov/dads/&quot;&gt;Dictionary of Algorithms and Data Structures&lt;/a&gt;  (DADS), a dictionary of algorithms, algorithmic techniques, data structures, archetypal problems, etc&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.itl.nist.gov/div898/handbook/index.htm&quot;&gt;Engineering Statistics Handbook&lt;/a&gt; with chapters Explore, Measure, Characterize, Model, Improve, Monitor, Compare, and Reliability&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;“If you have a procedure with 10 parameters, you probably missed some.” [&lt;a href=&quot;http://pu.inf.uni-tuebingen.de/users/klaeren/epigrams.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Driscoll Kraay Standard Errors are &lt;a href=&quot;https://fastercapital.com/content/Driscoll-Kraay-Standard-Errors--Spatial-Dimensions--Driscoll-Kraay-Standard-Errors-for-Robust-Inference.html&quot;&gt;robust to both cross-sectional and temporal dependence&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The  &lt;a href=&quot;https://python-graph-gallery.com/all-charts/&quot;&gt;Python Graph Gallery&lt;/a&gt; is a visual reference over many graphs along with the source code to produce them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Total_least_squares&quot;&gt;Total least squares&lt;/a&gt;  minimizes errors on both dependent and independent variables.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bottom Line Up Front (BLUF) writing [&lt;a href=&quot;https://hbr.org/2016/11/how-to-write-email-with-military-precision&quot;&gt;HBR&lt;/a&gt;,  &lt;a href=&quot;https://en.wikipedia.org/wiki/BLUF_(communication)&quot;&gt;Wikipedia&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Dennis Ritchie: “Our habit of trying to document bugs and limitations visibly was enormously useful to the system. As we put out each edition, the presence of these sections shamed us into fixing innumerable things rather than exhibiting them in public. I remember clearly adding or editing many of these sections, then saying to myself &#39;I can&#39;t write this,&#39; and fixing the code instead.” [&lt;a href=&quot;http://www.collyer.net/who/geoff/history.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.listendata.com/2018/03/regression-analysis.html&quot;&gt;A bestiary of regression variants&lt;/a&gt; , including:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Linear Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Polynomial Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Logistic Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Quantile Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ridge Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Lasso Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Elastic Net Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Principal Components Regression (PCR)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Partial Least Squares (PLS) Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Support Vector Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ordinal Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Poisson Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Negative Binomial Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Quasi Poisson Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cox Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tobit Regression&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://brunodias.dev/2021/03/19/functions-for-system-designers.html&quot;&gt;A Bestiary of Functions for Systems Designers&lt;/a&gt;  is a nice visual guide&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Karpathy blogged &lt;a href=&quot;http://karpathy.github.io/2019/04/25/recipe/&quot;&gt;A Recipe for Training Neural Networks&lt;/a&gt; :&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Become one with the data&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Set up the end-to-end training/evaluation skeleton + get dumb baselines&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Overfit, recalling &lt;a href=&quot;https://windowsontheory.org/2019/12/05/deep-double-descent/&quot;&gt;deep double descent&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Regularize&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tune&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Squeeze out the juice&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Agustin Lebron’s &lt;a href=&quot;https://www.amazon.com/Laws-Trading-Traders-Decision-Making-Everyone/dp/1119574218&quot;&gt;The Laws of Trading&lt;/a&gt; :&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Know why you are doing a trade before you trade.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You&#39;re never happy with the amount you traded.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Take only the risks you&#39;re being paid to take.  Hedge the others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Put on a risk using the most liquid instrument for that risk.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you can&#39;t explain your edge in five minutes, you don&#39;t have a very good one.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The long-term profitability of an edge is inversely proportional to how long it takes to explain it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The model expresses the edge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you think your costs are negligible relative to your edge, you&#39;re wrong about at least one of them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Just because something has never happened doesn&#39;t mean it can&#39;t.&lt;br&gt;&lt;/br&gt;Corollary: Enough people relying on something being true makes it false.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Working to align everyone&#39;s interests is time well spent.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you don&#39;t master technology and data, you&#39;re losing to someone who does.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you&#39;re not getting better, you&#39;re getting worse.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Shellhaters.org has a great &lt;a href=&quot;https://shellhaters.org/&quot;&gt;POSIX Shell and Utilities Quick Reference&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Practical SQL for Data Analysis: What you can do without Pandas [&lt;a href=&quot;https://hakibenita.com/sql-for-data-analysis&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Taguchi_methods&quot;&gt;Taguchi methods&lt;/a&gt; are statistical methods, sometimes called robust design methods, developed by Genichi Taguchi to improve the quality of manufactured goods, and more recently also applied to engineering…. See also &lt;a href=&quot;https://en.wikipedia.org/wiki/Orthogonal_array&quot;&gt;orthogonal arrays&lt;/a&gt; , &lt;a href=&quot;https://en.wikipedia.org/wiki/Optimal_experimental_design&quot;&gt;optimal experimental link&lt;/a&gt;, and notice &lt;a href=&quot;https://snl-dakota.github.io/docs/6.23.0/users/usingdakota/studytypes/designofexperiments.html&quot;&gt;Sandia’s Dakota implements many of these ideas&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prefer to change the code rather than write a workaround [&lt;a href=&quot;https://catern.com/change_code.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;By nature, bugs are found in places that you didn’t think to look [&lt;a href=&quot;https://timkellogg.me/blog/2021/01/29/cold-paths&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;A cold path is a path through the code or situation that rarely happens.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;By contrast, hot paths happen frequently. You don’t find bugs in hot paths.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bugs are always in cold paths — every bug is found in a path colder than all the paths you tested.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Don’t have cold paths and avoid fallbacks&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://tech.davis-hansson.com/p/make/&quot;&gt;Your Makefiles are wrong&lt;/a&gt; is an opinionated approach to GNU Make:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Don’t use tabs with .RECIPEPREFIX&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Always use (a recent) bash in strict mode&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Change some Make defaults, with a nice TLDR pre-amble&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Mike Acton’s Expectations of Professional Software Engineers [&lt;a href=&quot;https://adamj.eu/tech/2022/06/17/mike-actons-expectations-of-professional-software-engineers/&quot;&gt;summary&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.html&quot;&gt;Scalability! But at what COST?&lt;/a&gt; says “Big data systems may scale well, but this can often be just because they introduce a lot of overhead” and is often referred to as “The COST Paper”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.brendangregg.com/blog/2014-05-11/strace-wow-much-syscall.html&quot;&gt;strace Wow Much Syscall&lt;/a&gt; by Brendan Gregg includes useful strace  one-liners&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Richard Sutton’s &lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&quot;&gt;The Bitter Lesson&lt;/a&gt; starts “The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin….” and begins to conclude “One thing that should be learned from the bitter lesson is the great power of general purpose methods, of methods that continue to scale with increased computation even as the available computation becomes very great. The two methods that seem to scale arbitrarily in this way are search and learning.”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://rigaux.org/language-study/syntax-across-languages.html&quot;&gt;Syntax across languages&lt;/a&gt;  is a gigantic survey of language design, e.g. operators/functions/etc. The survey can often inform what some collection of users will find natural or unnatural based on their existing skills.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/higham/what-is&quot;&gt;Nick Higham’s “What Is” article series&lt;/a&gt;  gives brief descriptions of concepts in numerical analysis for upper-level undergraduates with mathematical inclinations&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://journal.stuffwithstuff.com/2016/06/16/long-names-are-long/&quot;&gt;Long names are long&lt;/a&gt; observes “identifiers that are too damn long.”&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Omit words that are obvious given a variable’s or parameter’s type&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that don’t disambiguate the name&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that are known from the surrounding context&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that don’t mean much of anything&lt;br&gt;&lt;/br&gt;(e.g. data, state, amount, value, manager, engine, object, entity, and instance)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ends with a humorous application to waffles.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://pages.gseis.ucla.edu/faculty/agre/how-to-help.html&quot;&gt;How to help someone use a computer&lt;/a&gt; : “Computer people are fine human beings, but they do a lot of harm in the ways they &quot;help&quot; other people with their computer problems….”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Common statistical tests are linear models:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://lindeloev.github.io/tests-as-linear/&quot;&gt;Exposition in R&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.georgeho.org/tests-as-linear/&quot;&gt;Exposition in Python&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/PaulVanDev/HoeffdingD&quot;&gt;Hoeffding’s test for dependence&lt;/a&gt; was proposed by Wassily Hoeffding (1948) as a test of correlation for two variables with continuous distribution functions (&lt;a href=&quot;https://en.wikipedia.org/wiki/Hoeffding%27s_independence_test&quot;&gt;wikipedia&lt;/a&gt;, &lt;a href=&quot;https://github.com/Dicklesworthstone/hoeffdings_d_explainer&quot;&gt;random blog&lt;/a&gt;,  &lt;a href=&quot;https://github.com/Dicklesworthstone/hoeffdings_d_explainer&quot;&gt;post&lt;/a&gt;). Hoeffding’s D is a nonparametric measure of the distance between the joint distribution F(x, y) and the product of marginal distributions F1(x)F2(y). The advantage of this statistic lies in the fact that it has more power to detect non-monotonic dependency structures compared to other more common measures (Pearson, Kendall, Spearman)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Data systems often fall into one of schema-on-write or schema-on-read:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Traditional databases are schema-on-write: “we can&#39;t upload data until the table is created and we can&#39;t create tables until we understand the schema of the data that will be in this table.”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Newer systems, e.g. “Big Data” is often schema-on-read, requiring all code that handles the data to understand it’s implicit schema.  Still “some level of schema design is inevitable”.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Martin Kleppmann’s book &lt;a href=&quot;https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable-dp-1098119061&quot;&gt;Designing Data-Intensive Applications&lt;/a&gt; often comes up.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://erikbern.com/2023/12/13/simple-sabotage-for-software.html&quot;&gt;Simple sabotage for software&lt;/a&gt; , taking CIA sabotage manuals for inspiration, enumerates many horrid, insidious ways to sabotage a software organization.  To do better as an organization, work to prevent even accidental sabotage.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.oilshell.org/blog/2022/02/diagrams.html&quot;&gt;The Internet Was Designed With a Narrow Waist&lt;/a&gt;:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;A narrow waist is concept, interface, or protocol that solves an interoperability problem.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Picture an hourglass with M things on one side, N on the other, and an important concept in the middle.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;It avoids O(M × N) code explosions, letting us write O(M + N) amounts of code instead.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Byte streams and text are essential narrow waists in software, particularly in distributed-systems like the Internet.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;On achieving high-level goals [&lt;a href=&quot;https://www.amazon.com/Corporate-Confidential-Secrets-Company-Know/dp/0312337361&quot;&gt;source&lt;/a&gt; pp 138-9]:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Write down your five biggest goals for the year.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pick the one that will make the biggest difference in your life.  Tackle that one first.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Write your chosen goal in the past tense as though it&#39;s already happened. This will not only tell you whether you truly want it by how you feel as you look back at it from the future, it will also help you identify (in imagined hindsight) all the critical steps it will take to get there.  Outline as many critical steps as come to mind.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Write out twenty different things you could do right now to make it happen. Really stretch your thinking in new directions to get all twenty.  Now pick the one goal that will have the greatest impact on the achievement of that goal.  Try to knock one off your list each day, or week (depending on the goal).  Keep going with twenty more, and twenty more, until the goal is achieved.  Focus on only one goal at a time, putting all your energy in that one direction.  (Trying to work on them all at once can be overwhelming and diffuses your effectiveness and focus).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thompson_sampling&quot;&gt;Thompson sampling&lt;/a&gt; is commonly used as a multi-armed bandit algorithm. &lt;a href=&quot;https://github.com/rhysu/tuna/issues/24&quot;&gt;I have personally used it&lt;/a&gt; for an older side project.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.seangoedecke.com/how-to-ship/&quot;&gt;“Shipping is a social construct within a company.”&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;There’s &lt;a href=&quot;https://github.com/forrestchang/andrej-karpathy-skills/blob/main/CLAUDE.md&quot;&gt;a CLAUDE.md containing Karpathy-inspired Claude Code guidelines&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://apenwarr.ca/log/20260316&quot;&gt;Every layer of review makes you 10x slower&lt;/a&gt; by he of &lt;a href=&quot;https://github.com/apenwarr/redo&quot;&gt;apenwarr/redo&lt;/a&gt; fame.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3604963837723524672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3604963837723524672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3604963837723524672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3604963837723524672'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/04/tidbits-from-world.html' title='Tidbits from the World'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1642508092477155211</id><published>2018-02-04T16:20:00.000+00:00</published><updated>2018-02-04T16:20:17.895+00:00</updated><title type='text'>Randomized addition worksheets for kiddos using Bash Pipelines</title><content type='html'>Following up on &lt;a href=&quot;http://agentzlerich.blogspot.com/2017/06/randomized-reading-lists-for-kiddos.html&quot;&gt;a prior randomized worksheet for reading&lt;/a&gt;, here&#39;s a way to generate as many simple addition worksheets as you care to print:

&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
# Print a US letter page of addition problems using numbers 0 through 10.
(
    for i in $(seq 1 26); do
        printf &quot;%2d %s %2d = \n&quot; &quot;$((RANDOM % 11))&quot; &quot;+&quot; &quot;$((RANDOM % 11))&quot;
    done
) \
| column -nxc 36 \
| sed G \
| head -n -1 \
| a2ps -1 --chars-per-line=32 --no-header --borders=no
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1642508092477155211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/1642508092477155211' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1642508092477155211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1642508092477155211'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2018/02/randomized-addition-worksheets-for.html' title='Randomized addition worksheets for kiddos using Bash Pipelines'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4899576732894492091</id><published>2017-06-03T13:09:00.000+00:00</published><updated>2017-06-03T18:24:35.427+00:00</updated><title type='text'>Randomized Reading Lists for Kiddos using Bash Pipelines</title><content type='html'>&lt;p&gt;
Our kiddo is very good at memorizing stories and word sequences but needs to work on looking at the letters on the page.  Simple bash pipelines can produce useful offline learning materials.
&lt;/p&gt;

&lt;p&gt;
For example, print a randomized word list from inline story text for a book your kid loves:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
tr -d &#39;&quot;,!.-&#39; &amp;lt;&amp;lt; EOF                          \
    | tr -s &#39; &#39; &#39;\n&#39;                          \
    | sed &#39;/^$/d&#39;                             \
    | sort -u                                 \
    | shuf                                    \
    | column -c 64                            \
    | nl                                      \
    | a2ps -1 --chars-per-line=70 --no-header

The night Max wore his wolf suit and made mischief of one kind
and another
his mother called him &quot;WILD THING!&quot;
...

EOF
&lt;/pre&gt;
Run the script once to produce the word list.  Print the source once to have the picture-less story.  Carry both in your pocket on the plane/train/etc.  After some work on the word list, the kid should be encouraged by &quot;rediscovering&quot; the picture-less story he knows using the sight words he&#39;s just practiced.  In theory.  Still working on the practice.
&lt;/p&gt;

&lt;p&gt;
Another example, print a randomized list of kindergarten sight words:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
sort -u &amp;lt;&amp;lt;EOF | shuf | column -c 64 | nl | a2ps -1 --chars-per-line=70 --no-header
a
about
after
again
all
always
am
an
and
any
are
as
ask
at
away
back
ball
be
beautiful
because
been
begin
best
big
but
by
came
can
come
could
couldn&#39;t
day
did
do
does
don&#39;t
down
each
easy
eat
either
enough
family
find
for
friend
from
fun
get
girl
go
goes
going
got
great
had
has
have
he
her
here
high
him
his
home
house
how
I
idea
if
I&#39;m
in
into
is
it
jump
just
know
last
let
like
little
look
love
make
man
me
might
mom
more
mother
much
my
never
next
no
not
now
of
often
on
or
our
out
over
play
pretty
probably
put
ran
read
ready
run
said
same
sat
saw
say
school
see
she
should
sit
so
soon
special
such
suddenly
take
than
that
the
their
them
themselves
then
there
they
they&#39;re
things
think
this
thought
three
through
to
today
together
too
two
under
until
up
us
very
wait
walk
want
was
we
went
were
what
when
where
while
who
will
with
without
yes
you
your
you&#39;re
yourself
EOF
&lt;/pre&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4899576732894492091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4899576732894492091' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4899576732894492091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4899576732894492091'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2017/06/randomized-reading-lists-for-kiddos.html' title='Randomized Reading Lists for Kiddos using Bash Pipelines'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7252163713573378380</id><published>2016-12-11T18:57:00.005+00:00</published><updated>2016-12-11T18:57:55.060+00:00</updated><title type='text'>Travis-CI config for both recent(ish) gcc and clang</title><content type='html'>On account of the age of Travis-CI&#39;s build images (I hear) getting a new-ish C++ compiler going is futzy.  After &lt;a href=&quot;https://stackoverflow.com/questions/39682792/travis-ci-build-matrix-contains-spurious-entry&quot;&gt;much futzing&lt;/a&gt;, the following .travis.yml file works for an &lt;a href=&quot;https://github.com/RhysU/descendu&quot;&gt;autoconfiscated project&lt;/a&gt;:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
language: generic
script: ./bootstrap &amp;&amp; ./configure &amp;&amp; make all &amp;&amp; make check &amp;&amp; make distcheck
matrix:
  include:
    - os: linux
      env: COMPILER_NAME=gcc CXX=g++-5 CC=gcc-5
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - autotools-dev
            - g++-5
    - os: linux
      env: COMPILER_NAME=clang CXX=clang++-3.8 CC=clang-3.8
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.8
          packages:
            - autotools-dev
            - clang-3.8
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7252163713573378380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7252163713573378380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7252163713573378380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7252163713573378380'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2016/12/travis-ci-config-for-both-recentish-gcc.html' title='Travis-CI config for both recent(ish) gcc and clang'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8607376496592187421</id><published>2014-10-28T12:10:00.002+00:00</published><updated>2014-10-28T12:12:00.381+00:00</updated><title type='text'>Dissertation appeareth</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s1600/OrionTPSScale_small.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s320/OrionTPSScale_small.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
My dissertation, &lt;a href=&quot;http://repositories.lib.utexas.edu/handle/2152/26886&quot;&gt;Reducing turbulence- and transition-driven uncertainty in aerothermodynamic heating predictions for blunt-bodied reentry vehicles&lt;/a&gt;, appeared online today in the &lt;a href=&quot;https://www.lib.utexas.edu/&quot;&gt;University of Texas Library system&lt;/a&gt;.  Bonus points if you find the typo in the abstract that I accidentally inserted during my final day of editing.  Triple word score if you browse through the introductory chapter and ask me questions&amp;mdash;my hope is that it is fairly accessible.
&lt;/p&gt;

&lt;p&gt;
Content from Chapter 6, Characteristics of the Homogenized Boundary Layers at Atmospheric Reentry-like Conditions, &lt;a href=&quot;http://meeting.aps.org/Meeting/DFD14/Session/L26.4&quot;&gt;will be presented&lt;/a&gt; at &lt;a href=&quot;http://apsdfd2014.stanford.edu/&quot;&gt;APS DFD 2014&lt;/a&gt; at Stanford in a few weeks.  Man, I need to finish those slides...
&lt;/p&gt;

&lt;p&gt;
Very cool is that, as of today, &lt;a href=&quot;http://www.nasa.gov/exploration/systems/mpcv/index.html&quot;&gt;NASA is testing the Orion MPCV on December 4th&lt;/a&gt;.  That means soon they&#39;ll be some real flight data against which my simulation-based predictions found in Chapter 7, Detecting Turbulence-Sustaining Regions on Blunt-Bodied Reentry Vehicles, can be compared.
&lt;/p&gt;

&lt;p&gt;
Happily, the dissertation source code attachments appear to have been preserved too.  That said, the GitHub &lt;a href=&quot;https://github.com/RhysU/suzerain&quot;&gt;suzerain&lt;/a&gt; and &lt;a href=&quot;https://github.com/RhysU/ESIO&quot;&gt;ESIO&lt;/a&gt; repositories should be preferred over the electronic dissertation attachments for anything other than sleuthing out precisely what I implemented in my thesis.  I&#39;ve already written about the &lt;a href=&quot;http://agentzlerich.blogspot.com/2014/08/data-sets-from-my-dissertation.html&quot;&gt;openly available data sets&lt;/a&gt; generated for the work.
&lt;/p&gt;

&lt;p&gt;
(Image courtesy of NASA)
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8607376496592187421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8607376496592187421' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8607376496592187421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8607376496592187421'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/10/dissertation-appeareth.html' title='Dissertation appeareth'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s72-c/OrionTPSScale_small.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8978519529019574007</id><published>2014-08-11T15:03:00.003+00:00</published><updated>2014-08-11T15:26:36.451+00:00</updated><title type='text'>Data sets from my dissertation</title><content type='html'>&lt;p&gt;
This past week I successfully defended my doctoral dissertation.  Two of the three direct numerical simulation data sets I generated during my thesis research are online at &lt;a href=&quot;http://turbulence.ices.utexas.edu/&quot;&gt;turbulence.ices.utexas.edu&lt;/a&gt; if anyone&#39;s interested:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://turbulence.ices.utexas.edu/coleman&quot;&gt;Sub- through Supersonic Coleman-like Channels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://turbulence.ices.utexas.edu/mpcvissturb&quot;&gt;Spatiotemporally Homogenized Boundary Layers at Atmospheric Reentry-like Conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8978519529019574007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8978519529019574007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8978519529019574007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8978519529019574007'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/08/data-sets-from-my-dissertation.html' title='Data sets from my dissertation'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2164240599560758785</id><published>2014-06-05T18:46:00.003+00:00</published><updated>2014-06-05T18:46:55.863+00:00</updated><title type='text'>Sub- through Supersonic Coleman-like Channels</title><content type='html'>&lt;p&gt;
I finally cleaned up my &lt;a href=&quot;http://turbulence.ices.utexas.edu/coleman/&quot;&gt;compressible, turbulent channel&lt;/a&gt; results computed with my thesis code, &lt;a href=&quot;https://github.com/RhysU/suzerain&quot;&gt;Suzerain&lt;/a&gt;.  The dataset includes instantaneous planar averages of 180+ quantities collected &lt;em&gt;in situ&lt;/em&gt; during the production runs along with &lt;a href=&quot;https://github.com/RhysU/ar&quot;&gt;rigorous sampling error estimates&lt;/a&gt; for the final ensemble results.
&lt;/p&gt;

&lt;p&gt;
If you want to quickly visualize something, &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/master/postproc/summary_surf.py&quot;&gt;a little wrapper&lt;/a&gt; utility makes it a snap.  So, without further ado, gratuitous eye candy generated with &lt;code&gt;summary_surf.py -C 256 -f coleman3k15.h5 bar_u_v bar_u bar_v&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s1600/coleman3k15.cov_u_v.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s1600/coleman3k15.cov_u_v.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2164240599560758785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/2164240599560758785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2164240599560758785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2164240599560758785'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/06/sub-through-supersonic-coleman-like.html' title='Sub- through Supersonic Coleman-like Channels'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s72-c/coleman3k15.cov_u_v.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5605922946318050156</id><published>2014-04-10T13:52:00.000+00:00</published><updated>2014-04-21T14:02:04.590+00:00</updated><title type='text'>Installing Chromium under $HOME on RHEL 6-ish x86_64 systems</title><content type='html'>&lt;p&gt;
Based upon &lt;a href=&quot;http://www.if-not-true-then-false.com/2013/install-chromium-on-centos-red-hat-rhel/&quot;&gt;Install Chromium (with Pepper Flash) on CentOS/Red Hat (RHEL) 6.5&lt;/a&gt; with modifications to permit non-root usage...
&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-sh&quot;&gt;
mkdir ~/workaround &amp;&amp; cd ~/workaround
wget http://people.centos.org/hughesjr/chromium/6/x86_64/RPMS/chromium-31.0.1650.63-2.el6.x86_64.rpm # 32-bit seemingly in repo too
rpm2cpio chromium-31.0.1650.63-2.el6.x86_64.rpm | cpio -idmv
./opt/chromium-browser/chromium-browser # Bombs on sandboxing complaints
./opt/chromium-browser/chromium-browser --no-sandbox # Confirm behaves for you
mv ./opt/chromium-browser ~ # Moving the whole directory into a permanent location
echo &#39;#/bin/sh&#39; &gt; ~/bin/chromium-browser # Assuming you have ~/bin in your path
echo &#39;exec $HOME/chromium-browser/chromium-browser --no-sandbox &quot;$@&quot;&#39; &gt;&gt; ~/bin/chromium-browser
chmod a+x ~/bin/chromium-browser
chromium-browser http://www.google.com &amp; # Rejoice
cd &amp;&amp; rm -rf ~/workaround # Hygiene
&lt;/pre&gt;
&lt;p&gt;
The are &lt;a href=&quot;http://unix.stackexchange.com/questions/68832/what-does-the-chromium-option-no-sandbox-mean&quot;&gt;glaring drawbacks&lt;/a&gt; to running Chromium with &lt;code&gt;--no-sandbox&lt;/code&gt; so don&#39;t do it without considering its implications.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5605922946318050156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5605922946318050156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5605922946318050156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5605922946318050156'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/04/installing-chromium-under-home-on-rhel.html' title='Installing Chromium under $HOME on RHEL 6-ish x86_64 systems'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-608527791369907831</id><published>2014-03-29T23:05:00.002+00:00</published><updated>2014-03-29T23:05:54.125+00:00</updated><title type='text'>Twelfth</title><content type='html'>&lt;p&gt;A fun holdover from the days when I was last gainfully employed-- the 12th patent on which I&#39;m part inventor was issued earlier this month: &lt;a href=&quot;http://www.google.com/patents/US8671199&quot;&gt;Converged call flow modeling and converged web service interface design&lt;/a&gt;.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/608527791369907831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/608527791369907831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/608527791369907831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/608527791369907831'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/twelfth.html' title='Twelfth'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4890635217972841556</id><published>2014-03-28T02:42:00.000+00:00</published><updated>2014-03-28T02:43:45.278+00:00</updated><title type='text'>I {hate,heart} NaN</title><content type='html'>&lt;p&gt;
For two week&#39;s I&#39;ve intermittently been tracking down an issue where suddenly a flow profile goes from turbulent/sane to a uniform flow profile in a single time step.
&lt;/p&gt;

&lt;p&gt;
For awhile now I&#39;ve been running with &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/master/suzerain/dsgbsvx.def&quot;&gt;a custom banded solver&lt;/a&gt; that permits
&lt;ul&gt;
&lt;li&gt;mixed precision factorization&lt;/li&gt;
&lt;li&gt;use of approximate factorizations, and&lt;/li&gt;
&lt;li&gt;iterative refinement.&lt;/li&gt;
&lt;/ul&gt;
Relative to &lt;a href=&quot;http://www.netlib.no/netlib/lapack/complex16/zgbsvx.f&quot;&gt;ZGBSVX&lt;/a&gt; this has been a net win.  I get firm control over the quality of my linear system solutions and save a factor of 10 (yes, 10) over LAPACK&#39;s Cadillac banded solve.
&lt;/p&gt;

&lt;p&gt;
It turns out that I didn&#39;t harden my one-off solver against NaNs.  Ah, NaNs.  Those lovely things that can make puzzling things like the following happen to a simulation:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s1600/fun.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s400/fun.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The problem wasn&#39;t the NaN showing up in a computation, as I&#39;d notice that.  The problem was NaN showing up in a residual computation.  Necessarily, that NaN failed a residual tolerance check.  Because the tolerance check was false, I&#39;d kick back a linear solution consisting of all zeros from an initial solution residual calculation that I&#39;d performed.
&lt;/p&gt;

&lt;p&gt;
What happened next was a comedy of my best intentions.  I had a forcing constraint set so that if my solution failed to match my freestream, the state profile was forced to match.  As my solution was all zeros, that NaN residual combined with the forcing caused my solution to become the freestream in a single time step.  And suddenly my simulations went from sane to uniform instantaneously.
&lt;/p&gt;

&lt;p&gt;
This came to me on the motorcycle while riding home after a rough day.
&lt;/p&gt;

&lt;p&gt;
I simultaneously love and hate the beauty that is floating point.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4890635217972841556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4890635217972841556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4890635217972841556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4890635217972841556'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/i-hateheart-nan.html' title='I {hate,heart} NaN'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s72-c/fun.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3091728457526417234</id><published>2014-03-17T06:10:00.001+00:00</published><updated>2014-03-17T06:23:33.496+00:00</updated><title type='text'>helm: a proportional-integral-derivative controller implementation</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s1600/update39.bl_thick.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s400/update39.bl_thick.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
The class of homogenized boundary layer models I&#39;m using in my thesis (developed by &lt;a href=&quot;http://dx.doi.org/10.1017/s0022112088000345&quot;&gt;Spalart&lt;/a&gt;, made compressible by &lt;a href=&quot;http://dx.doi.org/10.1017/S0022112000008466&quot;&gt;Guarini et al&lt;/a&gt;, and most recently extended by &lt;a href=&quot;http://meetings.aps.org/Meeting/DFD13/Session/H30.7&quot;&gt;Topalian et al&lt;/a&gt;) has an adjustable knob called a &quot;slow growth rate&quot; that controls the thickness of the boundary layer.  One can manually fiddle with it.  One can use RANS simulations and hope that the value obtained produces something similar in a DNS.  I aim to apply some basic control theory by bolting a &lt;a href=&quot;http://www.wikipedia.org/wiki/PID_controller&quot;&gt;PID controller&lt;/a&gt; onto my simulations.
&lt;/p&gt;

&lt;p&gt;
It turns out everybody and their brother intuitively derive the equations governing a basic PID controller.  Then they wave their hands a bit about how to solve windup woes, bumpless transition, and deal with incremental/velocity forms.  Not that it doesn&#39;t work, but they drift away from the continuous equations to do so.  Then they cough up O(10) lines of code assuming a constant, discrete sampling rate.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/RhysU/helm&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis0CUVXyo5aGZiCBTCFgi-NkhLtyYq8rFbrR3iuUEFG41gNZcN751Zox3xIV3u36GnMIZcZSIc1k0cRu7a8MGOAsGC14glsntAK5n7DZl6W-ihtVVwpbKQl-PJImbOa6vosEE677qlQL0/s640/helm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
To permit variable sampling and understand where/how the fixes are made, I dug around until I found a nice treatment in &lt;a href=&quot;http://www.worldcat.org/isbn/9781400828739&quot;&gt;Astrom &amp;amp; Murray&lt;/a&gt; (&lt;a href=&quot;http://www.cds.caltech.edu/~murray/amwiki/index.php/Main_Page&quot;&gt;Available online&lt;/a&gt;), &lt;a href=&quot;http://rhysu.github.io/helm/helm_8h.html#details&quot;&gt;wrote up the variant of their PID derivation&lt;/a&gt; that I needed including the discretization, &lt;a href=&quot;http://rhysu.github.io/helm/helm_8h.html#a7875349b12753d0028ff0906b3ba6826&quot;&gt;coded up the algorithm&lt;/a&gt;, and then put together &lt;a href=&quot;http://rhysu.github.io/helm/step3_8c.html#details&quot;&gt;a small test driver&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Aside from vanilla C99, the implementation has no dependencies.  I hope someone else can put it to use.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3091728457526417234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3091728457526417234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3091728457526417234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3091728457526417234'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/helm-proportional-integral-derivative.html' title='helm: a proportional-integral-derivative controller implementation'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s72-c/update39.bl_thick.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3607058606836984468</id><published>2014-03-16T18:51:00.004+00:00</published><updated>2014-03-16T22:49:55.204+00:00</updated><title type='text'>One bit</title><content type='html'>&lt;p&gt;
Despite coding being proverbially all zeros and ones, it&#39;s not often that a single, isolated bit is damning.
&lt;/p&gt;

&lt;p&gt;
Today, however, &lt;a href=&quot;https://red.ices.utexas.edu/issues/3077&quot;&gt;I spent four hours tracking down&lt;/a&gt; where I wrote &lt;tt&gt;0&lt;/tt&gt; when I should have written &lt;tt&gt;1&lt;/tt&gt;.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/RhysU/suzerain/commit/7351452bb03be2864d65f6bc08c730862766f2cf&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrdvYSRKFrGDAejXX0J4CmVj_MuFORTD-hlFWZ12_DYyssXEyiVNp2alxgaVH1pz967bWiBBt1TG4w4_RjDF_UPV1S-5g8bZgoFjn4GrjceFlgilON95bnMMoQ83Me58ToNz3hJuTayNA/s400/Screenshot+from+2014-03-16+13:47:20.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3607058606836984468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3607058606836984468' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3607058606836984468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3607058606836984468'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/one-bit.html' title='One bit'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrdvYSRKFrGDAejXX0J4CmVj_MuFORTD-hlFWZ12_DYyssXEyiVNp2alxgaVH1pz967bWiBBt1TG4w4_RjDF_UPV1S-5g8bZgoFjn4GrjceFlgilON95bnMMoQ83Me58ToNz3hJuTayNA/s72-c/Screenshot+from+2014-03-16+13:47:20.png" height="72" width="72"/><thr:total>2</thr:total></entry></feed>