<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>roguelazer&#x27;s website</title>
      <link>https://www.roguelazer.com/</link>
      <description>musings on tech, politics, music, and more</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://www.roguelazer.com/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Thu, 19 Feb 2026 00:08:00 +0000</lastBuildDate>
      <item>
          <title>trying out aerospace, a macos window manager</title>
          <pubDate>Thu, 19 Feb 2026 00:08:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2026-02-aerospace/</link>
          <guid>https://www.roguelazer.com/blog/2026-02-aerospace/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2026-02-aerospace/">&lt;p&gt;Back when I used Linux on the desktop,
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;awesome-window-manager&#x2F;&quot;&gt;I used to use this great window manager called &quot;awesome&quot;&lt;&#x2F;a&gt;.
It&#x27;s probably the thing I&#x27;ve missed the most since switching to macOS,
especially when on small screens like the 14&quot; display of this MacBook
I&#x27;m typing on. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;awesomewm.org&quot;&gt;Awesome&lt;&#x2F;a&gt; was what is known as a &quot;tiling window manager&quot;.
This means that rather than having a bunch of windows overlapping on some number of virtual desktops, windows are arranged into nonoverlapping segments called &quot;tiles&quot;.
Tiling window managers have been around for a long time; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pcjs.org&#x2F;software&#x2F;pcx86&#x2F;sys&#x2F;windows&#x2F;1.01&#x2F;ega&#x2F;&quot;&gt;Windows 1.0&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-windows1.0-1&quot;&gt;&lt;a href=&quot;#fn-windows1.0&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; was a tiling window manager and competed with the overlapping-window desktop metaphor of the original Macintosh OS&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-macOS-1&quot;&gt;&lt;a href=&quot;#fn-macOS&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
Tiling window managers require a lot of persnicketey window management to be useful (because otherwise you just end up with a bunch of unusably-tiny rectangles vanishing into the distance), but if you&#x27;re willing to put up with it they can give you a super-fast way to organize and manage your applications.
Tiling window managers often lean heavily onto the concept of &quot;virtual desktops&quot;, allowing you to quickly switch between different sets of windows.&lt;&#x2F;p&gt;
&lt;p&gt;Macintosh windowing isn&#x27;t bad. The original concept&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-xerox-1&quot;&gt;&lt;a href=&quot;#fn-xerox&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; of overlapping windows whose order can be micromanaged is a great way to scale from one to several windows.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;gadgets&#x2F;2007&#x2F;10&#x2F;mac-os-x-10-5&#x2F;&quot;&gt;Mac OS X 10.5 Leopard&lt;&#x2F;a&gt; added a virtual desktop feature called &quot;Spaces&quot; that isn&#x27;t terrible (especially once you add the &quot;Displays have separate Spaces&quot; option), but the animations are insufferably long and keyboard accessibility is pretty limited.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, it turns out that nowadays, there are a few options for tiling window managers on macOS. The top few seem to be&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xmonad.org&quot;&gt;Amethyst&lt;&#x2F;a&gt;, inspired by the venerable &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xmonad.org&quot;&gt;xmonad&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nikitabobko&#x2F;AeroSpace&quot;&gt;AeroSpace&lt;&#x2F;a&gt;, inspired by the currently-popular &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;i3wm.org&quot;&gt;i3&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;karinushka&#x2F;paneru&quot;&gt;Paneru&lt;&#x2F;a&gt;, inspired by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;niri-wm.github.io&#x2F;niri&#x2F;&quot;&gt;niri&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-niri-1&quot;&gt;&lt;a href=&quot;#fn-niri&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;asmvik&#x2F;yabai&quot;&gt;yabai&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There&#x27;s also a few very new ones:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;typester&#x2F;yashiki&quot;&gt;yashiki&lt;&#x2F;a&gt; looks cool (and is actually very close to the design of awesome), but it appears to be heavily &quot;vibe-coded&quot; and I wasn&#x27;t able to get it to work.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;acsandmann&#x2F;rift&quot;&gt;rift&lt;&#x2F;a&gt; also looks cool, but crashed Dock.app when I tested it&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I played with them all, but for the last week or so I&#x27;ve been using AeroSpace exclusively.&lt;&#x2F;p&gt;







&lt;figure&gt;
  
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2026-02-aerospace&amp;#x2F;desktop.png&quot;&gt;
    
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2026-02-aerospace&amp;#x2F;desktop.png&quot; alt=&quot;Desktop under AeroSpace&quot;  &#x2F;&gt;
    
  &lt;&#x2F;a&gt;
  
  &lt;figcaption&gt;My desktop right now under AeroSpace, showing several windows in an accordion on the left and two windows tiled on the right&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;setting-up&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#setting-up&quot; aria-label=&quot;Anchor link for: setting-up&quot;&gt;Setting Up&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Installation (presuming you&#x27;re using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;brew.sh&quot;&gt;Homebrew&lt;&#x2F;a&gt;)
is very straightforward:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #9ECE6A);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt;-cask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #9ECE6A);&quot;&gt; nikitabobko&#x2F;tap&#x2F;aerospace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You&#x27;ll have to go to System Settings → Privacy &amp;amp; Security → Accessibility and add both &lt;code&gt;&#x2F;Applications&#x2F;AeroSpace.app&lt;&#x2F;code&gt;. At this point they can control your whole computer, so, uh, here&#x27;s hoping they aren&#x27;t malware.&lt;&#x2F;p&gt;
&lt;p&gt;AeroSpace is configured via a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;toml.io&#x2F;en&#x2F;&quot;&gt;TOML&lt;&#x2F;a&gt; file at &lt;code&gt;~&#x2F;.aerospace.toml&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;force-overflow&quot;&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;config-version&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; You can use it to add commands that run after AeroSpace startup.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Available commands : https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;after-startup-command&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;start-at-login&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Normalizations. See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#normalization&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;enable-normalization-flatten-containers&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;enable-normalization-opposite-orientation-for-nested-containers&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#layouts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; The &amp;#39;accordion-padding&amp;#39; specifies the size of accordion padding&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; You can set 0 to disable the padding feature&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;accordion-padding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 30&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Possible values: tiles|accordion&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;default-root-container-layout&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;tiles&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Possible values: horizontal|vertical|auto&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; &amp;#39;auto&amp;#39; means: wide monitor (anything wider than high) gets horizontal orientation,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;               tall monitor (anything higher than wide) gets vertical orientation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;default-root-container-orientation&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;auto&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Mouse follows focus when focused monitor changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Drop it from your config, if you don&amp;#39;t like this behavior&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#on-focus-changed-callbacks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#move-mouse&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Fallback value (if you omit the key): on-focused-monitor-changed = []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-focused-monitor-changed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-mouse monitor-lazy-center&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Also see: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;goodies#disable-hide-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;automatically-unhide-macos-hidden-apps&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; List of workspaces that should stay alive even when they contain no windows,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; even when they are invisible.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; This config version is only available since &amp;#39;config-version = 2&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Fallback value (if you omit the key): persistent-workspaces = []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;persistent-workspaces&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; A callback that runs every time binding mode changes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#binding-modes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#mode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-mode-changed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Possible values: (qwerty|dvorak|colemak)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#key-mapping&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;key-mapping&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    preset&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;qwerty&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Gaps between windows (inner-*) and between monitor edges (outer-*).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Possible values:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Constant:     gaps.outer.top = 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Per monitor:  gaps.outer.top = [{ monitor.main = 16 }, { monitor.&amp;quot;some-pattern&amp;quot; = 32 }, 24]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                 In this example, 24 is a default value when there is no match.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                 Monitor pattern is the same as for &amp;#39;workspace-to-monitor-force-assignment&amp;#39;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                 See:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                 https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#assign-workspaces-to-monitors&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;gaps&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    inner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;horizontal&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    inner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;vertical&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;   0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    outer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;       0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    outer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;bottom&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;     0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    outer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;top&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;        0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    outer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;      0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; &amp;#39;main&amp;#39; binding mode declaration&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#binding-modes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; &amp;#39;main&amp;#39; binding mode must be always presented&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Fallback value (if you omit the key): mode.main.binding = {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;mode&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;main&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;binding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; All possible keys:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Letters.        a, b, c, ..., z&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Numbers.        0, 1, 2, ..., 9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - F-keys.         f1, f2, ..., f20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Special keys.   minus, equal, period, comma, slash, backslash, quote, semicolon,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                   backtick, leftSquareBracket, rightSquareBracket, space, enter, esc,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                   backspace, tab, pageUp, pageDown, home, end, forwardDelete,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                   sectionSign (ISO keyboards only, european keyboards only)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;                   keypadMinus, keypadMultiply, keypadPlus&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; - Arrows.         left, down, up, right&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; All possible modifiers: cmd, alt, ctrl, shift&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; All possible commands: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#layout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-slash&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout tiles horizontal vertical&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-comma&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout accordion horizontal vertical&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#focus&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus --boundaries-action wrap-around-the-workspace left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-j&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus --boundaries-action wrap-around-the-workspace down&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus --boundaries-action wrap-around-the-workspace up&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-l&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus --boundaries-action wrap-around-the-workspace right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-q&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus-monitor left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus-monitor right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#move&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-j&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move down&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move up&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-l&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#resize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-minus&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resize smart -50&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-equal&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resize smart +50&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace prev&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-semicolon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace prev&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace next&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-quote&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace next&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-semicolon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus-monitor prev&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-quote&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;focus-monitor next&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;commands#move-node-to-workspace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-tab&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;workspace-back-and-forth&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-tab&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-workspace-to-monitor --wrap-around next&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-space&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;fullscreen&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-semicolon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode service&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    ctrl-shift-enter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;exec-and-forget kitty -1 --detach -d $HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; &amp;#39;service&amp;#39; binding mode declaration.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; See: https:&#x2F;&#x2F;nikitabobko.github.io&#x2F;AeroSpace&#x2F;guide#binding-modes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;mode&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;service&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;binding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-semicolon&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    esc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;reload-config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;exec-and-forget osascript -e &amp;quot;display notification \&amp;quot;aerospace config reloaded\&amp;quot; with title \&amp;quot;aerospace\&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    r&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;flatten-workspace-tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; reset layout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    f&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout floating tiling&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Toggle between floating and tiling layout&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-q&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-workspace-to-monitor left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-e&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-workspace-to-monitor right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;join-with left&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-j&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;join-with down&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-k&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;join-with up&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    alt-shift-l&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;join-with right&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;mode main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.markmcguill.strongbox&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout floating&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.1password.1password&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout floating&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.iconfactory.Tot&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;layout floating&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.apple.mail&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.apple.MobileSMS&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.gather.GatherV2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.tinyspeck.slackmacgap&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;net.shinyfrog.bear&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;on-window-detected&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;app-id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;com.mimestream.Mimestream&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    run&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;move-node-to-workspace Z&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h3 id=&quot;add-ons&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#add-ons&quot; aria-label=&quot;Anchor link for: add-ons&quot;&gt;Add-Ons&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;There are a few useful addons I&#x27;d recommend; the first is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;MediosZ&#x2F;SwipeAeroSpace&quot;&gt;SwipeAeroSpace&lt;&#x2F;a&gt;, which lets you remap 3- or 4-finger swipes to switch virtual desktops in AeroSpace. If you already use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;folivora.ai&quot;&gt;BTT&lt;&#x2F;a&gt; or equivalent, you don&#x27;t need this.&lt;&#x2F;p&gt;
&lt;p&gt;Install it with&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #9ECE6A);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt;-cask&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #9ECE6A);&quot;&gt; mediosz&#x2F;tap&#x2F;swipeaerospace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then add it to Accessibility in System Settings (just like you did for AeroSpace) and launch the app.&lt;&#x2F;p&gt;
&lt;p&gt;The next thing I&#x27;ve been working on is an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alfred.app&quot;&gt;Alfred&lt;&#x2F;a&gt; workflow to control Aerospace. You can download a prototype of it at &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2026-02-aerospace&#x2F;aerospace.alfredworkflow&quot;&gt;📁 aerospace.workflow&lt;&#x2F;a&gt;. It supports the new alfred triggers &lt;code&gt;asp&lt;&#x2F;code&gt; to bring up the aerospace command menu, and &lt;code&gt;aw&lt;&#x2F;code&gt; to quickly switch workspaces.&lt;&#x2F;p&gt;





&lt;figure&gt;
  
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2026-02-aerospace&amp;#x2F;alfred.png&quot; alt=&quot;Alfred workspace&quot;  &#x2F;&gt;
    
  &lt;figcaption&gt;Alfred showing the &#x27;asp&#x27; action from this workflow&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;It&#x27;s still super-janky, so I haven&#x27;t published it to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alfred.app&#x2F;workflows&#x2F;&quot;&gt;workflow gallery&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A lot of people online use tools like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;swiftbar&#x2F;SwiftBar&quot;&gt;SwiftBar&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;FelixKratz&#x2F;SketchyBar&quot;&gt;SketchyBar&lt;&#x2F;a&gt; with these alternate WMs, but I haven&#x27;t seen any reason to do so yet.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, that&#x27;s where I have it today. Maybe I&#x27;ll blog some more if this sticks for a few months.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-windows1.0&quot;&gt;
&lt;p&gt;Circa 1985 &lt;a href=&quot;#fr-windows1.0-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-macOS&quot;&gt;
&lt;p&gt;Macintosh System Software &lt;a href=&quot;#fr-macOS-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-xerox&quot;&gt;
&lt;p&gt;Faithfully borrowed from Xerox, of course &lt;a href=&quot;#fr-xerox-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-niri&quot;&gt;
&lt;p&gt;Technically, Niri&#x2F;Paneru are &quot;sliding&quot; window managers, which represent the desktop as an infinitely-long one-dimensional space that your viewport slides across &lt;a href=&quot;#fr-niri-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>what makes programming great?</title>
          <pubDate>Mon, 16 Feb 2026 08:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/what-makes-programming-great/</link>
          <guid>https://www.roguelazer.com/blog/what-makes-programming-great/</guid>
          <description xml:base="https://www.roguelazer.com/blog/what-makes-programming-great/">&lt;p&gt;Most of the time, when I&#x27;m actually doing it, I love my job. There&#x27;s a reason that computer programming
(or &quot;software engineering&quot; if you&#x27;re highfalutin) attracts so many people, and it&#x27;s not just the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.levels.fyi&#x2F;&quot;&gt;unsustainably high salaries&lt;&#x2F;a&gt;
at overvalued tech companies or the promise of free gogurt in a corporate &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theringer.com&#x2F;2018&#x2F;08&#x2F;02&#x2F;tech&#x2F;facebook-cafeteria-free-food-mountain-view-menlo-park-google-headquarters&quot;&gt;cafeteria&lt;&#x2F;a&gt;. I want to take
this post to try and make a case for what makes it so great.&lt;&#x2F;p&gt;
&lt;p&gt;The first aspect I wanted to discuss, which I think is pretty well covered, is that programming is fundamentally
a &lt;strong&gt;creative&lt;&#x2F;strong&gt; act. Even in the worst slop-house where you&#x27;re writing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;about&#x2F;careers&#x2F;applications&#x2F;&quot;&gt;boring Java or Go code that converts one form of ProtoBuf to another&lt;&#x2F;a&gt;,
&lt;em&gt;you&lt;&#x2F;em&gt; are making the decisions on how to do that, &lt;em&gt;you&lt;&#x2F;em&gt; are structuring the code,
and &lt;em&gt;you&lt;&#x2F;em&gt; get to enjoy the satisfaction of building something yourself. Creating and building something is one of
the most essential human joys there is, and is essential to human satisfaction&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-managers-1&quot;&gt;&lt;a href=&quot;#fn-managers&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Most of the time,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.perl.com&#x2F;pub&#x2F;1999&#x2F;03&#x2F;pm.html&#x2F;&quot;&gt;there&#x27;s more than one way to do it&lt;&#x2F;a&gt;, and even for the simplest program,
the design space is enormous enough that no two people will come up with the same approach. Exploring this space and deciding
how to tackle a problem is beautiful.&lt;&#x2F;p&gt;
&lt;p&gt;The next aspect that I want to cover is that computers are close to &lt;strong&gt;perfect&lt;&#x2F;strong&gt;, something that&#x27;s true in so few other
fields. Computers have ridiculously low error rates&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-error-1&quot;&gt;&lt;a href=&quot;#fn-error&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and are perfectly deterministic unless you go out of your
way to make them do something pseudorandom. If you write a program correctly, it&#x27;ll respond the same way every time. Now,
of course, you may still have bugs based on different inputs, or different states of the machine; I&#x27;m not trying to say that
we all live in a strongly-typed pure-functional utopia. But compare this to other creative endeavors — no two pieces of wood
that you cut will be the same every time; even if every ingredient looks the same, the dish is always going to be different. But when
you program computers, you have this wonderful opportunity to hone a single project without worrying about variance or materials
degradation.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, and most important to me, everything in computing is &lt;strong&gt;knowable&lt;&#x2F;strong&gt;. Computer science is a small, shallow field that is
deliberate about building reliable layers of abstractions. There was a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;surfingcomplexity.blog&#x2F;2026&#x2F;02&#x2F;08&#x2F;nobody-knows-how-the-whole-system-works&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt; going around a few days ago whose conclusion is that,
basically, slopcoding only makes things slightly worse because nobody actually understands the whole stack already. I couldnt&#x27;t disagree
with this more vociferously. Yes, obviously nobody knows &lt;em&gt;everything&lt;&#x2F;em&gt;! But &lt;em&gt;somebody&lt;&#x2F;em&gt; knows each thing (because these are all systems
built by humans), and the beautiful thing about working on computers is that you can know &lt;em&gt;any&lt;&#x2F;em&gt; thing! I&#x27;ve had times in my career
when I&#x27;ve had to work on kernel interrupt scheduling code; I do &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mara.nl&#x2F;atomics&#x2F;&quot;&gt;have a pretty good idea how&lt;&#x2F;a&gt;
the memory model of ARM processors works; I have built
processors by drawing MOSFETs in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;opencircuitdesign.com&#x2F;magic&#x2F;index.html&quot;&gt;Magic&lt;&#x2F;a&gt;. And, yes, I don&#x27;t know everything listed off
in that blog post, but I know &lt;em&gt;how to learn them&lt;&#x2F;em&gt; if and when I need to. Because my job isn&#x27;t just to produce widgets of output for some corporate masters;
it&#x27;s to grow and improve as a person and as at my career, so knowing how to learn new things and improve myself is perhaps the most key skill.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, this is a post about LLMs, which are pseudorandom lie factories which require their users to do you do the least-creative mind-numbing
activities on the planet&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-prompt-1&quot;&gt;&lt;a href=&quot;#fn-prompt&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and encourage humans to adopt a kind of learned helplessness — to convince us all that the unexamined job is worth working.
Maybe this is the future of my &lt;em&gt;industry&lt;&#x2F;em&gt;, the inevitable &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;enshittification&#x2F;&quot;&gt;enshittification&lt;&#x2F;a&gt; of creative work into a satire-of-a-satire, where former
knowledge workers pull levers on an expensive &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rgoldfinger.com&#x2F;blog&#x2F;2025-07-26-claude-code-is-a-slot-machine&#x2F;&quot;&gt;slot machine&lt;&#x2F;a&gt; until something that they don&#x27;t understand comes out that meets a &lt;em&gt;Business Need&lt;&#x2F;em&gt; and makes
some executive 0.003% richer, but I damn well hope it&#x27;s not a future I&#x27;ll ever participate in.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-managers&quot;&gt;
&lt;p&gt;people keep telling me that there are huge classes of people, called &quot;managers&quot;, who get more satisfaction
from ordering someone else to do something than from doing it themselves. This seems like a defect if true, but based
on the general level of dissatisfaction and alcoholism in all the managers I know, I kind of think it isn&#x27;t true. &lt;a href=&quot;#fr-managers-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-error&quot;&gt;
&lt;p&gt;although obviously high enough that you can become a prominent computer person by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ieeexplore.ieee.org&#x2F;document&#x2F;6772729&quot;&gt;working around them&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-error-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-prompt&quot;&gt;
&lt;p&gt;&quot;prompt engineering&quot;, a.k.a. trying to randomly guess a series of english words whose highest-probability autocompletion
will be the output you want &lt;a href=&quot;#fr-prompt-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>⤭ Enabling ECS Events with Terraform</title>
          <pubDate>Tue, 20 Jan 2026 12:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2026-01-20-enabling-ecs-events-with-terraform/</link>
          <guid>https://www.roguelazer.com/blog/2026-01-20-enabling-ecs-events-with-terraform/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2026-01-20-enabling-ecs-events-with-terraform/">&lt;p&gt;I wrote &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svix.com&#x2F;blog&#x2F;enabling-ecs-events-with-terraform&#x2F;&quot;&gt;another blog post on my employer&#x27;s blog&lt;&#x2F;a&gt;, this time about
programmatically enabling a goofy new AWS ECS feature that doesn&#x27;t have an API. Enjoy!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Some Good Stuff in 2025</title>
          <pubDate>Sun, 11 Jan 2026 00:00:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-good-stuff/</link>
          <guid>https://www.roguelazer.com/blog/2025-good-stuff/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-good-stuff/">&lt;p&gt;I&#x27;m trying to get into a habit of reflecting on some good stuff from the past year at the end of the year; &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2024-good-stuff&#x2F;&quot;&gt;I did it last year&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2023-game-reviews&#x2F;&quot;&gt;the year before&lt;&#x2F;a&gt;, at least. It continues to be hard to get into the mood to think about good
things while the world&#x27;s burning, jack-booted gestapo are shooting fellow citizens, and my entire industry has been brain-rotted
by the great &quot;AI&quot; scam, but, you know, gotta try to look on the bright side.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>⤭ Improving JavaScript Webhook Transformations</title>
          <pubDate>Tue, 09 Dec 2025 12:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-12-09-improving-javascript-webhook-transformations/</link>
          <guid>https://www.roguelazer.com/blog/2025-12-09-improving-javascript-webhook-transformations/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-12-09-improving-javascript-webhook-transformations/">&lt;p&gt;I wrote &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svix.com&#x2F;blog&#x2F;improving-transformations&#x2F;&quot;&gt;another blog post on my employer&#x27;s blog&lt;&#x2F;a&gt; about a little
side quest I did to replace part of our system which used &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;v8.dev&#x2F;&quot;&gt;v8&lt;&#x2F;a&gt; to use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;quickjs-ng.github.io&#x2F;quickjs&#x2F;&quot;&gt;QuickJS-NG&lt;&#x2F;a&gt;
instead. Nothing earth-shattering, but it&#x27;s always nice to make slow things go faster.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.svix.com&#x2F;blog&#x2F;static&#x2F;images&#x2F;generated&#x2F;perf-YMCLYRPB.svg&quot; alt=&quot;performance chart&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>⤭ Row Level Security: Defense in Depth</title>
          <pubDate>Thu, 20 Nov 2025 12:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-11-20-row-level-security/</link>
          <guid>https://www.roguelazer.com/blog/2025-11-20-row-level-security/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-11-20-row-level-security/">&lt;p&gt;I wrote &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svix.com&#x2F;blog&#x2F;row-level-security-defense-in-depth&#x2F;&quot;&gt;a blog post over on my employer&#x27;s blog&lt;&#x2F;a&gt;
about how to use row-level security patterns in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.postgresql.org&quot;&gt;postgres&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;clickhouse.com&quot;&gt;clickhouse&lt;&#x2F;a&gt;
and I think it&#x27;s pretty neat. Every company I&#x27;ve worked at has done multitenancy inside of SQL databases,
and the approach to prevent cross user access has basically boiled down to &lt;q&gt;git gud&lt;&#x2F;q&gt;; they&#x27;ve also all had
at least one incident where some endpoint forgot to check permissions and you could access other users&#x27; data (sometimes
just by incrementing an auto-incrementing ID in a URL). This is the first attempt I&#x27;ve seen to comprehensively fix that,
so I wrote it up. Enjoy!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>⤭ Getting Started with Rust and ClickHouse</title>
          <pubDate>Tue, 04 Nov 2025 12:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-11-04-getting-started-with-rust-and-clickhouse/</link>
          <guid>https://www.roguelazer.com/blog/2025-11-04-getting-started-with-rust-and-clickhouse/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-11-04-getting-started-with-rust-and-clickhouse/">&lt;p&gt;Trying to get back into the habit of blogging for work. I wrote
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svix.com&#x2F;blog&#x2F;getting-started-with-rust-and-clickhouse&#x2F;&quot;&gt;a quick post on the Svix technical blog&lt;&#x2F;a&gt;
about using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rust-lang.org&quot;&gt;Rust&lt;&#x2F;a&gt; with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;clickhouse.com&quot;&gt;Clickhouse&lt;&#x2F;a&gt;, two technologies that are
near and dear to my heart.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>COVID-19 Update</title>
          <pubDate>Fri, 29 Aug 2025 17:34:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/covid/</link>
          <guid>https://www.roguelazer.com/blog/covid/</guid>
          <description xml:base="https://www.roguelazer.com/blog/covid/">&lt;p&gt;It&#x27;s been &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates&#x2F;&quot;&gt;five years&lt;&#x2F;a&gt; since the pandemic hit,
and &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;covid-19-finally-hits-at-home&#x2F;&quot;&gt;three years&lt;&#x2F;a&gt; since the last time &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;COVID-19&quot;&gt;COVID&lt;&#x2F;a&gt;
hit our family, but it&#x27;s hit for real now. My five year perfect-streak has been ended&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-streak-1&quot;&gt;&lt;a href=&quot;#fn-streak&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;covid&amp;#x2F;test.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;test.9092e098ca5048d8.jpg&quot; alt=&quot;OnGo COVID-19 rapid antigen test with a positive result&quot; title=&quot;OnGo COVID-19 rapid antigen test with a positive result&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;covid&amp;#x2F;paxlovid.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;paxlovid.b58e42d6c0a9b8f4.jpg&quot; alt=&quot;Paxlovid&quot; title=&quot;Paxlovid&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2025-02-baby-plus-plus&#x2F;&quot;&gt;My daughter&lt;&#x2F;a&gt; came home from day-care sick on Monday and I started feeling bit crummy
late Thursday afternoon. Lo and behold, not only am I positive for COVID, but so is everyone else in the family. The kids are mostly
okay — the baby had a fever on Tuesday but has been fine since then, and my son has no symptoms — but my wife and I both
have fevers and aches and fatigue and coughs and the whole nine yards. Let me tell you, having two healthy and rambunctious children
home from school while the adults have COVID is the absolute worst.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, I got a Paxlovid prescription. So far &lt;em&gt;(&amp;lt; 12 hours in)&lt;&#x2F;em&gt; it&#x27;s not doing much for the symptoms, but everything tastes
like rusty nails now. Yay.&lt;&#x2F;p&gt;
&lt;p&gt;Stay safe out there, nerds.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-streak&quot;&gt;
&lt;p&gt;Note: While I have not, to the best of my knowledge, had COVID since testing became available, I actually think there&#x27;s a good chance that my wife and I both had COVID already — in late January 2020. Eva came back from a prison trip and we both came down with a virulent and miserable flu. This is before COVID was officially in the US, but it still seems likely to me. &lt;a href=&quot;#fr-streak-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Cooking is better than computers</title>
          <pubDate>Mon, 25 Aug 2025 22:51:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-08-25-cooking/</link>
          <guid>https://www.roguelazer.com/blog/2025-08-25-cooking/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-08-25-cooking/">&lt;p&gt;I don&#x27;t have time for a lot of hobbies these days, but one of my favorites is preparing food. Whether that&#x27;s cooking
four courses out of Julia Child&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-meal-1&quot;&gt;&lt;a href=&quot;#fn-meal&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, grilling some meat, or just tossing a salad together, there&#x27;s something deeply satisfying at turning
ingredients into a meal. In some ways, it&#x27;s not unlike programming; anyone can do a passable job using inferior tools
and following other peoples&#x27; recipes, but there&#x27;s almost infinite space to tinker, invest in better tools,
and learn to make your own recipes. Also, as long as you follow some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.servsafe.com&quot;&gt;simple rules&lt;&#x2F;a&gt;, the worst
outcome you&#x27;re likely to have is something that doesn&#x27;t taste great.&lt;&#x2F;p&gt;
&lt;p&gt;More than that, though, it&#x27;s something that&#x27;s just fundamentally human. Despite what some of my Soylent-chugging former
executive leaders might thing, making and eating food is an activity that connects us all. The forces of capitalism are trying
as hard as they can to give us a world where everybody eats soulless chain-restaurant slop delivered by underpaid &lt;q&gt;Gig
Economy&lt;&#x2F;q&gt; workers, but you can still make something all your own; you can still
find joy in something that has no product-market fit, no CSAT, and nothing to optimize&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-optimize-1&quot;&gt;&lt;a href=&quot;#fn-optimize&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;some-good-things&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-good-things&quot; aria-label=&quot;Anchor link for: some-good-things&quot;&gt;Some good things&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I got a new knife recently (a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.suncraft.co.jp&#x2F;en&#x2F;prod-detail&#x2F;?sid=315&amp;amp;cat=130&amp;amp;id=2404&quot;&gt;200mm Senzo bunka knife&lt;&#x2F;a&gt;).
Does it make the food taste better than if I&#x27;d cut it with my
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.zwilling.com&#x2F;us&#x2F;zwilling-gourmet-8-inch-chefs-knife-36111-203&#x2F;36111-203-0.html?cgid=cutlery_chefs-knives&quot;&gt;15-year-old chef&#x27;s knife&lt;&#x2F;a&gt;? No, but it makes the act of prepping food a bit more fun. It&#x27;s wildly too fancy
for my skill level, but ¯\&lt;em&gt;(ツ)&lt;&#x2F;em&gt;&#x2F;¯.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-08-25-cooking&amp;#x2F;knife.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;knife.10e96bef1fdc6471.jpg&quot; alt=&quot;Senza bunka knife&quot; title=&quot;Senza bunka knife&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I also replaced my 15-year-old All-Clad stainless steel frying pan with a new &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.zwilling.com&#x2F;us&#x2F;demeyere-industry-5-11-inch-18%2F10-stainless-steel-frying-pan-48628&#x2F;40850-684-0.html?cgid=cookware_skillets-fry-pans&quot;&gt;11&quot; Demeyere frying pan&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-pan-1&quot;&gt;&lt;a href=&quot;#fn-pan&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The old one&#x27;s rivets
were starting to come apart, so I got one without rivets!&lt;&#x2F;p&gt;
&lt;p&gt;The original &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;shop.moosewoodrestaurant.com&#x2F;products&#x2F;original-moosewood-cookbook&quot;&gt;Moosewood Cookbook&lt;&#x2F;a&gt; continuous to be joyous;
any recipe you cook is sure to include some novel ingredients and techniques.&lt;&#x2F;p&gt;
&lt;p&gt;Some good fresh spices can make all the difference to a simple dish —
some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oaktownspiceshop.com&#x2F;collections&#x2F;peppercorns&#x2F;products&#x2F;tellicherry-peppercorns&quot;&gt;tellicherry peppercorns&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;oaktownspiceshop.com&#x2F;collections&#x2F;chiles&#x2F;products&#x2F;calabrian-chile-ground&quot;&gt;Calabrian
chile powder&lt;&#x2F;a&gt; (and oil and salt, of course)
is really all you need for some quick sautéed or grilled vegetables.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;uvfm.org&#x2F;temescal-sunday&quot;&gt;Temescal farmer&#x27;s market&lt;&#x2F;a&gt; is a great place to blow $50 on berries that your 5-year-old
will eat all of on the walk home. And lots of other good produce, too. Oh! And the
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;gardenvarietycheese.com&#x2F;aged-cheese&quot;&gt;Garden Variety Cheese&lt;&#x2F;a&gt; Hollyhock is &lt;em&gt;so good&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;some-bad-things&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-bad-things&quot; aria-label=&quot;Anchor link for: some-bad-things&quot;&gt;Some bad things&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Fuck Samsung appliances. Our &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates-2024&#x2F;&quot;&gt;house&lt;&#x2F;a&gt; came with two of them: a range and a fridge. They&#x27;re both stupid.&lt;&#x2F;p&gt;
&lt;p&gt;The range (which doesn&#x27;t have a model number on it, but looks like the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.samsung.com&#x2F;us&#x2F;home-appliances&#x2F;ranges&#x2F;gas&#x2F;6-0-cu-ft-smart-freestanding-gas-range-with-no-preheat-air-fry-convection-in-stainless-steel-nx60a6511ss-aa&#x2F;&quot;&gt;NX60A6511SS&#x2F;AA&lt;&#x2F;a&gt;)
has &lt;em&gt;capacitive touch&lt;&#x2F;em&gt; buttons on top of it. Which are triggered by steam. Which means that if I boil something on the stovetop,
it will turn on random settings on the oven. It&#x27;s &lt;em&gt;infuriating&lt;&#x2F;em&gt; to be making a sauce and suddenly have the oven turn on at 700°F
for no reason. Also, if they&#x27;re damp, then &lt;em&gt;don&#x27;t&lt;&#x2F;em&gt; respond to finger touches, which means that you then can&#x27;t turn the oven off without getting
a towel and drying the buttons. Such a fucking stupid design.&lt;&#x2F;p&gt;
&lt;p&gt;The fridge is a four-door model with a &quot;Flex Zone&quot;, which means you can convert half of the freezer from a freezer into
more fridge space. I have no idea why you&#x27;d want this (it leaves you with an absolutely minuscule freezer), but it&#x27;s mapped to a single
touch of a capacitive button, which means once in a while someone will brush by it and not notice and then half of your freezer
will melt. There&#x27;s a &quot;control lock&quot; feature, but it also completely disables the ice maker&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ice-maker-1&quot;&gt;&lt;a href=&quot;#fn-ice-maker&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and water dispenser, so it&#x27;s
not really usable.&lt;&#x2F;p&gt;
&lt;p&gt;Outside the realm of Samsung appliance crap?
It&#x27;s become impossible to find recipes or blog posts about cooking on the Internet that haven&#x27;t become LLM-slop-filled-nonsense. Thankfully,
there are hundreds of years of writing about food that predate Truthiness as a Service.&lt;&#x2F;p&gt;
&lt;p&gt;Auf Wiedersehen and good night&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-meal&quot;&gt;
&lt;p&gt;not really in the cards with a six-month-old and a five-year-old &lt;a href=&quot;#fr-meal-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-optimize&quot;&gt;
&lt;p&gt;unless you want to for fun, I guess? I&#x27;m not the optimization police. &lt;a href=&quot;#fr-optimize-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-pan&quot;&gt;
&lt;p&gt;no, I did not pay $190 for it, I&#x27;m not crazy &lt;a href=&quot;#fr-pan-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-ice-maker&quot;&gt;
&lt;p&gt;which is very bad: if you let the ice maker go for more than about a week without using all the ice, it&#x27;ll freeze over solid, the
plastic parts will crack, and the whole thing will have to be replaced. This has happened to us twice so far! &lt;a href=&quot;#fr-ice-maker-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>More words about enphase</title>
          <pubDate>Sat, 23 Aug 2025 18:51:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-envoy/</link>
          <guid>https://www.roguelazer.com/blog/2025-envoy/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-envoy/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2025-solar&#x2F;&quot;&gt;Last week, I wrote bout my experience getting a solar power system installed&lt;&#x2F;a&gt;; since then,
I&#x27;ve been spending some weekend and evening time working on improving the little corner of technical nonsense that
I have any control over!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;background&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#background&quot; aria-label=&quot;Anchor link for: background&quot;&gt;Background&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;First, let&#x27;s do a quick recap of how my system works:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;system.png&quot; alt=&quot;Solar system layout&quot; class=&quot;cimg-no-shadow cimg-bg-gray&quot;  &#x2F;&gt;
  
&lt;p&gt;I have 20 panels, each of which generates up to 460W of DC power and immediately converts it from DC to AC using an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;download&#x2F;iq8x-microinverter-data-sheet&quot;&gt;Enphase IQ8X microinverter&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-string-inverter-1&quot;&gt;&lt;a href=&quot;#fn-string-inverter&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. This gives us a peak of 9.2kW possible power split across two phases.&lt;&#x2F;p&gt;
&lt;p&gt;This power comes off the roof to an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;store&#x2F;storage&#x2F;gen3&#x2F;iq-combiner-5&quot;&gt;Enphase IQ Combiner 5&lt;&#x2F;a&gt; PV combiner. I&#x27;m not really sure what the combiner does! I assume it somehow aligns and balances the different AC signals coming off the roof into two 60Hz AC phases, but I have no idea how! Maybe it&#x27;s just an expensive subpanel with a busbar and some breakers, who knows.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, on the other part of the wall we have three &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;store&#x2F;storage&#x2F;gen3&#x2F;iq-battery-5p&quot;&gt;Enphase 5P Batteries&lt;&#x2F;a&gt;, storing 5 kWh each
(as DC, obviously, since you can&#x27;t store AC). Each of them has six built-in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;download&#x2F;iq8d-bat-microinverter-data-sheet&quot;&gt;IQ8D microinverters&lt;&#x2F;a&gt; capable of putting out about 600W, so each battery can provide about 3.6 kW of instantaneous power.&lt;&#x2F;p&gt;
&lt;p&gt;The solar and the batteries both land on an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;store&#x2F;storage&#x2F;gen3&#x2F;iq-system-controller-3m&quot;&gt;Enphase IQ System Controller 3M&lt;&#x2F;a&gt;, which merges all that power together and directs charge&#x2F;discharge of the batteries. Unlike older Enphase systems, all of the communication is over powerline Ethernet instead of Zigbee.&lt;&#x2F;p&gt;
&lt;p&gt;The System Controller connects to the main panel in two ways: first, there&#x27;s a 100A backfeed circuit to power the house with up to 19.2 kW of power; second, the System Controller is connected to the meter with an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;store&#x2F;storage&#x2F;gen4&#x2F;iq-meter-collar&quot;&gt;IQ Meter Collar&lt;&#x2F;a&gt; , which allows the system to operate safely during an outage to provide whole-home backup without energizing PG&amp;amp;E&#x27;s grid.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;management-officially&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#management-officially&quot; aria-label=&quot;Anchor link for: management-officially&quot;&gt;Management, Officially&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;So, how do you see what the system is doing and control it? It&#x27;s all done through an Enphase app called Enlighten,
available both as a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enlighten.enphaseenergy.com&quot;&gt;webapp&lt;&#x2F;a&gt; and a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;enphase-enlighten&#x2F;id787415770&quot;&gt;mobile app&lt;&#x2F;a&gt;. The mobile app is mostly just a wrapper around the webapp; there&#x27;s almost no native functionality. Both of these tools
are &lt;strong&gt;incredibly slow&lt;&#x2F;strong&gt;. I just benchmarked launching the iOS app on my phone&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-phone-1&quot;&gt;&lt;a href=&quot;#fn-phone&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and it takes 13-21 seconds to start up. Once it
starts up, it&#x27;s not responsive to taps at all and many features take forever to load. It also doesn&#x27;t support widgets or App Intents
or anything else someone might want on a modern Apple platform. The webapp usually loads faster, but has a &quot;do not sell my
personal information&quot; banner that can&#x27;t be dismissed and the layout is broken at lots of screen sizes (including the one in this screenshot).&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;enlighten-ios.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;enlighten-ios.f6f8e55d9026930f.jpg&quot; alt=&quot;Enlighten iOS app&quot; title=&quot;Enlighten iOS app&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;enlighten-desktop.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;enlighten-desktop.f1c4ad94d95de165.png&quot; alt=&quot;Enlighten website&quot; title=&quot;Enlighten website&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I don&#x27;t really need my data hosted in some cloud service anyway. Isn&#x27;t there a way to get this information directly off the Enphase
system gateway (which is known as &lt;strong&gt;Envoy&lt;&#x2F;strong&gt;)?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yes-duh&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yes-duh&quot; aria-label=&quot;Anchor link for: yes-duh&quot;&gt;Yes, Duh&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;This would be a short story if there weren&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;It turns out that Enphase provides a &lt;em&gt;documented&lt;&#x2F;em&gt; open API to get data off of the Envoy! The documentation is pretty hard to find,
but it&#x27;s still around at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;download&#x2F;iq-gateway-access-using-local-apis-or-local-ui-token-based-authentication-tech-brief&quot;&gt;https:&#x2F;&#x2F;enphase.com&#x2F;download&#x2F;iq-gateway-access-using-local-apis-or-local-ui-token-based-authentication-tech-brief&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;You need to obtain a JWT from some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;entrez.enphaseenergy.com&quot;&gt;dinky web service&lt;&#x2F;a&gt;
(which expires after a year and can&#x27;t be renewed without an interactive
session, alas), but then you can get all kinds of nice JSON data. Sometimes it&#x27;s oddly slow (like, 15-20 seconds), and there&#x27;s
no authz, so that same token that can read the data can also reconfigure the system, so you &lt;em&gt;definitely&lt;&#x2F;em&gt; don&#x27;t want to expose
the Envoy directly to the Internet.&lt;&#x2F;p&gt;
&lt;p&gt;So, I wrote a small Rust application named &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;roguelazer&#x2F;envoyproxy&quot;&gt;&lt;code&gt;envoyproxy&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-envoyproxy-1&quot;&gt;&lt;a href=&quot;#fn-envoyproxy&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; that polls the Envoy API every
minute and serves the most recent result and some other metrics as JSON and Prometheus. I&#x27;m running mine in my little k8s cluster here,
using the excellent &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailscale.com&#x2F;kb&#x2F;1236&#x2F;kubernetes-operator&quot;&gt;Tailscale Kubernetes operator&lt;&#x2F;a&gt; to expose it to my Tailnet
so I can reach it from anywhere.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;but-why&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#but-why&quot; aria-label=&quot;Anchor link for: but-why&quot;&gt;But why?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The immediate goal here was to have a pleasant iOS experience for seeing system status, so I&#x27;ve also built a SwiftUI app, tentatively codenamed
&lt;q&gt;Sunny Days&lt;&#x2F;q&gt;:&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;sunny-days-ios.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;sunny-days-ios.b09bd5010149a95a.png&quot; alt=&quot;Sunny Days on iOS&quot; title=&quot;Sunny Days on iOS&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;sunny-days-widgets.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;sunny-days-widgets.cf74e29440930c3b.png&quot; alt=&quot;Sunny Days iOS Widgets&quot; title=&quot;Sunny Days iOS Widgets&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;sunny-days-mac.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;sunny-days-mac.e263a6151a33ee6a.png&quot; alt=&quot;Sunny Days on macOS&quot; title=&quot;Sunny Days on macOS&quot; class=&quot;noshadow&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;It&#x27;s pretty ugly, but it takes 14MiB of RAM and launches in approximately 300ms. Not too bad for something cracked up on a weekend by
someone with absolutely no Swift experience.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m not sure what to do with it. It&#x27;d never make it onto the App Store — a third-party unsupported client for a proprietary
solar system which requires running an open-source server somewhere? Maybe it&#x27;ll just live on my and my wife&#x27;s devices through TestFlight
forever...&lt;&#x2F;p&gt;
&lt;p&gt;I also, of course, have a Prometheus instance ingesting these metrics, connected to Grafana.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2025-envoy&amp;#x2F;grafana.png&quot; alt=&quot;Grafana&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;h3 id=&quot;anything-else&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#anything-else&quot; aria-label=&quot;Anchor link for: anything-else&quot;&gt;Anything else?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Yeah, the other thing is &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates-2024&#x2F;&quot;&gt;my car&lt;&#x2F;a&gt;. It&#x27;s connected to an
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;shop.emporiaenergy.com&#x2F;collections&#x2F;ev-chargers&quot;&gt;Emporia EVSE&lt;&#x2F;a&gt; on a fat 60A circuit. However, most of the time
I&#x27;d prefer to charge it slowly with excess solar. This is... not supported&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ocpp-1&quot;&gt;&lt;a href=&quot;#fn-ocpp&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are really two options:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Pull out the Emporia EVSE and put in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;ev-chargers&quot;&gt;Enphase&#x27;s&lt;&#x2F;a&gt;, which can talk to the &lt;abbr title=&quot;current transformer&quot;&gt;CT&lt;&#x2F;abbr&gt;s in the Enphase boxes and natively do excess-solar charging. This would require  permit and an electrician and a new EVSE and would probably come to around $1000&lt;&#x2F;li&gt;
&lt;li&gt;Add the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.emporiaenergy.com&#x2F;energy-monitors&#x2F;&quot;&gt;Emporia Vue CTs&lt;&#x2F;a&gt; to the solar subpanel and main panel. This would require two sets (around $300) and &lt;em&gt;should&lt;&#x2F;em&gt; be done by a licensed electrician, so still pretty steep&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I didn&#x27;t want to do that, so instead I wrote a small Python program that reads the Envoy data every few minutes and uses it to
adjust the Emporia charge rate up-or-down. It&#x27;s not as nice, because it&#x27;s not instantaneous so sometimes it&#x27;ll draw amps from the batteries
or the grid for minute, but that&#x27;s not a big deal to me, and the cost was $0. It&#x27;s called
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&#x2F;emporia-enphase-control&quot;&gt;emporia-enphase-control&lt;&#x2F;a&gt; and is... pretty rough around the edges&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-volt-amps-1&quot;&gt;&lt;a href=&quot;#fn-volt-amps&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
It does work, though! It&#x27;s running in Kubernetes, right alongside &lt;code&gt;envoyproxy&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;that-s-it-right&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#that-s-it-right&quot; aria-label=&quot;Anchor link for: that-s-it-right&quot;&gt;That&#x27;s it, right?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;For now. We&#x27;re still adapting to life with solar; it&#x27;s a surprising number of changes. For example, we usually ran
the dishwasher and the dryer at night (when the grid is the cheapest), but now that power is totally free while the sun&#x27;s up
(the batteries are quite finite, especially when the A&#x2F;C is running overnight on hot weeks like this one) it makes no
sense to run these expensive appliances&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-expensive-1&quot;&gt;&lt;a href=&quot;#fn-expensive&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; at night.&lt;&#x2F;p&gt;
&lt;p&gt;So far, we have only drawn a negligible amount of power from the grid this week&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-grid-1&quot;&gt;&lt;a href=&quot;#fn-grid&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-string-inverter&quot;&gt;
&lt;p&gt;This is to be contrasted with the more-traditional &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energysage.com&#x2F;solar&#x2F;string-inverters-overview&#x2F;&quot;&gt;&quot;string inverter&quot;&lt;&#x2F;a&gt; deployment, where the solar panels are all connected in series and send DC off the roof to a single large inverter at ground-level &lt;a href=&quot;#fr-string-inverter-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-phone&quot;&gt;
&lt;p&gt;an iPhone 16 Pro with the fastest single-core processor performance in the world, connected to WiFi 6 and a 10Gbps Internet connection &lt;a href=&quot;#fr-phone-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-envoyproxy&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.envoyproxy.io&quot;&gt;this is not an ambiguous name at all&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-envoyproxy-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-ocpp&quot;&gt;
&lt;p&gt;It really should be! There&#x27;s a protocol called the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openchargealliance.org&#x2F;protocols&#x2F;open-charge-point-protocol&#x2F;&quot;&gt;Open Charge Point Protocol&lt;&#x2F;a&gt; that should standardize these interconnects, but none of my devices support it. I guess I should&#x27;ve gotten a Wallbox... &lt;a href=&quot;#fr-ocpp-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-volt-amps&quot;&gt;
&lt;p&gt;I&#x27;m sure the distinction between watts and volt-amps in a mixed DC&#x2F;AC system is not important, right? &lt;a href=&quot;#fr-volt-amps-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-expensive&quot;&gt;
&lt;p&gt;A single dryer load consumes something like 4kWh of energy --- gotta get myself one of those fancy
heat-pump combo units that only consumes 1.4 kWh for a wash &lt;em&gt;and&lt;&#x2F;em&gt; a dry cycle &lt;a href=&quot;#fr-expensive-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-grid&quot;&gt;
&lt;p&gt;~300Wh day, more than offset by the several kWh we&#x27;ve sold back. I wish I knew why the system ends up drawing ~14W from the grid, all the time... &lt;a href=&quot;#fr-grid-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Here comes the sun!</title>
          <pubDate>Sat, 16 Aug 2025 21:58:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-solar/</link>
          <guid>https://www.roguelazer.com/blog/2025-solar/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-solar/">&lt;p&gt;Did you know that the sun is a mass of incandescent gas, a gigantic nuclear furnace?
A source of a constant stream of high-energy photons?&lt;&#x2F;p&gt;
&lt;p&gt;Did you know that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pge.com&quot;&gt;PG&amp;amp;E&lt;&#x2F;a&gt; is a
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;calmatters.org&#x2F;newsletters&#x2F;whatmatters&#x2F;2022&#x2F;02&#x2F;california-pge-safety-license&#x2F;&quot;&gt;gigantic&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;abc30.com&#x2F;post&#x2F;california-regulators-approve-pges-5th-rate-hike-2024&#x2F;15679054&#x2F;&quot;&gt;racket&lt;&#x2F;a&gt;
with some of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.electricchoice.com&#x2F;electricity-prices-by-state&#x2F;&quot;&gt;highest rates in the state&lt;&#x2F;a&gt;?
We pay 61¢&#x2F;kWh for electricity during peak times&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-peak-1&quot;&gt;&lt;a href=&quot;#fn-peak&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, about seven times as much as my wife paid at
her old Philly apartment — given the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.eia.gov&#x2F;energyexplained&#x2F;use-of-energy&#x2F;electricity-use-in-homes.php&quot;&gt;US Energy Information Administration&#x27;s estimate&lt;&#x2F;a&gt; of
10.5MWh&#x2F;household&#x2F;year, that&#x27;s between $3600 and $6400&#x2F;year of electricity.&lt;&#x2F;p&gt;
&lt;p&gt;Suffice to say, we&#x27;ve been planning on putting solar panels on the roof since we bought this house. Thankfully,
solar technology is &lt;strong&gt;amazing&lt;&#x2F;strong&gt;. Panels have gotten almost &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ourworldindata.org&#x2F;grapher&#x2F;solar-pv-prices&quot;&gt;40 times cheaper&lt;&#x2F;a&gt;
(&lt;em&gt;accounting&lt;&#x2F;em&gt; for inflation) in my lifetime! Emissions-free! Long-lived! Quite possibly the most
remarkable technological development in my lifetime&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-tech-1&quot;&gt;&lt;a href=&quot;#fn-tech&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;That being said, we had to do a &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates-2024&#x2F;&quot;&gt;ton of work on this house&lt;&#x2F;a&gt; and it was my hope to
hold off on solar for a year or two, reap some benefit of those plummeting prices. Then the country elected
Orange Hitler for an improbable second term, and I took him at full faith that he was going to do everything
in his power to kill the burgeoning solar industry as a favor to his friends in the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apnews.com&#x2F;article&#x2F;trump-coal-industry-mining-fact-check-69bc9919c2899a87c65c4c89a84a973e&quot;&gt;earth-murdering industry&lt;&#x2F;a&gt;, so
I pushed as hard as I could to get the solar panels on the roof before it was too late.&lt;&#x2F;p&gt;
&lt;p&gt;I started by reaching out to other people who I know who&#x27;ve gotten solar panels installed, and their answers all came down to,
&lt;q&gt;We love our panels but our installers were &lt;em&gt;meh&lt;&#x2F;em&gt; so you should look elsewhere.&lt;&#x2F;q&gt; While I did a crash-course on
residential solar, I set up an account on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energysage.com&quot;&gt;EnergySage&lt;&#x2F;a&gt;, which is sort of industry-sponsored
aggregator for solar installers. I ended up getting quotes from seven companies through EnergySage, plus three others that I found
elsewhere. There were a few dimensions to consider:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Panels&lt;&#x2F;strong&gt;: most of the installers were quoting &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.recgroup.com&#x2F;en-us&#x2F;rec-alpha-pure-2&quot;&gt;REC Alpha Pure 2&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.recgroup.com&#x2F;en-us&#x2F;rec-alpha-pure-rx&quot;&gt;REC Alpha Pure-RX&lt;&#x2F;a&gt; panels in between 420W and 480W per panel; a couple were the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;runergyusa.com&#x2F;wp-content&#x2F;uploads&#x2F;2024&#x2F;03&#x2F;DH108P8B.pdf&quot;&gt;Hyperion&#x2F;Runergy HY-DH108P8 series&lt;&#x2F;a&gt; at between 400W and 415W per panel. I&#x27;m &lt;em&gt;really&lt;&#x2F;em&gt; not qualified to evaluate the chemistry or physics of the panels, but bigger number = better, and better warranty = better; both of those favored the REC panels&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Inverters&lt;&#x2F;strong&gt;: the main dimension is &lt;em&gt;string inverters&lt;&#x2F;em&gt; versus &lt;em&gt;microinverters&lt;&#x2F;em&gt;; basically, string inverters take DC power off the roof
and invert it to AC with big inverters at ground level; this is theoretically more efficient but makes it much more complicated to handle unbalanced power (e.g., when shaded); whereas microinverters invert the DC to AC in each panel on the roof and then take the (in-phase) AC off the roof and combine it with cheapish AC combiners at ground level. I can see the advantages of both approaches, and there are an infinite number of infotainment-quality articles arguing in favor of one versus another. I did talk to some electrical engineers who were basically all in favor of minimizing the number of AC&#x2F;DC conversions.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Batteries&lt;&#x2F;strong&gt;: Under &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.energysage.com&#x2F;blog&#x2F;net-metering-3-0&#x2F;&quot;&gt;NEM3&lt;&#x2F;a&gt;, you basically have to have batteries, since PG&amp;amp;E will only pay you about 25% of the standard rate for electricity you sell back, so it&#x27;s no longer cost-effective to overproduce during the day and then consume from the grid at night. The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.tesla.com&#x2F;powerwall&quot;&gt;Tesla Powerwall&lt;&#x2F;a&gt; is the 3000-lb gorilla in the room and dominates this market, but there are a few other players&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-batteries-anker-1&quot;&gt;&lt;a href=&quot;#fn-batteries-anker&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Practically, for an integrated system with battery storage in California on short notice, there are two options:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Tesla Powerwall + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.solaredge.com&#x2F;us&#x2F;products&#x2F;residential&#x2F;pv-inverters&#x2F;solaredge-home-hub-inverters&quot;&gt;SolarEdge string inverters&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&quot;&gt;Enphase&lt;&#x2F;a&gt; microinverters and batteries&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I also got one very intriguing quote based on the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.lunarenergy.com&quot;&gt;Lunar Energy&lt;&#x2F;a&gt; system, but we&#x27;d be one of the
first customers in PG&amp;amp;E and I didn&#x27;t &lt;em&gt;really&lt;&#x2F;em&gt; want to be a beta tester&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-beta-tester-1&quot;&gt;&lt;a href=&quot;#fn-beta-tester&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, after evaluating all the quotes and reading every BBB and Yelp review I could find, I decided to go with a fairly large company
based in Southern California named &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sunergycorp.com&quot;&gt;Sunergy&lt;&#x2F;a&gt;. I didn&#x27;t (and still don&#x27;t) want to give Tesla&#x2F;Elon Musk any money,
which meant going with Enphase, and Sunergy was both the best Enphase quote and one of two that was
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;blog&#x2F;professionals&#x2F;installer-stories&#x2F;installer-spotlight-sunergy-corp&quot;&gt;&quot;Enphase Platinum&quot; certified&lt;&#x2F;a&gt;, whatever that means. I signed a contract with them on December 14th, 2024, and the system design was completed on December 19th. Then, we waited.&lt;&#x2F;p&gt;
&lt;p&gt;It took the City of Oakland about 6 weeks to review and approve the permit, but on March 3rd we were approved to proceed. In the meantime,
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2025-02-baby-plus-plus&#x2F;&quot;&gt;I&#x27;d been busy&lt;&#x2F;a&gt;. Installation was scheduled for March 31st. Come March 30th, installation was
cancelled due to supply chain issues&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-supply-chain-1-1&quot;&gt;&lt;a href=&quot;#fn-supply-chain-1&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and pushed back to April 3rd. Then April 10th. Finally, on April 16th, the panels showed up and were put on the roof — only a few days before Cheeto Mussolini slapped a so-bad-it&#x27;s-almost-funny
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;business&#x2F;2025&#x2F;apr&#x2F;22&#x2F;us-huge-tariffs-south-east-asian-solar-panels-energy-summit&quot;&gt;&lt;strong&gt;3,521%&lt;&#x2F;strong&gt; tariff on solar panels&lt;&#x2F;a&gt; and nuked the entire industry. Not only had I gotten the panels installed, but I was in a beta program&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-beta-tester-2-1&quot;&gt;&lt;a href=&quot;#fn-beta-tester-2&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; to have the batteries set up in &quot;whole-home backup&quot; mode using the brand-spanking-new &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;enphase.com&#x2F;store&#x2F;storage&#x2F;gen4&#x2F;iq-meter-collar&quot;&gt;Enphase IQ Meter Collar&lt;&#x2F;a&gt; as a transfer switch.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-iq-collar-1&quot;&gt;&lt;a href=&quot;#fn-iq-collar&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This whole experience so far is pretty frustrating; like basically all home-improvement contracting projects in the US, the homeowner
ends up serving as &lt;em&gt;de facto&lt;&#x2F;em&gt; project manager and every site visit involves hours of coordinating between various sub-contractors
and laborers. But at this point, when I was ready to declare victory in April, I hadn&#x27;t even gotten to the worst of it.
Let&#x27;s recap the process of getting solar on your roof:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;You pay a buttload of money&lt;&#x2F;li&gt;
&lt;li&gt;Someone puts panels on your roof that can&#x27;t do anything&lt;&#x2F;li&gt;
&lt;li&gt;Someone with an electrician&#x27;s license wires them into your panel so they can theoretically do something&lt;&#x2F;li&gt;
&lt;li&gt;The city inspects the panels and the wiring to make sure they&#x27;re safe&lt;&#x2F;li&gt;
&lt;li&gt;You pay another buttload of money&lt;&#x2F;li&gt;
&lt;li&gt;The utility gives you &lt;em&gt;&quot;Permission to Operate&quot;&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;You can turn your panels on&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Do you see the weak link in all of this? It&#x27;s step 6, where your utility (in my case, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pge.com&quot;&gt;PG&amp;amp;E&lt;&#x2F;a&gt;) has to give you &quot;Permission to Operate&quot; or &quot;PTO&quot;. There&#x27;s no particular timeframe in which they must do so, and it&#x27;s a completely opaque process where your installer files some paperwork and you... wait. It took the city &lt;strong&gt;14&lt;&#x2F;strong&gt; days to inspect and approve the install, and then it took PG&amp;amp;E an additional &lt;strong&gt;63&lt;&#x2F;strong&gt; days to give me PTO, during which time I was legally forbidden from turning the panels on and had to keep paying PG&amp;amp;E out the nose. Having
a company whose profits depend on &lt;em&gt;not&lt;&#x2F;em&gt; giving you PTO get to decide at their own leisure when you can turn on your panels seems obviously
bad.&lt;&#x2F;p&gt;
&lt;p&gt;But wait, there&#x27;s more! Remember how I was in that beta program for the IQ Meter Collar? It turns out that meter collars have
to be installed by a PG&amp;amp;E electrician. In addition to being a beta for Enphase, this is also still a beta at PG&amp;amp;E (run out of the
&quot;SNEM Paired Storage&quot; group), and all of this... beta-ness... is expected to be handled by the installer.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, while I was staring at some photovoltaic depreciating assets and sitting on my hands, Sunergy appears to have been
imploding&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-imploding-1&quot;&gt;&lt;a href=&quot;#fn-imploding&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I got fobbed off to a series of account managers (all of whom ended up leaving the company) and at this point the only contact
I still have is their long-suffering founder Chris Hammerstone, whose phone is literally always busy. Eventually I realized that the
only way to get attention was to go make a fuss with Enphase, which I did, and then Enphase and Chris somehow joined forces and got PG&amp;amp;E to
come plug in the meter collar. That was... last week, August 8th. The final (post-meter-collar-install) setup bits were done this week and
the system has been online since Thursday August 14th. Exactly eight months between contract signing and system completion. Eesh!&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, the power&#x27;s on. Some takeaways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;These panels can produce 40 kWh on a sunny summer day&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-panels-1&quot;&gt;&lt;a href=&quot;#fn-panels&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and 25 kWh on a cloudy day&lt;&#x2F;li&gt;
&lt;li&gt;I have 15 kWh of batteries and I can already tell it isn&#x27;t going to be enough on winter days&lt;&#x2F;li&gt;
&lt;li&gt;My house uses like 400W just sitting there empty. I guess that&#x27;s the fridge&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fridge-1&quot;&gt;&lt;a href=&quot;#fn-fridge&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, the NAS&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-NAS-1&quot;&gt;&lt;a href=&quot;#fn-NAS&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and the Ubiquiti gear&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-Ubiquiti-1&quot;&gt;&lt;a href=&quot;#fn-Ubiquiti&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;? Seems high! I bet I could get that down by 50% if I went and put a meter on every power brick in the house.&lt;&#x2F;li&gt;
&lt;li&gt;Phases A and B are also way out of balance; I think all of the big single-pole appliances I have are on the same phase. Oops.&lt;&#x2F;li&gt;
&lt;li&gt;Electric dryers are brutal; we (unthinkingly) ran the dryer last night and burned something like 8kWh of battery on two loads. Once this dryer dies (it&#x27;s a 10-year-old LG, how long could it have), I&#x27;m definitely getting a heat pump dryer, since they&#x27;re supposedly around 80% less energy per load.&lt;&#x2F;li&gt;
&lt;li&gt;The Enphase iOS app (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apps.apple.com&#x2F;us&#x2F;app&#x2F;enphase-enlighten&#x2F;id787415770&quot;&gt;Enlighten&lt;&#x2F;a&gt;) really sucks&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-enlighten-1&quot;&gt;&lt;a href=&quot;#fn-enlighten&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I&#x27;m making my own and will be posting about that hopefully in a couple of days.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Will any of these companies be around to support these products in a few years? Are we all going to end up in a wasteland
playing a double-necked flamethrower&#x2F;guitar on the front of a semi truck for the amusement of our god-kings? Who knows!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-peak&quot;&gt;
&lt;p&gt;And 35¢&#x2F;kWh at the minimum-cost time, in the wee small hours of the morning. &lt;a href=&quot;#fr-peak-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-tech&quot;&gt;
&lt;p&gt;Other candidates: smartphones, Wikipedia, mRNA vaccines &lt;a href=&quot;#fr-tech-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-batteries-anker&quot;&gt;
&lt;p&gt;Really, given how much they dominate in the portable-battery space, this is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.anker.com&quot;&gt;Anker&#x27;s&lt;&#x2F;a&gt; game to lose, and I&#x27;m surprised that I didn&#x27;t see a single company installing their &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ankersolix.com&quot;&gt;Anker Solix&lt;&#x2F;a&gt; product. &lt;a href=&quot;#fr-batteries-anker-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-beta-tester&quot;&gt;
&lt;p&gt;Remember that for later in this story &lt;a href=&quot;#fr-beta-tester-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-supply-chain-1&quot;&gt;
&lt;p&gt;Uh oh &lt;a href=&quot;#fr-supply-chain-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-beta-tester-2&quot;&gt;
&lt;p&gt;You know, the thing I didn&#x27;t really want to be in &lt;a href=&quot;#fr-beta-tester-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-iq-collar&quot;&gt;
&lt;p&gt;How new? Well, I got mine set up in mid-April and they weren&#x27;t officially approved by PG&amp;amp;E until June. &lt;a href=&quot;#fr-iq-collar-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-imploding&quot;&gt;
&lt;p&gt;Always good when a business starts getting all 1-star Yelp reviews &lt;em&gt;after&lt;&#x2F;em&gt; you&#x27;re in bed with them &lt;a href=&quot;#fr-imploding-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-panels&quot;&gt;
&lt;p&gt;They could produce more if they were installed better; right now, I have ~9000W of panels connected through two 20A breakers, which at the 80% NEC rule means that we&#x27;re clipping at 7.04 kW. I recognize that it would&#x27;ve been expensive to take some of the panels and run a third string on a third breaker, and that it won&#x27;t matter during most of the year when the panels will struggle to produce 7kW, but still... &lt;a href=&quot;#fr-panels-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-fridge&quot;&gt;
&lt;p&gt;Rated for 75W idle &lt;a href=&quot;#fr-fridge-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-NAS&quot;&gt;
&lt;p&gt;rated for the weirdly-specific 21.71W idle &lt;a href=&quot;#fr-NAS-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-Ubiquiti&quot;&gt;
&lt;p&gt;currently doing 23.99W of PoE plus however much the non-PoE devices are drawing &lt;a href=&quot;#fr-Ubiquiti-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-enlighten&quot;&gt;
&lt;p&gt;Even though it&#x27;s just a webview, it takes around 90 seconds to start and often just hangs forever &lt;a href=&quot;#fr-enlighten-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>No More Categories</title>
          <pubDate>Sun, 29 Jun 2025 12:37:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/no-categories/</link>
          <guid>https://www.roguelazer.com/blog/no-categories/</guid>
          <description xml:base="https://www.roguelazer.com/blog/no-categories/">&lt;p&gt;This site has had both &lt;a href=&quot;&#x2F;category&#x2F;&quot;&gt;&quot;Categories&quot;&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;tags&#x2F;&quot;&gt;&quot;Tags&quot;&lt;&#x2F;a&gt; since it was on
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;blog&#x2F;&quot;&gt;Blogger in 2007&lt;&#x2F;a&gt;. It occurs to me that this doesn&#x27;t really
make any sense, so I&#x27;m hiding the categories and won&#x27;t be populating them going forward.
The old category index pages are live (because &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;Provider&#x2F;Style&#x2F;URI&quot;&gt;cool URIs don&#x27;t change&lt;&#x2F;a&gt;)
but otherwise, it&#x27;s all tags from here on out.&lt;&#x2F;p&gt;
&lt;p&gt;A few other small changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;updated some CSS&lt;&#x2F;li&gt;
&lt;li&gt;fixed missing &lt;code&gt;&amp;lt;&#x2F;li&amp;gt;&lt;&#x2F;code&gt; in page metadata block&lt;&#x2F;li&gt;
&lt;li&gt;chnged post time to be a &lt;code&gt;&amp;lt;time&amp;gt;&lt;&#x2F;code&gt; so it&#x27;s machine-parsable, and stopped displaying post time by default&lt;&#x2F;li&gt;
&lt;li&gt;added signal and hackernews to the &lt;a href=&quot;#social_links&quot; style=&quot;font-variant: small-caps&quot;&gt;Social&lt;&#x2F;a&gt; sidebar, and removed two defunct sites&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;blog&#x2F;&quot;&gt;archive&lt;&#x2F;a&gt; now shows tag information&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Something New</title>
          <pubDate>Fri, 27 Jun 2025 16:11:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/something-new/</link>
          <guid>https://www.roguelazer.com/blog/something-new/</guid>
          <description xml:base="https://www.roguelazer.com/blog/something-new/">&lt;p&gt;Yesterday, I left my job at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.instrumentl.com&quot;&gt;Instrumentl&lt;&#x2F;a&gt;,
which I&#x27;d been at since &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;whats-next&#x2F;&quot;&gt;leaving easypost almost three years ago&lt;&#x2F;a&gt;.
It was an interesting experience; I don&#x27;t know that I&#x27;d choose to do it again, but it&#x27;s always good to broaden one&#x27;s horizons
and try new things.&lt;&#x2F;p&gt;
&lt;p&gt;I was only at Instrumentl for about 990 calendar days&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-days-1&quot;&gt;&lt;a href=&quot;#fn-days&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but I like to think that I got a lot done in that time. When I started,
the dev team was only six folks (two people in the US, one in Canada, and three in Türkiye);
now it&#x27;s something like 18&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-people-1&quot;&gt;&lt;a href=&quot;#fn-people&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. When I started, MFA was disabled
in every tool and lots of people were logging into shared administrator accounts; now the company is on much more solid footing and
perhaps even on a path to finish a SOC2 in a year or so. I built a few customer-facing features
(including the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.instrumentl.com&#x2F;api-docs&quot;&gt;public API&lt;&#x2F;a&gt;, SSO and MFA) from scratch, and a ton of
internal tools. I was only there a couple of years, but (as usual) I found myself on top of
the all-time productivity leaderboards by whatever metric you care to measure&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-metrics-1&quot;&gt;&lt;a href=&quot;#fn-metrics&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Not that these things matter; nobody cares who
wrote the most commits or who fixed the most security issues, and anybody who thinks you can objectively measure engineering performance
is trying to sell you something that isn&#x27;t worth buying.&lt;&#x2F;p&gt;
&lt;p&gt;Instrumentl was the first company I&#x27;ve worked at where I was primarily doing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ruby-lang.org&#x2F;en&#x2F;&quot;&gt;Ruby&lt;&#x2F;a&gt;, which was kind of neat.
Ruby was the first programming language I &lt;em&gt;really&lt;&#x2F;em&gt; learned, about 20 years ago&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-programming-ruby-1&quot;&gt;&lt;a href=&quot;#fn-programming-ruby&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and maybe the first &lt;em&gt;programming&lt;&#x2F;em&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-programming-1&quot;&gt;&lt;a href=&quot;#fn-programming&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; job
I had was working on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hmc.edu&#x2F;cs&#x2F;&quot;&gt;HMC CS&lt;&#x2F;a&gt; Staff porting the internally-developed ticket tracking tool&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-request-1&quot;&gt;&lt;a href=&quot;#fn-request&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; from Rails 1 to Rails 2.
I did a fair amount of Ruby&#x2F;Rails at Easypost, of course, but Instrumentl was &lt;em&gt;all&lt;&#x2F;em&gt; Rails. It&#x27;s... definitely a lot nicer
than it was in 2008! I still think it&#x27;s practically-perlish in how hard it is to read, though. I&#x27;m more-convinced than ever that implicit
receivers (that is to say, being able to just type &lt;code&gt;foo&lt;&#x2F;code&gt; instead of &lt;code&gt;self.foo()&lt;&#x2F;code&gt; to call an instance method named &lt;code&gt;foo&lt;&#x2F;code&gt;) is a nightmare
for reliability and code maintenance.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, some of why I&#x27;ve left comes down to differences over the direction of the company, some because I simply can&#x27;t stomach
reviewing one more bad PR or bloated document that someone clearly let ChatGPT loose on without thinking about the consequences, and
because I&#x27;m ready to work on something new and exciting. I&#x27;ve got a couple of days before I start at the new place, which is going to be
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.svix.com&quot;&gt;Svix&lt;&#x2F;a&gt;, writing Rust full-time. Let me know if you&#x27;re reading this in real-time and are bored next week and want to hang out. :-)&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-days&quot;&gt;
&lt;p&gt;and obviously far fewer working days, between weekends, holidays, company offsites, and parental leave! &lt;a href=&quot;#fr-days-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-people&quot;&gt;
&lt;p&gt;that is to say, 17 engineers, one manager, between four and six product managers &lt;em&gt;(depending on how you count execs wearing multiple hats)&lt;&#x2F;em&gt;, 3½ designers, and a partridge in a pear tree &lt;a href=&quot;#fr-people-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-metrics&quot;&gt;
&lt;p&gt;tickets, commits (about 3600, all squashed), lines of code, number of wiki pages, whatever &lt;a href=&quot;#fr-metrics-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-programming-ruby&quot;&gt;
&lt;p&gt;using a hard-copy of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;ruby-doc.com&#x2F;docs&#x2F;ProgrammingRuby&#x2F;&quot;&gt;Programming Ruby&lt;&#x2F;a&gt; which I scrimped and saved to buy &lt;a href=&quot;#fr-programming-ruby-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-programming&quot;&gt;
&lt;p&gt;as opposed to IT or sysadmin work &lt;a href=&quot;#fr-programming-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-request&quot;&gt;
&lt;p&gt;named &lt;code&gt;request&lt;&#x2F;code&gt;; now, alas, replaced by some terribly-enterprisey version of RT &lt;a href=&quot;#fr-request-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>New Keyboard</title>
          <pubDate>Wed, 28 May 2025 12:29:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-05-new-keyboard/</link>
          <guid>https://www.roguelazer.com/blog/2025-05-new-keyboard/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-05-new-keyboard/">&lt;p&gt;I&#x27;ve been using the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hhkeyboard.us&quot;&gt;Happy Hacking Keyboard&lt;&#x2F;a&gt; in various configurations for the last 12 years; it&#x27;s a great
design for a 60% scale keyboard with all the keys that a Unix person needs and nothing they don&#x27;t; in particular, I
credit its lack of arrow keys with finally getting me to use &lt;code&gt;vim&lt;&#x2F;code&gt; motions correctly. Oh, I&#x27;ve dallied with other
keyboards; for a while at work I had an Apple Wireless Keyboard, and in 2019 I bought a tenkeyless keyboard from
the now-defunct &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20241011070815&#x2F;https:&#x2F;&#x2F;www.wasdkeyboards.com&#x2F;&quot;&gt;WASD Keyboards&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-wasd-1&quot;&gt;&lt;a href=&quot;#fn-wasd&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but I always come back to the HHKB. That being said, the HHKB isn&#x27;t perfect; in particular,
the Topre switches feel a bit mushy&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-mushy-1&quot;&gt;&lt;a href=&quot;#fn-mushy&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; (and get worse the longer you use them), the bluetooth version is garbage that can&#x27;t
maintain a connection reliably, and the cheaply-printed text on keycaps tends to rub off pretty quickly.&lt;&#x2F;p&gt;
&lt;p&gt;Well, I&#x27;m on parental leave now, so I figured I&#x27;d do a Project and put together a new keyboard.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-05-new-keyboard&amp;#x2F;IMG_3565.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;IMG_3565.accb63e563662fec.jpg&quot; alt=&quot;Unassembled&quot; title=&quot;Unassembled&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-05-new-keyboard&amp;#x2F;IMG_3566.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;IMG_3566.c1957b0fb16f7a20.jpg&quot; alt=&quot;It has the RGBs&quot; title=&quot;It has the RGBs&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-05-new-keyboard&amp;#x2F;IMG_3567.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;IMG_3567.70a9367b1efbc80d.jpg&quot; alt=&quot;Fully-assembled&quot; title=&quot;Fully-assembled&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;ingredients&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ingredients&quot; aria-label=&quot;Anchor link for: ingredients&quot;&gt;Ingredients&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.keychron.com&#x2F;products&#x2F;keychron-q60-max-qmk-via-wireless-custom-mechanical-keyboard&quot;&gt;Keychron Q60 Max Barebones&lt;&#x2F;a&gt;: This is a barebones keyboard with the exact same layout as an HHKB&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kailh.net&#x2F;products&#x2F;kailh-white-owl-switch-set&quot;&gt;Kalih White Owl Box Switches&lt;&#x2F;a&gt;: I played with a few switches in key testers and I loved the tactility of these. Reviews are good for the Box line as being more stable than other clicky switches.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;yuzukeycaps.com&quot;&gt;Yuzu Custom Keycaps&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This was the first time I&#x27;d actually assembled a keyboard (I know, it seems like something that I would be doing regularly); it
was pretty easy&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-legos-1&quot;&gt;&lt;a href=&quot;#fn-legos&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. A couple of the switches had bent pins that I couldn&#x27;t quite straighten out, but I bought plenty of spares.
I&#x27;m typing on the keyboard right now! I think it&#x27;s pretty great so far, although obviously I have only been typing with it for a little while. One interesting note is that it&#x27;s &lt;strong&gt;remarkably heavy&lt;&#x2F;strong&gt; — around 1500g fully-assembled (about 3x the HHKB). Not that I carry it around much, but I think I&#x27;ll keep taking the HHKB with me when I go to company offsites.&lt;&#x2F;p&gt;
&lt;aside class=&quot;note&quot;&gt;
&lt;p&gt;One &quot;fun&quot; note for anyone finding this through Google: the firmware for the Q60 Max comes configured by default with the &lt;kbd&gt;&amp;lt;Del&amp;gt;&lt;&#x2F;kbd&gt; key mapped to
forward-delete; this doesn&#x27;t match the HHKB (which binds it to &lt;kbd&gt;&amp;lt;Backspace&amp;gt;&lt;&#x2F;kbd&gt;). You&#x27;ll need use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;launcher.keychron.com&#x2F;#&#x2F;keymap&quot;&gt;Keychron Launcher&lt;&#x2F;a&gt;
from a Blink-based browser to reprogram it.&lt;&#x2F;p&gt;
&lt;&#x2F;aside&gt;
&lt;p&gt;Now all I need is for Apple to get around to releasing a stand-alone TouchID button...&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-wasd&quot;&gt;
&lt;p&gt;Specifically, the WASD V3 87-key with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cherry.de&#x2F;en-gb&#x2F;product&#x2F;mx2a-blue&quot;&gt;Cherry MX Blue&lt;&#x2F;a&gt; switches on it. &lt;a href=&quot;#fr-wasd-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-mushy&quot;&gt;
&lt;p&gt;To be clear, I actually prefer a clicky keyboard; I had an IBM Model M back when I was a kid... &lt;a href=&quot;#fr-mushy-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-legos&quot;&gt;
&lt;p&gt;Perhaps my childhood snapping LEGO pieces together prepared me for this? &lt;a href=&quot;#fr-legos-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>baby++</title>
          <pubDate>Mon, 17 Feb 2025 12:00:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2025-02-baby-plus-plus/</link>
          <guid>https://www.roguelazer.com/blog/2025-02-baby-plus-plus/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2025-02-baby-plus-plus/">&lt;p&gt;Important follow-up to &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;a-son&#x2F;&quot;&gt;A Son!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-02-baby-plus-plus&amp;#x2F;R0000979.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;R0000979.ad7992ea58da01d5.jpg&quot; alt=&quot;baby&quot; title=&quot;baby&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2025-02-baby-plus-plus&amp;#x2F;DSCF1216.jpeg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;DSCF1216.4db3fd1d9b48df33.jpg&quot; alt=&quot;more baby&quot; title=&quot;more baby&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Two kids and a single-family-detached house; oh no am I a yuppie?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Some Good Stuff in 2024</title>
          <pubDate>Sun, 12 Jan 2025 22:16:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2024-good-stuff/</link>
          <guid>https://www.roguelazer.com/blog/2024-good-stuff/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2024-good-stuff/">&lt;p&gt;It&#x27;s January 2025, which means it&#x27;s time to reflect a little about 2024. &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2023-game-reviews&#x2F;&quot;&gt;Last year&lt;&#x2F;a&gt;, I wrote about some video games I liked in 2023, and I thought that for this year, I might expand and just talk about a few things I liked. After all, the world is currently &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.latimes.com&#x2F;california&#x2F;live&#x2F;2025-01-10&#x2F;fire-los-angeles-california-eaton-palisades-updates&quot;&gt;a burning hellscape&lt;&#x2F;a&gt; looking forward to a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;t47inaugural.com&quot;&gt;fascist overthrow of government&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.aljazeera.com&#x2F;news&#x2F;longform&#x2F;2023&#x2F;10&#x2F;9&#x2F;israel-hamas-war-in-maps-and-charts-live-tracker&quot;&gt;a series of apocalyptic wars&lt;&#x2F;a&gt; on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.climate.gov&#x2F;climatedashboard&quot;&gt;a planet no longer suitable to human life&lt;&#x2F;a&gt; and we don&#x27;t even have the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Jimmy_Carter&quot;&gt;best president in the last 50 years&lt;&#x2F;a&gt; around to help out any more — seems like a perfect time for some consumerist escapism.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2024-good-stuff&amp;#x2F;fine.gif&quot; alt=&quot;this is fine&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;</description>
      </item>
      <item>
          <title>Life Updates, 2024</title>
          <pubDate>Sun, 01 Dec 2024 22:45:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/life-updates-2024/</link>
          <guid>https://www.roguelazer.com/blog/life-updates-2024/</guid>
          <description xml:base="https://www.roguelazer.com/blog/life-updates-2024/">&lt;p&gt;So, I haven&#x27;t posted here in a while (excepting the &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;updated-firefox-userchrome&#x2F;&quot;&gt;tiny CSS post&lt;&#x2F;a&gt; this morning, and for fixing &lt;a href=&quot;&#x2F;snow&quot;&gt;jsSnow&lt;&#x2F;a&gt; earlier today). I promise: I have good reason. It&#x27;s been a mighty busy few months!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Firefox userChrome Update</title>
          <pubDate>Sun, 01 Dec 2024 09:47:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/updated-firefox-userchrome/</link>
          <guid>https://www.roguelazer.com/blog/updated-firefox-userchrome/</guid>
          <description xml:base="https://www.roguelazer.com/blog/updated-firefox-userchrome/">&lt;p&gt;If anyone is using the style from my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;firefox&#x2F;&quot;&gt;Firefox post a couple of years ago&lt;&#x2F;a&gt;, you may have noted
that the userChrome styling broke in Firefox 132; here&#x27;s the correct new style for the same visual effect:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide the native tabs &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;TabsToolbar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;toolbar-items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	visibility&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; collapse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; fix the titlebar color and padding &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;browser-titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	background-color&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #C0CAF5);&quot;&gt;--toolbar-bgcolor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	justify-content&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; space-between&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	padding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;px&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;	--inactive-titlebar-opacity&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide the sidebar header so Tree-Style Tabs looks native &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;sidebar-header&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	visibility&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; collapse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Hide the border under where native tabs would be, to get the &amp;quot;unified toolbar&amp;quot; appearance of modern macOS &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;navigator-toolbox&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;	--tabs-border-color&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; transparent&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; the coloration of the titlebar to look like a toolbar &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	background&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #C0CAF5);&quot;&gt;--toolbar-bgcolor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide a single stray vertical line that creeps in if you have tabs hidden &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;titlebar-spacer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #BB9AF7);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;pre-tabs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	border-inline-end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Zola 0.19.0; RSS is back</title>
          <pubDate>Sun, 23 Jun 2024 09:45:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/zola-019/</link>
          <guid>https://www.roguelazer.com/blog/zola-019/</guid>
          <description xml:base="https://www.roguelazer.com/blog/zola-019/">&lt;p&gt;The generator for this site has been updated to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;getzola&#x2F;zola&#x2F;releases&#x2F;tag&#x2F;v0.19.0&quot;&gt;0.19.0&lt;&#x2F;a&gt;; this is most notable because it means that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;RSS&quot;&gt;rss&lt;&#x2F;a&gt; is back! There are now both RSS (&lt;a href=&quot;&#x2F;rss.xml&quot;&gt;&#x2F;rss.xml&lt;&#x2F;a&gt;) and Atom (&lt;a href=&quot;&#x2F;atom.xml&quot;&gt;&#x2F;atom.xml&lt;&#x2F;a&gt;) feeds. Enjoy!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Oh, the humanity</title>
          <pubDate>Mon, 10 Jun 2024 13:10:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2024-oh-the-humanity/</link>
          <guid>https://www.roguelazer.com/blog/2024-oh-the-humanity/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2024-oh-the-humanity/">&lt;p&gt;Today was the keynote for Apple&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.apple.com&#x2F;wwdc24&#x2F;&quot;&gt;World-Wide Developer Conference 2024&lt;&#x2F;a&gt;, and, as all the pundits
predicted, they &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;newsroom&#x2F;2024&#x2F;06&#x2F;introducing-apple-intelligence-for-iphone-ipad-and-mac&#x2F;&quot;&gt;announced&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;apple-intelligence&#x2F;&quot;&gt;&quot;Apple Intelligence&quot;&lt;&#x2F;a&gt;, a new suite of tools building on the current
&quot;Artificial Intelligence&quot; hype bubble&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-bubble-1&quot;&gt;&lt;a href=&quot;#fn-bubble&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I started
out feeling tentatively optimistic that they would continue to use machine learning systems to provide niceties and
augmentation — replacing the two-line summary of new mail in Mail.app with auto-summarization, doing automatic segmentation
to recolor app icons, improving suggestions of photos from your library that might be fun to look at, better speech-to-text
transcription — all of these seemed like totally reasonable features that can be improved by things like vector embeddings,
diffusion models, and deep learning transformers.&lt;&#x2F;p&gt;
&lt;p&gt;Then, of course, we actually got to the &lt;em&gt;Apple Intelligence&lt;&#x2F;em&gt; portion of the presentation. In particular, this scene:&lt;&#x2F;p&gt;





&lt;figure&gt;
  
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2024-oh-the-humanity&amp;#x2F;read-like-a-poem.png&quot; alt=&quot;Screenshot from WWDC24 of the new text rewriting engine making an email &amp;#x27;Read like a poem&amp;#x27;&quot;  &#x2F;&gt;
    
  &lt;figcaption&gt;Fuck. No.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Everybody knows the Steve Jobs line:&lt;&#x2F;p&gt;
&lt;blockquote cite=&quot;https:&#x2F;&#x2F;hbr.org&#x2F;2011&#x2F;08&#x2F;steve-jobss-ultimate-lesson-fo&quot;&gt;Technology alone is not enough. It’s technology married with the liberal arts, married with the humanities, that yields the results that makes our hearts sing.&lt;&#x2F;blockquote&gt;
&lt;p&gt;Well, someone took all of the liberal arts people out of the room when they built this feature and let
the Wall Street AI hype-men steer the ship. This isn&#x27;t a bicycle for the mind,
this is a steamroller for the mind. It&#x27;s
a bulldozer that&#x27;s ready to roll right over any remaining trust you have in the
written word; it&#x27;s taking the tools of disinformation and putting them front
and center in our friendships and our personal lives.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Imagine the scene&lt;&#x2F;strong&gt;: You&#x27;re sitting down and you open your email client&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-unread-1&quot;&gt;&lt;a href=&quot;#fn-unread&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. You have a swath of machine-generated
spam emails in your inbox warning you that you haven&#x27;t yet donated enough money to the Biden campaign, that you need to
ACT NOW, that a Brand™ you purchased from before is having a sale; somehow,
you filter through them all to get an email from your good friend Sole and it&#x27;s got a quirky poem in it inviting you
to a barbecue at his house where you can hang out with your friends. Feels good right? Isn&#x27;t it heartwarming to have
that little touch of humanity, to know that Sole spent a few minutes wordsmithing a fun little poem for this invite?
Later, you&#x27;re talking to Sole and you compliment him on the poem; sheepishly, he responds with &quot;Actually, AI wrote that&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;How do you feel in this moment? Is there any scenario where you don&#x27;t feel cheated? Maybe even lied to? You thought
you were getting a personal note from a friend, and it&#x27;s just more stochastic computer-generated spam. Would you ever
read Sole&#x27;s emails again? I know I wouldn&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m sure this feature got a product manager somewhere a big promotion. Heck, I&#x27;m sure there are people who have become
so inured to everything being algorithmically-generated spam that they won&#x27;t even notice or mind that their friends
are now sending them messages like this. But, Apple&#x27;s ethos&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-marketing-1&quot;&gt;&lt;a href=&quot;#fn-marketing&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; has always been about building tools to
empower users to make art, to create, to be original. I don&#x27;t know what this
is, but it sure as hell isn&#x27;t human creativity.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s not even talk about these hallucinogenic &quot;Image Playground&quot; results and the real artists whose work was surely
purloined to generate them...&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-climate-1&quot;&gt;&lt;a href=&quot;#fn-climate&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;





&lt;figure&gt;
  
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2024-oh-the-humanity&amp;#x2F;image-playground.png&quot; alt=&quot;Apple Image Playground&quot;  &#x2F;&gt;
    
  &lt;figcaption&gt;Apple Image Playground (shudder...)&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Maybe I&#x27;m alone. Maybe nobody else feels the deep and primal outrage at the
thought of parents outsourcing their kids&#x27;
bedtime stories to artificial stupidity, and at the thought of our friends
messages to us being mediated by fancy autocomplete. But, &lt;em&gt;damn!&lt;&#x2F;em&gt; The
resounding &lt;em&gt;&quot;who cares&quot;&lt;&#x2F;em&gt; from the tech industry over the last few months, the
openness to never being able to tell if written text is actually someone&#x27;s
true thoughts or is just adjacent to their thoughts in a 1536-dimensional
vector space... it feels a bit like a betrayal. If you
decide you want to use these tools, feel free to leave me off your barbecue
invite lists, because I don&#x27;t think we have compatible values.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-bubble&quot;&gt;
&lt;p&gt;If you&#x27;re lucky enough to be out of the loop, this is currently
focused on the use of very large neural networks trained on truly enormous
volumes of text which are able to do essentially sophisticated autocomplete
-- sophisticated enough that people with a really depressing theory-of-mind
sometimes believe it&#x27;s intelligent, even though all it&#x27;s doing is picking
the most statistically-likely next word given the previous words. It&#x27;s been
a real eye-opened watching a lot of business executives give up on the idea that
consciousness exists and embrace the idea that a totally deterministic
word-picking automaton can replace their workforces. &lt;a href=&quot;#fr-bubble-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-unread&quot;&gt;
&lt;p&gt;Assuming you&#x27;re not one of the many folks who has given up on email entirely and just has a counter
of hundreds of thousands of unread missives. &lt;a href=&quot;#fr-unread-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-marketing&quot;&gt;
&lt;p&gt;At least, the ethos that their careful marketing team tries to portray. But, I do know people who
work at Apple and do more than pay lip service to it! &lt;a href=&quot;#fr-marketing-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-climate&quot;&gt;
&lt;p&gt;Let&#x27;s also not talk about &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;environment&#x2F;&quot;&gt;Apple 2030&lt;&#x2F;a&gt;, Apple&#x27;s pledge to be zero-net-carbon in a scant 6 years, and how this is going to be affected by sending these queries out to OpenAI et al to burn some megawatts on. &lt;a href=&quot;#fr-climate-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>2024 GPG Key Update</title>
          <pubDate>Sat, 25 May 2024 12:26:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2024-05-gpg-key/</link>
          <guid>https://www.roguelazer.com/blog/2024-05-gpg-key/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2024-05-gpg-key/">&lt;p&gt;My GPG key (&lt;kbd&gt;24F8AA354990F3F562EC014BC6496DEB3DA8E9B5&lt;&#x2F;kbd&gt;) was set to expire on Tuesday. Rather than generate a new one,
I&#x27;ve decided to just extend the lifetime of this one. I&#x27;ve added new EC25519 subkeys if you&#x27;d prefer to use more modern encryption,
and bumped the expiration by another two years.&lt;&#x2F;p&gt;
&lt;p&gt;Over the last two years, the only thing this key has been used for is as a root of trust for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;hkp&#x2F;roguelazer%40roguelazer.com&quot;&gt;keyoxide&lt;&#x2F;a&gt;;
nobody has sent me any mail. Even &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2023&#x2F;12&#x2F;05&#x2F;used-by-only-a-few-nerds-facebook-kills-pgp-encrypted-emails&#x2F;&quot;&gt;Facebook dropped support for PGP&lt;&#x2F;a&gt;.
Anyhow, the key is still alive if you need to reach me that way. You can also &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;signal.me&#x2F;#eu&#x2F;H-_Sg8frrj-SKvQDgrxnGo706HvZTeRHED7fQayJEQkv6uOjizFMi7Imo0DihSxK&quot;&gt;contact me on Signal&lt;&#x2F;a&gt; if you want something
more modern!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>One of my favorite Ruby snippets</title>
          <pubDate>Fri, 23 Feb 2024 16:38:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/if-apply/</link>
          <guid>https://www.roguelazer.com/blog/if-apply/</guid>
          <description xml:base="https://www.roguelazer.com/blog/if-apply/">&lt;p&gt;This is one of my favorite Ruby snippets, which I wrote many years ago and tend to sneak into codebases:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt; Object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt; if_apply&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#FF9800, #E0AF68);&quot;&gt;cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#FF9800, #E0AF68);&quot;&gt;block&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    unless&lt;&#x2F;span&gt;&lt;span&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;is_a?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;TrueClass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;is_a?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;FalseClass&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;      cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; cond&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;present?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; cond&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      block&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #F7768E);&quot;&gt;self&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #F7768E);&quot;&gt;      self&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s super-helpful for cleaning up long method chains when writing in a &quot;pipelined&quot; style. Imagine the following pseudo-Rails code:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt; FooController&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #BB9AF7);&quot;&gt; ApplicationController&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt; index&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt; Item&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;all&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;order&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;asc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;only_squares&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;      items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;square&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;present?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;      items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;paginate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; per_page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is really noisy. The word &lt;code&gt;items&lt;&#x2F;code&gt; is repeated everywhere. Can we make this look a little closer-to a &lt;em&gt;point-free&lt;&#x2F;em&gt; style? With the &lt;code&gt;.if_apply&lt;&#x2F;code&gt; helper, you can rewrite this as the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt; FooController&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #BB9AF7);&quot;&gt; ApplicationController&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt; index&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;    @&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; Item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;      .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;      .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;if_apply&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;only_squares&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; _1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;square&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;      .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;if_apply&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span&gt;params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; _1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;where&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;owner&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;      .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;order&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;asc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;      .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;paginate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; per_page&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you prefer to avoid the &lt;code&gt;_1&lt;&#x2F;code&gt; everwhere, you can replace &lt;code&gt;block.call(self)&lt;&#x2F;code&gt; with &lt;code&gt;instance_exec(&amp;amp;block)&lt;&#x2F;code&gt; to avoid that argument... but then you can&#x27;t reference class variables from the enclosing scope, and you run the
risk of calling private methods in the subject, so I try to avoid &lt;code&gt;instance_exec&lt;&#x2F;code&gt; when possible.&lt;&#x2F;p&gt;
&lt;p&gt;Also, &lt;code&gt;.if_apply&lt;&#x2F;code&gt; is a terrible method name, but there are two hard problems in computer science: naming things, cache invalidation, and off-by-&lt;code&gt;terminated by signal SIGSEGV (Address boundary error)&lt;&#x2F;code&gt;...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Apple Vision Pro Demo Thoughts</title>
          <pubDate>Mon, 19 Feb 2024 12:07:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2024-avp-demo/</link>
          <guid>https://www.roguelazer.com/blog/2024-avp-demo/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2024-avp-demo/">&lt;p&gt;I just did my free 30-minute demo of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;apple-vision-pro&#x2F;&quot;&gt;Apple Vision Pro&lt;&#x2F;a&gt; at the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;retail&#x2F;baystreet&#x2F;&quot;&gt;Apple Store in Emeryville&lt;&#x2F;a&gt; and figured I&#x27;d write down my initial reactions:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;This is the worst Apple Store experience I&#x27;ve ever had. Apparently the connection between the supervisory iPad and the demo AVP unit is very flaky, and their solution is just to have a &lt;em&gt;lot&lt;&#x2F;em&gt; of iPads. The salesperson doing my demo went through five iPads before getting one connected.&lt;&#x2F;li&gt;
&lt;li&gt;Apple Vision Pro is surprisingly... not that heavy. I expected to really feel it, but it feels subjectively lighter on my head than the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;airpods-max&#x2F;&quot;&gt;AirPods Max&lt;&#x2F;a&gt; that I wear at work every day, despite the Vision Pro weighing 50% more than the AirPods Max (600g vs 384g).&lt;&#x2F;li&gt;
&lt;li&gt;In general, this product feels heavily inspired by the AirPods Max. Same color&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-color-1&quot;&gt;&lt;a href=&quot;#fn-color&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, same Digital Crown and button, etc.&lt;&#x2F;li&gt;
&lt;li&gt;The IPD alignment wasn&#x27;t perfect and I still had some doubled vision in the bottom-middle. Easy enough to avoid during the demo by moving my head down when looking at that area, but would be awful if I were using this device every day. I&#x27;d want to retry the demo a couple of times and see if it recurs before spending any money on this product.&lt;&#x2F;li&gt;
&lt;li&gt;For some reason, a small green checkmark appeared in the center of my vision roughly every 60 seconds. Was this some artifact of the remote-viewing iPad?&lt;&#x2F;li&gt;
&lt;li&gt;The window resize controls disappeared while watching the &lt;em&gt;Avatar: The Way of Water&lt;&#x2F;em&gt; demo and I couldn&#x27;t get them back until the video fininshed. Not sure if there&#x27;s some gesture I was missing to bring them up or if this was a bug.&lt;&#x2F;li&gt;
&lt;li&gt;The Alicia Keys demo is deeply uncomfortable&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-keys-1&quot;&gt;&lt;a href=&quot;#fn-keys&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; all of the other &quot;Immersive Experience&quot; demos are amazing.&lt;&#x2F;li&gt;
&lt;li&gt;Text was more-legible than I expected given the relatively-low angular resolution of the displays (34ppd, compared to 98ppd on the Studio Display I use all day every day). Definitely could see some color fringing on black text on a white background from subpixel anti-aliasing, but it was more comfortable to read than macOS is on a non-Retina monitor with similar angular resolution. I caught the foveated rendering happening a few times but it was pretty unobtrusive.&lt;&#x2F;li&gt;
&lt;li&gt;I experienced no nausea at all during the demo, even the high-motion parts. I have always felt a little queasy when trying other headsets.&lt;&#x2F;li&gt;
&lt;li&gt;The sound was remarkably good. I didn&#x27;t listen to anything serious, but it had surprising nuance for something that&#x27;s more open than the most open-backed of headphones.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I&#x27;m not going to buy one of these things, but ask me again in a couple of years when a second version. I do, however, think that Apple could make a
whole boatload of money charging people $100 to rent one for a few hours to watch a movie. If you have an Apple Store near you, you should definitely
do the free demo just for the entertainment value. Heck, we used to pay $25&#x2F;pop to go see the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.boston.com&#x2F;culture&#x2F;entertainment&#x2F;2015&#x2F;05&#x2F;07&#x2F;for-the-past-23-years-this-has-been-the-hottest-mom-in-massachusetts&#x2F;&quot;&gt;M.O.M.&lt;&#x2F;a&gt; at the Jordan&#x27;s
Furniture in Avon, and nobody tries to sell you a new couch while you&#x27;re playing with a Vision Pro.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-color&quot;&gt;
&lt;p&gt;Silver aluminium, which seems to be getting phased out by Apple in favor of their warmer &quot;starlight&quot; aluminium &lt;a href=&quot;#fr-color-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-keys&quot;&gt;
&lt;p&gt;Does &lt;em&gt;anyone&lt;&#x2F;em&gt; want to have someone singing at them from 3 feet away? What was this like for Ms. Cook? Singing at max intensity at a featureless white obelisk? &lt;a href=&quot;#fr-keys-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>2023 Game Reviews</title>
          <pubDate>Sun, 21 Jan 2024 15:23:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2023-game-reviews/</link>
          <guid>https://www.roguelazer.com/blog/2023-game-reviews/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2023-game-reviews/">&lt;p&gt;It&#x27;s January 21, 2024, which means it&#x27;s the perfect time to do a wrap up of
some of the content I enjoyed in 2023&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-when-1&quot;&gt;&lt;a href=&quot;#fn-when&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I&#x27;m going to start off with video games,
because they&#x27;re on my mind. I don&#x27;t really play a ton of games, and when I do, I
have some perhaps unusual things I look for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Xbox or Switch strongly preferred. I don&#x27;t have or want a PC in the house, and I don&#x27;t
currently have a PlayStation. Once in a while I&#x27;ll play games on a Mac laptop
(either natively or via &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nvidia.com&#x2F;en-us&#x2F;geforce-now&#x2F;&quot;&gt;NVIDIA GeForce
NOW&lt;&#x2F;a&gt;), but usually it&#x27;s console or
bust.&lt;&#x2F;li&gt;
&lt;li&gt;Single-player only. No interest in interacting with other people while playing video games. Been
there, done that, had enough trolls, cheats, and &quot;gamerz&quot; for a lifetime.&lt;&#x2F;li&gt;
&lt;li&gt;Story matters at least as much as gameplay&lt;&#x2F;li&gt;
&lt;li&gt;Short is better than long; most days I have 0 hours to play video games, and even when I can
eke out some time, it&#x27;s usually only measured in minutes. A 40-hour game is a huge investment,
and a competitive grind-fest that takes hundreds of hours to get to the &quot;good part&quot; isn&#x27;t even an option.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;With that being said, I think I might&#x27;ve played more games in 2023 than any time in the previous 5 or so years! Neat! Let&#x27;s talk about them!&lt;&#x2F;p&gt;
&lt;p&gt;As always, all trademarks and copyrights are the property of their respective owners.&lt;&#x2F;p&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.cocoongame.com&quot;&gt;Cocoon&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Geometric Interactive&lt;&#x2F;em&gt;, played on Xbox. &lt;strong&gt;A&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Cocoon&lt;&#x2F;strong&gt; is the newest game from director Jeppe Carlsen, who previously
created &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.playdead.com&#x2F;games&#x2F;limbo&#x2F;&quot;&gt;Limbo&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.playdead.com&#x2F;games&#x2F;inside&#x2F;&quot;&gt;Inside&lt;&#x2F;a&gt;. Fun fact: the reason I own an
Xbox is because I played Limbo at my friend Brett&#x27;s house and it was the most
incredible game I&#x27;d ever played. So much emotion in so little! Anyhow, Cocoon shares
a lot with its predecessors: silent protagonist, mind-bending mechanics, horrifying
and mostly-unexplained world, tricky puzzles. You play as a... bug person? who has to solve puzzles
using magic orbs. Also, the orbs each contain entire universes, and sometimes contain themselves.&lt;&#x2F;p&gt;
&lt;p&gt;It took about 5 hours to beat this, and I know there are more hidden details. Definitely worth picking up.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;cocoon1.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;cocoon1.8bba56e61d1c91c2.png&quot; alt=&quot;Cocoon screenshot&quot; title=&quot;Cocoon screenshot&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;cocoon2.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;cocoon2.63aa67bb279a16a5.png&quot; alt=&quot;Cocoon screenshot&quot; title=&quot;Cocoon screenshot&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.ea.com&amp;#x2F;games&amp;#x2F;dead-space&quot;&gt;Dead Space (Remastered)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Motive&lt;&#x2F;em&gt;, played on Xbox. &lt;strong&gt;B-&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I never played the original &lt;strong&gt;Dead Space&lt;&#x2F;strong&gt;, but I&#x27;ve been known to enjoy atmospheric horror entertainment.
The remaster is extremely high-quality (I find it hard to believe that they were able to reuse anything from
the original game other than the plot and the audio), but it definitly suffers from being a remake of
a 2008 video game. The combat is plodding when it should be fast and fast when
it should be intentional; the RNG controls way too much; the plot has been
referenced by a million other games (such as 2022&#x27;s &lt;strong&gt;the Callisto Protocol&lt;&#x2F;strong&gt;). I&#x27;ll play the remakes
of &lt;strong&gt;Dead Space 2&lt;&#x2F;strong&gt; and &lt;strong&gt;Dead Space 3&lt;&#x2F;strong&gt; when they come out, but this game didn&#x27;t inspire too much in me.&lt;&#x2F;p&gt;
&lt;p&gt;Indeed, I didn&#x27;t even take a single screenshot when playing.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;dead-space-promo.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;dead-space-promo.de429f50b2fc6865.jpg&quot; alt=&quot;Dead Space promotional image&quot; title=&quot;Dead Space promotional image&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.ea.com&amp;#x2F;games&amp;#x2F;starwars&amp;#x2F;jedi&amp;#x2F;jedi-survivor&quot;&gt;Star Wars Jedi Survivor&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Respawn Entertainment&lt;&#x2F;em&gt;, played on Xbox. &lt;strong&gt;B+&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Star Wars Jedi: Survivor&lt;&#x2F;strong&gt; is the sequel to 2019&#x27;s &lt;strong&gt;STAR WARS Jedi: Fallen
Order&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-capitalization-1&quot;&gt;&lt;a href=&quot;#fn-capitalization&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It&#x27;s a moderately-hard lightsaber combat game set in
the Star Wars universe in the time period between &lt;em&gt;Revenge of The Sith&lt;&#x2F;em&gt; and &lt;em&gt;A
New Hope&lt;&#x2F;em&gt;, starring Cameron Monaghan as traumatized Jedi Cal Kestis. The combat is
supposedly inspired by &lt;em&gt;Dark Souls&lt;&#x2F;em&gt;, which I&#x27;ve never played. It&#x27;s definitely hard —
there are a lot of one-hit kills, and some fights took me quite a few attempts&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-rancor-1&quot;&gt;&lt;a href=&quot;#fn-rancor&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I did 100% this game, and it was fun, but also sometimes had that &quot;feels like
work&quot; slog. Took 53 hours to 100%&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fallen-order-time-1&quot;&gt;&lt;a href=&quot;#fn-fallen-order-time&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which is past my comfort
level for how much I want to invest in a game. I mostly played with the
crossguard and double-bladed stances. I stuck with it because the plot hit all
the right emotional notes, and, while it was still written for children, was still
better than almost everything Disney has turned out recently&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-andor-1&quot;&gt;&lt;a href=&quot;#fn-andor&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;jedi-survivor-1.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;jedi-survivor-1.c897bb41bc883d94.png&quot; alt=&quot;Jedi Survivor&quot; title=&quot;Jedi Survivor&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.thetalosprinciple.com&quot;&gt;The Talos Principle 2&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Croteam&lt;&#x2F;em&gt;, played on Xbox. &lt;strong&gt;A+&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Without a doubt, &lt;strong&gt;The Talos Principle 2&lt;&#x2F;strong&gt; was my favorite game of 2023. It follow
directly from 2014&#x27;s &lt;strong&gt;The Talos Principle&lt;&#x2F;strong&gt; and is a puzzle game about robots and philosophy.
It mixes &lt;em&gt;extremely difficult&lt;&#x2F;em&gt; puzzles (some of which took me hours to figure out) with philosophy
lectures and long digressions about the nature of consciousness. The writing is snappy and infuses humor and
melodrama appropriately; you&#x27;ll come to care deeply for these characters, even (especially?) those
you disagree with.&lt;&#x2F;p&gt;
&lt;p&gt;The game is also gorgeous to look at; all of
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.croteam.com&quot;&gt;Croteam&lt;&#x2F;a&gt;&#x27;s games have a hyper-real quality to them,
and this one is no exception.&lt;&#x2F;p&gt;
&lt;p&gt;I didn&#x27;t 100% this, but I did play about 27 hours and finished all of the primary content. You do yourself
a disservice by not reading every terminal, listening to every audio log, and talking to every character.&lt;&#x2F;p&gt;
&lt;p&gt;I also went back and replayed the entire &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.croteam.com&#x2F;talosprinciple&#x2F;&quot;&gt;Talos Principle&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.croteam.com&#x2F;the-talos-principle-road-to-gehenna-dlc-announcement&#x2F;&quot;&gt;Road to Gehenna&lt;&#x2F;a&gt; after finishing TTP2, and was reminded that those are &lt;em&gt;excellent&lt;&#x2F;em&gt; games.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;ttp2-1.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;ttp2-1.b3667b80f5c0bbfb.png&quot; alt=&quot;Just a robot with some laser beams&quot; title=&quot;Just a robot with some laser beams&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;ttp2-2.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;ttp2-2.07d73811da7751b4.png&quot; alt=&quot;One of the mysterious characters in The Talos Principle 2&quot; title=&quot;One of the mysterious characters in The Talos Principle 2&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;ttp2-3.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;ttp2-3.e0f5267202e03913.png&quot; alt=&quot;The megastructure at the heart of the mystery of The Talos Principle 2&quot; title=&quot;The megastructure at the heart of the mystery of The Talos Principle 2&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;bethesda.net&amp;#x2F;en&amp;#x2F;game&amp;#x2F;starfield&quot;&gt;Starfield&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Bethesda Games&lt;&#x2F;em&gt;, played on Xbox. &lt;strong&gt;D+&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Bethesda has been promising a sprawling new game since 2015&#x27;s &lt;em&gt;Fallout 4&lt;&#x2F;em&gt;, and released the
first trailer video &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=JUobbpHERh8&quot;&gt;five years ago&lt;&#x2F;a&gt;. What we got
was... Starfield. I played through all the main questlines for each faction and most of the sidequests
and the main emotion I felt was... boredom. It feels like they had a lot of great ideas on what
to do with this game, but somehow weren&#x27;t able to implement any of them for some reason. There are
a bunch of mechanics around weight and fuel and stealth and base-building that
&lt;em&gt;don&#x27;t do anything at all&lt;&#x2F;em&gt;. The combat is somewhat better than &lt;em&gt;Fallout 4&lt;&#x2F;em&gt; but
at the end of the day, all the guns feel pretty much the same and it&#x27;s mosly
just a matter of having a bigger number.&lt;&#x2F;p&gt;
&lt;p&gt;The plot is sort of interesting, but also &lt;em&gt;every single&lt;&#x2F;em&gt; twist is predictable if you&#x27;ve ever watched
any science fiction television or movies or read a single book. The characters are mostly dull
and lifeless, and those that aren&#x27;t (like Andreja) never get a chance to really explain their backstories.&lt;&#x2F;p&gt;
&lt;p&gt;Space combat is extremely dull once you get a Class B ship. Building spaceships is fun, but also stupid
because you can&#x27;t control basic things like where the ladders are going to be between rooms. Making a ship
that doesn&#x27;t look butt-ugly takes hours and costs hundreds of thousands of credits, which are easy but
boring to get more of due to the low sell prices of everything and the trademark awful inventory management.&lt;&#x2F;p&gt;
&lt;p&gt;And, of course, everything is buggy. Everything! I can&#x27;t finish the game because the last mission
of the main questline is totally broken. There are hundreds of other reports of this online. Bethesda hasn&#x27;t
addressed it in any of their patches. I have two or three other side-quests that are similarly broken.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve played dozens of hours of &lt;em&gt;Skyrim&lt;&#x2F;em&gt; over the last 12 years, but I really don&#x27;t see Starfield holding up.
Maybe I&#x27;ll re-examine if a plot-heavy expansion pack comes out, but no promises.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;starfield-1.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;starfield-1.ad454c9363bdf4ed.png&quot; alt=&quot;There&amp;#x27;s a lot of small-arms combat on boring planets&quot; title=&quot;There&amp;#x27;s a lot of small-arms combat on boring planets&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;starfield-2.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;starfield-2.fc0fe6364f0b1694.png&quot; alt=&quot;And some boring spaceships&quot; title=&quot;And some boring spaceships&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.novadrift.io&quot;&gt;Nova Drift&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Chimeric&lt;&#x2F;em&gt;, played on Mac. &lt;strong&gt;B+&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;What if &lt;em&gt;Asteroids&lt;&#x2F;em&gt; were a bullet hell roguelite? That&#x27;s the fundamental idea behind &lt;strong&gt;Nova Drift&lt;&#x2F;strong&gt;, a game
from solo developer Jeffrey Nielson available on Windows&#x2F;Linux&#x2F;Mac. Gain points to get randomized unlocks;
reach new high scores to unlock progression upgrades that apply between runs. Blow up thousands and thousands of
little shapes. Bright colors! Fun electronic music! It&#x27;s an ideal arcade game.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s also a little buggy (I&#x27;ve gotten some &lt;em&gt;really annoying&lt;&#x2F;em&gt; crashes late in a
long run), and it&#x27;s unfinished. I&#x27;m always a little skeptical of &quot;Early Access&quot;
and paying to beta test something. However, this game is straightforward enough
that I don&#x27;t feel like I&#x27;m missing out on too much.&lt;&#x2F;p&gt;
&lt;p&gt;Fun fact: I originally found out about this game when people were talking about it on Mastodon!&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;nova-drift-1.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;nova-drift-1.73f69f861fc95880.png&quot; alt=&quot;A relatively calm point in Nova Drift&quot; title=&quot;A relatively calm point in Nova Drift&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;thelastcampfiregame.com&quot;&gt;The Last Campfire&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Hello Games&lt;&#x2F;em&gt;, played on Nintendo Switch. &lt;strong&gt;A-&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Another great game that I played for the first time this year (but which came out 2020). You play as Ember,
an adorable little blobby character who has to explore a metaphor for death to help lost souls recover
a spark of hope and move on. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ialagency.com&#x2F;portfolio&#x2F;rachel-august-british-scandinavian&#x2F;&quot;&gt;The narrator&lt;&#x2F;a&gt;
(who also voices all the characters) really makes this game.&lt;&#x2F;p&gt;
&lt;p&gt;The puzzles are pretty easy and this game took about 7 hours to beat.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;tlc-1.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;tlc-1.9711ffbb00a8a9e1.jpg&quot; alt=&quot;The Last Campfire&quot; title=&quot;The Last Campfire&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;tlc-2.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;tlc-2.3ff6600c4c285571.jpg&quot; alt=&quot;The Last Campfire&quot; title=&quot;The Last Campfire&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.supergiantgames.com&amp;#x2F;games&amp;#x2F;transistor&amp;#x2F;&quot;&gt;Transistor&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Supergiant Games&lt;&#x2F;em&gt;, played on Nintendo Switch. &lt;strong&gt;A&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Speaking of games about death, &lt;strong&gt;Transistor&lt;&#x2F;strong&gt; actually came out in &#x27;14, but it
never came out for Xbox, so I didn&#x27;t play it. I do adore &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.supergiantgames.com&quot;&gt;Supergiant
Games&lt;&#x2F;a&gt; and have played through
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.supergiantgames.com&#x2F;games&#x2F;bastion&quot;&gt;Bastion&lt;&#x2F;a&gt; many times, and still
play &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.supergiantgames.com&#x2F;games&#x2F;hades&quot;&gt;Hades&lt;&#x2F;a&gt; regularly. Transistor
is an isometric hybrid between a hack-and-slash game and a turn-based RPG. Even if
you hate the gameplay&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-hate-1&quot;&gt;&lt;a href=&quot;#fn-hate&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, it&#x27;s worth playing just because everything with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;darrenkorb&quot;&gt;Darren Korb&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ashleylynnbarrett.com&quot;&gt;Ashley Lynn Barrett&lt;&#x2F;a&gt; is worth &lt;em&gt;listening to&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Only takes about 5 hours to beat, and smooth as silk on the Switch.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;transistor-1.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;transistor-1.c2b5a10f431c6c2a.jpg&quot; alt=&quot;Some ambiance&quot; title=&quot;Some ambiance&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;transistor-2.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;transistor-2.3b5d7cf5fb680c8c.jpg&quot; alt=&quot;Real-time combat&quot; title=&quot;Real-time combat&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;transistor-3.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;transistor-3.777cb90dd8f9b255.jpg&quot; alt=&quot;turn() mode&quot; title=&quot;turn() mode&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;game-review-header&quot;&gt;
	&lt;h3&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;braceyourselfgames.com&amp;#x2F;cobalt-core&amp;#x2F;&quot;&gt;Cobalt Core&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
	&lt;h4&gt;&lt;em&gt;Brace Yourself Games&lt;&#x2F;em&gt;, played on Nintendo Switch. &lt;strong&gt;B+&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;This is another great Switch game, and I&#x27;m cheating here because it came out at
the very beginning of January 2024. Close enough! It&#x27;s a &quot;deck-building low-fi
roguelite&quot;, and the closest comparison I have for it is 2012&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;subsetgames.com&#x2F;ftl.html&quot;&gt;FTL: Faster
than Light&lt;&#x2F;a&gt;. It&#x27;s a turn-based space combat
game, but the twist is that the actions you can perform are based on a deck of
virtual &quot;cards&quot; that you acquire through the game. This is a great game to play
while doing something else (like watching TV, if you&#x27;ve got as poor of an
attention span as I do. It&#x27;s also quite frustrating; like a lot of
roguelikes&#x2F;roguelites, the game is &lt;em&gt;hugely&lt;&#x2F;em&gt; dependent on the
&lt;abbr title=&quot;Random Number Generator&quot;&gt;RNG&lt;&#x2F;abbr&gt;, and it&#x27;s frustrating to get 20
minutes into a run and realize that you have no change of
success because the next boss is only survivable if you have a certain card.&lt;&#x2F;p&gt;
&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;cobalt-core-1.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;cobalt-core-1.d391750ff30379a5.jpg&quot; alt=&quot;Cobalt Core, in combat&quot; title=&quot;Cobalt Core, in combat&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
      
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2023-game-reviews&amp;#x2F;cobalt-core-2.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;cobalt-core-2.54986f23e1ba7b5b.jpg&quot; alt=&quot;Cobalt Core, selecting new cards&quot; title=&quot;Cobalt Core, selecting new cards&quot; class=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;looking-forward&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#looking-forward&quot; aria-label=&quot;Anchor link for: looking-forward&quot;&gt;Looking Forward&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In 2024, we&#x27;ve got &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.supergiantgames.com&#x2F;games&#x2F;hades-ii&#x2F;&quot;&gt;Hades 2&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gearboxpublishing.com&#x2F;game&#x2F;homeworld-3&#x2F;&quot;&gt;Homeworld 3&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-hw3-1&quot;&gt;&lt;a href=&quot;#fn-hw3&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ubisoft.com&#x2F;en-us&#x2F;game&#x2F;star-wars&#x2F;outlaws&quot;&gt;Star Wars Outlaws&lt;&#x2F;a&gt; coming out that I&#x27;m interested in so far. Plus, the whole reason I got a Switch was to play Breath of the Wild, which I haven&#x27;t done yet. Hopefully, it&#x27;ll be as good of a year for games as 2023!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-when&quot;&gt;
&lt;p&gt;I know, I know, a lot of people do their yearly wrap-up review posts in December.
But then what about the games I played in December, eh? &lt;a href=&quot;#fr-when-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-capitalization&quot;&gt;
&lt;p&gt;What the hell is going on with capitalization and colon placement at Electronic Arts?
When is it &lt;em&gt;STAR WARS&lt;&#x2F;em&gt; and when is it &lt;em&gt;Star Wars&lt;&#x2F;em&gt;? Why is it &quot;Jedi: Survivor&quot; in promotional material,
but &quot;Jedi Survivor&quot; in the menus? Who knows!? &lt;a href=&quot;#fr-capitalization-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-rancor&quot;&gt;
&lt;p&gt;&lt;strong&gt;TWO&lt;&#x2F;strong&gt; rancors!? &lt;a href=&quot;#fr-rancor-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-fallen-order-time&quot;&gt;
&lt;p&gt;For comparison, &lt;em&gt;STAR WARS Jedi: Fallen Order&lt;&#x2F;em&gt; took about 39 hours to 100% a couple of years ago. &lt;a href=&quot;#fr-fallen-order-time-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-andor&quot;&gt;
&lt;p&gt;Except &lt;em&gt;Andor&lt;&#x2F;em&gt;, of course. Go watch Andor! &lt;a href=&quot;#fr-andor-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-hate&quot;&gt;
&lt;p&gt;Which I did not, to be clear &lt;a href=&quot;#fr-hate-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-hw3&quot;&gt;
&lt;p&gt;Probably the most hyped game for me in many years? I&#x27;ve played hundreds of hours of &lt;em&gt;Homeworld&lt;&#x2F;em&gt; and
&lt;em&gt;Homeworld 2&lt;&#x2F;em&gt;. I didn&#x27;t love &lt;em&gt;Deserts of Kharak&lt;&#x2F;em&gt;, but I&#x27;m tentatively hopeful for &lt;em&gt;Homeworld 3&lt;&#x2F;em&gt;. Even though
they were initially promising Mac support, they haven&#x27;t mentioned anything about Macs in the last few years,
so I&#x27;m &lt;em&gt;really&lt;&#x2F;em&gt; hoping this one runs on GeForce NOW. &lt;a href=&quot;#fr-hw3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>January 2024 Editor Update</title>
          <pubDate>Tue, 02 Jan 2024 19:26:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2024-01-editor-update/</link>
          <guid>https://www.roguelazer.com/blog/2024-01-editor-update/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2024-01-editor-update/">&lt;p&gt;I decided to take some time over the holidays to redo my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;&quot;&gt;Neovim&lt;&#x2F;a&gt; configuration, which
I last spent any meaningful time on &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2019-vim-setup&#x2F;&quot;&gt;in 2019&lt;&#x2F;a&gt;. I&#x27;ve been going back and forth
on editors a lot for the last few years; last year, I spent the first six months of the year using &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;helix-editor.com&quot;&gt;Helix&lt;&#x2F;a&gt;, which is a batteries-included editor based on the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;kakoune.org&quot;&gt;Kakoune&lt;&#x2F;a&gt; editing model. I gave up on Helix after one too many crashes, and went back to Neovim.&lt;&#x2F;p&gt;
&lt;p&gt;The main goals of my recent config rewrite were:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Move from &lt;code&gt;init.vim&lt;&#x2F;code&gt; to &lt;code&gt;init.lua&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Get rid of unused&#x2F;underused plugins&lt;&#x2F;li&gt;
&lt;li&gt;Move to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;microsoft.github.io&#x2F;language-server-protocol&#x2F;&quot;&gt;LSP&lt;&#x2F;a&gt; + &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tree-sitter.github.io&#x2F;tree-sitter&#x2F;&quot;&gt;Tree-sitter&lt;&#x2F;a&gt;, for real&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;All of these things were successful! My new &lt;code&gt;init.lua&lt;&#x2F;code&gt; is about the same size as the old &lt;code&gt;init.vim&lt;&#x2F;code&gt;, but has about 20% fewer plugins and a lot more comments. I also switched from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;vim-plug&quot;&gt;vim-plug&lt;&#x2F;a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;lazy.nvim&quot;&gt;lazy.vim&lt;&#x2F;a&gt;, which slightly improved startup time and provided a slightly more ergonomic way to configure stuff.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a quick screenshot showing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&#x2F;advent_of_code_2023&#x2F;blob&#x2F;main&#x2F;src&#x2F;bin&#x2F;aoc25.rs&quot;&gt;my solution&lt;&#x2F;a&gt; for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;2023&quot;&gt;Advent of Code 2023&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;2023&#x2F;day&#x2F;25&quot;&gt;Day 25&lt;&#x2F;a&gt;, in Neovim in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;iterm2.com&#x2F;&quot;&gt;iTerm 2&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2024-01-editor-update&amp;#x2F;neovim.png&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2024-01-editor-update&amp;#x2F;neovim.png&quot; alt=&quot;Neovim in iTerm 2&quot; class=&quot;cimg-no-shadow halfimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;Read on for more fun and exciting details.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Changing Servers</title>
          <pubDate>Sun, 26 Nov 2023 22:02:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/changing-servers/</link>
          <guid>https://www.roguelazer.com/blog/changing-servers/</guid>
          <description xml:base="https://www.roguelazer.com/blog/changing-servers/">&lt;p&gt;I&#x27;ve kept a server in &lt;q&gt;The Cloud&lt;&#x2F;q&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-cloud-1&quot;&gt;&lt;a href=&quot;#fn-cloud&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; for the past &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;new-machine&#x2F;&quot;&gt;14 years or so&lt;&#x2F;a&gt;, hosted
with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tornadovps.com&quot;&gt;Tornado VPS&lt;&#x2F;a&gt; (formerly &lt;code&gt;prgmr&lt;&#x2F;code&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-prgmr-1&quot;&gt;&lt;a href=&quot;#fn-prgmr&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;). Well, I suppose
I&#x27;ve been running anywhere from tens to tens of thousands of servers during that time, but
this one was always a pet that I used to run whatever miscellaneous nonsense I needed in my personal life.
For what it&#x27;s worth, let me say that I have had a very satisfactory experience with prgmr&#x2F;tornadovps; there
has been maybe six hours of downtime over that period, and support has been super-helpful&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-support-1&quot;&gt;&lt;a href=&quot;#fn-support&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;sietchtabr.roguelazer.net&lt;&#x2F;code&gt; started out way back on November 30, 2009 as a 512MB RAM, 12 GB spinning disk VM costing $11&#x2F;mo and running &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.debian.org&#x2F;releases&#x2F;lenny&#x2F;&quot;&gt;Debian lenny&lt;&#x2F;a&gt;.
When I was &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;nix-tip-of-the-day-dynamic-dns&#x2F;&quot;&gt;experimenting with dnsextd in 2009&lt;&#x2F;a&gt;, it was on this server.
When I was hacking on a &lt;code&gt;sed&lt;&#x2F;code&gt; to x86 compiler in 2011, it was on this server.
When &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;honeymoon&#x2F;&quot;&gt;I got married in 2015&lt;&#x2F;a&gt;, I built the web-app for managing RSVPs on this server&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-rsvp-1&quot;&gt;&lt;a href=&quot;#fn-rsvp&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
When my former classmate &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cseweb.ucsd.edu&#x2F;~mvrable&#x2F;&quot;&gt;Michael Vrable&lt;&#x2F;a&gt; needed someone to host a replica
of a DNS zone for him? This server.
Every once in a while, pgrmr would bump up the RAM and disk and CPU, and every time a Debian release came out, I would do the upgrade.
I even &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;sietchtabr-reboot&#x2F;&quot;&gt;rebooted from time to time&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;When &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.debian.org&#x2F;releases&#x2F;bookworm&#x2F;&quot;&gt;Debian bookworm&lt;&#x2F;a&gt; came out this June, I initially planned to upgrade again.
After all, why not? Well, for one thing, every time my disk had been expanded, I&#x27;d just made new partitions
and put big pieces of data on them, so the filesystem was a mess — &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sourceware.org&#x2F;lvm2&#x2F;&quot;&gt;LVM2&lt;&#x2F;a&gt; &lt;em&gt;had&lt;&#x2F;em&gt; existed by 2009, but I
hadn&#x27;t used it. It was also an untidy mixture of &lt;code&gt;ext4&lt;&#x2F;code&gt; and unconverted old &lt;code&gt;ext3&lt;&#x2F;code&gt; volumes. If nothing else,
I probably ought to have fixed all that. I also wanted to try out &lt;code&gt;btrfs&lt;&#x2F;code&gt; as a root volume; I&#x27;ve been avoiding
it after seeing some nasty data loss issues around 2015, but probably eight years is enough maturation time.&lt;&#x2F;p&gt;
&lt;p&gt;That all seemed annoying, so instead I&#x27;ve replaced the server entirely. Still with TornadoVPS, just
a fresh clean install of Debian. I went through and wrote Puppet manifests for every service I care
about, and dropped everything I no longer need. Some key services:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tailscale.com&quot;&gt;tailscale&lt;&#x2F;a&gt; for talking to other machines&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.isc.org&#x2F;bind&#x2F;&quot;&gt;bind9&lt;&#x2F;a&gt; to host some DNS zones&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;httpd.apache.org&quot;&gt;apache&lt;&#x2F;a&gt; with some CGIs and web pages&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.postfix.org&quot;&gt;postfix&lt;&#x2F;a&gt; for outbound mail&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-mail-1&quot;&gt;&lt;a href=&quot;#fn-mail&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;synapse&lt;&#x2F;a&gt; as a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matrix.org&quot;&gt;matrix&lt;&#x2F;a&gt; homeserver&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.znc.in&#x2F;ZNC&quot;&gt;znc&lt;&#x2F;a&gt; as an IRC bouncer&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;duplicity.gitlab.io&quot;&gt;duplicity&lt;&#x2F;a&gt; running offsite backups&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;prometheus.io&quot;&gt;prometheus&lt;&#x2F;a&gt; to collect metrics both about this machine and other machines on my
tailnet, and to alert about them&lt;&#x2F;li&gt;
&lt;li&gt;a motley collection of OCI containers used to test things in docker&#x2F;podman&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also took a bunch of stuff I use that doesn&#x27;t have usable&#x2F;up-to-date Debian packages (like
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&quot;&gt;neovim&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;zellij.dev&quot;&gt;zellij&lt;&#x2F;a&gt;) and packaged them so I&#x27;m no longer
running a bunch of un-managed binaries out of &lt;code&gt;~&#x2F;bin&lt;&#x2F;code&gt; like an animal.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, I&#x27;m glad to report that after a couple of hairy days, everything&#x27;s moved over. The new
instance has 8GB of RAM, two vCPUs of AMD EPYC 7402P, and 90GB of reasonably-fast SSD storage;
something like an &lt;code&gt;m5a.large&lt;&#x2F;code&gt; in AWS terms. You&#x27;d think that in these days where you can run a Kubernetes
cluster on the free tier of GCP and we all have an infinite number of Raspberry Pis sitting in shelves,
there&#x27;d be less need for a &quot;junk-drawer&quot; server in a datacenter, but it really is quite handy. Hopefully
this new instance will go another 14 years without requiring any major intervention!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-cloud&quot;&gt;
&lt;p&gt;You know... someone else&#x27;s computer &lt;a href=&quot;#fr-cloud-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-prgmr&quot;&gt;
&lt;p&gt;There was some kind of &lt;em&gt;drama&lt;&#x2F;em&gt; in 2018 and the founder left the company
to work for Google, and the company &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tornadovps.com&#x2F;blog&#x2F;2022&#x2F;03&#x2F;16&#x2F;tornado-vps&quot;&gt;got renamed&lt;&#x2F;a&gt;.
I am two degrees away from Luke Crawford
on LinkedIn, but not quite close enough to actually know what happened. &lt;a href=&quot;#fr-prgmr-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-support&quot;&gt;
&lt;p&gt;Alan Post ended up doing a lot of very helpful work on the installer for me recently &lt;a href=&quot;#fr-support-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-rsvp&quot;&gt;
&lt;p&gt;With &lt;code&gt;mod_cgi&lt;&#x2F;code&gt; and python, because why not? It was going to be hit a couple of hundred times, total. &lt;a href=&quot;#fr-rsvp-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-mail&quot;&gt;
&lt;p&gt;I was previously running postfix and courier-imapd and doing my own mail server, but I&#x27;m too old for that). &lt;a href=&quot;#fr-mail-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Vaccinated (again)</title>
          <pubDate>Mon, 18 Sep 2023 21:52:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2023-vaccinated-again/</link>
          <guid>https://www.roguelazer.com/blog/2023-vaccinated-again/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2023-vaccinated-again/">&lt;p&gt;Well, it&#x27;s that time of year &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;more-moderna&#x2F;&quot;&gt;again&lt;&#x2F;a&gt;!
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.washingtonpost.com&#x2F;health&#x2F;2023&#x2F;09&#x2F;12&#x2F;covid-booster-shots-2023-cdc&#x2F;&quot;&gt;The CDC and FDA both approved the new COVID-19 vaccine last week&lt;&#x2F;a&gt;, and I started looking for shots immediately.
I managed to find a booking for today at a local Walgreens, and was perhaps a little worried when the fact-sheet they sent me was for the 2022 BA.4&#x2F;BA.5 bivalent shot.
Thankfully, after a bit over an hour waiting in line, I successfully got the latest XBB.1.5 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pfizer.com&#x2F;news&#x2F;press-release&#x2F;press-release-detail&#x2F;pfizer-and-biontech-receive-us-fda-approval-2023-2024-covid&quot;&gt;Pfizer&lt;&#x2F;a&gt; vaccine.&lt;&#x2F;p&gt;
&lt;p&gt;So far (as usual) no side effects except fatigue.&lt;&#x2F;p&gt;
&lt;p&gt;I know that a lot of folks are recommending waiting until a bit later in the year, but pretty much everyone I know with school-aged children has COVID right now, so it doesn&#x27;t hurt to get in a little bit of extra protection.
Stay safe out there.&lt;&#x2F;p&gt;
&lt;p&gt;Some recent relevant reading:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.scientificamerican.com&#x2F;article&#x2F;the-brain-fog-of-long-covid-is-a-serious-medical-issue-that-needs-more-attention&#x2F;&quot;&gt;The ‘Brain Fog’ of Long COVID Is a Serious Medical Issue That Needs More Attention&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.northwestern.edu&#x2F;stories&#x2F;2023&#x2F;09&#x2F;covid-patients-exhale-up-to-1000-copies-of-virus-per-minute-during-first-eight-days-of-symptoms&#x2F;&quot;&gt;COVID patients breathe large amounts of virus early on&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;biobot.io&#x2F;data&#x2F;covid-19&quot;&gt;Biobot&#x27;s Covid-19 Wastewater Monitoring&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;health&#x2F;2023&#x2F;09&#x2F;more-than-half-of-americans-plan-to-get-updated-covid-shot&#x2F;&quot;&gt;More than half of Americans plan to get updated COVID shot&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Too many social media!</title>
          <pubDate>Sun, 23 Jul 2023 08:10:58 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2023-too-many-social-media/</link>
          <guid>https://www.roguelazer.com/blog/2023-too-many-social-media/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2023-too-many-social-media/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2023-too-many-social-media&amp;#x2F;boxing.jpeg&quot; alt=&quot;terrible clipart&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;p&gt;I think... there are too many social media platforms right now. A couple of years ago, the only thing I used was Twitter, and I was pretty happy with it? Now:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;joinmastodon.org&quot;&gt;Mastodon&lt;&#x2F;a&gt; is where I mostly consume short-form social media postings... and is pretty frustrating a lot
of the time. I think there are a total of three people I know in the real world who are still on Mastodon;
everyone else bounced off. There&#x27;s no coverage of any local news or politics. The Discourse is absolutely
exhausting&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-discourse-1&quot;&gt;&lt;a href=&quot;#fn-discourse&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I saw a post&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-multiple-boosts-1&quot;&gt;&lt;a href=&quot;#fn-multiple-boosts&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; last week that said something to the effect of &lt;em&gt;&quot;Mastodon
isn&#x27;t a social network, it&#x27;s a leftist social engineering project and if you don&#x27;t like that you should fuck
off&quot;&lt;&#x2F;em&gt; which feels right. Mastodon does have &lt;em&gt;by far&lt;&#x2F;em&gt; the most usable iOS apps of all the social
networks, and is also the only option that has Mac apps at all. I think Mastodon&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fediverse-1&quot;&gt;&lt;a href=&quot;#fn-fediverse&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; could certainly
be a place where people talk with other people about interesting things, but it&#x27;s mostly a place right now
you can go to get scolded for not being an ideologically-pure gay space communist. The only
exception from this is the &quot;iOS indie app dev&quot; network, which decamped whole hog from Twitter to Mastodon
and mostly just talks about the same things they ever talked about. They&#x27;re cool.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;threads.net&quot;&gt;Threads&lt;&#x2F;a&gt; is Facebook&#x27;s&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fb-1&quot;&gt;&lt;a href=&quot;#fn-fb&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; entry into the &quot;Twitter clone&quot; space. It is a clone of the
parts of Twitter I never used or cared for; in particular, it only has an &quot;algorithmic timeline&quot;. As
far as I can tell, the people you Follow on the app has no bearing on what posts you&#x27;re shown; it&#x27;s a
constant barrage of Brands™ and B-list celebrities. I open it once in a while to follow back
all the people I know IRL who follow me there, but none of them post anything and the main timeline is
boring as sin. There&#x27;s no iPad or Mac app for Threads, nor even a website&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-threads-trivia-1&quot;&gt;&lt;a href=&quot;#fn-threads-trivia&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&quot;&gt;Bluesky&lt;&#x2F;a&gt; was originally some kind of proposal for a decentralized
future Twitter, and has a bunch of funding from Bad People&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-rfk-1&quot;&gt;&lt;a href=&quot;#fn-rfk&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. However, there are a lot of people whose writing
I used to enjoy on Twitter who are only found on Bluesky. The iOS app is deeply mediocre&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-follow-bsky-1&quot;&gt;&lt;a href=&quot;#fn-follow-bsky&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, there&#x27;s no iPad
or Mac app, and the website is just the iOS app in a browser&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-bsky-web-1&quot;&gt;&lt;a href=&quot;#fn-bsky-web&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. At the end of the day, though, Bluesky is still
an invite-only social media network with &amp;lt;100k people on it, so it can&#x27;t really solve for the general case. I do think &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;atproto.com&quot;&gt;ATProto&lt;&#x2F;a&gt; has some things that it does a lot better than ActivityPub.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nostr.com&quot;&gt;Nostr&lt;&#x2F;a&gt; is legitimately a neat protocol concept that has a roughly 0% chance of ever
being used by anyone outside of a vanishingly small set of cryptography nerds. Also, somehow it&#x27;s been
captured by cryptocurrency nuts, goldbugs, and doomsday preppers. I don&#x27;t think I&#x27;ve ever seen a post
on the network that interested me. My public key is
&lt;code&gt;npub1g86srua47gncah0l2aalwxlt8mhvnwgq3860240aa0zm3nqem3wq49lrwk&lt;&#x2F;code&gt; if you happen to want to look for me.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;join-lemmy.org&quot;&gt;Lemmy&lt;&#x2F;a&gt; is a Reddit alternative built on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;activitypub.rocks&quot;&gt;ActivityPub&lt;&#x2F;a&gt;. I was
hopeful that it would have a big growth spurt after Reddit killed off all the decent mobile apps and
moderator tools, but it didn&#x27;t. There&#x27;s some interesting stuff on there, but the server software is
incredibly buggy and the community is very small.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&quot;&gt;Twitter&lt;&#x2F;a&gt; is still around, but given the eager embrace of Nazis by the new
owner, it feels like anyone who still chooses to spend time there is being willfully ignorant. Without
decent applications, I can&#x27;t imagine using it even if it weren&#x27;t a right-wing hotspot; nobody gives a shit about
your &lt;em&gt;&quot;For You&quot;&lt;&#x2F;em&gt; timeline, Twitter.
Also, apparently Elon Musk is
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;variety.com&#x2F;2023&#x2F;digital&#x2F;news&#x2F;twitter-renamed-x-elon-musk-1235677741&#x2F;&quot;&gt;going to throw away the name Twitter and rename it &quot;X&quot; and maybe turn it into an unregulated bank soon&lt;&#x2F;a&gt;. What a winner.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.facebook.com&quot;&gt;Facebook&lt;&#x2F;a&gt; is still around as long as you only want to see pictures of the kids
of your gen x friends, and intermittently report your crazy relatives for posting super-racist
conspiracy theories.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I don&#x27;t know what the point of all this is. Twitter was a lot of fun — a social network
that almost everyone was on, where you could use great native applications and see the posts from only the
people you wanted to see, or if you prefer, use the terrible first-party application and see a constant feed of
celebrity click-bait.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I should just stick to IRC.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-discourse&quot;&gt;
&lt;p&gt;popular subjects this week: &quot;anyone who makes bad user interface is a white supremacist&quot;;
&quot;Mastodon having multiple instances is racist&quot;; &quot;making closed-source software for pay means you hate
freedom and might be a fascist&quot;; and, of course approximately one million takes about other social
media networks) &lt;a href=&quot;#fr-discourse-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-multiple-boosts&quot;&gt;
&lt;p&gt;actually, I kept seeing it over and over again because multiple people in my network
boosted it, and deduplication is still flaky &lt;a href=&quot;#fr-multiple-boosts-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-fediverse&quot;&gt;
&lt;p&gt;and the wider Fediverse of Calckey and Misskey and Pixelfed and whatnot, of course &lt;a href=&quot;#fr-fediverse-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-fb&quot;&gt;
&lt;p&gt;&quot;Meta&quot; is a silly rebrand and I refuse &lt;a href=&quot;#fr-fb-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-threads-trivia&quot;&gt;
&lt;p&gt;my favorite fact about Threads is that the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;about.fb.com&quot;&gt;official Facebook blog&lt;&#x2F;a&gt; has
buttons to follow Meta on Facebook, Instagram, Youtube, Twitter, and LinkedIn, but not Threads &lt;a href=&quot;#fr-threads-trivia-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-rfk&quot;&gt;
&lt;p&gt;if you &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.axios.com&#x2F;2023&#x2F;06&#x2F;08&#x2F;robert-f-kennedy-jr-tech-2024-campaign&quot;&gt;support Robert F. Kennedy Jr. for president&lt;&#x2F;a&gt;, you can fuck right off &lt;a href=&quot;#fr-rfk-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-follow-bsky&quot;&gt;
&lt;p&gt;it doesn&#x27;t have timeline sync, randomly moves you around, and doesn&#x27;t follow any iOS platform
best practices, but at least it does let you see posts by the people you follow in reverse-chronological order &lt;a href=&quot;#fr-follow-bsky-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-bsky-web&quot;&gt;
&lt;p&gt;for funsies, try pressing ⌘-down on the web app and see how it freaks out &lt;a href=&quot;#fr-bsky-web-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Version 6</title>
          <pubDate>Sun, 25 Jun 2023 09:58:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/site-v6/</link>
          <guid>https://www.roguelazer.com/blog/site-v6/</guid>
          <description xml:base="https://www.roguelazer.com/blog/site-v6/">&lt;p&gt;Welcome to Version 6 of this website. As promised &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;mastodon-move-again&#x2F;&quot;&gt;a few months ago&lt;&#x2F;a&gt;, I decided
to take this website, which has been using the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt; static site generator since &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;new-site&#x2F;&quot;&gt;2014&lt;&#x2F;a&gt;,
and rewrite it to use the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt; static site generator. This was a pretty painless process; I wrote some Python
scripts to take all the Pelican markdown and convert it to Zola format&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-convert-1&quot;&gt;&lt;a href=&quot;#fn-convert&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and to generate redirects for all the old
URLs.&lt;&#x2F;p&gt;
&lt;p&gt;Some notable changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I&#x27;ve removed commenting functionality; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;commento.io&#x2F;&quot;&gt;Commento&lt;&#x2F;a&gt;&#x27;s spam filtering has gotten really lousy the last few months
and I&#x27;m tired of having to translate and delete a bunch of Hindi spam posts every morning.&lt;&#x2F;li&gt;
&lt;li&gt;Building the site from scratch now takes ~1s instead of ~3s. &lt;em&gt;(woo)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;A bunch of the repetitive inline HTML in posts has been rewritten as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;content&#x2F;shortcodes&#x2F;&quot;&gt;shortcodes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;There&#x27;s now only an Atom feed (no RSS 2.0), at least until &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;zola.discourse.group&#x2F;t&#x2F;generate-both-rss-and-atom-feeds&#x2F;441&#x2F;4&quot;&gt;this item&lt;&#x2F;a&gt; gets resolved upstream&lt;&#x2F;li&gt;
&lt;li&gt;I removed the tag cloud from the sidebar because it seemed too noisy&lt;&#x2F;li&gt;
&lt;li&gt;All the pages have new permalinks, but there are redirects at the old URLs, so hopefully I&#x27;m still in compliance with the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;Provider&#x2F;Style&#x2F;URI&quot;&gt;&quot;Cool URLs Don&#x27;t Change&quot; rule&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-convert&quot;&gt;
&lt;p&gt;Mostly, this just entailed changing the format of the front-matter to TOML and adding newlines between footnotes in the Markdown. &lt;a href=&quot;#fr-convert-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>On “enshittification” and the future of knowledge</title>
          <pubDate>Tue, 20 Jun 2023 08:57:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/enshittification/</link>
          <guid>https://www.roguelazer.com/blog/enshittification/</guid>
          <description xml:base="https://www.roguelazer.com/blog/enshittification/">&lt;p&gt;A few months ago, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pluralistic.net&#x2F;&quot;&gt;Cory Doctorow&lt;&#x2F;a&gt; wrote a very memorable blog post about
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pluralistic.net&#x2F;2023&#x2F;01&#x2F;21&#x2F;potemkin-ai&#x2F;#hey-guys&quot;&gt;the enshittification of social-media platforms&lt;&#x2F;a&gt;, focused on TikTok. I&#x27;ve been
thinking since then about how prevalent this trend is and how much it makes me worry
for our future.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s mentioned in Doctorow&#x27;s piece, but I really want to emphasize how deleterious this effect has been
on Google Search. I remember when Google was introduced! By the time I first had access to the Internet
in school (perhaps 1998 or 1999), there were two options for finding things you didn&#x27;t already have a link to:
Yahoo (which had terrible free-form search but a passable directory you could click through like the index
to some giant poorly-edited encyclopedia), and Ask Jeeves (which was pretty good at letting you type a query into
a box and get results). Then, some time around 2000 or 2001, Google entered into the public consciousness, and it
was like crack. Anything you wanted to know about, you could just put into the box and get real, high-quality
results from legitimate sources! Unbelievable!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Daniel Tiger&#x27;s Neighborhood</title>
          <pubDate>Sun, 22 Jan 2023 19:38:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/daniel-tiger/</link>
          <guid>https://www.roguelazer.com/blog/daniel-tiger/</guid>
          <description xml:base="https://www.roguelazer.com/blog/daniel-tiger/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;daniel-tiger&amp;#x2F;daniel-tigers-neighborhood.jpg&quot; alt=&quot;Daniel Tiger&amp;#x27;s Neighborhood&quot; class=&quot;rfloat qimg&quot;  &#x2F;&gt;
  
&lt;p&gt;My two-year-old&#x27;s current Favorite Thing is the PBS television show &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pbskids.org&#x2F;daniel&#x2F;&quot;&gt;Daniel Tiger&#x27;s
Neighborhood&lt;&#x2F;a&gt;, which is a latter-day spinoff of the excellent &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;misterrogers.org&quot;&gt;Mister Roger&#x27;s
Neighborhood&lt;&#x2F;a&gt;. It&#x27;s a cartoon about the eponymous Daniel Tiger (who was a puppet on Mister
Roger&#x27;s Neighborhood) and his family, where various small children&#x2F;animals learn important lessons about sharing and
whatnot; standard fare for TV aimed at a two-year-olds.&lt;&#x2F;p&gt;
&lt;p&gt;My son has been home sick&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-sick-1&quot;&gt;&lt;a href=&quot;#fn-sick&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; for the last week or so, so I&#x27;ve watched a &lt;em&gt;lot&lt;&#x2F;em&gt; of Daniel Tiger&#x27;s Neighborhood,
and there are some things that annoy and&#x2F;or confuse me:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Why do Daniel and his father&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-father-1&quot;&gt;&lt;a href=&quot;#fn-father&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;strong&gt;never wear pants&lt;&#x2F;strong&gt;?
Everyone else in this universe wears pants.
The Tiger men clearly &lt;em&gt;understand&lt;&#x2F;em&gt; pants, because when they go to the sleep-over at school, Daniel brings special
pajama bottoms for the occasion.
Mom Tiger always wears pants, so it&#x27;s not a species thing.
What&#x27;s going on here?&lt;&#x2F;li&gt;
&lt;li&gt;Speaking of Dad Tiger: he&#x27;s a clockmaker, but none of his clocks or watches have hands. Is this a deep
statement about how childhood is free of deadlines, or is it just that it would be too much work to
animate hands?&lt;&#x2F;li&gt;
&lt;li&gt;The magical land of this show is populated by a mix of humans and anthropomorphic animals; however, there
are also some animals that are kept as pets.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-pets-1&quot;&gt;&lt;a href=&quot;#fn-pets&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Are the pets also sentient, and this is some kind of
slavery situation, or are there some animals that are sentient and some that are not? If so --- where&#x27;s the
boundary? I notice that all the sentient animal characters are obligate carnivores, so is this a universe where all
carnivores are sentient and all herbivores aren&#x27;t?&lt;&#x2F;li&gt;
&lt;li&gt;Does anyone other than Prince Tuesday actually have a paying job in this town? He&#x27;s the waiter, the grocer,
the crossing guard, the lifeguard at the pool, and probably some other jobs. Plus he&#x27;s also next in line
for the hereditary monarchy and lives in a literal castle. Some of the other adults have vocations (such
as Dad Tiger making useless clocks, and Stan the Music Man... playing music?) but none of them seem to have
actual jobs. I guess Teacher Harriet has a job.&lt;&#x2F;li&gt;
&lt;li&gt;Speaking of the pool: where does this show take place? It snows regularly, but also has a seaside beach with
palm trees.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I know, I know, it&#x27;s just a kids&#x27; show, and I&#x27;m reading too much into it. It just... bugs me!&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, my kid isn&#x27;t sick any more, so he&#x27;s going back to school and maybe I can watch less of this nonsense.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-sick&quot;&gt;
&lt;p&gt;Just a cold, although now it&#x27;s turned into an ear infection. Nothing serious &lt;a href=&quot;#fr-sick-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-father&quot;&gt;
&lt;p&gt;&quot;Dad Tiger&quot;. They did not put a ton of effort into character naming on this show. &lt;a href=&quot;#fr-father-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-pets&quot;&gt;
&lt;p&gt;&lt;em&gt;Daniel Tiger&#x27;s Neighborhood&lt;&#x2F;em&gt; Season 2 Episode 15: Daniel Takes Care of Snowball &lt;a href=&quot;#fr-pets-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Mastodon Move (Again)</title>
          <pubDate>Thu, 12 Jan 2023 11:57:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/mastodon-move-again/</link>
          <guid>https://www.roguelazer.com/blog/mastodon-move-again/</guid>
          <description xml:base="https://www.roguelazer.com/blog/mastodon-move-again/">&lt;p&gt;I know I &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;mastodon-move&#x2F;&quot;&gt;just moved mastodon servers three months ago&lt;&#x2F;a&gt;, but
unfortunately &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tenforward.social&quot;&gt;tenforward.social&lt;&#x2F;a&gt; just wasn&#x27;t working out for me. I do like Star Trek, but my initial impression
had been that the community would be a little more general interest, and unfortunately the &lt;em&gt;Local Timeline&lt;&#x2F;em&gt;
ended up looking a bit more like a 90&#x27;s era single-subject forum than I&#x27;d like. So, anyhow, I&#x27;ve moved
to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hachyderm.io&quot;&gt;hachyderm.io&lt;&#x2F;a&gt; (specifically, to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hachyderm.io&#x2F;@roguelazer&quot;&gt;&lt;code&gt;@roguelazer@hachyderm.io&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;), which
is a tech-focused instance and where a lot of folks from &lt;code&gt;mastodon.technology&lt;&#x2F;code&gt; ended up going.&lt;&#x2F;p&gt;
&lt;p&gt;Beyond that, the fact that it was a small instance with a single moderator meant that there were some things
I disagreed with (like the total defederation with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.cloud&quot;&gt;mastodon.cloud&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;journa.host&quot;&gt;journa.host&lt;&#x2F;a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&quot;&gt;fosstodon.org&lt;&#x2F;a&gt;)&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-change-1&quot;&gt;&lt;a href=&quot;#fn-change&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and sometimes it just felt like a little more friction
than I want in my life right now.&lt;&#x2F;p&gt;
&lt;p&gt;Hopefully this will be my last move for a while and there will not be any more metaposting about Mastodon on here.&lt;&#x2F;p&gt;
&lt;p&gt;While I was fixing things, I also got my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keyoxide.org&quot;&gt;keyoxide&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keyoxide.org&#x2F;hkp&#x2F;24f8aa354990f3f562ec014bc6496deb3da8e9b5&quot;&gt;profile&lt;&#x2F;a&gt; all fixed up. Hooray green checkmarks!&lt;&#x2F;p&gt;
&lt;p&gt;In unrelated news, I&#x27;ve been playing with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt; as a static generator to replace
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;getpelican.com&quot;&gt;Pelican&lt;&#x2F;a&gt;, which this blog uses right now. So maybe, if I can find a few free hours to
convert over the minor syntax differences, y&#x27;all will get a metapost about &lt;em&gt;that&lt;&#x2F;em&gt; some time soon.&lt;&#x2F;p&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-change&quot;&gt;
&lt;p&gt;This is not at all a dig against &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tenforward.social&#x2F;@guinan&quot;&gt;Guinan&lt;&#x2F;a&gt;; in fact, I was able to
persuade them to drop the bans on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;journa.host&quot;&gt;journa.host&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&quot;&gt;fosstodon.org&lt;&#x2F;a&gt;. It&#x27;s just
got to be hard to do moderation more subtle than &quot;drop the ban hammer&quot; as one person. &lt;a href=&quot;#fr-change-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>New Style</title>
          <pubDate>Sat, 05 Nov 2022 15:03:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-theme/</link>
          <guid>https://www.roguelazer.com/blog/new-theme/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-theme/">&lt;p&gt;I decided that this website looked a little too much like a product of the early aughts, and
decided to redo the theme. Key changes since &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;dark-mode&#x2F;&quot;&gt;the last revision&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;No more &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;getbootstrap.com&#x2F;&quot;&gt;Bootstrap&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;No more JavaScript (except for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.commento.io&#x2F;&quot;&gt;Commento&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.goatcounter.com&#x2F;&quot;&gt;GoatCounter&lt;&#x2F;a&gt;, neither of which impacts any important functionality)&lt;&#x2F;li&gt;
&lt;li&gt;Simpler layout that looks more like Web 1.0 and works better with browser-default stylesheets.&lt;&#x2F;li&gt;
&lt;li&gt;Some more-modern CSS features (all flexbox all the time, variables for all colors, a less-janky dark mode than
before, using the &lt;code&gt;ch&lt;&#x2F;code&gt; unit for some text width things)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Hopefully it&#x27;s a little less visually-distracting. 🤷&lt;&#x2F;p&gt;
&lt;p&gt;If you want to talk about it, you can leave a comment below, or come &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tenforward.social&#x2F;@Roguelazer&quot;&gt;find me on
Mastodon&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mastodon Move</title>
          <pubDate>Thu, 06 Oct 2022 13:18:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/mastodon-move/</link>
          <guid>https://www.roguelazer.com/blog/mastodon-move/</guid>
          <description xml:base="https://www.roguelazer.com/blog/mastodon-move/">&lt;p&gt;Unfortunately, the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;joinmastodon.org&#x2F;&quot;&gt;Mastodon&lt;&#x2F;a&gt; server I&#x27;ve been on for the last few years (&lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.technology&quot;&gt;mastodon.technology&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;; since &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;mastodon&#x2F;&quot;&gt;2018&lt;&#x2F;a&gt;) is shutting down next month.
Thankfully, the decentralized nature of Mastodon means that it&#x27;s pretty easy to jump ship to another server&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-easy-1&quot;&gt;&lt;a href=&quot;#fn-easy&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and there are even &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.joinmastodon.org&#x2F;admin&#x2F;migrating&#x2F;&quot;&gt;semi-automated migration tools&lt;&#x2F;a&gt;.
Since Twitter seems to be about to dive back into being the hosting platform of choice for neo-nazis, I don&#x27;t want there to be any gap in my Fediverse access; I&#x27;ve set up a new Mastodon account at &lt;kbd&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tenforward.social&#x2F;@roguelazer&quot;&gt;@roguelazer@tenforward.social&lt;&#x2F;a&gt;&lt;&#x2F;kbd&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-tenforward-1&quot;&gt;&lt;a href=&quot;#fn-tenforward&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
Hopefully it&#x27;ll be another great community, like &lt;strong&gt;mastodon.technology&lt;&#x2F;strong&gt; was.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-easy&quot;&gt;
&lt;p&gt;Compare and contrast to how annoying it was when &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;App.net&quot;&gt;app.net&lt;&#x2F;a&gt; shut down in 2014 &lt;a href=&quot;#fr-easy-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-tenforward&quot;&gt;
&lt;p&gt;&lt;strong&gt;tenforward.social&lt;&#x2F;strong&gt; is, of course, named after the bar on the Enterprise-D in
&lt;abbr title=&quot;Star Trek: The Next Generation&quot;&gt;TNG&lt;&#x2F;abbr&gt;. It seems to have
originally been Star Trek-themed, but now is just generally nerdy. &lt;a href=&quot;#fr-tenforward-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>What&#x27;s Next?</title>
          <pubDate>Fri, 23 Sep 2022 15:37:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/whats-next/</link>
          <guid>https://www.roguelazer.com/blog/whats-next/</guid>
          <description xml:base="https://www.roguelazer.com/blog/whats-next/">&lt;p&gt;Today was my last day at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&quot;&gt;EasyPost&lt;&#x2F;a&gt;.
At a bit over seven years&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-years-1&quot;&gt;&lt;a href=&quot;#fn-years&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; this was the longest-running job I&#x27;ve ever had, which is very odd to think about.
In those seven years, the company&#x27;s grown from 10 people sitting around a scavenged
table in another company&#x27;s lobby on 2&lt;sup&gt;nd&lt;&#x2F;sup&gt; St in San Francisco to a
large enterprise with a veritable hydra of subsidiaries and hundreds of
employees;
from one transaction per second to thousands;
from 50,000 &lt;abbr title=&quot;source lines of code&quot;&gt;SLoC&lt;&#x2F;abbr&gt; in one
monolithic application to several million SLoC in hundreds of microservices.
While I was at EasyPost, I seem to have done &lt;strong&gt;19,752 commits&lt;&#x2F;strong&gt;
(&lt;span style=&quot;color: green&quot; title=&quot;lines added&quot;&gt;1,226,816 +&lt;&#x2F;span&gt;,
&lt;span style=&quot;color: red&quot; title=&quot;lines removed&quot;&gt;995,640 -&lt;&#x2F;span&gt;),
which is about 25% of the total commits across the codebases.
Those commits led to &lt;strong&gt;11,096 deploys&lt;&#x2F;strong&gt;, so I guess I didn&#x27;t quite nail the continuous integration thing.
I also built a few teams, ran hundreds of trainings on various topics, and
attended somewhere in the vicinity of 4,000 meetings.
Oh yeah, and I also wrote a bunch of blog posts&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-blogs-1&quot;&gt;&lt;a href=&quot;#fn-blogs&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In retrospect, seven years is probably too long to stay at a startup...
We built a bunch of neat stuff, but at some point every startup either fails or
lives to see itself become an enterprise. Anyhow, I&#x27;m off to another very small
company where I can learn some new things and build some new products. I&#x27;m sure
you&#x27;ll hear about it here soon.&lt;&#x2F;p&gt;
&lt;aside class=&quot;note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Update a few weeks later&lt;&#x2F;strong&gt;: the company I&#x27;m going to work for is called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.instrumentl.com&quot;&gt;Instrumentl&lt;&#x2F;a&gt; and makes
grant discovery software for nonprofits.&lt;&#x2F;p&gt;
&lt;&#x2F;aside&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-years&quot;&gt;
&lt;p&gt;2564 days; 1832 business days &lt;a href=&quot;#fr-years-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-blogs&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2018-02-16-security-updates&quot;&gt;Upcoming Security Updates for 2018&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2019-10-31-cyber-security-more-important-now-than-ever&quot;&gt;Cyber Security: More Important Now Than Ever&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2020-01-02-january-security-updates&quot;&gt;January 2020 Security Updates&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2020-02-19-label-retention-changes&quot;&gt;Label Retention Changes&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2020-04-15-rate-retention-change&quot;&gt;Rate Retention Policy Change&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2021-12-13-easypost-update-regarding-cve-2021-44228&quot;&gt;CVE-2021-44228 (log4shell)&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2022-08-22-migrating-terabytes-of-data-from-mysql-to-cassandra-with-no-downtime&quot;&gt;MySQL -&amp;gt; Cassandra Migration&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-blogs-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>SSH MITM at Best Western</title>
          <pubDate>Mon, 05 Sep 2022 14:43:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/weird-mitm/</link>
          <guid>https://www.roguelazer.com/blog/weird-mitm/</guid>
          <description xml:base="https://www.roguelazer.com/blog/weird-mitm/">&lt;p&gt;I&#x27;m currently staying in a Best Western hotel in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;visiteureka.com&quot;&gt;Eureka, CA&lt;&#x2F;a&gt;, avoiding
the Bay Area heat wave, and I noticed something remarkable: the hotel&#x27;s free WiFi network performs
automatic man-in-the-middle interception of all &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Secure_Shell&quot;&gt;SSH&lt;&#x2F;a&gt; traffic. I&#x27;ve &lt;strong&gt;literally never&lt;&#x2F;strong&gt; seen this before
on public WiFi... Check it out:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ssh github.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Someone could be eavesdropping on you right now (man-in-the-middle attack)!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;It is also possible that a host key has just been changed.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;The fingerprint for the RSA key sent by the remote host is&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHA256:lDE&#x2F;b9yqZmX2oUniEgQvWsxWeq7wyRTghSYS649tLHk.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Please contact your system administrator.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Add correct host key in &#x2F;Users&#x2F;jbrown&#x2F;.ssh&#x2F;known_hosts to get rid of this message.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Offending RSA key in &#x2F;Users&#x2F;jbrown&#x2F;.ssh&#x2F;known_hosts:5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Host key for github.com has changed and you have requested strict checking.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Host key verification failed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>⤭ Migrating Terabytes Of Data From MySQL To Cassandra With No Downtime</title>
          <pubDate>Mon, 22 Aug 2022 12:00:00 +0000</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2022-08-22-migrating-terabytes-of-data-from-mysql-to-cassandra-with-no-downtime/</link>
          <guid>https://www.roguelazer.com/blog/2022-08-22-migrating-terabytes-of-data-from-mysql-to-cassandra-with-no-downtime/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2022-08-22-migrating-terabytes-of-data-from-mysql-to-cassandra-with-no-downtime/">&lt;p&gt;Wrote &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20250427221424&#x2F;https:&#x2F;&#x2F;www.easypost.com&#x2F;blog&#x2F;2022-08-22-migrating-terabytes-of-data-from-mysql-to-cassandra-with-no-downtime&quot;&gt;a blog post on the easypost engineering blog&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-link-1&quot;&gt;&lt;a href=&quot;#fn-link&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
about the big project to replace MySQL&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-galera-1&quot;&gt;&lt;a href=&quot;#fn-galera&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; with Cassandra for storing webhook data.
This was a big project that almost went totally sideways, but
ended up working out in the end.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-link&quot;&gt;
&lt;p&gt;Updated 2025-12-16: EasyPost replaced all their blog content with AI slop, so this now links to archive.org. Fie on them! &lt;a href=&quot;#fr-link-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-galera&quot;&gt;
&lt;p&gt;Well, actually, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;galeracluster.com&quot;&gt;Galera&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-xtradb-1&quot;&gt;&lt;a href=&quot;#fn-xtradb&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; &lt;a href=&quot;#fr-galera-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-xtradb&quot;&gt;
&lt;p&gt;Fine, actually &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.percona.com&#x2F;mysql&#x2F;software&#x2F;percona-xtradb-cluster&quot;&gt;Percona XtraDB Cluster&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-xtradb-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Let&#x27;s Talk About Elastomeric Masks!</title>
          <pubDate>Sun, 21 Aug 2022 22:36:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/masks/</link>
          <guid>https://www.roguelazer.com/blog/masks/</guid>
          <description xml:base="https://www.roguelazer.com/blog/masks/">&lt;p&gt;As has become abundantly clear recently, COVID-19 isn&#x27;t going away; in fact, it&#x27;s striking more
and more of my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;covid-19-finally-hits-at-home&#x2F;&quot;&gt;friends and family&lt;&#x2F;a&gt; who had successfully avoided it for years.
At this point, we have &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.medrxiv.org&#x2F;content&#x2F;10.1101&#x2F;2022.07.28.22278153v1&quot;&gt;ample&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nih.gov&#x2F;news-events&#x2F;news-releases&#x2F;mandatory-masking-schools-reduced-covid-19-cases-during-delta-surge&quot;&gt;evidence&lt;&#x2F;a&gt;
that
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cidrap.umn.edu&#x2F;news-perspective&#x2F;2021&#x2F;10&#x2F;commentary-what-can-masks-do-part-1-science-behind-covid-19-protection&quot;&gt;masks&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.acpjournals.org&#x2F;doi&#x2F;10.7326&#x2F;L22-0272&quot;&gt;work&lt;&#x2F;a&gt; to drastically reduce the spread of COVID;
however, none
of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;berkeleyca.gov&#x2F;safety-health&#x2F;covid-19&#x2F;masks-and-face-coverings&quot;&gt;local&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;covid19.ca.gov&#x2F;masks-and-ppe&#x2F;&quot;&gt;state&lt;&#x2F;a&gt;, or
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cdc.gov&#x2F;coronavirus&#x2F;2019-ncov&#x2F;easy-to-read&#x2F;mask-guidance.html&quot;&gt;federal&lt;&#x2F;a&gt; governments are willing to take
the low-cost, high-return step of requiring mask usage in public settings, so most people just don&#x27;t bother. The
fact that I&#x27;m usually the only one wearing a mask in any given space,
combined with the increased contagiousness of the Omicron family of variants, means that I&#x27;ve been spending the last
few months wearing N95 masks a lot of the time. Given that I had an unavoidable plane trip coming up, and spurred by the recent
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2022&#x2F;07&#x2F;03&#x2F;health&#x2F;covid-ppe-masks-health-care.html&quot;&gt;New York Times article on elasticmeric
masks&lt;&#x2F;a&gt;, I decided that it was time to
investigate reusable (and potentially both more-protective and more-comfortable) options. In general, reusable
respirators (often called &quot;elastomeric&quot; because of the rubbery plastic they&#x27;re made of) offer better
filtration and much better seals than disposable masks -- if you wear glasses and have problems with fogging due to
a poorly-fit disposable mask, you should strongly consider an elastomeric mask. After some research, I ended up
buying three different reusable half-facepiece respirators, and this post has some brief impressions of them.&lt;&#x2F;p&gt;
&lt;p&gt;Just a note up front: I am (of course) not a doctor and can&#x27;t give you medical advice. As far as I know, all of these
respirators are suitable for reducing your risk of catching COVID-19, but you should probably talk to an actual expert.
You can find some useful information on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cdc.gov&#x2F;coronavirus&#x2F;2019-ncov&#x2F;hcp&#x2F;elastomeric-respirators-strategy&#x2F;index.html&quot;&gt;the CDC&#x27;s page about elastomeric
respirators&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Reflecting on Photography Gear; Leaving Micro Four Thirds</title>
          <pubDate>Mon, 27 Jun 2022 00:39:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/reflecting-on-photography-gear/</link>
          <guid>https://www.roguelazer.com/blog/reflecting-on-photography-gear/</guid>
          <description xml:base="https://www.roguelazer.com/blog/reflecting-on-photography-gear/">&lt;p&gt;As far back as I can remember, I&#x27;ve enjoyed photography as a hobby. It&#x27;s probably because my father&#x27;s father was a
journalist and he never went anywhere without his Leica around his neck --- or maybe it&#x27;s just because there&#x27;s
something magical at being able to hold the past in your hand and look at it whenever you want.&lt;&#x2F;p&gt;










&lt;figure&gt;
  
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;reflecting-on-photography-gear&amp;#x2F;poppop.jpeg&quot;&gt;
    
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;poppop.33800a6308efde31.jpg&quot;  &#x2F;&gt;
    
  &lt;&#x2F;a&gt;
  
  &lt;figcaption&gt;My grandfather, seen with his &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kenrockwell.com&#x2F;leica&#x2F;minilux.htm&quot;&gt;Leica Minilux&lt;&#x2F;a&gt;&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;While it&#x27;s absolutely true that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kenrockwell.com&#x2F;tech&#x2F;notcamera.htm&quot;&gt;your camera doesn&#x27;t matter&lt;&#x2F;a&gt;, I&#x27;ve
just recently changed up my camera gear again, and I thought it might be fun to look back at some of the cameras
I&#x27;ve used over the last 20 or so years.&lt;&#x2F;p&gt;
&lt;p&gt;We had some cheap 35mm (and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Advanced_Photo_System&quot;&gt;APS&lt;&#x2F;a&gt;) film cameras when I was young, but things
really took off when we got a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sony_Mavica#Digital_Mavica_line&quot;&gt;Sony Digital Mavica&lt;&#x2F;a&gt;
(the very first one, the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cameralabs.com&#x2F;sony-mavica-mvc-fd5-retro-review&#x2F;&quot;&gt;MVC-FD5&lt;&#x2F;a&gt; which took &lt;em&gt;digital&lt;&#x2F;em&gt; pictures and record them onto regular 3.5&quot; floppy disks).
No more driving to CVS and waiting 3 days for them to develop your photos?
Wow!
The pictures were awful, but it was a start, and I was hooked on digital photography.
A few years later (in 2001), the family upgraded to an HP PhotoSmart (I think &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.imaging-resource.com&#x2F;PRODS&#x2F;PS215&#x2F;P21A.HTM&quot;&gt;model 215&lt;&#x2F;a&gt;, but it&#x27;s not in the EXIF data) with an &lt;em&gt;unbelievable&lt;&#x2F;em&gt; 1.3MP resolution and a 4MB CompactFlash card that could store so many more photos than a 1.44MB floppy.
Just look at this image (whose EXIF data says 2001-01-01, but couldn&#x27;t been earlier than March 2001):&lt;&#x2F;p&gt;










&lt;figure&gt;
  
  &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;reflecting-on-photography-gear&amp;#x2F;photosmart.jpeg&quot;&gt;
    
	&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;photosmart.2a0822dba40c3b34.jpg&quot;  &#x2F;&gt;
    
  &lt;&#x2F;a&gt;
  
  &lt;figcaption&gt;This is what pre-9&#x2F;11 America looked like. Really bad exposure&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;In 2003, there was a brief sidegrade to the still-1.3MP (but much prettier and smaller) &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dpreview.com&#x2F;articles&#x2F;8670210434&#x2F;sonyu10preview&quot;&gt;Sony CyberShot
DSC-U10&lt;&#x2F;a&gt;. It didn&#x27;t really take better pictures,
but because it was smaller and lighter, it could go more places, and like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.chasejarvis.com&#x2F;&quot;&gt;Chase Jarvis&lt;&#x2F;a&gt; says, &lt;em&gt;&quot;the best camera is the
one you have with you.&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>2022 GPG Key Transition</title>
          <pubDate>Wed, 22 Jun 2022 16:02:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2022-gpg-key-transition/</link>
          <guid>https://www.roguelazer.com/blog/2022-gpg-key-transition/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2022-gpg-key-transition/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2022-gpg-key-transition&amp;#x2F;GnuPG-Logo.svg&quot; alt=&quot;GnuPG Logo&quot; class=&quot;lfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;Yet again, it has come time to rotate my PGP&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnupg.org&#x2F;&quot;&gt;GnuPG&lt;&#x2F;a&gt; private key. My old key (&lt;kbd&gt;1ED5E5A301C3D109904022893C7775DD37811E62&lt;&#x2F;kbd&gt;) actually expired a couple of weeks ago, and I&#x27;ve been procrastinating writing up this transition.
The new key is &lt;code&gt;0xC6496DEB3DA8E9B5&lt;&#x2F;code&gt; (full fingerprint: &lt;kbd&gt;24F8AA354990F3F562EC014BC6496DEB3DA8E9B5&lt;&#x2F;kbd&gt;)
You can also find it at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.gpg&quot;&gt;https:&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.gpg&lt;&#x2F;a&gt;.
It has also been attached to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;roguelazer&quot;&gt;my keybase.io account&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&quot;&gt;my Github profile&lt;&#x2F;a&gt;.
It is cross-signed by the old key.&lt;&#x2F;p&gt;
&lt;p&gt;My signed transition document is below, and can also be found at
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2022-gpg-key-transition&#x2F;2022-05-28-key-transition-statement.txt.asc&quot;&gt;2022-05-28-key-transition-statement.txt.asc&lt;&#x2F;a&gt; if
you prefer to download it directly.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>COVID-19 Finally Hits at Home</title>
          <pubDate>Sat, 11 Jun 2022 22:36:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/covid-19-finally-hits-at-home/</link>
          <guid>https://www.roguelazer.com/blog/covid-19-finally-hits-at-home/</guid>
          <description xml:base="https://www.roguelazer.com/blog/covid-19-finally-hits-at-home/">&lt;p&gt;After &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates&#x2F;&quot;&gt;more than two years&lt;&#x2F;a&gt; of
successfully dodging it,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;COVID-19&quot;&gt;COVID-19&lt;&#x2F;a&gt; finally hit
my family the week. On Tuesday my wife woke up with a migraine, which isn&#x27;t
unusual for her; on Wednesday morning, she woke up with a low (100.4°F
fever) and we belatedly realized that she might be sick. She took an antigen
test&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-antigen-1&quot;&gt;&lt;a href=&quot;#fn-antigen&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and the TEST line turned blue basically instantly.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Shit.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Quarantine ensued. Isaac (our son) has been home from school&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-school-1&quot;&gt;&lt;a href=&quot;#fn-school&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and we&#x27;ve all been
cooped up on the property for the past few days.&lt;&#x2F;p&gt;
&lt;p&gt;So far, Isaac and I have continued to be symptom-free and testing negative on
antigen tests. I also got one PCR &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-PCR-1&quot;&gt;&lt;a href=&quot;#fn-PCR&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; (so far) which was negative. We&#x27;ve been
trying to isolate as much as possible, but Eva and I both have full-time jobs,
and Isaac can&#x27;t go back to day care until this nightmare is over, so there&#x27;s
only so much we can do — we also have a relatively small house which doesn&#x27;t
have any tightly-closing inside doors. Both of us adults have been wearing N95
masks whenever awake, and we have HEPA air purifiers&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-purifiers-1&quot;&gt;&lt;a href=&quot;#fn-purifiers&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; running in
whatever rooms we happen to be occupying.&lt;&#x2F;p&gt;
&lt;p&gt;Eva is fully-vaccinated and has had mild symptoms (runny nose, low fever, etc),
but she still is &lt;em&gt;very strongly positive&lt;&#x2F;em&gt; on antigen tests; hopefully she&#x27;ll
recover in the next few days, and then Isaac and I can get PCRs, and then he can
go back to school, and then in a few weeks he can finally get
vaccinated&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-babyvax-1&quot;&gt;&lt;a href=&quot;#fn-babyvax&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and then we&#x27;ll be done with this... &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theatlantic.com&#x2F;health&#x2F;archive&#x2F;2022&#x2F;05&#x2F;covid-reinfection-research-immunity&#x2F;639436&#x2F;&quot;&gt;at least, for a little
while&lt;&#x2F;a&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;In the meantime, I&#x27;m left wondering &lt;em&gt;why&lt;&#x2F;em&gt; Eva got sick and I didn&#x27;t. It&#x27;s not
like she&#x27;s gone anywhere I haven&#x27;t. Is my immune system just stronger — did we
both get exposed, and I happened to produce some overwhelming immune response?
Or did I just happen to dodge whatever breath carried the disease, and every
second I spend in this household is another chance of exposure?&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;re, of course, extremely lucky to have made it two years without anyone in
this household (or our parents or siblings) getting sick, and we&#x27;re lucky that
neither of us is seriously ill, but damn if this isn&#x27;t annoying.&lt;&#x2F;p&gt;
&lt;p&gt;Some more reading, if you&#x27;re in a COVID mood:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cdc.gov&#x2F;mmwr&#x2F;volumes&#x2F;71&#x2F;wr&#x2F;mm7121e1.htm?s_cid=mm7121e1_w&quot;&gt;&quot;Post–COVID Conditions Among Adult COVID-19 Survivors Aged 18–64 and ≥65
Years — United States, March 2020–November 2021&quot;&lt;&#x2F;a&gt;: a CDC study from
two weeks ago showing long COVID may occur in as many as 20% of people. Oof.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;theconversation.com&#x2F;why-covid-19-gaslighting-by-politicians-is-so-dangerous-for-democracy-181103&quot;&gt;&quot;Why COVID-19 gaslighting by politicians is so dangerous for
democracy&quot;&lt;&#x2F;a&gt;: I am a registered Democrat, but that doesn&#x27;t mean I
think Democrats&#x27; chief motivation is anything other than getting elected. See
also: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.aier.org&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;03&#x2F;IMPACT-COVID-positioning-strategy-memo.pdf&quot;&gt;this infamous and awful memo&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gawker.com&#x2F;news&#x2F;leana-wen-career-arc-covid-pandemic-pundit&quot;&gt;&quot;The Curious Case of Leana Wen, Physician-Advocate Turned Covid
Pundit&quot;&lt;&#x2F;a&gt;: Some inside baseball that follows up the previous article
very well&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theatlantic.com&#x2F;health&#x2F;archive&#x2F;2022&#x2F;06&#x2F;is-my-negative-covid-test-accurate&#x2F;661242&#x2F;&quot;&gt;&quot;A Negative COVID Test Has Never Been So Meaningless&quot;&lt;&#x2F;a&gt;: antigen
tests have a sensitivity of as low as 40% and can&#x27;t be trusted if they show a
negative. Thank goodness we&#x27;re &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;science&#x2F;2022&#x2F;06&#x2F;biden-admin-sacrifices-testing-capacity-ppe-stockpile-to-buy-fall-boosters&#x2F;&quot;&gt;cutting off funding for testing&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;À bientôt.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-antigen&quot;&gt;
&lt;p&gt;We have to test basically constantly because of colds from day-care,
so we go through 2-4 tests a week. I&#x27;ve been buying the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.letsongo.com&#x2F;&quot;&gt;on&#x2F;go
tests&lt;&#x2F;a&gt; from various online retailers, but we&#x27;ve
also used FlowFlex, Binax, and iHealth tests. The free federal ones were nice
but lasted... a couple of weeks... &lt;a href=&quot;#fr-antigen-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-school&quot;&gt;
&lt;p&gt;Because we&#x27;re not sociopaths and don&#x27;t want to get his classmates
sick. I&#x27;ve had some... distressing... discussions with other parents who don&#x27;t
even seem to be able to think of other peoples&#x27; children and just scheme how
to get their sick kids back into school, damn the consequences. &lt;a href=&quot;#fr-school-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-PCR&quot;&gt;
&lt;p&gt;This was a miserable experience. My primary care provider (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.onemedical.com&quot;&gt;One
Medical&lt;&#x2F;a&gt;) has no PCR appointments in the East Bay
available in the next 5 weeks, and the municipal sites are all shut down. I
ended up going to the state-affiliated site (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;lhi.care&quot;&gt;LHI&lt;&#x2F;a&gt;), which
doesn&#x27;t let you reserve PCR tests any more, but if you make an appointment for
a rapid test, you can ask for a PCR when you get there, and they&#x27;ll give it to
you if they have supply. We&#x27;re 27 months into this pandemic... how have we
still not figured out testing‽ &lt;a href=&quot;#fr-PCR-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-purifiers&quot;&gt;
&lt;p&gt;We already had a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B01728NLRG&#x2F;&quot;&gt;Coway AP-1512HH(W)&lt;&#x2F;a&gt; and I grabbed a couple of
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.blueair.com&#x2F;us&#x2F;air-purifiers&#x2F;pure-411-auto&#x2F;2218.html&quot;&gt;Blueair 411-Auto&lt;&#x2F;a&gt;s. &lt;a href=&quot;#fr-purifiers-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-babyvax&quot;&gt;
&lt;p&gt;Don&#x27;t even get me started on how insanely frustrating the situation
is with vaccines for children under 5. Despite those children being &lt;em&gt;prolific&lt;&#x2F;em&gt; carriers
of COVID, the FDA seems determined to not let them get vaccinated. My best
guess is that someone at the FDA is in the pocket of Pfizer and that&#x27;s why
they&#x27;ve sat on the &lt;strong&gt;highly effective&lt;&#x2F;strong&gt; ModeRNA vaccine for the last two
months; see also, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;michaelzlin&#x2F;status&#x2F;1533178930378596352&quot;&gt;this tweet
thread&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-babyvax-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>The Long-Overdue Baby Gear Post</title>
          <pubDate>Thu, 12 May 2022 18:57:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/baby-gear/</link>
          <guid>https://www.roguelazer.com/blog/baby-gear/</guid>
          <description xml:base="https://www.roguelazer.com/blog/baby-gear/">&lt;p&gt;As you &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;a-son&#x2F;&quot;&gt;might recall&lt;&#x2F;a&gt;, my son Isaac was born a couple of years ago. This was obviously an
occasion for joy and family happiness (and an end to regular sleep) — but beyond that, it was the beginning of a
capitalist glut, a massive influx of new Stuff. So, uh, I figured I&#x27;d write about that in case any of my readers
ever have a kid and want to know about various baby support items.&lt;&#x2F;p&gt;
&lt;p&gt;In general, we had a few constraints:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;our house is relatively small (~1200sqft) and has little storage&lt;&#x2F;li&gt;
&lt;li&gt;when we were making most of these decisions, my wife and I spent a relatively large amount of time traveling (both
via local transit options like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bart.gov&#x2F;&quot;&gt;BART&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.actransit.org&#x2F;&quot;&gt;AC Transit&lt;&#x2F;a&gt;, and on
planes to visit our far-flung families)&lt;&#x2F;li&gt;
&lt;li&gt;money&#x2F;price is... not a chief concern&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Some of my go-tos for researching items before buying them were &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;wirecutter&#x2F;&quot;&gt;the Wirecutter&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.babygearlab.com&#x2F;&quot;&gt;Baby Gear Lab&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.consumerreports.org&#x2F;&quot;&gt;Consumer Reports&lt;&#x2F;a&gt; but, frankly, none
of these had quite the same set of priorities as we did. We also went to some local retail stores (shout-out to the
now-defunct Tot Tank in Alameda) and of course talked to all of our friends with kids. For non-safety-sensitive
things, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.berkeleyparentsnetwork.org&#x2F;&quot;&gt;Berkeley Parents Network&lt;&#x2F;a&gt; has been a good resource for used items.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, read on for all the big-ticket items!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>New Chair!</title>
          <pubDate>Thu, 30 Sep 2021 17:57:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-chair/</link>
          <guid>https://www.roguelazer.com/blog/new-chair/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-chair/">&lt;p&gt;Hello dear readers! Like most of you (and &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;office&#x2F;&quot;&gt;as I&#x27;ve written about before&lt;&#x2F;a&gt;), I&#x27;ve been
stuck working from home for the last year and a half, out of the little converted covered porch on my house. For the
last six months or so, I&#x27;ve been doing so with my butt firmly planted on an HON Basyx pleather-upholstered office chair
that I rescued from my office when we moved out. This chair is, uh, not in the best condition&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-flakes-1&quot;&gt;&lt;a href=&quot;#fn-flakes&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-chair&amp;#x2F;2021-09-30-old-chair.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-chair&amp;#x2F;2021-09-30-old-chair.jpg&quot; alt=&quot;old chair&quot; class=&quot;cimg qimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;This chair actually originally belonged to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.linkedin.com&#x2F;company&#x2F;curse-inc&quot;&gt;Curse&lt;&#x2F;a&gt;, a now-defunct company
that made some kind of WoW fansite. They used to be in my company&#x27;s old office (2016-2018) and left behind all of their
furniture when they were acquired by Amazon. I snagged one of these pleather chairs from their board room and had been
using it since.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, I finally decided to replace the chair a few months ago and kicked off a long search for a better chair.
Something you may not have known: it was really damn hard to buy a chair at the height of the pandemic. Every chair in
the universe was backordered &lt;strong&gt;and&lt;&#x2F;strong&gt; no stores would let you actually sit down in chairs to try them out. Starting this
spring, though, things started to lighten up a bit, and I was able to go to some stores (including the local &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dwr.com&#x2F;&quot;&gt;Design
Within Reach&lt;&#x2F;a&gt;) and try out some overpriced chairs. In the end, I decided to go for a
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hermanmiller.com&#x2F;products&#x2F;seating&#x2F;office-chairs&#x2F;cosm-chairs&#x2F;&quot;&gt;Herman-Miller Cosm&lt;&#x2F;a&gt;, which is kind of a
strange chair. It&#x27;s designed for public spaces and has very little customization. For most people, I think that&#x27;s a
drawback, but I really hate highly-customizable chairs like the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hermanmiller.com&#x2F;products&#x2F;seating&#x2F;office-chairs&#x2F;aeron-chairs&#x2F;&quot;&gt;Aeron&lt;&#x2F;a&gt; because when I&#x27;m in them, I spend all
of my time fidgeting with the levers to try to get a slightly more comfortable experience. For Herman-Miller, it came
down to the Cosm or the Eames Executive, both of which are very comfortable, low-configuration chairs. I also of course
looked at Steelcase, as well as some of the cheap brands at big-box stores. In the end, I decided that the Cosm was the
most comfortable option&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-comfort-1&quot;&gt;&lt;a href=&quot;#fn-comfort&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and also cost $2000 less than the Eames chairs, so that&#x27;s what I
bought&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-features-1&quot;&gt;&lt;a href=&quot;#fn-features&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-chair&amp;#x2F;2021-09-30-new-chair.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-chair&amp;#x2F;2021-09-30-new-chair.jpg&quot; alt=&quot;new chair&quot; class=&quot;cimg qimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;Now if I could just figure out some way to make it not 90°F in this room when the sun&#x27;s out and 55° otherwise...&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-flakes&quot;&gt;
&lt;p&gt;Fun fact: those little black dots you can see on the rug under the chair aren&#x27;t random dirt, they&#x27;re actually
little flakes of the synthetic leather from the chair. &lt;a href=&quot;#fr-flakes-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-comfort&quot;&gt;
&lt;p&gt;The seat is a little short, which kind of sucks, but the &quot;auto-harmonic tilt&quot; back is &lt;em&gt;just right&lt;&#x2F;em&gt; &lt;a href=&quot;#fr-comfort-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-features&quot;&gt;
&lt;p&gt;Specifically, with a mid back and adjustable arms. I actually don&#x27;t use my chair arms very much because I
have terrible posture and rest my arms on my desk instead, but the cool-looking wing arms on the Cosm by default
are... just awful... &lt;a href=&quot;#fr-features-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>CDPH Digital Vaccine Record</title>
          <pubDate>Sat, 19 Jun 2021 09:41:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/cdph-digital-vaccine-record/</link>
          <guid>https://www.roguelazer.com/blog/cdph-digital-vaccine-record/</guid>
          <description xml:base="https://www.roguelazer.com/blog/cdph-digital-vaccine-record/">&lt;p&gt;Yesterday, California released their &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;myvaccinerecord.cdph.ca.gov&#x2F;&quot;&gt;Digital Vaccine Record&lt;&#x2F;a&gt; system for securely verifying residents&#x27;
COVID-19 vaccination status. I took a look at it and thought I&#x27;d write up my findings here.  At a high level, the DVR consists of a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;QR_code&quot;&gt;QR code&lt;&#x2F;a&gt; which contains a cryptographically-signed assertion in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;html&#x2F;rfc7519&quot;&gt;JSON Web
Token&lt;&#x2F;a&gt; (JWT) format. I&#x27;ll walk you through how to get one, how to
decode it, and what it contains in the rest of this article.&lt;&#x2F;p&gt;
&lt;p&gt;Getting one of the tokens is pretty easy; you just go to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;myvaccinerecord.cdph.ca.gov&#x2F;&quot;&gt;Digital Vaccine Record&lt;&#x2F;a&gt; website and put in your
name, date of birth, and the phone number or email address you gave when you got your vaccine. I got mine through
CVS, and, for whatever reason, they &lt;em&gt;only&lt;&#x2F;em&gt; provided my phone number to the state, not my email address. The state
will then send you an email or SMS containing a short-lived link to a website which will show a &lt;em&gt;very large&lt;&#x2F;em&gt; and
information-dense QR Code.&lt;&#x2F;p&gt;
&lt;p&gt;You can scan this QR code with the QR code scanner of your choice and you should get back some text&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-some-1&quot;&gt;&lt;a href=&quot;#fn-some&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; like the
following:&lt;&#x2F;p&gt;
&lt;pre style=&quot;word-wrap:anywhere&quot;&gt;
shc:&#x2F;56762909524320603460292437404460312229595326546034602925407728043360287028647167452228092861553055647103414321643241110839632106452403713377212638633677424237084126633945392929556404425627596537253338446120605736010645293353127074232853503870255550530362394304317059085244240537...
&lt;&#x2F;pre&gt;
&lt;p&gt;This very long string is a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;spec.smarthealth.cards&#x2F;&quot;&gt;Smart Health Card&lt;&#x2F;a&gt; token, which is the framework being used by several states. Let&#x27;s
decode it with a little bit of Python!&lt;&#x2F;p&gt;
&lt;p&gt;First, create a virtualenv somewhere handy with &lt;code&gt;python3 -m virtualenv venv&lt;&#x2F;code&gt;. Next, we&#x27;ll install &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&#x2F;pyjwt&#x2F;tree&#x2F;deflate&quot;&gt;my forked copy of pyjwt&lt;&#x2F;a&gt;
(which adds gzip support, as required for SHC) with &lt;code&gt;.&#x2F;venv&#x2F;bin&#x2F;pip install -e &#x27;git+https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&#x2F;pyjwt.git@deflate#egg=pyjwt[crypto]&#x27;&lt;&#x2F;code&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-pip-install-1&quot;&gt;&lt;a href=&quot;#fn-pip-install&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The following code will verify the signature on your SHC and print out the contents:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7DCFFF);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; jwt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7DCFFF);&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt; decode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#FF9800, #E0AF68);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;startswith&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;shc:&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; decode the numeric data into binary data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; len&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;code is not the right length&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; range&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt;len&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;append&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt;chr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt;int&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt; code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 45&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;join&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; download the public keys from the CDPH website. Oddity: the .well-known&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; directory should be at the top-level, but it isn&amp;#39;t!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    jwks_client&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; jwt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;PyJWKClient&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;        &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;https:&#x2F;&#x2F;myvaccinerecord.cdph.ca.gov&#x2F;creds&#x2F;.well-known&#x2F;jwks.json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;    )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; find the matching signing key based on the header&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    signing_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; jwks_client&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;get_signing_key_from_jwt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    data&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; jwt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;decode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt; signing_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;key&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; algorithms&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;ES256&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;RS256&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; input&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;SHC code: &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;json&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;dumps&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;decode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #C0CAF5);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If it works, you should get something like the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7AA2F7);&quot;&gt;iss&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;https:&#x2F;&#x2F;myvaccinerecord.cdph.ca.gov&#x2F;creds&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7AA2F7);&quot;&gt;nbf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 1624036526&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7AA2F7);&quot;&gt;vc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;https:&#x2F;&#x2F;smarthealth.cards#health-card&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;https:&#x2F;&#x2F;smarthealth.cards#immunization&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;https:&#x2F;&#x2F;smarthealth.cards#covid19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;    ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;credentialSubject&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7DCFFF);&quot;&gt;fhirVersion&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;4.0.1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;      &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #7DCFFF);&quot;&gt;fhirBundle&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;resourceType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Bundle&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;collection&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;        &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;entry&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;fullUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resource:0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;resource&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;resourceType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Patient&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;family&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;YOUR LAST NAME&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;given&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;YOUR FIRST NAME&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;birthDate&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;YOUR BIRTH DATE&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;fullUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resource:1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;resource&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;resourceType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Immunization&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;status&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;completed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;vaccineCode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;coding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;system&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;http:&#x2F;&#x2F;hl7.org&#x2F;fhir&#x2F;sid&#x2F;cvx&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;207&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;patient&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;reference&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resource:0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;occurrenceDateTime&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;2021-04-19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;performer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;actor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;display&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;CVS CORPORATE&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;lotNumber&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;036B21A&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;fullUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resource:2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;            &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #E0AF68);&quot;&gt;resource&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;resourceType&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Immunization&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;status&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;completed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;vaccineCode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;coding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;system&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;http:&#x2F;&#x2F;hl7.org&#x2F;fhir&#x2F;sid&#x2F;cvx&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;code&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;207&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;patient&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;reference&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;resource:0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;occurrenceDateTime&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;2021-05-18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;performer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #73DACA);&quot;&gt;actor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;                    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;display&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;CVS CORPORATE&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;              ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;              &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #0DB9D7);&quot;&gt;lotNumber&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt; 025C21A&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;          }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;        ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is pretty much what you might expect and is in line with, e.g., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;en&#x2F;mozilla&#x2F;leadership&#x2F;notes-on-implementing-vaccine-passports&#x2F;&quot;&gt;this very good article from the Mozilla
blog&lt;&#x2F;a&gt;. It contains the
minimum amount of information required to identify someone (ideally paired with looking at their license or
something), it can be easily printed or otherwise stored offline&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-search-1&quot;&gt;&lt;a href=&quot;#fn-search&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, it&#x27;s cryptographically verified using standard protocols and technologies. The only
thing that worries me is that it doesn&#x27;t seem to have a human-readable field to encode what kind of vaccine it was that I received&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-field-1&quot;&gt;&lt;a href=&quot;#fn-field&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;,
so if it turns out that one of the vaccines is ineffective against a variant and folks with that shot need a booster
in order to be considered &quot;fully vaccinated&quot;, that will require some gymnastics. That&#x27;s a pretty minor and
hypothetical concern, though.&lt;&#x2F;p&gt;
&lt;p&gt;Good on California for coming up with a reasonable and efficient system&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-blockchain-1&quot;&gt;&lt;a href=&quot;#fn-blockchain&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;! I look forward for using it in
the future to be able to go to crowded places and feel confident that I&#x27;m not putting my un-vaccinatable son at risk. Hooray!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-some&quot;&gt;
&lt;p&gt;Mine is more than 1600 digits! &lt;a href=&quot;#fr-some-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-pip-install&quot;&gt;
&lt;p&gt;This line says, basically, install the package at &lt;code&gt;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&#x2F;pyjwt.git&lt;&#x2F;code&gt; from the
&quot;deflate&quot; branch, under the name &quot;pyjwt&quot;, and with the optional feature &quot;crypto&quot; to enable cryptographically
validating tokens &lt;a href=&quot;#fr-pip-install-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-search&quot;&gt;
&lt;p&gt;Remember, kids: never give your unlocked phone to a law enforcement officer under any circumstances. You
do not want to consent to a search. &lt;a href=&quot;#fr-search-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-field&quot;&gt;
&lt;p&gt;I assume this is what the &quot;vaccine.coding.system&quot; and &quot;vaccine.coding.code&quot; fields are supposed to
represent, but these are not human-friendly and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;hl7.org&#x2F;fhir&#x2F;sid&#x2F;cvx&quot;&gt;http:&#x2F;&#x2F;hl7.org&#x2F;fhir&#x2F;sid&#x2F;cvx&lt;&#x2F;a&gt; is a dead link. &lt;a href=&quot;#fr-field-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-blockchain&quot;&gt;
&lt;p&gt;And, particularly, good on California for doing so without doing anything &lt;em&gt;deeply stupid&lt;&#x2F;em&gt; involving
blockchains &lt;a href=&quot;#fr-blockchain-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>More ModeRNA: Vaccinated (part 2)</title>
          <pubDate>Wed, 19 May 2021 09:37:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/more-moderna/</link>
          <guid>https://www.roguelazer.com/blog/more-moderna/</guid>
          <description xml:base="https://www.roguelazer.com/blog/more-moderna/">&lt;p&gt;Yesterday around 10am, I got my second shot of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.modernatx.com&#x2F;&quot;&gt;ModeRNA&lt;&#x2F;a&gt; COVID-19 vaccine
(unsurprisingly, I got my
first show &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;vaccinated&#x2F;&quot;&gt;four weeks ago&lt;&#x2F;a&gt;);
at this point I&#x27;m in the countdown to be &quot;fully vaccinated&quot;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fvax-1&quot;&gt;&lt;a href=&quot;#fn-fvax&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. So far, the side effects have been pretty mild:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I was maybe a little tired yesterday afternoon&lt;&#x2F;li&gt;
&lt;li&gt;Yesterday evening I had an elevated temperature of 99.7°F, but no clinical fever&lt;&#x2F;li&gt;
&lt;li&gt;This morning my arm feels like I lost a really intense game of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Punch_buggy&quot;&gt;Punch Buggy&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I know the pandemic is nowhere near over and people are dying by the thousands around the world, but I&#x27;m certainly happy
that my chances of serious illness are now very close to zilch.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of the pandemic being nowhere near over, let me just say how bizarre I find &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2021&#x2F;04&#x2F;27&#x2F;us&#x2F;politics&#x2F;coronavirus-masks-outdoors.html&quot;&gt;last week&#x27;s CDC guidance&lt;&#x2F;a&gt; on
face masks and social distancing... 48% of the US is currently vaccinated, with some states as low as 33%. Even here
in Alameda County, only 60% of eligible adults are vaccinated so far. I&#x27;ve been spending the last year watching an
endless sequence of men&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-men-1&quot;&gt;&lt;a href=&quot;#fn-men&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; who certainly were not vaccinated refuse to take any precautions; now the CDC is saying
that I&#x27;m all of a sudden supposed to trust that all the newly-unmasked people around me aren&#x27;t in the 40% who haven&#x27;t
gotten vaccinated? Yeah, right! I know that I, when I am fully-vaccinated, will not be at much risk, but I&#x27;d rather not
risk that my infant son join the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.npr.org&#x2F;sections&#x2F;coronavirus-live-updates&#x2F;2021&#x2F;05&#x2F;03&#x2F;993141036&#x2F;children-now-account-for-22-of-new-u-s-covid-cases-why-is-that&quot;&gt;increasing number of pediatric COVID-19 cases&lt;&#x2F;a&gt;.  I&#x27;m glad that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sfchronicle.com&#x2F;news&#x2F;article&#x2F;California-to-lift-indoor-mask-mandate-June-15-16183030.php&quot;&gt;California is being
a little more conservative&lt;&#x2F;a&gt; and waiting until June 15th. It&#x27;s a damn shame that nobody was able to figure out a
reliable &quot;vaccine passport&quot; system yet&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-nyvp-1&quot;&gt;&lt;a href=&quot;#fn-nyvp&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; Mozilla has &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.mozilla.org&#x2F;blog&#x2F;2021&#x2F;04&#x2F;22&#x2F;notes-on-implementing-vaccine-passports&#x2F;&quot;&gt;a good article&lt;&#x2F;a&gt; on how this could be done that,
unfortunately, I don&#x27;t think any US state will ever bother to implement.&lt;&#x2F;p&gt;
&lt;p&gt;As usual, stay safe out there, readers.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-fvax&quot;&gt;
&lt;p&gt;&quot;Maxinated&quot;? &lt;a href=&quot;#fr-fvax-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-men&quot;&gt;
&lt;p&gt;This has been an odd observation that I&#x27;ve made all throughout the pandemic: at least where I am, it&#x27;s almost
exclusively men who won&#x27;t wear face masks. My wife and I have a game where we could how many couples we observe while
walking where the apparently-female person is wearing a mask and the apparently-male person is not, and we never fail to
see at least one such couple. &lt;a href=&quot;#fr-men-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-nyvp&quot;&gt;
&lt;p&gt;No, the insane &quot;IBM Blockchain&quot;-based New York &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;covid19vaccine.health.ny.gov&#x2F;excelsior-pass&quot;&gt;Excelsior Pass&lt;&#x2F;a&gt; proposal doesn&#x27;t count. &lt;a href=&quot;#fr-nyvp-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>What&#x27;s on TV (May 1, 2021)</title>
          <pubDate>Sat, 01 May 2021 11:41:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/whats-on-tv/</link>
          <guid>https://www.roguelazer.com/blog/whats-on-tv/</guid>
          <description xml:base="https://www.roguelazer.com/blog/whats-on-tv/">&lt;h3 id=&quot;just-finished&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#just-finished&quot; aria-label=&quot;Anchor link for: just-finished&quot;&gt;Just Finished&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tv.apple.com&#x2F;us&#x2F;show&#x2F;for-all-mankind&#x2F;umc.cmc.6wsi780sz5tdbqcf11k76mkp7&quot;&gt;For All Mankind&lt;&#x2F;a&gt; Season Two. This season had a lot of slow moments, and more of Karen than I really wanted but &lt;strong&gt;holy
shit&lt;&#x2F;strong&gt; did those final two episodes deliver. If you&#x27;ve bought an Apple product in the last couple of years, you get this
for free, so you might as well watch it!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;half-way-through&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#half-way-through&quot; aria-label=&quot;Anchor link for: half-way-through&quot;&gt;Half-Way Through&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hbomax.com&#x2F;series&#x2F;urn:hbo:series:GYAdflwB3q8LDDgEAAAAC&quot;&gt;Babylon 5&lt;&#x2F;a&gt; Season Three. I&#x27;d never seen any B5 and &lt;code&gt;$SPOUSE&lt;&#x2F;code&gt; and I decided to watch it over lockdown. It&#x27;s pretty fun seeing
how much DS9 stole from this show. My main complaint is that I don&#x27;t really care about any of the human characters and
really just want to watch the &quot;Londo and G&#x27;Kar screw up the galaxy&quot; show.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;just-started&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#just-started&quot; aria-label=&quot;Anchor link for: just-started&quot;&gt;Just Started&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tv.apple.com&#x2F;us&#x2F;show&#x2F;mythic-quest&#x2F;umc.cmc.1nfdfd5zlk05fo1bwwetzldy3&quot;&gt;Mythic Quest&lt;&#x2F;a&gt; Season One. We&#x27;re always on the hunt for a half-hour comedy to watch during nap-time, and this one&#x27;s
pretty good. Unlike &lt;em&gt;Silicon Valley&lt;&#x2F;em&gt;, this doesn&#x27;t remind me of my day job too much. Came into it expecting Danny Pudi
to be the main draw but Charlotte Nicdao really steals the show. Season Two comes out in a few weeks!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Vaccinated (part 1)</title>
          <pubDate>Tue, 20 Apr 2021 22:10:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/vaccinated/</link>
          <guid>https://www.roguelazer.com/blog/vaccinated/</guid>
          <description xml:base="https://www.roguelazer.com/blog/vaccinated/">&lt;p&gt;As of yesterday morning, I&#x27;ve gotten my first shot of the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.modernatx.com&#x2F;&quot;&gt;ModeRNA&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-moderna-1&quot;&gt;&lt;a href=&quot;#fn-moderna&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; COVID-19 vaccine!&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;d been trying to get an appointment since Berkeley opened them up to all adults on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cityofberkeley.info&#x2F;City_Manager&#x2F;Press_Releases&#x2F;2021&#x2F;2021-04-09_Vaccinations_available__Berkeley,_Alameda_County_residents_16_up_and_local_workers_in_high_infection-risk_industries.aspx&quot;&gt;April
9th&lt;&#x2F;a&gt;, and had no luck until 3am on Friday morning, when I managed to get one of the spots
released by the CVS near my house (they were all gone a few minutes later). I was surprised to find when
I arrived at CVS that, despite the intense competition to get vaccinated, supply is so tight that they were only
being issued 10 doses (one vial) per day.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s so frustrating that vaccines are still so hard to get here, and yet &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bloomberg.com&#x2F;news&#x2F;articles&#x2F;2021-04-15&#x2F;unused-vaccines-are-piling-up-across-u-s-as-some-regions-resist&quot;&gt;doses are sitting unused around the country&lt;&#x2F;a&gt;. I don&#x27;t know what the solution is to convince rural Republicans
to get vaccinated, but I hope someone comes up with something to prevent the ultra-conservative parts
of America from serving as a breeding ground for weird SARS-CoV-2 variants.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, while I&#x27;m writing a post on COVID-19, here are some fun links:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;berthub.eu&#x2F;articles&#x2F;posts&#x2F;reverse-engineering-source-code-of-the-biontech-pfizer-vaccine&#x2F;&quot;&gt;Reverse Engineering the source code of the BioNTech&#x2F;Pfizer SARS-CoV-2 Vaccine&lt;&#x2F;a&gt;: I assume everyone&#x27;s read this
one already but it&#x27;s a great explanation of something I know very little about&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.jonasneubert.com&#x2F;2021&#x2F;01&#x2F;10&#x2F;exploring-the-supply-chain-of-the-pfizer-biontech-and-moderna-covid-19-vaccines&#x2F;&quot;&gt;Exploring the Supply Chain of the Pfizer&#x2F;BioNTech and Moderna COVID-19 vaccines&lt;&#x2F;a&gt;: Another very nitty-gritty
cool article&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.theatlantic.com&#x2F;ideas&#x2F;archive&#x2F;2021&#x2F;04&#x2F;end-hygiene-theater&#x2F;618576&#x2F;&quot;&gt;Deep Cleaning Isn’t a Victimless Crime&lt;&#x2F;a&gt;: I feel like all of my news sources have been making it clear that
this virus spreads through the air and not through surfaces for the last, like, 10 months, but I guess a lot of
people have gotten hung up on crazy and useless &quot;deep cleaning&quot;. Hopefully we can get past that and stop making
the entire world smell like bleach. I guess &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.thelancet.com&#x2F;journals&#x2F;lancet&#x2F;article&#x2F;PIIS0140-6736(21)00869-2&#x2F;fulltext&quot;&gt;this Lancet article&lt;&#x2F;a&gt; has been very influential?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;At this point I&#x27;m kind of vacillating between optimism that we&#x27;re all going to be vaccinated and safe soon, and
deep pessimism that the right wing media echo chamber has created an insurmountable barrier of misinformed people
with a near-pathological antipathy towards science and public health, even if we do make it through this pandemic, the next one is going to be some &lt;em&gt;real Dark Ages shit&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Fun stuff.&lt;&#x2F;p&gt;
&lt;p&gt;Stay safe out there.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-moderna&quot;&gt;
&lt;p&gt;ModeRNA is such a cool name for a RNA vaccine company; I refuse to use their new boring brand capitalization of &quot;moderna&quot; &lt;a href=&quot;#fr-moderna-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Surprising behavior in GNU tar</title>
          <pubDate>Fri, 12 Mar 2021 15:03:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/surprising-behavior-in-gnu-tar/</link>
          <guid>https://www.roguelazer.com/blog/surprising-behavior-in-gnu-tar/</guid>
          <description xml:base="https://www.roguelazer.com/blog/surprising-behavior-in-gnu-tar/">&lt;p&gt;Here&#x27;s a fun game for you: what do you expect to be the state of the filesystem after running the following commands
in an empty directory on a Linux system?&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ touch foo:bar&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ tar -cpf foo:bar.tar foo:bar&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ rm foo:bar&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ tar -xpf foo:bar.tar&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Do you expect the directory to contain the files &lt;code&gt;foo:bar&lt;&#x2F;code&gt; and &lt;code&gt;foo:bar.tar&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;What if I told you that instead the directory would only contain &lt;code&gt;foo:bar.tar&lt;&#x2F;code&gt; and stderr would say&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tar (child): Cannot connect to foo: resolve failed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yep! It turns out that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;tar&#x2F;&quot;&gt;GNU tar&lt;&#x2F;a&gt;, if passed a filename containing a colon, treats the
part before the colon as a hostname and attempts to connect to that host over
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Remote_Shell&quot;&gt;rsh&lt;&#x2F;a&gt; to download the part of the file after the colon. If you&#x27;re not
familiar with it, &lt;code&gt;rsh&lt;&#x2F;code&gt; is the completely-insecure predecessor to SSH. It&#x27;s been &lt;strong&gt;at least&lt;&#x2F;strong&gt; 20 years since any
reasonable system has shipped with RSH. This behavior is documented in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;tar&#x2F;manual&#x2F;html_node&#x2F;Device.html&quot;&gt;Chapter 9.1 of the GNU tar
manual&lt;&#x2F;a&gt; but nobody I polled had ever heard of
it.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, GNU tar has a &lt;code&gt;--force-local&lt;&#x2F;code&gt; option to disable this behavior. If you ever process tar files whose names you do
not completely control, or which might for some reason contain a colon, you should pass &lt;code&gt;--force-local&lt;&#x2F;code&gt; before every
invocation.&lt;&#x2F;p&gt;
&lt;p&gt;An enterprising security researcher could probably have a lot of fun experimenting with vendor crap like security
cameras and routers that take tar files with user-controlled filenames for firmware upgrades and see how many of them
can be persuaded to establish a &lt;code&gt;rsh&lt;&#x2F;code&gt; shell to some attacker-controlled device...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>I miss working from the office</title>
          <pubDate>Fri, 20 Nov 2020 09:40:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/office/</link>
          <guid>https://www.roguelazer.com/blog/office/</guid>
          <description xml:base="https://www.roguelazer.com/blog/office/">&lt;p&gt;I went into my office yesterday for the first time in a few months to pick some stuff up. We got notified
a couple of days ago to get any personal property out of the office before Thanksgiving or else it&#x27;d be
thrown out, so I guess we&#x27;re moving out of the office. It was a pretty eerie place to be; even now, eight
months later, most people haven&#x27;t been back and it kind of looks like the entire office was abducted by aliens in
early March.&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2k8wXHo&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50624727388_a30ebe5475_c.jpg&quot; alt=&quot;some desks&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2k8BiAk&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50625574707_40754611d2_c.jpg&quot; alt=&quot;an empty hallway&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2k8Biy1&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50625574572_55391b30a4_c.jpg&quot; alt=&quot;a flyer for an event on march 12th that never happened&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Despite how weird it is, I still miss working out of the office.&lt;&#x2F;p&gt;
&lt;p&gt;I miss having a clean delineation between &quot;work&quot; and &quot;home&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;I miss having copious desk space and a big monitor.&lt;&#x2F;p&gt;
&lt;p&gt;I miss the 48&quot; TVs on the wall showing Grafana dashboards with key metrics so there was always ambient knowledge of
what was going on with the product.&lt;&#x2F;p&gt;
&lt;p&gt;I miss having meetings in conference rooms where you can see other people and have a giant whiteboard to sketch on.&lt;&#x2F;p&gt;
&lt;p&gt;I miss casual collaboration. Video chat is a poor substitute and Slack is a deeply irritating tool that combines the
worst aspects of synchronous and asynchronous communication.&lt;&#x2F;p&gt;
&lt;p&gt;I miss productivity! I think our engineering productivity has fallen through the floor since COVID despite everyone
working longer and harder; I fundamentally do not think remote teams can &lt;em&gt;ever&lt;&#x2F;em&gt; be as productive as in-person teams.&lt;&#x2F;p&gt;
&lt;p&gt;I miss having my employer pay for electricity and heat and fast symmetric multi-gigabit Internet access instead of
shifting those costs to me.&lt;&#x2F;p&gt;
&lt;p&gt;I miss having a plethora of convenient and delicious options for take-out lunch! I miss the gyros and french fries
at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ayolagreek.com&#x2F;&quot;&gt;Ayola&lt;&#x2F;a&gt;. I miss the chicken pesto sandwich at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;working-girls-cafe.square.site&#x2F;&quot;&gt;Working Girls&#x27;
Cafe&lt;&#x2F;a&gt;. I miss the chow mein and pork buns from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;yanksing.com&#x2F;&quot;&gt;Yank Sing&lt;&#x2F;a&gt;. I
miss the katsu curry from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.muraccis.com&#x2F;&quot;&gt;Muracci&#x27;s&lt;&#x2F;a&gt;. I miss the curry burritos from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.curryupnow.com&#x2F;&quot;&gt;Curry Up
Now&lt;&#x2F;a&gt;. I miss the croque monsieur from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cafemadeleinesf.com&#x2F;&quot;&gt;Cafe Madeline&lt;&#x2F;a&gt;. I
miss the $5 lunch specials from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mehfilindian.com&#x2F;&quot;&gt;Mehfil&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I miss the succession of friendly baristas at our &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.yelp.com&#x2F;biz&#x2F;hermanos-coffee-juice-san-francisco&quot;&gt;favorite coffee shop&lt;&#x2F;a&gt; who always knew our orders and put up with our banter.&lt;&#x2F;p&gt;
&lt;p&gt;I miss occasional after-work drinks at the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sf.eater.com&#x2F;2019&#x2F;4&#x2F;25&#x2F;18516128&#x2F;skydeck-spirits-in-the-sky-rooftop-bar-san-francisco&quot;&gt;sky bar&lt;&#x2F;a&gt; with the $18 well drinks that we always convinced management to pay for.&lt;&#x2F;p&gt;
&lt;p&gt;Hell, I miss &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bart.gov&#x2F;&quot;&gt;BART&lt;&#x2F;a&gt; in all its loud and smelly glory.&lt;&#x2F;p&gt;
&lt;p&gt;Look, I know, it&#x27;s not all bad. It&#x27;s a lot easier taking care of a baby while working from home than it would be if
I were commuting 45 minutes each way every day. I&#x27;m spending a lot less money on food and coffee and BART. And I&#x27;m
not arguing that we should be in the office now; not a single one of those things I listed above is worth the health
risk of jamming 150 people into an open-plan office with a quasi-functional ventilation
system. But I
really hope that office-work isn&#x27;t a permanent victim of this pandemic, that all the companies pushing for
permanent WFH to save a few bucks on rent reconsider their stances, and that there comes a time when I can go back to
work again.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Summertime California Sky</title>
          <pubDate>Wed, 09 Sep 2020 09:56:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/summertime-california-sky/</link>
          <guid>https://www.roguelazer.com/blog/summertime-california-sky/</guid>
          <description xml:base="https://www.roguelazer.com/blog/summertime-california-sky/">&lt;p&gt;It&#x27;s 9:45am on a cloudless Wednesday morning here in summertime California.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50323990741_f22fed5a7b_h.jpg&quot; alt=&quot;apocalyptic orange skies&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;My light meter reads 14 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lux&quot;&gt;lux&lt;&#x2F;a&gt; pointed directly at the sky — about as much as the
middle of the night (with local light pollution), or about 1&#x2F;1000 as much as a normal morning. They tell me that the skies are this apocalyptic shade of red due to the smoke from the 16 major wildfires currently burning in California&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-wildfires-1&quot;&gt;&lt;a href=&quot;#fn-wildfires&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.berkeleyside.com&#x2F;2020&#x2F;09&#x2F;09&#x2F;its-not-the-end-of-the-world-despite-appearances-to-the-contrary-in-berkeley&quot;&gt;Local&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sfchronicle.com&#x2F;bayarea&#x2F;article&#x2F;Bay-Area-awakes-to-foreboding-smoke-choked-15553731.php&quot;&gt;news&lt;&#x2F;a&gt; has &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mercurynews.com&#x2F;2020&#x2F;09&#x2F;09&#x2F;complete-smoke-out-in-bay-area-darkens-the-daytime&#x2F;&quot;&gt;plenty&lt;&#x2F;a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nbcbayarea.com&#x2F;news&#x2F;local&#x2F;smoke-ash-concoction-blankets-bay-area-clogs-air-and-earth&#x2F;2360180&#x2F;&quot;&gt;say&lt;&#x2F;a&gt; on the cause if you want to read up. Damn if it isn&#x27;t disconcerting to live through, though.&lt;&#x2F;p&gt;
&lt;p&gt;What world did I bring my son into? Remember, this is probably going to be one of the &lt;em&gt;cooler&lt;&#x2F;em&gt; years over the next
century... &lt;strong&gt;Vote&lt;&#x2F;strong&gt;, friends. Vote like your lives depend on it.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-wildfires&quot;&gt;
&lt;p&gt;Including the LNU Lightning Fire Complex at 375,209 acres; the SCU Lightning Fire Complex at 396,624
acres; the CZU August Lightning Complex at 86,509 acres; and the Creek Fire at 163,138 acres. And also the El
Dorado fire at at about 9,600 acres, which is notable because it was &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;abc7.com&#x2F;el-dorado-fire-yucaipa-cause-gender-reveal-party&#x2F;6412483&#x2F;&quot;&gt;sparked by idiots who should not have access
to pyrotechnic devices... or
children...&lt;&#x2F;a&gt;. Collectively these fires
are burning an area &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;mattzieger&#x2F;status&#x2F;1303564302574522370&#x2F;photo&#x2F;1&quot;&gt;twice the size of Rhode
Island&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-wildfires-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>A Son!</title>
          <pubDate>Thu, 03 Sep 2020 17:33:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/a-son/</link>
          <guid>https://www.roguelazer.com/blog/a-son/</guid>
          <description xml:base="https://www.roguelazer.com/blog/a-son/">&lt;p&gt;Hello hypothetical readers; sorry for my absence, but I&#x27;ve spent the last weeks pretty well busy — as I foreshadowed
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;a-son&#x2F;@blog&#x2F;2020-05-26-life-updates&#x2F;index.md&quot;&gt;in May&lt;&#x2F;a&gt;, I have a son now!&lt;&#x2F;p&gt;














&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;a-son&amp;#x2F;2020-09-03-isaac.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;2020-09-03-isaac.563321472acc9fd4.jpg&quot; alt=&quot;baby isaac&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;It&#x27;s been quite an adjustment. Isaac was born on August 7, 2020 after a very long&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-long-1&quot;&gt;&lt;a href=&quot;#fn-long&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; labor, but he&#x27;s happy and
healthy now. I got 3 weeks off of work, which I spent with my wife doing intensive child care. Let me tell you, I have a
whole new respect for single parents. Caring for an infant with just the two of us (since none of our families or
friends can visit or help out due to COVID-19) is hard work. He needs to be fed every 2–3 hours, changed every 0.1
– 3 hours, and while he does sleep a lot, it&#x27;s not really the kind of deep sleep where you can just put him in a crib
and do other work. As of a couple of days ago, I&#x27;m back at work&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-back-1&quot;&gt;&lt;a href=&quot;#fn-back&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but my wife still has six or so more weeks of
parental leave. We&#x27;re still trying to do our best to spread the load, which means I&#x27;m spending most nights up all
night&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-all night-1&quot;&gt;&lt;a href=&quot;#fn-all night&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Again, much props to all the single parents out there. Also: much props to grocery delivery. Things
would be a lot harder if I had to gird myself against the pandemic and spend an hour getting groceries every time we ran
out of something.&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jx1oMx&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50234002393_9b76a83728_h.jpg&quot; alt=&quot;such a big yawn&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jx4KQG&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50234658556_5eda4f8900_h.jpg&quot; alt=&quot;striking in yellow&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jx1oMY&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50234002418_7dbefe2eb0_h.jpg&quot; alt=&quot;triumphant fist&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jD4DCH&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50302536653_2211074226_h.jpg&quot; alt=&quot;sleepy&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jD8X5H&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50303375797_d35e97b066_h.jpg&quot; alt=&quot;sleepy, but outside and with Eva&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jD4DEB&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50302536763_a572b6912b_h.jpg&quot; alt=&quot;sleepy, but while being worn in a sling&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2jD8X8i&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50303375947_2b9aba8d41_h.jpg&quot; alt=&quot;convict or baby?&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;I guess you should prepare yourself for lots more baby pictures in the future.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sidebar-the-american-healthcare-system-is-truly-awful&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sidebar-the-american-healthcare-system-is-truly-awful&quot; aria-label=&quot;Anchor link for: sidebar-the-american-healthcare-system-is-truly-awful&quot;&gt;Sidebar: The American Healthcare System is Truly Awful&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;My son&#x27;s delivery was at the nearby hospital, which is owned by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sutterhealth.org&#x2F;&quot;&gt;Sutter Health Group&lt;&#x2F;a&gt;.
Sutter Health also owns every other hospital in the area except the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;thrive.kaiserpermanente.org&#x2F;care-near-you&#x2F;northern-california&#x2F;eastbay&#x2F;locations&#x2F;oakland-medical-center&#x2F;&quot;&gt;Kaiser in
Oakland&lt;&#x2F;a&gt;,
which is only accessible to people on Kaiser insurance. I&#x27;m noting this first because, like most people in America, we
didn&#x27;t have any realistic choice about what hospital to go to, unless we were willing to drive to a different county
(potentially an hour or more drive with traffic to get to UCSF).&lt;&#x2F;p&gt;
&lt;p&gt;Keeping in mind that Sutter Health has a monopoly on delivery centers in the area, you can imagine my surprise when we
received the first bill for the delivery, in the amount of &lt;strong&gt;$103,736&lt;&#x2F;strong&gt;. No, that&#x27;s not a typo. Nope, it&#x27;s not missing a
decimal point. One hundred and three thousand dollars. More than the average Californian makes in a year &lt;em&gt;before tax&lt;&#x2F;em&gt;.
Yes, I have pretty good insurance and they&#x27;re covering most of that&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-most-1&quot;&gt;&lt;a href=&quot;#fn-most&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but Jesus Fucking Christ, we were in the
hospital for less than a week, in a labor &amp;amp; delivery ward (no ICU, etc) and had no unusual procedures performed. We
weren&#x27;t even in a very good hospital; there was a concerning level of dirt and grime, the cafeteria wasn&#x27;t open on
weekends, and a scary amount of the medical equipment was broken and had to be replaced during our stay. The doctors and
nurses (especially the nurses) were good, but we spent maybe a total of four hours over the entire stay interacting with
a doctor, and until the very end over the delivery&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-end-1&quot;&gt;&lt;a href=&quot;#fn-end&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; we only saw a nurse once every two or three hours&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-periodic-1&quot;&gt;&lt;a href=&quot;#fn-periodic&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
This isn&#x27;t exactly concierge care!&lt;&#x2F;p&gt;
&lt;p&gt;I was always in favor of socialized medicine, but after seeing how (a) awful the care is, and (b) how incredibly,
comically, expensive it is for &lt;strong&gt;a hospital stay that basically every human being goes through&lt;&#x2F;strong&gt;, I just want to take a
moment to offer an emphatic middle finger to every Roger-Ailes-brainwashed voter and politician who&#x27;s kept us in this nightmare
system of private medicine while the rest of the world moved on to treating medical care as a right instead of a
privilege.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-long&quot;&gt;
&lt;p&gt;49 hour &lt;a href=&quot;#fr-long-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-back&quot;&gt;
&lt;p&gt;with &quot;flexible hours&quot;, whatever that means, and still working from home (due to COVID-19) &lt;a href=&quot;#fr-back-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-all night&quot;&gt;
&lt;p&gt;I mean, not technically all night, but he tends to only sleep for 30-90 minute stretches during the night
then want to eat and be burped and whatnot. &lt;a href=&quot;#fr-all night-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-most&quot;&gt;
&lt;p&gt;How much of that? Who knows! Some parts of the bill are &quot;out-of-network&quot; even though everything was done at an
&quot;in-network&quot; hospital and it&#x27;s not like anyone gave us choices over which doctors or nurses would perform specific
procedures. A bunch of stuff is also missing, and presumably will be on some subsequent bill. I expect to end up
paying somewhere between $2,000 and $20,000 out of pocket for the entire thing. &lt;a href=&quot;#fr-most-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-end&quot;&gt;
&lt;p&gt;They give you a dedicated nurse once you pass the 36 hour mark, I guess? &lt;a href=&quot;#fr-end-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-periodic&quot;&gt;
&lt;p&gt;In the L&amp;amp;D room, my wife was hooked up to a bunch of monitors because she was on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Oxytocin_(medication)&quot;&gt;pitocin&lt;&#x2F;a&gt; and they require
continuous monitoring of pulse, fetal pulse, blood oxygenation, and blood pressure when someone&#x27;s on pitocin. Those
monitors were connected to an old-school continuous feed printer and just generated a constant stream of paper
containing her stats. That printer ran out of paper every 3 hours or so, at which point it would emit a piercing beep
and flash bright red. Every time this happened, we would have to page the nurse to have someone come change the damn
paper because apparently it&#x27;s not a high priority that we&#x27;re having a &lt;strong&gt;very loud&lt;&#x2F;strong&gt; alarm go off right next to my
wife&#x27;s head while she&#x27;s in labor, and they have a policy of not pre-emptively replacing the paper before the alarm
goes off. Separately, the pitocin or ringers bag would run out every few hours and need to be replaced. For the first
day or so, the only times we saw any medical staff would be to introduce themselves at shift change 3x a day, and to
come in after we paged them when these damned alarms were going off every few hours. &lt;a href=&quot;#fr-periodic-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>UC Botanical Garden</title>
          <pubDate>Sun, 26 Jul 2020 18:19:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/botanic-garden/</link>
          <guid>https://www.roguelazer.com/blog/botanic-garden/</guid>
          <description xml:base="https://www.roguelazer.com/blog/botanic-garden/">&lt;p&gt;PSA for folks in the Bay Area: The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;botanicalgarden.berkeley.edu&#x2F;&quot;&gt;University of California Botanical Garden&lt;&#x2F;a&gt; has re-opened for limited, outdoor-only visits. Seems like a nice (and
reasonably) safe place to go during the pandemic. It&#x27;s July, so not much is in bloom, but it&#x27;s still beautiful.&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157514387&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157514387_374ee30d7c_h.jpg&quot; alt=&quot;trees&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157514707&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157514707_04d6995597_h.jpg&quot; alt=&quot;eva sitting on a bench&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157514927&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157514927_6fc021fae3_h.jpg&quot; alt=&quot;macro of a cool compound flower&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157515242&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157515242_81d0b24ffe_h.jpg&quot; alt=&quot;ferns and a babbling brook&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157279736&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157279736_b2fb439306_h.jpg&quot; alt=&quot;The Japanese Pool&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157279946&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157279946_c34e32abdd_h.jpg&quot; alt=&quot;The Japanese Pool, with Eva in the foreground&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157515932&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157515932_db24780137_h.jpg&quot; alt=&quot;this tree looks like an Oompah Loompah&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157516132&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157516132_32a2afe69e_h.jpg&quot; alt=&quot;macro of a bee in a dahlia&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;50157280581&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;50157280581_8407e38c25_3k.jpg&quot; alt=&quot;another dahlia&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>It&#x27;s like being Slashdotted, but it&#x27;s not 2002 any more</title>
          <pubDate>Wed, 15 Jul 2020 12:14:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/etcd-post-follow-up/</link>
          <guid>https://www.roguelazer.com/blog/etcd-post-follow-up/</guid>
          <description xml:base="https://www.roguelazer.com/blog/etcd-post-follow-up/">&lt;p&gt;So, my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;etcd&#x2F;&quot;&gt;etcd post&lt;&#x2F;a&gt; was cross-posted to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=23833362&quot;&gt;Hacker
News&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;programming&#x2F;comments&#x2F;hrbv1h&#x2F;etcd_or_why_modern_software_makes_me_sad&#x2F;&quot;&gt;Reddit&lt;&#x2F;a&gt; and probably
more places. For the good of my own sanity, I&#x27;m not going to try to read through the comment threads on those other
sites; generally, I try to avoid Hacker News anyway&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-hn-1&quot;&gt;&lt;a href=&quot;#fn-hn&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Just some brief, off-the-cuff follow-ups:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, I recognize that the post from the other day was, uh, inflammatory. I did not write it as a persuasive
thinkpiece targeted at the critical 18-25 demo or whatever. It&#x27;s just some notes while I was in the process of
rewriting some software from the etcd v2 API to the v3 API&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-software-1&quot;&gt;&lt;a href=&quot;#fn-software&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;This is my damned website and I&#x27;m going to be as snarky as I want, Anonymous Coward from 13 hours
ago.&lt;&#x2F;li&gt;
&lt;li&gt;All nine million of you who wrote to me are absolutely right: as a user of open-source software I have the right to
fork it if they decide to pull out the v2 API. I&#x27;m not super-interested in becoming the de facto maintainer of a
database, particularly not one in a language that don&#x27;t use very often, but I do have that right and ability. Thank
you for writing to me.&lt;&#x2F;li&gt;
&lt;li&gt;Non-sarcastic thanks to everyone who pointed out typos and issues in the original post. Fun fact: Layer 3 and
Layer 4 in the OSI model are &lt;em&gt;not&lt;&#x2F;em&gt; the same thing.&lt;&#x2F;li&gt;
&lt;li&gt;If you agree with me that simplicity is a virtue in software architecture and we embrace too many things that look
like 90&#x27;s-era Microsoft APIs, how about really driving it home by giving some money or time to Black Lives Matter, the SPLC,
the ACLU, or other organizations working to simplify and improve our civil lives&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-stretch-1&quot;&gt;&lt;a href=&quot;#fn-stretch&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;?&lt;&#x2F;li&gt;
&lt;li&gt;If you vehemently disagree with me and think I&#x27;m human scum for not embracing the glorious combination of systemd,
kubernetes, and the Registry Hive, why don&#x27;t you really &lt;em&gt;pwn&lt;&#x2F;em&gt; me by donating money or time to an organization whose website
probably runs on some k8s cluster somewhere like Black Lives Matter, the SPLC, or the ACLU?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Many thanks to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dreamhost.com&#x2F;&quot;&gt;DreamHost&lt;&#x2F;a&gt; for successfully seeing this static-HTML website through a big
traffic spike. I&#x27;ve been a customer for like 15 years and so far so good.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-hn&quot;&gt;
&lt;p&gt;I find that Hacker News is really good at attracting people who think technology is cool, which is a particularly
dangerous thing for anyone who actually expects to work in the tech industry. Computers are &lt;strong&gt;awful&lt;&#x2F;strong&gt;. You need to really
embrace the hatred before you can be an effective technologist. &lt;a href=&quot;#fr-hn-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-software&quot;&gt;
&lt;p&gt;Yes, dear commenters, I do actually use the tools I complain about &lt;a href=&quot;#fr-software-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-stretch&quot;&gt;
&lt;p&gt;This metaphor isn&#x27;t a stretch at all, why do you ask? &lt;a href=&quot;#fr-stretch-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Etcd, or, why modern software makes me sad</title>
          <pubDate>Mon, 13 Jul 2020 18:11:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/etcd/</link>
          <guid>https://www.roguelazer.com/blog/etcd/</guid>
          <description xml:base="https://www.roguelazer.com/blog/etcd/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;etcd&amp;#x2F;etcd-icon.png&quot; alt=&quot;etcd icon&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;Once upon a time in 2013, there was a tool called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;etcd.io&#x2F;&quot;&gt;etcd&lt;&#x2F;a&gt; which was a really lightweight database written
around the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.stanford.edu&#x2F;~ouster&#x2F;cgi-bin&#x2F;papers&#x2F;raft-atc14&quot;&gt;Raft&lt;&#x2F;a&gt; consensus algorithm. This tool was
originally written in 2013 for a &lt;del&gt;bullshit&lt;&#x2F;del&gt; unsuccessful project called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;coreos.com&#x2F;os&#x2F;docs&#x2F;latest&#x2F;&quot;&gt;CoreOS Container Linux&lt;&#x2F;a&gt; that was
EOL&#x27;d several years ago, but that doesn&#x27;t really matter --- etcd was greater than its original use-case. Etcd
provided a convenient and simple set of primitives (set a key, get a key, set-only-if-unchanged, watch-for-changes) with
a drop-dead simple HTTP API on top of them. I have built a number of tools using etcd as a lightweight consensus store
behind them and it&#x27;s absolutely a pleasure to work with.&lt;&#x2F;p&gt;
&lt;div class=&quot;sidenote sidenote-left&quot; markdown=&quot;1&quot;&gt;
Hello **massive influx of new readers**! I see that some &lt;del&gt;person who&#x27;s out to get me&lt;&#x2F;del&gt; kind soul has
cross-posted this to Hacker News, Reddit, and a bunch of other sites. Cool! A few things you might want to know _before_
you send me hate-mail:
&lt;ul&gt;
&lt;li&gt;The word &quot;rant&quot; is right up there in the tags line. This is not meant to be a persuasive argument to the secret cabal
that controls API design or a nuanced technical comparison article. It&#x27;s just some off-the-cuff thoughts. Chillax.&lt;&#x2F;li&gt;
&lt;li&gt;If this didn&#x27;t come across clearly enough in the article: &lt;em&gt;I think etcd is great!&lt;&#x2F;em&gt; I have written a bunch of tools and
applications on top of it! I think it&#x27;s a fantastic little dæmon and its API, even the new janky v3 API, is still a
million times better than ZooKeeper&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Okay, then. Read on.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In 2015, an unrelated tool called &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;kubernetes&quot;&gt;Kubernetes&lt;&#x2F;a&gt; was released by Google (but, really, by
Xooglers). I would go so far as to say that Kubernetes (or, as the &quot;cool kids&quot; say, &lt;kbd&gt;k8s&lt;&#x2F;kbd&gt;) is the worst thing to happen to system administration
since &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;systemd&#x2F;&quot;&gt;systemd&lt;&#x2F;a&gt;. It&#x27;s a comprehensive suite that promises to simplify operating clusters of software and give something like
the experience of Google&#x27;s &lt;kbd&gt;borg&lt;&#x2F;kbd&gt; cluster manager. What it really does is:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Add hundreds of new failure modes to your software&lt;&#x2F;li&gt;
&lt;li&gt;Move you from writing portable software configuration to writing thousands of lines of k8s-specific YAML&lt;&#x2F;li&gt;
&lt;li&gt;Ensnare you in a mesh of questionably-good&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-questionably-good-1&quot;&gt;&lt;a href=&quot;#fn-questionably-good&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; patterns like containerization and software defined networking&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;If you are running a truly enormous system and want to have off-the-shelf orchestration for it, Kubernetes may be
the tool for you. For 99.9% of people out there, it&#x27;s just an extra layer of complexity that adds almost nothing of
value.&lt;&#x2F;p&gt;
&lt;p&gt;I digress, though; this is a story about etcd. And, unfortunately, our stories come together because Kubernetes was
quickly changed to use etcd as its state store. Thus began the rapid decline of etcd.&lt;&#x2F;p&gt;
&lt;p&gt;With the massive influx of Kubernetes users came, of course, a large number of Xooglers who decided to infect etcd with
Google technologies, as is their way&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-infection-1&quot;&gt;&lt;a href=&quot;#fn-infection&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-who-1&quot;&gt;&lt;a href=&quot;#fn-who&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Etcd&#x27;s simple HTTP API was replaced by a &quot;gRPC&quot;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-grpc-1&quot;&gt;&lt;a href=&quot;#fn-grpc&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; version; the
simple internal data model was replaced by a dense and non-orthogonal data model with different types for leases, locks,
transactions, and plain-old-keys. etcd 3.2 added back a tiny subset of the HTTP API through the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;etcd.io&#x2F;docs&#x2F;v3.4.0&#x2F;dev-guide&#x2F;api_grpc_gateway&#x2F;&quot;&gt;&quot;gRPC
Gateway&quot;&lt;&#x2F;a&gt;, but not enough to implement
any of the rich applications built on top of the original API. The v2 API lives on for now, but upstream threatens to
remove it in every new version and there will surely come a time when it&#x27;ll be removed entirely.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it. That&#x27;s the story. Popular modern technology is taken over by expats from a megacorp and made worse in the
service of a hyper-specialized (and just plain over-hyped) orchestration platform. That&#x27;s the world today. Anything that
has a simple and elegant feature-set ends up coöpted by people who just want to build big ungainly architecture and ends
up inheriting features from whatever megacorp the coöpters came from&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-megacorp-1&quot;&gt;&lt;a href=&quot;#fn-megacorp&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The software development world would
prefer to use their multi-gigabyte IDEs running on ElectronJS to build thousand-dependency Java applications targeting
ungainly APIs on hard-to-operate systems than support something simpler and better. Quality is, alas, a dying art.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-questionably-good&quot;&gt;
&lt;p&gt;Read: &quot;not good&quot; &lt;a href=&quot;#fr-questionably-good-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-infection&quot;&gt;
&lt;p&gt;I&#x27;ve worked with a lot of Xooglers in my career (heck, I worked there myself). I now consider it to be a
serious negative on someone&#x27;s resume to have worked at Google. The many ex-Google coworkers I&#x27;ve had have (even when
they&#x27;ve been otherwise brilliant) been uniformly less capable of working on non-Google systems than their much more
junior equivalents with other backgrounds. All big companies have their own proprietary technology stacks, but the
degree to which Googlers never learn how to do &lt;strong&gt;anything&lt;&#x2F;strong&gt; without involving protocol buffers, bigtable, and a
mile-high stack of other proprietary tools is frankly remarkable. And they spread this to everything new they touch.
Any open-source project will inevitably get pull requests to switch from JSON or BSON to Protocol Buffers; every web
server now needs to support the cancerous user-hostile protocols of HTTP&#x2F;2&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-spdy-1&quot;&gt;&lt;a href=&quot;#fn-spdy&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and HTTP&#x2F;3&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-quic-1&quot;&gt;&lt;a href=&quot;#fn-quic&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
that were passed in a mockery of IETF procedures. &lt;a href=&quot;#fr-infection-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-who&quot;&gt;
&lt;p&gt;Yes, I know, gRPC was added to etcd by Xiang Li, the original author of the project. That doesn&#x27;t give them a
pass for being influenced by the bad ideas coming out of Mountain View, or by their project&#x27;s newfound popularity in
the land of the Xooglers. &lt;a href=&quot;#fr-who-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-grpc&quot;&gt;
&lt;p&gt;&lt;strong&gt;gRPC&lt;&#x2F;strong&gt; is Protocol Buffers&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-protobufs-1&quot;&gt;&lt;a href=&quot;#fn-protobufs&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; running over HTTP&#x2F;2&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-spdy-2&quot;&gt;&lt;a href=&quot;#fn-spdy&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It&#x27;s a got a &quot;g&quot; at the beginning of the
name to remind you that the only time it&#x27;s acceptable to use is when you are actually working for Google inside a
Google-owned building eating Google-branded food and breathing Google-branded air. &lt;a href=&quot;#fr-grpc-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-megacorp&quot;&gt;
&lt;p&gt;I talk a lot of shit about Google, but Facebook and Microsoft are nearly as bad at turning out legions of
ex-employees who can&#x27;t be left alone in the room with a keyboard lest they attempt to recreate their previous
employer&#x27;s technology stack, poorly. &lt;a href=&quot;#fr-megacorp-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-spdy&quot;&gt;
&lt;p&gt;&lt;strong&gt;HTTP&#x2F;2&lt;&#x2F;strong&gt; a.k.a. &lt;strong&gt;SPDY&lt;&#x2F;strong&gt; is a comically bloated Layer 5&#x2F;6&#x2F;7 mega-combo protocol designed to replace HTTP. It
takes something simple and (most importantly!) comprehensible and debuggable for junior programmers and replaces it
with an insanely over-complicated&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-over-complicated-1&quot;&gt;&lt;a href=&quot;#fn-over-complicated&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; system that requires tens of thousands of lines of code to implement the most
minimal version of, but which slightly reduces page load time and server costs once you reach the point of doing
millions of requests per second. I am &lt;strong&gt;filled with rage&lt;&#x2F;strong&gt; just thinking about how we took a fundamental part of the
Internet, simple enough that &lt;em&gt;anyone&lt;&#x2F;em&gt; can implement an HTTP server, and replaced it with this garbage protocol pushed
by big megacorps that doesn&#x27;t solve any real problems but will completely cut out future generations from system
programming for the web. &lt;a href=&quot;#fr-spdy-1&quot;&gt;↩&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-spdy-2&quot;&gt;↩2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-quic&quot;&gt;
&lt;p&gt;&lt;strong&gt;HTTP&#x2F;3&lt;&#x2F;strong&gt; is all the badness of HTTP&#x2F;2, but run over a worse layer 4 protocol named &lt;strong&gt;QUIC&lt;&#x2F;strong&gt; that totally
fucks up networking for everybody in order to get a &lt;em&gt;tiny bit more optimization&lt;&#x2F;em&gt; for Google. That&#x27;s all it does. It makes the
Internet strictly worse for everybody but slightly better for the hugest of huge web properties. Nobody out here in
the real Internet gives the slightest shit about head-of-line blocking from TCP, and &lt;em&gt;lots of people&lt;&#x2F;em&gt; want TCP
state-aware firewalls and load-balancers to work. &lt;a href=&quot;#fr-quic-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-protobufs&quot;&gt;
&lt;p&gt;&lt;strong&gt;Protocol Buffers&lt;&#x2F;strong&gt; or &lt;strong&gt;protobuf&lt;&#x2F;strong&gt; is Google&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reasonablypolymorphic.com&#x2F;blog&#x2F;protos-are-wrong&#x2F;index.html&quot;&gt;very bad&lt;&#x2F;a&gt; serialization
format &lt;a href=&quot;#fr-protobufs-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-over-complicated&quot;&gt;
&lt;p&gt;My favorite HTTP&#x2F;2 interaction has been finding and reporting &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;haproxy&#x2F;haproxy&#x2F;commit&#x2F;4bf194cbdbcda8ec4ce83d7f12d2fe9b08483c94&quot;&gt;this
bug&lt;&#x2F;a&gt; in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.haproxy.org&#x2F;&quot;&gt;haproxy&lt;&#x2F;a&gt;. The compression scheme in
HTTP&#x2F;2 is so shitty that the &quot;compression table&quot; in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tools.ietf.org&#x2F;html&#x2F;rfc7541#appendix-A&quot;&gt;RFC 7541 § Aa&lt;&#x2F;a&gt; is just
a list of the 61 most popular headers from Google properties. &lt;a href=&quot;#fr-over-complicated-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Trackballs</title>
          <pubDate>Sat, 11 Jul 2020 17:27:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/trackballs/</link>
          <guid>https://www.roguelazer.com/blog/trackballs/</guid>
          <description xml:base="https://www.roguelazer.com/blog/trackballs/">&lt;p&gt;It&#x27;s been about ten years since I&#x27;ve regularly used that most quintessential of post-1984 computer peripherals, the
mouse. The last mouse I had was pretty exclusively used for a gaming PC in college and was a Logitech MX518&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-still-1&quot;&gt;&lt;a href=&quot;#fn-still&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;;
since then I&#x27;ve used a variety of input devices. It&#x27;s been a while since I did any brief reviews of technology on this
ostensibly-technology blog, so what the hey, let&#x27;s do it! In brief, we&#x27;re going to talk about:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;logitech-trackman-wheel-optical&#x2F;&quot;&gt;Logitech TrackMan Wheel Optical&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.macworld.com&#x2F;article&#x2F;1153031&#x2F;magic-trackpad.html&quot;&gt;Apple Magic Trackpad&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;shop&#x2F;product&#x2F;MJ2R2LL&#x2F;A&#x2F;magic-trackpad-2-silver&quot;&gt;Apple Magic Trackpad 2&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.logitech.com&#x2F;en-us&#x2F;product&#x2F;wireless-trackball-m570?crid=7&quot;&gt;Logitech M570&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kensington.com&#x2F;p&#x2F;products&#x2F;control&#x2F;trackballs&#x2F;expert-mouse-wired-trackball&#x2F;&quot;&gt;Kensington ExpertMouse&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;elecom-deft-pro-m-dpt1mrxbk-trackball&#x2F;&quot;&gt;Elecom DEFT PRO&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;elecom-m-ht1drbk-huge-wireless-trackball&#x2F;&quot;&gt;Elecom DEFT HUGE&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;My first taste of a wrist-pain-free input device was the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;logitech-trackman-wheel-optical&#x2F;&quot;&gt;Logitech TrackMan Wheel Optical&lt;&#x2F;a&gt;, a long-discontinued thumb
trackball made in the mid-00&#x27;s. According to my Amazon.com order history, I purchased this item on September 2, 2007.
If you&#x27;ve never used one before, the idea is that you hold this device much like you would a &quot;normal&quot; ergonomic computer
mouse, but instead of moving your whole arm your just move your thumb to control the cursor. The TrackMan Wheel (either
in this, its &quot;optical&quot; variant, or the older ball-guided version) was a common first introduction to trackballs in the
00&#x27;s. The tracking was always smooth&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-gunk-1&quot;&gt;&lt;a href=&quot;#fn-gunk&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, the wheel was refreshingly clicky, and the buttons never failed. This was a
great mouse. Unfortunately, it got lost in the move-out from college in 2010, and by that time it was discontinued and
they were already going for &amp;gt;$100 on eBay. 😢&lt;&#x2F;p&gt;
&lt;p&gt;I replaced it with the new-at-the-time Logitech M570, which is ostensibly just a
Logitech-Unifying-Receiver&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-lur-1&quot;&gt;&lt;a href=&quot;#fn-lur&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;-equipped variant of the TrackMan Wheel Optical. A few key notes here:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Generally, wireless sucks for mice. Even the Logitech Unifying Receiver, which is generally less flaky than
Bluetooth, is still flaky and has human-visible latency&lt;&#x2F;li&gt;
&lt;li&gt;I don&#x27;t know what happened to the controls on this mouse, but the buttons are not nearly as satisfying as the
original and the wheel has always felt gummy&lt;&#x2F;li&gt;
&lt;li&gt;Forward and back buttons are dumb on a mouse&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I used the M570 for a few years because it worked well enough, but it&#x27;s not a very good input peripheral. I still have
it (you can see a picture below, next to a stock shot of a TrackMan Wheel Optical) because there are a couple of games I
can only play with it (unless I want to take an unreasonable amount of time to retrain muscle memory, and who wants to
do that?)...&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;logitech_trackman_wheel_optical.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;logitech_trackman_wheel_optical.1b82b5e34c3b2e90.png&quot; alt=&quot;Logitech TrackMan Wheel Optical marketing shot&quot; class=&quot;noshadow&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;logitech_M570.jpg&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;logitech_M570.806c88f512e6de7d.jpg&quot; alt=&quot;Logitech M570&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;In 2012 or so, I had a breakthrough: I purchased a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kensington.com&#x2F;p&#x2F;products&#x2F;control&#x2F;trackballs&#x2F;expert-mouse-wired-trackball&#x2F;&quot;&gt;Kensington ExpertMouse&lt;&#x2F;a&gt;. I&#x27;d seen these for years&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-goog-1&quot;&gt;&lt;a href=&quot;#fn-goog&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; but never
gotten around to regularly using one. The
ExpertMouse has a single giant ball that you operate with the tips of your fingers and buttons around the edges. At some
point, this trackball gained a label proclaiming it to be &quot;joystick&quot; and it became my standard input device; I took it
with me to Uber and rolled many miles on that trackball.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;kensington_expertmouse.png&quot; alt=&quot;Kensington ExpertMouse marketing shot&quot; class=&quot;cimg-no-shadow&quot;  &#x2F;&gt;
  
&lt;p&gt;Unfortunately, when I left Uber in 2015, the ExpertMouse got nabbed by someone else off my desk and was never seen
again. Even worse, some time between 2012 and 2015, Kensington &lt;strong&gt;drastically&lt;&#x2F;strong&gt; worsened their manufacturing process. I
purchased a new ExpertMouse, but the entire thing feels much cheaper. The scroll wheels don&#x27;t spin cleanly any more, the
buttons are sticky, and the ball has to be cleaned twice as much as it used to. There&#x27;s also a new wireless one that I
hear very bad things about. Pre-2013 wired ExpertMouses (ExpertMice?) can sometimes be found on eBay for $150+.&lt;&#x2F;p&gt;
&lt;p&gt;After this, I took a detour and spent some time doing my input with trackpads instead of trackballs. You can see an
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;shop&#x2F;product&#x2F;MJ2R2LL&#x2F;A&#x2F;magic-trackpad-2-silver&quot;&gt;Apple Magic TrackPad 2&lt;&#x2F;a&gt; in my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2019-imac-first-impressions&#x2F;&quot;&gt;new computer post&lt;&#x2F;a&gt; from last year, and I had an
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.macworld.com&#x2F;article&#x2F;1153031&#x2F;magic-trackpad.html&quot;&gt;Apple Magic TrackPad&lt;&#x2F;a&gt; 1 at work for a while. The Magic TrackPad 2, in particular, is just an &lt;strong&gt;absolutely enormous&lt;&#x2F;strong&gt;
(6¼&quot; x 4½&quot;) slab of glass that serves as a multi-touch input for your computer. I still use mine and try to alternate
every couple of weeks between a trackpad and a trackball to change up the kinds of stress on my wrists. If you&#x27;ve used a
trackpad on any &quot;modern&quot; (unibody) MacBook, you know what a Magic TrackPad feels like. It&#x27;s great for some things (like
horizontal scrolling) and not great for other things (highly precise input; gaming).&lt;&#x2F;p&gt;
&lt;p&gt;But what about trackballs? Isn&#x27;t that the purpose of this post?&lt;&#x2F;p&gt;
&lt;p&gt;For the last year or so I&#x27;ve been rocking two different &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.elecom.co.jp&#x2F;global&#x2F;&quot;&gt;Elecom&lt;&#x2F;a&gt; trackballs: an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;elecom-deft-pro-m-dpt1mrxbk-trackball&#x2F;&quot;&gt;Elecom DEFT PRO&lt;&#x2F;a&gt; at home and an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;elecom-m-ht1drbk-huge-wireless-trackball&#x2F;&quot;&gt;Elecom DEFT HUGE&lt;&#x2F;a&gt; at work. Just today, I went into the office and brought my HUGE home, so I&#x27;ve got them side-by-side on my desk&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-gross-1&quot;&gt;&lt;a href=&quot;#fn-gross&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;elecom_deft_pro_and_huge.jpg&quot; alt=&quot;Elecom DEFT Pro and DEFT Huge&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;Conceptually, they&#x27;re very similar trackballs: a single large ball that you operate with your pointer and middle
fingers, then a scroll wheel and buttons that you operate with your thumb and ring fingers. The HUGE is, well, HUGEr,
with a ~25% bigger ball, a couple more buttons, and a built-in wrist-rest. The models I have are a wired-only HUGE
(M-HT1UR) and a wired-or-wireless PRO (M-DPT1MR). I initially used the PRO wireless over Bluetooth to my desktop, but
after one too many dropouts, I switched it to running wired over the micro USB cable. Unlike the Apple Magic TrackPad,
when you plug in the Elecom, it does actually behave as a standard wired mouse instead of just charging.&lt;&#x2F;p&gt;
&lt;p&gt;I only have two complaints about the Elecom trackballs:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It&#x27;s very hard to hold the wheel down. This is not a common operation unless you play a video game that uses holding
the wheel down as an important action...&lt;&#x2F;li&gt;
&lt;li&gt;When wired, do not use standard USB HID classes so cannot be used on macOS for anything besides tracking and LMB&#x2F;RMB without third-party drivers. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.plentycom.jp&#x2F;en&#x2F;steermouse&#x2F;download.php&quot;&gt;SteerMouse&lt;&#x2F;a&gt; seems to be the only option that supports all of HUGE&#x27;s buttons on Catalina&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-mapping-1&quot;&gt;&lt;a href=&quot;#fn-mapping&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. It will be a sad day if they ever drop support. Notably, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;folivora.ai&#x2F;&quot;&gt;BetterTouchTool&lt;&#x2F;a&gt;, which I use for other input customization, does &lt;em&gt;not&lt;&#x2F;em&gt; support any of the extra buttons on the HUGE.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Anyhow, that&#x27;s my brief run through input devices. If all of my mouse-like devices were destroyed in a mysterious laser
strike, I would go out and buy another &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trackballmouse.org&#x2F;elecom-m-ht1drbk-huge-wireless-trackball&#x2F;&quot;&gt;Elecom DEFT HUGE&lt;&#x2F;a&gt;. For now. As I&#x27;ve found the hard way with both Logitech and
Kensington, everything seems to get worse with time. Maybe I should just buy a few extra Elecom devices now now and put
them away in an airtight box somewhere? No, that&#x27;s probably crazy. I&#x27;m not &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;siracusa&quot;&gt;Jon
Siracusa&lt;&#x2F;a&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;For those of you who&#x27;ve made it this far, here&#x27;s what my desk looks like today:&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;desk.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;trackballs&amp;#x2F;desk.jpg&quot; alt=&quot;my desk, today&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;Stay safe out there, readers.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-still&quot;&gt;
&lt;p&gt;I bought mine in 2005. Remarkably, this is a product that Logitech still makes and sells fifteen years later for sixty American dollars. Capitalism! &lt;a href=&quot;#fr-still-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-gunk&quot;&gt;
&lt;p&gt;At least, until gunk got stuck between the wheel and the Teflon nubbins it rolls on, at which point you flip
the trackball over, push the ball out, and clean gunk off the nubbins. This is a requirement for all trackballs unless
you wash your hands before every time you use your computer, and probably also have yourself surgically altered to no
longer sweat. &lt;a href=&quot;#fr-gunk-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-lur&quot;&gt;
&lt;p&gt;The &quot;Logitech Unifying Receiver&quot; is a proprietary 2.4GHz radio dongle for Logitech keyboards and mice. &lt;a href=&quot;#fr-lur-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-goog&quot;&gt;
&lt;p&gt;In fact, the ExpertMouse was one of the &quot;standard&quot; mice we stocked at the Tech Stop when I worked in Google
Corporate IT. &lt;a href=&quot;#fr-goog-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-gross&quot;&gt;
&lt;p&gt;Yes, these look gross. Hey, it&#x27;s hard to use an input device for a protracted period &lt;em&gt;without&lt;&#x2F;em&gt; it looking
gross. Just ignore the crumbs and stains. &lt;a href=&quot;#fr-gross-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-mapping&quot;&gt;
&lt;p&gt;I have &lt;kbd&gt;Fn1&lt;&#x2F;kbd&gt; mapped to middle click, &lt;kbd&gt;Fn2&lt;&#x2F;kbd&gt; mapped to show desktop, and &lt;kbd&gt;Fn3&lt;&#x2F;kbd&gt; mapped to Mission Control née Exposé &lt;a href=&quot;#fr-mapping-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>2&lt;sup&gt;5&lt;&#x2F;sup&gt;</title>
          <pubDate>Thu, 18 Jun 2020 14:22:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/two-to-the-fifth-power/</link>
          <guid>https://www.roguelazer.com/blog/two-to-the-fifth-power/</guid>
          <description xml:base="https://www.roguelazer.com/blog/two-to-the-fifth-power/">&lt;p&gt;As every company I&#x27;ve ever bought a product from has been reminding me all morning, today is my birthday. 32 revolutions around the sun. Still ticking.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously it&#x27;s been a pretty busy year; most of that is in &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates&#x2F;&quot;&gt;my post from last month&lt;&#x2F;a&gt;. According to the accelerometer on my wrist, I&#x27;ve walked 2,904,398 steps in the last year&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-steps-1&quot;&gt;&lt;a href=&quot;#fn-steps&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; but I&#x27;m mostly still in the same place as I was. Probably by the time I hit 33 revolutions around the sun, it&#x27;ll be a very different story. Still got that baby on the way (another ~6 weeks to go), and my company just announced that we&#x27;re going permanently remote so I guess that&#x27;ll be a big life change.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I&#x27;ll actually post more this coming year? Who knows!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-steps&quot;&gt;
&lt;p&gt;Probably about 300,000 fewer than I would&#x27;ve without COVID-19. &lt;a href=&quot;#fr-steps-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>2020 MacBook Air Impressions</title>
          <pubDate>Fri, 29 May 2020 22:41:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/macbook-air-2020/</link>
          <guid>https://www.roguelazer.com/blog/macbook-air-2020/</guid>
          <description xml:base="https://www.roguelazer.com/blog/macbook-air-2020/">&lt;p&gt;For the past few years, I&#x27;ve been using a one-port &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;everymac.com&#x2F;systems&#x2F;apple&#x2F;macbook&#x2F;specs&#x2F;macbook-core-m5-1.2-12-early-2016-specs.html&quot;&gt;2016 MacBook&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-macbook-1&quot;&gt;&lt;a href=&quot;#fn-macbook&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; as my personal laptop that I carry with me
whenever I am traveling or need to work outside the house. It&#x27;s been a mixed bag -- the size was pretty much perfect
and very similar to a thin version of my old &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;everymac.com&#x2F;systems&#x2F;apple&#x2F;powerbook_g4&#x2F;specs&#x2F;powerbook_g4_867_12.html&quot;&gt;12&quot; PowerBook G4&lt;&#x2F;a&gt;, but the CPU performance was
absolutely awful and the battery only lasted about two hours. Also, I was finally bitten by the infamous &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wsj.com&#x2F;graphics&#x2F;apple-still-hasnt-fixed-its-macbook-keyboard-problem&#x2F;&quot;&gt;Butterfly
Keyboard Issue&lt;&#x2F;a&gt; and was getting double-entries from my spacebar.&lt;&#x2F;p&gt;
&lt;p&gt;In March, when Apple released the new MacBook Air with a new keyboard and one of the first 10nm Intel CPUs&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-10nm-1&quot;&gt;&lt;a href=&quot;#fn-10nm&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
on the market, I decided it was time to upgrade, so I bought the middle stock configuration of the new
machine&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-color-1&quot;&gt;&lt;a href=&quot;#fn-color&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;macbook-air-2020&amp;#x2F;2020-macbook.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;macbook-air-2020&amp;#x2F;2020-macbook.jpg&quot; alt=&quot;2020 MacBook Air&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;Basic specifications:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;Component&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;CPU&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ark.intel.com&#x2F;content&#x2F;www&#x2F;us&#x2F;en&#x2F;ark&#x2F;products&#x2F;196589&#x2F;intel-core-i5-1030ng7-processor-6m-cache-up-to-3-50-ghz.html&quot;&gt;Intel Core i5-1030NG7&lt;&#x2F;a&gt; (1.1GHz base, 3.5GHz turbo, 10nm process, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ice_Lake_(microprocessor)&quot;&gt;Ice Lake&lt;&#x2F;a&gt; μarch)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;RAM&lt;&#x2F;td&gt;&lt;td&gt;8GB&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-8gb-1&quot;&gt;&lt;a href=&quot;#fn-8gb&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; LPDDR4-3733&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Storage&lt;&#x2F;td&gt;&lt;td&gt;500GB Apple AP0512N SSD&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Display&lt;&#x2F;td&gt;&lt;td&gt;13.3&quot; 10-bit Retina display @ 2560x1600 (221dpi)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;I haven&#x27;t had it for long, but here are some initial reactions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;size isn&#x27;t as nice as the 12&quot; (37% heavier, and about 20% more volume)&lt;&#x2F;li&gt;
&lt;li&gt;new keyboard is more reliable and has a pretty good feel. backlighting is also much stronger.&lt;&#x2F;li&gt;
&lt;li&gt;battery life is &lt;em&gt;way&lt;&#x2F;em&gt; better. 5-6 hours of moderate use, and several days of standby&lt;&#x2F;li&gt;
&lt;li&gt;screen is a bit brighter and looks less goofy with night shift on. still not nearly as good as my
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2019-imac-first-impressions&#x2F;&quot;&gt;2019 iMac&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;CPU performance is nominally a lot better&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-CPU-1&quot;&gt;&lt;a href=&quot;#fn-CPU&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and feels less like the limiting factor in day-to-day operations.
It still chugs a lot when trying to do medium-intensive things like processing 24MP RAW images from my Ricoh, but
at least it finishes &lt;em&gt;eventually&lt;&#x2F;em&gt; now instead of beachballing until I die of old age.&lt;&#x2F;li&gt;
&lt;li&gt;integrated GPU is massively observably more powerful than on the 12&quot; (GeekBench says the &quot;compute&quot; score is only 50% higher, but it feels &lt;strong&gt;much&lt;&#x2F;strong&gt; smoother when doing basic rendering operations like Exposé)&lt;&#x2F;li&gt;
&lt;li&gt;the enormous trackpad is really fun. My work MacBook Pro has the same trackpad, but I basically never use it
undocked, so this machine is my first time intensively using the giant trackpad on modern 13&quot;-class Macs. I&#x27;m
pro.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There&#x27;s a reason that the MacBook Air is Apple&#x27;s best-selling Mac. If you need a portable Mac, it&#x27;s probably what
you should get. No TouchBar, acceptable price, and now a functional keyboard. Officially endorsed.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;PS&lt;&#x2F;strong&gt;: I wrote this entire post on the new machine and didn&#x27;t get any inadvertent double keystrokes at all. Hurray!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-macbook&quot;&gt;
&lt;p&gt;A.K.A. the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;marco.org&#x2F;2015&#x2F;05&#x2F;19&#x2F;mistake-one&quot;&gt;MacBook One&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-macbook-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-10nm&quot;&gt;
&lt;p&gt;Only 3 years late. Some day some former Intel executive will write a tell-all about why Intel fell so far
behind TSMC in lithography &lt;a href=&quot;#fr-10nm-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-color&quot;&gt;
&lt;p&gt;Yes, I got &quot;Space Grey&quot; this time, for the first time in a laptop. It&#x27;s okay. I think I&#x27;ll go back to
regular old silver next time. &lt;a href=&quot;#fr-color-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-8gb&quot;&gt;
&lt;p&gt;I strongly considered getting 16GB, but I mostly just run nvim and firefox. How much RAM could that use? &lt;a href=&quot;#fr-8gb-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-CPU&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;browser.geekbench.com&#x2F;v5&#x2F;cpu&#x2F;compare&#x2F;1675668?baseline=2327343&quot;&gt;GeekBench&lt;&#x2F;a&gt; says it&#x27;s more than twice the single-core performance and almost four times the multi-core performance &lt;a href=&quot;#fr-CPU-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Flexbox Rocks</title>
          <pubDate>Wed, 27 May 2020 18:17:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/flexbox-rocks/</link>
          <guid>https://www.roguelazer.com/blog/flexbox-rocks/</guid>
          <description xml:base="https://www.roguelazer.com/blog/flexbox-rocks/">&lt;p&gt;Small update: I rewrote the CSS for this website to replace all of the Bootstrap Grid system stuff with straight up
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;css-flexbox-1&#x2F;&quot;&gt;Flexbox&lt;&#x2F;a&gt;. It&#x27;s so much better! We should all use Flexbox for everything!&lt;&#x2F;p&gt;
&lt;p&gt;The &quot;gallery&quot; view (used in, e.g., the end of &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;life-updates&#x2F;&quot;&gt;yesterday&#x27;s &quot;Life Updates&quot; post&lt;&#x2F;a&gt;)
is also now Flexbox and better.&lt;&#x2F;p&gt;
&lt;p&gt;I tested this on a bunch of browsers and screen sizes, but please let me know if you find anything that looks broken.&lt;&#x2F;p&gt;
&lt;p&gt;I also got bored and made the &lt;a href=&quot;&#x2F;tags&quot;&gt;tags&lt;&#x2F;a&gt; page a tag cloud on wide-enough screens because it&#x27;s like the 90&#x27;s again.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Trees in the Park</title>
          <pubDate>Tue, 26 May 2020 21:10:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/trees-in-the-park/</link>
          <guid>https://www.roguelazer.com/blog/trees-in-the-park/</guid>
          <description xml:base="https://www.roguelazer.com/blog/trees-in-the-park/">





&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2j65iuF&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;49940536147_45fac611bf_h.jpg&quot; alt=&quot;park&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;There are trees growing out out of the sand at the park near my house, closed for the last few months due to
COVID-19. What a weird world.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Life Updates</title>
          <pubDate>Tue, 26 May 2020 20:18:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/life-updates/</link>
          <guid>https://www.roguelazer.com/blog/life-updates/</guid>
          <description xml:base="https://www.roguelazer.com/blog/life-updates/">&lt;p&gt;Hey, so, it&#x27;s been a while since I posted. I guess I just wanted to post and update. Let&#x27;s see... what has happened
since February 2020....&lt;&#x2F;p&gt;
&lt;h3 id=&quot;family&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#family&quot; aria-label=&quot;Anchor link for: family&quot;&gt;Family&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;life-updates&amp;#x2F;fetus.jpeg&quot; alt=&quot;fetus&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;p&gt;Yeah, so, we&#x27;re having a baby. If you didn&#x27;t see that on other social media already. He&#x27;s&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-sonogram-1&quot;&gt;&lt;a href=&quot;#fn-sonogram&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; due at the end of July&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-covid-babies-1&quot;&gt;&lt;a href=&quot;#fn-covid-babies&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lockdown&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lockdown&quot; aria-label=&quot;Anchor link for: lockdown&quot;&gt;Lockdown&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;As you and everyone else knows, the world has been in lockdown since March due to the outbreak of
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Severe_acute_respiratory_syndrome_coronavirus_2&quot;&gt;SARS-CoV-2&lt;&#x2F;a&gt; causing
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Coronavirus_disease_2019&quot;&gt;COVID-19&lt;&#x2F;a&gt;. My company sent us all on mandatory work-from-home
on March 12th and I haven&#x27;t been across the bridge into San Francisco since. Working from home is... tough. We have a
house (unlike many of my workers who have apartments or even just single bedrooms), but it&#x27;s still hard to get enough
space that you can clearly delineate &quot;work time&quot; from &quot;home time&quot;. Some parts are nice; I like being able to eat lunch
in my backyard with Eva, and I like the fact that I haven&#x27;t had a cold in two and a half months due to the lack of
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bart.gov&quot;&gt;BART&lt;&#x2F;a&gt; and the constant hand-washing. It&#x27;s damned helpful that we &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;new-car&#x2F;&quot;&gt;bought a
car&lt;&#x2F;a&gt; when we did, both because public transit is basically gone now, and it&#x27;s also really
hard to buy a car right now.&lt;&#x2F;p&gt;
&lt;p&gt;The baby stuff is also incredibly stressful -- everything about preparing for a new child is a million times harder when
the world is locked down. You can&#x27;t go to any stores to buy clothing or supplies; it all has to be blind over the
Internet. I can&#x27;t go to my wife&#x27;s OB appointments due to the strict contact procedures. And, of course, they still have
no idea how this disease affects pregnant women or newborn children, so we&#x27;re trying even harder than normal not to get
infected.&lt;&#x2F;p&gt;
&lt;p&gt;I can&#x27;t really write anything about this disease or lockdown that isn&#x27;t said better by a million other people online,
but my sympathies go out to all of those infected and affected. I wish that we had literally any other political
leadership at this time, and I hope that we make it through anyway.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rabbits&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#rabbits&quot; aria-label=&quot;Anchor link for: rabbits&quot;&gt;Rabbits&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;We had some sad news recently; one of our rabbits (Alot) was diagnosed with cancer in February and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wisegeek.com&#x2F;in-veterinary-terms-what-is-a-pinnectomy.htm&quot;&gt;had her ear
removed&lt;&#x2F;a&gt;. Unfortunately, she developed a cough
and then ended up going into severe stasis and passing away on May 24th. She was a good, brave rabbit and will be
missed; she is survived by her bonded partner rabbit Mirabelle.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;life-updates&amp;#x2F;alot.jpeg&quot; alt=&quot;alot of rabbit&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;h3 id=&quot;hobbies&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hobbies&quot; aria-label=&quot;Anchor link for: hobbies&quot;&gt;Hobbies&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In preparation for having a new (and hopefully photogenic) baby and to entertain myself while locked in the house all
day, I did buy a new camera recently. I decided that part of the reason I don&#x27;t use my OM-D E-M5 enough is that it&#x27;s
pretty big and heavy with a lens on&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-om-d-1&quot;&gt;&lt;a href=&quot;#fn-om-d&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and I don&#x27;t have it with me enough. As they say, &lt;em&gt;the best camera is the one
you have with you&lt;&#x2F;em&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-quote-1&quot;&gt;&lt;a href=&quot;#fn-quote&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Anyhow, I got a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.ricoh-imaging.co.jp&#x2F;english&#x2F;products&#x2F;gr-3&#x2F;&quot;&gt;Ricoh GR III&lt;&#x2F;a&gt; after
reading several hundred reviews of every high-quality pocketable camera, and for the few days I&#x27;ve had it, it&#x27;s been
absolutely fantastic. An APS-C sensors in a 250 gram package is completely insane, and I&#x27;d forgotten how much more light
you get with that big of a sensor compared to the Micro Four Thirds sensor on my OM-D or the teensy sensor on my
iPhone&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-sensor-size-1&quot;&gt;&lt;a href=&quot;#fn-sensor-size&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The Positive Film setting on the Ricoh in particular produces a delightful æsthetic. It also
produces phenomenal RAW images which someone with time and skill could surely extract a ton out of; I have neither the
time nor the skill so I mostly shoot JPEGs.&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2j65hvB&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;49940532837_ee4c058658_h.jpg&quot; alt=&quot;palm trees against late sunset&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2j63HHd&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;49940227386_d017f9dc8d_h.jpg&quot; alt=&quot;macro flower&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2j6173b&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;49939717158_46f53fe089_h.jpg&quot; alt=&quot;me eating a smore&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;flic.kr&amp;#x2F;p&amp;#x2F;2j61GR4&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;49939834253_418c2fa8c9_h.jpg&quot; alt=&quot;eva eating a smore&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Stay safe out there, gentle readers.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-sonogram&quot;&gt;
&lt;p&gt;Yes, it&#x27;s a boy. The sonogram helpfully had arrows to point out where you can tell that it&#x27;s a boy. &lt;a href=&quot;#fr-sonogram-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-covid-babies&quot;&gt;
&lt;p&gt;He&#x27;ll have a good head start on all the lockdown babies getting born in January. &lt;a href=&quot;#fr-covid-babies-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-om-d&quot;&gt;
&lt;p&gt;With my smallest non-potato quality lens, a 17mm prime, the OM-D weighs 588 grams and requires a rectangular
prism of 8.57 deciliters. The new camera is 257 grams and 2.16 deciliters. &lt;a href=&quot;#fr-om-d-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-quote&quot;&gt;
&lt;p&gt;I&#x27;ve heard that maxim for at least 10 years but I cannot find out who said it first. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.chasejarvis.com&#x2F;&quot;&gt;Chase Jarvis&lt;&#x2F;a&gt; wrote a book
with that title, but the quote shows up in random places in Google from years before the book was written. &lt;a href=&quot;#fr-quote-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-sensor-size&quot;&gt;
&lt;p&gt;APS-C is 368 mm&lt;sup&gt;2&lt;&#x2F;sup&gt;; m43 is 225 mm&lt;sup&gt;2&lt;&#x2F;sup&gt;; the iPhone&#x27;s 1&#x2F;2.55&quot; sensor is only 25
mm&lt;sup&gt;2&lt;&#x2F;sup&gt;. &lt;a href=&quot;#fr-sensor-size-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>systemd</title>
          <pubDate>Sun, 01 Mar 2020 22:15:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/systemd/</link>
          <guid>https://www.roguelazer.com/blog/systemd/</guid>
          <description xml:base="https://www.roguelazer.com/blog/systemd/">&lt;p&gt;I&#x27;ve had this sitting on my desktop for months and figured I&#x27;d post it. No idea where it originally came from.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;systemd&amp;#x2F;systemd.gif&quot; alt=&quot;systemd&quot; class=&quot;cimg-no-shadow&quot;  &#x2F;&gt;
  
</description>
      </item>
      <item>
          <title>New Car</title>
          <pubDate>Mon, 17 Feb 2020 15:59:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-car/</link>
          <guid>https://www.roguelazer.com/blog/new-car/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-car/">&lt;p&gt;After more than 10 years of avoiding it, I&#x27;ve finally rejoined the ranks of the private-car-owning bourgeois. &lt;code&gt;$SPOUSE&lt;&#x2F;code&gt;
and I spent the past few weeks doing research and reading reviews, spent Saturday and Sunday test-driving a bunch of
vehicles, and ended up buying a brand new Cosmic Blue &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;automobiles.honda.com&#x2F;insight&quot;&gt;2020 Honda Insight&lt;&#x2F;a&gt; yesterday
afternoon.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-car&amp;#x2F;2020-02-16-car.jpeg&quot; alt=&quot;new car&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;</description>
      </item>
      <item>
          <title>Austin, TX</title>
          <pubDate>Sat, 11 Jan 2020 11:10:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2020-austin-tx/</link>
          <guid>https://www.roguelazer.com/blog/2020-austin-tx/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2020-austin-tx/">&lt;p&gt;Went to Austin, Texas this weekend for a work event&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-event-1&quot;&gt;&lt;a href=&quot;#fn-event&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; it was my first time in Austin so I figured I&#x27;d write up some notes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Cities are so indistinguishable now. Downtown Austin has the same restaurant and store chains as San Francisco, Boston, Miami, or any other American city.&lt;&#x2F;li&gt;
&lt;li&gt;Its is weird how much Confederate stuff there still is for the supposedly-liberal Texas city. Until &#x27;96, the Capitol Visitors Center was administered by the Daughters of the Confederacy; lots of Confederate flags.&lt;&#x2F;li&gt;
&lt;li&gt;Live music everywhere, even at the broiest bars near the hotels --- even at the hotel bars! This was &lt;em&gt;great&lt;&#x2F;em&gt;! I wish more Bay Area bars had live jazz or blues or funk just as a regular thing.&lt;&#x2F;li&gt;
&lt;li&gt;Everything was incredibly cheap compared to the Bay Area. For what I paid for my 1400sqft house in Berkeley I could get a mansion sitting on several acres in Austin. Despite how cheap everything is and how plentiful housing is, homelessness still seems to be a big problem. Tent cities under the overpasses and folks sleeping on all the benches. Kind of a downer for me as a YIMBY; more housing alone won&#x27;t do it, we also need supportive socialized housing programs!&lt;&#x2F;li&gt;
&lt;li&gt;Gun culture is insane. There were a number of gun stores near our hotel and businesses apparently have to have a giant sign if they don&#x27;t want people to open carry into their restaurant or office. I don&#x27;t care how many feral hogs are coming into your rural backyard; you don&#x27;t need a gun in a WeWork. I could never be comfortable in a place where so many people live in such fear that they need to carry weapons to breakfast.&lt;&#x2F;li&gt;
&lt;li&gt;Good barbecue&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-bbq-1&quot;&gt;&lt;a href=&quot;#fn-bbq&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Duh.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I&#x27;m drinking some coffee at the airport now&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-airport-1&quot;&gt;&lt;a href=&quot;#fn-airport&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Only another seven or so hours of air travel and I&#x27;ll be home.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-event&quot;&gt;
&lt;p&gt;technically, an &quot;engineering leadership retreat&quot; &lt;a href=&quot;#fr-event-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-bbq&quot;&gt;
&lt;p&gt;We got some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;franklinbbq.com&#x2F;&quot;&gt;Franklin Barbecue&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-bbq-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-airport&quot;&gt;
&lt;p&gt;AUS is a nice airport. Reminds me a bit of ONT; super fast security process, ample seating, not too many gates.  I&#x27;m at the one place with pour over coffee --- one is better than none! There&#x27;s also decent free WiFi which doesn&#x27;t block WireGuard traffic... always nice to have... &lt;a href=&quot;#fr-airport-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Surprising Change in Python 3.7.6</title>
          <pubDate>Fri, 03 Jan 2020 18:30:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/py376-regression/</link>
          <guid>https://www.roguelazer.com/blog/py376-regression/</guid>
          <description xml:base="https://www.roguelazer.com/blog/py376-regression/">&lt;p&gt;Here&#x27;s a surprising change for you: Python 3.7.6 (ostensibly, a patch bugfix release) totally changed how URLs are parsed by Python programs.&lt;&#x2F;p&gt;
&lt;p&gt;As of Python 3.7.5, a URL like &lt;code&gt;foo:8888&lt;&#x2F;code&gt; would be parsed into the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; urllib&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;parse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;urlparse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;foo:8888&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;ParseResult&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt;scheme&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; netloc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;foo:8888&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; query&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; fragment&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As of Python 3.7.6, &lt;code&gt;foo&lt;&#x2F;code&gt; is now detected as the scheme:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; urllib&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span&gt;parse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;urlparse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;foo:8888&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #7AA2F7);&quot;&gt;ParseResult&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt;scheme&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; netloc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; path&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;8888&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; params&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; query&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #E0AF68);&quot;&gt; fragment&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will cause &lt;strong&gt;massive chaos&lt;&#x2F;strong&gt; if you are ever parsing URLs with ports in them but without schemes. The relevant Python bug is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bugs.python.org&#x2F;issue27657&quot;&gt;bpo27657&lt;&#x2F;a&gt;. I consider this to be a major regression,
especially since it was introduced in a patch release.&lt;&#x2F;p&gt;
&lt;p&gt;Good luck out there...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Twenty-Teens in Review</title>
          <pubDate>Tue, 31 Dec 2019 17:12:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/twenty-teens/</link>
          <guid>https://www.roguelazer.com/blog/twenty-teens/</guid>
          <description xml:base="https://www.roguelazer.com/blog/twenty-teens/">&lt;p&gt;Well, here it is, the end of 2019, the end of the decade&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-decade-1&quot;&gt;&lt;a href=&quot;#fn-decade&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. 🎉 The end of the decade of my twenties, so probably the most
eventful decade I&#x27;ll experience&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-eventful-1&quot;&gt;&lt;a href=&quot;#fn-eventful&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Ten years ago, I was at my parents&#x27; house in Fall River, a senior in college
on my last Christmas break of all time. I&#x27;d &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;job-search-complete&#x2F;&quot;&gt;just accepted&lt;&#x2F;a&gt; an offer from
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.yelp.com&#x2F;&quot;&gt;Yelp&lt;&#x2F;a&gt; to start as a Software Engineer in June, 2010, reporting to Neil Kumar&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-neil-1&quot;&gt;&lt;a href=&quot;#fn-neil&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. The world
was uncertain before me. Today, I am sitting in my own house&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-wfh-1&quot;&gt;&lt;a href=&quot;#fn-wfh&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, married, working for my third employer, sitting
pretty in a very different world. What would 2010 me, using his dual-core ~3GHz computer and his iPhone think of 2019
me, using a &lt;em&gt;quad&lt;&#x2F;em&gt;-core ~3GHz computer and his iPhone&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-iphone-1&quot;&gt;&lt;a href=&quot;#fn-iphone&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;? Oh, indeed how times have changed.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s go through the highlights of the decade, shall we?&lt;&#x2F;p&gt;
&lt;h4 id=&quot;2010&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2010&quot; aria-label=&quot;Anchor link for: 2010&quot;&gt;2010&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Graduated from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hmc.edu&quot;&gt;HMC&lt;&#x2F;a&gt; (with honors)&lt;&#x2F;li&gt;
&lt;li&gt;Moved to San Francisco&lt;&#x2F;li&gt;
&lt;li&gt;Started working for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.yelp.com&quot;&gt;Yelp&lt;&#x2F;a&gt; with a bunch of Mudders&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2011&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2011&quot; aria-label=&quot;Anchor link for: 2011&quot;&gt;2011&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;h4 id=&quot;2012&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2012&quot; aria-label=&quot;Anchor link for: 2012&quot;&gt;2012&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Started dating Eva&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wsj.com&#x2F;articles&#x2F;SB10001424052970203986604577257193903928040&quot;&gt;Yelp IPOs&lt;&#x2F;a&gt; people start leaving&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;debt-free-since-2012&#x2F;&quot;&gt;Paid off my college debts&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Obama gets re-elected to a second term. The dream of comfortable technocratic center-left governance seems to still be alive and kicking.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2013&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2013&quot; aria-label=&quot;Anchor link for: 2013&quot;&gt;2013&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Left Yelp, started working for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.uber.com&quot;&gt;Uber&lt;&#x2F;a&gt; with my former Yelp coworker Oliver Nicholas&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2014&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2014&quot; aria-label=&quot;Anchor link for: 2014&quot;&gt;2014&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;i-got-sick&#x2F;&quot;&gt;Got non-trivially sick&lt;&#x2F;a&gt; for pretty much the first time&lt;&#x2F;li&gt;
&lt;li&gt;Got engaged&lt;&#x2F;li&gt;
&lt;li&gt;Adopted our first pet rabbits&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2015&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2015&quot; aria-label=&quot;Anchor link for: 2015&quot;&gt;2015&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Got married, went on a &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;honeymoon&#x2F;&quot;&gt;fun honeymoon&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Left Uber, started working at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.easypost.com&quot;&gt;EasyPost&lt;&#x2F;a&gt; for my former-Yelp-coworker Andy Bakun&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2016&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2016&quot; aria-label=&quot;Anchor link for: 2016&quot;&gt;2016&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;The world collectively loses its mind&lt;&#x2F;em&gt;. The United Kingdom decides to turn Britain into a global pariah. The
United States decides that what everyone really needs is an excuse to fondly remember the greatness of John Tyler&#x27;s
presidency.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2017&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2017&quot; aria-label=&quot;Anchor link for: 2017&quot;&gt;2017&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Lost one of our rabbits; gained a new rabbit&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2018&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2018&quot; aria-label=&quot;Anchor link for: 2018&quot;&gt;2018&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Bought a house; moved to Berkeley&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;2019&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019&quot; aria-label=&quot;Anchor link for: 2019&quot;&gt;2019&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Uber somehow managed to make it through &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.wsj.com&#x2F;articles&#x2F;uber-stumbles-in-trading-debut-11557503554&quot;&gt;its IPO&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Lost any remaining faith in the tech industry&lt;&#x2F;li&gt;
&lt;li&gt;Wrote this blog post&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Overall, I think I&#x27;d give this decade a solid &lt;strong&gt;B&lt;&#x2F;strong&gt;. Lots of character development and personal growth, but the work
storyline was repetitive and the background political plot was unrealistic.&lt;&#x2F;p&gt;
&lt;p&gt;I think along the way I learned a lot about computers, a lot about American tech startups, and a bit about being a human
being. But the big lesson I learned this decade was been the same lesson learned by young adults through the entire
history of the world — there are no adults in the room, nobody coming to fix our mistakes and save us from our
problems. There are no authority figures except us, ourselves. There are no elders whose experience we can lean on; the
rich and powerful, the charismatic, the experienced — they&#x27;re all just folks muddling through. I&#x27;ve seen a CEO worth
six billion dollars have a temper tantrum, and I&#x27;ve seen our friend&#x27;s two-year-old have a temper tantrum, and let me
tell you: they&#x27;re pretty much the same experience. Our entire planet is currently suffering through a protracted temper
tantrum by a seventy-three-year-old millionaire politician and &lt;em&gt;there are no adults in the room&lt;&#x2F;em&gt;. People deserve your
respect and trust because they earn it, not because they have a title or age or wealth or power.&lt;&#x2F;p&gt;
&lt;p&gt;What will the next decade bring? Will I keep making the same mistakes in my career? Will my family grow? Will the world
continue its inexorable slide into totalitarian dystopia? Goodness knows that I have no idea. I guess we won&#x27;t know
until I write another post on January 31, 2029. See you then.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Currently listening to: Rogue Wave - Christians in Black&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-decade&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2249&#x2F;&quot;&gt;Obligatory XKCD link&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-decade-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-eventful&quot;&gt;
&lt;p&gt;Note to the Powers that Be: that&#x27;s not an invitation to start the robot uprising on January 1, 2020. &lt;a href=&quot;#fr-eventful-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-neil&quot;&gt;
&lt;p&gt;By the time I started, the CTO (Russ Simmons&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-russ-1&quot;&gt;&lt;a href=&quot;#fn-russ&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;) would&#x27;ve quit and Neil would be the VP of Engineering. I did
not, in fact, report to Neil. Imagine how different my life would be if I&#x27;d worked as some generic &quot;backend engineer&quot;! &lt;a href=&quot;#fr-neil-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-wfh&quot;&gt;
&lt;p&gt;BART is all messed up for the holiday, so I&#x27;m nominally Working from Home today. &lt;a href=&quot;#fr-wfh-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-iphone&quot;&gt;
&lt;p&gt;Yes, I know, the iPhone 11 in my pocket is &lt;strong&gt;48x&lt;&#x2F;strong&gt; faster than the iPhone 3G I had in 2010 (at least at
Sunspider, which is the only benchmark that runs reliably on both) &lt;a href=&quot;#fr-iphone-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-russ&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Russel_Simmons&quot;&gt;Not the hip-hop artist&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-russ-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>DMV</title>
          <pubDate>Mon, 30 Dec 2019 11:30:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/dmv/</link>
          <guid>https://www.roguelazer.com/blog/dmv/</guid>
          <description xml:base="https://www.roguelazer.com/blog/dmv/">&lt;p&gt;I went to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dmv.ca.gov&quot;&gt;DMV&lt;&#x2F;a&gt; today to get a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dhs.gov&#x2F;real-id&quot;&gt;REAL ID&lt;&#x2F;a&gt; upgrade for my license, and to get it reprinted
with my correct address so I don&#x27;t need to carry the paper change-of-address confirmation any more.
The DMV is always a fascinating microcosm of human behavior, and a unique experience to simultaneously
see the best and worst in people.&lt;&#x2F;p&gt;
&lt;p&gt;For those of you who haven&#x27;t been in a California DMV, the process follows several stages:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;(optional)&lt;&#x2F;em&gt; Make an appointment. The North Oakland DMV doesn&#x27;t have any appointments available in the next six
months, and then next DMV available &lt;em&gt;anywhere&lt;&#x2F;em&gt; in the Bay Area is late March at Oakland-Colliseum, so I did not
get an appointment.&lt;&#x2F;li&gt;
&lt;li&gt;Get a number. This involves a long line. At bigger DMVs (e.g., San Francisco), there are separate lines for
getting a number if you have an appointment and if you don&#x27;t; at smaller DMVs (e.g., North Oakland), there&#x27;s
just one line. I got there a few minutes after the DMV opened today, so I only waited in line outdoors (in
the delightful, 40°F weather) for about 45
minutes to get a number. Your &quot;number&quot; has two parts — a letter and a number. Appointments get letter G and an
auto-incrementing number (e.g., &lt;strong&gt;G-002&lt;&#x2F;strong&gt;); non-appointments get letter H and an auto-incrementing number (e.g.,
&lt;strong&gt;H-003&lt;&#x2F;strong&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Wait for your number to be called. Every minute or so the PA will call out something like &lt;q&gt;Now serving G-002 at
Counter 12&lt;&#x2F;q&gt;. Today, they called approximately eight &lt;strong&gt;G&lt;&#x2F;strong&gt;&#x27;s for every &lt;strong&gt;H&lt;&#x2F;strong&gt;, so I waited for about 90 minutes
inside.&lt;&#x2F;li&gt;
&lt;li&gt;Actually do your business at the DMV. For me, this involved three different counters and took another half an
hour.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;These wait times are pretty great for a Bay Area DMV&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-bay-area-wait-1&quot;&gt;&lt;a href=&quot;#fn-bay-area-wait&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but still spending three or more hours doing
paperwork isn&#x27;t anyone&#x27;s idea of a good time. This was extra fun for me, because I (foolishly in retrospect) decided to
&lt;em&gt;renew&lt;&#x2F;em&gt; my license at the same time as I upgraded it to a REAL-ID, and apparently in California if you renew a license
more than six months before it expires, you have to &lt;em&gt;re-take&lt;&#x2F;em&gt; the written Driver&#x27;s Test&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-re-take-1&quot;&gt;&lt;a href=&quot;#fn-re-take&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;; it&#x27;s not at all a
difficult test, but it took an extra 20 minutes.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, the whole process really magnifies the impersonality of bureaucracy — at one point, a woman and her disabled
daughter walked past the line to the number-issuing desk to ask if there was a way her daughter could sit down instead
of standing in line outside for hours. The answer, of course, was a resounding &lt;q&gt;No, there is no way, you need to go to
the end of the line.&lt;&#x2F;q&gt; Eventually, someone volunteered to hold their place in line while she sat down. The best of
people, the worst of people.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, I guess now I have five more years before I have to do this again. Yay.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-bay-area-wait&quot;&gt;
&lt;p&gt;I&#x27;ve heard horror stories of people showing up to the San Francisco DMV exactly at opening time and waiting five or six hours before they even got assigned their number. &lt;a href=&quot;#fr-bay-area-wait-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-re-take&quot;&gt;
&lt;p&gt;Incidentally, I cannot find out where this rule is written down. The woman behind the counter told me that
this was the rule; the Internet just says that you &quot;may be required to take a knowledge test&quot;. &lt;a href=&quot;#fr-re-take-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Unicode via Alfred</title>
          <pubDate>Tue, 24 Dec 2019 14:43:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/alfred-unicode/</link>
          <guid>https://www.roguelazer.com/blog/alfred-unicode/</guid>
          <description xml:base="https://www.roguelazer.com/blog/alfred-unicode/">&lt;p&gt;Something I miss a lot on macOS is a fast way to enter Unicode characters. macOS does a pretty good job of handling
combining keys so that you can type é and ö, and it&#x27;s got a fancy emoji picker, but if you want to enter ∫ or ⚠, you&#x27;re
stuck using the terrible character picker window&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-window-1&quot;&gt;&lt;a href=&quot;#fn-window&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;alfred-unicode&amp;#x2F;2019-12-24-character-picker.png&quot; alt=&quot;screenshot of the character picker&quot; class=&quot;halfimg center&quot;  &#x2F;&gt;
  
&lt;p&gt;Well, no longer. If you, like me, use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.alfredapp.com&#x2F;&quot;&gt;Alfred 4&lt;&#x2F;a&gt; on your Mac, you can download the following
Alfred Workflow to get a new &quot;&lt;code&gt;unicode&lt;&#x2F;code&gt;&quot; Alfred command. This uses a fast index&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-index-1&quot;&gt;&lt;a href=&quot;#fn-index&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; to look up unicode characters by name.
The first time you run it, it builds the index on your system (which might take 10 or 20 seconds; be patient); every
subsequent run will be super-fast. Just hit &lt;kbd&gt;Return&lt;&#x2F;kbd&gt; on your desired entry to copy the character to the clipboard; hold ⌘
while pressing &lt;kbd&gt;Return&lt;&#x2F;kbd&gt; to copy the metadata&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-metadata-1&quot;&gt;&lt;a href=&quot;#fn-metadata&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; instead.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;alfred-unicode&amp;#x2F;2019-12-24-fast-unicode.png&quot; alt=&quot;screenshot of fast-unicode&quot; class=&quot;halfimg center&quot;  &#x2F;&gt;
  
&lt;p&gt;Note that this requires an up-to-date Python3 to be somewhere in your &lt;code&gt;$PATH&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;alfred-unicode&#x2F;fast-unicode.alfredworkflow&quot;&gt;download fast-unicode.alfredworkflow&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Enjoy!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-window&quot;&gt;
&lt;p&gt;You can bring this up by enabling &quot;Show keyboard and emoji viewers in menu bar&quot; and then clicking &quot;Show Emoji
&amp;amp; Symbols&quot; in the new menu item that appears. This window is strange; it floats on top of &lt;em&gt;most&lt;&#x2F;em&gt; other windows, but not
all. I usually end up getting it stuck on another virtual desktop and spending 30 seconds searching for it when I need
it. &lt;a href=&quot;#fr-window-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-index&quot;&gt;
&lt;p&gt;Technically, it uses a sqlite database where I store tokenized emoji names, as well as bigrams and trigrams.
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sqlite.org&#x2F;index.html&quot;&gt;sqlite&lt;&#x2F;a&gt; is great. &lt;a href=&quot;#fr-index-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-metadata&quot;&gt;
&lt;p&gt;For example, for ⌘, you get &lt;code&gt;U+2318 PLACE OF INTEREST SIGN&lt;&#x2F;code&gt; &lt;a href=&quot;#fr-metadata-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>On the Decline of Zipcar</title>
          <pubDate>Sun, 20 Oct 2019 09:24:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/zipcar/</link>
          <guid>https://www.roguelazer.com/blog/zipcar/</guid>
          <description xml:base="https://www.roguelazer.com/blog/zipcar/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;zipcar&amp;#x2F;zipcar_logo.png&quot; alt=&quot;zipcar&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;I haven&#x27;t owned a car in twelve years. Since I moved to San Francisco, I&#x27;ve exclusively relied on
public transit, taxis&#x2F;Uber, and the occasional rental car to get me where I&#x27;m going when I need to
go somewhere. In general, this has worked well for me — I can get where I need to go, and most of the
time I&#x27;m not emitting 300g of CO&lt;sub&gt;2&lt;&#x2F;sub&gt; per person-mile the way an individual car does. On the rare
occasions that I need to drive somewhere by myself (often to the vet, since rabbits
really aren&#x27;t good at public transit), my go-to choice has been &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.zipcar.com&quot;&gt;Zipcar&lt;&#x2F;a&gt;, an hourly car-rental
startup&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-startup-1&quot;&gt;&lt;a href=&quot;#fn-startup&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. This post is a rant about how terrible Zipcar has gotten over the last 9 years, backed up by the raw data of my actual 141 Zipcar trips&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-data-1&quot;&gt;&lt;a href=&quot;#fn-data&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;zipcar&amp;#x2F;2019-10-20-trips-per-year.png&quot; alt=&quot;trips per year&quot;  &#x2F;&gt;
  
&lt;h3 id=&quot;price&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#price&quot; aria-label=&quot;Anchor link for: price&quot;&gt;Price&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Over the last year or so, Zipcar has been aggressively increasing prices. Individual vehicles that were once $8&#x2F;hour are
now $14&#x2F;hour, and new cars being added are almost exclusively larger, more expensive cars (for example, the location
near me now exclusively has a Honda HR-V). The overall data is noisy, but I never took a trip above $15&#x2F;hour before 2013
(when the Budget acquisition of Zipcar was completed), and I have barely taken any trips &lt;em&gt;under&lt;&#x2F;em&gt; $15&#x2F;hour in 2019.&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;2019-10-20-amounts.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;2019-10-20-amounts.2fa548937da27a9a.png&quot; alt=&quot;amounts&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;2019-10-20-amounts-by-year.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;2019-10-20-amounts-by-year.6d3dde431df5b5ef.png&quot; alt=&quot;amounts by year&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;quality&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#quality&quot; aria-label=&quot;Anchor link for: quality&quot;&gt;Quality&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;As far as I can tell, Zipcar no longer maintains their cars with nearly the frequency or attention to detail that they
used to. The Honda HR-V (&quot;Hobart&quot;) that I&#x27;ve taken a few times from the location near me has the Check Engine light on,
and has had it on for more than 500 odometer miles. I report this to Zipcar every time I drive, to no avail. The car
that was there previously (a Subaru Crosstrek named &quot;Liberty&quot;) had a malfunction in the cruise control that made it
blare an annoying noise and pop up a big red modal dialog saying &quot;adaptive cruise control unavailable&quot; every time you
powered on the car for the entire months of June and July.&lt;&#x2F;p&gt;
&lt;p&gt;Every time I get into a Zipcar, the gas tank is nearly empty. This despite the fact that the nearby Zipcars &lt;strong&gt;live at a
gas station&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Even the paint jobs suffer — once upon a time, if I saw any scuff or scratch on a Zipcar, I would report it at
pick-up time and it would be fixed by the next time I took a ride. Now, I find it hard to get motivated to report
anything because the cars constantly look beat-up.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;convenience&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#convenience&quot; aria-label=&quot;Anchor link for: convenience&quot;&gt;Convenience&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Living in San Francisco, every year was an exercise in guessing which location Zipcar would stop providing cars at. I
lived in &quot;lower Nob Hill&quot; (the Tendernob), which is the densest part of San Francisco (the six block census tract
containing our apartment building has 2,839 residents&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-residents-1&quot;&gt;&lt;a href=&quot;#fn-residents&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;), and frequently there were zero Zipcars available in
a one-mile radius. Sutter-Stockton garage went from six cars, to four, to two.&lt;&#x2F;p&gt;
&lt;p&gt;Now that I live in Berkeley, the situation is much the same. There&#x27;s one Zipcar location within a mile (at a nearby
Chevron), and it&#x27;s dropped from three cars to one. I anticipate that the location will close soon and then my closest
option will be to hike to the other side of Ashby BART, to an absolutely charming location in the middle of a homeless
encampment.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;alternatives&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#alternatives&quot; aria-label=&quot;Anchor link for: alternatives&quot;&gt;Alternatives?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getaround.com&#x2F;&quot;&gt;Getaround&lt;&#x2F;a&gt; is the biggest alternative to Zipcar. It&#x27;s a sketchy &quot;disruptive&quot; startup where
individuals rent out their private cars (and are responsible for all the maintenance themselves). It&#x27;s much less
convenient (since the cars are in peoples&#x27; driveways in residential neighborhoods, usually in poor repair), and the
insurance coverage is... questionable.  CityCarShare is gone, absorbed by Getaround. Traditional rental companies
(Budget&#x2F;Avis, Hertz&#x2F;Dollar&#x2F;Thrifty, etc) don&#x27;t offer hourly rentals around here and nobody wants to kill that many trees every time
they drive somewhere.&lt;&#x2F;p&gt;
&lt;p&gt;Maybe we&#x27;ll have to buy a car.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-startup&quot;&gt;
&lt;p&gt;Well, it was a startup. Now it&#x27;s owned by Budget. &lt;a href=&quot;#fr-startup-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-data&quot;&gt;
&lt;p&gt;Zipcar has an API, but it&#x27;s behind an annoying signup process, so I just scraped the website. Aside from
the 6 (six!) different kinds of authentication cookies you need to provide, it&#x27;s not too hard, although it&#x27;s kind
of janky; for example, it returns no trips for 2011, despite the fact that I have email receipts for such
trips. &lt;a href=&quot;#fr-data-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-residents&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;statisticalatlas.com&#x2F;tract&#x2F;California&#x2F;San-Francisco-County&#x2F;011902&#x2F;Overview&quot;&gt;Statistical Atlas of the United
States&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-residents-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Crime Happened</title>
          <pubDate>Wed, 10 Jul 2019 21:45:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/crime/</link>
          <guid>https://www.roguelazer.com/blog/crime/</guid>
          <description xml:base="https://www.roguelazer.com/blog/crime/">&lt;p&gt;Today we got a nasty surprise in the form of an email from my next-door neighbor informing me that somebody had
attempted to break into our home&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-moved-1&quot;&gt;&lt;a href=&quot;#fn-moved&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;! An hour later (while I was on my way home from work), we got another email
indicating that the suspect had been arrested.&lt;&#x2F;p&gt;
&lt;p&gt;Apparently, someone was messing around with the lock on the gate to our backyard and my next-door neighbor yelled at
them. They hopped the fence, so he called the police and yelled at them some more. They fled. The police came&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-response-1&quot;&gt;&lt;a href=&quot;#fn-response&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
, patrolled the neighborhood, and caught
the guy breaking into a house a couple of blocks away.&lt;&#x2F;p&gt;
&lt;p&gt;Nothing was stolen or damaged (except some flowers the police stepped on while poking around the backyard to look for
clues), but an unsettling event for sure!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-moved&quot;&gt;
&lt;p&gt;for more details about said home, see &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;moved&#x2F;&quot;&gt;this article&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-moved-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-response&quot;&gt;
&lt;p&gt;about five minutes later — super-quick response for a prowler who ran away when yelled at &lt;a href=&quot;#fr-response-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Fall; or, Dodge in Hell</title>
          <pubDate>Sat, 29 Jun 2019 14:47:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/fall-or-dodge-in-hell/</link>
          <guid>https://www.roguelazer.com/blog/fall-or-dodge-in-hell/</guid>
          <description xml:base="https://www.roguelazer.com/blog/fall-or-dodge-in-hell/">&lt;p&gt;Over my recent vacation, I read Neal Stephenson&#x27;s latest book &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nealstephenson.com&#x2F;news&#x2F;2018&#x2F;12&#x2F;07&#x2F;fall&#x2F;&quot;&gt;&lt;em&gt;Fall; or, Dodge in
Hell&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, which is a rough sequel to 2011&#x27;s
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nealstephenson.com&#x2F;reamde.html&quot;&gt;&lt;em&gt;REAMDE&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;.  I thought I&#x27;d write up some brief thoughts I had on it and
maybe some questions for a hypothetical future reader.  Like all of Stephenson&#x27;s work from the last couple of decades,
this book is a meandering combination of science fiction, philosophy, political commentary, and
mythical fantasy. The Kindle edition I read is 880 pages long, and went pretty quickly over four three-hour flights.&lt;&#x2F;p&gt;
&lt;p&gt;In general, I&#x27;d give it ★★★☆☆. It&#x27;s got lots of interesting ideas, but it&#x27;s shot through with too much ridiculous
libertarian ideology, and it tries to tell too &lt;strong&gt;way&lt;&#x2F;strong&gt; too many stories in parallel. If you liked &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nealstephenson.com&#x2F;cryptonomicon.html&quot;&gt;&lt;em&gt;Cryptonomicon&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;, you&#x27;ll
probably like this book, but I would be surprised if &lt;em&gt;anyone&lt;&#x2F;em&gt; likes it enough to plod through it twice.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;WARNING: This post will contain significant spoliers for both
&lt;em&gt;Fall&lt;&#x2F;em&gt; and &lt;em&gt;REAMDE&lt;&#x2F;em&gt;; don&#x27;t keep reading untless you&#x27;ve either read both or are highly confident you aren&#x27;t going to read
either&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Dark Mode</title>
          <pubDate>Fri, 28 Jun 2019 17:15:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/dark-mode/</link>
          <guid>https://www.roguelazer.com/blog/dark-mode/</guid>
          <description xml:base="https://www.roguelazer.com/blog/dark-mode/">&lt;p&gt;Small update: this website now supports &quot;Dark Mode&quot; on macOS 10.14+ iOS 13+, and the forthcoming Android Q, all using the
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;CSS&#x2F;@media&#x2F;prefers-color-scheme&quot;&gt;&lt;code&gt;prefers-color-scheme&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; CSS media
selector. Let me know if you see anything that looks janky!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ode to a Pager</title>
          <pubDate>Thu, 13 Jun 2019 12:00:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2019-ode-to-a-pager/</link>
          <guid>https://www.roguelazer.com/blog/2019-ode-to-a-pager/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2019-ode-to-a-pager/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2019-ode-to-a-pager&amp;#x2F;2019-06-13-pager.png&quot; alt=&quot;pager&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;I&#x27;ve been on-call for most of the last 11 years. I was on-call for the CS Department at Mudd&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-csdept-1&quot;&gt;&lt;a href=&quot;#fn-csdept&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. I was on-call at
Yelp, in a rotation that at times contained as few as three people. I was on-call at Uber in rotations ranging from one
to twenty people. And I&#x27;ve been on-call at EasyPost — initially in a rotation with one other person&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-epdouble-1&quot;&gt;&lt;a href=&quot;#fn-epdouble&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and
currently with two other people. I have responded to tens of thousands of pages. I have been woken up in the middle of
the night hundreds&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-hundreds-1&quot;&gt;&lt;a href=&quot;#fn-hundreds&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; of times. For the last seven or so years, I&#x27;ve worked at firms where on-call was a &lt;acronym
title=&quot;Bring Your Own Device&quot;&gt;BYOD&lt;&#x2F;acronym&gt; kind of a deal — you bring your own cell phone, register it in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.pagerduty.com&quot;&gt;PagerDuty&lt;&#x2F;a&gt;, and that&#x27;s how you handle being on-call. This is my ode to the unfairly-hated pager, to
the practices of yore.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s look at the phone you have in your pocket right now&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-nodevice-1&quot;&gt;&lt;a href=&quot;#fn-nodevice&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;It runs iOS or Android&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ios-1&quot;&gt;&lt;a href=&quot;#fn-ios&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;It gets at most two days of battery life&lt;&#x2F;li&gt;
&lt;li&gt;It receives phone calls, of which at least 90% are robots saying things like &lt;q&gt;Hey buddy, this call is from the Department of Social Security&lt;&#x2F;q&gt;&lt;&#x2F;li&gt;
&lt;li&gt;When it&#x27;s not getting phone calls, it&#x27;s constantly begging for your attention with notifications, most of which are some degree of spam&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Is &lt;em&gt;this&lt;&#x2F;em&gt; the device you want to have to have on and audible 24 hours a day, 365 days a year? Do you love the idea of
Apple&#x27;s &lt;em&gt;Do Not Disturb&lt;&#x2F;em&gt; feature? Well, screw you because PagerDuty might need to reach you at any instant&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-dnd-1&quot;&gt;&lt;a href=&quot;#fn-dnd&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Do you miss
going out into the woods for a hike? Too bad, Apple had to shave 0.7mm off the latest iPhone so now the antenna only
works if it has direct line of sight to the AT&amp;amp;T worldwide headquarters in Dallas, TX. Want to quickly see what you&#x27;re
getting paged about? I hope you like watching this brief animation as all your icons &lt;em&gt;swoosh&lt;&#x2F;em&gt; in from whatever armpit
of the universe they spend the off-time drinking in before you can actually do anything. Oh, you&#x27;re using the native
PagerDuty app? Well, then, you&#x27;ve got to give it 10 seconds to load (despite the fact that the Apple A12 CPU in your
phone is faster than &lt;strong&gt;any computer CPU that existed anywhere on the planet 10 years ago&lt;&#x2F;strong&gt;) so that it can render some
emojis and prompt you to take an &quot;On-Call Selfie&quot;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-selfie-1&quot;&gt;&lt;a href=&quot;#fn-selfie&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;My ideal on-call device would look something like the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Small and lightweight&lt;&#x2F;li&gt;
&lt;li&gt;Extremely long battery life (imagine... weeks without recharging)&lt;&#x2F;li&gt;
&lt;li&gt;Only capable of receiving emergency notifications from PagerDuty so I can leave it on, unmuted at all times&lt;&#x2F;li&gt;
&lt;li&gt;On a network with great distance and building penetration&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-5G-1&quot;&gt;&lt;a href=&quot;#fn-5G&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Maybe a one or two line black-and-white display just long enough to print out messages like &lt;code&gt;CRITICAL: web1sf - 4 packets transmitted, 0 received, 100% packet loss&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Maybe two buttons so you could acknowledge or escalate incidents — but maybe not; I&#x27;m probably going to grab a laptop or bigger device to actually do the investigation&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-onedevice-1&quot;&gt;&lt;a href=&quot;#fn-onedevice&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Do you know what I&#x27;ve just described, you bunch of ingrates? You damned dirty apes? A bona fide &lt;strong&gt;two-way pager&lt;&#x2F;strong&gt;. We had the technology! We had
built the perfect system! And we destroyed it! In our frivolous pursuit of only carrying one device, in our employers&#x27;
endless pursuit of simpler procurement, we got rid of a system where your employer provides a simple-to-use
single-function device to you, the employee, and replaced it with a system where you bring your own massively
over-complicated device, pay your own connectivity bills, and then miss pages at 3 in the morning because you got too
many goddamn Farmville notifications and your battery died.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2019-ode-to-a-pager&amp;#x2F;2019-06-13-pota.jpg&quot; alt=&quot;You blew it up! You maniacs!&quot;  &#x2F;&gt;
  
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-csdept&quot;&gt;
&lt;p&gt;If I recall correctly, we had a physical pager and it went off exactly twice in the two years I was on the
rotation. &lt;a href=&quot;#fr-csdept-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-epdouble&quot;&gt;
&lt;p&gt;Every on-call since Mudd has followed the best practice of having two people on-call at all times (Primary
and Secondary) to minimize missed pages, so a two-person rotation means you are literally on-call 24 hours a day, 7
days a week, 366 days a year on leap years. &lt;a href=&quot;#fr-epdouble-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-hundreds&quot;&gt;
&lt;p&gt;Hundreds might be conservative; I&#x27;ve never kept track but I&#x27;d say no less than once a month and no more
than 20 times a month for the last 10 years, which gives us between 120 and 2000 wake-ups. &lt;a href=&quot;#fr-hundreds-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-nodevice&quot;&gt;
&lt;p&gt;I don&#x27;t really want to get into this side of things, but the other big issue is that this thing in your
pocket is &lt;strong&gt;your device&lt;&#x2F;strong&gt; and it absolutely blows that the company who&#x27;s already making you wake up at 3 in the
morning is also making you use your personal property to do it. And if you&#x27;ve made the personal choice not to have a
cell phone? Good luck getting a job in this industry, buddy. &lt;a href=&quot;#fr-nodevice-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-ios&quot;&gt;
&lt;p&gt;From a security perspective, I dearly hope it either runs iOS or stock Android on a Pixel. Friends don&#x27;t let
friends use OEM-crapified Android. &lt;a href=&quot;#fr-ios-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-dnd&quot;&gt;
&lt;p&gt;Yes, I know, you can bypass Do Not Disturb for voice phone calls from specific numbers on iOS, and you can
bypass it for more kinds of alerts on Android. I have never found the bypasses to be reliable. &lt;a href=&quot;#fr-dnd-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-selfie&quot;&gt;
&lt;p&gt;Seriously: the on-call selfie thing was the most &lt;strong&gt;tone deaf&lt;&#x2F;strong&gt; crap I&#x27;ve ever seen from PagerDuty. When I get
woken up at 3 in the morning because some other team broke something, I most definitely do &lt;strong&gt;not&lt;&#x2F;strong&gt; want to take my
picture and tweet it. &lt;a href=&quot;#fr-selfie-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-5G&quot;&gt;
&lt;p&gt;How many industry outages do you think 5G&#x2F;mmWave will cause from people losing their cell service because it got
foggy? &lt;a href=&quot;#fr-5G-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-onedevice&quot;&gt;
&lt;p&gt;That&#x27;s right, I already have to have a second device with me all the time anyway because there are very
few issues severe enough to page me but simple enough to fix from a 5&quot; cell phone screen. &lt;a href=&quot;#fr-onedevice-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Ditching Gmail After 15 Years</title>
          <pubDate>Sat, 18 May 2019 23:03:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/ditching-gmail/</link>
          <guid>https://www.roguelazer.com/blog/ditching-gmail/</guid>
          <description xml:base="https://www.roguelazer.com/blog/ditching-gmail/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;ditching-gmail&amp;#x2F;gmail.svg&quot; alt=&quot;Gmail Logo&quot; class=&quot;rfloat smallimg&quot;  &#x2F;&gt;
  
&lt;p&gt;Everyone who even casually follows the tech industry knows, intellectually, that Google builds an enormous dystopian profile of everything you do in order to sell ads&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-adseverywhere-1&quot;&gt;&lt;a href=&quot;#fn-adseverywhere&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
But I think there&#x27;s a difference between knowing that Google Analytics is a shameless back door to do cross-site tracking and actually coming face-to-face with your own profile. Yesterday, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cnbc.com&#x2F;2019&#x2F;05&#x2F;17&#x2F;google-gmail-tracks-purchase-history-how-to-delete-it.html&quot;&gt;CNBC featured a
story&lt;&#x2F;a&gt; about a new
Google UI which shows you a list of every purchase that you&#x27;ve made in the last few years:
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;myaccount.google.com&#x2F;purchases&quot;&gt;https:&#x2F;&#x2F;myaccount.google.com&#x2F;purchases&lt;&#x2F;a&gt;. For me, wide variety of commercial activity — every
purchase I&#x27;ve ever made at a store that uses Square, every Amazon purchase, every Apple purchase, every movie ticket.
I see gifts for my wife, work purchases, and even food for my rabbits. And on almost every item is a note: &lt;q&gt;This
purchase was found in your Gmail.&lt;&#x2F;q&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s been clear for a long time that Google as a company no longer considers their users to be much more than
piñatas full of delicious data; for me, seeing that list of the last 7+ years of every purchase I&#x27;ve made
electronically
is the last straw. As of today, I&#x27;m taking my personal domain (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&quot;&gt;roguelazer.com&lt;&#x2F;a&gt;) off of
the grandfathered free-tier Gsuite&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-gsuite-1&quot;&gt;&lt;a href=&quot;#fn-gsuite&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; mail hosting that it&#x27;s had for the last 10+ years and moving it to
a host that seems less inclined to aggressively mine it for data, and moving as many accounts as possible to no
longer depend on my gmail.com account. I opened my Gmail account 15 years ago&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-gmaildate-1&quot;&gt;&lt;a href=&quot;#fn-gmaildate&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, so I guess it&#x27;s time to move on.&lt;&#x2F;p&gt;
&lt;p&gt;I went through the current crop of mail hosts, and evaluated them against the following conditions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I don&#x27;t want to self-host; I have no interest in actually maintaining (and monitoring and backing up) an SMTP and IMAP server. I get enough of my day job at my day job.&lt;&#x2F;li&gt;
&lt;li&gt;I prefer to use regular IMAP and SMTP protocols and mail clients (e.g., &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;nix-tip-of-the-time-period-mutt&#x2F;&quot;&gt;mutt&lt;&#x2F;a&gt;); anything that requires that you use the provider&#x27;s custom application is right out.&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;d like a hosting provider who&#x27;s been around for a few years and seems unlikely to vanish off the face of the
Earth tomorrow&lt;&#x2F;li&gt;
&lt;li&gt;Decent performance from the US&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;After doing some research, I decided that &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.fastmail.com&quot;&gt;Fastmail&lt;&#x2F;a&gt; was the least-worst
option&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-pm-1&quot;&gt;&lt;a href=&quot;#fn-pm&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.  So I&#x27;ve migrated all my mail out of Gsuite onto Fastmail, re-pointed my MX records, and configured
Gsuite to route any mails that still trickle into it over to Fastmail. Some time tomorrow when all the TTLs have
expired, I will be shutting down my Gsuite account&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-archive-1&quot;&gt;&lt;a href=&quot;#fn-archive&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to have a chance in hell that our grandkids won&#x27;t live in a surveillance dystopia, search with
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;duckduckgo.com&#x2F;&quot;&gt;DuckDuckGo&lt;&#x2F;a&gt;, close your Gmail account, switch to
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mozilla.com&#x2F;firefox&quot;&gt;Firefox&lt;&#x2F;a&gt;, and remind your elected officials that the world would be a better place without Big Data.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-adseverywhere&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.reuters.com&#x2F;article&#x2F;us-alphabet-google-advertising-idUSKCN1SK1YK&quot;&gt;Ads... Ads
Everywhere!&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-adseverywhere-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-gsuite&quot;&gt;
&lt;p&gt;&quot;Google Apps for Your Domain&quot; when I signed up for it in 2007... &lt;a href=&quot;#fr-gsuite-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-gmaildate&quot;&gt;
&lt;p&gt;August 12, 2004. What a different time. &lt;a href=&quot;#fr-gmaildate-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-pm&quot;&gt;
&lt;p&gt;Yes, I&#x27;ve already had &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;protonmail.com&#x2F;&quot;&gt;Protonmail&lt;&#x2F;a&gt; recommended to me by a half-dozen people. I&#x27;ve
tried it, but it misses half my criteria and at this point I think anyone pushing a commercial VPN as a product
for any reason is probably a snake-oil salesman. &lt;a href=&quot;#fr-pm-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-archive&quot;&gt;
&lt;p&gt;Don&#x27;t worry, I used the helpful &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;takeout.google.com&#x2F;u&#x2F;1&#x2F;settings&#x2F;takeout&quot;&gt;Google Takeout&lt;&#x2F;a&gt; tool to dump out an &lt;code&gt;.mbox&lt;&#x2F;code&gt; of my mail for historical purposes. &lt;a href=&quot;#fr-archive-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>GPG Key Transition</title>
          <pubDate>Sat, 27 Apr 2019 10:35:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/key-transition/</link>
          <guid>https://www.roguelazer.com/blog/key-transition/</guid>
          <description xml:base="https://www.roguelazer.com/blog/key-transition/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;key-transition&amp;#x2F;GnuPG-Logo.svg&quot; alt=&quot;GnuPG Logo&quot; class=&quot;lfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;My current PGP&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.gnupg.org&#x2F;&quot;&gt;GnuPG&lt;&#x2F;a&gt; key is expiring, so I&#x27;ve rolled a new one. The ID of the new key
is &lt;code&gt;0x3C7775DD37811E62&lt;&#x2F;code&gt; (full fingerprint:
&lt;code&gt;1ED5 E5A3 01C3 D109 9040  2289 3C77 75DD 3781 1E62&lt;&#x2F;code&gt;)
and it should be in your favorite keyservers,
cross-signed by my old key. You can also find it at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.gpg&quot;&gt;https:&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.gpg&lt;&#x2F;a&gt;.
It has also been attached to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;keybase.io&#x2F;roguelazer&quot;&gt;my keybase.io account&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&quot;&gt;my Github
profile&lt;&#x2F;a&gt;. My previous key (&lt;strike&gt;&lt;code&gt;0xAEE8F2454A41B87D&lt;&#x2F;code&gt;&lt;&#x2F;strike&gt;) has not been revoked
and has not been compromised, but you should still stop using it if possible. The new key is a 4096-bit RSA
key with SHA-2 digest signatures — I&#x27;m not quite bold enough to switch to ECC for a long-lived key yet.&lt;&#x2F;p&gt;
&lt;p&gt;My signed transition document is below, and can also be found at
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;key-transition&#x2F;2019-04-27-key-transition-statement.txt.asc&quot;&gt;2019-04-27-key-transition-statement.txt.asc&lt;&#x2F;a&gt; if
you prefer to download it directly.&lt;&#x2F;p&gt;
&lt;p&gt;Additionally, I have generated a separately-signed key with ID &lt;code&gt;0x233E5EAF0EC3ABA9&lt;&#x2F;code&gt; (full fingerprint:
&lt;code&gt;14E8 9660 188D BC9B 2C17  67AA 233E 5EAF 0EC3 ABA9&lt;&#x2F;code&gt;). This key should not be used for communication,
but will only be used to sign VCS commits&#x2F;tags&#x2F;&amp;amp;c (in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;&quot;&gt;Git&lt;&#x2F;a&gt; and perhaps in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pijul.org&#x2F;&quot;&gt;Pijul&lt;&#x2F;a&gt;). It&#x27;s going to be on my &lt;em&gt;[managed]&lt;&#x2F;em&gt; work computer, so treat it with a grain
of salt.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Wildflowers</title>
          <pubDate>Sun, 21 Apr 2019 12:50:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/wildflowers/</link>
          <guid>https://www.roguelazer.com/blog/wildflowers/</guid>
          <description xml:base="https://www.roguelazer.com/blog/wildflowers/">&lt;p&gt;I went up yesterday with my wife&#x27;s family to hike around on some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sonomalandtrust.org&#x2F;&quot;&gt;Sonoma Land Trust&lt;&#x2F;a&gt; property up in the North Bay and brought &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getolympus.com&#x2F;us&#x2F;en&#x2F;e-m5-mark-ii.html&quot;&gt;my camera&lt;&#x2F;a&gt;. It&#x27;s amazing to see the hills green and growing after so many years of drought! You can see a smattering of photos in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;albums&#x2F;72157691017769503&quot;&gt;this flickr album&lt;&#x2F;a&gt;, but here are some of my favorites:&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery &quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;47608584412&amp;#x2F;in&amp;#x2F;dateposted-ff&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;47608584412_4318f17886_k.jpg&quot; alt=&quot;hillside panoroma&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;46745769995&amp;#x2F;in&amp;#x2F;album-72157691017769503&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;46745769995_401da9e72d_k.jpg&quot; alt=&quot;hillside with flowers&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;40694916133&amp;#x2F;in&amp;#x2F;dateposted-ff&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;40694916133_168752657d_k.jpg&quot; alt=&quot;green hillside&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;40694917263&amp;#x2F;in&amp;#x2F;album-72157691017769503&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;40694917263_93db90ea51_k.jpg&quot; alt=&quot;blue flower close-up&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;47608552452&amp;#x2F;in&amp;#x2F;album-72157691017769503&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;47608552452_f930267326_k.jpg&quot; alt=&quot;pink flowers surrounded by blue&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;47608554742&amp;#x2F;in&amp;#x2F;album-72157691017769503&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;47608554742_937199da15_k.jpg&quot; alt=&quot;california poppies&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.flickr.com&amp;#x2F;photos&amp;#x2F;roguelazer&amp;#x2F;46745870475&amp;#x2F;in&amp;#x2F;album-72157691017769503&amp;#x2F;&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;live.staticflickr.com&amp;#x2F;65535&amp;#x2F;46745870475_873f3c6436_k.jpg&quot; alt=&quot;eva, her mom, and her aunt in front of flowers&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;If you&#x27;re in Northern California and are physically-able, you should try to get out and enjoy this; it&#x27;s gorgeous!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Vim Setup: 2019</title>
          <pubDate>Tue, 16 Apr 2019 19:46:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2019-vim-setup/</link>
          <guid>https://www.roguelazer.com/blog/2019-vim-setup/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2019-vim-setup/">&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2019-vim-setup&amp;#x2F;neovim.png&quot; alt=&quot;Neovim logo&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  







  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;2019-vim-setup&amp;#x2F;vim.png&quot; alt=&quot;Vim logo&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s been a little while since I posted about my editor configuration, and I thought I might post what I&#x27;m using
now. I guess the most notable change is that (after much prodding from my coworker &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DorianGray&quot;&gt;Drew
Ditthardt&lt;&#x2F;a&gt;) I&#x27;ve switched from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.vim.org&#x2F;&quot;&gt;Vim&lt;&#x2F;a&gt; to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;&quot;&gt;Neovim&lt;&#x2F;a&gt;. Neovim is a vim-compatible editor
written in C and Lua (as opposed to Vim, which is written in C, Vimscript, and prayers). I upgraded to Vim 8 last
year and have had a few too many segmentation faults in the editor, so I decided to switch to something where more
functionality was implemented in a memory-safe language.  So far, Neovim has been pretty good to me, although the
new process model means that it&#x27;s pretty hard to write functions which invoke an external process which takes
interactive input from a user.&lt;&#x2F;p&gt;
&lt;p&gt;As is probably expected for this sort of thing, here&#x27;s a couple of screenshots; the first is of VimR, and the second is
from NeoVim in &lt;code&gt;Terminal.app&lt;&#x2F;code&gt;, both editing files from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;EasyPost&#x2F;rust-mysql-binlog&quot;&gt;rust-mysql-binlog&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;

&lt;div class=&quot;gallery gallery-noshadow&quot;&gt;
  &lt;ul&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2019-vim-setup&amp;#x2F;2019-04-16-vimr.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;2019-04-16-vimr.af1a19a941158e9d.png&quot; alt=&quot;VimR editing a file&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    &lt;li&gt;&lt;a href=&quot;&amp;#x2F;blog&amp;#x2F;2019-vim-setup&amp;#x2F;2019-04-16-neovim-terminal.png&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;processed_images&amp;#x2F;2019-04-16-neovim-terminal.4f17189c0f9a14e2.png&quot; alt=&quot;Neovim editing a file&quot;  &#x2F;&gt;&lt;&#x2F;a&gt;
    &lt;&#x2F;li&gt;
    
  &lt;&#x2F;ul&gt;
&lt;&#x2F;div&gt;</description>
      </item>
      <item>
          <title>Site Updates</title>
          <pubDate>Sat, 06 Apr 2019 16:42:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/site-updates/</link>
          <guid>https://www.roguelazer.com/blog/site-updates/</guid>
          <description xml:base="https://www.roguelazer.com/blog/site-updates/">&lt;p&gt;Some minor site updates over the last few days:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Comments are now powered by &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;commento.io&#x2F;&quot;&gt;Commento&lt;&#x2F;a&gt; instead of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;disqus.com&#x2F;&quot;&gt;Disqus&lt;&#x2F;a&gt;. This
significantly reduces page load size on pages with comments.&lt;&#x2F;li&gt;
&lt;li&gt;Icons (social media, etc) are all now 2x resolution for modern retina screens.&lt;&#x2F;li&gt;
&lt;li&gt;Site-specific search is now powered by DuckDuckGo instead of Google. No longer loads an iframe, significantly
faster site-loads, and better privacy to boot.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;blog&quot;&gt;Archives&lt;&#x2F;a&gt; page works again. Did this ever work?&lt;&#x2F;li&gt;
&lt;li&gt;Page is back to being fluid instead of fixed-width.&lt;&#x2F;li&gt;
&lt;li&gt;Improved CSS across the board, particularly on mobile devices.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;code&#x2F;&quot;&gt;Code&lt;&#x2F;a&gt; page is updated.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also managed to backport in some blog posts from the 2004-2007 era that were on the Internet Archive. For
posterity!&lt;&#x2F;p&gt;
&lt;p&gt;Feel free to leave a comment or e-mail me if you notice any bugs.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Firefox Setup: 2019</title>
          <pubDate>Fri, 05 Apr 2019 11:16:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/firefox/</link>
          <guid>https://www.roguelazer.com/blog/firefox/</guid>
          <description xml:base="https://www.roguelazer.com/blog/firefox/">&lt;p&gt;Here&#x27;s a quick post on how I use and configure Firefox on my Macs. The last time I posted
about any of this was &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;firefox-4-and-vimperator-3&#x2F;&quot;&gt;in 2011&lt;&#x2F;a&gt;, and things have
changed a fair bit since then. First, a screenshot (from my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;2019-imac-first-impressions&#x2F;&quot;&gt;new iMac&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;firefox&amp;#x2F;firefox.png&quot; alt=&quot;screenshot of firefox&quot;  &#x2F;&gt;
  
&lt;p&gt;Key extensions for this setup:&lt;&#x2F;p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;vim-vixen&#x2F;&quot;&gt;Vim Vixen&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;Vim keybindings for Firefox. Not quite as good as Vimperator, but works with modern Firefox, and getting better
all the time. The only thing I really miss is macro recording, which I used &lt;strong&gt;all the time&lt;&#x2F;strong&gt; in Vimperator.&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;tree-style-tab&#x2F;&quot;&gt;Tree-Style Tabs&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;Our monitors are widescreen; why would you try to stack tabs at the top of the window, taking up vertical space? Tree-style tabs lets you have a tab-hierarchy in a space-friendly manner.&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;ublock-origin&#x2F;&quot;&gt;uBlock Origin&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;I tried to go without an ad-blocker for a few years, to support independent businesses, but it&#x27;s just not possible. Loading even relatively trustworthy sites (especially, for some reason, webcomics lately) is just a flood of malvertising now. uBlock Origin is the most popular ad-blocker these days. ¯\_(ツ)_&#x2F;¯&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;multi-account-containers&#x2F;&quot;&gt;Multi-Account Containers&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;This little extension makes it possible for me to have work tabs alongside personal tabs without corrupting all of my history all of the time. In particular, it lets me map sites (at the domain level) to automatically open in one tab container or another. I wish this supported wildcard domains so I could point &lt;em&gt;every&lt;&#x2F;em&gt; work domain at a container, but it&#x27;s a start&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;new-container-tab&#x2F;&quot;&gt;New Container Tab&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;Adds a keybinding to open a new tab in the same container as the current tab (as opposed to the Firefox default, which opens the &quot;Default&quot;, untagged container when you press &lt;kbd&gt;Cmd-t&lt;&#x2F;kbd&gt;&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;en-US&#x2F;firefox&#x2F;addon&#x2F;mac-osx-light&#x2F;&quot;&gt;Mac OSX Light&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;This just makes the toolbar&#x2F;titlebar color match the rest of macOS instead of being slightly off. It only works
in &quot;Light Mode&quot;.&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;1password.com&#x2F;&quot;&gt;1Password&lt;&#x2F;a&gt;&lt;&#x2F;dt&gt;
&lt;dd&gt;Don&#x27;t leave home without it.&lt;&#x2F;dd&gt;
&lt;&#x2F;dl&gt;
&lt;p&gt;One thing you might&#x27;ve noticed from the screenshot is that I&#x27;ve hidden tabs from the titlebar (since they&#x27;re in the sidebar), but I don&#x27;t have a big ugly blank space up there. That trick is actually the driving impetus for this blog post, since every other post on how to do that is broken as of Firefox 64. If you want the exact same appearance I have, just create a &lt;code&gt;chrome&#x2F;userChrome.css&lt;&#x2F;code&gt; file inside your Firefox profile directory&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-profiledir-1&quot;&gt;&lt;a href=&quot;#fn-profiledir&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; with the following contents:&lt;&#x2F;p&gt;
&lt;div class=&quot;note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; This was updated on &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;updated-firefox-userchrome&#x2F;&quot;&gt;December 1, 2024&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #9D7CD8);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;namespace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; url&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;http:&#x2F;&#x2F;www.mozilla.org&#x2F;keymaster&#x2F;gatekeeper&#x2F;there.is.only.xul&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide the native tabs &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;TabsToolbar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;toolbar-items&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	visibility&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; collapse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; fix the titlebar color and padding &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;browser-titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	background-color&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #C0CAF5);&quot;&gt;--toolbar-bgcolor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	justify-content&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; space-between&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	padding&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #F7768E);&quot;&gt;px&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;	--inactive-titlebar-opacity&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide the sidebar header so Tree-Style Tabs looks native &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;sidebar-header&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	visibility&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; collapse&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; Hide the border under where native tabs would be, to get the &amp;quot;unified toolbar&amp;quot; appearance of modern macOS &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;navigator-toolbox&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;	--tabs-border-color&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; transparent&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; the coloration of the titlebar to look like a toolbar &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	background&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #0DB9D7);&quot;&gt; var&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #C0CAF5);&quot;&gt;--toolbar-bgcolor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9ABDF5);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt; hide a single stray vertical line that creeps in if you have tabs hidden &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#C2C3C5, #51597D);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #89DDFF);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #FC7B7B);&quot;&gt;titlebar&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;titlebar-spacer&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #BB9AF7);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;pre-tabs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;	border-inline-end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You&#x27;ll need to restart firefox for it to take effect.&lt;&#x2F;p&gt;
&lt;p&gt;NOTE: You may need to set the &lt;code&gt;toolkit.legacyUserProfileCustomizations.stylesheets&lt;&#x2F;code&gt; to &lt;code&gt;true&lt;&#x2F;code&gt; in &lt;code&gt;about:config&lt;&#x2F;code&gt; to get Firefox
to load &lt;code&gt;userChrome.css&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-profiledir&quot;&gt;
&lt;p&gt;&lt;code&gt;~&#x2F;Library&#x2F;Application Support&#x2F;Firefox&#x2F;Profiles&#x2F;*&lt;&#x2F;code&gt; on macOS; probably somewhere similar on other platforms. &lt;a href=&quot;#fr-profiledir-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>2019 iMac First Impressions</title>
          <pubDate>Tue, 26 Mar 2019 09:37:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/2019-imac-first-impressions/</link>
          <guid>https://www.roguelazer.com/blog/2019-imac-first-impressions/</guid>
          <description xml:base="https://www.roguelazer.com/blog/2019-imac-first-impressions/">&lt;p&gt;For the first time since early 2010, I have a desktop computer again!&lt;&#x2F;p&gt;






  &lt;img src=&quot;&amp;#x2F;computers&amp;#x2F;caveofbirds_2.jpg&quot; alt=&quot;CaveOfBirds&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;It&#x27;s a 2019 5K Retina iMac with an Intel Core i5-9600K (9th Generation, 6 physical cores), 16GB of RAM, AMD Radeon
Pro 580X, and a 1TB SSD. Geekbench isn&#x27;t exactly scientific, but it reports this computer as &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;browser.geekbench.com&#x2F;v4&#x2F;cpu&#x2F;compare&#x2F;12597587?baseline=12588849&quot;&gt;50% faster single-core,
150% faster multi-core&lt;&#x2F;a&gt; than the computer it&#x27;s replacing.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Life Update: Moved</title>
          <pubDate>Sun, 11 Nov 2018 22:30:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/moved/</link>
          <guid>https://www.roguelazer.com/blog/moved/</guid>
          <description xml:base="https://www.roguelazer.com/blog/moved/">&lt;p&gt;Hello infrequent readers: here&#x27;s a piece of good news for once: as of October 27th, I&#x27;ve moved! &lt;code&gt;$SPOUSE&lt;&#x2F;code&gt; and I now
live in the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Elmwood,_Berkeley,_California&quot;&gt;Elmwood neighborhood&lt;&#x2F;a&gt; of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cityofberkeley.info&#x2F;Home.aspx&quot;&gt;Berkeley,
California&lt;&#x2F;a&gt; in a nice little two-bedroom one-and-a-half-bedroom
single-family residence. It&#x27;s a little surreal; even though where we live has a pretty nice mixed-use vibe (there&#x27;s
an apartment building around the corner, a bunch of restaurants nearby, and a Whole Foods only a few blocks away),
it&#x27;s still practically rural compared to the apartment in the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tendernob&quot;&gt;Tendernob&lt;&#x2F;a&gt;
that I&#x27;ve lived in for the last eight years.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Mastodon</title>
          <pubDate>Sun, 23 Sep 2018 23:48:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/mastodon/</link>
          <guid>https://www.roguelazer.com/blog/mastodon/</guid>
          <description xml:base="https://www.roguelazer.com/blog/mastodon/">&lt;p&gt;I don&#x27;t know if you&#x27;re aware of this, but &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.twitter.com&quot;&gt;Twitter&lt;&#x2F;a&gt; hasn&#x27;t been a very good
company in the last few years. Between the aiding and abetting of white supremacists,
the continued hosting of our obnoxious orange tweeter-in-chief, and the ongoing
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;apps-of-a-feather.com&quot;&gt;user-hostile platform changes&lt;&#x2F;a&gt;, it&#x27;s just not
as fun of a place as it was when I joined on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Roguelazer&#x2F;statuses&#x2F;415860972&quot;&gt;November 14,
2007&lt;&#x2F;a&gt;. So, uh, I&#x27;m not there any more.&lt;&#x2F;p&gt;
&lt;p&gt;No, I didn&#x27;t delete my Twitter account. However, I have started trying to use a new
microblogging system in its stead: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;joinmastodon.org&quot;&gt;Mastodon&lt;&#x2F;a&gt;. Mastodon is an
interesting idea: it&#x27;s a federated social network&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-fediverse-1&quot;&gt;&lt;a href=&quot;#fn-fediverse&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which means it&#x27;s made of a bunch of
different copies run by different people but set up so that you can follow people and
read their &lt;q&gt;toots&lt;&#x2F;q&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-toots-1&quot;&gt;&lt;a href=&quot;#fn-toots&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; no matter which &lt;em&gt;instance&lt;&#x2F;em&gt; they happen to be on. I&#x27;m on
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.technology&quot;&gt;mastodon.technology&lt;&#x2F;a&gt;, which is generally themed around
mainstream tech stuff, but I follow people at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fosstodon.org&quot;&gt;fosstodon&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cybre.space&quot;&gt;cybre.space&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&quot;&gt;mastodon.social&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-social-1&quot;&gt;&lt;a href=&quot;#fn-social&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.
There are a couple of outstanding things about mastodon that I&#x27;d like to point out:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;local timeline&lt;&#x2F;strong&gt; is a timeline that shows every toot marked as &quot;public&quot; from people on your instance
If you are on an instance that is relevant to your interests and which isn&#x27;t too big, this can be a great
way to get exposed to new people and new ideas. Mine has a few too many bitcoin enthusiasts on it, but is generally
fun!&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-federatedtimeline-1&quot;&gt;&lt;a href=&quot;#fn-federatedtimeline&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Instances have &lt;strong&gt;rules&lt;&#x2F;strong&gt; and a &lt;strong&gt;code of conduct&lt;&#x2F;strong&gt;. Mastodon.technology (like many other instances) actively blocks
hate speech and white supremacists. How novel!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;You aren&#x27;t the product!&lt;&#x2F;strong&gt; Most instances are either run by volunteers or funded by donations (mastodon.technology
is funded by a Patreon), there are no ads, there&#x27;s no garbage algorithmic timeline. It&#x27;s just a chronological list
of short mixed-media posts from people you choose to follow. Again... novel...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Of course, mastodon isn&#x27;t the first technology product to try to move into Twitter&#x27;s space. I also used the bizarrely-
named &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;App.net&quot;&gt;App.net&lt;&#x2F;a&gt; during its brief existence between mid-2013 and mid-2014; it was okay. There was also &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;identi.ca&quot;&gt;identi.ca&lt;&#x2F;a&gt; in
2008 and the ever-popular &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Google_Buzz&quot;&gt;Google Buzz&lt;&#x2F;a&gt;, which I think I used when I was a Google employee 🤷‍♂️. The real
advantage to Mastodon&#x27;s design is that since it&#x27;s open-source software and is federated, it&#x27;s moderately harder for a
single company to tank the platform. Of course, social networks are only useful as long as people you want to interact
with use them, so it remains to be seen how well-populated Mastodon will be. If you&#x27;re reading this, maybe you&#x27;re
someone who would be fun to interact with on Mastodon and you should make an account and follow me? Hm? If you still
want more information, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;motherboard.vice.com&#x2F;en_us&#x2F;article&#x2F;783akg&#x2F;mastodon-is-like-twitter-without-nazis-so-why-are-we-not-using-it&quot;&gt;this Motherboard article&lt;&#x2F;a&gt;
is pretty good.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-jeong-1&quot;&gt;&lt;a href=&quot;#fn-jeong&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The biggest weakness (for me) for Mastodon so far is a dearth of good native clients. I&#x27;m currently using
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;itunes.apple.com&#x2F;us&#x2F;app&#x2F;amaroq-for-mastodon&#x2F;id1214116200&quot;&gt;Amaroq&lt;&#x2F;a&gt; on my iPhone, which is feature complete but
doesn&#x27;t feel like a very good native iOS app, and beta testing &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@tuskapp&quot;&gt;Tusk&lt;&#x2F;a&gt;, which feels
like a native iOS app but is missing lots of features. There&#x27;s nothing worth using yet on iPads or Macs. However! There
is light at the end of the tunnel — &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@bigzaphod&quot;&gt;Sean Huber&lt;&#x2F;a&gt; of The
Iconfactory (makers of Twitterrific, the best iOS&#x2F;macOS Twitter client) appears to be working on a top-secret Mastodon
client named &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@bigzaphod&#x2F;100736718940930533&quot;&gt;Fantastodon&lt;&#x2F;a&gt;. I&#x27;m excited.&lt;&#x2F;p&gt;
&lt;p&gt;So, yeah. If you @-me on Twitter, I probably won&#x27;t respond&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-whynot-1&quot;&gt;&lt;a href=&quot;#fn-whynot&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, but you should totally join me on Mastodon and
follow me as &lt;tt&gt;@roguelazer@mastodon.technology&lt;&#x2F;tt&gt;. Awoo!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-fediverse&quot;&gt;
&lt;p&gt;Mastodon folks call each Mastodon server an &lt;strong&gt;instance&lt;&#x2F;strong&gt; and the collective of all of them the
&lt;strong&gt;fediverse&lt;&#x2F;strong&gt;. Technically, since the protocol is open, the fediverse also contains some other servers running totally
unrelated packages such as GNU Social and Diaspora. &lt;a href=&quot;#fr-fediverse-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-toots&quot;&gt;
&lt;p&gt;No, I don&#x27;t really love &lt;q&gt;toot&lt;&#x2F;q&gt; as an un-trademarked substitute for &lt;q&gt;tweet&lt;&#x2F;q&gt; (especially since the
bird association and the word &lt;q&gt;tweet&lt;&#x2F;q&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;furbo.org&#x2F;2013&#x2F;06&#x2F;28&#x2F;the-origin-of-tweet&#x2F;&quot;&gt;both came from third-party Twitter
devs&lt;&#x2F;a&gt;). Life goes on. &lt;a href=&quot;#fr-toots-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-social&quot;&gt;
&lt;p&gt;Mastodon.social is kind of the default instance for people who don&#x27;t want to invest in picking a better
one. You should pick a better one. &lt;a href=&quot;#fr-social-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-federatedtimeline&quot;&gt;
&lt;p&gt;There&#x27;s also something called the &lt;strong&gt;federated timeline&lt;&#x2F;strong&gt; which is basically the set-union of the
timelines of everybody followed by anybody on your instance. Unless you are in a tiny and extremely focused instance,
it&#x27;s far too noisy to follow. &lt;a href=&quot;#fr-federatedtimeline-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-jeong&quot;&gt;
&lt;p&gt;I didn&#x27;t realize until I was writing this post that the Motherboard article was by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sarahjeong.net&quot;&gt;Sarah
Jeong&lt;&#x2F;a&gt;, whose reporting in general is excellent and whose courtroom reporting for the ridiculous &lt;em&gt;Oracle v Google&lt;&#x2F;em&gt; Java trial was amazing. Another point for that article! &lt;a href=&quot;#fr-jeong-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-whynot&quot;&gt;
&lt;p&gt;at least in part because I no longer receive notifications for Twitter because of their boneheaded API
changes &lt;a href=&quot;#fr-whynot-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Election Spam, 2018 ed., Volume 1</title>
          <pubDate>Mon, 28 May 2018 17:30:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/primary-election/</link>
          <guid>https://www.roguelazer.com/blog/primary-election/</guid>
          <description xml:base="https://www.roguelazer.com/blog/primary-election/">&lt;p&gt;Hello intermittent readers, and welcome to the latest edition in my series on electoral advertising. As you may or may
not know, June 5th is California&#x27;s primary election for 2018. We&#x27;ve got a contentious list of ballot measures, as well
as a variety of local, state, and federal offices up for election, which means it&#x27;s time for a bunch of special interest
groups to spend money sending my family high-gloss advertising pamphlets.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;primary-election&amp;#x2F;election-spam.jpg&quot; alt=&quot;2018 election spam&quot;  &#x2F;&gt;
  
&lt;p&gt;On the ballot this time around:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Governor&lt;&#x2F;li&gt;
&lt;li&gt;Lt. Governor&lt;&#x2F;li&gt;
&lt;li&gt;Secretary of State&lt;&#x2F;li&gt;
&lt;li&gt;State Controller&lt;&#x2F;li&gt;
&lt;li&gt;Treasurer&lt;&#x2F;li&gt;
&lt;li&gt;Attorney General&lt;&#x2F;li&gt;
&lt;li&gt;Insurance Commissioner&lt;&#x2F;li&gt;
&lt;li&gt;Board of Equalization&lt;&#x2F;li&gt;
&lt;li&gt;US Senator&lt;&#x2F;li&gt;
&lt;li&gt;US Representative&lt;&#x2F;li&gt;
&lt;li&gt;State Assembly&lt;&#x2F;li&gt;
&lt;li&gt;Superior Court Judge (x4)&lt;&#x2F;li&gt;
&lt;li&gt;Superintendent of Public Instruction&lt;&#x2F;li&gt;
&lt;li&gt;Mayor&lt;&#x2F;li&gt;
&lt;li&gt;5 State Measures&lt;&#x2F;li&gt;
&lt;li&gt;1 Regional Measure&lt;&#x2F;li&gt;
&lt;li&gt;9 City Measures&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;After the fold, let&#x27;s see who&#x27;s spending their advertising budget in densest San Francisco.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Amusing Siri Date Localization Bug</title>
          <pubDate>Mon, 09 Oct 2017 10:45:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/siri-date-localization/</link>
          <guid>https://www.roguelazer.com/blog/siri-date-localization/</guid>
          <description xml:base="https://www.roguelazer.com/blog/siri-date-localization/">&lt;p&gt;Here&#x27;s an amusing iOS 11 bug:&lt;&#x2F;p&gt;
&lt;p&gt;If an iOS device is set to the en-US locale and Siri is set to a British voice, when reading dates aloud, Siri transposes months and days. For example, given the command &lt;q&gt;Remind me Wednesday Morning to buy milk&lt;&#x2F;q&gt;, Siri responds with &lt;q&gt;OK, I added it for Wednesday at 10&#x2F;11&#x2F;17 7:00&lt;&#x2F;q&gt;. When reading this aloud, Siri reads it as &lt;q&gt;OK, I added it for Wednesday the 10th of November two thousand and seventeen at seven o&#x27;clock.&lt;&#x2F;q&gt;&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;siri-date-localization&amp;#x2F;siri-date-localization.png&quot; alt=&quot;Siri bug&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;p&gt;It seems kind of crazy to me the Apple is parsing the raw text shown on screen rather than having some kind of machine-readable tagged data. So weird!&lt;&#x2F;p&gt;
&lt;p&gt;I reported this to Apple. I guess we&#x27;ll see if it gets fixed in iOS 12.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Gsuite Phishing?</title>
          <pubDate>Wed, 20 Sep 2017 09:50:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/gsuite-trust/</link>
          <guid>https://www.roguelazer.com/blog/gsuite-trust/</guid>
          <description xml:base="https://www.roguelazer.com/blog/gsuite-trust/">&lt;p&gt;I received an e-mail today at my work address with the subject &lt;q&gt;[Feature Ideas [Customers Only]] - [Survey] The G Suite Admin Experience team wants to learn your needs around data&#x2F;resource access boundaries&lt;&#x2F;q&gt; which looked like the following:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;gsuite-trust&amp;#x2F;sketchy-email.png&quot; alt=&quot;screenshot of sketchy email&quot;  &#x2F;&gt;
  
&lt;p&gt;Quick — is this real or is this spam? What would you look for?&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Election Spam, 2016 ed., The Final Countdown</title>
          <pubDate>Mon, 07 Nov 2016 09:02:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/election-spam-2016-ed-final-countdown/</link>
          <guid>https://www.roguelazer.com/blog/election-spam-2016-ed-final-countdown/</guid>
          <description xml:base="https://www.roguelazer.com/blog/election-spam-2016-ed-final-countdown/">&lt;p&gt;As you may or may not know, today is the day before the most contentious election in recent memory. Aside from the
presidential race between a competent woman and a can of orange spray paint, there are also a host of down-ballot
candidates at the federal, state, and local levels, and, here in San Francisco, an outstanding 42 state, regional,
and city ballot propositions. &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;election-ads&#x2F;&quot;&gt;As&lt;&#x2F;a&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;more-voting-spam&#x2F;&quot;&gt;is&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;election-ads-2016-ed&#x2F;&quot;&gt;usual&lt;&#x2F;a&gt;, I&#x27;ve received a
healthy pile of &lt;strong&gt;77&lt;&#x2F;strong&gt; pieces of election spam this season; here&#x27;s my tally.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;election-spam-2016-ed-final-countdown&amp;#x2F;2016-11-07-election-ads.jpg&quot; alt=&quot;2016-11 Election Ads&quot;  &#x2F;&gt;
  
&lt;p&gt;Overall, of the 77 pieces of mail that my wife and I received in the months leading up to this election, 15 of
them were voting slates and 62 of them were either single-issue or, in many cases, dual-issue (U &amp;amp; P,
Q &amp;amp; R). As far as I can tell, only a single one of them (the state-issued party-level official endorsements)
even touched on the presidential campaign. Read on for details!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Election Ads, 2016 ed., Part 1</title>
          <pubDate>Sat, 04 Jun 2016 13:33:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/election-ads-2016-ed/</link>
          <guid>https://www.roguelazer.com/blog/election-ads-2016-ed/</guid>
          <description xml:base="https://www.roguelazer.com/blog/election-ads-2016-ed/">&lt;p&gt;Hello readers! If you&#x27;ve been living under a rock (or, really, anywhere that isn&#x27;t California), this coming
Tuesday (June 7th) is the most important primary election in California in recent memory! As befits such a momentous
occasion, I&#x27;ve received another batch of election spam!&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-lasttime-1&quot;&gt;&lt;a href=&quot;#fn-lasttime&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;election-ads-2016-ed&amp;#x2F;2016-06-04-election-ads.jpg&quot; alt=&quot;2016 Primary Election Ads&quot;  &#x2F;&gt;
  
&lt;p&gt;Surprisingly, the biggest issue in this election in San Francisco isn&#x27;t the presidential primary, but is instead the
election of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.sfdemocrats.org&#x2F;the_dccc&quot;&gt;Democratic County Central Committee&lt;&#x2F;a&gt; (the DCCC); the vast
majority of election spam that I received was either a complete slate for the DCCC, or an ad for an individual
candidate.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve decided to break down my analysis a little differently this year; I&#x27;ll be counting each piece of mail
separately for each issue it advertises for; therefore, the sums don&#x27;t necessarily add up to the total amount of
mail (&lt;strong&gt;42 pieces&lt;&#x2F;strong&gt;, if you&#x27;re curious).&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Candidate&lt;&#x2F;th&gt;&lt;th&gt;Office&lt;&#x2F;th&gt;&lt;th&gt;Pro&lt;&#x2F;th&gt;&lt;th&gt;Anti&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;berniesanders.com&#x2F;&quot;&gt;Bernie Sanders&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-onlybernie-1&quot;&gt;&lt;a href=&quot;#fn-onlybernie&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;President&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;janekim.org&quot;&gt;Jane Kim&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;CA State Senate&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.scottwiener.com&quot;&gt;Scott Weiner&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;CA State Senate&lt;&#x2F;td&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.votedavidchiu.com&quot;&gt;David Chiu&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;CA State Assembly&lt;&#x2F;td&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.hwangforjudge.com&quot;&gt;Victor Hwang&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;Judge&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;iriasforjudge.com&quot;&gt;Sigrid Irías&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;Judge&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pauldhenderson.wordpress.com&quot;&gt;Paul Henderson&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-henderson-1&quot;&gt;&lt;a href=&quot;#fn-henderson&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;Judge&lt;&#x2F;td&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.londonforsupervisor.com&#x2F;dccc&quot;&gt;London Breed&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.davidcampossf.com&quot;&gt;David Campos&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-campos-1&quot;&gt;&lt;a href=&quot;#fn-campos&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Zoe Dunning&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Josh Arce&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Wade Woods&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.aaron2015.com&quot;&gt;Aaron Peskin&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-peskin-1&quot;&gt;&lt;a href=&quot;#fn-peskin&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.jongolingerforsf.com&quot;&gt;John Golinger&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;votealysabeth.nationbuilder.com&quot;&gt;Alysabeth Alexander&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;pratima4dccc.com&quot;&gt;Pratima Gupta&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Frances Hsieh&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Cindy Wu&lt;&#x2F;td&gt;&lt;td&gt;DCCC&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Beyond that, &lt;strong&gt;15&lt;&#x2F;strong&gt; of the flyers contained complete DCCC slates, most of which were either the Reform Slate or the
Progressive Slate. A decent overview of the slates can be found at
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@understanding_sf_politics&#x2F;the-2016-san-francisco-dccc-elections-c0f6fc84537d&quot;&gt;https:&#x2F;&#x2F;medium.com&#x2F;@understanding_sf_politics&#x2F;the-2016-san-francisco-dccc-elections-c0f6fc84537d&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And, of course, we always have a bunch of ballot propositions. Here are the tallies:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Proposition&lt;&#x2F;th&gt;&lt;th&gt;Pro&lt;&#x2F;th&gt;&lt;th&gt;Anti&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco,_California,_Public_Health_and_Safety_Bond_Issue,_Proposition_A_(June_2016)&quot;&gt;SF Prop A&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco,_California,_Park,_Recreation,_and_Open_Space_Fund_Charter_Amendment,_Proposition_B_(June_2016)&quot;&gt;SF Prop B&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco,_California,_Affordable_Housing_Requirements_Charter_Amendment,_Proposition_C_(June_2016)&quot;&gt;SF Prop C&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco,_California,_Citizen_Complaints_Office_Investigations_of_Police_Shootings,_Proposition_D_(June_2016)&quot;&gt;SF Prop D&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco,_California,_Paid_Sick_Leave_Changes,_Proposition_E_(June_2016)&quot;&gt;SF Prop E&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;San_Francisco_Bay_Restoration_Authority_%E2%80%9CClean_and_Healthy_Bay%E2%80%9D_Parcel_Tax,_Measure_AA_(June_2016)&quot;&gt;SF Measure AA&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ballotpedia.org&#x2F;California_Suspension_of_Legislators_Amendment,_Proposition_50_(June_2016)&quot;&gt;CA Prop 50&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Using my estimate from last time of 35¢ per piece of mail, that&#x27;s $14.70 spent advertising for this local primary
election to my household alone. What an efficient use of money!&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, if you live in California, be sure to vote on Tuesday. I&#x27;m sure I&#x27;ll see you again for another of these tallies
in November.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-lasttime&quot;&gt;
&lt;p&gt;See also &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;election-ads&#x2F;&quot;&gt;this&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;more-voting-spam&#x2F;&quot;&gt;this&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-lasttime-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-onlybernie&quot;&gt;
&lt;p&gt;That&#x27;s right, we only got one ad for the Presidential election, and it&#x27;s for Bernie. SF! &lt;a href=&quot;#fr-onlybernie-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-henderson&quot;&gt;
&lt;p&gt;Footnote not found &lt;a href=&quot;#fr-henderson-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-campos&quot;&gt;
&lt;p&gt;At time of writing, both of David Campos&#x27;s sites are landing pages. Classy! &lt;a href=&quot;#fr-campos-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-peskin&quot;&gt;
&lt;p&gt;Another candidate whose website is down. What is this, 1995? &lt;a href=&quot;#fr-peskin-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Serialization Format Performance</title>
          <pubDate>Sun, 31 Jan 2016 11:53:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/serialization-formats/</link>
          <guid>https://www.roguelazer.com/blog/serialization-formats/</guid>
          <description xml:base="https://www.roguelazer.com/blog/serialization-formats/">&lt;p&gt;Most of the work done in actual programming jobs is taking structured data in some particular format from one system, slightly tweaking it, and sending it off to some other system. When exchanging data between different processes, it&#x27;s almost always necessary to &lt;em&gt;serialize&lt;&#x2F;em&gt; it into a series of bytes which can be sent across a dumb byte-oriented transport (such as TCP). There are hundreds upon hundreds of different serialization formats out there, but I just wanted to talk about a few of the most common that folks use with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.python.org&quot;&gt;Python&lt;&#x2F;a&gt; programming language.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>2015 Election Ads - Update</title>
          <pubDate>Sun, 01 Nov 2015 19:58:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/more-voting-spam/</link>
          <guid>https://www.roguelazer.com/blog/more-voting-spam/</guid>
          <description xml:base="https://www.roguelazer.com/blog/more-voting-spam/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;election-ads&#x2F;&quot;&gt;A couple of weeks ago&lt;&#x2F;a&gt;, I posted about the election spam that I&#x27;d gotten. I figured that since voting had begun, the flow of ads would taper off. Boy was I wrong! Here&#x27;s my current count:&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Candidate&#x2F;Issue&lt;&#x2F;th&gt;
&lt;th&gt;&amp;mdash;2015-10-18&lt;&#x2F;th&gt;
&lt;th&gt;2015-11-18&amp;mdash;2015-11-18&lt;&#x2F;th&gt;
&lt;th&gt;Total&lt;br &#x2F;&gt;(so&amp;nbsp;far)&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Yes on &lt;a href=&quot;http:&#x2F;&#x2F;aaron2015.com&quot;&gt;Aaron Peskin&lt;&#x2F;a&gt;&#x2F;No on Julie Christensen&lt;&#x2F;td&gt;
&lt;td&gt;15&lt;&#x2F;td&gt;
&lt;td&gt;13&lt;&#x2F;td&gt;
&lt;td&gt;28&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes on &lt;a href=&quot;http:&#x2F;&#x2F;www.supervisorchristensen.com&quot;&gt;Julie Christensen&lt;&#x2F;a&gt;&#x2F;No on Aaron Peskin&lt;&#x2F;td&gt;
&lt;td&gt;8&lt;&#x2F;td&gt;
&lt;td&gt;18&lt;&#x2F;td&gt;
&lt;td&gt;26&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes on &lt;a href=&quot;http:&#x2F;&#x2F;ballotpedia.org&#x2F;City_of_San_Francisco_Housing_Bond_Issue,_Proposition_A_(November_2015)&quot;&gt;Prop A&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td&gt;2&lt;&#x2F;td&gt;
&lt;td&gt;3&lt;&#x2F;td&gt;
&lt;td&gt;5&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes on &lt;a href=&quot;http:&#x2F;&#x2F;ballotpedia.org&#x2F;City_of_San_Francisco_Mission_Rock_Development_Initiative,_Proposition_D_(November_2015)&quot;&gt;Prop D&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td&gt;2&lt;&#x2F;td&gt;
&lt;td&gt;6&lt;&#x2F;td&gt;
&lt;td&gt;8&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Yes on &lt;a href=&quot;http:&#x2F;&#x2F;ballotpedia.org&#x2F;City_of_San_Francisco_Initiative_to_Restrict_Short-Term_Rentals,_Proposition_F_(November_2015)&quot;&gt;Prop F&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td&gt;1&lt;&#x2F;td&gt;
&lt;td&gt;1&lt;&#x2F;td&gt;
&lt;td&gt;2&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;No on Prop F&lt;&#x2F;td&gt;
&lt;td&gt;7&lt;&#x2F;td&gt;
&lt;td&gt;3&lt;&#x2F;td&gt;
&lt;td&gt;10&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;No on &lt;a href=&quot;http:&#x2F;&#x2F;ballotpedia.org&#x2F;City_of_San_Francisco_Mission_District_Housing_Moratorium_Initiative,_Proposition_I_(November_2015)&quot;&gt;Prop I&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td&gt;6&lt;&#x2F;td&gt;
&lt;td&gt;3&lt;&#x2F;td&gt;
&lt;td&gt;9&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.hennessyforsheriff.com&quot;&gt;Vicki Hennessy&lt;&#x2F;a&gt; for Sheriff&lt;&#x2F;td&gt;
&lt;td&gt;-&lt;&#x2F;td&gt;
&lt;td&gt;1&lt;&#x2F;td&gt;
&lt;td&gt;1&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Voting Slates&lt;&#x2F;td&gt;
&lt;td&gt;5&lt;&#x2F;td&gt;
&lt;td&gt;15&lt;&#x2F;td&gt;
&lt;td&gt;20&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;font-weight: bolder&quot;&gt;(total)&lt;&#x2F;td&gt;
&lt;td&gt;46&lt;&#x2F;td&gt;
&lt;td&gt;63&lt;&#x2F;td&gt;
&lt;td&gt;109&lt;&#x2F;td&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;In addition to all of this paper spam, I now get between one and four phone calls a day from supporters of various candidates (and, in one case, from a candidate themselves). And three times now, I&#x27;ve caught campaigners tailgating into my apartment building to annoy people door-to-door.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s the list of distinct organizations I&#x27;ve gotten voting voting slates from so far:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;San Francisco Tenant&#x27;s Union&lt;&#x2F;li&gt;
&lt;li&gt;Alice B Toklas Democratic Club&lt;&#x2F;li&gt;
&lt;li&gt;Harvey Milk LGBT Democratic Club&lt;&#x2F;li&gt;
&lt;li&gt;San Francisco Young Democrats Club&lt;&#x2F;li&gt;
&lt;li&gt;Affordable Housing Alliance&lt;&#x2F;li&gt;
&lt;li&gt;San Francisco Democratic County Central Committee&lt;&#x2F;li&gt;
&lt;li&gt;Sierra Club&lt;&#x2F;li&gt;
&lt;li&gt;FDR Democratic Club&lt;&#x2F;li&gt;
&lt;li&gt;District 3 Democrats Club&lt;&#x2F;li&gt;
&lt;li&gt;Affordable Future for San Francisco PAC &#x2F; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.sfbos.org&#x2F;index.aspx?page=11324&quot;&gt;Jane Kim&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Most of these have sent three or four different ads with the same slate but different artwork or highlighting different issues.&lt;&#x2F;p&gt;
&lt;p&gt;Augh.&lt;&#x2F;p&gt;
&lt;p&gt;At least there are only two more days.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>2015 Election Ads</title>
          <pubDate>Sun, 18 Oct 2015 16:30:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/election-ads/</link>
          <guid>https://www.roguelazer.com/blog/election-ads/</guid>
          <description xml:base="https://www.roguelazer.com/blog/election-ads/">&lt;p&gt;You may or may not know this, but 2015 is shaping up to be a big election year in San Francisco. Yes, it&#x27;s an off-year. Yes, there are &quot;only&quot; nine propositions on the ballot. Nonetheless, if you believe the rhetoric, this is the year that&#x27;s going to make it or break it for the city of San Francisco. How do I know all this? It&#x27;s because I read through all 46 pieces of printed advertising that I&#x27;ve received so far this season.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;flic.kr&#x2F;p&#x2F;zXvgng&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;farm1.staticflickr.com&#x2F;664&#x2F;22287890565_02030926f7_h.jpg&quot; alt=&quot;Election spam&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Pebble Time Steel Review</title>
          <pubDate>Wed, 23 Sep 2015 22:20:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/pebble-time-steel/</link>
          <guid>https://www.roguelazer.com/blog/pebble-time-steel/</guid>
          <description xml:base="https://www.roguelazer.com/blog/pebble-time-steel/">&lt;p&gt;In February, I &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.kickstarter.com&#x2F;projects&#x2F;597507018&#x2F;pebble-time-awesome-smartwatch-no-compromises&quot;&gt;Kickstarted&lt;&#x2F;a&gt; the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pebble.com&#x2F;pebble-time-smartwatch-features&quot;&gt;Pebble Time&lt;&#x2F;a&gt;. As soon as it was announced (March 3), I upgraded my Kickstarter pledge to the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pebble.com&#x2F;pebble-time-steel-smartwatch-features&quot;&gt;Pebble Time Steel&lt;&#x2F;a&gt;. As you might remember from &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;pebble-steel-first-impressions&#x2F;&quot;&gt;last year&lt;&#x2F;a&gt;, I had Kickstarted the original Pebble (&quot;Pebble Classic&quot; now) and purchased the Pebble Steel as soon as it was released, so this was a no-brainer.&lt;&#x2F;p&gt;
&lt;p&gt;Well, it took a few months longer than expected, but my Time Steel arrived about a week ago, and here&#x27;s my review.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;flic.kr&#x2F;p&#x2F;z2AK9t&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;farm1.staticflickr.com&#x2F;597&#x2F;21677868791_55e371cc96_b.jpg&quot; alt=&quot;Pebble Time Steel on wrist&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>My Honeymoon!</title>
          <pubDate>Sat, 27 Jun 2015 20:15:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/honeymoon/</link>
          <guid>https://www.roguelazer.com/blog/honeymoon/</guid>
          <description xml:base="https://www.roguelazer.com/blog/honeymoon/">&lt;p&gt;As most of you probably know, I got &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.brown-delair.net&quot;&gt;married&lt;&#x2F;a&gt; last month! The wedding was in Claremont and went great, and it&#x27;s probably worth a post of its own; however, what I&#x27;ve come to write for you is a description of what followed — our honeymoon in France. We visited Paris, Beaune (in Burgundy), Avignon (in the Southern Rhône Valley), and Saint-Raphaël (in Côte d&#x27;Azur). Read on for more pictures and anecdotes than you could&#x27;ve ever asked for!&lt;&#x2F;p&gt;
&lt;div class=&quot;iframe-frame&quot;&gt;&lt;iframe src=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;maps&#x2F;d&#x2F;u&#x2F;0&#x2F;embed?mid=zFE-8Q2ZRhQs.kM0O9ml63n1A&quot; width=&quot;800&quot; height=&quot;600&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot;&gt;&lt;&#x2F;iframe&gt;&lt;&#x2F;div&gt;</description>
      </item>
      <item>
          <title>How do I email?</title>
          <pubDate>Tue, 05 May 2015 22:24:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/mail/</link>
          <guid>https://www.roguelazer.com/blog/mail/</guid>
          <description xml:base="https://www.roguelazer.com/blog/mail/">&lt;p&gt;Here are two things about me that some people don&#x27;t know:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;I like e-mail. I mean, nobody looks forward to going through 700 e-mails every morning (which is about how many I get that I have to at least glance at), but it&#x27;s far better than 700 meetings, 700 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hipchat.com&quot;&gt;HipChats&lt;&#x2F;a&gt;, 700 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;slack.com&quot;&gt;Slack&lt;&#x2F;a&gt; messages, or anything else that requires synchronous attention. I&#x27;m all about being able to asynchronously &quot;serially multitask&quot;, and being able to route everything through the dumb but asynchronous pipe of email makes that a lot easier. People who try to sell you on an e-mail-less office in favor of instant messaging tools are people who hate your productivity.&lt;&#x2F;li&gt;
&lt;li&gt;I despise Gmail. I hate that most of the features only work in the awful web interface. I hate that the offline features of the mobile app only sort of work, and the web app hasn&#x27;t been usable offline since &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;gears&#x2F;&quot;&gt;Google Gears&lt;&#x2F;a&gt; shut down. I hate that the IMAP server will sometimes turn off for 10 or 15 minutes and doesn&#x27;t properly support the &lt;code&gt;SEARCH&lt;&#x2F;code&gt; command. Unfortunately, tech companies seem to exclusively use either Gmail or Outlook&#x2F;Exchange, and Exchange is even worse than Gmail.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;As you might expect given the intersection of those two facts, I have a pretty unusual mail setup. So I thought I&#x27;d share it on the Internet!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Beating the Compiler</title>
          <pubDate>Sat, 28 Feb 2015 14:33:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/beating-the-compiler/</link>
          <guid>https://www.roguelazer.com/blog/beating-the-compiler/</guid>
          <description xml:base="https://www.roguelazer.com/blog/beating-the-compiler/">&lt;blockquote&gt;
&lt;p&gt;We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;div class=&quot;quoteattr&quot;&gt;&amp;mdash; Donald Knuth&lt;&#x2F;div&gt;
&lt;blockquote&gt;
&lt;p&gt;Measure. Don&#x27;t tune for speed until you&#x27;ve measured, and even then don&#x27;t unless one part of the code overwhelms the rest.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;div class=&quot;quoteattr&quot;&gt;&amp;mdash; Rob Pike&lt;&#x2F;div&gt;
&lt;p&gt;We spend a lot of our time in the modern, web services-driven technology industry ignoring performance issues. What&#x27;s the point of micro-optimizing a 3ms function call when each request spends 8 or 9 seconds inside the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.sqlalchemy.org&quot;&gt;SQLAlchemy ORM&lt;&#x2F;a&gt;? Well, sometimes it&#x27;s nice to practice those optimizion skills anyway, and today I&#x27;m going to walk you through micro-optimizing a simple problem and we&#x27;ll see just how much better we can do than a naive solution... even though we probably normally shouldn&#x27;t.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>&quot;DevOps&quot; is a dumb word</title>
          <pubDate>Wed, 25 Feb 2015 08:37:40 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/devops/</link>
          <guid>https://www.roguelazer.com/blog/devops/</guid>
          <description xml:base="https://www.roguelazer.com/blog/devops/">&lt;p&gt;Until recently, my job was to synthesize a deep understanding of operating systems, networking, system administration, and my company&#x27;s application and to use that synthesis to fix our existing systems and design better ones. A lot of folks in the technology industry (particularly in the bubble of Greater San Francisco) use the word &quot;DevOps&quot; when putting out job postings for roughly those tasks, and I just wanted to briefly write about why this word is somewhere between inaccurate and offensive and why you shouldn&#x27;t use it.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>some old hardware</title>
          <pubDate>Sun, 28 Sep 2014 14:42:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/old-hardware/</link>
          <guid>https://www.roguelazer.com/blog/old-hardware/</guid>
          <description xml:base="https://www.roguelazer.com/blog/old-hardware/">&lt;p&gt;My fiancée persuaded me to go through my drawer of old electronics and I thought I&#x27;d post a picture of some of the (working) portable computers that we went through today:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;old-hardware&amp;#x2F;old_personal_electronics.jpg&quot; alt=&quot;various old electronics&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;Included:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Apple Newton MessagePad 2100&lt;&#x2F;li&gt;
&lt;li&gt;Apple iPhone 3G&lt;&#x2F;li&gt;
&lt;li&gt;Nokia 770 (running Internet Tablet OS 2006)&lt;&#x2F;li&gt;
&lt;li&gt;Sony Cliè PEG NX-80V&lt;&#x2F;li&gt;
&lt;li&gt;Handspring Visor Edge&lt;&#x2F;li&gt;
&lt;li&gt;HP TouchPad&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Combined, they &lt;em&gt;might&lt;&#x2F;em&gt; have as much computing power as the &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-6&#x2F;&quot;&gt;iPhone 6&lt;&#x2F;a&gt; I recently acquired. Probably not, though. It certainly is interesting to look at what has and hasn&#x27;t changed over the last 20 years.&lt;&#x2F;p&gt;
&lt;p&gt;Also poked at today (but not pictured)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Toshiba Satellite U200-160&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;cgi.ebay.com&#x2F;ws&#x2F;eBayISAPI.dll?ViewItem&amp;amp;item=181541716569&quot;&gt;Olympus PEN E-P1 m43 camera&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you&#x27;re interested in any of this stuff, let me know.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 6</title>
          <pubDate>Fri, 19 Sep 2014 19:38:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-6/</link>
          <guid>https://www.roguelazer.com/blog/iphone-6/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-6/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;iphone-6&amp;#x2F;iphone6-comparison.jpg&quot; alt=&quot;iPhone 6&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;Hello friends. As you may remember from &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-3g-unboxing-and-first-impressions&#x2F;&quot;&gt;a few years ago&lt;&#x2F;a&gt;, I am an iPhone user. Like several million of you,
I decided to upgrade to the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;iphone-6&#x2F;&quot;&gt;iPhone 6&lt;&#x2F;a&gt; this year. I thought I&#x27;d share some really brief impressions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The 6 is gigantic. I have no idea how anyone is using the 6+. The photo above shows my 5s (which was already quite large) looking dwarfed by the 6. It still doesn&#x27;t have anything on the iPad, though.&lt;&#x2F;li&gt;
&lt;li&gt;The curved edges of the front really do feel a lot better for the forward&#x2F;backward swipe gestures in iOS when compared to the flat screens of the iPhone 5s and the iPad.&lt;&#x2F;li&gt;
&lt;li&gt;The screen is noticably better, particularly from extreme angles. Check out this shot of the two iphones and the iPad from a very low angle and in the dark; there&#x27;s no contest about the contrast:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;iphone-6&amp;#x2F;iphone6-angle.jpg&quot; alt=&quot;iPhone 6 angles&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;ul&gt;
&lt;li&gt;The screen is also noticeably &lt;strong&gt;cooler&lt;&#x2F;strong&gt;; setting a white background on it next to my iPhone 5s or my rMBP makes the 5s look yellow, the rMBP look neutral, and the 6 look blue.&lt;&#x2F;li&gt;
&lt;li&gt;iTunes is terrible. It took me at least two hours to get the iPhone up and running because when I plugged it in to restore from backup (thinking that a USB2 connection would be faster than restoring from &quot;the cloud&quot; over my Comcast internet connection), iTunes insisted on installing the versions of all my applications which it had backed up some time in 2013. So then I had to go download updates to 70+ applications over the WiFi anyway. Blech.&lt;&#x2F;li&gt;
&lt;li&gt;This is more of an iOS 8 thing, but &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.swype.com&#x2F;&quot;&gt;Swype&lt;&#x2F;a&gt; is great. I remember having it on the Motorola Droid that we had to use for on-call at Yelp and liking it there, and it seems to have made the transition to iOS with aplomb.&lt;&#x2F;li&gt;
&lt;li&gt;The camera does indeed focus faster. Otherwise, it seems identical to the iPhone 5S camera.&lt;&#x2F;li&gt;
&lt;li&gt;I wish it didn&#x27;t have a camera bump. I might get a case (which I never do) just to hide the camera bump. Maybe the new &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.karvt.com&#x2F;collections&#x2F;iphone-6-wood-case-and-skins&quot;&gt;Karvt&lt;&#x2F;a&gt; skins will be thick enough to be level with it?&lt;&#x2F;li&gt;
&lt;li&gt;Scaled-up applications are &lt;em&gt;really&lt;&#x2F;em&gt; annoying. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sixcolors.com&#x2F;&quot;&gt;Jason Snell&lt;&#x2F;a&gt; does a good job of explaining why in his &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sixcolors.com&#x2F;post&#x2F;2014&#x2F;09&#x2F;iphone-6-iphone-6-plus-a-tale-of-scale&#x2F;&quot;&gt;iPhone 6&#x2F;6+ Preview&lt;&#x2F;a&gt;; the keyboard is the wrong size on scaled-up apps. And, of course, third-party keyboards are disabled in scaled-up apps. I am very eager for Tweetbot, Hipchat, and Google&#x27;s apps to update.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That&#x27;s it for now.&lt;&#x2F;p&gt;
&lt;p&gt;Sorry for going so long between posts; I have some posts with actually content (instead of just commercial blathering) in them queued up, and maybe I&#x27;ll put one of those up soon.&lt;&#x2F;p&gt;
&lt;p&gt;Until then, ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Thoughts on the Moves Privacy Policy</title>
          <pubDate>Mon, 05 May 2014 11:07:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/moves-privacy-policy/</link>
          <guid>https://www.roguelazer.com/blog/moves-privacy-policy/</guid>
          <description xml:base="https://www.roguelazer.com/blog/moves-privacy-policy/">&lt;p&gt;For a while, I&#x27;ve been using the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.moves-app.com&quot;&gt;Moves app for iOS&lt;&#x2F;a&gt;. It&#x27;s a little application
that uses the accelerometer and GPS data from your phone to tell you where you&#x27;ve been
and how many steps you&#x27;ve taken and so on and so forth. I&#x27;ve been using it in no small
part because of their strong third-party privacy policy, which said:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We do not disclose an individual user’s data to third parties unless (1) you have
given explicit consent to each such disclosure, (2) we are required to comply with
a legal obligation or (3) if our business or assets, or parts of them, are
acquired by a third party.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Unfortunately, as you may know, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;techcrunch.com&#x2F;2014&#x2F;04&#x2F;24&#x2F;facebook-acquires-activity-tracking-app-moves&#x2F;&quot;&gt;Moves was acquired by Facebook&lt;&#x2F;a&gt; last month, and I&#x27;m
sorry to say that their stance on user privacy has not improved. Today, Moves updated
their &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.moves-app.com&#x2F;privacy&quot;&gt;Privacy Policy&lt;&#x2F;a&gt;, and it&#x27;s not good stuff.&lt;&#x2F;p&gt;
&lt;p&gt;For better or worse&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-worse-1&quot;&gt;&lt;a href=&quot;#fn-worse&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, Moves (like many companies) does not post diffs when they change
their privacy policy. So I&#x27;m doing it for you. I extracted the current privacy policy (as of 2014-05-05)
and the previous one (edited 2013-09-17) from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;archive.org&quot;&gt;The Wayback Machine&lt;&#x2F;a&gt;, then
reformatted them as Markdown. You can view them at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;Roguelazer&#x2F;7e59bb615c3e5a38b036&quot;&gt;https:&#x2F;&#x2F;gist.github.com&#x2F;Roguelazer&#x2F;7e59bb615c3e5a38b036&lt;&#x2F;a&gt;;
the diff itself is at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;Roguelazer&#x2F;7e59bb615c3e5a38b036#file-september_versus_may-patch&quot;&gt;https:&#x2F;&#x2F;gist.github.com&#x2F;Roguelazer&#x2F;7e59bb615c3e5a38b036#file-september_versus_may-patch&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;important-disclaimer&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#important-disclaimer&quot; aria-label=&quot;Anchor link for: important-disclaimer&quot;&gt;Important Disclaimer&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I am not a lawyer. If you think you may be affected by the changes
to this legal document, you should consult with your attorney. Please don&#x27;t cite me in court
or sue me over interpretation. This document does not consitute legal advice and is for
entertainment and outrage purposes only.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;interpretation-of-changes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interpretation-of-changes&quot; aria-label=&quot;Anchor link for: interpretation-of-changes&quot;&gt;Interpretation of Changes&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The biggest change, to me, is the fact that Moves is now reserving the right to share
all of your data with (roughly) anyone at any time. The relevant clause:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We may share information, including personally identifying information, with our Affiliates (companies that are part of our corporate groups of companies, including but not limited to Facebook) to help provide, understand, and improve our Services.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Also interesting to me is the following passage which was &lt;em&gt;removed&lt;&#x2F;em&gt;:&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-removed-1&quot;&gt;&lt;a href=&quot;#fn-removed&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;We will not display or otherwise disclose information where individual users can be recognized. Furthermore, our developers need to occasionally review raw data and the results for recognized activities&#x2F;routes&#x2F;places to improve the system. They will only see the unique identifier number with the data.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As far as I can tell, Moves is being set up by Facebook to monetize, share, and potentially leak your personal movements, and to inherit up Facebook&#x27;s famously-shoddy isolation of user PII.&lt;&#x2F;p&gt;
&lt;p&gt;Having read this document, I have removed the Moves application from my phone. If anyone is aware of any personal-awareness-movement-tracking apps which promise not to sell your location to the highest bidder, please let me know. And if you still have the Moves application on your phone, well, I hope you get a chance to take a look at the detailed changes to the Privacy Policy and make an informed decision.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-worse&quot;&gt;
&lt;p&gt;Who am I kidding: for worse. Any company that does this is scummy and untrustworthy and, unfortunately, is also every single company I can think of (including the one I work for). &lt;a href=&quot;#fr-worse-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-removed&quot;&gt;
&lt;p&gt;This is of particular interest to me because it was one of the best such clauses in the industry. A lot of companies (including Facebook) do not do anything to prevent developers from viewing your most personal information, and there have been some rather hushed-up scandals related to that. I would love to live in a world where developers take the time to do their jobs without looking at your personal travel logs or selfies. It&#x27;s laziness and some slavish adherence to &quot;agile&quot; which prevents companies from embracing this philosophy, and it&#x27;s &lt;strong&gt;definitely&lt;&#x2F;strong&gt; one of my pet peeves. &lt;a href=&quot;#fr-removed-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>TeX is Huge</title>
          <pubDate>Tue, 15 Apr 2014 10:47:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/giant-tex/</link>
          <guid>https://www.roguelazer.com/blog/giant-tex/</guid>
          <description xml:base="https://www.roguelazer.com/blog/giant-tex/">&lt;p&gt;I was installing &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;tug.org&#x2F;mactex&#x2F;&quot;&gt;MacTeX&lt;&#x2F;a&gt; on my MacBook Pro today and had an amusing realization. First,
some background: for those of you who don&#x27;t know,
TeX is a phenomenal family of typesetting programs originally written in
1978 by two of the giants of 20th Century computer science, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www-cs-faculty.stanford.edu&#x2F;~uno&#x2F;&quot;&gt;Don Knuth&lt;&#x2F;a&gt;
and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;labs.oracle.com&#x2F;pls&#x2F;apex&#x2F;f?p=labs:bio:0:120&quot;&gt;Guy Steele&lt;&#x2F;a&gt;. Most people now use it in conjunction with a slightly more modern
set of extensions called LaTeX released in 1981 or so. I used TeX&#x2F;LaTeX to typeset several thousand
pages of homework and other assignments in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;hmc.edu&quot;&gt;college&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Now, in early 2014, the download for the OS X distribution of TeX+LaTeX is 2.3GiB, and it
actually occupies about 3.5GiB of disk space when installed. How does this compare to 1978? Well,
one of the cheapest options for storage in 1978 was the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pdp8.net&#x2F;rk05&#x2F;rk05.shtml&quot;&gt;DEC RK05&lt;&#x2F;a&gt;, a gargantuan 2.5MiB
cartridge disk drive, which cost $7,900 for the drive and $99 for each disk.&lt;&#x2F;p&gt;
&lt;p&gt;To store the installation of MacTeX-2013, we&#x27;d need 1,434 of these disks. This would
cost $149,866 ($543,133 in 2014 dollars) and would form a cylinder 14&quot; in
diameter and 358&#x27; tall&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-size-1&quot;&gt;&lt;a href=&quot;#fn-size&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, which would weigh about 100,000
pounds&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-weight-1&quot;&gt;&lt;a href=&quot;#fn-weight&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Based on some cursory googling, this seems like it&#x27;d be a
stack of disk cartridges roughly as tall as a 25-story skyscraper and weighing about
as much as 10 African bull elephants. Also, apparently the cartridges have
embedded read&#x2F;write head magnets and will erase one another if left in close
proximity&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-erasure-1&quot;&gt;&lt;a href=&quot;#fn-erasure&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, so that stack would be a terrible way to store your
data.&lt;&#x2F;p&gt;
&lt;p&gt;I wonder what Knuth and Steele think of the fact that their little typesetting software
would be the largest building in a good fraction of the cities in the world?&lt;&#x2F;p&gt;
&lt;p&gt;At least it&#x27;s still cheaper than San Francisco real estate.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-size&quot;&gt;
&lt;p&gt;In &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pdp8.net&#x2F;rk05&#x2F;rk05.jpg&quot;&gt;this image&lt;&#x2F;a&gt;, the cartridge is 77 pixels tall and
the image is 245 pixels tall. According to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pdp8.net&#x2F;rk05&#x2F;rk05.shtml&quot;&gt;this table&lt;&#x2F;a&gt;, the
entire assemblage is 10.5&quot; tall. Multiplication yields 3.3&quot; for the
cartridge, and since DEC tended to like round numbers, I&#x27;m going to assume
that it&#x27;s actually 3&quot; per disk. Multiply that by 1,434 disks, and you get 358 feet. &lt;a href=&quot;#fr-size-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-weight&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.oldcomputers.arcula.co.uk&#x2F;perf3.htm#disk_drives_-_old_and_new_compared&quot;&gt;This article&lt;&#x2F;a&gt; indicates that the later, lighter RL02 drive cartridges weighed 70 pounds each &lt;a href=&quot;#fr-weight-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-erasure&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bitsavers.trailing-edge.com&#x2F;pdf&#x2F;dec&#x2F;disc&#x2F;rk05&#x2F;DEC-00-HRK05-C-D_Nov74.pdf&quot;&gt;RK05 Disk Drive Maintenance Manual&lt;&#x2F;a&gt; section 2.4 &quot;Cartridge Packing and Shipping&quot; &lt;a href=&quot;#fr-erasure-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Alfred + dc</title>
          <pubDate>Thu, 03 Apr 2014 11:57:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/alfred-plus-dc/</link>
          <guid>https://www.roguelazer.com/blog/alfred-plus-dc/</guid>
          <description xml:base="https://www.roguelazer.com/blog/alfred-plus-dc/">&lt;p&gt;I use &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.alfredapp.com&#x2F;&quot;&gt;Alfred 2&lt;&#x2F;a&gt; a lot on OS X in order to get things done. It doesn&#x27;t &lt;em&gt;completely&lt;&#x2F;em&gt; change how
I use the operating system, but it comes close. However, one of my pet peeves about it has always
been that the built-in calculator is pretty terrible (even with the &quot;advanced&quot; equals-sign calculator).
I realized this morning that I could fix this, and, lo, the &lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;dc.alfredworkflow&quot;&gt;dc alfred workflow&lt;&#x2F;a&gt; was born.&lt;&#x2F;p&gt;
&lt;p&gt;It just takes its input and runs it through the &lt;code&gt;dc&lt;&#x2F;code&gt; command-line utility, giving you a fully-programmable
RPN calculator. It&#x27;s not quite as great as &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pcalc.com&#x2F;&quot;&gt;PCalc&lt;&#x2F;a&gt;, but it&#x27;s just a &lt;kbd&gt;^-space&lt;&#x2F;kbd&gt; away. If you have Alfred,
you can just install the workflow and then use the script filter &quot;dc&quot; to run your math commands. Example:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;alfred-plus-dc&amp;#x2F;dc_alfred_screenshot.png&quot; alt=&quot;dc alfred workflow screenshot&quot;  &#x2F;&gt;
  
</description>
      </item>
      <item>
          <title>Interesting SSL Issue</title>
          <pubDate>Mon, 24 Mar 2014 22:54:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/interesting-ssl-issue/</link>
          <guid>https://www.roguelazer.com/blog/interesting-ssl-issue/</guid>
          <description xml:base="https://www.roguelazer.com/blog/interesting-ssl-issue/">&lt;p&gt;Shortly after I upgraded to OS X &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;support.apple.com&#x2F;kb&#x2F;DL1725&quot;&gt;10.9.2&lt;&#x2F;a&gt;, I was connecting to &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;interesting-ssl-issue&#x2F;battle.net&quot;&gt;battle.net&lt;&#x2F;a&gt;, and I got an SSL error. At the time, I
didn&#x27;t think anything of it (after all, sites have bad SSL certificates all the time). However, I noticed it again today when looking
at the page for &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;us.battle.net&#x2F;d3&#x2F;en&#x2F;reaper-of-souls&#x2F;&quot;&gt;Reaper of Souls&lt;&#x2F;a&gt;, and decided to look into it again. When I did, I found something very unusual: my system
has a second copy of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.digicert.com&#x2F;&quot;&gt;DigiCert&lt;&#x2F;a&gt; root CA certificate in the &quot;login&quot; keychain. For those of you who aren&#x27;t familiar, OS X
uses a hierarchy of binary key&#x2F;password databases called &quot;keychains&quot; to store sensitive materials. Generally, Root CA certificates
are only found in the Trusted Roots keychain; the &quot;login&quot; keychain (which is a per-user keychain writable without root privileges) is
only used to store passwords and other application-level data.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Pebble Steel First Impressions</title>
          <pubDate>Tue, 04 Feb 2014 22:37:17 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/pebble-steel-first-impressions/</link>
          <guid>https://www.roguelazer.com/blog/pebble-steel-first-impressions/</guid>
          <description xml:base="https://www.roguelazer.com/blog/pebble-steel-first-impressions/">&lt;p&gt;I&#x27;ve had an article sitting in Draft status since June 2013 about the
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;getpebble.com&#x2F;&quot;&gt;Pebble&lt;&#x2F;a&gt; smartwatch which I bought during their &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.kickstarter.com&#x2F;projects&#x2F;597507018&#x2F;pebble-e-paper-watch-for-iphone-and-android&quot;&gt;Kickstarter campaign&lt;&#x2F;a&gt;. The article
essentially said that the Pebble has awesome features, but feels like a toy and scuffs
if you look at it askance. I was planning on going into detail about how apps
like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;itunes.apple.com&#x2F;us&#x2F;app&#x2F;httpebble&#x2F;id650174711?mt=8&quot;&gt;httpebble&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;smartwatchplusapp.appspot.com&#x2F;index.htm&quot;&gt;smartwatch+&lt;&#x2F;a&gt; feel immensely hackish.&lt;&#x2F;p&gt;
&lt;p&gt;Well, as of today, I&#x27;m confident reporting that Pebble has resolved all of these issues
with the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;getpebble.com&#x2F;steel&quot;&gt;Pebble Steel&lt;&#x2F;a&gt; and Pebble OS 2.0.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>I Got Sick</title>
          <pubDate>Sat, 25 Jan 2014 14:26:14 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/i-got-sick/</link>
          <guid>https://www.roguelazer.com/blog/i-got-sick/</guid>
          <description xml:base="https://www.roguelazer.com/blog/i-got-sick/">&lt;p&gt;As I alluded in my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;new-site&#x2F;&quot;&gt;last post&lt;&#x2F;a&gt;, I&#x27;ve had a fair bit of extra time on my
hands for the last couple of weeks. That&#x27;s because I&#x27;ve been quite ill. This post is
the exciting story of what I&#x27;ve been sick with.&lt;&#x2F;p&gt;
&lt;p&gt;Starting in the evening of Friday, 2014-01-10, I had body aches and a fever. Now,
at first, I didn&#x27;t even know if anything was wrong — I&#x27;d slept poorly the night before,
and maybe I was just feeling poorly because E was going back to school. Unfortunately,
when I woke up on Saturday, 2014-01-11, the fever was worse, so I stayed in bed all day.
I did&#x27;t feel too terrible (I went to the grocery store and did my regular errands on Sunday,
and even went to work on Monday), but I knew I was sick. I just hoped it was a cold or something
else minor that would go away by itself. Unfortunately, on Tuesday, the fever was high enough
that I knew I wouldn&#x27;t be productive, so I had to stay out of work. Wednesday continued the
high fever and brought intermittent sore throat (only on the left side,
though, which was weird), which was enough for me to decide to go to the
doctor.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, like so many irresponsible young people in my age cohort, I didn&#x27;t actually have a doctor. So I decided
to sign up with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.onemedical.com&#x2F;&quot;&gt;One Medical Group&lt;&#x2F;a&gt;, which is a pretty cool concept. For a nominal yearly fee, you get not
only a doctor, but the ability to make same-day appointments to see any doctor in their network. A $15 copay and the ability
to be seen by a GP-type doctor definitely beats having to go to the ER for minor illnesses, right? So, Wednesday night,
I took an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.uber.com&quot;&gt;Uber&lt;&#x2F;a&gt; out to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.onemedical.com&#x2F;sf&#x2F;locations&#x2F;2410california&quot;&gt;Pac Heights&lt;&#x2F;a&gt; and met with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.onemedical.com&#x2F;sf&#x2F;physicians#&#x2F;?provider=Dan_Ciccarone&quot;&gt;Dr. Ciccarone&lt;&#x2F;a&gt;. He looked at me,
looked at my throat, and told me that my left tonsil looked like a textbook picture of strep throat.
Then he did a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Rapid_strep_test&quot;&gt;RADT&lt;&#x2F;a&gt;, which was negative for strep. &lt;strong&gt;Hm.&lt;&#x2F;strong&gt; I guess he had
some kind of hunch, because he poked me on both sides of my belly and asked
me which one hurt more. Apparently, I answered the side that my spleen is
on, and a sensitive spleen is diagnostically relevant for things that aren&#x27;t strep throat. He
still took a full strep culture, though. Then he told me to keep taking
ibuprofen and report to the phlebotomist the next day to get blood drawn.&lt;&#x2F;p&gt;
&lt;p&gt;The next day (Thursday), I woke up feeling even more miserable (temperature
hovering around 102°F &#x2F; 39°C), took some more ibuprofen, and went to a different One Medical
Group office to get my blood taken... which was quite painless.&lt;&#x2F;p&gt;
&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;i-got-sick&amp;#x2F;Epstein-Barr.jpg&quot; alt=&quot;Epstein-Barr Virus&quot;  &#x2F;&gt;
  
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-ebvsrc-1&quot;&gt;&lt;a href=&quot;#fn-ebvsrc&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Friday, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.onemedical.com&#x2F;sf&#x2F;physicians#&#x2F;?provider=Neema_Fuller&quot;&gt;a different doctor&lt;&#x2F;a&gt; called me to tell me that the blood tests were positive for
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Epstein%E2%80%93Barr_virus&quot;&gt;Epstein-Barr Virus&lt;&#x2F;a&gt;, which causes a disease known as &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Infectious_mononucleosis&quot;&gt;mono&lt;&#x2F;a&gt;. Symptoms of mono include fever,
sore throat, and fatigue. And, as a virus, there&#x27;s next to nothing you can do about it except wait it
out. So, over the weekend, I waited it out, while the fever and sore throat got worse. By Monday, I couldn&#x27;t
swallow solid food at all, and even liquids were challenging.&lt;&#x2F;p&gt;
&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;i-got-sick&amp;#x2F;strep_beta.jpg&quot; alt=&quot;beta-hemloytic strep&quot;  &#x2F;&gt;
  
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-strepsrc-1&quot;&gt;&lt;a href=&quot;#fn-strepsrc&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Fast forward to Tuesday, 2014-01-21. I got another message from the doctor — apparently, the throat
culture that Dr. Ciccarone had done last Wednesday came back for &lt;em&gt;&quot;β-hemolytic Streptococcus, not group A isolated&quot;&lt;&#x2F;em&gt;,
which is apparently a somewhat uncommon variant of strep, the symptoms of which include fever, sore throat,
and fatigue.&lt;&#x2F;p&gt;
&lt;p&gt;Yep. I got both mono &lt;strong&gt;and&lt;&#x2F;strong&gt; strep. Which probably helps explain why I&#x27;ve been so miserable lately.
The doctor prescribed &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Cefuroxime&quot;&gt;Cefuroxime&lt;&#x2F;a&gt; to wipe out the strep, and continuing rest for the mono.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, after a frankly miserable two weeks in total, the fever finally
broke on Friday, 2014-01-24, just in time for my coworkers
to send me a care package containing delicious &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;wisesonsdeli.com&quot;&gt;Wise Sons&lt;&#x2F;a&gt; challah.&lt;&#x2F;p&gt;
&lt;p&gt;As of this posting, I have no idea how long it&#x27;ll take for the rest of my symptoms to go away, but I&#x27;m
just glad that the fever&#x27;s gone and the sore throat has eased up enough that I can start eating actual
food again and contemplate doing actual work.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-ebvsrc&quot;&gt;
&lt;p&gt;(2005) Virus Proteins Prevent Cell Suicide Long Enough to Establish Latent Infection. PLoS Biol 3(12): e430 &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.plosbiology.org&#x2F;article&#x2F;info:doi&#x2F;10.1371&#x2F;journal.pbio.0030430&quot;&gt;DOI: 10.1371&#x2F;journal.pbio.0030430&lt;&#x2F;a&gt;; Creative Commons Attribution 2.5 &lt;a href=&quot;#fr-ebvsrc-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-strepsrc&quot;&gt;
&lt;p&gt;(1979) Photomicrograph of Streptococcus pyogenes bacteria, 900x magnification from the CDC. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;phil.cdc.gov&#x2F;phil&#x2F;details.asp?pid=2110&quot;&gt;Public Health Image Library ID#2110&lt;&#x2F;a&gt;; Public Domain &lt;a href=&quot;#fr-strepsrc-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>New Site, Again</title>
          <pubDate>Sun, 19 Jan 2014 18:56:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-site/</link>
          <guid>https://www.roguelazer.com/blog/new-site/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-site/">&lt;p&gt;Hello dear readers. If you can see this, then it means the new, redesigned
&amp;lt;roguelazer.com&amp;gt; is up and running. I got tired of dealing with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cvedetails.com&#x2F;vulnerability-list&#x2F;vendor_id-2337&#x2F;product_id-4096&#x2F;Wordpress-Wordpress.html&quot;&gt;WordPress
vulnerabilities&lt;&#x2F;a&gt; regularly, and was somewhat embarassed to have a site
running on &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;me.veekun.com&#x2F;blog&#x2F;2012&#x2F;04&#x2F;09&#x2F;php-a-fractal-of-bad-design&#x2F;&quot;&gt;PHP&lt;&#x2F;a&gt;. After all, there isn&#x27;t actually any dynamic content here, so
why bother?&lt;&#x2F;p&gt;
&lt;p&gt;The site is now a bunch of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; files compiled into HTML using the
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;getpelican.com&#x2F;&quot;&gt;Pelican&lt;&#x2F;a&gt; framework.&lt;&#x2F;p&gt;
&lt;p&gt;Major wins:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Much faster, since it&#x27;s just static HTML&lt;&#x2F;li&gt;
&lt;li&gt;Back to being standards-compliant HTML5&lt;&#x2F;li&gt;
&lt;li&gt;Behaves sanely on mobile, for the first time ever (thanks
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;getbootstrap.com&#x2F;2.3.2&quot;&gt;Bootstrap&lt;&#x2F;a&gt;!).&lt;&#x2F;li&gt;
&lt;li&gt;Better Atom and RSS feeds (although they&#x27;re at a new url...)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;</description>
      </item>
      <item>
          <title>A Rant on Redis</title>
          <pubDate>Sat, 14 Dec 2013 14:53:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/a-rant-on-redis/</link>
          <guid>https://www.roguelazer.com/blog/a-rant-on-redis/</guid>
          <description xml:base="https://www.roguelazer.com/blog/a-rant-on-redis/">&lt;p&gt;It&#x27;s been a while since I posted, and I&#x27;ve been spending a lot of time fighting with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;redis.io&quot;&gt;Redis&lt;&#x2F;a&gt;, one of the darling databases of the NoSQL era, at work, so I thought I&#x27;d grace y&#x27;all with a brief rant on Redis, what it&#x27;s good at, what it&#x27;s bad at, and so on.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-redis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-redis&quot; aria-label=&quot;Anchor link for: what-is-redis&quot;&gt;What is Redis?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Redis is an open-source moderately-structured in-memory key-value store. This means that, unlike full relational databases, it doesn&#x27;t have a fixed schema, and it can&#x27;t perform server-side operations like joining and filtering data&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-lua-1&quot;&gt;&lt;a href=&quot;#fn-lua&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;, and theoretically it&#x27;s faster. Redis looks an awful lot like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;memcached.org&quot;&gt;memcache&lt;&#x2F;a&gt;, but has support for basic data structures (lists and hashes), and can theoretically write it&#x27;s data to disk instead of just keeping it in memory.&lt;&#x2F;p&gt;
&lt;p&gt;For these reasons, I am &lt;strong&gt;wholly 100%&lt;&#x2F;strong&gt; in favor of using Redis, as long as you use it strictly as a memcache replacement, a temporary cache to make your application faster or back non-essential short-lived-data features like password resets. It can be safely(-ish) restarted thanks to its ability to persist to disk, and the data structures make it a lot easier to organize code (I have definitely seen memcache instances where people emulated lists by having a bunch of keys named &lt;code&gt;&quot;keyname_1&quot;&lt;&#x2F;code&gt;, &lt;code&gt;&quot;keyname_2&quot;&lt;&#x2F;code&gt;, etc. It was not good code.).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-is-redis-not&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-redis-not&quot; aria-label=&quot;Anchor link for: what-is-redis-not&quot;&gt;What is Redis not?&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Redis is not a persistent database. It has disk persistence (which I will go into at great depth below), but it can never operate unless 100% of its data fits in memory. Contrast this to traditional relational databases (like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.postgresql.org&quot;&gt;PostgreSQL&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;dev.mysql.com&quot;&gt;MySQL&lt;&#x2F;a&gt;, or Oracle), or to other key-value stores (like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;cassandra.apache.org&quot;&gt;Cassandra&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;basho.com&#x2F;riak&#x2F;&quot;&gt;Riak&lt;&#x2F;a&gt;), all of which can operate with only a &quot;working set&quot; of data resident in memory, and the rest on disk. Given that ECC-RAM is still about &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.newegg.com&#x2F;Product&#x2F;ProductList.aspx?Submit=ENE&amp;amp;DEPA=0&amp;amp;Order=BESTMATCH&amp;amp;Description=ECC+RAM&amp;amp;N=-1&amp;amp;isNodeId=1&quot;&gt;$15&#x2F;GB&lt;&#x2F;a&gt; and even the fastest SSDs are about &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.newegg.com&#x2F;Product&#x2F;Product.aspx?Item=N82E16820167142&quot;&gt;$2.50&#x2F;GB&lt;&#x2F;a&gt;, this makes Redis a very expensive way to store your data. It makes sense if you&#x27;re going to be careful to ensure that the only data in Redis is hot data (which you might if you&#x27;re using it as a cache), but it absolutely does not make sense for long-term, sparsely-accessed data.&lt;&#x2F;p&gt;
&lt;p&gt;Redis is also not highly available. It has replication (which I will go into at great depth below), but only barely. It doesn&#x27;t have any real clustering support (yes, I&#x27;m aware of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;antirez.com&#x2F;news&#x2F;66&quot;&gt;WAIT&lt;&#x2F;a&gt; and find it unsatisfactory), doesn&#x27;t have any multi-master support, and just really seems to not want to be used in a highly-available fashion. If you want a key-value store that does that, I suggest you look into Riak.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;disk-persistence&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#disk-persistence&quot; aria-label=&quot;Anchor link for: disk-persistence&quot;&gt;Disk Persistence&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Right off the gate, one of Redis&#x27;s biggest wins over memcache is its ability to persist to disk. It has two mechanisms for doing this: &quot;RDB&quot; and &quot;AOF&quot;. RDB takes a snapshot of everything in memory and periodically writes it to disk in a somewhat optimized format; AOF takes every single statement ever run against a redis instance and writes them to a single file which it periodically optimizes to remove duplicates. These both have some pretty serious limitations that make me not recommend &lt;em&gt;either&lt;&#x2F;em&gt; of them for production settings if you can possibly avoid it.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rdb&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#rdb&quot; aria-label=&quot;Anchor link for: rdb&quot;&gt;RDB&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;In order to write its full snapshot to disk, RDB forks the main redis process and does a bunch of work on it. Now, this is all well and good on Linux where copy-on-write memory means that that fork should be relatively free. &lt;strong&gt;However&lt;&#x2F;strong&gt;, the &quot;copy&quot; part of copy-on-write does kick in if you&#x27;re on an active server. Quite often with a moderately-loaded server, you can build up &lt;em&gt;several additional GB of memory usage&lt;&#x2F;em&gt; during an RDB write. So you&#x27;d better make sure to leave lots of RAM free.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-rdbperf-1&quot;&gt;&lt;a href=&quot;#fn-rdbperf&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;aof&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#aof&quot; aria-label=&quot;Anchor link for: aof&quot;&gt;AOF&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;At first blush, the append-only-file (AOF) looks a lot like the binary write-ahead logs used for replication in standard relational databases (binlogs in MySQL, WALs in PostgreSQL). Basically, every time a command comes in, it&#x27;s appended to the AOF log by redis. Then, if the server restarts, it can simply replay the entire log in order to get back to the state it was in before.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, AOF logs have what I consider a major problem: it&#x27;s a single log of every statement since the beginning of time for the server. This means that if you have a lot of updates to existing keys happening (common when using Redis as a database), or a lot of keys expiring (common when using Redis as a cache), the AOF log will be many, many times the size of your database, and will take minutes to hours to replay — very bad if you&#x27;re trying to recover from an outage.&lt;&#x2F;p&gt;
&lt;p&gt;Redis has a solution for this: &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;bgrewriteaof&quot;&gt;BGREWRITEAOF&lt;&#x2F;a&gt;. This causes redis to &quot;optimize&quot; the AOF, rewriting it to eliminate unnecessary updates and expired keys.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-aofdetails-1&quot;&gt;&lt;a href=&quot;#fn-aofdetails&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Of course, since the single AOF log contains &lt;em&gt;every statement since the birth of the database&lt;&#x2F;em&gt;, this process takes unacceptably long on all but the smallest of databases, and tends to consume an inordinate amount of I&#x2F;O.&lt;&#x2F;p&gt;
&lt;p&gt;The real problem with AOF is that there is no way to run it from a point-of-time which isn&#x27;t the start of a server. You can&#x27;t have an RDB at time &lt;code&gt;x&lt;&#x2F;code&gt; and then only keep AOF logs since &lt;code&gt;x&lt;&#x2F;code&gt;. There&#x27;s no way to reasonably combine the efficiencies of RDB and AOF, despite the fact that every other database system has supported this behavior for &lt;em&gt;decades&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;replication&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#replication&quot; aria-label=&quot;Anchor link for: replication&quot;&gt;Replication&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Redis has asynchronous replication. If you run any kind of large product, that should warm your heart a bit — replication is the best way to build high availability and failure-tolerant systems. Unfortunately, Redis&#x27;s replication is probably the most naive, useless form of asynchronous replication I&#x27;ve used — I guess it falls somewhere between &quot;sqlite on an nfs share&quot; and &quot;postgresql 8.x&quot;.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;replication-is-naive&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#replication-is-naive&quot; aria-label=&quot;Anchor link for: replication-is-naive&quot;&gt;Replication is naive&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Redis implements replication by first issuing a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;sync&quot;&gt;&lt;code&gt;SYNC&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; command when a slave connects (which just does an RDB save and copies it over a TCP socket), and then streaming the AOF file. That&#x27;s all. If a node loses network connection for a while, it has to copy the whole database again, which is almost never tolerable with non-trivially-small databases and multiple datacenters. Redis 2.8 attempts to improve this with the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;antirez.com&#x2F;news&#x2F;47&quot;&gt;&lt;code&gt;PSYNC&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; command, which is the most naive thing — you just specify a buffer time of some number of seconds, and if slaves disconnect for less than that time, they&#x27;ll replay out of the buffer instead of re-downloading the whole database. Oh, Equinix needs to perform power maintenance and one of your datacenters is going to be offline for a couple of hours? Too bad, I guess you&#x27;ll need to entire buffer several hours of data in memory at all times on your master, or you&#x27;ll have to retransfer all of your redis databases across the network. You should just live in the magical fairyland where nothing ever breaks!&lt;&#x2F;p&gt;
&lt;h4 id=&quot;replication-is-un-monitorable&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#replication-is-un-monitorable&quot; aria-label=&quot;Anchor link for: replication-is-un-monitorable&quot;&gt;Replication is un-monitorable&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Would you like to know how far behind your slaves are? Well, you&#x27;d better implement your own heartbeating, because Redis doesn&#x27;t expose that. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;redis.io&#x2F;topics&#x2F;admin&quot;&gt;The manual&lt;&#x2F;a&gt; helpfully suggests that you can determine whether a slave is caught up to the master by &lt;em&gt;seeing if the number of keys is the same on both&lt;&#x2F;em&gt;. Because there are no operations in redis-land which can change data without changing the number of keys. There are a couple of replication-related fields in &lt;code&gt;INFO&lt;&#x2F;code&gt;, but they don&#x27;t actually help if you&#x27;re trying to figure out exact status of a cluster:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;master_link_status&lt;&#x2F;code&gt; seems to say &quot;up&quot; all the time, even when it isn&#x27;t&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;master_last_io_seconds_ago&lt;&#x2F;code&gt; is relatively useless data, doesn&#x27;t differentiate between replication issues and master not doing anything (and only has 1s granularity, which is useless)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That&#x27;s it. Nothing else.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;replication-is-one-direction&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#replication-is-one-direction&quot; aria-label=&quot;Anchor link for: replication-is-one-direction&quot;&gt;Replication is one-direction&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Something I would absolutely love to have in Redis is master-master replication. Imagine if you could set up two servers and write to either of them and have them become eventually-consistent. It would be like some kind of key-value nirvana! MySQL has supported this feature for &lt;strong&gt;14 years&lt;&#x2F;strong&gt; (since &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;4.1&#x2F;en&#x2F;news-3-23-x.html&quot;&gt;MySQL 3.23&lt;&#x2F;a&gt;). Unfortunately, Redis doesn&#x27;t have any support for this. An instance can be a master or a slave, but never both. And there&#x27;s no reconciliation in the replication code anyway. Hm, maybe this belonged in the &quot;Replication is naive&quot; section...&lt;&#x2F;p&gt;
&lt;h3 id=&quot;high-availability&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#high-availability&quot; aria-label=&quot;Anchor link for: high-availability&quot;&gt;High Availability&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Well, Redis is so simple, at least it should be easy to make highly-available, right?&lt;&#x2F;p&gt;
&lt;p&gt;C&#x27;mon, you know the answer to that.&lt;&#x2F;p&gt;
&lt;p&gt;Of course it isn&#x27;t.&lt;&#x2F;p&gt;
&lt;p&gt;As discussed above, you can&#x27;t have a cluster of eventually-consistent Redisen. That right there rules out the HA strategy commonly employed by key-value stores of just having a lot of them.&lt;&#x2F;p&gt;
&lt;p&gt;Well, at least we could have a single master and a bunch of read slaves, and then promote one quickly to be master, right? No, wrong. Since there is no exposure of replication coordinates by Redis, there&#x27;s no way to know which of the read slaves has the latest data, so there&#x27;s no way to know which on to promote.&lt;&#x2F;p&gt;
&lt;p&gt;Well, okay, at least you can use a sharding redis proxy like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;twitter&#x2F;twemproxy&quot;&gt;twitter&#x27;s twemproxy&lt;&#x2F;a&gt; to distribute your data to lots of redis masters, and if one of them goes down, you only lose 1&#x2F;n of your keys, right? Well, sort of. Twemproxy fails to support an absolutely stupefying 42 of redis&#x27;s 98 commands.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-twemproxycmds-1&quot;&gt;&lt;a href=&quot;#fn-twemproxycmds&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Some of these make sense, but the fact that twemproxy kills your connection if you issue a &lt;code&gt;PING&lt;&#x2F;code&gt; is just madness (and, in fact, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;twitter&#x2F;twemproxy&#x2F;issues&#x2F;113&quot;&gt;is ticketed&lt;&#x2F;a&gt;). Twemproxy specifically has other issues; my favorite is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;twitter&#x2F;twemproxy&#x2F;issues&#x2F;6&quot;&gt;issue #6&lt;&#x2F;a&gt;, which is that you can&#x27;t change the twemproxy config file without downtime (which I&#x27;ve built a horrible&#x2F;hilarious workaround for at Uber). Real A-class software in this Redis community&lt;&#x2F;p&gt;
&lt;p&gt;Redis has an unstable tool called &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;redis.io&#x2F;topics&#x2F;sentinel&quot;&gt;sentinel&lt;&#x2F;a&gt; which is supposed to fix some of these issues by managing slaving across a redis cluster for you. As far as I can tell in my limited experimentation, &lt;em&gt;all&lt;&#x2F;em&gt; it can do is detect some kinds of redis failures and change what the master is, at the cost of running yet another implementation of byzantine agreement. Of course, it still requires that you run either nonexistent sentinel-aware clients (which add a bunch of new, exciting failure modes to your application), or that you manage failover out-of-band using keepalived or carp. Which seems to sort of completely invalidate the point of having an application to manage clusters for you.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;other-gotchas&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#other-gotchas&quot; aria-label=&quot;Anchor link for: other-gotchas&quot;&gt;Other Gotchas&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Redis has a parameter called &lt;code&gt;maxmemory&lt;&#x2F;code&gt; in its config file. Do you know what redis will do by default when it hits maxmemory? &lt;strong&gt;Absolutely nothing&lt;&#x2F;strong&gt; if you&#x27;re using redis as a database. The default behavior is &lt;code&gt;volatile-lru&lt;&#x2F;code&gt;, which means that when it hits maxmemory, redis will examine keys with an expiration time (keys set with SETX) and LRU out some of them. It won&#x27;t look at any non-expiring keys (which most of yours will be if you&#x27;re using redis as a database), it won&#x27;t consider objects by size, and it won&#x27;t raise any errors. There are two sane choices for the &lt;code&gt;maxmemory-policy&lt;&#x2F;code&gt; option:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;allkeys-lru&lt;&#x2F;code&gt;: Redis will, using its lossy LRU algorithm, choose to delete a key from your entire keyspace to delete when it gets towards the upper boundaries of memory&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;noeviction&lt;&#x2F;code&gt;: Redis will return a &quot;too much memory&quot; error on writes. &lt;em&gt;WHY GOD WHY IS THIS NOT THE DEFAULT!?&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Redis gets hella &lt;strong&gt;fragmented&lt;&#x2F;strong&gt;. Unlike traditional databases which know how big a tuple&#x2F;row is and can allocate memory reasonably, redis has to rely on similar slab allocation algorithms to memcached. This means that over regular use, it will get highly fragmented, and while it may only have 1GB of data in it, it might be taking up 10GB of RAM (which means 20GB of RAM when you&#x27;re RDBing). This data is exposed in &lt;code&gt;INFO&lt;&#x2F;code&gt;, thankfully. Unfortunately, redis has no internal &quot;cleanup&quot; routines to reduce fragmentation — your only option is to take an RDB dump and then restart redis. Doing this because of an on-call page this morning, I freed up about 10GB of RAM on one of our clusters. It&#x27;s sort of shameful that you have to be aware of this and willing to re-jigger your replication topology every few weeks just to prevent death by fragmentation, but what else do you expect?&lt;&#x2F;p&gt;
&lt;p&gt;We had an awesome issue at work because some user accidentally issued the command &lt;code&gt;FLUSHALL&lt;&#x2F;code&gt; to a production redis box. Why did a regular consumer have the ability to do that? Because Redis doesn&#x27;t have any concept of &lt;strong&gt;permissions&lt;&#x2F;strong&gt;. The solution was to uses redis&#x27;s (non-runtime-alterable) &lt;code&gt;RENAME-COMMAND&lt;&#x2F;code&gt; operation to rename the &lt;code&gt;FLUSHALL&lt;&#x2F;code&gt; command to something that the client wouldn&#x27;t know about. That&#x27;s somewhat like doing &lt;code&gt;mv &#x2F;bin&#x2F;rm &#x2F;bin&#x2F;nobody-will-ever-guess-this-name&lt;&#x2F;code&gt; as a way to fix the security of your Unix box where everyone has root.&lt;&#x2F;p&gt;
&lt;p&gt;Redis is &lt;strong&gt;inconsistent&lt;&#x2F;strong&gt;. The &lt;code&gt;pidfile&lt;&#x2F;code&gt; parameter take a full path, but the &lt;code&gt;dumpfile&lt;&#x2F;code&gt; parameter takes a relative path based on the &lt;code&gt;dir&lt;&#x2F;code&gt; parameter. The parameter for the AOF filename (&lt;code&gt;appendfilename&lt;&#x2F;code&gt;) &lt;strong&gt;does not appear anywhere in the documentation&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-aof-1&quot;&gt;&lt;a href=&quot;#fn-aof&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. You have to read &lt;code&gt;config.c&lt;&#x2F;code&gt; yourself to know what it is.&lt;&#x2F;p&gt;
&lt;p&gt;Redis is &lt;strong&gt;stupid&lt;&#x2F;strong&gt;. It traps &lt;code&gt;SIGSEGV&lt;&#x2F;code&gt; and overrides it to write an error to the log and longjmp back to where it was. I have no other words for that behavior.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wrapping-up&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapping-up&quot; aria-label=&quot;Anchor link for: wrapping-up&quot;&gt;Wrapping up&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Obviously this is a lot of gripes. I want to emphasize that &lt;strong&gt;if you use redis as intended&lt;&#x2F;strong&gt; (as a slightly-persistent, not-HA cacache), it&#x27;s great. Unfortunately, more and more shops seem to be thinking that Redis is a full-service database and, as someone who&#x27;s had to spend an inordinate amount of time maintaining such a setup, it&#x27;s not. If you&#x27;re writing software and you&#x27;re thinking &quot;hey, it would be easy to just put a &lt;code&gt;SET key value&lt;&#x2F;code&gt; in this code and be done,&quot; please reconsider. There are lots of great products out there that are better for the overwhelming majority of use cases.&lt;&#x2F;p&gt;
&lt;p&gt;Well, that was cathartic. I look forward to your response flames, Internet.&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-lua&quot;&gt;
&lt;p&gt;Actually, you can write &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.lua.org&quot;&gt;lua&lt;&#x2F;a&gt; scripts that run on the server-side, but they add so much maintenance headache that I can&#x27;t responsibly recommend that. &lt;a href=&quot;#fr-lua-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-rdbperf&quot;&gt;
&lt;p&gt;With a 20GB database which you write to at 50Mbps and which is backed by a RAID1 of nice Seagate &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.seagate.com&#x2F;internal-hard-drives&#x2F;enterprise-hard-drives&#x2F;hdd&#x2F;enterprise-performance-15k-hdd&#x2F;&quot;&gt;ST300MP0034 SAS&lt;&#x2F;a&gt; drives (which are rated for 228MBps and should be able to achieve something between 1&#x2F;3 and 1&#x2F;2 of that in practice), when an RDB snapshot occurs, it&#x27;s going to take 89 seconds to write the data in the absolute best case, and 179 seconds in what I would consider a reasonable case. That comes out to 1.07GB of extra data that&#x27;s going to be written into the databse while the RDB is in progress. If that data happens to be sparse (and causes a large number of 4KB pages to be COW&#x27;d), you&#x27;re looking at many GB of extra RAM that you need. &lt;a href=&quot;#fr-rdbperf-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-aofdetails&quot;&gt;
&lt;p&gt;Actually, redis just makes a new AOF by forking and writing the contents of its current memory as an AOF. It never processes the old one on disk at all. So this process has the same RAM downside as RDBs! &lt;a href=&quot;#fr-aofdetails-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-twemproxycmds&quot;&gt;
&lt;p&gt;The full list: &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;files.roguelazer.com&#x2F;twemproxy_unsupported_commands.txt&quot;&gt;&#x2F;&#x2F;files.roguelazer.com&#x2F;twemproxy_unsupported_commands.txt&lt;&#x2F;a&gt;. Issuing any of these will cause twemproxy to close your TCP connection abruptly. COOL! &lt;a href=&quot;#fr-twemproxycmds-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-aof&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;search?client=safari&amp;amp;rls=en&amp;amp;q=appendfilename+site:redis.io&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&quot;&gt;Source&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-aof-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Serious question about urban planning policy</title>
          <pubDate>Fri, 26 Jul 2013 10:30:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/serious-question-about-urban-planning-policy/</link>
          <guid>https://www.roguelazer.com/blog/serious-question-about-urban-planning-policy/</guid>
          <description xml:base="https://www.roguelazer.com/blog/serious-question-about-urban-planning-policy/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;vampirecoffee&quot;&gt;Skye&lt;&#x2F;a&gt; retweeted &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;grist.org&#x2F;cities&#x2F;the-dark-side-of-startup-city&#x2F;&quot;&gt;an article&lt;&#x2F;a&gt; today which made me realize that I really don&#x27;t understand something: what do people who are profoundly anti-gentrification want? The argument that I see usually goes like this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Rich people are moving into a traditionally mixed neighborhood&lt;&#x2F;li&gt;
&lt;li&gt;The big spike in demand drastically drives up rent&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Normal&quot; folk can&#x27;t afford to live there (usually &quot;normal&quot; is defined as &quot;poor and racially diverse&quot;, sometimes it&#x27;s instead defined as &quot;people who&#x27;ve lived here longer than these whippersnappers&quot;)&lt;&#x2F;li&gt;
&lt;li&gt;This is bad&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I generally agree that a lack of diversity is bad but, uh, what&#x27;s would society do instead?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Is the implied message &lt;q&gt;rich people should stick to their own neighborhoods and leave us alone&lt;&#x2F;q&gt;? If so, isn&#x27;t that actually, uh, even worse in terms of social stratification? That seems worse...&lt;&#x2F;li&gt;
&lt;li&gt;Is &quot;anti-gentrification&quot; really just a slightly less blunt way to say &quot;classist&quot;? Would people who protest against gentrification prefer that there just weren&#x27;t rich (or, in the case of just about all the tech employees I know who get yelled at, slightly above the San Francisco median income) people and that all of that money was being redirected to existing city residents?&lt;&#x2F;li&gt;
&lt;li&gt;Is the primary request that the nouveau riche give back to their communities more? What would that entail, ideally? Is it more a question of civic engagement or of financial contribution?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;urbanhabitat.org&#x2F;node&#x2F;919&quot;&gt;Some sources&lt;&#x2F;a&gt; seem to indicate that it&#x27;s just a desire for more affordable housing development in existing space, but what does that mean? In a fixed-size city (particularly one like SF where it&#x27;s not feasible to build upwards), housing is largely a zero-sum game. Do people just want larger cities? Because I&#x27;ve lived in LA county, and if you think that communities get better when they start to sprawl out, you&#x27;re crazy-sauce.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I really don&#x27;t know. I understand the anger that someone would have at no longer being able to afford their homes, but I also understand that there are way, way more people and way, way more jobs than there were 20 years ago in the same 49 square miles of San Francisco, and I don&#x27;t know what people think the right &quot;fix&quot; for that is. I can&#x27;t really imagine protesting something when I didn&#x27;t have any idea on how to make it better because that&#x27;s just unproductive and incoherent, so I imagine there are plans.&lt;&#x2F;p&gt;
&lt;p&gt;I imagine this could be a hella-inflamatory post, but a lot of the time I read (and see) things that seem to be arguing that I literally do not have a right to live in the city, and that stings a bit. I figure that I have enough people who might see this link that I might be sent something interesting. Feel free to send me any (preferably coherent) links via comments on this post, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.facebook.com&#x2F;roguelazer&quot;&gt;Facebook&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Roguelazer&quot;&gt;Twitter&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alpha.app.net&#x2F;roguelazer&quot;&gt;ADN&lt;&#x2F;a&gt;, or whatever. If I get good ones, I&#x27;ll write a follow-up post with what I&#x27;ve learned.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;[update 2013-07-26T11:25-0700]&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A response that I&#x27;ve gotten a couple of times so far:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A big part of the argument against gentrification is about changing &quot;character&quot;, not just about economic disfortune. That seems really subjective, especially since &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Goobergunch&#x2F;status&#x2F;360819304930881536&quot;&gt;&quot;character&quot; isn&#x27;t fixed&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A few of the things that I&#x27;ve heard as mitigations that I don&#x27;t think are super-effective:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rent control
&lt;ul&gt;
&lt;li&gt;Pros: Keeps people in their homes. Fairly easy to understand.&lt;&#x2F;li&gt;
&lt;li&gt;Cons: Makes it extremely hard for people to move. Provides a perverse incentive to landlords to evict people rather than working to find a mutually-equitable rent.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Affordable housing requirements (often Section 8) in new construction
&lt;ul&gt;
&lt;li&gt;Pros: ensures economically-diverse residents&lt;&#x2F;li&gt;
&lt;li&gt;Cons: only applies to new construction; often only helps very-low-income people, but doesn&#x27;t specifically help with economic spectrum diversity, racial diversity, or other issues&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Denser building
&lt;ul&gt;
&lt;li&gt;Pros: More units means more room for everyone&lt;&#x2F;li&gt;
&lt;li&gt;Cons: Skyscrapers hurt neighborhood cohesion at least as much as demographic changes. Architecturally and politically difficult in a lot of areas (although &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.sf-planning.org&#x2F;index.aspx?page=2223&quot;&gt;maybe it&#x27;s all NIMBYism&lt;&#x2F;a&gt;)?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An anecdote about rent control: as of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;factfinder2.census.gov&#x2F;faces&#x2F;tableservices&#x2F;jsf&#x2F;pages&#x2F;productview.xhtml?pid=ACS_11_5YR_DP04&quot;&gt;2007-2011 Census ACS&lt;&#x2F;a&gt;, the median gross rent in my zip code was $859±64. When I was looking for housing in 2010, the median asking price was much more than double that. Essentially, with rent control, rather than have everyone pay a market price of $900, some people pay $400 and some pay $2000. And I&#x27;m as much of a hypocrite as possible here, since equivalent units in my building now rent for more than $1000 per month over what I pay. I would be very interested in an economic study that tried to analyze how much rent control policies encourage higher average new-tenant rents as landlords try to keep up with rising mean per-square-foot costs.&lt;&#x2F;p&gt;
&lt;p&gt;I am still looking for articles without much success, although I did enjoy &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.salon.com&#x2F;1999&#x2F;10&#x2F;29&#x2F;yuppies&#x2F;&quot;&gt;this Salon article&lt;&#x2F;a&gt;... from 1999. It&#x27;s nice to know that nothing ever changes...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>BART strike remarks</title>
          <pubDate>Wed, 03 Jul 2013 16:45:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/bart-strike-remarks/</link>
          <guid>https://www.roguelazer.com/blog/bart-strike-remarks/</guid>
          <description xml:base="https://www.roguelazer.com/blog/bart-strike-remarks/">&lt;p&gt;&lt;em&gt;This post is primarily a response to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.thenation.com&#x2F;blog&#x2F;175063&#x2F;bart-strike-another-instance-media-portraying-workers-greedy&quot;&gt;the article on the BART Strike
from The Nation&lt;&#x2F;a&gt; that seems to be making the rounds on Facebook,
Twitter, and all of the other blagoblag echo chambers. I&#x27;ve adopted this
post from a Facebook message conversation I had, so it might be a little
strangely-phrased. I apologize for any inaccuracies, I do not speak for
my employer, and all of that necessary prelude.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I found the Nation article on the BART strike this week frustrating and
inaccurate and, because &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;xkcd.com&#x2F;386&#x2F;&quot;&gt;someone is wrong on the Internet&lt;&#x2F;a&gt;, I had to
write a response. The BART strike is one of the more visible bits of
organized labor work in the last few years, and it makes me embarassed
as a stereotypical liberal that those defending to it are doing such a
bad job. If the union is striking for more money, then say that. But
don&#x27;t misrepresent statistics to justify it. And if the union is
striking for other reasons, then it would be lovely as a Bay Area
resident and news-reader to know exactly what those reasons are. This
well-disseminated article is nothing more than one-sided,
poorly-researched editoralism masquerading as news.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>GPG (2013 Update)</title>
          <pubDate>Fri, 14 Jun 2013 09:30:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/gpg-2013/</link>
          <guid>https://www.roguelazer.com/blog/gpg-2013/</guid>
          <description xml:base="https://www.roguelazer.com/blog/gpg-2013/">&lt;p&gt;In light of all of the hullabaloo about &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.guardian.co.uk&#x2F;world&#x2F;2013&#x2F;jun&#x2F;06&#x2F;us-tech-giants-nsa-data&quot;&gt;PRISM&lt;&#x2F;a&gt; and other spying
technology, I thought it&#x27;d be good to remind all of your dear readers
that we&#x27;ve had the technology to ensure private communications on the
Internet for &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cypherspace.org&#x2F;adam&#x2F;timeline&#x2F;&quot;&gt;22 years&lt;&#x2F;a&gt; in the form of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pretty_Good_Privacy&quot;&gt;Pretty Good Privacy&lt;&#x2F;a&gt; (and
the much-more-commonly-used implementation, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnupg.org&#x2F;&quot;&gt;GnuPG&lt;&#x2F;a&gt;). Ars Technica had
an &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;arstechnica.com&#x2F;security&#x2F;2013&#x2F;06&#x2F;encrypted-e-mail-how-much-annoyance-will-you-tolerate-to-keep-the-nsa-away&#x2F;&quot;&gt;okay article&lt;&#x2F;a&gt; about e-mail encryption with PGP which I recommend
reading, although you should keep in mind that most security
professionals would consider infrastructural PKI like SSL and S&#x2F;MIME to
be compromised by nation-state-level adversaries (and all associated
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Military%E2%80%93industrial_complex&quot;&gt;MIC&lt;&#x2F;a&gt; contractors).&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, my GPG Key ID is &lt;code&gt;0x568427E9480196A4&lt;&#x2F;code&gt; and it&#x27;s in all of the
regular keyservers (as well as being at
&lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.asc&quot;&gt;files.roguelazer.com&#x2F;roguelazer.asc&lt;&#x2F;a&gt;), and my previous key
(&lt;del&gt;&lt;code&gt;0xFE082A4CFD5AB3E6&lt;&#x2F;code&gt;&lt;&#x2F;del&gt;) has been revoked with revocation information
also pushed to all regular keyservers. Obviously, you shouldn&#x27;t trust my
key unless its signatures fall in your Web of Trust, but I&#x27;d be glad to
participate in any bay-area signing parties (or perhaps a key-signing
Google Hangout). If only software companies would start producing
software that properly supports end-to-end encryption and signing...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Changes</title>
          <pubDate>Mon, 08 Apr 2013 00:05:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/changes/</link>
          <guid>https://www.roguelazer.com/blog/changes/</guid>
          <description xml:base="https://www.roguelazer.com/blog/changes/">&lt;p&gt;Hello dear readers. I just thought i&#x27;d give you a life update, since
it&#x27;s been nearly a year since my last post. In no particular order, some
things that have happened since then:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I&#x27;ve been dating a lovely young woman for the last eight or so
months who actually gives me a reason to go home from work at the
end of the day. Which is a refreshing change!&lt;&#x2F;li&gt;
&lt;li&gt;I got some new musical instruments and computers and things (my
custom shop &#x27;52 reissue tele is pretty much the most pleasant guitar
I&#x27;ve ever played, even if it is ridiculously extravagant).&lt;&#x2F;li&gt;
&lt;li&gt;I&#x27;m leaving my position at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.yelp.com&quot;&gt;yelp&lt;&#x2F;a&gt; this Friday and moving to
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.uber.com&#x2F;&quot;&gt;uber&lt;&#x2F;a&gt;. I&#x27;m bitter enough to be tired of the petty politics at the
place I&#x27;m leaving, but optimistic enough to think that there won&#x27;t
be any at the place I&#x27;m going to. It&#x27;s a... delicate balance.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I&#x27;m sure I&#x27;ll come back and post tech things here again at some point
but, well, there&#x27;s my annual personal update. Cheers!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>&lt;3 sed</title>
          <pubDate>Fri, 27 Apr 2012 17:41:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/heart-sed/</link>
          <guid>https://www.roguelazer.com/blog/heart-sed/</guid>
          <description xml:base="https://www.roguelazer.com/blog/heart-sed/">&lt;p&gt;I wrote a fun sed script today:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sed -E -n -e &amp;#39;:t ; s&#x2F;(.{21})(.*)&#x2F;\\bf\{\1\}\n\2&#x2F; ; p ; s&#x2F;\\bf\{(.*)\}\n.*&#x2F;\1&#x2F; ; h ; :q { n ; G ; s&#x2F;(.{21})(.*)\n\1&#x2F;\2&#x2F; ; tp ; s&#x2F;(.+)\n.*&#x2F;\1&#x2F; ; bt} ; :p { P ; bq }&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Short, but effective. Can you figure out what it does?&lt;&#x2F;p&gt;
&lt;p&gt;(solution after the break)&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Link: PHP sucks</title>
          <pubDate>Tue, 10 Apr 2012 08:29:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/link-php-sucks/</link>
          <guid>https://www.roguelazer.com/blog/link-php-sucks/</guid>
          <description xml:base="https://www.roguelazer.com/blog/link-php-sucks/">&lt;p&gt;One of my co-workers wrote up &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;eev.ee&#x2F;blog&#x2F;2012&#x2F;04&#x2F;09&#x2F;php-a-fractal-of-bad-design&#x2F;&quot;&gt;this gem on why PHP sucks&lt;&#x2F;a&gt;. I don&#x27;t
agree with his points (having a &quot;development server&quot; isn&#x27;t an important
or even particularly useful feature of a framework, much less a
language; prepared statements aren&#x27;t the pinnacle of SQL), but he does
do a good job of showing off some of PHP&#x27;s more spectacular failings.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m naming all of my PHP functions &lt;code&gt;__lambda_object&lt;&#x2F;code&gt; now.&lt;&#x2F;p&gt;
&lt;p&gt;(yes; I do appreciate the irony of linking to his post from a &lt;ins&gt;formerly&lt;&#x2F;ins&gt; PHP site)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Debt Free Since 2012</title>
          <pubDate>Fri, 10 Feb 2012 01:09:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/debt-free-since-2012/</link>
          <guid>https://www.roguelazer.com/blog/debt-free-since-2012/</guid>
          <description xml:base="https://www.roguelazer.com/blog/debt-free-since-2012/">&lt;p&gt;As of today, February 10, 2012, I am now officially debt-free. I decided
to use my tax refund to pay off the rest of my student loans, which have
been sucking down thousands of dollars a month since I graduated. Here
are the results:&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;debt-free-since-2012&amp;#x2F;Screen-Shot-2012-02-10-at-1.01.19-AM.png&quot; alt=&quot;debt status&quot;  &#x2F;&gt;
  
&lt;p&gt;Yep. It took a few days longer than expected, because Sallie Mae is
terrible at ACH. And, of course, their obnoxious rounding means that at
some point in the next six months, I&#x27;m going to get a cheque from Sallie
Mae for 80¢ (presumably plus 6.8% interest). But it&#x27;s pretty nice to be
free...&lt;&#x2F;p&gt;
&lt;p&gt;This is going to be the worst post ever for attracting spam-bots, isn&#x27;t
it?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>My Storage Problem</title>
          <pubDate>Sat, 28 Jan 2012 19:07:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/my-storage-problem/</link>
          <guid>https://www.roguelazer.com/blog/my-storage-problem/</guid>
          <description xml:base="https://www.roguelazer.com/blog/my-storage-problem/">&lt;p&gt;Storage is cheap, or so we&#x27;re told. Amazon will sell me storage for
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;aws.amazon.com&#x2F;s3&#x2F;pricing&#x2F;&quot;&gt;$0.055&#x2F;GB&#x2F;month&lt;&#x2F;a&gt; in “the cloud”; 3.5&quot; hard drives are hovering
around $0.06&#x2F;GB. However, my laptop has a little 250GB SATA drive that
is (a) slow and (b) getting full. So I desire to replace it with a fast
little SSD. But that raises the question of what to do with my stuff.
I&#x27;m asking you, Internet. Details below the fold.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>60,000 scrobbles</title>
          <pubDate>Fri, 06 Jan 2012 11:02:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/60000-scrobbles/</link>
          <guid>https://www.roguelazer.com/blog/60000-scrobbles/</guid>
          <description xml:base="https://www.roguelazer.com/blog/60000-scrobbles/">&lt;p&gt;I used to post these on Facebook as Notes, but since the Timeline
refactor, I frankly have no idea how to use Notes; so I guess I&#x27;ll just
post on my own blog. I use &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;last.fm&quot;&gt;last.fm&lt;&#x2F;a&gt; (&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.last.fm&#x2F;user&#x2F;Roguelazer&quot;&gt;me&lt;&#x2F;a&gt;) to track my
music-listening habits (and sometimes for other things). As of some time
recently, I&#x27;ve passed 60,000 scrobbled plays since 2006. Yay!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;http:&#x2F;&#x2F;www.roguelazer.com&#x2F;wp-content&#x2F;uploads&#x2F;2012&#x2F;01&#x2F;scrobbles.png&quot; alt=&quot;me&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s a graph I made (click for ps version; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnuplot.info&#x2F;&quot;&gt;gnuplot&lt;&#x2F;a&gt; continues to be
the best thing ever):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;lastfm.ps&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;www.roguelazer.com&#x2F;wp-content&#x2F;uploads&#x2F;2012&#x2F;01&#x2F;lastfm.png&quot; alt=&quot;scrobbles&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cheers, all.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Merry 2012</title>
          <pubDate>Tue, 03 Jan 2012 10:32:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/merry-2012/</link>
          <guid>https://www.roguelazer.com/blog/merry-2012/</guid>
          <description xml:base="https://www.roguelazer.com/blog/merry-2012/">&lt;p&gt;I know I&#x27;m a bit late to the party, but Merry 2012. As a sort of
celebration, here&#x27;s my favorite animated GIF of all time (courtesy of
Evan a long time ago):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;stickhorse.gif&quot; alt=&quot;a horse&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Maybe I&#x27;ll actually write some useful content this year.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Kindle vs. Kindle</title>
          <pubDate>Thu, 29 Sep 2011 21:59:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/kindle-vs-kindle/</link>
          <guid>https://www.roguelazer.com/blog/kindle-vs-kindle/</guid>
          <description xml:base="https://www.roguelazer.com/blog/kindle-vs-kindle/">







&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;kindle-vs-kindle&amp;#x2F;kindle-4.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;kindle-vs-kindle&amp;#x2F;kindle-4.jpg&quot; alt=&quot;Kindle 4&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;So, you &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.engadget.com&#x2F;2011&#x2F;09&#x2F;28&#x2F;amazon-kindle-2011-impressions&#x2F;&quot;&gt;might&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;thisismynext.com&#x2F;2011&#x2F;09&#x2F;28&#x2F;amazon-kindle-fire-touch-79-classic&#x2F;&quot;&gt;have&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;gizmodo.com&#x2F;5844649&#x2F;everything-you-need-to-know-about-the-new-kindles&quot;&gt;heard&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nytimes.com&#x2F;2011&#x2F;09&#x2F;29&#x2F;technology&#x2F;amazon-unveils-tablet-that-undercuts-ipads-price.html&quot;&gt;about&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.amazon.com&quot;&gt;Amazon&#x27;s&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.bit-tech.net&#x2F;news&#x2F;hardware&#x2F;2011&#x2F;09&#x2F;29&#x2F;amazon-launches-new-kindles-and-kindle-fire&#x2F;1&quot;&gt;new&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;arstechnica.com&#x2F;gadgets&#x2F;news&#x2F;2011&#x2F;09&#x2F;amazon-to-unveil-199-70inch-kindle-fire-tablet.ars&quot;&gt;Kindles&lt;&#x2F;a&gt;. They&#x27;re kind of a big thing. There&#x27;s even talk that
&lt;q&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;gizmodo.com&#x2F;5844863&#x2F;jeff-bezos-is-the-new-steve-jobs&quot;&gt;Jeff Bezos is the New Steve Jobs&lt;&#x2F;a&gt;&lt;&#x2F;q&gt;, which is kind of silly, but
serves to underscore the point that Amazon is big news these days.
Anyway, you might also remember from &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;recipe-to-crash-a-kindle&#x2F;&quot;&gt;an earlier post of mine&lt;&#x2F;a&gt; that I
have a Kindle 2. Well, when I saw the new Kindles, I couldn&#x27;t resist. So
now I also have a Kindle 4 (non-touch). It&#x27;s pretty awesome. Let&#x27;s start
with some sexy comparison shots (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;albums&#x2F;72157627660604549&quot;&gt;flickr set&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;








&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;kindle-vs-kindle&amp;#x2F;kindle-vs-kindle.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;kindle-vs-kindle&amp;#x2F;kindle-vs-kindle.jpg&quot; alt=&quot;Kindle vs Kindle&quot; class=&quot;cimg halfimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;The most stunning thing about the new Kindle is, without a doubt, its
size. My old Kindle 2 is 290g, my new Kindle is 160g. That&#x27;s a very
noticeable difference. I imagine that most of the weight savings comes
from losing the useless keyboard. Which is, in turn, possible because
the screen refresh is approximately 90,000 times faster. In my
scientific opinion.&lt;&#x2F;p&gt;
&lt;p&gt;Aside from those hardware differences? It&#x27;s still a Kindle. The software
is the Kindle software (and now I know &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.linkedin.com&#x2F;in&#x2F;retzlaff&quot;&gt;one of the guys&lt;&#x2F;a&gt; who wrote it,
so I have somebody to blame for &lt;code&gt;java.lang.Integer&lt;&#x2F;code&gt; errors), which is
cool. There are some little tweaks, like the option to decrease
inter-line spacing, but it&#x27;s the same e-reader software that I know and
love. I&#x27;ve gotten two and a half years of great use out of my Kindle 2,
from reading the &lt;em&gt;Times&lt;&#x2F;em&gt; every morning on the subway from the 116th St.
station to the 14th St. station in 2009 through reading the &lt;em&gt;Times&lt;&#x2F;em&gt;
every morning while I ponder the San Francisco fog in 2011. Books are
awesome, and eBooks are eAwesome. For $109 (without ads), how can you
say no?&lt;&#x2F;p&gt;
&lt;p&gt;What about the other new Kindles, the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;Kindle-Touch-Wi-Fi-Ink-Display&#x2F;dp&#x2F;B005890G8Y&quot;&gt;Kindle Touch&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;Kindle-Color-Multi-touch-Display-Wi-Fi&#x2F;dp&#x2F;B0051VVOB2&quot;&gt;Kindle
Fire&lt;&#x2F;a&gt;? Well, I think the Touch is pretty ridiculous. I&#x27;ve never had an
urge to touch my Kindle&#x27;s screen to change the page. Why would I pay
$30 more for the privilege of touching the screen (and also the
&quot;privilege&quot; of 50g extra mass)? And the Kindle Fire is cool hardware for
an amazing price, but scary software. All the bad things I&#x27;ve said
recently about Chrome breaking the internet (with 60-second socket
timeouts and speculative prefetching) are nothing compared to the mess
that is &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;amazonsilk.wordpress.com&#x2F;&quot;&gt;Amazon Silk&lt;&#x2F;a&gt;. But that&#x27;s all a post that can wait until the
products are actually released next month. I have &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;ipad&#x2F;&quot;&gt;an iPad&lt;&#x2F;a&gt; and
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;touchpad&#x2F;&quot;&gt;a TouchPad&lt;&#x2F;a&gt;, so I don&#x27;t think I&#x27;m in dire need of any new tablet
computers for a little while.&lt;&#x2F;p&gt;
&lt;p&gt;Now, if you&#x27;ll excuse me, I think I should go read a book or something.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>TouchPad!</title>
          <pubDate>Fri, 02 Sep 2011 01:23:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/touchpad/</link>
          <guid>https://www.roguelazer.com/blog/touchpad/</guid>
          <description xml:base="https://www.roguelazer.com/blog/touchpad/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;touchpad&amp;#x2F;photo.jpg&quot; alt=&quot;TouchPad&quot; class=&quot;lfloat qimg&quot;  &#x2F;&gt;
  
&lt;p&gt;So,
I got one of the Internet-legendary $99 TouchPads (well,
$149 actually, but whatever). As some of you may know, I was an
enormous Palm fanboy during the 90&#x27;s. So it was pretty inevitable that I
would end up purchasing one of their WebOS products, even though there&#x27;s
not a lot in common between this and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;archive.computerhistory.org&#x2F;resources&#x2F;access&#x2F;physical-object&#x2F;2010&#x2F;08&#x2F;102716262.01.01.lg.JPG&quot;&gt;Jeff Hawkins&#x27; wooden cutout Palm Pilot&lt;&#x2F;a&gt;.
Anyhow, this is probably going to be the nerdiest review of
the TouchPad posted on the Internet. It mostly is concerned with
keyboard mappings. Enjoy!&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Rawr, Lion</title>
          <pubDate>Sat, 23 Jul 2011 19:33:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/rawr-lion/</link>
          <guid>https://www.roguelazer.com/blog/rawr-lion/</guid>
          <description xml:base="https://www.roguelazer.com/blog/rawr-lion/">&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;rawr-lion&amp;#x2F;apple_mac_os_x_lion-logo-285x300.png&quot; alt=&quot;Mac OS X Lion&quot; class=&quot;lfloat&quot;  &#x2F;&gt;
  
 If you&#x27;ve read any kind of tech news in the last few
days, you might&#x27;ve noticed that &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;&quot;&gt;Mac OS X 10.7 Lion&lt;&#x2F;a&gt; is out. I wasn&#x27;t
going to upgrade for a while, but then it launched and I did. So I&#x27;ve
been using Lion for a few days now, and I thought I&#x27;d join the endless
ranks of people on the Internet talking about Apple&#x27;s latest big cat.
I&#x27;m not really going to be much competition for the real tech writers,
so if you want to learn nearly everything about Lion, I recommend making
a pot of tea and sitting down to John Siracusa&#x27;s &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;arstechnica.com&#x2F;apple&#x2F;reviews&#x2F;2011&#x2F;07&#x2F;mac-os-x-10-7.ars&quot;&gt;latest tome&lt;&#x2F;a&gt;.
Otherwise, read on to see what I think of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;macosx&#x2F;whats-new&#x2F;features.html&quot;&gt;new features&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>n+1 years</title>
          <pubDate>Sun, 15 May 2011 22:56:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/n-plus-1-years/</link>
          <guid>https://www.roguelazer.com/blog/n-plus-1-years/</guid>
          <description xml:base="https://www.roguelazer.com/blog/n-plus-1-years/">&lt;p&gt;One year ago tomorrow, I &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;graduated&#x2F;&quot;&gt;graduated from college&lt;&#x2F;a&gt;. As my younger
friends graduated today (thanks for the quasi-livestream, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;#!&#x2F;vampirecoffee&quot;&gt;Skye&lt;&#x2F;a&gt;), I
actually realized this fact: it&#x27;s been a year. A year as one of the
dead. A year in the real world. It&#x27;s bloody strange. On some level, it&#x27;s
unbelievable that I&#x27;ve been out for a whole year. Graduation was just a
couple of weeks ago, wasn&#x27;t it? I can still remember lectures good and
bad, evenings in the muddhole, nights working in Platt, as though it
were all just yesterday. On another level, though, it almost feels like
I&#x27;ve been out forever. I have a life, and it fits me sort of like a
glove. I sit in my apartment and I feel like I&#x27;m home, and I really
don&#x27;t know when that started. I can remember the details of life in
college, but it no longer feels like I&#x27;m on a particularly protracted
vacation.&lt;&#x2F;p&gt;
&lt;p&gt;Looking back with an iota of distance, Mudd was a really transformative
place. I can look back on things I wrote a few years ago (hello &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;hello&#x2F;&quot;&gt;first post&lt;&#x2F;a&gt;),
and it seems really weird. Mudd is a place that tears you down
and builds you up in a shape that it finds amusing. Five years ago,
about to graduate from high school, I wouldn&#x27;t&#x27;ve been able to imagine
pulling an academic all-nighter. Nor would I be able to understand the
camaraderie of a research team, the bond of dorm-mates, or, well, you
get the idea. By the time I crossed the stage last year, it would&#x27;ve
been strange to me to go to bed on the same day I woke up.&lt;&#x2F;p&gt;
&lt;p&gt;And now? Things certainly have changed in the last year. Some for
better, some for worse. I still have a lot of friends, which is nice.
Some of them are even people who &lt;em&gt;didn&#x27;t&lt;&#x2F;em&gt; go to Mudd with me. But gods
know that nothing compares to having everybody you know or want to know
living within a few hundred yards of you. Now I have roughly as much
money as I could reasonably spend, which I suppose is a good thing. No
more problem sets, which is both a blessing and a curse. Yes, I still
have that dream sometimes where I&#x27;m in the exam for a class and I
realize that I&#x27;ve never done any of the homework or the reading, and
have no idea what the material is about. I know, it&#x27;s clichéd.&lt;&#x2F;p&gt;
&lt;p&gt;My gods, dear reader, books! Mudd spent four years drilling into my head
that books are those dense and mysterious things that you&#x27;ve got to read
until you can&#x27;t read any more just to keep on top of your classes. I&#x27;ve
been working hard to get past that — nearly up to 100 books read since
graduation, most of which are so light and irrelevant that you couldn&#x27;t
teach a class with them if you tried. That&#x27;s a pretty wonderful part of
the real world.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;5297933043&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm6.static.flickr.com&#x2F;5048&#x2F;5297933043_92a131d96c_m.jpg&quot; alt=&quot;Looking out from the top of my building&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Then, of course, there&#x27;s
the specifics of my situation. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.yelp.com&#x2F;careers&quot;&gt;Working at Yelp&lt;&#x2F;a&gt; is pretty good. It
certainly has its moments of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;twitpic.com&#x2F;382gjk&quot;&gt;fun&lt;&#x2F;a&gt;. And it provides me with plenty to
do, although when I try to work sane hours, everybody says I&#x27;m working
too much and should go home. Which is not necessarily wrong, but still
rankles a bit. Living alone in the city, that&#x27;s a more nuanced thing. I
love my apartment, and my neighborhood is pretty cool, but there&#x27;s no
getting around the fact that it&#x27;s pretty weird to live by yourself in
the real world. You have to remember to vacuum. And no matter how
delicious the food you cook is, there&#x27;s always dishes afterward. And you
have to work a bit to keep the antisocial factor from turning you into a
caricature of yourself. On the other hand, there are no other people to
bother you. Nobody complains if you play bad music, sleep weird hours,
or let the windowsills get dusty. My view (right) certainly is a lot
different than &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;2710981670&#x2F;in&#x2F;photostream&quot;&gt;my view a few years ago&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The last year has had a lot of crazy things happen in it. It&#x27;s also had
a lot of perfectly humdrum things. It&#x27;s life. Normal, plain, vanilla
life. Who&#x27;d&#x27;ve thought?&lt;&#x2F;p&gt;
&lt;p&gt;This isn&#x27;t a blog post that has a conclusion or a point. It isn&#x27;t a
guide or a manual. It&#x27;s just an expression of how profoundly strange it
is to be an adult, one year in.&lt;&#x2F;p&gt;
&lt;p&gt;Good night, reader.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: Unix Time</title>
          <pubDate>Sun, 06 Mar 2011 21:43:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-unix-time/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-unix-time/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-unix-time/">&lt;p&gt;As the unix-savvy among you probably know, there is One True Way to tell
the time: the number of seconds elapsed since midnight on January 1,
1970 +0000. It&#x27;s an extremely convenient way for computers to represent
the time, since it&#x27;s just an integer that goes up. There&#x27;s no parsing to
be done, and arithmetic is just regular math. If you want a
brain-numbingly-detailed overview, Wikipedia&#x27;s article on &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Unix_Time&quot;&gt;unix time&lt;&#x2F;a&gt;
is, as usual, sufficient.&lt;&#x2F;p&gt;
&lt;p&gt;However, what I&#x27;d like to talk about here is converting back and forth
between unix time and meatware time. I imagine that when your beard gets
long and grey enough, you are actually able to think in unix timestamps.
However, for those of us who have not yet reached that level, there&#x27;s
the traditional unix command &lt;code&gt;date&lt;&#x2F;code&gt;. &lt;em&gt;(Forewarning: some of the examples
I will give here may only be applicable for the &lt;code&gt;date&lt;&#x2F;code&gt; that is part of
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;coreutils&#x2F;&quot;&gt;GNU Coreutils&lt;&#x2F;a&gt;. Mea culpa.)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The simplest thing you might want to do is find out what the current
time is as a unix timestamp:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% date &amp;#39;+%s&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1299476266&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As you can see, we haven&#x27;t run out of 32-bit integer space yet.&lt;&#x2F;p&gt;
&lt;p&gt;However, what about going the other way? Sure, you could write a
C&#x2F;perl&#x2F;python&#x2F;etc. program that uses some variant on
`ctime(time(NULL))`, but that&#x27;s cheating. There must be a builtin?
Maybe something that&#x27;s not really documented? Lo, there is!&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% date -d @1299476266&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Sun Mar  6 21:37:46 PST 2011&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s not in the &lt;code&gt;man&lt;&#x2F;code&gt; or &lt;code&gt;info&lt;&#x2F;code&gt; pages, but there it is. The trusty
@-sign solves your problem.&lt;&#x2F;p&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>sietchtabr reboot</title>
          <pubDate>Sun, 27 Feb 2011 12:56:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/sietchtabr-reboot/</link>
          <guid>https://www.roguelazer.com/blog/sietchtabr-reboot/</guid>
          <description xml:base="https://www.roguelazer.com/blog/sietchtabr-reboot/">&lt;p&gt;I have a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;prgmr.com&#x2F;xen&#x2F;&quot;&gt;VM slice&lt;&#x2F;a&gt; that I use to run DNS, a bzflag server, and a few
other incidental things. This is what I see on it right now:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% uptime&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;12:05:13 up 450 days, 15:17,  5 users,  load average: 1.93, 1.35, 0.60&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It&#x27;s currently running &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.debian.org&quot;&gt;Debian&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.debian.org&#x2F;releases&#x2F;lenny&#x2F;&quot;&gt;lenny&lt;&#x2F;a&gt;, but I decided that I wanted
to get with the times and upgrade it to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.debian.org&#x2F;releases&#x2F;squeeze&#x2F;&quot;&gt;squeeze&lt;&#x2F;a&gt;. As expected the
upgrade was fairly painless (took me a bit to figure out that booting by
label was broken and I needed to boot by disk UUID), but it&#x27;s kind of
disheartening to see this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% uptime&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;12:48:44 up 3 min,  1 user,  load average: 0.30, 0.27, 0.11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>Linux Tip of the Day: SystemTap</title>
          <pubDate>Wed, 16 Feb 2011 09:08:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/linux-tip-of-the-day-systemtap/</link>
          <guid>https://www.roguelazer.com/blog/linux-tip-of-the-day-systemtap/</guid>
          <description xml:base="https://www.roguelazer.com/blog/linux-tip-of-the-day-systemtap/">&lt;p&gt;The other day, one of my co-workers, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;eklitzke&quot;&gt;Evan&lt;&#x2F;a&gt;, presented an interesting
problem to me. Every day, at some point, a file named &lt;code&gt;]&lt;&#x2F;code&gt; gets created
in his home directory. He assumes that it is being created by a script
with a typo in it... somewhere. But how to find out? It&#x27;s a hard thing
to grep for.&lt;&#x2F;p&gt;
&lt;p&gt;My initial solution was to use &lt;code&gt;inotify&lt;&#x2F;code&gt; (which you might remember from
&lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;nix-tip-of-the-day-waiting-in-scripts&#x2F;&quot;&gt;a previous post&lt;&#x2F;a&gt;) combined with &lt;code&gt;libnotify&lt;&#x2F;code&gt; to alert him if it
happens while he was at his computer. It looked like the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #9ECE6A);&quot;&gt; inotifywait&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #FF9E64);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2B5581, #E0AF68);&quot;&gt;-exclude=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;.*[^]]$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #C0CAF5);&quot;&gt;HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#212121, #89DDFF);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #C0CAF5);&quot;&gt; notify-send&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;something just created ]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is an okay solution (especially in that it took almost no time to
write), but it doesn&#x27;t actually give any useful information unless
you&#x27;re sitting at the computer and can do some manual debugging (to try
and find what processes are in cron for that time, maybe do an lsof). I
could add those things to the script, but there&#x27;s still enough of a race
condition inherent in shell programming that it&#x27;s unlikely they&#x27;d be
successful. How to solve this problem?&lt;&#x2F;p&gt;
&lt;p&gt;Enter &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sourceware.org&#x2F;systemtap&#x2F;&quot;&gt;SystemTap&lt;&#x2F;a&gt;. SystemTap is like Solaris&#x27;s &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;DTrace&quot;&gt;DTrace&lt;&#x2F;a&gt;: a tool for
monitoring and acting on events a the kernel level, without the added
bulk of a debugger. Except SystemTap is cooler. It uses the really neat
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;git.kernel.org&#x2F;?p=linux&#x2F;kernel&#x2F;git&#x2F;torvalds&#x2F;linux-2.6.git;a=blob_plain;f=Documentation&#x2F;kprobes.txt;hb=HEAD&quot;&gt;kprobes&lt;&#x2F;a&gt; functionality to tap into the kernel (which I encourage any
of you familiar with systems-level programming to read up on, because
they&#x27;re a lovely hack), it has a clean and typesafe compiled language,
and it has a decent standard library.&lt;&#x2F;p&gt;
&lt;p&gt;Installation of SystemTap varies based on distribution, but it&#x27;s
described in pretty good detail on the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sourceware.org&#x2F;systemtap&#x2F;wiki&quot;&gt;SystemTap wiki&lt;&#x2F;a&gt;. Generally,
you install debugging symbols for your kernel and the userspace
systemtap compiler and runtime. Once you have it installed, you can
probably add yourself to a group in order to be able to run stap
scripts, or just do it as root. Either way.&lt;&#x2F;p&gt;
&lt;p&gt;So, what did my solution look like in SystemTap? Behold:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;probe syscall.open {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    if ((filename == &amp;quot;]&amp;quot;) || (filename == &amp;quot;&#x2F;home&#x2F;evan&#x2F;]&amp;quot;)) printf(&amp;quot;%s by %s (pid %d), parent %s (ppid %d)\n&amp;quot;, filename, execname(), pid(), pexecname(), ppid())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Run that under &lt;code&gt;stap&lt;&#x2F;code&gt; and you get a nice summary of the what is
creating the files. Straightforward, and without crippling overhead
(just two strcmps per open call). Cool beans!&lt;&#x2F;p&gt;
&lt;p&gt;Of course, this is just the tip of what you can do with SystemTap. For
example, Debian Developer&#x2F;Mozilla Contributor &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;glandium.org&#x2F;&quot;&gt;Mike Hommey&lt;&#x2F;a&gt; wrote up
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;glandium.org&#x2F;blog&#x2F;?p=1476&quot;&gt;a good summary on tracking disk I&#x2F;O with SystemTap&lt;&#x2F;a&gt;. And SystemTap
provides a good base of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;sourceware.org&#x2F;systemtap&#x2F;examples&#x2F;&quot;&gt;example scripts&lt;&#x2F;a&gt; for your tracing pleasure.&lt;&#x2F;p&gt;
&lt;p&gt;Feel free to let me know if y&#x27;all find any other cool ways to use this
technology.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>A word on dreams</title>
          <pubDate>Mon, 31 Jan 2011 10:56:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/a-word-on-dreams/</link>
          <guid>https://www.roguelazer.com/blog/a-word-on-dreams/</guid>
          <description xml:base="https://www.roguelazer.com/blog/a-word-on-dreams/">&lt;p&gt;We use the terms &quot;bad dream&quot; and &quot;nightmare&quot; almost synonymously. I
contend that this is a frightfully naïve perspective. When we wake from
a nightmare, we shortly realize that the floor isn&#x27;t made of spiders,
that all of the clowns are safely at the circus. But a dream in which we
are happy... ah! Such a dream can color the real world world a darker
shade long after the dreamer has awoken. These are truly the bad dreams.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Firefox 4 and Vimperator 3</title>
          <pubDate>Thu, 27 Jan 2011 19:04:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/firefox-4-and-vimperator-3/</link>
          <guid>https://www.roguelazer.com/blog/firefox-4-and-vimperator-3/</guid>
          <description xml:base="https://www.roguelazer.com/blog/firefox-4-and-vimperator-3/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;firefox-4-and-vimperator-3&amp;#x2F;firefox-128.png&quot; alt=&quot;firefox&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;I&#x27;ve been using Google Chrome&#x27;s dev channel for the past year or so as
my primary browser, but between some &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;chromium&#x2F;issues&#x2F;detail?id=69420&quot;&gt;questionable aesthetic
decisions&lt;&#x2F;a&gt; and Chrome&#x27;s tendency to segfault every hour or so for the
last few dev releases, I decided that it&#x27;s time to give up on the faster
browser in exchange for the usable browser. Toward that end, I&#x27;m going
back to Firefox. I hear that Firefox 4 is the next cool thing, so I set
it up on my work machine (4.0b10pre, if you&#x27;re interested). And, of
course, since I am both a die-hard &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.vim.org&quot;&gt;vim&lt;&#x2F;a&gt; user and a big fan of the
keyboard, I&#x27;ve gone back to my old friend &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;vimperator.org&quot;&gt;vimperator&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I had used vimperator with Firefox 4 briefly a couple of months ago, but
found it to be most unsatisfactory. I am happy to report that they have
resolved all of the concerns I had with the version 3 alphas, and it&#x27;s
now way better than 2.x was under Firefox 3. Of course, their &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;code.google.com&#x2F;p&#x2F;vimperator-labs&#x2F;wiki&#x2F;Vimperator3DesignGoals&quot;&gt;Design
Goals&lt;&#x2F;a&gt; for v3 are really scary and seem like they&#x27;d neuter the project
in the name of making it more “friendly”. Bu, for now, it&#x27;s pretty
awesome. That said, it&#x27;s not perfect out of the box, so I&#x27;ve been
working on a nice &lt;code&gt;~&#x2F;.vimperatorrc&lt;&#x2F;code&gt;. You can find the latest version at
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;db.tt&#x2F;rfYqrRE&quot;&gt;this dropbox URL&lt;&#x2F;a&gt;, but I thought I&#x27;d post an annotated version inline
as well.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set act=addons,downloads,extoptions,help,quickmark&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set cpt=slt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set go=br&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set hlsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set stal=2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;autocmd LocationChange .* js modes.passAllKeys = &#x2F;mail\.google\.com&#x2F;.test(buffer.URL)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;autocmd LocationChange mail\\.google\\.com :set editor=&amp;quot;gvim -f -c &amp;#39;set ft=mail&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;command! -nargs=? -description=&amp;quot;Pin the given tab&amp;quot; pin javascript config.tabbrowser.pinTab(tabs.getTab(&amp;lt;args&amp;gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;command! -nargs=? -description=&amp;quot;Unpin the given tab&amp;quot; unpin javascript config.tabbrowser.unpinTab(tabs.getTab(&amp;lt;args&amp;gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nmap gp :pin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nmap gu :unpin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The first block sets up some useful parameters: it disables
auto-focusing new tabs, it disables completion of local filenames (which
is still dog-slow under Firefox 4), it disables the bulky, ugly toolbar,
it turns on search highlighting, and it forces the tab-bar to always be
shown.&lt;&#x2F;p&gt;
&lt;p&gt;The middle block ensures that I can still use keyboard shortcuts on
Gmail, and that the file-type is set correctly when editing mail in an
external editor from Gmail. Both of these lines are ganked from the
Vimperator documentation.&lt;&#x2F;p&gt;
&lt;p&gt;The last block sets up commands to use the new “App Tab”s in Firefox 4.
These behave like pinned tabs in Chrome, and I use them a lot.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, if you anticipate working a lot on a &lt;code&gt;~&#x2F;.vimperatorrc&lt;&#x2F;code&gt;, you
may find it useful to install the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vimperator&#x2F;vimperator.vim&quot;&gt;vim syntax file&lt;&#x2F;a&gt;. It&#x27;s a little out
of date (doesn&#x27;t have all of the Vimperator 3 configuration options),
but it&#x27;s better than nothing. To install it, drop the linked file into
&lt;code&gt;~&#x2F;.vim&#x2F;syntax&#x2F;&lt;&#x2F;code&gt; and add the following to your &lt;code&gt;~&#x2F;.vimrc&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;au BufRead,BufNewFile \.vimperatorrc set filetype=vimperator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;au Syntax vimperator source $HOME&#x2F;.vim&#x2F;syntax&#x2F;vimperator.vim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Cheers!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: Waiting in Scripts</title>
          <pubDate>Sat, 04 Dec 2010 16:22:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-waiting-in-scripts/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-waiting-in-scripts/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-waiting-in-scripts/">&lt;p&gt;Scripting is what makes Unix-like operating systems great. Every *nix,
be it Linux, BSD, OS X, AIX, Solaris, or whatever other random
distribution you can come up with, comes with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;bash&#x2F;&quot;&gt;a capable shell&lt;&#x2F;a&gt;
(&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.zsh.org&#x2F;&quot;&gt;or&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.mirbsd.org&#x2F;mksh.htm&quot;&gt;three&lt;&#x2F;a&gt;) and a good set of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;coreutils&#x2F;&quot;&gt;basic utilities&lt;&#x2F;a&gt;. Where a
Windows administrator has to either fall to the horror that is Batch
files, write code in a big, heavy programming language language, or
submit to the terrible dominance of “management utilities”, a Unix
system administrator has tons of the tools at his disposal to fix and
automate things. I could talk about scripting forever (it is a
substantial portion of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.yelp.com&#x2F;careers?jvi=oK6tVfwY,Job&quot;&gt;my job&lt;&#x2F;a&gt;), but today I&#x27;m just going to talk
about one small facet: waiting for things to happen.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>What I Want: The Moonbat List</title>
          <pubDate>Wed, 03 Nov 2010 01:31:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/what-i-want-the-moonbat-list/</link>
          <guid>https://www.roguelazer.com/blog/what-i-want-the-moonbat-list/</guid>
          <description xml:base="https://www.roguelazer.com/blog/what-i-want-the-moonbat-list/">&lt;p&gt;It&#x27;s 11:39PM on the eve of the Great Tea Revolt. As I sit here, fresh
off of my 12-hour shift at work, the national media is reporting
headlines like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nytimes.com&#x2F;2010&#x2F;11&#x2F;03&#x2F;us&#x2F;politics&#x2F;03elect.html&quot;&gt;G.O.P. Captures House&lt;&#x2F;a&gt; and &quot;Midterm Train Wreck&quot;; the
Republicans (particularly in their hard-right Tea Party libertarian
wing) are winning this battle. And I thought to myself, &quot;You know what
the world needs? More amateur political commentary!&quot; So here&#x27;s my
wingnut list, my moonbat list, my
this-will-be-embarrassing-if-I-ever-run-for-office list. Here&#x27;s what I
wish the country, and the world could do. It&#x27;s no more achievable than
are the Randian dreams of a world without government where the poor die
in gutters and the rich get richer (oh wait...), but, hey, one can
dream.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;social-policy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#social-policy&quot; aria-label=&quot;Anchor link for: social-policy&quot;&gt;Social Policy&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I think I have a pretty straightforward idea for how basic social
policies should work: if you&#x27;re a legal adult, of legal sound mind, you
can do whatever you want to yourself and with other consenting legal
adults. Want to smoke random ganja? Sure, just don&#x27;t do it where other
people are picking up your second-hand smoke. Want to marry another man,
woman, or hermaphrodite? Knock yourself out. Think that a painless death
is preferable to months of pain at the hands of some obscure cancer?
That&#x27;s your call.&lt;&#x2F;p&gt;
&lt;p&gt;Government&#x27;s job is to mediate the interactions between people, to bring
us out of a Hobbesian state of nature, and to make our lives better.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;EDUCATION!&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt; We live in a world where it is a legitimate and
successful political strategy to portray your opponent as being too
smart. We live in a world that actively thinks knowledge is bad.
This points to a gaping error in our education system somewhere. My
coworker, the inimitable &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.jeremylatt.com&#x2F;&quot;&gt;Jeremy Latt&lt;&#x2F;a&gt; has some pretty wild ideas
about education. I&#x27;m not sure I agree with them, but I do know one
thing. The first thirteen years of my education (which is to say,
the thirteen years in the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;profiles.doe.mass.edu&#x2F;profiles&#x2F;general.aspx?topNavId=1&amp;amp;orgcode=00950000&amp;amp;orgtypecode=5&amp;amp;&quot;&gt;Fall River Public Schools&lt;&#x2F;a&gt;) were
wasted. I learned almost nothing compared to what I did in four
years at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.hmc.edu&quot;&gt;Mudd&lt;&#x2F;a&gt;. I was never challenged. I was herded like a sheep
into classes that I slept in because of my unerring ability to
parrot back what the teacher wanted to hear. And I was (and still
am) one of the people who actually gave a flying fuck about
learning, about weighty concepts like mathematics. The others? The
ones who weren&#x27;t being taught anything of value by the schools and
who weren&#x27;t motivated to learn on their own? I shudder to think of
where this recession is finding them. But I suspect it&#x27;s on the far
end of a welfare cheque. What we have now does a lot of things, but
what it doesn&#x27;t do is work.&lt;&#x2F;li&gt;
&lt;li&gt;Privacy is a legitimate right. I understand that we need to balance
security in interpersonal interactions with privacy. But the
security theater of a TSA officer either &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;boingboing.net&#x2F;2010&#x2F;10&#x2F;30&#x2F;tsa-demands-testicul.html&quot;&gt;feeling me up or looking
at me naked&lt;&#x2F;a&gt; isn&#x27;t designed to make us safer, it&#x27;s designed to get
us used to the idea that we don&#x27;t have any privacy in the face of
the watchful eye. Cory Doctrow is about 800 times more libertarian
than I am, but I still think all of you should go read his books.
Even though it&#x27;s just a &quot;young adult&quot; novel, I particularly enjoyed
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;craphound.com&#x2F;littlebrother&#x2F;&quot;&gt;Little Brother&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Separation of church and state: also important. If you&#x27;re an
American, odds are that I disagree with you about religion. Although
if you&#x27;re an American reading my blog (hello all three of you), that
is less likely to be true. But the fact of the matter is, I don&#x27;t
want you telling me what to believe, and you sure as hell don&#x27;t want
me telling you what to believe. Intelligent Creation isn&#x27;t a
scientific theory, it&#x27;s religious propaganda. And, no, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Van_Orden_v._Perry&quot;&gt;Texas&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;McCreary_County_v._ACLU_of_Kentucky&quot;&gt;Kentucky&lt;&#x2F;a&gt;, I also don&#x27;t want you spending tax dollars and public
land to put up a giant status to the decalogue. Unless you&#x27;re going
to put up every other religious and political document that&#x27;s
affected your judicial history. No? Then no. Also, I don&#x27;t care if
your religion says gay people are bad (even though it&#x27;s quite hard
to point to such a clause in the Bible). My philosophy says that
believing something because a guy in a big hat tells you to is bad.
Let&#x27;s agree to not enforce either of our moralities on one another,
mmmmkay?&lt;&#x2F;li&gt;
&lt;li&gt;There are tons of race and gender relations issues in our society.
As an upper-middle-class straight white male, I&#x27;m just going to get
shot down if I pretend that I can speak eloquently about them. But
they&#x27;re there. I think they&#x27;re probably getting better; I don&#x27;t
think I&#x27;ve ever seen anybody in my generation obviously
discriminating against somebody for their skin color, and growing up
it was in fact expected that women would be smarter and earn more
than men. Which made it odd when I got to Mudd and was told that
women were discriminated against in STEM fields. Never would have
guessed that when all of the honors and higher classes in high
school were 60-70% women... Anyhow, none of this fixes things, mind
you, but I can&#x27;t imagine that it&#x27;s a &lt;em&gt;bad sign&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Corporations are not people. One more time: corporations are not
people. Citizens United is the worst court ruling of the decade.
Corporations are &lt;strong&gt;NOT&lt;&#x2F;strong&gt; people!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;politics&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#politics&quot; aria-label=&quot;Anchor link for: politics&quot;&gt;Politics&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Political parties bother me. The world doesn&#x27;t dichotomize into two
camps where all of the people in Camp D feel the same way about all
issues and all the people in Camp R feel the exact opposite about
all issues. Partisanship and party loyalty makes actual progress in
the direction desired by the sovereign (i.e., the people)
impossible. On the other hand, without parties, the next issue would
be even worse.&lt;&#x2F;li&gt;
&lt;li&gt;Elections are meaningless. People vote for a party, on the basis of
months of fantastically-expensive mud-slinging televised lies. Is
there a way to manage campaigns such that a relative unknown can
still run for national office and also such that the person with the
most expensive, most slanderous campaign doesn&#x27;t win? I don&#x27;t know.
Is there a way to get candidates to reveal their true beliefs on
issues instead of bickering about who slept with who? I really hope
so.&lt;&#x2F;li&gt;
&lt;li&gt;Legislation should be simple. We should invent a time machine, go
back to find the first person who thought of adding an unrelated
rider to a critical budget bill, and shoot him in the face. I&#x27;ve
read through a few congressional bills in the last few weeks (for
personal entertainment), and they&#x27;re behemoths. If I can&#x27;t get
through it, then how is a senator who was elected on a platform of
being anti-intellectual and has to be on the campaign trail 23 hours
a day supposed to read it?&lt;&#x2F;li&gt;
&lt;li&gt;Corporations are bloody not people!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;environmental-policy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#environmental-policy&quot; aria-label=&quot;Anchor link for: environmental-policy&quot;&gt;Environmental Policy&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I don&#x27;t think I can say anything here that won&#x27;t embarrass me in front
of my &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.blog.climatepol.com&#x2F;&quot;&gt;much more knowledgable friends&lt;&#x2F;a&gt;, but suffice to say that this
is an issue that affects the whole world. In my magical pretend perfect
world, it would be addressed by the whole world. Here&#x27;s a real wingnut
idea on this, though: require 100% carbon offset for all
personally-owned vehicles. Cars are annoying anyway.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fiscal-policy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fiscal-policy&quot; aria-label=&quot;Anchor link for: fiscal-policy&quot;&gt;Fiscal Policy&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;This one&#x27;s trickier. On the one hand, I do agree with the conservatives
on some points. A deficit isn&#x27;t really that good of a thing. Yes,
government certainly should run a deficit during a recession to
compensate for the fact that markets are not people, and just because
the market clears doesn&#x27;t ensure anything about the suffering of
individuals. But I also think that the way our economy works right now
is we have a lot of debt (which isn&#x27;t money) acting like money
everywhere. At the federal level, at the state level, and (in much
larger quantities) in the private sector. If the financial sector is
making a profit, that&#x27;s a good sign that your economy is in trouble. If
the financial sector is making more profits than the rest of the
economy, then your economy is just plain broken. The only job of a
financial professional is to take things that aren&#x27;t money and aren&#x27;t
economically productive and turn them into money for people who already
have money. As a side effect, they sometimes do good things. Sometimes.
After that rambling prelude:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Consolidate duplicate state and federal agencies. I couldn&#x27;t care
less about states&#x27; rights, to tell you the truth. I&#x27;ve heard plenty
of arguments for it, but our confederacy of states is just plain
weird.&lt;&#x2F;li&gt;
&lt;li&gt;Establish a single-payer healthcare system. The goal of a
corporation (like, say, your insurance company) is to make money.
The goal of a healthcare system is to produce healthy people. These
goals are &lt;strong&gt;fundamentally at odds&lt;&#x2F;strong&gt; with each other. Yes, blah blah
competition blah blah expensive services. I don&#x27;t care about those
things. Your insurance company is out to make money. The way for it
to do that is to charge as much as the market will bear and provide
as little as the market will bear. Health doesn&#x27;t work that way.&lt;&#x2F;li&gt;
&lt;li&gt;Maintain a simple, minimal social safety net. I don&#x27;t believe that
we as a people should be left to founder when we falter the way that
Ayn would. But I also acknowledge that there are people who abuse
our current welfare system, and that shouldn&#x27;t be possible. We
should develop some kind of technology that&#x27;s good at aggregating
information and determining aberrant patterns. And any safety net
should, of course, encourage people to work. Which should be easier
given the next point.&lt;&#x2F;li&gt;
&lt;li&gt;Affirm and maintain public infrastructure. I&#x27;m not advocating public
ownership of all means of production, but the infrastructure that
they run on? The roads, the fiber lines, the sewers? Those should be
public, and should be cared for the way we care for our investment
bankers.&lt;&#x2F;li&gt;
&lt;li&gt;Fair, simple taxes. Capital gains should be taxed the same as
income, and income taxes should rise roughly logarithmically with
income, maxing out somewhere around 50%. Estate taxes should match
or exceed income taxes. One national sales tax. No state or local
taxes.&lt;&#x2F;li&gt;
&lt;li&gt;People complain a lot about &quot;income redistribution&quot;. Surprisingly, a
lot of these people are normal people. I don&#x27;t know why they do so,
but they should look at history a bit. The income gap in this
country is stunning&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-incomegap-1&quot;&gt;&lt;a href=&quot;#fn-incomegap&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. And I&#x27;m not part of the solution.
I get paid an ungodly amount of money to sit on my ass and press
buttons all day. Then I give most of it back for a medium-small
apartment in an only okay neighborhood. But, still. At what point
did we as a society decide that we should give all of our money to
the people who need it least? Was anybody whose last name wasn&#x27;t
Reagan involved in this decision?&lt;&#x2F;li&gt;
&lt;li&gt;Reduce our prison population. With the legalization of personal
drugs and the improvements to education and employment in my magical
mystery universe, this shouldn&#x27;t be too hard. But it&#x27;s worth
mentioning that we spent $68 billion on prisons in 2006
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-prisons1-1&quot;&gt;&lt;a href=&quot;#fn-prisons1&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; and jailed 2.259 million people &lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-prisons2-1&quot;&gt;&lt;a href=&quot;#fn-prisons2&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. That&#x27;s
only $30,101 a year per prisoner. Of course, the median income per
household member in this country in 2006 was only $26,036
&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-income-1&quot;&gt;&lt;a href=&quot;#fn-income&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. So you&#x27;re worth $4,000 more to the country if you&#x27;ve
been convicted of a crime and are doing nothing productive. That&#x27;s a
good use of our human capital!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;foreign-policy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#foreign-policy&quot; aria-label=&quot;Anchor link for: foreign-policy&quot;&gt;Foreign Policy&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Roll back the defense budget to what it was before World War II
(adjusted for inflation, of course). The defense budget in 2009 was
$661 billion. The defense budget in 1940 (during a war, mind you)
was $1.6 billion&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-defensebudget-1&quot;&gt;&lt;a href=&quot;#fn-defensebudget&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Adjusting for inflation (with
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.bls.gov&#x2F;data&#x2F;inflation_calculator.htm&quot;&gt;CPI&lt;&#x2F;a&gt; as my index), that&#x27;s $25.4 billion. That&#x27;s a 26 times
increase so we could lose several wars and fight insurgents armed
with $50 IEDs in countries that we are bloody occupying. They&#x27;re
going to make a movie about this period in American history in 100
years, and I don&#x27;t think we&#x27;re going to be the plucky heroes.&lt;&#x2F;li&gt;
&lt;li&gt;Immediately withdraw US combat troops from all foreign wars.
Democracy and liberalism can&#x27;t be forced on a society; it only makes
sense to give sovereignty to the citizenry if they want it. Don&#x27;t
get me wrong, I think that a democratic socialist republic is
probably the ideal form of government for me (and, make no mistake,
our government is and has been socialist in many of its dealings for
a long time), but it&#x27;s not my place to tell others how to live&lt;&#x2F;li&gt;
&lt;li&gt;Withdraw the majority of our foreign military aid. We gave Israel,
one of the stronger nations in the world, $2.5 billion of military
aid in 2009&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-israelaid-1&quot;&gt;&lt;a href=&quot;#fn-israelaid&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. Not only are we increasing the violence
in the world (particularly, the weaponry in the hands of a fairly
radical effective-theocracy), but we&#x27;re doing it by giving away
money during a recession. Madness!&lt;&#x2F;li&gt;
&lt;li&gt;Speaking of Israel, I am always amused (and saddend) by our
irrational support of that country. Any other nuclear-armed
theocracy that&#x27;s occupying a foreign country (well, any one except
ourselves) would probably have already been targeted as a member of
an axis of evil. Israel gets bonus cookies, for some reason. I
understand that Palestine hasn&#x27;t exactly been a picture child,
either, but I think it&#x27;s time for us to ask them to grow up or stop
giving them both cookies. By which I mean U.N. sanctions should be
sought. Or we could stop exporting Mrs. Fields. Either way.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, that&#x27;s a list of a few of my crazy political leanings. Feel free to
comment below, or not, as you wish. If you read this far,
congratulations, you have too much time on your hands. Maybe I&#x27;ll
actually get around to that git post next week. And remember:
corporations are &lt;em&gt;not&lt;&#x2F;em&gt; people!&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-incomegap&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cbpp.org&#x2F;cms&#x2F;?fa=view&amp;amp;id=957&quot;&gt;http:&#x2F;&#x2F;www.cbpp.org&#x2F;cms&#x2F;?fa=view&amp;amp;id=957&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-incomegap-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-prisons1&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bjs.ojp.usdoj.gov&#x2F;content&#x2F;glance&#x2F;tables&#x2F;exptyptab.cfm&quot;&gt;http:&#x2F;&#x2F;bjs.ojp.usdoj.gov&#x2F;content&#x2F;glance&#x2F;tables&#x2F;exptyptab.cfm&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-prisons1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-prisons2&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bjs.ojp.usdoj.gov&#x2F;content&#x2F;pub&#x2F;pdf&#x2F;p06.pdf&quot;&gt;http:&#x2F;&#x2F;bjs.ojp.usdoj.gov&#x2F;content&#x2F;pub&#x2F;pdf&#x2F;p06.pdf&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-prisons2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-income&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;pubdb3.census.gov&#x2F;macro&#x2F;032007&#x2F;hhinc&#x2F;new02_001.htm&quot;&gt;http:&#x2F;&#x2F;pubdb3.census.gov&#x2F;macro&#x2F;032007&#x2F;hhinc&#x2F;new02_001.htm&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-income-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-defensebudget&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.whitehouse.gov&#x2F;sites&#x2F;default&#x2F;files&#x2F;omb&#x2F;budget&#x2F;fy2011&#x2F;assets&#x2F;hist03z1.xls&quot;&gt;http:&#x2F;&#x2F;www.whitehouse.gov&#x2F;sites&#x2F;default&#x2F;files&#x2F;omb&#x2F;budget&#x2F;fy2011&#x2F;assets&#x2F;hist03z1.xls&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-defensebudget-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-israelaid&quot;&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;assets.opencrs.com&#x2F;rpts&#x2F;RL33222_20100916.pdf&quot;&gt;http:&#x2F;&#x2F;assets.opencrs.com&#x2F;rpts&#x2F;RL33222_20100916.pdf&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-israelaid-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Github</title>
          <pubDate>Sun, 17 Oct 2010 23:27:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/github/</link>
          <guid>https://www.roguelazer.com/blog/github/</guid>
          <description xml:base="https://www.roguelazer.com/blog/github/">&lt;p&gt;Brief post. I decided to actually use Github once in a while now (not in
the least because I use it for open-source stuff at work). My page is up
at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Roguelazer&quot;&gt;github.com&#x2F;Roguelazer&lt;&#x2F;a&gt;, and the work account which I&#x27;m a
contributor on is at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Yelp&quot;&gt;github.com&#x2F;Yelp&lt;&#x2F;a&gt;. So, uh, feel free to comment
on or improve any code that you see thereabouts.&lt;&#x2F;p&gt;
&lt;p&gt;Also, I am thinking about doing a series on git on this blog, since I
get to use it rather quite a lot now, and there definitely aren&#x27;t enough
guides to it on the Internet yet. Yes, that last was sarcasm. I&#x27;ll let
you know.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Afni - Scam?</title>
          <pubDate>Mon, 02 Aug 2010 09:50:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/afni-scam/</link>
          <guid>https://www.roguelazer.com/blog/afni-scam/</guid>
          <description xml:base="https://www.roguelazer.com/blog/afni-scam/">&lt;p&gt;I got a letter in the mail on Saturday from a company named &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;afni.com&#x2F;&quot;&gt;Afni, Inc.&lt;&#x2F;a&gt;,
a debt collection company. This letter informed me that my debt
of $188 to DirecTV was being collected by them. Of course, I&#x27;ve never
had any dealings with DirecTV (aside from interviewing for a job there a
couple of years ago), so I knew that this was a bogus notice. Come
Monday morning, I called their 1-888 number and, after waiting on hold
for 20 minutes, was connected to a bored-sounding agent. She asked me
for the last four digits of my social security number, verified that the
account wasn&#x27;t mine, and said that they would stop the collection
proceedings.&lt;&#x2F;p&gt;
&lt;p&gt;Now, their customer service, it wasn&#x27;t bad. Once I got off hold, it took
less than five minutes for them to realize that I wasn&#x27;t the nan that
they&#x27;re looking for. But let&#x27;s just consider this situation for a
moment. I moved to this city a month ago, and somehow it seemed possible
to them that I was the man who owed DirecTV $188. They obviously have
his social security number, since they could verify that I&#x27;m not him,
but they sent the bill to me anyhow. Did they just blanket-mail all the
people in the city with my name, in the hopes that somebody wouldn&#x27;t
notice that it wasn&#x27;t their bill and would pay? Is this some kind of a
scam to associate my name and address with the last 4 of my social so
that if I ever do default on a debt they know where to find me? I don&#x27;t
know, but I&#x27;m pretty sketched out by it.&lt;&#x2F;p&gt;
&lt;p&gt;The Internet has lots of stories about Afni trying to collect on bogus
debts, and from them, it seems that this is a pretty unscrupulous
company. I guess I should take it as a sign that I&#x27;ve moved on into the
real world that there are people trying to scam me out of my money
now...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>An iPad in San Francisco</title>
          <pubDate>Fri, 21 May 2010 14:56:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/an-ipad-in-san-francisco/</link>
          <guid>https://www.roguelazer.com/blog/an-ipad-in-san-francisco/</guid>
          <description xml:base="https://www.roguelazer.com/blog/an-ipad-in-san-francisco/">







&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;an-ipad-in-san-francisco&amp;#x2F;IMG_0269.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;an-ipad-in-san-francisco&amp;#x2F;IMG_0269.jpg&quot; alt=&quot;iPad&quot; class=&quot;cimg qimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;

&lt;p&gt;So, I&#x27;ve been in San Francisco apartment-hunting for the past
couple of days (I found a place!), and the only computers I brought with
me are my iPad and my iPhone. It occurred to me that this might be a
useful basis for a review, so enjoy. As a reminder, I have the 64GB
model with 3G and WiFi.&lt;&#x2F;p&gt;
&lt;p&gt;In brief, I am extremely satisfied. I have been using the iPad to browse
Craigslist, listen to music, keep up with my e-mail (including a
community-l thread that made me long for the upcoming threaded mail
view), and so on. It has excelled at all of these tasks, and done so
with battery performance that continues to amaze me.&lt;&#x2F;p&gt;
&lt;p&gt;Web browsing is, of course, the iPad&#x27;s forte. I&#x27;ve tried both
craigsphone and CraigsFish for the iPad, and they are both inferior
experiences to just using craigslist in the browser. That is because it
is awesome in the browser. Speedy to load (a big plus on AT&amp;amp;T in SF),
and easy to interact with via touch. It occurs to me that I could have
used Prowl to push phone numbers to my iPhone, but I didn&#x27;t think of
that at the time. I really need bidirectional clipboard sharing between
iDevices...&lt;&#x2F;p&gt;
&lt;p&gt;Music and other media consumption is also a pleasure on the iPad. Simply
having 64G of space means that I can take all of my AAC music (lots is
still in FLAC only, but whatever), some TV, and still have lots of space
left. Sound quality isn&#x27;t great, but it is good enough for these
purposes. I had crappy headphones all week anyhow.&lt;&#x2F;p&gt;
&lt;p&gt;E-mail is just okay. The client is good for viewing (except for the
aforementioned lack of threading, which is coming in 4.0), and only okay
for sending. I really want a way to save emails created in other apps
(i.e., PaperDesk) as drafts and edit them from the real app. Good enough
to be passable, but plenty of room for improvement.&lt;&#x2F;p&gt;
&lt;p&gt;Navigation was an unexpected benefit. The muni information in Google
Maps is decent, and Maps in general is much easier to use on the big
screen than on the iPhone. No iBART for iPad yet, but BART is simple
enough to not really need it.&lt;&#x2F;p&gt;
&lt;p&gt;Blogging is problematic. I&#x27;ve composed most of this post on the iPad (in
my hotel room, actually), but can&#x27;t post it as I want it from here
because I can&#x27;t add any pictures. The web interface has no way to upload
from the iPad&#x27;s photo library, and the native client is super-crashy. I
guess I&#x27;ll have to add the pictures from another computer, later.&lt;&#x2F;p&gt;
&lt;p&gt;However, actually entering text is pretty great. I&#x27;ve gotten quite fast
at typing on the landscape keyboard with the iPad on my lap or a table.
I can thumb-type pretty well in portrait mode, and am working to get
better. Some of the auto corrects are weird, though. It corrects &quot;ive&quot;
to &quot;vie&quot; instead of &quot;I&#x27;ve&quot; unless it&#x27;s the first word in a sentence, and
that seems like a much less likely correction. It also misses some
fat-fingers that it should be able to get by key proximity (for example,
&quot;grt&quot; instead of &quot;get&quot;). However, it&#x27;s definitely good enough to write a
few hundred words on.&lt;&#x2F;p&gt;
&lt;p&gt;What else...? 3G is awesome. I have had dropped calls on my iPhone in
SF, but have had great data access everywhere on my iPad. It&#x27;s only
about 600k&#x2F;s, but fast enough for craigslist and IM. Oh, also, the
official AIM app has been super nice. There&#x27;s really nothing like being
able to IM with a good friend while waiting for a real estate agent who
is running late for a showing. I know that Beejive and IM+ are
supposedly quite good, but I kind of like the official AIM app more.
&lt;em&gt;shrug&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;San Francisco has been quite a nice city to use it in. I have felt safe
using it pretty much everywhere I have been, including on the bus. And
people ask about it pretty much everywhere. I think I convinced a woman
in the Starbucks on Powell and Sutter to get one. I don&#x27;t count myself
as much of an Apple Fanboy (I like their products objectively, dammit),
but I think I did some good iPad evangelization.&lt;&#x2F;p&gt;
&lt;p&gt;So, that&#x27;s my review. As you might have expected, I&#x27;m pretty happy with
it. Feel free to leave comments (or tweet &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Roguelazer&quot;&gt;@Roguelazer&lt;&#x2F;a&gt;) with questions or
thoughts.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Graduated</title>
          <pubDate>Tue, 18 May 2010 15:52:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/graduated/</link>
          <guid>https://www.roguelazer.com/blog/graduated/</guid>
          <description xml:base="https://www.roguelazer.com/blog/graduated/">&lt;p&gt;So, Sunday was my college graduation. I&#x27;m now a college graduate. Wow,
that&#x27;s weird to write. If you&#x27;re curious about we details, I hold a
Bacheleor of Science in Computer Science from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hmc.edu&quot;&gt;Harvey Mudd College&lt;&#x2F;a&gt;
with overall academic distinction and with departmental honors in
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cs.hmc.edu&quot;&gt;two&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.hmc.edu&#x2F;academicsclinicresearch&#x2F;academicdepartments&#x2F;humanitiesandsocialsciences.html&quot;&gt;departments&lt;&#x2F;a&gt;. Woo.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s really weird to be done. I keep expecting that this will just be a
break, that things will be back to normal soon. I&#x27;d really gotten used
to things at Mudd, I was really happy there. Mudders: I already miss
you. In retrospect, there are a lot of things that I should have done
and didn&#x27;t, and a lot of things that I did do and should have done more
of. And some things, mostly of the work variety, that I could have stood
to do less of. But it was still an awesome time at a &lt;em&gt;great&lt;&#x2F;em&gt; school.
Rating: A+++, would study again.&lt;&#x2F;p&gt;
&lt;p&gt;You may ask what I&#x27;m doing now. Well, I&#x27;ll be starting work at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.yelp.com&quot;&gt;Yelp&lt;&#x2F;a&gt;
in a couple of weeks. For the time being, I&#x27;m hanging out in LA
(technically, Calabasas) mooching off of some relatives. It&#x27;s nice and
relaxing but, well, it&#x27;s not Mudd. I suppose I shouldn&#x27;t expect that it
would be... If anybody is in the area and wants to say hi in the next
couple of weeks, let me know. I&#x27;ll probably be in San Francisco for a
couple of days soon to look at apartments. Still trying to sort that
out.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, this post was written on my iPad using the software keyboard
and Mobile Safari. It&#x27;s pretty cool.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPad!</title>
          <pubDate>Fri, 07 May 2010 11:14:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/ipad/</link>
          <guid>https://www.roguelazer.com/blog/ipad/</guid>
          <description xml:base="https://www.roguelazer.com/blog/ipad/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;4587267564&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;farm5.static.flickr.com&#x2F;4004&#x2F;4587267564_4afec9d243_m.jpg&quot; alt=&quot;iPad 3G Unboxing&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The universe smiles on me today: on the day that I finish all of my work for
my undergraduate degree, my new iPad 3G appears. It&#x27;s currently doing its
initial sync (photo &quot;optimization&quot; takes ruddy forever, and I&#x27;m only
synchronizing 3000 photos). For the time being, here are my &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;sets&#x2F;72157624012466578&#x2F;&quot;&gt;unboxing
photos&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>wamupd-0.1.2</title>
          <pubDate>Wed, 21 Apr 2010 01:17:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/wamupd-0-1-2/</link>
          <guid>https://www.roguelazer.com/blog/wamupd-0-1-2/</guid>
          <description xml:base="https://www.roguelazer.com/blog/wamupd-0-1-2/">&lt;p&gt;wamupd 0.1.2 is now available at
&lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;wamupd&#x2F;wamupd-0.1.2&quot;&gt;&#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;wamupd&#x2F;wamupd-0.1.2.tar.bz2&lt;&#x2F;a&gt; (or
via git, if you prefer). It fixes some TXT-related bugs filed by
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;daagaak&quot;&gt;@daagaak&lt;&#x2F;a&gt;. As usual, to learn about the project you can visit the
&lt;a href=&quot;&#x2F;code&#x2F;wamupd&quot;&gt;wamupd page&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>dnsextd, TCP, and IPv6</title>
          <pubDate>Tue, 02 Mar 2010 17:45:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/dnsextd-tcp-and-ipv6/</link>
          <guid>https://www.roguelazer.com/blog/dnsextd-tcp-and-ipv6/</guid>
          <description xml:base="https://www.roguelazer.com/blog/dnsextd-tcp-and-ipv6/">&lt;p&gt;Hello interested parties. dnsextd (in my git repository) now supports
TCP. It was actually sort of an amusing bug. I guess the dnsextd code
must date back to PowerPC, because it had an extra &lt;code&gt;ntoh&lt;&#x2F;code&gt; call which on
little-endian systems would cause TCP requests to fail. It&#x27;s fixed in
the &quot;tcp&quot; branch of my git repository. In case you&#x27;re curious as to how
to get that repository, you would use the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% git clone &#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;mDNSResponder-214.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% cd mDNSResponder-214&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% git branch --track tcp origin&#x2F;tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% git checkout tcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you need more setup help, &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;dynamic-dns-part-two&#x2F;&quot;&gt;Dynamic DNS: Part Two&lt;&#x2F;a&gt; contains all the
gory details. If you decide to use mDNSResponder-215 and want to apply
the patches, here&#x27;s a patch you can apply on top of the one from the
linked post to add TCP support: &lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;dnsextd_posix-215-tcp.patch&quot;&gt;dnsextd_posix-215-tcp.patch&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;With TCP support comes (sorta) something useful: IPv6 support. dnsextd
itself isn&#x27;t well-designed to handle IPv6, since it&#x27;d be a really
obnoxious refitting job to get it to listen on those other sockets and
understand sockaddr_in6&#x27;s and what have you. However, DNS-over-TCP can
support IPv6 with the following very simple command line:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo nc6 -6 --continuous -lp 53 --exec &amp;quot;nc6 -4 localhost 53&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Is it as good a solution as actually listening on IPv6? No. Does it
incur the penalty of spawning a new process on every single connection?
Yes. Is it good enough for me to be happy with for playing with? Also
yes. :-)&lt;&#x2F;p&gt;
&lt;p&gt;As usual, feel free to comment below or e-mail if you have any questions
or concerns. Cheers.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>wamupd-0.1.1</title>
          <pubDate>Sat, 20 Feb 2010 15:54:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/wamupd-0-1-1/</link>
          <guid>https://www.roguelazer.com/blog/wamupd-0-1-1/</guid>
          <description xml:base="https://www.roguelazer.com/blog/wamupd-0-1-1/">&lt;p&gt;So, some news on the &lt;a href=&quot;&#x2F;code&#x2F;wamupd&quot;&gt;wamupd&lt;&#x2F;a&gt; front. I just released version 0.1.1
(tagged as such in git; also available as a tarball at
&lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;wamupd&#x2F;wamupd-0.1.1.tar.bz2&quot;&gt;&#x2F;&#x2F;files.roguelazer.com&#x2F;projects&#x2F;wamupd&#x2F;wamupd-0.1.1.tar.bz2&lt;&#x2F;a&gt;)
which has a lot of new features over the prior, unnamed release.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;kbd&gt;wamupd&lt;&#x2F;kbd&gt; now stays resident, renewing leases and such&lt;&#x2F;li&gt;
&lt;li&gt;It can talk to Avahi over D-BUS and pick up other services
registered on the computer (sort of; it&#x27;s kind of hack-ish)&lt;&#x2F;li&gt;
&lt;li&gt;Lots and lots and lots and lots of bug fixes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I&#x27;ve got ideas for the next few releases (still looking into xdg, making
this behave like a real daemon, and maybe setting up a Rakefile to build
a gem). Exciting times!&lt;&#x2F;p&gt;
&lt;p&gt;Sorry for the brevity of this post, but, well, coding is more
interesting than writing, I&#x27;m afraid. Feel free to e-mail me or leave a
comment here if there are any questions or requests you have about
wamupd.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Dynamic DNS: Part Two</title>
          <pubDate>Mon, 15 Feb 2010 23:18:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/dynamic-dns-part-two/</link>
          <guid>https://www.roguelazer.com/blog/dynamic-dns-part-two/</guid>
          <description xml:base="https://www.roguelazer.com/blog/dynamic-dns-part-two/">&lt;p&gt;&lt;em&gt;This post is a follow-up to &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;nix-tip-of-the-day-dynamic-dns&#x2F;&quot;&gt;Dynamic DNS&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;dynamic-dns-part-two&amp;#x2F;bonjour.jpg&quot; alt=&quot;Bonjour logo&quot;  &#x2F;&gt;
  
&lt;p&gt;When last I left you, we had basic updateable DNS running and could
update it from OS X. I&#x27;ve been a bit busy since then, but thanks to some
prodding from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;Loredo&quot;&gt;@Loredo&lt;&#x2F;a&gt;, I got back in and started looking at. What
follows is the exciting story of how I got things up and running — by
the end of this post, you&#x27;ll have access to a working copy of dnsextd
for linux, and a client application that updates SRV and IP (A&#x2F;AAAA)
leases. Woo.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>iPad Reactions</title>
          <pubDate>Thu, 28 Jan 2010 14:50:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/ipad-reactions/</link>
          <guid>https://www.roguelazer.com/blog/ipad-reactions/</guid>
          <description xml:base="https://www.roguelazer.com/blog/ipad-reactions/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;wp-content&#x2F;uploads&#x2F;2010&#x2F;01&#x2F;ipad.png&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;wp-content&#x2F;uploads&#x2F;2010&#x2F;01&#x2F;ipad-241x300.png&quot; alt=&quot;iPad&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, yesterday was the big day. The Coming of The Tablet. I&#x27;m not
exactly a big tech pundit. I&#x27;ve never seen an iPad in person. I haven&#x27;t
even played with the emulator yet. But I thought I&#x27;d still post my
immediate reactions.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The Name:&lt;&#x2F;strong&gt; It&#x27;s not that bad. It doesn&#x27;t trigger the same juvenile
&quot;feminine products&quot; joke urge in me that that it does with all of the
commentators on Slashdot. It kind of reminds me of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;memory-alpha.org&#x2F;en&#x2F;wiki&#x2F;PADD&quot;&gt;PADD&lt;&#x2F;a&gt;s from Star
Trek, which is a good association for a high-tech device. It&#x27;s better
than &quot;iSlate&quot; would&#x27;ve been. I think &quot;Apple Tablet&quot; would&#x27;ve been
better, but I don&#x27;t know that it&#x27;d be trademarkable. Not that &quot;iPad&quot; is
exactly easy from a trademark standpoint...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The Hardware:&lt;&#x2F;strong&gt; Looks gorgeous. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.engadget.com&#x2F;2010&#x2F;01&#x2F;28&#x2F;apples-a4-is-an-arm-based-system-on-a-chip-a-la-tegra-2&#x2F;%3EEngadget%20says%20that%20it&amp;#x27;s%20based%20off%20of%20an%20%3Ca%20href=&quot;&gt;ARM Cortex-A9&lt;&#x2F;a&gt;, which is about what
I figured. For you people that have never designed an ARM before: that
doesn&#x27;t mean that ARM designed the chip and Apple&#x2F;PA Semi just slapped
their design down. Given Apple&#x27;s propensity for attention to detail, I&#x27;m
sure they didn&#x27;t just use the synthesizable core from ARM and put it in
an SoC — I&#x27;m sure that they took the architectural&#x2F;micro-architectural
IP and built their own chip.&lt;&#x2F;p&gt;
&lt;p&gt;The non-ultranerd parts of the hardware look nice, too. People online
are complaining about the bezel, but I think it looks about right. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;daringfireball.net&#x2F;2010&#x2F;01&#x2F;ipad_big_picture&quot;&gt;John
Gruber agrees.&lt;&#x2F;a&gt; The screen isn&#x27;t OLED, but I have a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.sonystyle.com&#x2F;webapp&#x2F;wcs&#x2F;stores&#x2F;servlet&#x2F;ProductDisplay?catalogId=10551&amp;amp;storeId=10151&amp;amp;langId=-1&amp;amp;productId=8198552921665869102&quot;&gt;Sony
NWZ-X1061&lt;&#x2F;a&gt;, and I can personally attest that the screen technology is
not useful in bright light. OLEDs now are where LCDs were 10 years ago
— completely transmissive (well, actually emissive in this case, but
it&#x27;s the same idea). Somebody somewhere will come up with a way to make
transflective OLEDs like they did for LCDs, and then we&#x27;ll have
reasonably usable OLEDs. Then the price can come down about 90%, and
Apple can put one on an iPad. Until then, a big IPS LED-backlit LCD is
the way to go.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The Software Ecosystem:&lt;&#x2F;strong&gt; This is the biggest point of contention.
It&#x27;s true: Apple is deploying another closed ecosystem. Like the iPhone,
this product will not encourage tinkering. I&#x27;m sure somebody will
jailbreak it. I&#x27;m equally sure that it won&#x27;t matter. I have a few
different responses to this issue:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It&#x27;s as open as the web. Yes, you can&#x27;t run native code on it
without getting it through a barrage of Apple testers. You have a
first-class web browser which seems to be much better at handling
multiple open pages than Mobile Safari on the iPhone is. I see this
as no different than WebOS or ChromeOS. Apple has no problem making
useful APIs available through the browser (like Geolocation). Hell,
with things like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bespin.mozilla.com&#x2F;&quot;&gt;Bespin&lt;&#x2F;a&gt;, you can even do development through the
web.&lt;&#x2F;li&gt;
&lt;li&gt;The iPad isn&#x27;t going to replace tinkerer&#x27;s computers. If I could
move my parents away from full computers to iPads today, I&#x27;d do it.
The safety of a managed platform far outweighs anything else, given
how much important stuff people are putting on their computers
nowadays and how dumb most people using computers are. Yes, I&#x27;ve
heard the argument that without being able to tinker with the inner
workings of your OS, you can&#x27;t grow up to be a proper hacker. Well,
I never really tinkered with the inner workings of my OS until I was
old enough to buy an old desktop and put Red Hat 5.1 on it. That
ability won&#x27;t be going away.&lt;&#x2F;li&gt;
&lt;li&gt;It doesn&#x27;t matter what I (or anybody else reading this blog post,
probably) think. The 3 million people that will buy iPads this year
(my personal guess) don&#x27;t give a crap whether or not you can deploy
unsigned applications to it.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;The Audience:&lt;&#x2F;strong&gt; This is going to be big. Not as big as the iPhone (at
least, not right out the gate). But big. It kicks the crap out of Chrome
OS and netbooks in general (the idea of a cheap netbook-level device
with decent industrial design and fabrication is amazing). I&#x27;m going to
want one. And you&#x27;re going to want one, too.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>SpamAssassin 2010 Bug</title>
          <pubDate>Fri, 01 Jan 2010 17:18:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/spamassassin-2010-bug/</link>
          <guid>https://www.roguelazer.com/blog/spamassassin-2010-bug/</guid>
          <description xml:base="https://www.roguelazer.com/blog/spamassassin-2010-bug/">&lt;p&gt;Hey all. One of the sysadmins at Mudd, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.math.hmc.edu&#x2F;~cmc&#x2F;&quot;&gt;Claire Connelly&lt;&#x2F;a&gt;, pointed out
that there&#x27;s a widespread bug in SpamAssassin that might cause large
numbers of false positives on mail sent after 2010-01-01. Apparently,
the &quot;date in future&quot; rule is hardcoded to look for years after 2010. You
can read more at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;lwn.net&#x2F;Articles&#x2F;368396&#x2F;&quot;&gt;LWN&lt;&#x2F;a&gt;; the short of it is that you probably want to
add the following to your SpamAssassin config:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;score FH_DATE_PAST_20XX 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;sa-update&lt;&#x2F;code&gt; may or may not be pulling down updated rules. You can find
the relevant bug at the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;issues.apache.org&#x2F;SpamAssassin&#x2F;show_bug.cgi?id=5852&quot;&gt;SpamAssassin Bugzilla (#5852)&lt;&#x2F;a&gt;. Anyhow,
something fun to be aware of.&lt;&#x2F;p&gt;
&lt;p&gt;Happy 2010.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Job Search: Complete</title>
          <pubDate>Tue, 22 Dec 2009 12:35:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/job-search-complete/</link>
          <guid>https://www.roguelazer.com/blog/job-search-complete/</guid>
          <description xml:base="https://www.roguelazer.com/blog/job-search-complete/">&lt;p&gt;&lt;em&gt;This post is a follow-up to &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;real-life-update&#x2F;&quot;&gt;Real-Life Update&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;job-search-complete&amp;#x2F;yelp-logo-80.png&quot; alt=&quot;Yelp Logo&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;Well, it was brief but exhausting. My job search has now come to a
close. I interviewed at a large number of companies, got offers from a
smaller number, and accepted an offer from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.yelp.com&quot;&gt;Yelp&lt;&#x2F;a&gt;. I&#x27;ll be
starting in June on the Infrastructure team, doing something between
software engineering and system administration. Which sounds, you know,
awesome.&lt;&#x2F;p&gt;
&lt;p&gt;For the unaware, Yelp is a local search company based out of San
Francisco, CA. They&#x27;ve got a pretty large userbase, and lots of views,
and, in general, interesting problems to work on. There&#x27;s already a
Mudder there. Plus, it&#x27;s a really small company. Should be a great
atmosphere to work in coming out of Mudd&#x27;s tight-knit community. And, of
course, San Francisco is an awesome city.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>*nix Tip of the Day: Dynamic DNS</title>
          <pubDate>Fri, 18 Dec 2009 16:29:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-dynamic-dns/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-dynamic-dns/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-dynamic-dns/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;nix-tip-of-the-day-dynamic-dns&amp;#x2F;bonjour_logo.jpg&quot; alt=&quot;Bonjour logo&quot;  &#x2F;&gt;
  
&lt;p&gt;It&#x27;s nice to have DNS records for all of your computers. It&#x27;s a
giant pain in the ass to remember IP addresses, especially if you&#x27;re on
something like a cable connection, where the IP address is dynamic (but
only changes every month or two). Now, you could go ahead and use
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.dyndns.com&#x2F;&quot;&gt;DynDNS&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.no-ip.com&#x2F;&quot;&gt;No-IP&lt;&#x2F;a&gt; or something. But those are lame. You have to
use a subdomain of one of their domains, and you have to use their
software to update. You might be wondering if there&#x27;s a better way.
Well, there is. Standard DNS supports updating, it turns out. In BIND,
this is managed through the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.zytrax.com&#x2F;books&#x2F;dns&#x2F;ch7&#x2F;xfer.html#allow-update&quot;&gt;allow-update&lt;&#x2F;a&gt; parameter. I had some free
time this week after I finished finals, so I went ahead and set it up,
along with the other trimmings required for Wide-Area Bonjour. It&#x27;s
cool, so I thought I&#x27;d post a bit.&lt;&#x2F;p&gt;
&lt;p&gt;The most important resource for all of this stuff is &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.dns-sd.org&#x2F;&quot;&gt;dns-sd.org&lt;&#x2F;a&gt;.
Aside from a couple of minor errors that I corrected and an update for
OS X 10.5+, this Tip will be based off of the guides from that site. So
credit to them.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Real Life Update</title>
          <pubDate>Sun, 06 Dec 2009 08:00:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/real-life-update/</link>
          <guid>https://www.roguelazer.com/blog/real-life-update/</guid>
          <description xml:base="https://www.roguelazer.com/blog/real-life-update/">&lt;p&gt;I&#x27;m about to finish my second-to-last semester of college. That in and
of itself is perhaps a somewhat stunning thing to think about. Equally
important, of course, is the question of what I&#x27;ll do once I leave. I&#x27;ve
been interviewing with a half-dozen companies, and just got back the
other day from a trip up to the Bay Area to do in-person interviews with
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.yelp.com&quot;&gt;Yelp&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nvidia.com&quot;&gt;NVIDIA&lt;&#x2F;a&gt;. I&#x27;d forgotten how nice the Bay Area was. I
stayed in downtown San Francisco, at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.themosser.com&#x2F;&quot;&gt;The Mosser Hotel&lt;&#x2F;a&gt;, and it was,
well, really nice. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.caltrain.com&#x2F;&quot;&gt;Caltrain&lt;&#x2F;a&gt; is also an awesome commuter rail system.&lt;&#x2F;p&gt;
&lt;p&gt;The interviews were the usual, intimidating technical interviews. Six
hours with a series of engineers and managers. Programming problems on
the board (none of them terribly difficult, but all of them rather
harder to solve when you&#x27;re under a time constraint and being watched).
I think I did okay, though. Hopefully they liked me. &lt;em&gt;crosses fingers&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I should start hearing back from them (and hopefully the other companies
I&#x27;ve been talking to) in the next week or two, which is very exciting.
I&#x27;ll be sure to post and update when I have some idea what I&#x27;m going to
be doing in the real world. Until then, ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New Machine</title>
          <pubDate>Sat, 05 Dec 2009 15:05:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-machine/</link>
          <guid>https://www.roguelazer.com/blog/new-machine/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-machine/">&lt;p&gt;I picked up a new &quot;computer&quot; last week. A virtual one, that is. I ran
into this site called &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;prgmr.com&#x2F;xen&#x2F;&quot;&gt;prgmr&lt;&#x2F;a&gt; which offers very low-cost, bare virtual
private servers. So far, so good. Got Debian set up all the way I like
it. Now just to find something fun to do with it. :-)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: VMS</title>
          <pubDate>Sun, 29 Nov 2009 17:01:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-vms/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-vms/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-vms/">&lt;p&gt;Okay, so this is maybe a little unusual, but today&#x27;s &quot;*nix Tip of the
Day&quot; isn&#x27;t about Unix&#x2F;Linux&#x2F;etc. at all. Instead, it is about their
antiquated archenemy: VMS. First, a little bit of history:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;history&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#history&quot; aria-label=&quot;Anchor link for: history&quot;&gt;History&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Way back in 1970, the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;PDP-11&quot;&gt;PDP-11&lt;&#x2F;a&gt; was hot stuff. Ken Thompson, Dennis
Richie, Brian Kernighan, and others at Bell Labs were writing what would
become Unix for the PDP-11 (well, for the PDP-7 at first, but nobody
talks about that). Unix was a huge improvement over what DEC shipped
with the PDP-11, DOS-11 and RT-11. This couldn&#x27;t stand, so Dave Cutler
at DEC designed VMS. It was a new operating system, with lots of fancy
features, like networking and, uh, lots of upper-case letters.&lt;&#x2F;p&gt;
&lt;p&gt;VMS and Unix sort of battled on. Or so some people would have you think.
Really, Unix won early on and VMS stumbled along with corporate
financing and an obnoxiously difficult-to-use interface. It passed from
DEC to Compaq to HP, from the PDP-11 to the Alpha to the Itanium. And it
still lives on, churning away in scary back-rooms here and there.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;current-events&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#current-events&quot; aria-label=&quot;Anchor link for: current-events&quot;&gt;Current Events&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;So, why do I bring this up? Well, as some of you may know, Harvey Mudd
College has a few VMS machines around. The most well-known of these (to
students) is &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www2.hmc.edu&#x2F;&quot;&gt;thuban&lt;&#x2F;a&gt;, which is a 667MHz DEC Alpha running OpenVMS
7.3-2. Today, I had the, uh, interesting experience of using it, and
thought I&#x27;d share my impressions with my readers. You can see the proof
of my VMS skills at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www2.hmc.edu&#x2F;~jbrown&#x2F;&quot;&gt;my VMS homepage&lt;&#x2F;a&gt;. That&#x27;s right, I&#x27;m on the
Internet. &lt;em&gt;And&lt;&#x2F;em&gt; on DECnet.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Redesign!</title>
          <pubDate>Sun, 04 Oct 2009 22:59:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/redesign/</link>
          <guid>https://www.roguelazer.com/blog/redesign/</guid>
          <description xml:base="https://www.roguelazer.com/blog/redesign/">&lt;p&gt;Hello gentle readers... You may be surprised to notice that this website
has had a redesign. I was on earlier and noticed that Srini&#x27;s
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;srinig.com&#x2F;wordpress&#x2F;themes&#x2F;fluid-blue&#x2F;&quot;&gt;Fluid-Blue&lt;&#x2F;a&gt; WordPress theme had been updated to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;srinig.com&#x2F;wordpress&#x2F;themes&#x2F;f2&#x2F;&quot;&gt;F2&lt;&#x2F;a&gt;, which is
newer and shinier. So, of course, I had to install the new one and redo
my customizations of colors and such. And once I&#x27;d done that, it was
really worth my time to do some additional customization, like adding a
Google Custom Search box. Ayuh.&lt;&#x2F;p&gt;
&lt;p&gt;You also might have noticed the new logo. Yes, I know, it&#x27;s not very
good. Oh well. If you didn&#x27;t notice it, it looks like the following
(click for a nice SVG version that I wanted to put on the site proper,
but didn&#x27;t out of sympathy for old browser users):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;files.roguelazer.com&#x2F;logo-simple.svg&quot;&gt;&lt;img src=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;logo-simple.png&quot; alt=&quot;Logo&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s just the letters &quot;RL&quot; (for RogueLazer, not for any silly clothing
manufacturer) in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;vendetta-online.com&#x2F;manual&#x2F;app_gts.html&quot;&gt;GTS&lt;&#x2F;a&gt;. I don&#x27;t really play &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.vendetta-online.com&quot;&gt;Vendetta Online&lt;&#x2F;a&gt; much
any more, but I do appreciate that it&#x27;s an awesome game and I support
the devs. Plus, I was on the team of players that deciphered GTS back
in, um, 2003? So I feel that it is useful for a logo.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, feel free to let me know what you think. Or not, if you prefer.
The redesign was definitely a better way to spend an afternoon than
doing homework, no matter whether it&#x27;s any good or not...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Trust, Government and Health Care</title>
          <pubDate>Sat, 12 Sep 2009 17:15:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/trust-government-and-health-care/</link>
          <guid>https://www.roguelazer.com/blog/trust-government-and-health-care/</guid>
          <description xml:base="https://www.roguelazer.com/blog/trust-government-and-health-care/">&lt;p&gt;There&#x27;s currently something going on in Washington that Twitter has
called &quot;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;#search?q=%23912dc&quot;&gt;912dc&lt;&#x2F;a&gt;&quot; (&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nytimes.com&#x2F;2009&#x2F;09&#x2F;13&#x2F;us&#x2F;politics&#x2F;13protestweb.html?hp&quot;&gt;New York Times story&lt;&#x2F;a&gt;); it&#x27;s a protest against
not any particular act by government, but against government itself.
More Jeffersonian than anarchistic, though.&lt;&#x2F;p&gt;
&lt;p&gt;This protest bothers me a lot, and I thought that maybe if I wrote down
my ideas as to why, it&#x27;d bother me less. There are a few reasons why
people protest what they call &quot;big government&quot;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;They feel that they don&#x27;t need the services provided. — &lt;em&gt;This
covers a lot of the rich-white-libertarian group and doesn&#x27;t get a
response&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;They feel that private industry can provide the services better than
public government.&lt;&#x2F;li&gt;
&lt;li&gt;They actually only disagree with some action of the government, but
are protesting the whole thing anyway. — &lt;em&gt;The foreign-born-Obama
and 912dc intersection falls here&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;(most rarely)&lt;&#x2F;em&gt; They actually think the government is too big.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I&#x27;m sure that there are people at this rally for all of those reasons
(and probably a few that I haven&#x27;t considered), but there&#x27;s really one
that bothers me, and it&#x27;s one that I hear espoused a lot.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Newport Folk Festival</title>
          <pubDate>Sun, 02 Aug 2009 20:54:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/newport-folk-festival/</link>
          <guid>https://www.roguelazer.com/blog/newport-folk-festival/</guid>
          <description xml:base="https://www.roguelazer.com/blog/newport-folk-festival/">&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;newport-folk-festival&amp;#x2F;folk_fest.png&quot; alt=&quot;Newport Folk Festival Logo&quot; class=&quot;rfloat qimg&quot;  &#x2F;&gt;
  

I spent Saturday at the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.folkfestival50.com&#x2F;&quot;&gt;50th Newport Folk Festival&lt;&#x2F;a&gt;, and it was
excellent. Some of the highlights? Well, let&#x27;s see... I saw &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.ironandwine.com&#x2F;&quot;&gt;Iron &amp;amp; Wine&lt;&#x2F;a&gt;,
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.decemberists.com&#x2F;&quot;&gt;The Decemberists&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.myspace.com&#x2F;fleetfoxes&quot;&gt;Fleet Foxes&lt;&#x2F;a&gt;... the list goes on.
Aside from a little bit of sunburn and a lighter wallet thanks to having
my chair set up perilously close to the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.dels.com&#x2F;&quot;&gt;Del&#x27;s&lt;&#x2F;a&gt; stand, it was awesome.&lt;&#x2F;p&gt;
&lt;p&gt;The festival was held at Fort Adams State Park in Newport, RI, and
started at 11:30 in the morning. We even managed to get there for about
11:30, after waiting only about half an hour for a parking spot. Right
off the bat, the festival opened with a legendary name in folk:
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;ramblinjack.com&#x2F;&quot;&gt;Ramblin&#x27; Jack Elliott&lt;&#x2F;a&gt;. He was fun to listen to (lots of stories,
obviously), although not quite as dynamic a musician as some of the
others. Other early acts that I took in part of were &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;tiftmerritt.com&#x2F;&quot;&gt;Tift Meritt&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;benkweller.com&#x2F;&quot;&gt;Ben Kweller&lt;&#x2F;a&gt;. Merritt didn&#x27;t make much of an impression on me, but I
rather liked Kweller.&lt;&#x2F;p&gt;
&lt;p&gt;Around lunchtime, I watched &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.billybragg.co.uk&#x2F;&quot;&gt;Billy Bragg&lt;&#x2F;a&gt;, about whom I have somewhat
mixed feelings. He was very... politicized. On the one hand, I agree
with him and his songs about why socialized medicine is good and
deregulated banking is bad. On the other hand, even a rather staunch
social liberal such as myself might want to listen to some music without
the prosthelytizing that seems to be part of his music. I also saw a
little bit of Tom Morello, who I won&#x27;t even give a link to. He did not
appeal to me.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Recipe to Crash a Kindle</title>
          <pubDate>Sat, 18 Jul 2009 18:19:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/recipe-to-crash-a-kindle/</link>
          <guid>https://www.roguelazer.com/blog/recipe-to-crash-a-kindle/</guid>
          <description xml:base="https://www.roguelazer.com/blog/recipe-to-crash-a-kindle/">&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;farm3.static.flickr.com&amp;#x2F;2672&amp;#x2F;3733647194_4b4d77d32b_m.jpg&quot; alt=&quot;Kindle&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  

Here&#x27;s a fun thing that I&#x27;ve just discovered:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Purchase an &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.amazon.com&#x2F;dp&#x2F;B00154JDAI&quot;&gt;Amazon Kindle 2&lt;&#x2F;a&gt; (this trick &lt;em&gt;may&lt;&#x2F;em&gt; work on other
versions)&lt;&#x2F;li&gt;
&lt;li&gt;Download the MobiPocket version of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gutenberg.org&#x2F;etext&#x2F;972&quot;&gt;The Devil&#x27;s Dictionary&lt;&#x2F;a&gt;, by
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ambrose_Bierce&quot;&gt;Ambrose Bierce&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Copy the .mobi file into your Kindle documents folder&lt;&#x2F;li&gt;
&lt;li&gt;Open the copy of the book that appears on your device&lt;&#x2F;li&gt;
&lt;li&gt;Enjoy the frequent crashes and random &quot;&lt;var&gt;java.lang.integer&lt;&#x2F;var&gt;&quot;
exception errors that pop up (even when you do not have the book
open!)&lt;&#x2F;li&gt;
&lt;li&gt;Fight with the Kindle for a while until you realize that it&#x27;s this
book, remove it from your device, and reboot the device (yes, this
step is required)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;This public service announcement has been brought to you by the Center
for Not Being Annoyed at Your E-Book Reader.&lt;&#x2F;p&gt;
&lt;p&gt;As an aside, I absolutely adore my Kindle. I use it on my train ride and
at lunch pretty much every day. I thought that I might regret not having
the Kindle DX with it&#x27;s bigger screen but the Kindle 2 is the perfect
size. And Whispernet+real books from Amazon is a killer feature. Being
able to actually get books, unsurprisingly, makes me read more. I&#x27;d just
like it more if, you know, it never crashed.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>WordPress 2.8.1</title>
          <pubDate>Sun, 12 Jul 2009 15:04:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/wordpress-2-8-1/</link>
          <guid>https://www.roguelazer.com/blog/wordpress-2-8-1/</guid>
          <description xml:base="https://www.roguelazer.com/blog/wordpress-2-8-1/">&lt;p&gt;Just in case anybody cares, I&#x27;ve upgraded the site to the latest and
greatest (WordPress version 2.8.1). No user action is required at this
time.&lt;&#x2F;p&gt;
&lt;p&gt;Also, the code behind the blog is now valid HTML5, and there&#x27;s a Google
Friend Connect widget so you can participate in discussions without
creating yet another account (woo!).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Random Thought</title>
          <pubDate>Wed, 17 Jun 2009 22:26:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/random-thought/</link>
          <guid>https://www.roguelazer.com/blog/random-thought/</guid>
          <description xml:base="https://www.roguelazer.com/blog/random-thought/">&lt;p&gt;The underlying principal of free-market economics is that individual
actors will, in the aggregate, make optimal choices. Why should we
believe this to be true?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>One To Go</title>
          <pubDate>Thu, 14 May 2009 20:27:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/one-to-go/</link>
          <guid>https://www.roguelazer.com/blog/one-to-go/</guid>
          <description xml:base="https://www.roguelazer.com/blog/one-to-go/">&lt;p&gt;Well, I&#x27;m done with another semester. That finishes off my third year
here in Claremont. One to go. Woo.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New GPG Key</title>
          <pubDate>Fri, 08 May 2009 17:29:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-gpg-key/</link>
          <guid>https://www.roguelazer.com/blog/new-gpg-key/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-gpg-key/">&lt;p&gt;As you may have &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.debian-administration.org&#x2F;users&#x2F;dkg&#x2F;weblog&#x2F;48#comment_17&quot;&gt;seen&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;kitenet.net&#x2F;~joey&#x2F;blog&#x2F;entry&#x2F;sha-1&#x2F;&quot;&gt;around&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.braincells.com&#x2F;debian&#x2F;index.cgi&#x2F;search&#x2F;item=225&quot;&gt;the&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;eurocrypt2009rump.cr.yp.to&#x2F;837a0a8086fa6ca714249409ddfae43d.pdf&quot;&gt;Internet&lt;&#x2F;a&gt;, there was a
fairly significant break in the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SHA_hash_functions&quot;&gt;SHA-1&lt;&#x2F;a&gt; hash function, which is used
by default in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;gnupg.org&#x2F;&quot;&gt;GnuPG&lt;&#x2F;a&gt;. This is worrisome, since GPG&#x2F;PGP signatures are
one of the only things I&#x27;d actually trust to verify somebody&#x27;s identity
online. So I&#x27;ve generated a new key with a 2048-bit RSA primary (for
SHA256 and SHA512 support) and a 4096-bit ElGamal encrypting key (which
took about 15 minutes to generate, so better be worth it). The key ID is
&lt;code&gt;CB8AA0FF&lt;&#x2F;code&gt;, and the fingerprint is
&lt;code&gt;5C35 D713 3E10 9A19 FFFC  F58A 68E8 3B57 CB8A A0FF&lt;&#x2F;code&gt; I&#x27;ve already gone
ahead and signed the appropriate keys with it, and I&#x27;ll be revoking the
old key in a couple of months.&lt;&#x2F;p&gt;
&lt;p&gt;Oh, I suppose I should put in an actual link to the new key. Here&#x27;s my
&lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;key_transition_2009-05-08.txt.asc&quot;&gt;key transition statement&lt;&#x2F;a&gt;, and here&#x27;s the &lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;roguelazer.gpg&quot;&gt;new key&lt;&#x2F;a&gt; itself.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Code</title>
          <pubDate>Sun, 03 May 2009 16:52:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/code/</link>
          <guid>https://www.roguelazer.com/blog/code/</guid>
          <description xml:base="https://www.roguelazer.com/blog/code/">&lt;p&gt;If you were to examine the &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;code&#x2F;&quot;&gt;Code&lt;&#x2F;a&gt; section of this website, you would
find that it now contains actual, real live content. Amazing!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The Decemberists - The Hazards of Love</title>
          <pubDate>Sat, 18 Apr 2009 17:11:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/the-decemberists-the-hazards-of-love/</link>
          <guid>https://www.roguelazer.com/blog/the-decemberists-the-hazards-of-love/</guid>
          <description xml:base="https://www.roguelazer.com/blog/the-decemberists-the-hazards-of-love/">&lt;p&gt;





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;the-decemberists-the-hazards-of-love&amp;#x2F;hol.jpg&quot; alt=&quot;The Hazards of Love album art&quot; class=&quot;rfloat qimg&quot;  &#x2F;&gt;
  

So, I&#x27;ve been mulling over this post for a
couple of weeks, ever since I bought the new &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.decemberists.com&quot;&gt;Decemberists&lt;&#x2F;a&gt; album,
“The Hazards of Love”. I suppose you could label it something of an
&quot;indie rock opera&quot;. But, after a couple of weeks with it, I personally
would label it &lt;strong&gt;&quot;The Best Album of 2009&quot;&lt;&#x2F;strong&gt;. The plot is a bit bizarre,
about a woman Margaret, her forest-spirit lover William, the Queen of
the forest, and a murderous rake, and it&#x27;s a bit of a far-out story. The
idea of having an album that isn&#x27;t just a collection of singles is bit
out there for these times. And, mark my words, this is &lt;em&gt;not&lt;&#x2F;em&gt; an album
full of singles. By themselves, these songs are good, but none of them
is great. However, as a whole, the album is amazing. I&#x27;ve listened to it
at least five times in the last two weeks, and it really is awesome to
listen to straight through.&lt;&#x2F;p&gt;
&lt;p&gt;Musically, this album clearly borrows from a lot of past genres. The
second track, &lt;em&gt;The Hazards of Love 1 (The Prettiest Whistles Won&#x27;t
Wrestle the Thistles Undone)&lt;&#x2F;em&gt; reminds me pretty strongly of some
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pentangle_(band)&quot;&gt;Pentangle&lt;&#x2F;a&gt; tracks. The prominent acoustic bass line at about 1:15
into the song could easily fit in with &lt;em&gt;Market Song&lt;&#x2F;em&gt;, &lt;em&gt;Haitian Fight
Song&lt;&#x2F;em&gt;, or something else off of “Sweet Child”.&lt;&#x2F;p&gt;
&lt;p&gt;Then there&#x27;s track 10, &lt;em&gt;The Rake&#x27;s Song&lt;&#x2F;em&gt;, which is one of the songs from
this album that might stand alone as a single. Heavy fuzz-bass, a fairly
simple acoustic guitar line, and the powerful voice of Colin Meloy give
this song a folk-rock-ish feel. The lyrics make it disturbingly
memorable.&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s see, what else? I suppose that no review of this album would be
complete without talking about &lt;em&gt;The Queen&#x27;s Rebuke&#x2F;The Crossing&lt;&#x2F;em&gt;. The
instrumentals on this song provide such a powerful wall of sound that it
almost elicits comparisons with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Led_Zeppelin&quot;&gt;Led Zeppelin&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pink_Floyd&quot;&gt;Pink Floyd&lt;&#x2F;a&gt;, or
some other 70&#x27;s heavy-rock band. Shara Worden&#x27;s vocals on this song
remind me a bit of Sandy Denny in &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fairport_Convention&quot;&gt;Fairport Convention&lt;&#x2F;a&gt;, but with a
darker twang.&lt;&#x2F;p&gt;
&lt;p&gt;Track 15, &lt;em&gt;The Hazards of Love 3 (Revenge!)&lt;&#x2F;em&gt;, is a bit of an oddity. It
opens with the main &lt;em&gt;Hazards of Love&#x2F;The Wanting Comes in Waves&lt;&#x2F;em&gt; melody,
then abruptly transitions to a harpsichord and vaguely chromatic
childrens&#x27; voices. Combine this with screeching strings and chopped
synthesizers, and it&#x27;s a seriously creepy song. Which is appropriate, I
suppose, for a song about the ghosts of murdered children coming back to
take revenge via patricide.&lt;&#x2F;p&gt;
&lt;p&gt;The album ends on a completely different tone, of course. &lt;em&gt;The Hazards
of Love 4 (The Drowned)&lt;&#x2F;em&gt; has laid-back New Wave-y rhythms with a melody
that could almost be... country? Or maybe that&#x27;s just the pedal steel
guitar giving me that impression. It&#x27;s a completely different style than
the rest of the album, anyway. But it&#x27;s still excellent, and, having
heard it, I couldn&#x27;t picture the album ending any other way.&lt;&#x2F;p&gt;
&lt;p&gt;Just from these tracks, you can see that this album charts an enormous
amount of musical space. I&#x27;m sure that it won&#x27;t be for everybody. But,
well, it has my recommendation.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Backgrounds</title>
          <pubDate>Tue, 14 Apr 2009 14:28:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/backgrounds/</link>
          <guid>https://www.roguelazer.com/blog/backgrounds/</guid>
          <description xml:base="https://www.roguelazer.com/blog/backgrounds/">&lt;p&gt;I&#x27;ve been playing with The Gimp a bit recently, using edge-detection,
colorization, and some other filters on some of my photos to make
vaguely-abstract desktop backgrounds. I think it&#x27;s worked pretty well,
so I&#x27;m posting a few of the things I made here. Well, more specifically,
over at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;sets&#x2F;72157616681541965&#x2F;detail&#x2F;&quot;&gt;Flickr&lt;&#x2F;a&gt;].
Let me know what you think.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: vim modelines</title>
          <pubDate>Sun, 29 Mar 2009 18:23:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-vim-modelines/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-vim-modelines/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-vim-modelines/">&lt;p&gt;&lt;img src=&quot;http:&#x2F;&#x2F;www.roguelazer.com&#x2F;wp-content&#x2F;uploads&#x2F;2009&#x2F;03&#x2F;vim.png&quot; alt=&quot;vim logo&quot; title=&quot;vim logo&quot; &#x2F;&gt;{.lfloat} As you may know, in the editor wars, I come down firmly on
the side of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.vim.org&quot;&gt;vim&lt;&#x2F;a&gt;. Vim is a lean and effective modal editor,
contrasted with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;emacs&#x2F;&quot;&gt;emacs&lt;&#x2F;a&gt;. One of the features of Vim that I enjoy using
(but did not know about until recently!) is modelines. A modeline is a
small piece of text that you can put at the end of a file to give your
editor an instruction. It is generally placed in a comment. For example,
if I&#x27;m editing Python, I never, ever want to use soft tabs (well, I
generally don&#x27;t like soft tabs anyway), so I might put something like
the following at the end of a file:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# vim:expandtab ts=4 sw=4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When vim opens this file, it will parse that line and pass the
space-separated arguments to &quot;set&quot;. So this is equivalent to my typing
in &lt;kbd&gt;:set expandtab ts=4 sw=4&lt;&#x2F;kbd&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Another great usage of these is for setting syntax highlighting. Vim is
generally good at guessing the file type for syntax highlighting from the
stuffix of the file. For example, &lt;samp&gt;file.py&lt;&#x2F;samp&gt; will be detected as a
Python file and highlighted appropriately. But what about a file like
&lt;samp&gt;&#x2F;etc&#x2F;apache2&#x2F;vhosts&#x2F;default.conf&lt;&#x2F;samp&gt;? It should be highlighted as
an Apache configuration file, but the suffix &lt;samp&gt;.conf&lt;&#x2F;samp&gt; tells Vim
nothing. The solution here is to use a modeline. My Apache configuration
files end in the line&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# vim:syntax=apache filetype=apache&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;which makes it a lot easier to read them.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;formats&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#formats&quot; aria-label=&quot;Anchor link for: formats&quot;&gt;Formats&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;There are a few different formats. The first (and simplest) is what I
have shown above: a comment character, a space, the text &quot;vim:&quot;, then a
space-separated list of arguments. There may not be any non-argument
text on the line. This means that the following is invalid:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;* vim:expandtab ts=4 sw=4 *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Obviously, this is a bit annoying, because there are lots of
comment-formats that require both an opening &lt;em&gt;and&lt;&#x2F;em&gt; an ending (C, Pascal,
and SML come to mind immediately). There is, thus, an alternate syntax:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;* vim: set expandtab ts=4 sw=4: *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note that the &lt;kbd&gt;set&lt;&#x2F;kbd&gt; statement is now delimited by colons on
both sides. This is important! If you leave off the trailing colon, Vim
will get very unhappy with you.&lt;&#x2F;p&gt;
&lt;p&gt;Another handy feature of modelines is that you can limit them by
version. For example, if I want to use something that was introduced in
Vim 6.0, I could use the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# vim600: set expandtab&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;samp&gt;vim600&lt;&#x2F;samp&gt; means &quot;any version of Vim 600 or later&quot;, where 600
in Vim versions translates to 6.0.0.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;caveats&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#caveats&quot; aria-label=&quot;Anchor link for: caveats&quot;&gt;Caveats&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Modelines are not generally enabled for root. Since they&#x27;re
possibly-sketchy code that runs automatically when you open a file,
it&#x27;s considered (wisely) a security risk to run them as root&lt;&#x2F;li&gt;
&lt;li&gt;Modelines might not be turned on in your default config at all. To
turn them on, add  &lt;samp&gt;set ml&lt;&#x2F;samp&gt; to your &lt;samp&gt;~&#x2F;.vimrc&lt;&#x2F;samp&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Enjoy! If you want to learn more, I recommend reading the Vim
documentation &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;vimdoc.sourceforge.net&#x2F;htmldoc&#x2F;options.html#modeline&quot;&gt;section on modelines&lt;&#x2F;a&gt; or the Vim Tips Wiki article
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;vim.wikia.com&#x2F;wiki&#x2F;VimTip331&quot;&gt;Modeine magic&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>awesome window manager</title>
          <pubDate>Sun, 29 Mar 2009 10:22:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/awesome-window-manager/</link>
          <guid>https://www.roguelazer.com/blog/awesome-window-manager/</guid>
          <description xml:base="https://www.roguelazer.com/blog/awesome-window-manager/">&lt;p&gt;First, some background for the non-technical among you. A window manager
is a piece of software that controls the windows on your computer. It
will do things like placement, drawing, keybinding, et cetera. If you&#x27;re
on Windows or Mac OS X, you have a window manager built-in to your
operating system and cannot easily change it. However, if you&#x27;re on a
more traditional *nix (Linux, Solaris), you are free to select your
window manager. In this post, I&#x27;ll talk a little about what I use and
why it&#x27;s &lt;strong&gt;awesome&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Summer Employment</title>
          <pubDate>Thu, 19 Mar 2009 13:23:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/summer-employment/</link>
          <guid>https://www.roguelazer.com/blog/summer-employment/</guid>
          <description xml:base="https://www.roguelazer.com/blog/summer-employment/">&lt;p&gt;







&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;summer-employment&amp;#x2F;offer.jpg&quot;&gt;
  
  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;summer-employment&amp;#x2F;offer.jpg&quot; alt=&quot;Offer letter&quot; class=&quot;lfloat qimg&quot;  &#x2F;&gt;
  
&lt;&#x2F;a&gt;


Well, my job search is over. As of today, I&#x27;ve accepted an
offer from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&quot;&gt;Google&lt;&#x2F;a&gt; for a summer internship. I&#x27;ll be in New York City
from June 1&lt;sup&gt;st&lt;&#x2F;sup&gt; through August 21&lt;sup&gt;th&lt;&#x2F;sup&gt;, working at
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;support&#x2F;jobs&#x2F;bin&#x2F;static.py?page=why-ny-ny.html&amp;amp;loc_id=1122&amp;amp;dep_id=1173&amp;amp;topic=1122&quot;&gt;Google&#x27;s 9&lt;sup&gt;th&lt;&#x2F;sup&gt; Avenue office&lt;&#x2F;a&gt;. I&#x27;m not sure where exactly I&#x27;ll be living (I&#x27;m looking to
apartments, student housing, etc., but haven&#x27;t settled on anything yet),
but I&#x27;ll try to keep you, my loyal readers, up to date.&lt;&#x2F;p&gt;
&lt;p&gt;It was a hard decision (I had a few offers, including &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.dreamhost.com&quot;&gt;DreamHost&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.directv.com&quot;&gt;DirecTV&lt;&#x2F;a&gt;, plus more interviewers interested), but, I mean, it&#x27;s sort
of hard to say no to working for &lt;strong&gt;Google&lt;&#x2F;strong&gt;. It also didn&#x27;t hurt that
they offered me the most money. :-)&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, whee! Now I can go back to worrying about work &lt;em&gt;now&lt;&#x2F;em&gt;, instead of
three months from now. For the time being, though, it&#x27;s back to spring
break with me.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>minus</title>
          <pubDate>Sat, 28 Feb 2009 19:27:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/minus/</link>
          <guid>https://www.roguelazer.com/blog/minus/</guid>
          <description xml:base="https://www.roguelazer.com/blog/minus/">&lt;p&gt;So, I working on my algs problem set just now; which is to say, I was
browsing the web and trying very hard not to think about amortized
runtime analysis. Anyhow, I found this awesome webcomic called
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.kiwisbybeat.com&#x2F;minus.html&quot;&gt;minus&lt;&#x2F;a&gt;. I know, I know, I&#x27;m years behind the curve, and it&#x27;s a
little... odd. But it has a persistently beautiful surrealism to it.
Anyhow, you all should go read it. And, of course, all of the other
webcomics I read are listed under &quot;Links&quot; above.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>WordPress 2.7.1</title>
          <pubDate>Tue, 10 Feb 2009 16:29:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/wordpress-271/</link>
          <guid>https://www.roguelazer.com/blog/wordpress-271/</guid>
          <description xml:base="https://www.roguelazer.com/blog/wordpress-271/">&lt;p&gt;WordPress 2.7.1 has been released&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. And I&#x27;m sure that you, my loyal
cadre of imaginary readers, will be glad to know that I&#x27;ve upgraded. :-)&lt;&#x2F;p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;http:&#x2F;&#x2F;wordpress.org&#x2F;development&#x2F;2009&#x2F;02&#x2F;wordpress-271&#x2F; &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</description>
      </item>
      <item>
          <title>Fishbots</title>
          <pubDate>Thu, 05 Feb 2009 19:29:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/fishbots/</link>
          <guid>https://www.roguelazer.com/blog/fishbots/</guid>
          <description xml:base="https://www.roguelazer.com/blog/fishbots/">&lt;p&gt;For the past couple of weeks, I&#x27;ve been hearing from a number of
&quot;Fishbots&quot;. If you don&#x27;t know what I&#x27;m talking about, well, there&#x27;s this
service called &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;project-upstream.awardspace.com&#x2F;&quot;&gt;Project Upstream&lt;&#x2F;a&gt; which runs a network of AIM bots
with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;community.livejournal.com&#x2F;themissinghat&#x2F;479963.html&quot;&gt;names&lt;&#x2F;a&gt; like ThemedSalmon and &quot;SweptCoho&quot;. The idea behind these
bots seems to be that they collect AIM nicks and then randomly connect
pairs of people. It&#x27;s sort of a cool idea, if you think about it.
Random, and completely anonymous, one-time contact with a person.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>A Beautiful Day To Be Outside</title>
          <pubDate>Sat, 31 Jan 2009 19:07:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/beautiful-day/</link>
          <guid>https://www.roguelazer.com/blog/beautiful-day/</guid>
          <description xml:base="https://www.roguelazer.com/blog/beautiful-day/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;3242268889&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;farm4.static.flickr.com&#x2F;3317&#x2F;3242268889_23f8c9571a_b.jpg&quot; alt=&quot;CHWP&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Today was an absolutely beautiful day. Clear blue skies,
mid-70&#x27;s temperature, low smog, completely perfect. So, like any other
sane human being, I decided to take a walk. Specifically, I hiked up to
the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.ci.claremont.ca.us&#x2F;ps.cityprofile.cfm?ID=1709&quot;&gt;Claremont Hills Wilderness Park&lt;&#x2F;a&gt;, which is a nice little place &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;maps.google.com&#x2F;maps?f=d&amp;amp;source=s_d&amp;amp;saddr=34.10683,-117.70752&amp;amp;daddr=4031+N.+Mills+Ave,+Claremont,+CA+91711+(Claremont+Hills+Wilderness+Park)&amp;amp;hl=en&amp;amp;geocode=%3BFZf0CAIdpu37-CF6AWO11BTKiw&amp;amp;mra=dme&amp;amp;mrcr=0&amp;amp;mrsp=0&amp;amp;sz=14&amp;amp;dirflg=w&amp;amp;sll=34.120829,-117.710266&amp;amp;sspn=0.058123,0.112867&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;z=14&quot;&gt;a
few miles north of campus&lt;&#x2F;a&gt;. On the way there, I was really struck by
life in California. Here I was, walking along on one of the most
beautiful days of the year, and I didn&#x27;t see more than a half-dozen
other pedestrians on the two-and-a-half mile walk up to the park. Of
course, I saw several hundred cars, trucks, and SUVs. I saw people
driving from their homes on Mills down the street to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.safeway.com&#x2F;&quot;&gt;Vons&lt;&#x2F;a&gt; and back
again. It&#x27;s so weird here — on the one hand, a lot of people seem to be
&quot;fitness freaks&quot; and very concerned with &quot;wellness&quot;, but on the other
hand there&#x27;s this overbearing car culture...&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Andrew Bird - Noble Beast</title>
          <pubDate>Tue, 20 Jan 2009 12:00:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/andrew-bird-noble-beast/</link>
          <guid>https://www.roguelazer.com/blog/andrew-bird-noble-beast/</guid>
          <description xml:base="https://www.roguelazer.com/blog/andrew-bird-noble-beast/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;andrew-bird-noble-beast&amp;#x2F;noblebeast_400px-150x150.jpg&quot; alt=&quot;Noble Beast cover art&quot; class=&quot;lfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;So, I picked up a copy of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.andrewbird.net&quot;&gt;Andrew Bird&lt;&#x2F;a&gt;&#x27;s new album Noble Beast today.
Yes, I know that today is January 18th and it&#x27;s not released until
January 20th. That&#x27;s why this post isn&#x27;t going to be published for two
days.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, the album is excellent. Everything you know and love from Bird&#x27;s
previous releases is here, but more polished. Some things that I thought
particularly stood out:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The instrumental beginning of &lt;em&gt;Effigy&lt;&#x2F;em&gt;. And the double-stopping
soloing in the middle. Really, the whole song.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Unfolding Fans&lt;&#x2F;em&gt;. Makes me think of Brian Wilson, but in a more
minor key&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Yeah, I know, this isn&#x27;t much of a review. Well, I&#x27;m not much of a
reviewer. So I&#x27;ll give you my bottom line -- &lt;em&gt;go buy the album now&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Back at Mudd</title>
          <pubDate>Sun, 18 Jan 2009 16:38:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/back-at-mudd/</link>
          <guid>https://www.roguelazer.com/blog/back-at-mudd/</guid>
          <description xml:base="https://www.roguelazer.com/blog/back-at-mudd/">&lt;p&gt;Well, break&#x27;s over. I&#x27;m back at Mudd. Hopefully, I&#x27;ll keep updating as
the semester goes on.&lt;&#x2F;p&gt;
&lt;p&gt;Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Air Travel</title>
          <pubDate>Sat, 17 Jan 2009 23:21:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/air-travel/</link>
          <guid>https://www.roguelazer.com/blog/air-travel/</guid>
          <description xml:base="https://www.roguelazer.com/blog/air-travel/">&lt;p&gt;So, I&#x27;m currently in San Clemente for a couple of days before going back
to Claremont. As usual, the trip cross-country was &lt;em&gt;fun&lt;&#x2F;em&gt;. Lots of hours
in a tin can. Anyhow, something amusing happened at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pvdairport.com&#x2F;&quot;&gt;T.F. Green&lt;&#x2F;a&gt; when
I was leaving. TSA got confused by my backpack in the X-Ray machine
(understandable, since it&#x27;s got a zillion wires and such in it). So they
start going through it and they find that I brought a copy of Mohsin
Hamid&#x27;s &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.harcourtbooks.com&#x2F;reluctant_fundamentalist&#x2F;&quot;&gt;The Reluctant Fundamentalist&lt;&#x2F;a&gt;. The guy then ignores the rest
of my bag, pulls out the book, and runs it through the X-Ray while
running swabs from it through the chemical analyzer. I&#x27;m not sure
whether it&#x27;s worse that&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;they thought they&#x27;d find anything on a chemical scan&#x2F;X-Ray of a book&lt;&#x2F;li&gt;
&lt;li&gt;they were more concerned with a book than with the tangle of wires
in my bag&lt;&#x2F;li&gt;
&lt;li&gt;they were interested in a &lt;strong&gt;book&lt;&#x2F;strong&gt; in the first place&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Isn&#x27;t travel fun?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Long Day</title>
          <pubDate>Wed, 14 Jan 2009 22:51:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/long-day/</link>
          <guid>https://www.roguelazer.com/blog/long-day/</guid>
          <description xml:base="https://www.roguelazer.com/blog/long-day/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;long-day&amp;#x2F;ncfta-demo-site.png&quot; alt=&quot;NCFTA Demo Site&quot; class=&quot;cimg&quot;  &#x2F;&gt;
  
&lt;p&gt;I just had a &lt;em&gt;fun&lt;&#x2F;em&gt; day. For some value of fun, at least. I spent most of
the day fighting with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Web_content_management_system&quot;&gt;CMS&lt;&#x2F;a&gt;s for the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.ncfta.org&quot;&gt;Narrows Center for the Arts&lt;&#x2F;a&gt;,
which is considering moving away from their antiquated website that some
guy hacked together for them. I mean, not that tables-based layouts
aren&#x27;t still cool and all. Oh wait, they&#x27;re not. So I was playing with
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.joomla.org&#x2F;&quot;&gt;Joomla&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.drupal.org&quot;&gt;Drupal&lt;&#x2F;a&gt; to see if I could cobble together something
slightly less ugly. I ended up spending most of the day withing with
Drupal, the Drupal &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;drupal.org&#x2F;project&#x2F;cck&quot;&gt;Content Construction Kit&lt;&#x2F;a&gt;, and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;drupal.org&#x2F;project&#x2F;contemplate&quot;&gt;Contemplate&lt;&#x2F;a&gt;.
Joomla&#x27;s admin interface got on my nerves too quickly. Anyhow, it takes
a lot of clicks, but it seems possible to put together pretty much
anything in Drupal, which is nice. Of course, I&#x27;m not sure that I want
to invest the kind of time that it would take to make a decent
theme&#x2F;stylesheet for the Narrows. Especially not with the semester
started. But I demoed a quick and dirty version to them, so hopefully
their eyes are opened a bit. Of course, I didn&#x27;t spend any time on the
theme at all. So the odds are just as good that they&#x27;ll ignore the
content and focus on the mediocre presentation and just not pay any
attention at all. Such is life, I suppose. You can see a screenshot of
one of the pages at right.&lt;&#x2F;p&gt;
&lt;p&gt;After that, my folks decided that we should all go out to dinner. Fine
with me. We went to a place called &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;maps.google.com&#x2F;maps?oe=utf-8&amp;amp;rls=org.mozilla:en-US:official&amp;amp;client=firefox-a&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;q=mesa+21,+fall+river,+ma&amp;amp;fb=1&amp;amp;split=1&amp;amp;view=text&amp;amp;latlng=17915022983528223807#&quot;&gt;Mesa 21&lt;&#x2F;a&gt; in Fall River, which
replaced a nice Italian restaurant called Il Piatto Semplice. Well, Mesa
21 did not live up to its predecessor. They decided to add a bar, which
dominates the room in a terrible faux-stone design. They also installed
a giant-screen TV behind the bar which shows loud ESPN. Basically, they
turned one of the only nice non-Portuguese restaurants in the city into
a loud sports bar with mediocre food and no atmosphere to speak of.
&lt;strong&gt;*sigh*.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So then I get back and guess what I have in my inbox! A nice e-mail from
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&quot;&gt;Google&lt;&#x2F;a&gt; informing me that while I have a nice shiny resume, they &quot;do
not have a position that is a strong match with [my] qualifications&quot;. I
know, it was a reach to think that I could get one of the Google
internships, but it&#x27;s still a little depressing to get a rejection
before the application deadline even hits. One less thing to look
forward to, I guess.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s it for me for now. I may or may not decide to post something else
in the next couple of days. If not, well, I&#x27;ll post again when I&#x27;m back
in California. Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>OS X Tip of the Day: Twitterific and QuickSilver</title>
          <pubDate>Mon, 12 Jan 2009 20:54:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/os-x-tip-of-the-day-twitterific-and-quicksilver/</link>
          <guid>https://www.roguelazer.com/blog/os-x-tip-of-the-day-twitterific-and-quicksilver/</guid>
          <description xml:base="https://www.roguelazer.com/blog/os-x-tip-of-the-day-twitterific-and-quicksilver/">&lt;p&gt;There are a few &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.codahale.com&#x2F;2007&#x2F;01&#x2F;15&#x2F;tweet-twitter-quicksilver&#x2F;&quot;&gt;tips&lt;&#x2F;a&gt; online as to how to use &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.twitter.com&quot;&gt;Twitter&lt;&#x2F;a&gt; and
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.blacktree.com&#x2F;&quot;&gt;QuickSilver&lt;&#x2F;a&gt; together, but they&#x27;re lame. Particularly because they
send your Twitter password over a nice non-https connection. And because
I don&#x27;t like to have to choose between getting prompted to grant access
to my Twitter password every time I post from QuickSilver and granting
all AppleScripts free access to my Twitter password. So I decided to
leverage &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;iconfactory.com&#x2F;software&#x2F;twitterrific&quot;&gt;Twitterific&lt;&#x2F;a&gt;&#x27;s AppleScript support and write the following
quick AppleScript:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;applescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;using terms from&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt; application&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Quicksilver&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;    on&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; process &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;        tell&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt; application&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #9ECE6A);&quot;&gt;Twitterrific&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #89DDFF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; to&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; post update t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt;    end&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; process &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #0DB9D7);&quot;&gt;text&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt;end using terms from&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Just drop it in &lt;code&gt;~&#x2F;Library&#x2F;Application Support&#x2F;Quicksilver&#x2F;Actions&lt;&#x2F;code&gt; and
restart QuickSilver. Voilà!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New Site, Yet Again</title>
          <pubDate>Sat, 10 Jan 2009 21:42:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-site-yet-again/</link>
          <guid>https://www.roguelazer.com/blog/new-site-yet-again/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-site-yet-again/">&lt;p&gt;Hello valiant readers. It&#x27;s that time again. I&#x27;ve grown bored of what I
had and moved on to something new. In this case, I&#x27;ve decided to migrate
to WordPress, and to make it my primary website instead of being hidden
away on a subdomain. I&#x27;m going to attempt to mix a &quot;traditional&quot;
static-content website with a sort of blog idea. &lt;strong&gt;Roguelazer.com&lt;&#x2F;strong&gt; now
includes &lt;strong&gt;(lambda x blog)&lt;&#x2F;strong&gt;, and more. We&#x27;ll see how that works.
Anyhow, I&#x27;ve imported everything from Blogger, so we should be good to
go&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re keeping count, this makes my fifth weblog, although that&#x27;s
counting things from well before the terms &quot;weblog&quot; or &quot;blog&quot; had been
introduced. And that&#x27;s not counting the (many) old implementations of
Roguelazer.com, most of which had some sort of a news feed that I
treated like a blog.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, welcome, and I hope you enjoy the new site.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Site Renovations</title>
          <pubDate>Mon, 22 Dec 2008 00:00:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/renovations/</link>
          <guid>https://www.roguelazer.com/blog/renovations/</guid>
          <description xml:base="https://www.roguelazer.com/blog/renovations/">&lt;p&gt;Roguelazer.com is currently undergoing renovations due to its move from OnSmart to DreamHost. Owing to extreme business elsewhere, I am not sure when this site will be back up. Until then, you might want to read my blog on blogspot.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Another Meme</title>
          <pubDate>Thu, 13 Nov 2008 12:12:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/another-meme/</link>
          <guid>https://www.roguelazer.com/blog/another-meme/</guid>
          <description xml:base="https://www.roguelazer.com/blog/another-meme/">&lt;p&gt;Here&#x27;s the rules, as I&#x27;ve seen them on the Internet:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Grab the nearest book.&lt;&#x2F;li&gt;
&lt;li&gt;Open it to page 56.&lt;&#x2F;li&gt;
&lt;li&gt;Find the fifth sentence.&lt;&#x2F;li&gt;
&lt;li&gt;Post the text of the sentence in your journal along with these
instructions.&lt;&#x2F;li&gt;
&lt;li&gt;Don’t dig for your favorite book, the cool book, or the intellectual
one: pick the CLOSEST.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And my result is,&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;But this concept of nature is confirmed by experience and must
inevitably be presupposed if there is to be possible experience, which
is coherent knowledge of the objects of sense in accordance with
universal laws.&quot;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Immanuel Kant, &lt;em&gt;Grounding for the Metaphysics of Morals&lt;&#x2F;em&gt;. I may have
been writing a philosophy paper last night...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>On Teaching and Value</title>
          <pubDate>Sat, 20 Sep 2008 00:13:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/on-teaching-and-value/</link>
          <guid>https://www.roguelazer.com/blog/on-teaching-and-value/</guid>
          <description xml:base="https://www.roguelazer.com/blog/on-teaching-and-value/">&lt;p&gt;A few minutes ago, I was reading an article from my hometown&#x27;s
newspaper, the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.heraldnews.com&quot;&gt;Fall River Herald News&lt;&#x2F;a&gt;. It was an article indicating
that half of the schools in Fall River have been classified as &quot;needs
improvement&quot; by the state. I&#x27;m not here to talk to you about the article
so much; it was hardly good news, but nothing new for Fall River.
Instead, I&#x27;d like to talk about the comments. You see, I was reading
this article online, and the online edition of the Herald has a comments
field. Here are two of the posted comments, reproduced for analysis&#x27;
sake:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;duclos&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
city gets what it pays for--- city gives the least amount of money to education in the state-and the money they do have they misuse
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1972&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
Thanks duclos, I knew that was the problem with our schools. We have to start paying our teachers more in order to get them to teach! I figure $80,000 to $90,000 a year might get us off the failure list.
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I think that this represents an interesting divide in the perception of
schools, and one which I&#x27;ve seen a lot, at least anecdotally. So I
thought I&#x27;d do some research.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>It&#x27;s a meme!</title>
          <pubDate>Sat, 13 Sep 2008 01:16:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/its-a-meme/</link>
          <guid>https://www.roguelazer.com/blog/its-a-meme/</guid>
          <description xml:base="https://www.roguelazer.com/blog/its-a-meme/">&lt;p&gt;But it&#x27;s okay, because reading Planet Debian totally counts as work. :-)&lt;&#x2F;p&gt;
&lt;p&gt;Machine names:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;caveofbirds&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;seitchtabr&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;caladan&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;corrin&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ix&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;thalim&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;kaitain&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Can anybody guess the theme?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Fall River</title>
          <pubDate>Fri, 15 Aug 2008 15:18:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/fall-river/</link>
          <guid>https://www.roguelazer.com/blog/fall-river/</guid>
          <description xml:base="https://www.roguelazer.com/blog/fall-river/">&lt;p&gt;As my profile mentions, I come from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;fallriverma.org&#x2F;&quot;&gt;Fall River, MA&lt;&#x2F;a&gt;. Sometimes, I get
overly romantic ideas that it might be a place worth staying in. Then I
see something like I saw today, and I remember why it is that I spend
ten months out of every twelve &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.claremontonline.net&#x2F;index.cfm&quot;&gt;3000&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.hmc.edu&quot;&gt;miles&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;claremont.edu&#x2F;&quot;&gt;away&lt;&#x2F;a&gt;. :-(&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the $TIME_PERIOD: mutt</title>
          <pubDate>Fri, 15 Aug 2008 11:21:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-time-period-mutt/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-time-period-mutt/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-time-period-mutt/">&lt;p&gt;Hello readers; it&#x27;s been a while, hasn&#x27;t it? It&#x27;s summer, and, like many
people, I&#x27;m a slacker. Anyway, I thought that today, I&#x27;d talk to you a
little about the program that I&#x27;ve been using for a lot of my mail
recently: &lt;strong&gt;mutt&lt;&#x2F;strong&gt;. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mutt.org&#x2F;&quot;&gt;mutt&lt;&#x2F;a&gt; is a console mail-client. I know, I know, I
should get myself out of the 80&#x27;s. Well, I&#x27;ve found it to be much faster
and more powerful than any GUI client I&#x27;ve ever used. I&#x27;m not going to
go into much detail about the basics; there are are &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;mark.stosberg.com&#x2F;Tech&#x2F;mutt.html&quot;&gt;lots&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;mutt.blackfish.org.uk&#x2F;&quot;&gt;of&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;home.nyc.rr.com&#x2F;computertaijutsu&#x2F;mutt.html&quot;&gt;good&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;wiki.mutt.org&#x2F;?MuttGuide&quot;&gt;guides&#x2F;tutorials&lt;&#x2F;a&gt; on the Internet.&lt;&#x2F;p&gt;
&lt;p&gt;However, I do think I&#x27;ll share some of my configuration tips, and some
helpful hints that I&#x27;ve gotten along the way. My main .muttrc file can
be found &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.files.roguelazer.com&#x2F;muttrc&quot;&gt;here&lt;&#x2F;a&gt;. I&#x27;ll explain some of the neater sections as we go
along.&lt;&#x2F;p&gt;
&lt;p&gt;The first section deals with my mailboxes. I use a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Maildir&quot;&gt;Maildir&lt;&#x2F;a&gt;-format
store on this particular server (if you&#x27;re still using mbox, I feel
sorry for you). Well, I suppose it&#x27;s technically Maildir++. But
whatever. So a decent portion of that first section enables Maildir
usage. I then set the display to be threaded with the line
&lt;code&gt;set sort=thread&lt;&#x2F;code&gt;. I just find it easier to follow a threaded discussion
than to try and pick out the individual messages, although some people
violently disagree with me; well, they&#x27;re not the ones writing this
post. :-) Finally, I tell mutt which mailboxes to monitor (I&#x27;ve trimmed
this list because, well, you really don&#x27;t care about all of my
gazillions of mailboxes).&lt;&#x2F;p&gt;
&lt;p&gt;The next section is some pretty straightforward keybindings. Since I&#x27;m
using maildirs, I change the way that I change folders to enable default
browsing of mailboxes (as opposed to directories), and I add some keys
for PGP.&lt;&#x2F;p&gt;
&lt;p&gt;Next up: colors. I like color. It often makes it easier to read things.
Well, perhaps coloring smilies differently from text is a little
excessive... Much of this list comes from various sources on the
Internet, so props to all of the people who came before me.&lt;&#x2F;p&gt;
&lt;p&gt;Then I set some headers. By default, mutt shows full message headers,
which is way more information than I give a damn about. I set some sane
defaults here. Incidentally, if you are in a message in mutt and want to
view full headers, just press &lt;kbd&gt;h&lt;&#x2F;kbd&gt;. It took me a while to figure that
out, even though it&#x27;s pretty intuitive when you think about it. This
section also contains one of my favorite lines: &lt;code&gt;set mime_forward&lt;&#x2F;code&gt;. This
particular line came to me from one &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cs.ucsd.edu&#x2F;~mvrable&#x2F;&quot;&gt;Michael Vrable&lt;&#x2F;a&gt; (not to be
confused with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.patriots.com&#x2F;team&#x2F;index.cfm?ac=playerbio&amp;amp;bio=10110&quot;&gt;Mike Vrable&lt;&#x2F;a&gt;). What this line does is cause forwarded
messages to be sent as MIME attachments instead of quoted inline. This
is sometimes a bit more annoying when forwarding plain-text messages,
but, unfortunately, many silly people now send HTML messages. Not only
that, but some people send &lt;em&gt;only&lt;&#x2F;em&gt; HTML messages (no plain-text part at
all!), so when you forward these with the usual mutt mimetype of
text&#x2F;plain, graphical clients get confused. So, yeah, mime_forward is
very useful.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, I include some other files. The first file is for mailing lists
(mutt can mark them as mailing lists, and properly handle
reply&#x2F;reply-all) via the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mutt.org&#x2F;doc&#x2F;manual&#x2F;manual-3.html#ss3.9&quot;&gt;subscribe&lt;&#x2F;a&gt; command, the second one
(&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.math.ias.edu&#x2F;doc&#x2F;mutt-1.4.1&#x2F;gpg.rc&quot;&gt;gpg.rc&lt;&#x2F;a&gt;) sets up GnuPG, and the third one is for mutt &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;wiki.mutt.org&#x2F;?MuttGuide&#x2F;Aliases&quot;&gt;aliases&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Oh yeah, and I set mutt to auto-pgp-sign everything, because I&#x27;m that
kind of a guy. Below, enjoy some screenshots of my actual mail setup.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;message%20list.png&quot;&gt;&lt;img src=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;message%20list.png&quot; alt=&quot;Mailbox List&quot; &#x2F;&gt;&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;message%20view.png&quot;&gt;&lt;img src=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;message%20view.png&quot; alt=&quot;Message View&quot; &#x2F;&gt;&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;full%20headers.png&quot;&gt;&lt;img src=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;muttpics&#x2F;full%20headers.png&quot; alt=&quot;Full Headers&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Website Stuff</title>
          <pubDate>Wed, 13 Aug 2008 16:17:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/website-stuff/</link>
          <guid>https://www.roguelazer.com/blog/website-stuff/</guid>
          <description xml:base="https://www.roguelazer.com/blog/website-stuff/">&lt;p&gt;So, the more enterprising amongst you may have noticed that my blog is
now at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.roguelazer.com&quot;&gt;blog.roguelazer.com&lt;&#x2F;a&gt; instead of
anonymous-function.blogspot.com (although it&#x27;s still there, too). This
is because I was playing around with my website stuff today. For one
thing, I&#x27;ve moved to Google Apps for my Domain, because e-mail over
DreamHost&#x27;s IMAP servers was sometimes slow, and e-mail through the
Gmail servers probably won&#x27;t be. This also gives me better Jabber server
(i.e., SSL supported without me paying umpteen dollars for an SSL
certificate and a static IP and such). It&#x27;s generally neat.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ll post more on my thoughts and opinions of Google Apps for your
Domain as they occur to me.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Newport Jazz Festival 2008</title>
          <pubDate>Mon, 11 Aug 2008 07:13:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/newport-jazz-festival-2008/</link>
          <guid>https://www.roguelazer.com/blog/newport-jazz-festival-2008/</guid>
          <description xml:base="https://www.roguelazer.com/blog/newport-jazz-festival-2008/">&lt;p&gt;&lt;img src=&quot;http:&#x2F;&#x2F;2.bp.blogspot.com&#x2F;_-lBDH3brMF4&#x2F;SKAuCbkSo0I&#x2F;AAAAAAAAACk&#x2F;g6xhD-UzYEs&#x2F;s200&#x2F;JVC+Jazz.png&quot; alt=&quot;Newport Jazz Festival Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yesterday I went to the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.festivalnetwork.com&#x2F;jvcjazz&#x2F;newport&#x2F;sched.php&quot;&gt;2008 Newport JVC Jazz Festival&lt;&#x2F;a&gt;, and I
figured I&#x27;d review it a bit here.&lt;&#x2F;p&gt;
&lt;p&gt;We started off the morning with a set by the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.markrapp.com&#x2F;&quot;&gt;Mark Rapp band&lt;&#x2F;a&gt;. Mark
Rapp is a trumpet player, somewhat modern. He uses a wah about half of
the time, and it&#x27;s pretty cool. His band was good, too. The guitarist
was a little over-the-top, but he was generally good, and the bassist
was excellent. Oh, I almost forgot to mention, Rapp also played
didgeridoo, which was cool.&lt;&#x2F;p&gt;
&lt;p&gt;So, after Rapp, I saw a bit of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.lionelloueke.com&#x2F;&quot;&gt;Lionel Loueke&lt;&#x2F;a&gt;, who was an excellent
guitarist. Unfortunately, his band was not quite as excellent, and the
first couple of songs ended up being a bit snooze-worthy, so I wandered
over to another stage and watched &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;George_Wein&quot;&gt;George Wein&lt;&#x2F;a&gt; and the Newport
All-Stars (Howard Alden, Anat Cohen, Jimmy Cobb, and Eperanza Spalding.
That was pretty good, although it was a little odd for all of those
people to be playing together. &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;esperanzaspalding.com&quot;&gt;Esperanza Spalding&lt;&#x2F;a&gt; was especially
good — Wein had her do a solo bit (she&#x27;s a bassist who also sings,
which is a strange but nice combination).&lt;&#x2F;p&gt;
&lt;p&gt;At 1:50, I went over to the Waterside stage for the &quot;Newport Sunday
Surprise&quot;, which turned out to be &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.billfrisell.com&#x2F;&quot;&gt;Bill Frisell&lt;&#x2F;a&gt;! Considering that I
was in the second row of a quite small tent, that was awesome (not that
that was a surprise, or anything).&lt;&#x2F;p&gt;
&lt;p&gt;After Frisell, there was a 20 minute break before Esperanza Spalding
came to the Waterside stage, so I unwisely decided to get up and
stretch. When I came back 5 minutes later, there were a few thousand
people crowded into the area and I couldn&#x27;t even get within 20 feet of
the tent! So I watched a bit of her act from a distance, then went over
to the Pavilion Stage to see Guillermo Klein Y Los Gauchos, a jazz band.
They were a little raggedy, but they tightened up over their set, so it
ended up okay.&lt;&#x2F;p&gt;
&lt;p&gt;The last act I saw was Herbie Hancock, who was on the main stage. I was
very unimpressed. For the first couple of songs, he had a trio of female
backup singers whose voices seemed designed to bore into my head. When
they weren&#x27;t there, the guys on the mixing board just jammed the gain
all of the way up on everything else, so it was actually painful to
listen to, even from the middle of the field. Like, tooth-rattlingly
loud. I&#x27;m sure Hancock was good, but I couldn&#x27;t stand to try and listen
to him. Such a shame.&lt;&#x2F;p&gt;
&lt;p&gt;So, that was my Sunday. Pretty fun. Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Status</title>
          <pubDate>Sun, 27 Jul 2008 14:05:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/status/</link>
          <guid>https://www.roguelazer.com/blog/status/</guid>
          <description xml:base="https://www.roguelazer.com/blog/status/">&lt;p&gt;I&#x27;ve only got one more week left of summer research. This time next
week, I&#x27;ll be back on the East Coast. I&#x27;ve already sent my desktop off
to a cozy garage, and am posting this from my laptop. It was a pretty
involved process - I needed to move all of my RSS feeds from Liferea to
Google Reader, copy over my .vimrc and .emacs files, get a list of all
of my webcomics... But all of that&#x27;s done now. So, yeah, now I&#x27;m even
less likely to post to this blog. Woo hoo.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 3G: Real-World Use</title>
          <pubDate>Thu, 17 Jul 2008 00:43:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-3g-real-world-use/</link>
          <guid>https://www.roguelazer.com/blog/iphone-3g-real-world-use/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-3g-real-world-use/">&lt;p&gt;I&#x27;ve now had my iPhone 3G for four days, and I&#x27;ve had a chance to use it
in some real-world scenarios.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;apps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#apps&quot; aria-label=&quot;Anchor link for: apps&quot;&gt;Apps&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The App Store is, unequivocally, the most important feature of iPhone OS
2.0. Exchange support is nice, yes, and there are lots of little tweaks.
But the App Store is what makes the iPhone attractive to me, more of a
computer instead of a silly smartphone. I&#x27;ve been using a few apps
pretty solidly for the past few days: &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;iconfactory.com&#x2F;software&#x2F;twitterrific&quot;&gt;Twitterific&lt;&#x2F;a&gt; (a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.twitter.com&quot;&gt;Twitter&lt;&#x2F;a&gt;
client), &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;connectedflow.com&#x2F;exposure&#x2F;&quot;&gt;Exposure&lt;&#x2F;a&gt; (a Flickr client), and the official Facebook
client. All of these are well-written, and leverage the iPhone&#x27;s
interface and featureset. Twitterific is particularly enjoyable to use
(although I&#x27;m not sure if I&#x27;m entirely sold on the concept of
microblogging yet). As time goes on, I can see myself using these apps
even more, and there are a few apps that I&#x27;m still waiting for (for
example, where&#x27;s my blogger client? The post interface is pretty
terrible in the browser).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ipod&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ipod&quot; aria-label=&quot;Anchor link for: ipod&quot;&gt;iPod&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I haven&#x27;t really been a big user of iPods per se. It&#x27;s true, I do have
an iPod Color. But it has &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.rockbox.org&#x2F;&quot;&gt;rockbox&lt;&#x2F;a&gt; on it, and mostly serves to keep
me from listening to the engines on plane rides. The iPhone is the first
iPod that I&#x27;ve actually wanted to use as such. The sound is pretty good
(using 256 kbit&#x2F;s AAC files), and the interface is nice. I&#x27;m not sure if
I&#x27;ll be able to use mobile players where I can&#x27;t pause by pressing on
the headphone cable again.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.drhorrible.com&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;cache.gawker.com&#x2F;assets&#x2F;images&#x2F;gawker&#x2F;2008&#x2F;04&#x2F;poster01.jpg&quot; alt=&quot;Dr. Horrible&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Where the iPhone really shines, though, is as a portable video player.
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.drhorrible.com&#x2F;&quot;&gt;Dr. Horrible&lt;&#x2F;a&gt; is a comedy-musical-superhero webshow
written by Joss Whedon, and it&#x27;s available from iTunes. Watching it on
my iPhone has been a joy — quality is immensely better than through
Hulu, and the iPhone&#x27;s screen really shines for this sort of use.&lt;&#x2F;p&gt;
&lt;p&gt;Incidentally, &quot;Dr Horrible&#x27;s Sing-Along Blog&quot; is a really funny little
show. It apparently will consist of 3 ~15 minute acts, and so far seems
to have a lot of the wacky humor that I&#x27;d associate with Joss Whedon.
That, and Nathan Fillon.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3g-and-gps&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#3g-and-gps&quot; aria-label=&quot;Anchor link for: 3g-and-gps&quot;&gt;3G and GPS&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;As I mentioned in my &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-3g-unboxing-and-first-impressions&#x2F;&quot;&gt;previous iPhone 3G post&lt;&#x2F;a&gt;, 3G reception in my
dorm (and workplace) is pretty shoddy. This isn&#x27;t really a problem,
because I&#x27;ve got Wifi of on sort or another all over campus (and even at
the Starbucks across the street). Off-campus, it&#x27;s another story. 3G
reception in Claremont is pretty good, and data is noticably faster than
over EDGE. However, I did not notice a significant improvement in call
quality over 3G than 2.5G, which might be important considering the
power demands associated with 3G technologies.&lt;&#x2F;p&gt;
&lt;p&gt;One of the other things that I didn&#x27;t get to test before was GPS. As
expected, going outside made the GPS signal pop right up. It&#x27;s actually
sort of neat — we start with a location circle whose diameter is about
a mile, then it zooms in and the circle&#x27;s diameter goes to about 200
feet, then the GPS signal kicks in, and the circle turns into a dot at
my exact position. I guess it was sort of fun to watch my dot-self
walking down the line-street equivalent of the street that my real self
was walking down. I certainly don&#x27;t see Google Maps + iPhone GPS
replacing standalone GPS units (the requirement of network service for
map data is a deal-killer alone), but it&#x27;s a nice improvement of my
previous way of navigating (print out a Google Maps map before I left).
It also sucks up battery even faster than the 3G, so make sure to bring
a car charger when you&#x27;re off on your great adventure with your iPhone
3G.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;more-on-the-hardware&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#more-on-the-hardware&quot; aria-label=&quot;Anchor link for: more-on-the-hardware&quot;&gt;More on the Hardware&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;So far, the iPhone itself is holding up very well. It&#x27;s a veritable
fingerprint magnet, but no scratches, despite being in my pocket with
some change and such. The battery life is also fairly impressive — a
couple of days of medium use, and it&#x27;s still at more than half charged.&lt;&#x2F;p&gt;
&lt;p&gt;Well, I suppose that&#x27;s about it for my review today. Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 3G: Unboxing and First Impressions</title>
          <pubDate>Sat, 12 Jul 2008 16:25:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-3g-unboxing-and-first-impressions/</link>
          <guid>https://www.roguelazer.com/blog/iphone-3g-unboxing-and-first-impressions/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-3g-unboxing-and-first-impressions/">&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;DSC_0001 by roguelazer, on Flickr&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;2661502119&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm4.static.flickr.com&#x2F;3243&#x2F;2661502119_cabc2e1c4a_m.jpg&quot; alt=&quot;Unboxing&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve posted a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;sets&#x2F;72157606130291077&#x2F;&quot;&gt;few pictures of the unboxing of my iPhone 3G&lt;&#x2F;a&gt;. As
usual for an Apple product, the packaging was excellently done. The box
was surprisingly small, but contained everything necessary:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Docking Connector -&amp;gt; USB cable&lt;&#x2F;li&gt;
&lt;li&gt;Tiny, tiny power adapter&lt;&#x2F;li&gt;
&lt;li&gt;Iconic white headphones (with microphone... somewhere...)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; title=&quot;DSC_0007.JPG by roguelazer, on Flickr&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;2661522293&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm4.static.flickr.com&#x2F;3269&#x2F;2661522293_670b8dd279_t.jpg&quot; alt=&quot;SIM-Removal Tool&quot; &#x2F;&gt;&lt;&#x2F;a&gt;
SIM Card Removal Tool&lt;&#x2F;li&gt;
&lt;li&gt;Cleaning cloth&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Once I got done with my activation mess (see &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-3g-activation&#x2F;&quot;&gt;previous post&lt;&#x2F;a&gt;), the
iPhone was a dream. The first thing I noticed was call quality: it was
excellent. I don&#x27;t have 3G reception indoors (curse you, foot-thick
concrete walls), but even over 2.5G, it was an amazing upgrade from my
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.motorola.com&#x2F;motoinfo&#x2F;product&#x2F;details.jsp?globalObjectId=138&quot;&gt;Motorola L2&lt;&#x2F;a&gt;, and significantly improved over first-gen iPhones I&#x27;ve
used. People on the other end of the call also reported excellent sound
quality.&lt;&#x2F;p&gt;
&lt;p&gt;The OS and bundled software is much the same as in the original iPhone.
I haven&#x27;t really had a chance to try the App Store yet (waiting for CIS
to turn on 802.11b for this MAC ID, and GSM is a bit too slow for that
sort of thing), but it looks like the real game-changer in this 2.0
software. I&#x27;m thinking Twitterific and Exposure will be my first stops,
but we&#x27;ll see.&lt;&#x2F;p&gt;
&lt;p&gt;GPS, another of the touted features, also doesn&#x27;t work indoors. However,
Skyhook managed to get my location pretty much straight away, so
whatever. I&#x27;ll post again on GPS when I get out of the dungeon and into
the real world some time, I suppose.&lt;&#x2F;p&gt;
&lt;p&gt;All of my PIM stuff transferred straight away. This is far and away the
best contact management on a cell phone, say, ever. This is blasphemy
coming from me, but I think it&#x27;s even better than Palm&#x27;s. Yes, the guy
who used to run a Palm OS blog before the word blog existed and who has
had every generation of Palm OS device ever released says that this PIM
is better than Palm&#x27;s. Put it down in the record books. Multiple phone
numbers are handled sanel, personal ringtones and pictures just work,
and calendaring is excellent. I&#x27;m a happy man.&lt;&#x2F;p&gt;
&lt;p&gt;E-mail is also good. Gmail just worked. Woot IMAP. I haven&#x27;t tried to
set up any other accounts yet, but I&#x27;ll probably put something at
roguelazer.com, also over IMAP. Mail management is quick, and I think
I&#x27;m already getting used to the keyboard.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; title=&quot;IMG_0001 by roguelazer, on Flickr&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;2662392404&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm4.static.flickr.com&#x2F;3079&#x2F;2662392404_32969b3d93_m.jpg&quot; alt=&quot;SMS&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I went ahead and got the 200 SMS plan, even though
I&#x27;d be surprised if I used 50 a month. It&#x27;s cheaper to spend $5&#x2F;mo and
get 200 than to spend $10&#x2F;mo on 50. The interface is pretty
straightforward. I&#x27;m a little disappointed with speed (why does it still
take 5 seconds to send an SMS? I can send an e-mail in less time than
that!), but whatever. Incidentally, the new screenshot feature? Pure
genius.&lt;&#x2F;p&gt;
&lt;p&gt;I also played with the iPod features a bit. CoverFlow is embarrassingly
cool on this screen. So much so that I actually reimported a bunch of my
CDs into iTunes (yes, I could have just ripped the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Free_Lossless_Audio_Codec&quot;&gt;FLAC&lt;&#x2F;a&gt; files into
AAC or MP3 files, but I had the originals, so what the hell) and copied
them on. Sound quality is pretty good. Next up will be video, I suppose.
Hopefully, NBC and Apple will clear up their little spat, and I&#x27;ll be
able to watch all the good Sci-Fi channel shows from my iPhone.
*crosses fingers*.&lt;&#x2F;p&gt;
&lt;p&gt;Well, that&#x27;s it for now. I&#x27;ll get back to y&#x27;all once I&#x27;ve got some more
time with the thing, and can report on 3G, GPS, and App Store
performance.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 3G: Activation</title>
          <pubDate>Sat, 12 Jul 2008 15:38:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-3g-activation/</link>
          <guid>https://www.roguelazer.com/blog/iphone-3g-activation/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-3g-activation/">&lt;p&gt;Activation is the scary part of the iPhone process. Tales abound of
yesterday&#x27;s long waits and crushing failures. Unfortunately, my story is
no different.&lt;&#x2F;p&gt;
&lt;p&gt;I got my iPhone home at about 12:30 P.M. today. When I connected it to
my MacBook (named Caladan for reasons that anybody familiar with my
computer naming scheme should understand), iTunes started right up and
registered it. Alas, the phone made a little &quot;sad tweet&quot; and informed me
that it had no service and the service was required for activation. Hm.&lt;&#x2F;p&gt;
&lt;p&gt;Well, even though my crappy Motorola L2 has 5 bars everywhere in my
dorm, maybe the iPhone just isn&#x27;t that strong. So let&#x27;s try taking it
outside, where every cell provider in the universe has 5 bars. Nope.
Still no service. &amp;lt;google &#x2F;&amp;gt;It looks like some iPhones were shipped
with inactive SIM cards. Well, that&#x27;s a bummer. Let&#x27;s call AT&amp;amp;T customer
service...&lt;&#x2F;p&gt;
&lt;p&gt;I called AT&amp;amp;T (on my Motorola) and talked to a representative named
Keasa Arnold. She walked me through some basic troubleshooting steps
(try the SIM card on my other phone, try my other phone&#x27;s SIM card on
the iPhone, etc.) and told me she was just leaving for her lunch break,
but would call me back in a few minutes any way. I went through the
rigamarole, but no luck. Ms. Arnold called me back and we jointly
concluded that the SIM card must not be set up correctly. A couple of
minutes of typing on her end and I had 5 bars on my iPhone. Kudos to Ms.
Arnold and AT&amp;amp;T wireless; yet again, they&#x27;ve impressed me.&lt;&#x2F;p&gt;
&lt;p&gt;Next up: &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-3g-unboxing-and-first-impressions&#x2F;&quot;&gt;first impressions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 3G: The Purchasing Process</title>
          <pubDate>Sat, 12 Jul 2008 15:24:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-3g-the-purchasing-process/</link>
          <guid>https://www.roguelazer.com/blog/iphone-3g-the-purchasing-process/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-3g-the-purchasing-process/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;iphone&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;zapp2.staticworld.net&#x2F;reviews&#x2F;graphics&#x2F;products&#x2F;uploaded&#x2F;412780_g1.jpg&quot; alt=&quot;iPhone 3G&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;My &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;iphone&#x2F;&quot;&gt;iPhone 3G&lt;&#x2F;a&gt; experience started this morning at about 5:50 AM, when
I left my dorm to get an iPhone 3G. I hiked over to the Montclair
Transcenter and picked up the 6:30 &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;omnitrans.org&#x2F;&quot;&gt;OmniTrans&lt;&#x2F;a&gt; Route 66 bus heading
Eastward. At about 7:05, I stepped off the bus, thinking I was there.
Unfortunately, I was at another bus stop in front of a Best Buy with a
gas station next to it — about a mile and a half shy of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.victoriagardensie.com&#x2F;&quot;&gt;Victoria
Gardens Mall&lt;&#x2F;a&gt;, where the Apple and AT&amp;amp;T stores were. A half-hour of
hiking later, and I was there.&lt;&#x2F;p&gt;
&lt;p&gt;I passed by the AT&amp;amp;T store, which had about 20 people in line in front
of it. However, I have a terrible history with AT&amp;amp;T customer service, so
I figured I&#x27;d go to the Apple store. I was #45 in line at the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.apple.com&#x2F;retail&#x2F;victoriagardens&#x2F;&quot;&gt;Victoria
Gardens Apple Store&lt;&#x2F;a&gt;, next to a nice guy named Matt who was reading
Aldous Huxley&#x27;s &quot;Brave New World&quot;. It was 7:43 A.M. now, and the Apple
store was set to open at 9:00.&lt;&#x2F;p&gt;
&lt;p&gt;At about 8:25, an Apple store employee came out to ask us if we had any
questions. Now, some background. I am on a Family Talk plan, with my Mum
as the primary. I called AT&amp;amp;T last week to see what I would have to do
to get an iPhone, and they instructed me to have my mother add me as an
&quot;Authorized User&quot; on our account, then it would be smooth sailing. I did
this. Now, I tend to be an unsure fellow, so I asked the Apple store
employee whether I had done the right thing. I had, apparently, not.
According to this employee, Apple would not activate any phones
purchased without the account primary present. Seeing as how my mum is
about 3000 miles away right now, that&#x27;s not really feasible. I got a bit
huffed, as you might imagine. He said that I should try the AT&amp;amp;T store,
although he wasn&#x27;t sure whether they actually had any iPhones in stock.&lt;&#x2F;p&gt;
&lt;p&gt;So, frustrated, I headed over to the AT&amp;amp;T store, where the line had
grown to about 45 people. I begrudgingly stepped to the back of the
line, where I chatted with a nice woman named Angel who, apparently,
works Customer Service at a casino. After a couple of minutes, the store
manager came out to see if anybody had any questions. I flagged him down
and explained my situation. After a moment&#x27;s thought, he told me that
it&#x27;d be no problem, and I could purchase my iPhone. Score one for AT&amp;amp;T.&lt;&#x2F;p&gt;
&lt;p&gt;At almost exactly 9:00, the AT&amp;amp;T store opened up its doors and started
taking people four at a time (there were only four non-managerial
employees, from what I could see). I was a bit worried that they
wouldn&#x27;t have any in stock when I got there, but the friendly manager
assured me that they would. As I crept up the line (enjoying
complimentary ice water, score another for AT&amp;amp;T), the manager kept
taking head counts and assuring us that he still had iPhones in stock.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, I reached the front of the line. Lo, they still had iPhones in
stock! Admittedly, they were out of 16G models, but that&#x27;s okay with me.
A four minute transaction later, and I had my new iPhone 3G. Contrary to
popular opinion, AT&amp;amp;T did an excellent job of customer service, and
Apple sucked royally.&lt;&#x2F;p&gt;
&lt;p&gt;Next up: &lt;a href=&quot;https:&#x2F;&#x2F;www.roguelazer.com&#x2F;blog&#x2F;iphone-3g-activation&#x2F;&quot;&gt;Activation&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>iPhone 3G Acquired</title>
          <pubDate>Sat, 12 Jul 2008 15:23:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iphone-3g-acquired/</link>
          <guid>https://www.roguelazer.com/blog/iphone-3g-acquired/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iphone-3g-acquired/">&lt;p&gt;I&#x27;ve just purchased an iPhone 3G. I&#x27;ll now make a few posts about my
ordering experience.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>(end primaries)</title>
          <pubDate>Tue, 03 Jun 2008 21:35:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/end-primaries/</link>
          <guid>https://www.roguelazer.com/blog/end-primaries/</guid>
          <description xml:base="https://www.roguelazer.com/blog/end-primaries/">&lt;p&gt;Relying on &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.goobergunch.net&#x2F;vol6.html&quot;&gt;the numbers of my friend Martin Pyne&lt;&#x2F;a&gt;, the 2008 Democratic
Primary is over and Barack Obama is the winner. Woo!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Firefox 3</title>
          <pubDate>Sun, 18 May 2008 14:00:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/firefox-3/</link>
          <guid>https://www.roguelazer.com/blog/firefox-3/</guid>
          <description xml:base="https://www.roguelazer.com/blog/firefox-3/">&lt;p&gt;So, I got bored this weekend and installed &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;firefox&quot;&gt;Firefox&lt;&#x2F;a&gt; 3 (beta 5, if it
matters to you). It works pretty well — it&#x27;s certainly faster than
Firefox 2. However, there are a couple of annoying bugs that I&#x27;d like to
post the solutions to for posterity:&lt;&#x2F;p&gt;
&lt;p&gt;If you use a dark theme (like I do), then many textarea and input form
elements will be unusable because they will have a dark foreground color
and a light background color. The solution to this is to add a
&lt;code&gt;userContent.css&lt;&#x2F;code&gt; to &lt;code&gt;~&#x2F;.mozilla&#x2F;firefox&#x2F; &#x2F;chrome&lt;&#x2F;code&gt;. There are lots of
guides on the Internet for this file, so I won&#x27;t go into it. However,
the difference from Firefox 2 is that now any sections that you want to
actually be interpreted for reskinning &quot;native&quot; controls (like form
input boxes) need to have a &lt;code&gt;-moz-appearance: none !important;&lt;&#x2F;code&gt; rule.
There should, however, &lt;em&gt;not&lt;&#x2F;em&gt; be any &lt;code&gt;@namespace&lt;&#x2F;code&gt; directive.&lt;&#x2F;p&gt;
&lt;p&gt;The other annoying thing is that the Awesomebar thinks links should be
green. Don&#x27;t get me wrong, I like the awesomebar, and I like links, and
I like the color green. But green really doesn&#x27;t work with my theme. So
I reskinned them, using the &lt;code&gt;userChrome.css&lt;&#x2F;code&gt; file in the same directory
as &lt;code&gt;userContent.css&lt;&#x2F;code&gt;. Copying the example will get you the @namespace
directive, which &lt;em&gt;is&lt;&#x2F;em&gt; important in this file. Then, the following lines
will get you some nice blue-ish links (this color looks good on a dark
background):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E0AF68);&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #9ECE6A);&quot;&gt;ac-url-text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#1976D2, #7AA2F7);&quot;&gt;    color&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #89DDFF);&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9AA5CE);&quot;&gt; #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#1976D2, #9AA5CE);&quot;&gt;8888cc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D32F2F, #BB9AF7);&quot;&gt; !important&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #89DDFF);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#24292E, #9ABDF5);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can thank &lt;code&gt;grep&lt;&#x2F;code&gt; for the relevant style class. Anyhow, I&#x27;d be
interested to hear any of your opinions on Firefox 3. Otherwise, have a
nice week-end.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: sudo</title>
          <pubDate>Sat, 17 May 2008 10:57:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-sudo/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-sudo/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-sudo/">&lt;p&gt;I&#x27;ve mentioned sudo in these tips before. It&#x27;s a neat little utility for
executing commands as somebody else. Well, today I bring you a handy
guide I found on using sudo. I already knew most of the stuff, but some
of it was new, and it looks pretty good as a starter for new users. So
enjoy this article on &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;aplawrence.com&#x2F;Basics&#x2F;sudo.html&quot;&gt;sudo basics&lt;&#x2F;a&gt; by A.P. Lawrence.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Debian OpenSSL</title>
          <pubDate>Fri, 16 May 2008 20:20:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/debian-openssl/</link>
          <guid>https://www.roguelazer.com/blog/debian-openssl/</guid>
          <description xml:base="https://www.roguelazer.com/blog/debian-openssl/">&lt;p&gt;Sorry readers, no *nix Tip of the Day today. Just a brief word about
the recent Debian OpenSSL vulnerability.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;lists.debian.org&#x2F;debian-security-announce&#x2F;2008&#x2F;msg00152.html&quot;&gt;I&#x27;m&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.zakame.net&#x2F;news&#x2F;openssl-remote-dsa-1571&quot;&gt;sure&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;community.livejournal.com&#x2F;lbello_english&#x2F;7900.html&quot;&gt;you&#x27;ve&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;natalian.org&#x2F;archives&#x2F;2008&#x2F;05&#x2F;13&#x2F;regenerate&#x2F;&quot;&gt;heard&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.lucas-nussbaum.net&#x2F;blog&#x2F;?p=290&quot;&gt;about&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.wgdd.de&#x2F;?p=51&quot;&gt;Debian&#x27;s&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;changelog.complete.org&#x2F;posts&#x2F;714-Thoughtfulness-on-the-OpenSSL-bug.html&quot;&gt;OpenSSL&lt;&#x2F;a&gt;
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.drinsama.de&#x2F;erich&#x2F;en&#x2F;linux&#x2F;2008051401-debian-openssl-desaster.html&quot;&gt;&quot;Disaster&quot;&lt;&#x2F;a&gt;. The short of it is that while fixing a questionable line
in the OpenSSL&#x2F;OpenSSH key generator, the Debian maintainer accidentally
removed most of its entropy generation ability. Debian users with
OpenSSL and&#x2F;or OpenSSH keys should go regenerate them now. I&#x27;ll wait.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, the other interesting thing I wanted to post about was &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blog.sesse.net&#x2F;blog&#x2F;tech&#x2F;2008-05-14-17-21_some_maths.html&quot;&gt;this&lt;&#x2F;a&gt;.
It&#x27;s some interesting math showing why you shouldn&#x27;t be using DSA keys
anyway.&lt;&#x2F;p&gt;
&lt;p&gt;Oh yeah, and I&#x27;m done with classes and finals now. :-)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: tee</title>
          <pubDate>Thu, 15 May 2008 18:58:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-tee/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-tee/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-tee/">&lt;p&gt;&lt;strong&gt;tee&lt;&#x2F;strong&gt; is a handy little utility that probably all of you know about,
but I just found this year. Consider the following scenario: you&#x27;re
maintaining your Gentoo Linux system and you need to add a line to
&#x2F;etc&#x2F;portage&#x2F;package.unmask. So you type&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo echo &amp;quot;sys-kernel&#x2F;gentoo-sources&amp;quot; &amp;gt;&amp;gt; &#x2F;etc&#x2F;portage&#x2F;package.unmask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;right? Nope! The way shell parsing works, that turns into&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(sudo echo &amp;quot;sys-kernel&#x2F;gentoo-sources&amp;quot;) &amp;gt;&amp;gt; &#x2F;etc&#x2F;portage&#x2F;package.unmask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;which is most certainly not what you want, since you probably don&#x27;t
have permissions to &lt;code&gt;&#x2F;etc&#x2F;portage&#x2F;package.unmask&lt;&#x2F;code&gt;. The solution is the
&lt;strong&gt;tee&lt;&#x2F;strong&gt; utility. It would be invoked like the following:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;sys-kernel&#x2F;gentoo-sources&amp;quot; | sudo tee -a &#x2F;etc&#x2F;portage&#x2F;package.unmask&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Well, this was a short post. Oh well. :-)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: rxvt-unicode and terminfo</title>
          <pubDate>Wed, 14 May 2008 10:03:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-rxvt-unicode-and-terminfo/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-rxvt-unicode-and-terminfo/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-rxvt-unicode-and-terminfo/">&lt;p&gt;An important part of a *nix system is a good terminal emulator. For
some, this means the classic &lt;strong&gt;xterm&lt;&#x2F;strong&gt;. The same xterm that&#x27;s happy to
use 7 MiB of resident memory for each instance. Or perhaps you run a
full DE like Gnome and are happy to use &lt;strong&gt;gnome-terminal&lt;&#x2F;strong&gt; and enjoy 19
MiB of resident. Personally, I use &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;software.schmorp.de&#x2F;pkg&#x2F;rxvt-unicode.html&quot;&gt;rxvt-unicode (urxvt)&lt;&#x2F;a&gt;. It&#x27;s a very
lightweight version of rxvt which has neato features like full Unicode
support and a daemon mode that lets you pool multiple instances. For
example, my urxvtd processs is using 41 MiB of resident, but hosting 9
urxvtc clients (a little over 4 MiB per client). It&#x27;s several sorts of
awesome.&lt;&#x2F;p&gt;
&lt;p&gt;Now, another important part of the terminal emulator infrastructure is
the &lt;strong&gt;terminfo&lt;&#x2F;strong&gt; library (successor to termcap). This library contains
terminfo definitions for pretty much every terminal emulator out there
and allows the shell to make intelligent decisions about things like
fonts, colors, and sizes. Unfortunately, I said &quot;pretty much every
terminal emulator&quot; for a reason. rxvt-unicode is not one of the terminal
emulators that is part of the standard library. Thus, my prompt, which
normally looks like &lt;code&gt;[11:06] &amp;lt;roguelazer@CaveOfBirds&amp;gt; ~ %&lt;&#x2F;code&gt; ends up
looking like &lt;code&gt;33mCaveOfBirds&amp;gt; ~ %&lt;&#x2F;code&gt; when I log into a server that I&#x27;ve
never logged into before.&lt;&#x2F;p&gt;
&lt;p&gt;So, what&#x27;s the resolution to this problem? It took me a while to find
out, but the key is the &lt;strong&gt;tic&lt;&#x2F;strong&gt; utility (which stands for &lt;span
style=&quot;text-decoration: underline;&quot;&gt;t&lt;&#x2F;span&gt;erm&lt;span
style=&quot;text-decoration: underline;&quot;&gt;i&lt;&#x2F;span&gt;nfo &lt;span
style=&quot;text-decoration: underline;&quot;&gt;c&lt;&#x2F;span&gt;ompiler). Terminfo
descriptions are distributed as a (almost) human-readable source format.
urxvt&#x27;s can be found &lt;a href=&quot;&#x2F;&#x2F;files.roguelazer.com&#x2F;rxvt-unicode-terminfo&quot;&gt;here&lt;&#x2F;a&gt;. Once you&#x27;ve acquired a source file,
simply run tic on it. If you run tic as a normal user, the compiled
terminfo description will be installed to &lt;code&gt;~&#x2F;.terminfo&lt;&#x2F;code&gt;; if run as root,
it will be installed system-wide in &lt;code&gt;&#x2F;usr&#x2F;share&#x2F;terminfo&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As usual, come back later for some new and exciting tips.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: SSH SOCKS Proxying</title>
          <pubDate>Tue, 13 May 2008 16:00:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-socks-proxying/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-socks-proxying/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-socks-proxying/">&lt;p&gt;Continuing on my theme of SSH tips, today&#x27;s Tip of the Day talks about
the awesomeness of SOCKS proxying. As some of the more savvy among you
may know, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.openssh.com&quot;&gt;OpenSSH&lt;&#x2F;a&gt; supports full Layer-2&#x2F;Layer-3 VPN functionality
using a &lt;code&gt;tun&lt;&#x2F;code&gt; device. This is an incredibly useful feature if you&#x27;re
off-site and need like-local access to home, work, school, or somesuch.
But it requires root access, and is more than a little bit of a pita to
set up. If all you need is access to things like the web, e-mail, and
instant messaging, there&#x27;s an easier way.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SOCKS&quot;&gt;SOCKS&lt;&#x2F;a&gt; is a transparent proxy protocol. Basically, you just tell your
applications (like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mozilla.com&#x2F;firefox&quot;&gt;Mozilla Firefox&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.pidgin.im&quot;&gt;Pidgin&lt;&#x2F;a&gt;) to connect to a
SOCKS server, and all of your traffic is automatically redirected. If
you&#x27;re on the wrong side of a restrictive firewall, or not in the right
intranet, and you have access to a SOCKS server, that&#x27;s great. But most
of us normal humans don&#x27;t get access to a &quot;real&quot; SOCKS server.&lt;&#x2F;p&gt;
&lt;p&gt;And that&#x27;s where yet another awesome OpenSSH feature comes in. OpenSSH
has a single-flag SOCKS server built right in. Say your school computer
is called, erm, &lt;code&gt;remote&lt;&#x2F;code&gt;, and you have a user there who is creatively
named &lt;code&gt;user&lt;&#x2F;code&gt;. Now say you&#x27;re off-campus and really want to look at the
on-campus-only student roster. You could screw around with TCP
forwarding over SSH, or perhaps try to run links on your school machine.
Or you could just type &lt;kbd&gt;ssh -D65500 user@remote&lt;&#x2F;kbd&gt; (note: the
&quot;65500&quot; part is not important. Any number between 49152 and 65535 can be
used with no problem). This creates a SOCKS proxy that goes through
&lt;code&gt;remote&lt;&#x2F;code&gt;, but listens on port 65500 on your local machine. So now you
open up Firefox&#x27;s Preferences, go over to
Advanced-&amp;gt;Network-&amp;gt;Connection-&amp;gt;Settings, and put in a SOCKS Host of
&quot;127.0.0.1&quot; port &quot;65500&quot;. It doesn&#x27;t matter whether you select v4 or v5
for this purpose, since OpenSSH supports both.&lt;&#x2F;p&gt;
&lt;p&gt;Congratulations, you&#x27;re now talking to the internet through a
transparent proxy. When you&#x27;re done, just restore Firefox&#x27;s old settings
and quit SSH.&lt;&#x2F;p&gt;
&lt;p&gt;Check back later for new and exciting things to do in the &lt;strong&gt;*nix Tip of
the Day&lt;&#x2F;strong&gt; series!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: SSH Agent Forwarding</title>
          <pubDate>Mon, 12 May 2008 18:31:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-agent-forwarding/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-agent-forwarding/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-agent-forwarding/">&lt;p&gt;Today&#x27;s *nix tip of the day involves SSH and the magic that is Agent
Forwarding.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Secure%20Shell&quot;&gt;SSH&lt;&#x2F;a&gt;, as some of you know, is a handy way to connect to *nix systems
in an untrusted environment. Its primary use is to allow one to remotely
access a remote system and get a shell, securely. Basically, encrypted
telnet. Of course, SSH has tons of other useful features (like
tunneling, proxying, and multiplexing), some of which might come up in
future Tips of the Day.&lt;&#x2F;p&gt;
&lt;p&gt;One of SSH&#x27;s greatest features is its public&#x2F;private key system.
Basically, using private keys, you can allow much more secure access to
a remote machine. If you trust your local machine, you can even allow
passwordless access to remote machines if you have an unencrypted
private key. Of course, this is a bad idea if you think people might be
able to compromise your local private key, which is why SSH private keys
can also be encrypted with a symmetric cipher (basically, a password).
Using this gives you all of the in-transit security and power of private
keys, but all of the local security of password authentication
(something you have + something you know sort of deal). They&#x27;re covered
a great deal more in a retroactively-posted tip of the day — read back
a bit.&lt;&#x2F;p&gt;
&lt;p&gt;This is all well and good, but there are times when typing your SSH
key&#x27;s passphrase is annoying. For example, the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.zsh.org&quot;&gt;Z Shell&lt;&#x2F;a&gt; allows for
tab-completion of remote filenames over ssh (when using scp, for
example). It is an awesomely useful feature that makes remote
filesystems feel local without any of the muss of sshfs. However, if you
have an encrypted private key (or password authentication), typing your
password every &lt;kbd&gt;&amp;lt;TAB&amp;gt;&lt;&#x2F;kbd&gt; can be a pain. Hence, &lt;strong&gt;ssh-agent&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ssh-agent&lt;&#x2F;strong&gt; is a program that you will generally run as a wrapper
around your session (this is done automagically on linux if you&#x27;re
running gdm). If you want to test this stuff, you can just run &lt;kbd&gt;exec
ssh-agent $SHELL&lt;&#x2F;kbd&gt; from a terminal and then execute all of the
commands from this tip in that shell. Now, let&#x27;s say that you&#x27;ve put
your private key in the standard &lt;code&gt;~&#x2F;.ssh&#x2F;id_rsa&lt;&#x2F;code&gt;, and it&#x27;s encrypted. At
your newly-ssh-agent&#x27;ed shell, type in &lt;kbd&gt;ssh-add
~&#x2F;.ssh&#x2F;id_rsa&lt;&#x2F;kbd&gt; and type in your private key&#x27;s encryption
passphrase when prompted. Congrats — you can now ssh from this shell to
any machine containing your public key without any password at all.
Isn&#x27;t that awesome? Try it out. I&#x27;ll wait.&lt;&#x2F;p&gt;
&lt;p&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;Now, this is well and good. But let&#x27;s say that you just ssh&#x27;d to
&lt;code&gt;example.com&lt;&#x2F;code&gt; using your super-duper ssh-agent, and you want to ssh from
there to your other server at &lt;code&gt;example.net&lt;&#x2F;code&gt;. Do you need to copy your
private key onto example.net and then type the passphrase there? That
might be a bit risky, especially if you don&#x27;t really trust the admins of
&lt;code&gt;example.com&lt;&#x2F;code&gt;. I mean, the key is encrypted, so you&#x27;re probably okay,
but what if they&#x27;re running a keylogger? Well, as long as you&#x27;re using
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.openssh.com&quot;&gt;OpenSSH&lt;&#x2F;a&gt; (which you most likely are), you&#x27;re fine, thanks to the
magic of agent forwarding. Log out of example.com, and then run &lt;kbd&gt;ssh
-A username@example.com&lt;&#x2F;kbd&gt;. Note the &lt;var&gt;-A&lt;&#x2F;var&gt;. This turns on
agent forwarding, and means that your login at &lt;code&gt;example.com&lt;&#x2F;code&gt; temporarily
has the same access permissions as your local machine. So you can
happily &lt;kbd&gt;ssh user@example.net&lt;&#x2F;kbd&gt; and get the happy password-free
access without anything else. You can even agent-forward from
&lt;code&gt;example.com&lt;&#x2F;code&gt; to &lt;code&gt;example.net&lt;&#x2F;code&gt; and build up a chain of secure
authentication credential forwarding all the way back to your local
machine. It&#x27;s awesome.&lt;&#x2F;p&gt;
&lt;p&gt;Well, that&#x27;s my tip for the day. Check back again in the future for more
exciting things that other people have said and done before.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>*nix Tip of the Day: SSH Private&#x2F;Public Keys</title>
          <pubDate>Sun, 11 May 2008 18:00:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-private-public-keys/</link>
          <guid>https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-private-public-keys/</guid>
          <description xml:base="https://www.roguelazer.com/blog/nix-tip-of-the-day-ssh-private-public-keys/">&lt;p&gt;Hello kind readers, and welcome to by &lt;strong&gt;*nix Tip of the Day&lt;&#x2F;strong&gt;. It&#x27;s
finals week, and I&#x27;m sort of slacking, so I thought I&#x27;d post some of my
accumulated folk wisdom on the Internet, so that it might help others.&lt;&#x2F;p&gt;
&lt;p&gt;Today&#x27;s topic is SSH Private&#x2F;Public Keys. If any of you are CS majors,
or go to a tech-heavy school, or generally interact with Linux&#x2F;OS
X&#x2F;Solaris&#x2F;HP-UX&#x2F;AIX&#x2F;any other *nix, you&#x27;ve probably used &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Secure_Shell&quot;&gt;SSH&lt;&#x2F;a&gt;. SSH,
at its most basic, is a replacement for telnet and rlogin; it allows you
to get a shell at a remote machine. However, it does so securely (hence,
Secure SHell) using strong encryption. SSH, particularly modern
implementations like &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.openssh.com&quot;&gt;OpenSSH&lt;&#x2F;a&gt; also has other subsystems like &lt;code&gt;scp&lt;&#x2F;code&gt; (a
replacement for &lt;code&gt;rcp&lt;&#x2F;code&gt;, which is in turn a remote version of &lt;code&gt;cp&lt;&#x2F;code&gt;),
&lt;code&gt;sftp&lt;&#x2F;code&gt; (a secure replacement for FTP), and such.&lt;&#x2F;p&gt;
&lt;p&gt;Most people, when using SSH, use password authentication. They type
&lt;kbd&gt;ssh user@host&lt;&#x2F;kbd&gt; and, when prompted, type in their login
password to &lt;code&gt;host&lt;&#x2F;code&gt;. This isn&#x27;t necessarily a bad thing — it&#x27;s
braindead-easy to set up, generally secure, and works the same way as
remote logins have since the beginning of time.&lt;&#x2F;p&gt;
&lt;p&gt;There are some problems with this setup. One of the most obvious is that
if you offer password authentication, your system&#x27;s security is only as
good as its worst password. Every user that picks &quot;god&quot; or &quot;password&quot; as
his password paints a giant target on your machine.&lt;&#x2F;p&gt;
&lt;p&gt;Enabling password authentication, even if all of your users have strong
passwords, still makes you a target. There are plenty of botnets out
there that connect to servers and try sshing in with random usernames
(and root, of course, but I assume you have root login
disabled&#x2F;restricted in SSH. You do, right? If not, go do so.). It&#x27;s
unlikely that they&#x27;ll ever break a good password, but that&#x27;s still
traffic hitting your box. Disable password authentication, though, and
they go away. Botnets (thankfully) never try to connect using anything
else.&lt;&#x2F;p&gt;
&lt;p&gt;So, password authentication isn&#x27;t great. What should you do instead?
Well, it turns out that SSH supports something called public key
authentication. The basic idea here is that the remote user has a small
file called a &lt;strong&gt;private key&lt;&#x2F;strong&gt; that they keep with them (on their laptop,
or on a flash drive). This key allows them to access the remote server
(optionally without any password at all, although this is discouraged on
a flash key or laptop) more securely. The authentication is done using
either a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Digital_Signature_Algorithm&quot;&gt;DSA&lt;&#x2F;a&gt; or &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;RSA&quot;&gt;RSA&lt;&#x2F;a&gt; with a key-length of between 768 and 2048
bits, which is all technical stuff that you don&#x27;t care about. Let&#x27;s talk
about setup.&lt;&#x2F;p&gt;
&lt;p&gt;The first thing to do is to prepare the client system and generate the
key. The following commands should take care of that:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if [ ! -d ~&#x2F;.ssh ]  then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    mkdir ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chmod 700 ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ssh-keygen -t rsa -b 2048 -f ~&#x2F;.ssh&#x2F;id_rsa&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chmod 600 ~&#x2F;.ssh&#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When you are prompted for a password by ssh-keygen, you should enter
something long that you will not forget. It should not be your account
password. If you really trust the client system (for example, if it&#x27;s a
desktop machine with no remote login sitting inside a bank vault that
nobody could ever break into), you can leave this field empty. But I do
not recommend it.&lt;&#x2F;p&gt;
&lt;p&gt;But how do you go about using this key? Note that the keygen will have
created a file called &lt;code&gt;~&#x2F;.ssh&#x2F;id_rsa.pub&lt;&#x2F;code&gt;. This is your public key, and
needs to be uploaded to every machine that you need access to. Let&#x27;s
call the remote machine &lt;code&gt;remote&lt;&#x2F;code&gt; and the local machine &lt;code&gt;local&lt;&#x2F;code&gt;. The
following code should do what you need:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scp ~&#x2F;.ssh&#x2F;id_rsa.pub user@remote:~&#x2F;local.pub&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh user@remote&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if [ ! -d ~&#x2F;.ssh ] then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    mkdir ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    chmod 700 ~&#x2F;.ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cat local.pub &amp;gt;&amp;gt; ~&#x2F;.ssh&#x2F;authorized_keys&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;chmod 600 ~&#x2F;.ssh&#x2F;authorized_keys&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rm local.pub&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If all went well, you should now be able to log into &lt;code&gt;remote&lt;&#x2F;code&gt; using your
public key. If you attempt to &lt;kbd&gt;ssh user@remote&lt;&#x2F;kbd&gt;, you should be
prompted &quot;Enter passphrase for key &#x27;&#x2F;home&#x2F;user&#x2F;.ssh&#x2F;id_rsa&#x27;&quot;. Type in
the passphrase you entered during the key creation step and you&#x27;re all
set.&lt;&#x2F;p&gt;
&lt;p&gt;If typing in this passphrase all of the time seems like a pain in the
rear to you, you&#x27;re not alone. Check back later for the next article in
the series, on the use of &lt;strong&gt;ssh-agent&lt;&#x2F;strong&gt;. It&#x27;s awesome, I tell you.&lt;&#x2F;p&gt;
&lt;p&gt;Note: I am not responsible for any borkage that these commands might
cause. As far as I know, they&#x27;re correct, but I still disclaim any and
all liability. Yadda yadda yadda.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Updated 2008-05-13 00:55 to use correct permissions for the contents of
~&#x2F;.ssh&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New Bike</title>
          <pubDate>Sun, 20 Apr 2008 14:29:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-bike/</link>
          <guid>https://www.roguelazer.com/blog/new-bike/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-bike/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;2428088901&#x2F;&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;farm3.static.flickr.com&#x2F;2142&#x2F;2428088901_69eebc18a1.jpg&quot; alt=&quot;My new bike&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, yesterday I went to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;jaxbicycles.com&quot;&gt;Jax Bicycle Center&lt;&#x2F;a&gt; in downtown Claremont and
I bought a new bike. Yep, I&#x27;m completely crazy. But it&#x27;s such an awesome
bike. Thin, barely treaded tires like a road bike, upright seating
position, and nice hardware. It cost a mint, but hopefully I&#x27;ll put it
to good use. With PLs on Pomona next semester, I&#x27;ll need it to get to
class. So, yeah, that&#x27;s what I&#x27;ve been up to...&lt;&#x2F;p&gt;
&lt;p&gt;Not much else interesting to report. School is school. Meh. But, hey, at
least I got a new bike.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>So, apparently this is a meme</title>
          <pubDate>Thu, 10 Apr 2008 20:55:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/so-apparently-this-is-a-meme/</link>
          <guid>https://www.roguelazer.com/blog/so-apparently-this-is-a-meme/</guid>
          <description xml:base="https://www.roguelazer.com/blog/so-apparently-this-is-a-meme/">&lt;p&gt;Everybody in my RSS feed list is doing it. So why shouldn&#x27;t I?&lt;&#x2F;p&gt;
&lt;p&gt;(no, it&#x27;s not the exact same line. close enough)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;% history 1 |awk &amp;#39;{a[$2]++ } END{for(i in a){print a[i] &amp;quot; &amp;quot; i}}&amp;#39;|sort -rn|head -n 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;140 cd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;67 sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;59 vim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;52 mplayer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;51 svn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;47 rm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;43 ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;33 eix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;29 xsnap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;29 wmiir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;24 mv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;22 cp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;15 ps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;15 killall&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;14 ssh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;12 xset&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;12 history&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;11 man&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;11 evince&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10 sed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>Headphones</title>
          <pubDate>Fri, 22 Feb 2008 00:05:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/headphones/</link>
          <guid>https://www.roguelazer.com/blog/headphones/</guid>
          <description xml:base="https://www.roguelazer.com/blog/headphones/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;headphones&amp;#x2F;sennheiser-hd280-pro.jpg&quot; alt=&quot;Sennheiser HD 280 Pro&quot;  &#x2F;&gt;
  
&lt;p&gt;Since this summer, I&#x27;ve been using a pair of &lt;a href=&quot;p:&#x2F;&#x2F;www.sennheiser.com&#x2F;sennheiser&#x2F;icm_eng.nsf&#x2F;root&#x2F;04974&quot;&gt;Sennheiser HD280 Pro&lt;&#x2F;a&gt;s.
Let me just say that they&#x27;re excellent headphones, and they provide
better attenuation than most noise cancellation headphones without
murdering the sound quality the way active noise canceling headphones
do. This is a great feature when North is having a party, or just when
my roommate is listening to music on his speakers. However, like all
closed-back headphones, they&#x27;re a bit constricting, and there are some
minor audio artifacts caused by the hard backing.&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;headphones&amp;#x2F;grado-sr60.png&quot; alt=&quot;Grado SR60&quot;  &#x2F;&gt;
  
&lt;p&gt;So, last week, I picked up a pair of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.gradolabs.com&#x2F;product_pages&#x2F;sr60.htm&quot;&gt;Grado SR60&lt;&#x2F;a&gt;&#x27;s. They are also
excellent &#x27;phones, especially for the price. The sensation of having
fresh air on my ears is worth it alone. Of course, they&#x27;re fully
open-backed, so they don&#x27;t provide any protection from external noise at
all. But, when it&#x27;s quiet enough, they&#x27;re awesome.&lt;&#x2F;p&gt;
&lt;p&gt;I thought it might be useful to give some basic impressions of the two
pairs of headphones in a typical usage situation. I&#x27;m in my room right
now with some not-too-loud noise, and I&#x27;ve got both headphones plugged
into my computer via my &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.headphone.com&#x2F;products&#x2F;headphone-amps&#x2F;the-mobile-line&#x2F;headroom-total-bithead.php&quot;&gt;HeadRoom Total Bithead&lt;&#x2F;a&gt;. The first source
material is my FLAC rip of the Brian Wilson &lt;em&gt;SMiLE&lt;&#x2F;em&gt; album — if you
haven&#x27;t heard it, you should. If this had come out when it was supposed
to (i.e., 40 years ago), the Beach Boys would have been a bigger name
than the Beatles. After that, I&#x27;ve got another FLAC rip, this time of
Pearl Jam&#x27;s &lt;em&gt;Ten&lt;&#x2F;em&gt;, which is considerably heavier, and should provide a
nice contrast. Anyhow, here&#x27;s my thoughts:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Wonderful&quot;, &lt;strong&gt;Sennheiser&lt;&#x2F;strong&gt;: Great immersion. It is much easier to
focus on, and thus hear, fine details in the music with these cans,
since they block out so much of that pesky external noise.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Wonderful&quot;, &lt;strong&gt;Grado&lt;&#x2F;strong&gt;: These seem a bit clearer than the
Sennheisers. It&#x27;s a little harder to focus on the music over the
background noise, since there is background noise. However, both the
highs and the lows seem more defined using the Grados (note: this is
with the stock &quot;soft&quot; foam caps. I haven&#x27;t tried the &quot;doughnut&quot; caps
yet)&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Surf&#x27;s Up&quot;, &lt;strong&gt;S&lt;&#x2F;strong&gt; Everything seems much stronger with the
Sennheisers. It seems like they&#x27;re a bit easier to drive. The
background instruments really pop out, particularly the plucked
instrument around 1:20 (guitar?)&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Surf&#x27;s Up&quot;, &lt;strong&gt;G&lt;&#x2F;strong&gt; Voices are much clearer and vibrant, more
&quot;there&quot;. I have to turn up the volume a bit to get the same amount
of sound out, but I can live with that.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Even Flow&quot;, &lt;strong&gt;S&lt;&#x2F;strong&gt; Very engaging, but slightly murky at the edges —
the guitar fuzz seems slightly deadened. Still groovable.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Even Flow&quot;, &lt;strong&gt;G&lt;&#x2F;strong&gt; Still noisy outside, but every note seems as raw
here as it does on decent loudspeakers. Even though I&#x27;m less
isolated while wearing the Grados, they seem to have more presence
than the Sennheisers&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I could continue all day, but I&#x27;ve actually got homework to do (I know,
crazy). So if I were to take a bottom line, I&#x27;d say that I prefer the
Grados, and if you&#x27;ve got a quiet enough environment to sustain
open-backed headphones for much of the time, they&#x27;re a great investment.
However, in a college dorm, particularly on weekends, the insulation in
the Sennheisers is much handier. If you have to choose, consider your
environment. Or, you know, get both. :-)&lt;&#x2F;p&gt;
&lt;p&gt;Oh, and if you do end up getting either of these, I highly recommend
purchasing from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.headphone.com&quot;&gt;HeadRoom&lt;&#x2F;a&gt;. They&#x27;re not always the cheapest on the
Internet, but they&#x27;re honest, quick, and have the best support
department in the industry. Oh, and they make great amps.&lt;&#x2F;p&gt;
&lt;p&gt;Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>A brief thought on the new Microsoft &quot;Interoperability&quot; documents</title>
          <pubDate>Thu, 21 Feb 2008 14:34:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/a-brief-thought-on-the-new-microsoft-interoperability-documents/</link>
          <guid>https://www.roguelazer.com/blog/a-brief-thought-on-the-new-microsoft-interoperability-documents/</guid>
          <description xml:base="https://www.roguelazer.com/blog/a-brief-thought-on-the-new-microsoft-interoperability-documents/">&lt;p&gt;If you haven&#x27;t seen the recent &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.microsoft.com&#x2F;presspass&#x2F;presskits&#x2F;interoperability&#x2F;default.mspx&quot;&gt;Microsoft Interoperability
announcement&lt;&#x2F;a&gt;, I suggest you read it. It&#x27;s been Slashdotted, so I
figure there&#x27;s a decent chance that everybody on the Internet has seen
it already. This is, of course, an extension of the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.microsoft.com&#x2F;interop&#x2F;docs&#x2F;OfficeBinaryFormats.mspx&quot;&gt;Microsoft Office
Binary Formats&lt;&#x2F;a&gt; release of a few days ago, and I&#x27;m equally leery about
it. There are some interesting comments on the Office Binary formats on
the web, including &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.licquia.org&#x2F;archives&#x2F;2008&#x2F;02&#x2F;19&#x2F;its-not-like-you-care-about-your-documents&#x2F;&quot;&gt;these&lt;&#x2F;a&gt; by Jeff Licquia, and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.joelonsoftware.com&#x2F;items&#x2F;2008&#x2F;02&#x2F;19.html&quot;&gt;those he links to&lt;&#x2F;a&gt;
by Joel Spolsky.&lt;&#x2F;p&gt;
&lt;p&gt;On the one hand, this is an amazing opportunity for F&#x2F;OSS developers and
pretty much everybody interested in cross-platform interoperability.
There are probably quite a few &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.openoffice.org&quot;&gt;OpenOffice.org&lt;&#x2F;a&gt; developers that would
have killed to get free access to the specs for MS Word and Excel files
over the past few years, considering how close to impossible it must
have been to reverse-engineer everything. And, if it pans out, I&#x27;m sure
that this will lead to better Microsoft format compatibility in the
future years. If it pans out. For one thing, the specifications are
immense and ridiculously complex, and I don&#x27;t know if anybody&#x27;s going to
bother including Lotus 1-2-3-compatible Excel format importers in OOo.
The somewhat more serious concern is whether the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.microsoft.com&#x2F;interop&#x2F;osp&#x2F;default.mspx&quot;&gt;&quot;Microsoft Open
Specification Promise&quot;&lt;&#x2F;a&gt; is acceptable. IANAL, but it seems that this
prohibits implementers from ever filing a patent infringement suit
against Microsoft for related technologies, which might be a stifler,
particularly for commercial competition like Corel WordPerfect. But,
hey, maybe I&#x27;m reading it wrong and it&#x27;s all good. Maybe we&#x27;ll see a
better Wine, OOo, AbiWord, and everything else tomorrow. I just don&#x27;t
know.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New Release of Compiz</title>
          <pubDate>Fri, 08 Feb 2008 15:16:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-release-of-compiz/</link>
          <guid>https://www.roguelazer.com/blog/new-release-of-compiz/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-release-of-compiz/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;lists.freedesktop.org&#x2F;archives&#x2F;compiz&#x2F;2008-February&#x2F;003005.html&quot;&gt;Compiz 0.7 has been released&lt;&#x2F;a&gt;. Any guesses on when it&#x27;ll end up in
the Gentoo repositories?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Social psychology taken to a new level?</title>
          <pubDate>Mon, 04 Feb 2008 04:46:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/social-psychology-taken-to-a-new-level/</link>
          <guid>https://www.roguelazer.com/blog/social-psychology-taken-to-a-new-level/</guid>
          <description xml:base="https://www.roguelazer.com/blog/social-psychology-taken-to-a-new-level/">&lt;p&gt;Why pay somebody to tell you about yourself, when you can just ask your
friends to do it? That seems to be the premise of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;kevan.org&#x2F;johari?name=James+Matthew+Brown&quot;&gt;this site&lt;&#x2F;a&gt;, which I
saw on an old note of Richard Mehlinger&#x27;s (yes, Facebook is weird like
that). So, yeah.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Randall Munroe says it better than I can</title>
          <pubDate>Mon, 28 Jan 2008 18:08:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/randall-munroe-says-it-better-than-i-can/</link>
          <guid>https://www.roguelazer.com/blog/randall-munroe-says-it-better-than-i-can/</guid>
          <description xml:base="https://www.roguelazer.com/blog/randall-munroe-says-it-better-than-i-can/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;blag.xkcd.com&#x2F;2008&#x2F;01&#x2F;28&#x2F;obama&#x2F;&quot;&gt;Awesomeness.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>In Claremont, Again: Musings</title>
          <pubDate>Sun, 27 Jan 2008 22:56:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/in-claremont-again-musings/</link>
          <guid>https://www.roguelazer.com/blog/in-claremont-again-musings/</guid>
          <description xml:base="https://www.roguelazer.com/blog/in-claremont-again-musings/">&lt;p&gt;Today marks my first week back in sunny California. Actually, scratch
the &quot;sunny&quot; part — it&#x27;s rained here almost every day since I arrived.
It&#x27;s still nice to be somewhere where the average daily temperature has
more than one digit, though.&lt;&#x2F;p&gt;
&lt;p&gt;Class is exactly as I remembered it. Hours drag by, but days seem to end
almost without beginning in the first place. I&#x27;m staying on top of my
homework, which is a good thing. We&#x27;ll see how well I can keep that up,
particularly when biology and STEMS (signals and systems engineering)
start to load it on.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve also started a new job here at &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.hmc.edu&quot;&gt;HMC&lt;&#x2F;a&gt;. I&#x27;ve joined the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cs.hmc.edu&quot;&gt;Computer
Science&lt;&#x2F;a&gt; department staff, which is awesome. I&#x27;ve always enjoyed
systems administration, and now I get to do it for a large and
sophisticated network. So far I&#x27;ve identified and provided a solution
for a misbehaving compiler problem on the CS105 machine, and helped
Yaniv rewrite the kiosk to be valid (and working) HTML&#x2F;CSS&#x2F;JavaScript.
Not a huge list of a achievements, I&#x27;ll admit, but I&#x27;ve only been doing
stuff for a few days.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of computers, I&#x27;ve got a new face returning to my stable of
productive machines: an &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Apple_Newton&quot;&gt;Apple Newton MessagePad 2100&lt;&#x2F;a&gt;. I just
purchased one off of eBay to replace the one that got broken at Durfee,
and so far it&#x27;s working out great. I never will cease to be amazed at
how incredible the handwriting recognition is, or how perfect the
form-factor is for good handwriting recognition. I&#x27;ve got a LAN card
coming in next week, so maybe I&#x27;ll even be able to bring it into the
21st Century. Cool, no?&lt;&#x2F;p&gt;
&lt;p&gt;Not everything is sunny in the world of computing. A recent Gentoo
change (unwisely pushed out to ~x86 and ~amd64, in my opinion) caused
keyboard mappings to come from HAL, which had the end effect of
completely breaking my keyboard under X. Yes, it&#x27;s possible to fix with
a clever combination of .fdi files and a corrected Xmodmap, but the
problem should not have happened in the first place. Silly devs. If
you&#x27;re afflicted, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;bugs.gentoo.org&#x2F;show_bug.cgi?id=200060&quot;&gt;this bugzilla thread&lt;&#x2F;a&gt; should help.&lt;&#x2F;p&gt;
&lt;p&gt;Okay, enough procrastination. I suppose I&#x27;m going to go do some more
work. Good bye, reader.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;PS: Feel free to add a Comment, if you exist. I have strong suspicions that you do not...&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Iowa</title>
          <pubDate>Thu, 03 Jan 2008 22:17:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/iowa/</link>
          <guid>https://www.roguelazer.com/blog/iowa/</guid>
          <description xml:base="https://www.roguelazer.com/blog/iowa/">&lt;p&gt;So, the news stations are &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.nytimes.com&#x2F;2008&#x2F;01&#x2F;03&#x2F;us&#x2F;politics&#x2F;03cnd-campaign.html?_r=1&amp;amp;hp&amp;amp;oref=slogin&quot;&gt;calling&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.msnbc.msn.com&#x2F;id&#x2F;22484066&#x2F;&quot;&gt;the&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.cnn.com&#x2F;2008&#x2F;POLITICS&#x2F;01&#x2F;03&#x2F;iowa.caucuses&#x2F;index.html&quot;&gt;Iowa&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.reuters.com&#x2F;article&#x2F;bondsNews&#x2F;idUSWAT00862520080104&quot;&gt;primary&lt;&#x2F;a&gt;. And,
I guess I&#x27;m happy. On the one hand, my preferred presidential candidate,
&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.barackobama.com&#x2F;&quot;&gt;Barack Obama&lt;&#x2F;a&gt;, is being hailed as the winner of the Democratic
primary. Which is awesome. I think his progressive policies are a breath
of fresh air to the White House, and I think that it&#x27;s time for this
country to show the world that it is big enough to elect a man to the
Oval Office even if he is a minority. So woo hoo to that.&lt;&#x2F;p&gt;
&lt;p&gt;Oh the other hand, &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.mikehuckabee.com&#x2F;&quot;&gt;Mike Huckabee&lt;&#x2F;a&gt; is winning the Republican
nomination. This is both a blessing and a horrifying curse. The man is
what I&#x27;ve heard termed a &quot;religious nut job&quot;. He&#x27;s clearly a Libertarian
candidate, favoring removal of pretty much all taxes (a commonly-held
and idiotic belief), but he still thinks he&#x27;ll have money left over to
poor into Iraq and rejuvenate schooling in the U.S. Oh yeah, and did I
mention that he&#x27;s a religious nutjob? Do the Republicans of Iowa really
dislike the Separation of Church and State &lt;em&gt;that&lt;&#x2F;em&gt; much?&lt;&#x2F;p&gt;
&lt;p&gt;Okay, calming down a bit. As you can tell, I am not a fan of Mike
Huckabee. I happen to like the services provided by the Federal
government, and think that we have no need to go back to the conditions
that we had under the Articles of Confederation. But, like I said, there
is an up-side. No sane Republican (i.e., one who knows how a government
runs) would actually vote for Huckabee. So if he were to win the
nomination, it would be just about the best thing ever for the
Democratic party. The sane Republicans (who I have to assume outnumber
the insane ones) would have to either vote for an independent candidate,
or vote Democrat. So, that&#x27;s a good thing, I guess.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, yeah. That&#x27;s the news. See you next time, anonymous reader.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Almost Done!</title>
          <pubDate>Thu, 13 Dec 2007 14:10:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/almost-done/</link>
          <guid>https://www.roguelazer.com/blog/almost-done/</guid>
          <description xml:base="https://www.roguelazer.com/blog/almost-done/">&lt;p&gt;So, apparently, people actually have read this blog. I haven&#x27;t the
foggiest idea why somebody would want to do that, but I suppose it means
that I actually ought to post here once in a while. I guess I can at
least try. I&#x27;ll start with the last, you know, three months.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s been at least as crazy a semester as I thought it would be. I ended
up pulling a few more academic all-nighters than is strictly good for
me, but I think I survived anyway. Some surprises included Discrete
being a much more challenging class than I had anticipated and
ChunkyString (the CS70 reimplementation of C++&#x27;s &lt;code&gt;std::string&lt;&#x2F;code&gt; class
using an efficient chunked list data structure) being somewhat
anticlimactic. Barring any surprises during finals next week, I think I
even managed to pass everything. Okay, that&#x27;s about it for the school
summary.&lt;&#x2F;p&gt;
&lt;p&gt;The downside of posting so infrequently is that so much has happened
over the last three months, it seems like nothing at all has happened.
&lt;em&gt;&amp;lt;insert joke about congruence mod three months here&amp;gt;&lt;&#x2F;em&gt;. So I don&#x27;t
really know what to write. Maybe I&#x27;ll write more later if the urge
strikes me. I&#x27;ve got some ProbStat homework to do, then a lab to hand
in, then finals to study for. Adieu, anonymous reader.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Back in California</title>
          <pubDate>Thu, 20 Sep 2007 22:59:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/back-in-california/</link>
          <guid>https://www.roguelazer.com/blog/back-in-california/</guid>
          <description xml:base="https://www.roguelazer.com/blog/back-in-california/">&lt;p&gt;Okay, so I&#x27;m a slow blogger. At this rate, I assume there isn&#x27;t actually
anybody reading this any more. No? Good.&lt;&#x2F;p&gt;
&lt;p&gt;So, as you might have (hypothetically) gathered from the title of this
post, I&#x27;m back at HMC for another year. No, scratch that. Another
&lt;em&gt;crazy&lt;&#x2F;em&gt;, &lt;em&gt;insane&lt;&#x2F;em&gt;, &lt;em&gt;sleep-depped&lt;&#x2F;em&gt; year. That&#x27;s more like it. I&#x27;m taking,
erm, 9 curses this semester. Plus research with &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www3.hmc.edu&#x2F;~harris&quot;&gt;Professor (D. Money)
Harris&lt;&#x2F;a&gt;. Any some grutoring (grading&#x2F;tutoring, for the uninitiated)
for CS5 on the side. So, yeah, it&#x27;s busy. Right now I&#x27;m supposed to be
doing some math homework. But, honestly, who wants to integrate electric
potential fields when there are blog posts to write?&lt;&#x2F;p&gt;
&lt;p&gt;This summer was ruddy terrible. I worked at the FRCC, where the staff
hates me and does their best to either (a) get me in trouble, or (b)
just ignore everything I say and hide somewhere when there&#x27;s work to be
done. It turns out to be rather hard to get anything meaningful done if
your entire staff is in some random closet in the basement. On the plus
side, I did make a decent chunk of money over those two months.
Considering the amount of time that I spent taking care of my ailing
grandparents, I suppose I can&#x27;t complain about the work. The whole
barely-seeing-my-high-school-friends-because-we-all-seem-to-have-drifted-apart
bit was a bit of a letdown. But, whatever. I guess I&#x27;ll just stay out
here next summer. No worries, right?&lt;&#x2F;p&gt;
&lt;p&gt;Damn. I can&#x27;t procrastinate that physics homework much longer — I&#x27;ve
got to leave to flex out presently. Until next time, anonymous reader.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Blog</title>
          <pubDate>Wed, 05 Sep 2007 00:00:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/blog/</link>
          <guid>https://www.roguelazer.com/blog/blog/</guid>
          <description xml:base="https://www.roguelazer.com/blog/blog/">&lt;p&gt;As you may or may not have noticed, I haven&#x27;t really done... well, much of anything with the website lately. I&#x27;ve been very busy with my real life, and haven&#x27;t had the time to fiddle with the painfully ugly PHP that powers this website. If you&#x27;re still interested in the continuing adventures of Roguelazer, I have a blog which I have been known to update. I also quite intend on putting new VO screenshots up sometime, and when I do, I&#x27;ll make a newspost. It might be in, like, two hours. Or two years. Who knows! Anyhow, ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Woah! I still exist!</title>
          <pubDate>Thu, 05 Jul 2007 07:54:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/woah-i-still-exist/</link>
          <guid>https://www.roguelazer.com/blog/woah-i-still-exist/</guid>
          <description xml:base="https://www.roguelazer.com/blog/woah-i-still-exist/">&lt;p&gt;I guess I&#x27;ve been neglecting this blog for a while. It&#x27;s all right-
nobody reads it anyway, so who&#x27;s going to notice? But I&#x27;m a bit bored
today, so I thought perhaps I&#x27;d post again, just for old times&#x27; sake. As
you might be able to guess, I&#x27;m back in Fall River again; I&#x27;m home for
the summer. I made it through my first year at Harvey Mudd College with
my lowest grade as a B- (in Chemistry, obviously).&lt;&#x2F;p&gt;
&lt;p&gt;Not too much exciting going on since I got back. I spend a couple of
hours every day taking care of my grandparents- driving my grandmother
to see my grandfather at the nursing home&#x2F;hospital, doing errands and
chores, etc. It&#x27;s not glorious, but somebody has to do it and I have a
pretty free schedule. I ended up going back to the &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.fallrivercc.com&quot;&gt;Country Club&lt;&#x2F;a&gt;,
mostly because nowhere else would hire me. Unfortunately, it&#x27;s been a
&lt;em&gt;very&lt;&#x2F;em&gt; slow summer at the Country Club so far, so I&#x27;m not exactly making
much in terms of money. C&#x27;est la vie.&lt;&#x2F;p&gt;
&lt;p&gt;What else...? Well, I had a birthday a few weeks ago. Woo, I&#x27;m 19.
Apparently, it&#x27;s one of the uninteresting years between 18 and 21. Who
knew? Anyhow, I got some good loot. Mainly, I got a totally awesome pair
of Sennheiser HD280 Pro headphones (sealed, circum-aural, etc.) and a
HeadRoom Total BitHead headphone amp. Combined, they let me hear more
detail than I ever dreamed possible in music. Of course, I&#x27;ve got to put
them to good use, so I&#x27;ve taken my iPod Color and installed Rockbox on
it, giving me the ability to play back my &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ogg_Vorbis&quot;&gt;Ogg Vorbis&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;FLAC&quot;&gt;FLAC&lt;&#x2F;a&gt;
files on it. Oh yeah, I forgot to mention that in honor of my incredible
new headphones, I&#x27;ve taken to encoding some of my music in FLAC format.
It&#x27;s not easy to tell the difference between q=0.7 Ogg Vorbis files and
FLAC files, but for some things (Brian Wilson, Lisa Gerrard, and some
others), the extra quality boost leads to really incredible sound in the
headphones. And I&#x27;ve been listening to a lot of new music lately. Since
I went to see the Richard Thompson show on Friday, I&#x27;ve been listening
to a bit of his stuff lately. And for the last few months, I&#x27;ve been on
a &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.deadcandance.com&#x2F;&quot;&gt;Dead Can Dance&lt;&#x2F;a&gt; fling (including breakaways like Lisa Gerrard&#x27;s
solo albums). &#x27;s all good.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps you (my imaginary reader, that is) read this blog because of my
up-to-the-minute tech information (that was sarcasm, if you didn&#x27;t catch
it). Well, there&#x27;s lots of interesting stuff going on in the tech world.
I guess the &quot;biggest&quot; thing since I last posted would be Apple&#x27;s release
of the iPhone. However, it doesn&#x27;t particularly interest me. It&#x27;s just a
well-done smartphone, and, importantly, not one that I can afford. I
would have been happier had they released a new Newton, but we all know
that that will never happen. However, I am very impressed by the latest
Leopard betas. Mac OS X 10.5 is shaping up the be a very well-done
release. Perhaps I&#x27;ll have to get me a new Mac this October...&lt;&#x2F;p&gt;
&lt;p&gt;Well, I&#x27;m gonna sign off. It&#x27;s been fun, imaginary reader. Ciao.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home</title>
          <pubDate>Sun, 11 Mar 2007 22:58:00 -0700</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/home/</link>
          <guid>https://www.roguelazer.com/blog/home/</guid>
          <description xml:base="https://www.roguelazer.com/blog/home/">&lt;p&gt;Yep, I&#x27;m back in Fall River. The plane ride (Sat. Mar. 10) was, as
expected, painful and long. But I am indeed home. Yay me.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Remember How I Said That This Blog Would Have Politics?</title>
          <pubDate>Thu, 01 Mar 2007 02:25:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/remember-how-i-said-that-this-blog-would-have-politics/</link>
          <guid>https://www.roguelazer.com/blog/remember-how-i-said-that-this-blog-would-have-politics/</guid>
          <description xml:base="https://www.roguelazer.com/blog/remember-how-i-said-that-this-blog-would-have-politics/">&lt;p&gt;I just read Chris Clarke&#x27;s &quot;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;pandagon.net&#x2F;2007&#x2F;02&#x2F;23&#x2F;how-to-explain-things-to-libertarians&#x2F;trackback&#x2F;&quot;&gt;How to Explain Things to Libertarians&lt;&#x2F;a&gt;&quot;.
It is officially an awesome piece of writing that I recommend everybody
read - particularly those of you who may be tempted by the writings of
Ayn Rand et al. But hey, I&#x27;m just a crazy leftist, what do I know?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ah, Collegiate Internet</title>
          <pubDate>Mon, 26 Feb 2007 04:15:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/ah-collegiate-internet/</link>
          <guid>https://www.roguelazer.com/blog/ah-collegiate-internet/</guid>
          <description xml:base="https://www.roguelazer.com/blog/ah-collegiate-internet/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;403223682&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm1.static.flickr.com&#x2F;160&#x2F;403223682_199a77b61e.jpg&quot; alt=&quot;blender download&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As you may or may not know, HMC shares what is essentially a backbone
line to the Internet. Sometimes, if you get it just right, that can mean
really, really excellent things. As this photo shows. No, that&#x27;s not
doctored. If you go to &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;tags&#x2F;crazydownloadspeed&#x2F;&quot;&gt;some of my photos on flickr&lt;&#x2F;a&gt;, you can see more
of these insane speeds. And I just wanted to say that that is awesome.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>My Geek Code</title>
          <pubDate>Wed, 21 Feb 2007 12:48:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/my-geek-code/</link>
          <guid>https://www.roguelazer.com/blog/my-geek-code/</guid>
          <description xml:base="https://www.roguelazer.com/blog/my-geek-code/">&lt;p&gt;As I sit in the VLSI lab waiting to meet with Prof. Harris and the rest
of the Clay-Wolkin group, I thought I&#x27;d post my Geek Code on this blog.
Ya know, just for fun.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-----BEGIN GEEK CODE BLOCK-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Version: 3.1.2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GCS&#x2F;M&#x2F;MU d-(+) s:+(:++) a18 C++++$ UL*++++&amp;gt;$ P+&amp;gt;++ L++++$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;E--- W+++&amp;gt;$ N++ !o K w++(--) !O- M++$ !V-- PS+(++) PE(-)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Y+&amp;gt;+ PGP++(+++) t+ 5- X+ R tv b++++&amp;gt;$ DI+ D++ G++ e&amp;gt;++++ h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;!r--&amp;gt;++ y--&amp;gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;------END GEEK CODE BLOCK------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>Crazy weather...</title>
          <pubDate>Sun, 18 Feb 2007 17:24:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/crazy-weather/</link>
          <guid>https://www.roguelazer.com/blog/crazy-weather/</guid>
          <description xml:base="https://www.roguelazer.com/blog/crazy-weather/">&lt;p&gt;What&#x27;s the matter with southern California, eh? It was 81 degrees
Fahrenheit here yesterday! It&#x27;s FEBRUARY! The way I understand it, that
means snow and ice. At the very least, shouldn&#x27;t it be cold enough to
require long pants? Crazy weather...&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Freedom! (almost)</title>
          <pubDate>Fri, 16 Feb 2007 01:31:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/freedom-almost/</link>
          <guid>https://www.roguelazer.com/blog/freedom-almost/</guid>
          <description xml:base="https://www.roguelazer.com/blog/freedom-almost/">&lt;p&gt;So, only one more day left in the week, and I&#x27;ve only got two classes.
Then it&#x27;s the &lt;strong&gt;week-end&lt;&#x2F;strong&gt;! Woo!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>My Baby Taylor</title>
          <pubDate>Thu, 15 Feb 2007 01:18:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/my-baby-taylor/</link>
          <guid>https://www.roguelazer.com/blog/my-baby-taylor/</guid>
          <description xml:base="https://www.roguelazer.com/blog/my-baby-taylor/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;roguelazer&#x2F;390881693&#x2F;&quot;&gt;&lt;img src=&quot;http:&#x2F;&#x2F;farm1.static.flickr.com&#x2F;145&#x2F;390881693_4c24226a48_m.jpg&quot; alt=&quot;Baby Taylor&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I almost forgot to mention... I bought a guitar! I was looking
for something small and dorm-room-ish and ended up narrowing it down to
either a Martin Backpacker, a Little Martin, or a Baby Taylor (of either
the mahogany or spruce variety). After playing all three, the Backpacker
sounded like it was being played from inside a tin can and the Little
Martin sounded like it was underwater. Both Babys sounded absolutely
excellent, and I ended up going with the mahogany for its slightly
richer tone and great look. So far, it&#x27;s been treating me pretty well,
but I&#x27;ll keep you apprised of the situation.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Another day, another dollar</title>
          <pubDate>Thu, 15 Feb 2007 00:43:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/another-day-another-dollar/</link>
          <guid>https://www.roguelazer.com/blog/another-day-another-dollar/</guid>
          <description xml:base="https://www.roguelazer.com/blog/another-day-another-dollar/">&lt;p&gt;Hello again invisible readers. Just thought I&#x27;d relate all of the
terribly interesting things that have been happening lately...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Chemistry test today. Could have been much worse. Trust me. Quantum
chemistry can get hairy, but it didn&#x27;t.&lt;&#x2F;li&gt;
&lt;li&gt;Did some more work on CSS&#x2F;PROFILE today. Eugh. Can&#x27;t the various
people who want to know about my finances (IRS, Department of
Education, College Board, Harvey Mudd, Bank of America, etc.) just
get together and only make me go through all of this &lt;em&gt;once&lt;&#x2F;em&gt; instead
of a million times?&lt;&#x2F;li&gt;
&lt;li&gt;Watched yesterday&#x27;s House today. &#x27;twas awesome, &#x27;nuff said.&lt;&#x2F;li&gt;
&lt;li&gt;Also watched yesterday&#x27;s Stargate SG-1. I noticed that Claudia Black
has full billing now, neat. It wasn&#x27;t a particularly innovative
episode, but it was well executed, which makes me happy.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Yay? I guess that&#x27;s good stuff. Now I&#x27;ve got to go do some homework. It
never ends.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Beryl 0.1999.1, and Other News of Note</title>
          <pubDate>Tue, 13 Feb 2007 22:25:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/beryl-019991-and-other-news-of-note/</link>
          <guid>https://www.roguelazer.com/blog/beryl-019991-and-other-news-of-note/</guid>
          <description xml:base="https://www.roguelazer.com/blog/beryl-019991-and-other-news-of-note/">&lt;p&gt;I&#x27;ve just gotten around to upgrading my version of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;www.beryl-project.org&quot;&gt;Beryl&lt;&#x2F;a&gt; to the
latest svn&#x2F;prerelease (through the xeffects overlay) and, wow. It&#x27;s a
huge improvement over 0.1.4. Much faster, more stable, and more
featureful. I can&#x27;t get over how awesome tabs are (under the Grouping
configuration). I have yet to find something they&#x27;re useful for, but
they&#x27;re still totally awesome.&lt;&#x2F;p&gt;
&lt;p&gt;In other news, mechanics midterm today. Woo. Well, I suppose it could
have been worse.&lt;&#x2F;p&gt;
&lt;p&gt;Okay, that&#x27;s enough mucking around with the blog I suppose. I&#x27;ve got a
chemistry section quiz tomorrow that I ought to be studying for.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Hello</title>
          <pubDate>Tue, 13 Feb 2007 02:52:00 -0800</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/hello/</link>
          <guid>https://www.roguelazer.com/blog/hello/</guid>
          <description xml:base="https://www.roguelazer.com/blog/hello/">&lt;p&gt;The way I count it, this is my third attempt at keeping a web log.
Fourth if you count that website I made for reviewing PDAs, which I
mostly used to chit-chat. So you, kind reader, will have to forgive me
if I seem a little bit disillusioned about the entire process.
Nonetheless, here I am. I thought that I&#x27;d again join the ranks of the
&quot;bloggers&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;So, after that little introduction, perhaps you want to know who I am
and why you should read this blog? The short answer is that you probably
shouldn&#x27;t; it promises to be boring and sparsely populated. The longer
answer is that my name is James Brown and I am a student at Harvey Mudd
College, a small science-oriented college in Claremont, California,
although I originally hail from Massachusetts. To sum up the most
important bits, I&#x27;d say that I&#x27;m a GNU&#x2F;Linux-using hacker Democrat
musician. Yeah...&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re still reading at this point, you must be either very bored or
very dedicated. Either way, enjoy my random thoughts. Oh yeah, and about
the title. It&#x27;s just an S-expression that yields a fairly useless
anonymous function. You can expect to see plenty of miscellaneous
programming references here, too.&lt;&#x2F;p&gt;
&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Editor&#x27;s Note from the future&lt;&#x2F;strong&gt;: this website was, at the time, called &lt;samp&gt;(lambda x blog)&lt;&#x2F;samp&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Geek Code</title>
          <pubDate>Thu, 25 Aug 2005 00:00:00 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/geek-code/</link>
          <guid>https://www.roguelazer.com/blog/geek-code/</guid>
          <description xml:base="https://www.roguelazer.com/blog/geek-code/">&lt;p&gt;I figured that I might as well post my Geek Code block here, since I&#x27;m all bored-like.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-----BEGIN GEEK CODE BLOCK-----&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Version: 3.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GCS&#x2F;M&#x2F;MU d-(--) s(+):+ a--- C++++$ UL*++++&amp;gt;$ P+&amp;gt;++ L++++&amp;gt;$&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;E--- W+++&amp;gt;$ N+ !o-- K-? w++ !O- M++$ !V-- PS++(+) PE- Y+&amp;gt;++&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PGP+++ t+ 5- X+++ R tv b++++&amp;gt;$ DI+ D++ G+ e-&amp;gt;++++ h r--&amp;gt;++ y--&amp;gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;------END GEEK CODE BLOCK------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So, what&#x27;s going on with the site, you ask? Well, I updated phpbb and changed that around a bit. Cool new ranks. And I&#x27;m contemplating rewriting the site in ruby, since I made my hosters install mod_ruby. If I do, then it&#x27;ll be really cool. But time will tell on that particular project. Until then, enjoy browsing my vast informational resources. :-)&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>&quot;Hacking&quot; Attempts</title>
          <pubDate>Mon, 07 Mar 2005 21:06:31 -0500</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/hacking-attempts/</link>
          <guid>https://www.roguelazer.com/blog/hacking-attempts/</guid>
          <description xml:base="https://www.roguelazer.com/blog/hacking-attempts/">&lt;p&gt;This is my latest attempt at putting up some interesting content here. I intend to make this a regular feature containt the various attempts made to &quot;hack&quot; into my linux box. Here&#x27;s today&#x27;s logs and summary:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ssh-log&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ssh-log&quot; aria-label=&quot;Anchor link for: ssh-log&quot;&gt;SSH Log&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #A9B1D6); background-color: light-dark(#FFFFFF, #1A1B26);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 19:58:36 [sshd] Did not receive identification string from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:09 [sshd] Invalid user jordan from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:10 [sshd] Invalid user michael from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:11 [sshd] Invalid user nicole from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:11 [sshd] Invalid user daniel from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:12 [sshd] Invalid user andrew from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:12 [sshd] Invalid user nathan from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:13 [sshd] Invalid user matthew from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:14 [sshd] Invalid user magic from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:14 [sshd] Invalid user lion from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:15 [sshd] Invalid user david from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:15 [sshd] Invalid user jason from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:16 [sshd] Invalid user ben from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:17 [sshd] Invalid user carmen from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:17 [sshd] Invalid user justin from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:18 [sshd] Invalid user charlie from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:19 [sshd] Invalid user steven from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:19 [sshd] Invalid user brandon from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:20 [sshd] Invalid user brian from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:21 [sshd] Invalid user stephen from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:21 [sshd] Invalid user william from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:22 [sshd] Invalid user angel from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:22 [sshd] Invalid user emily from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:23 [sshd] Invalid user eric from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:24 [sshd] Invalid user joe from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:24 [sshd] Invalid user tom from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:25 [sshd] Invalid user billy from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:26 [sshd] Invalid user buddy from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:26 [sshd] Invalid user jeremy from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:27 [sshd] Invalid user vampire from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:27 [sshd] Invalid user betty from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:28 [sshd] Invalid user henry from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:29 [sshd] Invalid user max from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:30 [sshd] Invalid user nicholas from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:30 [sshd] Invalid user robin from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:31 [sshd] Invalid user system from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:31 [sshd] Invalid user johnny from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:32 [sshd] Invalid user lucy from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:33 [sshd] Invalid user market from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:34 [sshd] Invalid user maria from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:35 [sshd] Invalid user rose from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:36 [sshd] Invalid user god from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:37 [sshd] Invalid user barbara from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:38 [sshd] Invalid user larisa from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:38 [sshd] Invalid user shell from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:39 [sshd] Invalid user jane from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:40 [sshd] Invalid user dog from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:40 [sshd] Invalid user blue from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:41 [sshd] Invalid user red from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:42 [sshd] Invalid user yellow from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:42 [sshd] Invalid user green from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:43 [sshd] Invalid user black from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Mar 6 20:20:44 [sshd] Invalid user pub from 207.36.180.61&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;summary&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#summary&quot; aria-label=&quot;Anchor link for: summary&quot;&gt;Summary&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Now aren&#x27;t I glad that I don&#x27;t have any easily accessible SSH accounts.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;today-s-security-changes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#today-s-security-changes&quot; aria-label=&quot;Anchor link for: today-s-security-changes&quot;&gt;Today&#x27;s Security Changes&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Added a whole bunch of new iptables rules&lt;&#x2F;li&gt;
&lt;li&gt;Disabled ssh root access&lt;&#x2F;li&gt;
&lt;li&gt;Enabled iptables logging&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Mozilla Firefox</title>
          <pubDate>Sun, 19 Sep 2004 12:43:46 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/mozilla-firefox/</link>
          <guid>https://www.roguelazer.com/blog/mozilla-firefox/</guid>
          <description xml:base="https://www.roguelazer.com/blog/mozilla-firefox/">





  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;mozilla-firefox&amp;#x2F;spread_firefox.gif&quot; alt=&quot;firefox&quot; class=&quot;rfloat&quot;  &#x2F;&gt;
  
&lt;p&gt;As of yesterday (Saturday, September 18, 2004), Mozilla Firefox has gotten over one million downloads in less than 5 days. That&#x27;s pretty damned good, but I think we as an Internet community can do better. They&#x27;re aiming for another million downloads in the next five days. So if you&#x27;re not using Firefox, click on the little button off to the right there and get browsing! If you&#x27;re curious as to what Mozilla Firefox is, just click &quot;Read More&quot;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>EULA Happy!</title>
          <pubDate>Wed, 15 Sep 2004 07:03:09 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/eula-happy/</link>
          <guid>https://www.roguelazer.com/blog/eula-happy/</guid>
          <description xml:base="https://www.roguelazer.com/blog/eula-happy/">&lt;p&gt;I just installed the latest Critical Update for Windows XP SP2, &quot;Microsoft GDI+ Detection Tool&quot;. With it, I can officially say that Microsoft has become EULA-happy. This tool has a multi-page license agreement, complete with warnings about invalid product keys and Microsoft JVM legalese. They even make disclosing benchmarks illegal! Anyhow, the full EULA content is below.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;MICROSOFT WINDOWS UPDATE&lt;&#x2F;p&gt;
&lt;p&gt;SUPPLEMENTAL END USER LICENSE AGREEMENT FOR MICROSOFT SOFTWARE (&quot;Supplemental EULA&quot;)&lt;&#x2F;p&gt;
&lt;p&gt;IMPORTANT: READ CAREFULLY - These Microsoft Corporation (&quot;Microsoft&quot;) operating system components, including any &quot;online&quot; or electronic documentation (&quot;OS Components&quot;) are subject to the terms and conditions of the agreement under which you have licensed the applicable Microsoft operating system product described below (each an &quot;End User License Agreement&quot; or &quot;EULA&quot;) and the terms and conditions of this Supplemental EULA. BY INSTALLING, COPYING OR OTHERWISE USING THE OS COMPONENTS, YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THE APPLICABLE OPERATING SYSTEM PRODUCT EULA AND THIS SUPPLEMENTAL EULA. IF YOU DO NOT AGREE TO THESE TERMS AND CONDITIONS, DO NOT INSTALL, COPY OR USE THE OS COMPONENTS.&lt;&#x2F;p&gt;
&lt;p&gt;NOTE: IF YOU DO NOT HAVE A VALIDLY LICENSED COPY OF ANY VERSION OR EDITION OF MICROSOFT WINDOWS XP MEDIA CENTER EDITION, MICROSOFT WINDOWS 95, WINDOWS 98, WINDOWS NT 4.0 WINDOWS 2000 OPERATING SYSTEM OR ANY MICROSOFT OPERATING SYSTEM THAT IS A SUCCESSOR TO ANY OF THOSE OPERATING SYSTEMS (each an &quot;OS Product&quot;), YOU ARE NOT AUTHORIZED TO INSTALL, COPY OR OTHERWISE USE THE OS COMPONENTS AND YOU HAVE NO RIGHTS UNDER THIS SUPPLEMENTAL EULA.&lt;&#x2F;p&gt;
&lt;p&gt;Capitalized terms used in this Supplemental EULA and not otherwise defined herein shall have the meanings assigned to them in the applicable OS Product EULA.&lt;&#x2F;p&gt;
&lt;p&gt;General. Each of the OS Components available from this site is identified as being applicable to one or more of the OS Products. The applicable OS Components are provided to you by Microsoft to update, supplement, or replace existing functionality of the applicable OS Product. Microsoft grants you a license to use the applicable OS Components under the terms and conditions of the EULA for the applicable OS Product (which are hereby incorporated by reference except as set forth below), the terms and conditions set forth in this Supplemental EULA, and the terms and conditions of any additional end user license agreement that may accompany the individual OS Components (each an &quot;Individual EULA&quot;), provided that you comply with all such terms and conditions. To the extent that there is a conflict among any of these terms and conditions applicable to the OS Components, the following hierarchy shall apply: 1) the terms and conditions of the Individual EULA; 2) the terms and conditions in this Supplemental EULA; and 3) the terms and conditions of the applicable OS Product EULA.&lt;&#x2F;p&gt;
&lt;p&gt;Additional Rights and Limitations.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you have multiple validly licensed copies of any OS Product, you may reproduce, install and use one copy of the applicable OS Components as part of the applicable OS Product on all of your computers running validly licensed copies of the applicable OS Product, provided that you use such additional copies of such OS Components in accordance with the terms and conditions above. For each validly licensed copy of the applicable OS Product, you also may reproduce one additional copy of the applicable OS Components solely for archival purposes or reinstallation of the OS Components on the same computer as the OS Components were previously installed. Microsoft retains all right, title and interest in and to the OS Components. All rights not expressly granted are reserved by Microsoft.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;If you are installing the OS Components on behalf of an organization other than your own, prior to installing any of the OS Components, you must confirm that the end-user (whether an individual or a single entity) has received, read and accepted these terms and conditions.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;The OS Components may contain technology that enables applications to be shared between two or more computers, even if an application is installed on only one of the computers. You may use this technology with all Microsoft application products for multi-party conferences. For non-Microsoft applications, you should consult the accompanying license agreement or contact the licensor to determine whether application sharing is permitted by the licensor.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;You may not disclose the results of any benchmark test of the .NET Framework component of the OS Components to any third party without Microsoft&#x27;s prior written approval.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;SOLELY WITH RESPECT TO THE MICROSOFT VIRTUAL MACHINE FOR JAVA, YOU ARE ONLY LICENSED TO INSTALL THIS OS COMPONENT ON A MACHINE THAT ALREADY CONTAINS A VERSION OF THE MICROSOFT VIRTUAL MACHINE FOR JAVA.&lt;&#x2F;p&gt;
&lt;p&gt;IF THE APPLICABLE OS PRODUCT WAS LICENSED TO YOU BY MICROSOFT OR ANY OF ITS WHOLLY OWNED SUBSIDIARIES, THE LIMITED WARRANTY (IF ANY) INCLUDED IN THE APPLICABLE OS PRODUCT EULA APPLIES TO THE APPLICABLE OS COMPONENTS PROVIDED THE APPLICABLE OS COMPONENTS HAVE BEEN LICENSED BY YOU WITHIN THE TERM OF THE LIMITED WARRANTY IN THE APPLICABLE OS PRODUCT EULA. HOWEVER, THIS SUPPLEMENTAL EULA DOES NOT EXTEND THE TIME PERIOD FOR WHICH THE LIMITED WARRANTY IS PROVIDED.&lt;&#x2F;p&gt;
&lt;p&gt;IF THE APPLICABLE OS PRODUCT WAS LICENSED TO YOU BY AN ENTITY OTHER THAN MICROSOFT OR ANY OF ITS WHOLLY OWNED SUBSIDIARIES, MICROSOFT DISCLAIMS ALL WARRANTIES WITH RESPECT TO THE APPLICABLE OS COMPONENTS AS FOLLOWS:&lt;&#x2F;p&gt;
&lt;p&gt;DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND ITS SUPPLIERS PROVIDE TO YOU THE OS COMPONENTS, AND ANY (IF ANY) SUPPORT SERVICES RELATED TO THE OS COMPONENTS (&quot;SUPPORT SERVICES&quot;) AS IS AND WITH ALL FAULTS; AND MICROSOFT AND ITS SUPPLIERS HEREBY DISCLAIM WITH RESPECT TO THE OS COMPONENTS AND SUPPORT SERVICES ALL WARRANTIES AND CONDITIONS, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY (IF ANY) WARRANTIES, DUTIES OR CONDITIONS OF OR RELATED TO: MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS OF RESPONSES, RESULTS, WORKMANLIKE EFFORT AND LACK OF NEGLIGENCE. ALSO THERE IS NO WARRANTY, DUTY OR CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON -INFRINGEMENT. THE ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE OS COMPONENTS AND ANY SUPPORT SERVICES REMAINS WITH YOU.&lt;&#x2F;p&gt;
&lt;p&gt;EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR: LOSS OF PROFITS, LOSS OF CONFIDENTIAL OR OTHER INFORMATION, BUSINESS INTERRUPTION, PERSONAL INJURY, LOSS OF PRIVACY, FAILURE TO MEET ANY DUTY (INCLUDING OF GOOD FAITH OR OF REASONABLE CARE), NEGLIGENCE, AND ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE OS COMPONENTS OR THE SUPPORT SERVICES, OR THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS SUPPLEMENTAL EULA, EVEN IF MICROSOFT OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;&#x2F;p&gt;
&lt;p&gt;LIMITATION OF LIABILITY AND REMEDIES. NOTWITHSTANDING ANY DAMAGES THAT YOU MIGHT INCUR FOR ANY REASON WHATSOEVER (INCLUDING, WITHOUT LIMITATION, ALL DAMAGES REFERENCED ABOVE AND ALL DIRECT OR GENERAL DAMAGES), THE ENTIRE LIABILITY OF MICROSOFT AND ANY OF ITS SUPPLIERS UNDER ANY PROVISION OF THIS SUPPLEMENTAL EULA AND YOUR EXCLUSIVE REMEDY FOR ALL OF THE FOREGOING SHALL BE LIMITED TO ACTUAL DAMAGES INCURRED BY YOU BASED ON REASONABLE RELIANCE UP TO THE GREATER OF THE AMOUNT ACTUALLY PAID BY YOU FOR THE OS COMPONENTS OR U.S.$5.00. THE FOREGOING LIMITATIONS, EXCLUSIONS AND DISCLAIMERS SHALL APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, EVEN IF ANY REMEDY FAILS ITS ESSENTIAL PURPOSE.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Draconian. :P&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Roguelazer.com 1.0 Released</title>
          <pubDate>Thu, 02 Sep 2004 00:00:00 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/site-1-0/</link>
          <guid>https://www.roguelazer.com/blog/site-1-0/</guid>
          <description xml:base="https://www.roguelazer.com/blog/site-1-0/">&lt;p&gt;New site released! The backend is rewritten to use my uber-1337 sqlconn class, which is database-independent. Yay!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Main Site</title>
          <pubDate>Wed, 14 Jul 2004 14:08:10 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/main-site/</link>
          <guid>https://www.roguelazer.com/blog/main-site/</guid>
          <description xml:base="https://www.roguelazer.com/blog/main-site/">&lt;p&gt;As you&#x27;ve probably noticed by now, my main site is being overhauled. As a matter of fact, it&#x27;s being turned into a lean mean XHTML 1.1&#x2F;CSS2.1 machine. I hope. It&#x27;s also being made dynamic. Unfortunately, this means that I haven&#x27;t been posting here very much. Not much at all...&lt;&#x2F;p&gt;
&lt;p&gt;And for this I apologize. But, I&#x27;m going to make it up to all you readers. You can look at the site now, in its beta stage, and tell me what you think. The Über-Secret Link.&lt;&#x2F;p&gt;
&lt;p&gt;Once you&#x27;ve examined the site, just post your comments here. I am watching. :) Over and out.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Linux</title>
          <pubDate>Fri, 09 Jul 2004 00:00:00 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/linux/</link>
          <guid>https://www.roguelazer.com/blog/linux/</guid>
          <description xml:base="https://www.roguelazer.com/blog/linux/">&lt;p&gt;My Linux box uses a fairly sophisticated array of software on it. The first level is the distribution. I use gentoo linux, a distribution aimed at fairly experienced users. It has no graphical installation or configuration tools, and all of its software is compiled from source. Here&#x27;s my stats as of this writing (7&#x2F;9&#x2F;2004):&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Software&lt;&#x2F;th&gt;&lt;th&gt;Version&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Kernel&lt;&#x2F;td&gt;&lt;td&gt;2.6.7-rc3-love2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GLibc&lt;&#x2F;td&gt;&lt;td&gt;2.3.3.20040420&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;gcc&lt;&#x2F;td&gt;&lt;td&gt;3.3.3-r6&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;X11&lt;&#x2F;td&gt;&lt;td&gt;xorg-x11 6.7.0-r1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Gnome&lt;&#x2F;td&gt;&lt;td&gt;2.6.1_rc1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;KDE&lt;&#x2F;td&gt;&lt;td&gt;3.3.0_beta1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ROX-Filer&lt;&#x2F;td&gt;&lt;td&gt;2.1.2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Mozilla&lt;&#x2F;td&gt;&lt;td&gt;1.6-r1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</description>
      </item>
      <item>
          <title>Hi!</title>
          <pubDate>Sun, 06 Jun 2004 10:14:20 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/hi/</link>
          <guid>https://www.roguelazer.com/blog/hi/</guid>
          <description xml:base="https://www.roguelazer.com/blog/hi/">&lt;p&gt;Hello everybody. It&#x27;s Roguelazer, welcoming you to RogueBlog. This is the fourth incarnation of this blog, due to software upgrades, database failures, and general incompetence on my part. With any luck, this one will be successful, being based off of &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;hulan.info&#x2F;blog&#x2F;item&#x2F;nucleus-cms-extreme-edition-3-0-rc&quot;&gt;Nucleus Extreme Edition 3.0&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow, this will be a place for my thoughts and ideas. With any luck, it&#x27;ll work out well. This is Roguelazer, over and out.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>New Computer</title>
          <pubDate>Sat, 31 Jan 2004 16:42:00 -0400</pubDate>
          <author>James Brown</author>
          <link>https://www.roguelazer.com/blog/new-computer/</link>
          <guid>https://www.roguelazer.com/blog/new-computer/</guid>
          <description xml:base="https://www.roguelazer.com/blog/new-computer/">&lt;p&gt;We have a new computer!&lt;&#x2F;p&gt;






  &lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;www.roguelazer.com&amp;#x2F;blog&amp;#x2F;new-computer&amp;#x2F;a410e.gif&quot; alt=&quot;HP a410e&quot;  &#x2F;&gt;
  
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Processor&lt;&#x2F;td&gt;&lt;td&gt;AMD Athlon XP 2800+&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Motherboard&lt;&#x2F;td&gt;&lt;td&gt;VIA KM400&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;RAM&lt;&#x2F;td&gt;&lt;td&gt;1GB PC2700 DDR-RAM&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;HDD&lt;&#x2F;td&gt;&lt;td&gt;1x120GB&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Graphics Card&lt;&#x2F;td&gt;&lt;td&gt;nVidia GeForce FX 5600 128MB&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DVD-ROM Drive&lt;&#x2F;td&gt;&lt;td&gt;16x DVD-ROM Drive&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Rewritable Drive&lt;&#x2F;td&gt;&lt;td&gt;8x4x12x24x10x40x DVD+R&#x2F;+RW Drive&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Floopy Drive&lt;&#x2F;td&gt;&lt;td&gt;Yes, internal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Media Card Reader&lt;&#x2F;td&gt;&lt;td&gt;Internal 7-in-1 Card Reader&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Sound Card&lt;&#x2F;td&gt;&lt;td&gt;Sound Blaster Audigy 2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Speakers&lt;&#x2F;td&gt;&lt;td&gt;1x Boston Acoustics BA635, 1x Boston Acoustics BA735, 1x harmon&#x2F;cardon 2-piece (set up as a 6.1)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Monitor&lt;&#x2F;td&gt;&lt;td&gt;HP Pavilion f1503 15&quot; TFT Screen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Operating System(s)&lt;&#x2F;td&gt;&lt;td&gt;Windows XP Home Edition (soon to be Linux!)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</description>
      </item>
    </channel>
</rss>
