<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://wlair.us.to/feed/computing.xml" rel="self" type="application/atom+xml" /><link href="https://wlair.us.to/" rel="alternate" type="text/html" /><updated>2026-01-15T01:45:00-08:00</updated><id>https://wlair.us.to/feed/computing.xml</id><title type="html">xoddf2’s Blog | Computing</title><subtitle>xoddf2&apos;s personal blog</subtitle><author><name>xoddf2</name></author><entry><title type="html">Operating System Thoughts</title><link href="https://wlair.us.to/blog/2025/11/30/os-thoughts/index.html" rel="alternate" type="text/html" title="Operating System Thoughts" /><published>2025-11-30T16:34:00-08:00</published><updated>2025-11-30T16:34:00-08:00</updated><id>https://wlair.us.to/blog/2025/11/30/os-thoughts/os-thoughts</id><content type="html" xml:base="https://wlair.us.to/blog/2025/11/30/os-thoughts/index.html"><![CDATA[<p>A few months ago, I switched from Debian Bookworm with Xfce to <a href="https://fedoraproject.org/workstation/">Fedora Workstation</a> 42.  I have not been entirely satisfied with it.  I also have concerns about some changes in GNU/Linux in general.  (A regular in the BSDs’ subreddits has <a href="https://blog.thechases.com/posts/why-bsds/">complained about this</a>.)</p>

<p>I am considering switching to <a href="https://www.openbsd.org/">OpenBSD</a>.  It has its own issues, but it is improving.  Its performance should be good enough for me by 7.9.</p>

<h3 id="video-acceleration">Video Acceleration</h3>

<p>OpenBSD is slower than GNU/Linux and FreeBSD.  It got <abbr title="Video Acceleration API">VA-API</abbr> support <a href="https://www.undeadly.org/cgi?action=article;sid=20240721165445">just last year</a>.  Chromium and ungoogled-chromium <a href="https://www.undeadly.org/cgi?action=article;sid=20251104063040">recently got VA-API support in -current</a>.  I upgraded a throwaway OpenBSD installation to -current to test this.  Video acceleration worked well under Chromium, even with 1080p60 YouTube videos.  Playback of some videos in mpv also worked with hardware acceleration with <code>hwdec</code> set to <code>auto</code> and <code>profile</code> set to <code>fast</code>.  Even unaccelerated 4K video playback seemed to work better under -current than under 7.8.</p>

<h3 id="hardware-compatibility">Hardware Compatibility</h3>

<p>My <a href="https://bennvenn.myshopify.com/products/usb-gb-c-cart-dumper-the-joey-jr">Joey Jr V2++ Game Boy/Game Boy Color/Game Boy Advance cartridge dumper</a> works under OpenBSD despite it not being officially supported.  <del>(It did not work under FreeBSD when I tried it.)</del>  My <a href="https://hauppauge.com/pages/products/data_usblive2.html">Hauppauge USB-Live2 video capture device</a> does not, but I can probably install Alpine Linux on a USB flash drive or something for that.  Network printing and scanning with a Brother inkjet network printer worked with some configuration.</p>

<h3 id="filesystem">Filesystem</h3>

<p>That leaves OpenBSD’s filesystem (<abbr title="Unix File System">UFS</abbr>/<abbr title="Fast File System">FFS</abbr>2).  I have heard <a href="https://dataswamp.org/~solene/2024-11-15-why-i-stopped-using-openbsd.html#_Reliability">horror</a> <a href="https://old.reddit.com/r/openbsd/comments/1l5yptj/two_questions_about_openbsd/">stories</a> about its reliability, and <a href="https://old.reddit.com/r/openbsd/comments/1hudwhs/future_file_system_for_openbsd/m5ky7gn/?context=3">an OpenBSD developer admitted</a> that UFS/FFS2 was “garbage”.  A <abbr title="Uninterruptible Power Supply">UPS</abbr> would help, but I do not have one.  Frequent backups (which I should do anyway) should help.  (I would store most data on a fileserver running FreeBSD with ZFS if I could, but I have no hardware to use for that.)</p>

<p>[2025-12-09T17:59-0800] <b>Update:</b> The Joey Jr V2++ appears to work under FreeBSD 15.0, according to some bare-minimum testing I did.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="fedora" /><category term="openbsd" /><summary type="html"><![CDATA[A few months ago, I switched from Debian Bookworm with Xfce to Fedora Workstation 42. I have not been entirely satisfied with it. I also have concerns about some changes in GNU/Linux in general. (A regular in the BSDs’ subreddits has complained about this.)]]></summary></entry><entry><title type="html">20 Years of GNU/Linux</title><link href="https://wlair.us.to/blog/2024/02/13/linux-gnu-20/index.html" rel="alternate" type="text/html" title="20 Years of GNU/Linux" /><published>2024-02-13T16:57:00-08:00</published><updated>2024-02-13T16:57:00-08:00</updated><id>https://wlair.us.to/blog/2024/02/13/linux-gnu-20/linux-gnu-20</id><content type="html" xml:base="https://wlair.us.to/blog/2024/02/13/linux-gnu-20/index.html"><![CDATA[<p>20 years ago today, <time datetime="2004-02-13">Friday, 13 February 2004</time>, I finally installed <a href="https://web.archive.org/web/20031204195420/http://www.mandrakesoft.com/products/92/">Mandrake Linux 9.2</a> successfully after various failed attempts within the previous few months (I burned the CDs in late 2003).</p>

