<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zaphod Dev</title>
    <description>The latest articles on DEV Community by Zaphod Dev (@zaphoddev).</description>
    <link>https://dev.to/zaphoddev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3789088%2Fb8d042b1-def1-472b-879c-4309a1f686b7.png</url>
      <title>DEV Community: Zaphod Dev</title>
      <link>https://dev.to/zaphoddev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zaphoddev"/>
    <language>en</language>
    <item>
      <title>How to change Chrome to bright, bold colours, not pastels</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Fri, 04 Sep 2026 19:06:21 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-change-chrome-to-bright-bold-colours-not-pastels-5598</link>
      <guid>https://dev.to/zaphoddev/how-to-change-chrome-to-bright-bold-colours-not-pastels-5598</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;If you have more than one google profile for any reason, such as personal, work, projects, etc. and want to operate them all from the same computer, then you might find it difficult. Every chrome window looks the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Naive solution
&lt;/h2&gt;

&lt;p&gt;Chrome has a "Customise profile" feature, it mainly changes the title bar and tab colour to a variety of pale, pastel shades which all look very similar to each other. Why doesn't it let the user choose strong, striking colours?&lt;/p&gt;

&lt;h2&gt;
  
  
  How to make Chrome different colours
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Easiest way&lt;/strong&gt;&lt;br&gt;
Select a pre-built theme from...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome Web Store: &lt;a href="https://chromewebstore.google.com/category/themes/colors" rel="noopener noreferrer"&gt;Themes section&lt;/a&gt;. Examples: &lt;a href="https://chromewebstore.google.com/detail/just-black/aghfnjkcakhmadgdomlmlhhaocbkloab" rel="noopener noreferrer"&gt;Black&lt;/a&gt;, &lt;a href="https://chromewebstore.google.com/detail/ron-burgundy/nbfljnhhapmncknfofaopfafophhojok" rel="noopener noreferrer"&gt;Red&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.chromethemer.com/chrome-themes/minimal/" rel="noopener noreferrer"&gt;chromethemer.com&lt;/a&gt;. Examples: &lt;a href="https://www.chromethemer.com/google-chrome/chrome-themes/agent-orange-google-chrome-theme.html" rel="noopener noreferrer"&gt;Orange&lt;/a&gt;, &lt;a href="https://www.chromethemer.com/google-chrome/chrome-themes/blue-bloo-google-chrome-theme.html" rel="noopener noreferrer"&gt;Blue&lt;/a&gt;, &lt;a href="https://www.chromethemer.com/google-chrome/chrome-themes/greener-green-google-chrome-theme.html" rel="noopener noreferrer"&gt;Green&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Most flexible way&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build custom themes, site 1: &lt;a href="https://chrometheme.studio/" rel="noopener noreferrer"&gt;chrometheme.studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Custom themes, site 2: &lt;a href="https://themebeta.com/chrome-theme-creator-online.html" rel="noopener noreferrer"&gt;themebeta.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Many of the themes include background images. These can be ignored, they only appear on the new tab page. Other extensions exist to change the new tab page separately, as well.&lt;/p&gt;

</description>
      <category>annoying</category>
      <category>themes</category>
      <category>chrome</category>
    </item>
    <item>
      <title>How to disable touchscreen on Dell Precision 5690 without admin rights</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Mon, 24 Aug 2026 12:46:33 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-disable-touchscreen-on-dell-precision-5690-without-admin-rights-b8o</link>
      <guid>https://dev.to/zaphoddev/how-to-disable-touchscreen-on-dell-precision-5690-without-admin-rights-b8o</guid>
      <description>&lt;p&gt;Open the registry, navigate to: &lt;code&gt;HKEY_CURRENT_USER\Software\Microsoft\Wisp\Touch&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Under that, create a new DWORD Value: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name &lt;code&gt;TouchGate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Value &lt;code&gt;0&lt;/code&gt; (default)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reboot.&lt;/p&gt;

</description>
      <category>touchscreen</category>
      <category>dell</category>
      <category>registry</category>
      <category>hack</category>
    </item>
    <item>
      <title>How to make `git pull` work via mobile hotspot</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Mon, 24 Aug 2026 11:14:29 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-make-git-pull-work-via-mobile-hotspot-4abd</link>
      <guid>https://dev.to/zaphoddev/how-to-make-git-pull-work-via-mobile-hotspot-4abd</guid>
      <description>&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GIT_SSH_COMMAND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ssh -v -o KexAlgorithms=curve25519-sha256"&lt;/span&gt; git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How to debug&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GIT_SSH_COMMAND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ssh -v"&lt;/span&gt; git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A hang at &lt;code&gt;expecting SSH2_MSG_KEX_ECDH_REPLY&lt;/code&gt; during key exchange points to a MTU/packet fragmentation issue, which is extremely common with mobile hotspots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening&lt;/strong&gt;&lt;br&gt;