<p>I dual-booted between it and an illegitimate Windows XP Professional installation (with a certain infamous volume licensing key), which I was using previously.  For the desktop environment, I used the default KDE 3.1.  I initially expected it to be difficult to connect to the Internet, but it detected my Ethernet card’s settings automatically.  (I initially (falsely) believed it had detected the settings from the Windows XP installation.)  Hardware at this time consisted of a 400 MHz Celeron Mendocino (cf Pentium II) and 128 or 256 MB (I forget which) of RAM, the same PC I had been using since circa 2002.</p>

<p>I have run various other GNU/Linux distributions since then, off-and-on with the BSDs (specifically <a href="https://wlair.us.to/blog/2019/01/09/i-feel-slower-now/index.html">OpenBSD</a> and <a href="https://wlair.us.to/blog/2016/05/16/freebsd-vs-debian-on-nomad/index.html">FreeBSD</a>) starting in 2013.  Those distributions included Fedora (then known as Fedora Core), Ubuntu (including Kubuntu and Xubuntu), Gentoo, Arch, and Slackware.  I am currently a Debian user, having switched back to GNU/Linux from the BSDs because of hardware and software compatibility issues.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="mandrake" /><summary type="html"><![CDATA[20 years ago today, Friday, 13 February 2004, I finally installed Mandrake Linux 9.2 successfully after various failed attempts within the previous few months (I burned the CDs in late 2003).]]></summary></entry><entry><title type="html">Trackball Button Fixed</title><link href="https://wlair.us.to/blog/2022/09/22/trackball-button-fixed/index.html" rel="alternate" type="text/html" title="Trackball Button Fixed" /><published>2022-09-22T19:00:00-07:00</published><updated>2022-09-22T19:00:00-07:00</updated><id>https://wlair.us.to/blog/2022/09/22/trackball-button-fixed/trackball-button-fixed</id><content type="html" xml:base="https://wlair.us.to/blog/2022/09/22/trackball-button-fixed/index.html"><![CDATA[<p>I just fixed my Logitech TrackMan Marble’s left button.</p>

<p>The button developed an issue where a single-click would register as a double-click, and click-and-drag was unreliable.  I opened the trackball, determined the model number of the button to be D2FC-F-7N, and obtained replacement buttons of that type.</p>

<p>I removed the old button and then soldered in the new one.  A quick check with <a href="https://manpage.me/?q=xev">xev</a> confirmed that the new button worked.</p>

<p>The left button is now reliable again.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="repair" /><summary type="html"><![CDATA[I just fixed my Logitech TrackMan Marble’s left button.]]></summary></entry><entry><title type="html">Back to Irssi</title><link href="https://wlair.us.to/blog/2021/10/28/back-to-irssi/index.html" rel="alternate" type="text/html" title="Back to Irssi" /><published>2021-10-28T07:58:00-07:00</published><updated>2021-10-28T07:58:00-07:00</updated><id>https://wlair.us.to/blog/2021/10/28/back-to-irssi/back-to-irssi</id><content type="html" xml:base="https://wlair.us.to/blog/2021/10/28/back-to-irssi/index.html"><![CDATA[<p>For several years, I used <a href="https://irssi.org/">Irssi</a> in <a href="https://tmux.github.io/">tmux</a> on a <a href="https://en.wikipedia.org/wiki/Shell_account">shell server</a>.  A few months ago, I started using <a href="https://github.com/emacs-circe/circe">Circe</a> as my IRC client (connected to a <a href="https://wiki.znc.in/ZNC">ZNC</a> bouncer) after a brief stint with <a href="https://en.wikipedia.org/wiki/ERC_(software)">ERC</a>.  Circe had various issues:</p>

<ul>
  <li>Basic features, such as the display of my current nick, current channel modes, and <code class="language-plaintext highlighter-rouge">/LIST</code>, were not implemented.</li>
  <li>The tab completion omitted the colon after the nick, even with <code class="language-plaintext highlighter-rouge">circe-completion-suffix</code> set to the default <code class="language-plaintext highlighter-rouge">: </code>.  It also occasionally gave odd tab completion suggestions based on obscure substrings.</li>
  <li>The currently focused channel(s) still appeared in the tracker regardless of <code class="language-plaintext highlighter-rouge">lui-track-behavior</code>’s value.</li>
  <li>Even with <code class="language-plaintext highlighter-rouge">circe-lagmon-mode</code>, Circe did not reconnect to my bouncer after losing the network connection.</li>
  <li><code class="language-plaintext highlighter-rouge">circe-lagmon-mode</code> did not work with some servers.</li>
  <li><code class="language-plaintext highlighter-rouge">circe-lagmon-mode</code> would cause Circe to spam “<code class="language-plaintext highlighter-rouge">*** User away: &lt;current nick&gt;</code>” when I was set as away, at least with multiple instances of Circe running.</li>
  <li>Circe would set my away message to my nick instead of what I typed as an argument to <code class="language-plaintext highlighter-rouge">/[G]AWAY</code>.</li>
  <li>The topic was not always visible <em>à la</em> Irssi, WeeChat, or ERC’s top bar.  I would rather not type <code class="language-plaintext highlighter-rouge">/TOPIC</code> constantly.</li>
  <li>WHOIS output would appear in random buffers.</li>
</ul>

<p>Early this month, I switched back to Irssi (with ZNC this time) after getting tired of Circe’s bugs.  With multiple clients at least, it is not as good as bare Irssi in a terminal multiplexer, but it works better than Circe did.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="rant" /><category term="irc" /><category term="irssi" /><category term="circe" /><category term="emacs" /><summary type="html"><![CDATA[For several years, I used Irssi in tmux on a shell server. A few months ago, I started using Circe as my IRC client (connected to a ZNC bouncer) after a brief stint with ERC. Circe had various issues:]]></summary></entry><entry><title type="html">My Email Setup</title><link href="https://wlair.us.to/blog/2020/01/09/my-email-setup/index.html" rel="alternate" type="text/html" title="My Email Setup" /><published>2020-01-09T04:10:00-08:00</published><updated>2020-01-09T04:10:00-08:00</updated><id>https://wlair.us.to/blog/2020/01/09/my-email-setup/my-email-setup</id><content type="html" xml:base="https://wlair.us.to/blog/2020/01/09/my-email-setup/index.html"><![CDATA[<p>For the past few months, I have used the following <a href="https://en.wikipedia.org/wiki/Email_agent_(infrastructure)">email setup</a>:</p>

<p>Incoming mail → <a href="http://isync.sourceforge.net/">mbsync</a> (<abbr title="Mail Retrieval Agent">MRA</abbr>) → <a href="http://www.djcbsoftware.nl/code/mu/">mu</a> (email indexer) → <a href="http://www.djcbsoftware.nl/code/mu/mu4e.html">mu4e</a> (<abbr title="Mail User Agent">MUA</abbr>) → <a href="https://marlam.de/msmtp/">msmtp</a> (<abbr title="Simple Mail Transfer Protocol">SMTP</abbr> client) → Outgoing mail</p>

<h3 id="summary">Summary</h3>

<ul>
  <li><strong>mbsync</strong> synchronises the local maildirs via <abbr title="Internet Message Access Protocol">IMAP</abbr> with the email accounts themselves.  <a href="https://twitter.com/woddfellow2/status/1174062483801300994">I found it to be faster</a> than OfflineIMAP.</li>
  <li><strong>mu</strong> indexes messages and makes them easier to search.</li>
  <li><strong>mu4e</strong> is the Emacs-based email client included with mu.</li>
  <li><strong>msmtp</strong> sends outgoing messages over SMTP.</li>
</ul>

<h3 id="setup">Setup</h3>

<h4 id="installation">Installation</h4>

<p>First, install the relevant tools.  Under Debian, one would install the following packages:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># apt install isync mu4e msmtp
</code></pre></div></div>

<h4 id="preparation">Preparation</h4>

<p>Next, create the directories that will contain your maildirs.  Change the path and account names to match your preferences:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mkdir -p ~/Mail/{Main,Personal,Work}
</code></pre></div></div>

<p>I also recommend creating your signature blocks at this point.  This tutorial uses files in <code class="language-plaintext highlighter-rouge">~/doc/signatures</code> as an example.  See the <code class="language-plaintext highlighter-rouge">message-signature-file</code> variables in the below mu4e config for examples.</p>

<h4 id="configuring-mbsync">Configuring mbsync</h4>

<p>Write your <code class="language-plaintext highlighter-rouge">~/.mbsyncrc</code>.  Here is an example for 3 accounts:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>IMAPAccount Main
Host imap.example.net
User foo@example.net
Pass hunter2
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore Main-remote
Account Main

MaildirStore Main-local
Path ~/Mail/Main/
Inbox ~/Mail/Main/inbox

Channel Main-default
Master :Main-remote:
Slave :Main-local:Inbox

Channel Main-sent
Master :Main-remote:"[Gmail]/Sent Mail"
slave :Main-local:Sent

Channel Main-trash
Master :Main-remote:"[Gmail]/Trash"
slave :Main-local:Trash

Channel Main-archive
Master :Main-remote:"[Gmail]/All Mail"
slave :Main-local:All

Channel Main-junk
Master :Main-remote:"[Gmail]/Spam"
slave :Main-local:Junk

Channel Main-drafts
Master :Main-remote:"[Gmail]/Drafts"
slave :Main-local:Drafts

Create Both
Expunge Both
SyncState *

Group Main
Channel Main-default
Channel Main-sent
Channel Main-trash
Channel Main-archive
Channel Main-junk

IMAPAccount Personal
Host imap.example.net
User bar@example.net
Pass hunter2
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore Personal-remote
Account Personal

MaildirStore Personal-local
Path ~/Mail/Personal/
Inbox ~/Mail/Personal/inbox

Channel Personal-default
Master :Personal-remote:
Slave :Personal-local:Inbox

Channel Personal-sent
Master :Personal-remote:"[Gmail]/Sent Mail"
slave :Personal-local:Sent

Channel Personal-trash
Master :Personal-remote:"[Gmail]/Trash"
slave :Personal-local:Trash

Channel Personal-archive
Master :Personal-remote:"[Gmail]/All Mail"
slave :Personal-local:All

Channel Personal-junk
Master :Personal-remote:"[Gmail]/Spam"
slave :Personal-local:Junk

Channel Personal-sent
Master :Personal-remote:"[Gmail]/Sent Mail"
slave :Personal-local:Sent

Create Both
Expunge Both
SyncState *

Group Personal
Channel Personal-default
Channel Personal-sent
Channel Personal-trash
Channel Personal-archive
Channel Personal-junk

IMAPAccount Work
Host imap.example.net
User baz@example.net
Pass hunter2
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore Work-remote
Account Work

MaildirStore Work-local
Path ~/Mail/Work/
Inbox ~/Mail/Work/inbox

Channel Work-default
Master :Work-remote:
Slave :Work-local:Inbox

Channel Work-sent
Master :Work-remote:"[Gmail]/Sent Mail"
slave :Work-local:Sent

Channel Work-trash
Master :Work-remote:"[Gmail]/Trash"
slave :Work-local:Trash

Channel Work-archive
Master :Work-remote:"[Gmail]/All Mail"
slave :Work-local:All