The SSH key exchange uses large packets (especially with post-quantum algorithms like sntrup761x25519-sha512). Mobile networks often have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lower MTU than typical networks (1500 bytes on wifi vs ~1400 on cellular)&lt;/li&gt;
&lt;li&gt;Aggressive packet filtering or mangling&lt;/li&gt;
&lt;li&gt;Issues with large UDP/TCP packets that need fragmentation
The connection establishes fine (small packets), but hangs when the first large crypto packet is sent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Alternative fix&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find your hotspot interface (probably wlan0 or similar)&lt;/span&gt;
ip &lt;span class="nb"&gt;link &lt;/span&gt;show

&lt;span class="c"&gt;# Temporarily reduce MTU&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ip &lt;span class="nb"&gt;link set &lt;/span&gt;dev &amp;lt;interface&amp;gt; mtu 1400
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Permanent SSH config fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add to ~/.ssh/config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Host&lt;/span&gt; github.com
    &lt;span class="k"&gt;KexAlgorithms&lt;/span&gt; curve25519-sha256,curve25519-sha256@libssh.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This disables the post-quantum sntrup761 algorithm which generates the largest packets.&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>git</category>
      <category>networking</category>
      <category>terminal</category>
    </item>
    <item>
      <title>How to disable smart quotes in Jira and Confluence</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 11 Aug 2026 12:46:33 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-disable-smart-quotes-in-jira-and-confluence-5dpp</link>
      <guid>https://dev.to/zaphoddev/how-to-disable-smart-quotes-in-jira-and-confluence-5dpp</guid>
      <description>&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you type a single or double quote in Atlassian Jira or Confluence wiki, it's automatically converted to a smart quote. As a detail-oriented software engineer, this disturbs me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“double”&lt;br&gt;
‘single’&lt;br&gt;
I don’t like it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even if you delete the quote and re-type it, it becomes smart again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is no option to disable smart quotes permanently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can get rid of them&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;Ctrl-Z&lt;/code&gt; immediately after they appear.&lt;/p&gt;

&lt;p&gt;It also works for the word &lt;code&gt;don't&lt;/code&gt;: When you type apostrophe &lt;code&gt;'&lt;/code&gt; it looks normal, then when you type &lt;code&gt;t&lt;/code&gt;, the apostrophe changes. Type Ctrl-Z and it reverts back to normal again.&lt;/p&gt;

</description>
      <category>wiki</category>
      <category>annoying</category>
    </item>
    <item>
      <title>Python virtual env cheat sheet</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 11:05:41 +0000</pubDate>
      <link>https://dev.to/zaphoddev/python-virtual-env-cheat-sheet-4cnh</link>
      <guid>https://dev.to/zaphoddev/python-virtual-env-cheat-sheet-4cnh</guid>
      <description>&lt;h2&gt;
  
  
  Update: Use &lt;code&gt;uv&lt;/code&gt; instead
&lt;/h2&gt;