Channel Work-junk
Master :Work-remote:"[Gmail]/Spam"
slave :Work-local:Junk

Channel Work-drafts
Master :Work-remote:"[Gmail]/Drafts"
slave :Work-local:Drafts

Create Both
Expunge Both
SyncState *

Group Work
Channel Work-default
Channel Work-sent
Channel Work-trash
Channel Work-archive
Channel Work-junk
</code></pre></div></div>

<p>The location of <code class="language-plaintext highlighter-rouge">CertificateFile</code> may vary based on your system.</p>

<p>Finally, make <code class="language-plaintext highlighter-rouge">~/.mbsyncrc</code> readable and writable only by the owner, for privacy:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ chmod 600 ~/.mbsyncrc
</code></pre></div></div>

<h4 id="configuring-msmtp">Configuring msmtp</h4>

<p><code class="language-plaintext highlighter-rouge">~/.msmtprc</code> should look something like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log

# Main
account Main
host smtp.example.net
port 587
from foo@example.net
user foo@example.net
password hunter2

# Personal
account Personal
host smtp.example.net
port 587
from bar@example.net
user bar@example.net
password hunter2

# Work
account Work
host smtp.example.net
port 587
from baz@example.net
user baz@example.net
password hunter2

account default : Main
</code></pre></div></div>

<p>As with mbsync’s <code class="language-plaintext highlighter-rouge">CertificateFile</code>, the location of <code class="language-plaintext highlighter-rouge">tls_trust_file</code> may vary based on your system.</p>

<p>As with <code class="language-plaintext highlighter-rouge">~/.mbsyncrc</code> above, you should make <code class="language-plaintext highlighter-rouge">~/.msmtprc</code> readable and writable only by the owner.  <strong>This is especially important with msmtp, as it will refuse to run otherwise.</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ chmod 600 ~/.msmtprc
</code></pre></div></div>

<h5 id="msmtpqueue">msmtpqueue</h5>

<p><strong>msmtpqueue</strong> is a small collection of scripts to queue outgoing messages and then send them later.  Under Debian, it is available in <code class="language-plaintext highlighter-rouge">/usr/share/doc/msmtp/examples/msmtpqueue</code>.  I copied the scripts to my personal <code class="language-plaintext highlighter-rouge">~/local/bin</code> directory and then edited them for my own use.  See <code class="language-plaintext highlighter-rouge">/usr/share/doc/msmtp/examples/msmtpqueue/README</code> for more information.</p>

<p>There is also <code class="language-plaintext highlighter-rouge">msmtpq</code>, which I have not tried.</p>

<h4 id="configuring-mu4e">Configuring mu4e</h4>

<p>mu4e is configured in your Emacs init file.  Here is an example:</p>

<div class="language-emacs-lisp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="nb">require</span> <span class="ss">'mu4e</span><span class="p">)</span>

<span class="c1">;; Make mu4e Emacs's default email client</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">read-mail-command</span> <span class="ss">'mu4e</span>
      <span class="nv">mail-user-agent</span> <span class="ss">'mu4e-user-agent</span><span class="p">)</span>

<span class="c1">;; Where the messages are</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-maildir</span> <span class="s">"~/Mail"</span><span class="p">)</span>

<span class="c1">;; How to get mail</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-get-mail-command</span> <span class="s">"mbsync -a"</span>
      <span class="nv">mu4e-update-interval</span> <span class="mi">300</span><span class="p">)</span>

<span class="c1">;; How to send mail</span>
<span class="c1">;; (Be sure to point sendmail-program to the proper path for msmtp-enqueue.sh!)</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">message-send-mail-function</span> <span class="ss">'message-send-mail-with-sendmail</span>
      <span class="nv">sendmail-program</span> <span class="s">"/home/user/bin/msmtp-enqueue.sh"</span><span class="p">)</span>

<span class="c1">;; Gmail needs this</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-sent-messages-behavior</span> <span class="ss">'delete</span><span class="p">)</span>

<span class="c1">;; Display To: header in headers view</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-headers-fields</span> <span class="o">'</span><span class="p">((</span><span class="ss">:human-date</span> <span class="o">.</span> <span class="mi">12</span><span class="p">)</span>
                            <span class="p">(</span><span class="ss">:flags</span> <span class="o">.</span> <span class="mi">6</span><span class="p">)</span>
                            <span class="p">(</span><span class="ss">:from</span> <span class="o">.</span> <span class="mi">15</span><span class="p">)</span>
                            <span class="p">(</span><span class="ss">:to</span> <span class="o">.</span> <span class="mi">12</span><span class="p">)</span>
                            <span class="p">(</span><span class="ss">:subject</span><span class="p">)))</span>