&lt;p&gt;This is another way to do it, probably sub-optimal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3.6 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source&lt;/span&gt; ./venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Common&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Standard&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Optional for poetry&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install &lt;/span&gt;poetry pip &lt;span class="nt"&gt;-U&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; poetry update
&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; poetry &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Teardown&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>cheatsheet</category>
      <category>pip</category>
      <category>beginners</category>
    </item>
    <item>
      <title>sed tricks</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 11:03:48 +0000</pubDate>
      <link>https://dev.to/zaphoddev/sed-tricks-hkk</link>
      <guid>https://dev.to/zaphoddev/sed-tricks-hkk</guid>
      <description>&lt;p&gt;Search and replace over multiple lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sed"&gt;&lt;code&gt;&lt;span class="k"&gt;s&lt;/span&gt;&lt;span class="p"&gt;e&lt;/span&gt;&lt;span class="sr"&gt;d -i -&lt;/span&gt;&lt;span class="p"&gt;e&lt;/span&gt; ':a' -&lt;span class="p"&gt;e&lt;/span&gt; &lt;span class="err"&gt;'N'&lt;/span&gt; &lt;span class="err"&gt;-e&lt;/span&gt; &lt;span class="err"&gt;'$!b&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="s"&gt;' -e 's/)\n(/),\n(/g' file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Simple toast notification</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 11:02:57 +0000</pubDate>
      <link>https://dev.to/zaphoddev/simple-toast-notification-3jo7</link>
      <guid>https://dev.to/zaphoddev/simple-toast-notification-3jo7</guid>
      <description>&lt;p&gt;Easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"toast('foo')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Show Toast&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;snackbar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;snackbar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cssText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    visibility: visible;
    text-align: center;
    border: 2px solid black;
    padding: 16px;
    position: fixed;
    z-index: 1;
    left: 50%;
    bottom: 30px;
    transform: translateX(-50%);
    opacity: 1;
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hidden&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;opacity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;snackbar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(&lt;a href="https://www.w3schools.com/HOWTO/howto_js_snackbar.asp" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>toast</category>
      <category>notification</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Docker desktop exit code 139 on WSL2</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 10:27:32 +0000</pubDate>
      <link>https://dev.to/zaphoddev/docker-desktop-exit-code-139-on-wsl2-56n2</link>
      <guid>https://dev.to/zaphoddev/docker-desktop-exit-code-139-on-wsl2-56n2</guid>
      <description>&lt;h2&gt;
  
  
  Noah's tip
&lt;/h2&gt;

&lt;p&gt;Out of the box new windows - wsl2 is unusable - need to be able to do &lt;code&gt;sudo apt update&lt;/code&gt;. Make /etc/resolv.conf changes permanent in WSL 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/resolv.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "nameserver 8.8.8.8" &amp;gt; /etc/resolv.conf'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "[network]" &amp;gt; /etc/wsl.conf'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo "generateResolvConf = false" &amp;gt;&amp;gt; /etc/wsl.conf'&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;chattr +i /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(&lt;a href="https://www.townsy.io/wsl2-how-to-fix-download-speed/" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Will's tip
&lt;/h2&gt;

&lt;p&gt;Problem: Docker containers immediately stop on Docker desktop (Windows) with exit code 139.&lt;/p&gt;

&lt;p&gt;Fix: Create a file named .wslconfig in your user directory, e.g. C:/Users/[your user name]/.wslconfig, with contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[wsl2]&lt;/span&gt;
&lt;span class="py"&gt;kernelCommandLine&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;vsyscall=emulate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then reboot&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://dev.to/damith/docker-desktop-container-crash-with-exit-code-139-on-windows-wsl-fix-438"&gt;source&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>linux</category>
      <category>wsl</category>
      <category>windows</category>
      <category>docker</category>
    </item>
    <item>
      <title>Tools I use in software engineering</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Thu, 16 Apr 2026 09:34:59 +0000</pubDate>
      <link>https://dev.to/zaphoddev/tools-i-use-in-software-engineering-233p</link>
      <guid>https://dev.to/zaphoddev/tools-i-use-in-software-engineering-233p</guid>
      <description>&lt;p&gt;These are not traditional tools, but modern methods of assimilating new information and concepts, and automating common tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://notegpt.io/youtube-video-summarizer" rel="noopener noreferrer"&gt;https://notegpt.io/youtube-video-summarizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mymap.ai/video-summarizer" rel="noopener noreferrer"&gt;https://www.mymap.ai/video-summarizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Your favourite AI can also summarise any transcript you give it&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tooling</category>
      <category>llm</category>
      <category>ai</category>
      <category>ide</category>
    </item>
    <item>
      <title>Escape quotes correctly when using psql via docker in bash</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 14 Apr 2026 16:07:26 +0000</pubDate>
      <link>https://dev.to/zaphoddev/escape-quotes-correctly-when-using-psql-via-docker-in-bash-19l4</link>
      <guid>https://dev.to/zaphoddev/escape-quotes-correctly-when-using-psql-via-docker-in-bash-19l4</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;site bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'PGPASSWORD=***** psql -Ufoo -d bar \
  -h example.com -x -c "select qux, date(xyzzy) from tabley          \
  where field in(1, 2, 3) and that_time &amp;gt; '&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'2024-11-18'&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;'       \
  order by that_time;"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quoteception
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;'"'"'&lt;/code&gt; is the &lt;em&gt;Quoteception&lt;/em&gt; operator.&lt;/p&gt;

&lt;p&gt;When used in the middle of a single quoted string, it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;'&lt;/code&gt; Ends the current single quoted string&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"&lt;/code&gt; Starts a new double quoted string&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;'&lt;/code&gt; That contains one single quote&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"&lt;/code&gt; Ends the double quoted string&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;'&lt;/code&gt; Re-starts the next single quoted string&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Embedded single quote is here: '&lt;/span&gt;&lt;span class="s2"&gt;"'"&lt;/span&gt;&lt;span class="s1"&gt;' did you see it?'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outputs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Embedded single quote is here:  '  did you see it?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>bash</category>
      <category>quote</category>
      <category>escape</category>
      <category>shell</category>
    </item>
    <item>
      <title>Disable keyboard shortcuts for Jira and Confluence</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:46:36 +0000</pubDate>
      <link>https://dev.to/zaphoddev/disable-keyboard-shortcuts-for-jira-and-confluence-5ean</link>
      <guid>https://dev.to/zaphoddev/disable-keyboard-shortcuts-for-jira-and-confluence-5ean</guid>
      <description>&lt;p&gt;Keyboard "shortcuts" are enabled by default for Atlassian products, and they can be extremely annoying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick way disable keyboard shortcuts for Jira
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Type &lt;code&gt;?&lt;/code&gt; (Question mark)&lt;/li&gt;
&lt;li&gt;Toggle the switch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Another way to enable/disable keyboard shortcuts for Jira
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open a ticket, for example &lt;code&gt;https://YOURCOMPANY.atlassian.net/browse/FOO-1234&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click the three dots &lt;code&gt;...&lt;/code&gt; in the top right of the page (or type Ctrl-K) to open the command palette&lt;/li&gt;
&lt;li&gt;Type "keyboard" to search for the keyboard shortcuts page, click it&lt;/li&gt;
&lt;li&gt;Toggle the "Keyboard shortcuts are enabled" switch in the top right&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  To disable keyboard shortcuts for Confluence
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;code&gt;https://YOURCOMPANY.atlassian.net/wiki/users/viewmysettings.action&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Edit&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Uncheck "Keyboard Shortcuts | Enable"&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>howto</category>
    </item>
    <item>
      <title>How to get past Sub::Defer in the Perl debugger</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:42:35 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-get-past-subdefer-in-the-perl-debugger-lk3</link>
      <guid>https://dev.to/zaphoddev/how-to-get-past-subdefer-in-the-perl-debugger-lk3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;YOU ARE IN A MAZE OF TWISTY LITTLE PASSAGES, ALL ALIKE&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;perl -d professional_adventure_2024.pl&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nn"&gt;Sub::Defer::&lt;/span&gt;&lt;span class="nv"&gt;CODE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x8ab8938&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="sr"&gt;/epsi/p&lt;/span&gt;&lt;span class="nv"&gt;erlbrew&lt;/span&gt;&lt;span class="sr"&gt;/perls/p&lt;/span&gt;&lt;span class="nv"&gt;erl&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5.16.3&lt;/span&gt;&lt;span class="sr"&gt;/lib/p&lt;/span&gt;&lt;span class="nv"&gt;erl5&lt;/span&gt;&lt;span class="sr"&gt;/Sub/&lt;/span&gt;&lt;span class="nv"&gt;Defer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;pm:55&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="mi"&gt;55&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="nv"&gt;$undeferred&lt;/span&gt; &lt;span class="o"&gt;||=&lt;/span&gt; &lt;span class="nv"&gt;undefer_sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$deferred_info&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nv"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="nv"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;v&lt;/span&gt;
&lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$undeferred&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;53&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$deferred_info&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;54&lt;/span&gt;        &lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$deferred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;55&lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;       &lt;span class="nv"&gt;$undeferred&lt;/span&gt; &lt;span class="o"&gt;||=&lt;/span&gt; &lt;span class="nv"&gt;undefer_sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$deferred_info&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;         &lt;span class="nb"&gt;goto&lt;/span&gt; &lt;span class="nv"&gt;&amp;amp;$undeferred&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="nv"&gt;$deferred_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$maker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;&lt;span class="nv"&gt;$undeferred&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$deferred&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="nv"&gt;weaken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$deferred_info&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="nv"&gt;weaken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$DEFERRED&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$deferred&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$deferred_info&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="nv"&gt;_install_coderef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$target&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$deferred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;defined&lt;/span&gt; &lt;span class="nv"&gt;$target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Walkthrough:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;7n&lt;/li&gt;
&lt;li&gt;3s&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>perl</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