<span class="c1">;; Bookmarks</span>
<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-bookmarks</span>
      <span class="o">`</span><span class="p">(</span> <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Unread messages"</span>
           <span class="ss">:query</span> <span class="s">"flag:unread AND NOT \"maildir:/Main/Junk\" AND NOT \"maildir:/Personal/Junk\" AND NOT \"maildir:/Work/Junk\""</span>
           <span class="ss">:key</span> <span class="nv">?u</span><span class="p">)</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Today's messages"</span>
           <span class="ss">:query</span> <span class="s">"date:today..now AND NOT \"maildir:/Main/Junk\" AND NOT \"maildir:/Personal/Junk\" AND NOT \"maildir:/Work/Junk\""</span>
           <span class="ss">:key</span> <span class="nv">?t</span><span class="p">)</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Last 7 days"</span>
           <span class="ss">:query</span> <span class="s">"date:7d..now AND NOT \"maildir:/Main/Junk\" AND NOT \"maildir:/Personal/Junk\" AND NOT \"maildir:/Work/Junk\""</span>
           <span class="ss">:key</span> <span class="nv">?w</span><span class="p">)</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Inboxes"</span>
           <span class="ss">:query</span> <span class="s">"\"maildir:/Main/INBOX\" OR \"maildir:/Personal/INBOX\" OR \"maildir:/Work/INBOX\""</span>
           <span class="ss">:key</span> <span class="nv">?i</span><span class="p">)</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Sent messages"</span>
           <span class="ss">:query</span> <span class="s">"\"maildir:/Main/Sent\" OR \"maildir:/Personal/Sent\" OR \"maildir:/Work/Sent\""</span>
           <span class="ss">:key</span> <span class="nv">?s</span><span class="p">)</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-bookmark</span>
           <span class="ss">:name</span> <span class="s">"Spam"</span>
           <span class="ss">:query</span> <span class="s">"\"maildir:/Main/Junk\" OR \"maildir:/Personal/Junk\" OR \"maildir:/Work/Junk\""</span>
           <span class="ss">:key</span> <span class="nv">?j</span><span class="p">)))</span>
</code></pre></div></div>

<p>For multiple email accounts, we will use <a href="http://www.djcbsoftware.nl/code/mu/mu4e/Contexts.html">contexts</a>.  If you publish your Emacs config, e.g., in version control, <em>be aware that this section will contain passwords and other personally identifiable information</em>.</p>

<div class="language-emacs-lisp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="nb">require</span> <span class="ss">'mu4e-context</span><span class="p">)</span>

<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-contexts</span>
      <span class="o">`</span><span class="p">(</span> <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-context</span>
           <span class="ss">:name</span> <span class="s">"Main"</span>
           <span class="ss">:enter-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">mu4e-message</span> <span class="s">"Entering Main context"</span><span class="p">))</span>
           <span class="ss">:leave-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">mu4e-message</span> <span class="s">"Leaving Main context"</span><span class="p">))</span>
           <span class="ss">:match-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="nv">msg</span><span class="p">)</span>
                         <span class="p">(</span><span class="nb">when</span> <span class="nv">msg</span>
                           <span class="p">(</span><span class="nv">mu4e-message-contact-field-matches</span> <span class="nv">msg</span> <span class="ss">:to</span> <span class="s">"foo@example.net"</span><span class="p">)))</span>
           <span class="ss">:vars</span> <span class="o">'</span><span class="p">((</span><span class="nv">user-email-address</span> <span class="o">.</span> <span class="s">"foo@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-mail-address</span> <span class="o">.</span> <span class="s">"foo@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-full-name</span> <span class="o">.</span> <span class="s">"Someone"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-sent-folder</span> <span class="o">.</span> <span class="s">"/Main/Sent"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-drafts-folder</span> <span class="o">.</span> <span class="s">"/Main/Drafts"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-trash-folder</span> <span class="o">.</span> <span class="s">"/Main/Trash"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-refile-folder</span> <span class="o">.</span> <span class="s">"/Main/All"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">message-sendmail-extra-arguments</span> <span class="o">.</span> <span class="s">"-a Main"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mail-host-address</span> <span class="o">.</span> <span class="s">"example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-compose-signature</span> <span class="o">.</span> <span class="p">(</span><span class="nv">with-temp-buffer</span> <span class="p">(</span><span class="nv">insert-file-contents</span> <span class="s">"~/doc/signatures/Main"</span><span class="p">)</span> <span class="p">(</span><span class="nv">buffer-string</span><span class="p">)))</span>
                   <span class="p">(</span><span class="nv">message-signature-file</span> <span class="o">.</span> <span class="s">"~/doc/signatures/Main"</span><span class="p">)))</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-context</span>
           <span class="ss">:name</span> <span class="s">"Personal"</span>
           <span class="ss">:enter-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">mu4e-message</span> <span class="s">"Switch to the Personal context"</span><span class="p">))</span>
           <span class="ss">:match-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="nv">msg</span><span class="p">)</span>
                         <span class="p">(</span><span class="nb">when</span> <span class="nv">msg</span>
                           <span class="p">(</span><span class="nv">mu4e-message-contact-field-matches</span> <span class="nv">msg</span> <span class="ss">:to</span> <span class="s">"bar@example.net"</span><span class="p">)))</span>
           <span class="ss">:vars</span> <span class="o">'</span><span class="p">((</span><span class="nv">user-email-address</span> <span class="o">.</span> <span class="s">"bar@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-mail-address</span> <span class="o">.</span> <span class="s">"bar@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-full-name</span> <span class="o">.</span> <span class="s">"John Smith"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-sent-folder</span> <span class="o">.</span> <span class="s">"/Personal/Sent"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-drafts-folder</span> <span class="o">.</span> <span class="s">"/Personal/Drafts"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-trash-folder</span> <span class="o">.</span> <span class="s">"/Personal/Trash"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-refile-folder</span> <span class="o">.</span> <span class="s">"/Personal/All"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">message-sendmail-extra-arguments</span> <span class="o">.</span> <span class="s">"-a Personal"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mail-host-address</span> <span class="o">.</span> <span class="s">"example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-compose-signature</span> <span class="o">.</span> <span class="p">(</span><span class="nv">with-temp-buffer</span> <span class="p">(</span><span class="nv">insert-file-contents</span> <span class="s">"~/doc/signatures/Personal"</span><span class="p">)</span> <span class="p">(</span><span class="nv">buffer-string</span><span class="p">)))</span>
                   <span class="p">(</span><span class="nv">message-signature-file</span> <span class="o">.</span> <span class="s">"~/doc/signatures/Personal"</span><span class="p">)))</span>
         <span class="o">,</span><span class="p">(</span><span class="nv">make-mu4e-context</span>
           <span class="ss">:name</span> <span class="s">"Work"</span>
           <span class="ss">:enter-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">mu4e-message</span> <span class="s">"Switch to the Work context"</span><span class="p">))</span>
           <span class="ss">:match-func</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">(</span><span class="nv">msg</span><span class="p">)</span>
                         <span class="p">(</span><span class="nb">when</span> <span class="nv">msg</span>
                           <span class="p">(</span><span class="nv">mu4e-message-contact-field-matches</span> <span class="nv">msg</span> <span class="ss">:to</span> <span class="s">"baz@example.net"</span><span class="p">)))</span>
           <span class="ss">:vars</span> <span class="o">'</span><span class="p">((</span><span class="nv">user-email-address</span> <span class="o">.</span> <span class="s">"baz@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-mail-address</span> <span class="o">.</span> <span class="s">"baz@example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">user-full-name</span> <span class="o">.</span> <span class="s">"John Smith"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-sent-folder</span> <span class="o">.</span> <span class="s">"/Work/Sent"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-drafts-folder</span> <span class="o">.</span> <span class="s">"/Work/Drafts"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-trash-folder</span> <span class="o">.</span> <span class="s">"/Work/Trash"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-refile-folder</span> <span class="o">.</span> <span class="s">"/Work/All"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">message-sendmail-extra-arguments</span> <span class="o">.</span> <span class="s">"-a Work"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mail-host-address</span> <span class="o">.</span> <span class="s">"example.net"</span><span class="p">)</span>
                   <span class="p">(</span><span class="nv">mu4e-compose-signature</span> <span class="o">.</span> <span class="p">(</span><span class="nv">with-temp-buffer</span> <span class="p">(</span><span class="nv">insert-file-contents</span> <span class="s">"~/doc/signatures/Work"</span><span class="p">)</span> <span class="p">(</span><span class="nv">buffer-string</span><span class="p">)))</span>
                   <span class="p">(</span><span class="nv">message-signature-file</span> <span class="o">.</span> <span class="s">"~/doc/signatures/Work"</span><span class="p">)))))</span>

<span class="p">(</span><span class="k">setq</span> <span class="nv">mu4e-context-policy</span> <span class="ss">'pick-first</span>
      <span class="nv">mu4e-compose-context-policy</span> <span class="ss">'ask</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="initialisation">Initialisation</h3>

<p>Synchronise the maildirs and then index the messages:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ mbsync -a
$ mu index --maildir="$HOME/Mail"
</code></pre></div></div>

<h3 id="cronjobs">cronjobs</h3>

<p>You can have <code class="language-plaintext highlighter-rouge">cron</code> synchronise your maildirs and send pending messages automatically.  Put this shell script in <code class="language-plaintext highlighter-rouge">~/bin</code> or a similar directory, name it <code class="language-plaintext highlighter-rouge">get-send-mail</code> (or similar), and make it executable with <code class="language-plaintext highlighter-rouge">chmod +x</code>:</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/sh</span>

<span class="c"># Check if we are online; replace with something more appropriate for your setup</span>
ping <span class="nt">-c</span> 1 <span class="nt">-w</span> 2 example.net <span class="o">&gt;</span> /dev/null

<span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$?</span><span class="s2">"</span> <span class="nt">-eq</span> 0 <span class="o">]</span><span class="p">;</span> <span class="k">then
	</span>mbsync <span class="nt">-aq</span>
	/home/user/bin/msmtp-runqueue.sh <span class="o">&gt;</span> /dev/null
<span class="k">fi</span>
</code></pre></div></div>

<p>Be sure to point to the proper path for <code class="language-plaintext highlighter-rouge">msmtp-runqueue.sh</code>.  You can now put something like this in your crontab:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@reboot /home/user/bin/get-send-mail
*/5 * * * * /home/user/bin/get-send-mail
</code></pre></div></div>

<p>It should run at boot and every 5 minutes.</p>

<h3 id="usage">Usage</h3>

<p>Simply restart Emacs, and then start mu4e with <kbd>M-x mu4e</kbd>.  For more information, see the <a href="http://www.djcbsoftware.nl/code/mu/mu4e/">mu4e manual</a>: <code class="language-plaintext highlighter-rouge">(info "(mu4e)")</code></p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="email" /><category term="mu4e" /><summary type="html"><![CDATA[For the past few months, I have used the following email setup:]]></summary></entry><entry><title type="html">I Feel Slower Now</title><link href="https://wlair.us.to/blog/2019/01/09/i-feel-slower-now/index.html" rel="alternate" type="text/html" title="I Feel Slower Now" /><published>2019-01-09T19:46:00-08:00</published><updated>2019-01-09T19:46:00-08:00</updated><id>https://wlair.us.to/blog/2019/01/09/i-feel-slower-now/i-feel-slower-now</id><content type="html" xml:base="https://wlair.us.to/blog/2019/01/09/i-feel-slower-now/index.html"><![CDATA[<p>During the first week of 2019, <a href="http://wlair.us.to/my-computers/">nomad</a> ran OpenBSD 6.4.  Here is how that went:</p>

<p><strong>The good:</strong> Unlike <a href="http://wlair.us.to/blog/2016/05/17/freebsd-vs-debian-on-nomad/index.html">under FreeBSD 10.3 a few years earlier</a>, hardware support was better.  The Wi-Fi signal strength thing turned out to be i3status not supporting <code class="language-plaintext highlighter-rouge">%quality</code> under the BSDs.  5 GHz worked fine.  Suspension and hibernation worked well.  OpenBSD also does not have the headphone jack switching issue that FreeBSD has.</p>

<p><strong>The bad:</strong> Performance was unacceptably slow.  If audio and/or video was playing, loading a Web page, even a simple one, in Chromium would cause the audio to stutter.  Swapping would occur when memory usage reached roughly 1.5 GB (nomad has 3 GB) despite adding my user account to <code class="language-plaintext highlighter-rouge">staff</code> and adjusting <code class="language-plaintext highlighter-rouge">staff</code>’s resource limits in <code class="language-plaintext highlighter-rouge">/etc/login.conf</code>.  It would avoid the rest of the RAM as if it were poison or something.  Wi-Fi was about half the speed it was under GNU/Linux for some reason.  Also, some Web sites, such as Twitch streams (mpv + youtube-dl worked fine, though) and Internet Archive’s JavaScript implementation of MAME, would not work in either Chromium (with sandboxing) or Firefox.</p>

<p>I have reverted to Debian GNU/Linux in the meantime.  OpenBSD mostly worked, and I would have stayed with it, if not for the above issue.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="openbsd" /><category term="rant" /><summary type="html"><![CDATA[During the first week of 2019, nomad ran OpenBSD 6.4. Here is how that went:]]></summary></entry><entry><title type="html">mu4e Polishing</title><link href="https://wlair.us.to/blog/2018/03/08/mu4e-polishing/index.html" rel="alternate" type="text/html" title="mu4e Polishing" /><published>2018-03-08T15:45:00-08:00</published><updated>2018-03-08T15:45:00-08:00</updated><id>https://wlair.us.to/blog/2018/03/08/mu4e-polishing/mu4e-polishing</id><content type="html" xml:base="https://wlair.us.to/blog/2018/03/08/mu4e-polishing/index.html"><![CDATA[<p>Until recently, <a href="http://www.djcbsoftware.nl/code/mu/mu4e.html">mu4e</a>’s “Unread messages” bookmark gave me messages from Gmail’s <span style="font-family: monospace;">/[Gmail].Spam</span> folder, and duplicates of legitimate emails from both the <span style="font-family: monospace;">/INBOX</span> and <span style="font-family: monospace;">/Gmail.[All Mail]</span> folders.  Today, I fixed that.</p>

<p>After doing some Web searches, I found <a href="https://vxlabs.com/2017/02/07/mu4e-0-9-18-e-mailing-with-emacs-now-even-better/">someone’s configuration</a>, and copied and then edited the <span style="font-family: monospace;">mu4e-bookmarks</span> variable from it.  I added some “<span style="font-family: monospace;">AND NOT [maildir goes here]</span>” directives, and it worked.  I also added bookmarks to <span style="font-family: monospace;">/[Gmail].All Mail</span> and <span style="font-family: monospace;">/[Gmail].Sent Mail</span>.</p>

<p>I <a href="https://github.com/woddfellow2/configs/commit/6ad9c37d8c33aa0609077a79489eea1831503e04">added that to my own config</a> and <a href="https://imgur.com/833c2k0">now it works fine</a>.</p>

<p>The only major thing left to fix: I must open an encrypted message twice to see it…</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="email" /><category term="mu4e" /><category term="emacs" /><summary type="html"><![CDATA[Until recently, mu4e’s “Unread messages” bookmark gave me messages from Gmail’s /[Gmail].Spam folder, and duplicates of legitimate emails from both the /INBOX and /Gmail.[All Mail] folders. Today, I fixed that.]]></summary></entry><entry><title type="html">Laptop Batteries</title><link href="https://wlair.us.to/blog/2017/11/20/laptop-batteries/index.html" rel="alternate" type="text/html" title="Laptop Batteries" /><published>2017-11-20T10:15:00-08:00</published><updated>2017-11-20T10:15:00-08:00</updated><id>https://wlair.us.to/blog/2017/11/20/laptop-batteries/laptop-batteries</id><content type="html" xml:base="https://wlair.us.to/blog/2017/11/20/laptop-batteries/index.html"><![CDATA[<p>When I got <a href="http://wlair.us.to/my-computers/#nomad">nomad</a> in April 2016, it included a 6-cell battery.  <a href="https://sourceforge.net/projects/acpiclient/">acpi</a> told me its “last full capacity” was 54%.  Eventually that ended up at 34%.</p>

<p>In early 2017, I replaced it with a 9-cell battery.</p>

<p>Recently, nomad’s battery started behaving oddly.</p>

<p>Yesterday, I noticed that charging would stall at about 80%.  Upon recharging it later, acpi told me its “last full capacity” was 69% (down from 87%).  This morning, battery life suddenly jumped from the low 20s to 5%.</p>

<p>I may try <a href="http://www.thinkwiki.org/wiki/Maintenance#Battery_treatment">reconditioning</a> it to see what happens.</p>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="nomad" /><summary type="html"><![CDATA[When I got nomad in April 2016, it included a 6-cell battery. acpi told me its “last full capacity” was 54%. Eventually that ended up at 34%.]]></summary></entry><entry><title type="html">FreeBSD vs Debian on nomad</title><link href="https://wlair.us.to/blog/2016/05/16/freebsd-vs-debian-on-nomad/index.html" rel="alternate" type="text/html" title="FreeBSD vs Debian on nomad" /><published>2016-05-16T18:24:00-07:00</published><updated>2016-05-16T18:24:00-07:00</updated><id>https://wlair.us.to/blog/2016/05/16/freebsd-vs-debian-on-nomad/freebsd-vs-debian-on-nomad</id><content type="html" xml:base="https://wlair.us.to/blog/2016/05/16/freebsd-vs-debian-on-nomad/index.html"><![CDATA[<p>The first few weeks after I got <a href="http://wlair.us.to/my-computers/">nomad</a>, it ran FreeBSD 10.3.  After that, I tried Debian GNU/Linux 8.4, and certain things worked better.</p>

<h3 id="freebsd">FreeBSD</h3>

<p>Most things I tried worked.  For some reason, Wi-Fi signal strength wasn’t reported, and only 2.4 GHz networks were supported.  Some of the various Fn hotkeys (e.g., Fn+F7) didn’t work.  Some issues weren’t the fault of FreeBSD itself, but of unportable software, such as Emacs’s display-battery-mode not working.  Also, there was a regression starting with FreeBSD 10.x in which QEMU no longer supported KVM, suggesting that users use bhyve or VirtualBox instead.</p>

<p>Suspension barely worked,  To get the TrackPoint to work after resuming, I had to switch to a text console and then back to X.  Also, sometimes suspension would fail, and would need a reboot to be able to suspend again.  I also once left VirtualBox running overnight when suspended, and I awoke to a kernel panic.  Hibernation also didn’t work.</p>

<p>Another issue is that the audio couldn’t switch between the internal speaker and the headphone jack.  This is not hardware-specific, as a desktop I used to have that ran FreeBSD also had this issue.</p>

<h3 id="debian">Debian</h3>

<p>I then installed Debian on another hard drive I had as a test, and I noticed that certain hardware worked better.  Wi-Fi signal strength is reported properly, and I can connect to 5 GHz networks.  The hotkeys that didn’t work under FreeBSD do work under Debian.  Audio switching works properly.  Suspension works properly, and appears to be faster than under FreeBSD.  Hibernation seems to work.  QEMU can use KVM.</p>

<p>The only issues are that the Wi-Fi chip needs the non-free <a href="https://packages.debian.org/jessie/firmware-iwlwifi">firmware-iwlwifi</a> package, and that <a href="https://freedesktop.org/wiki/Software/systemd/Debugging/#shutdowncompleteseventually">systemd occasionally hangs at halt and reboot</a>.  The latter appears to be a common issue and not hardware-specific.</p>

<h3 id="both">Both</h3>

<p>The card reader works under both FreeBSD and Debian, at least with the SD card I borrowed from my digital camera.</p>

<p>I have yet to try the fingerprint reader or the ExpressCard slot.  It also has a dial-up modem, but it is likely to be a softmodem, and I have no dial-up connection with which to test it, this being the 2010s.</p>

<h3 id="external-links">External Links</h3>

<ul>
  <li><a href="http://www.thinkwiki.org/wiki/Category:X200">X200 category at ThinkWiki</a></li>
  <li><a href="http://unethicalblogger.com/2013/12/03/scratchiest-neckbeard-freebsd-x200.html">The scratchiest neckbeard, or FreeBSD on my Thinkpad X200</a></li>
</ul>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="freebsd" /><category term="debian" /><category term="nomad" /><summary type="html"><![CDATA[The first few weeks after I got nomad, it ran FreeBSD 10.3. After that, I tried Debian GNU/Linux 8.4, and certain things worked better.]]></summary></entry><entry><title type="html">Making Firefox Sane</title><link href="https://wlair.us.to/blog/2015/12/21/making-firefox-sane/index.html" rel="alternate" type="text/html" title="Making Firefox Sane" /><published>2015-12-21T09:36:00-08:00</published><updated>2015-12-21T09:36:00-08:00</updated><id>https://wlair.us.to/blog/2015/12/21/making-firefox-sane/making-firefox-sane</id><content type="html" xml:base="https://wlair.us.to/blog/2015/12/21/making-firefox-sane/index.html"><![CDATA[<p>Here are some solutions to fixing UI issues in recent versions of Firefox:</p>

<ul>
  <li>Disable smooth scrolling (Preferences → Advanced → General → uncheck Use smooth scrolling).</li>
  <li>Set <code class="language-plaintext highlighter-rouge">browser.tabs.closeWindowWithLastTab</code> to <code class="language-plaintext highlighter-rouge">false</code>.</li>
  <li>Set <code class="language-plaintext highlighter-rouge">browser.newtab.url</code> to <code class="language-plaintext highlighter-rouge">about:blank</code>.</li>
  <li>Set <code class="language-plaintext highlighter-rouge">browser.urlbar.trimURLs</code> to <code class="language-plaintext highlighter-rouge">false</code>.</li>
  <li>Set <code class="language-plaintext highlighter-rouge">gfx.color_management_mode</code> to <code class="language-plaintext highlighter-rouge">0</code> to prevent images from appearing with a purple/indigo tint.</li>
</ul>

<p>Some issues are bad enough to need extensions to fix:</p>

<ul>
  <li><a href="https://addons.mozilla.org/en-US/firefox/addon/disable-ctrl-q-shortcut/">Disable Ctrl-Q Shortcut</a></li>
  <li><a href="https://addons.mozilla.org/en-US/firefox/addon/expire-history-by-days/">Expire history by days</a></li>
  <li><a href="https://addons.mozilla.org/en-US/firefox/addon/open-in-browser/">Open in Browser</a></li>
</ul>]]></content><author><name>xoddf2</name></author><category term="computing" /><category term="firefox" /><summary type="html"><![CDATA[Here are some solutions to fixing UI issues in recent versions of Firefox:]]></summary></entry></feed>