<?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.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>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>
    <item>
      <title>How to review code changes</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 14 Apr 2026 11:20:42 +0000</pubDate>
      <link>https://dev.to/zaphoddev/how-to-review-a-pr-525h</link>
      <guid>https://dev.to/zaphoddev/how-to-review-a-pr-525h</guid>
      <description>&lt;p&gt;A checklist that works:&lt;/p&gt;

&lt;h2&gt;
  
  
  Basics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Has the author finished making changes?&lt;/li&gt;
&lt;li&gt;Have you read the entire summary/description?&lt;/li&gt;
&lt;li&gt;Does the PR satisfy all the acceptance criteria?&lt;/li&gt;
&lt;li&gt;Have AI and/or junior developers reviewed it first?&lt;/li&gt;
&lt;li&gt;Are there any unnecessary changes?&lt;/li&gt;
&lt;li&gt;Are all the changes covered by automated or manual tests?&lt;/li&gt;
&lt;li&gt;Do the automated tests all pass? Check the logs afterwards: Do the messages look right?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Missing requirements
&lt;/h2&gt;

&lt;p&gt;If anything is discovered at this point, it's too late. But raise it anyway.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the feature performant?&lt;/li&gt;
&lt;li&gt;Do the changes affect overall performance?&lt;/li&gt;
&lt;li&gt;Are there metrics?&lt;/li&gt;
&lt;li&gt;Does the feature need to be communicated to users?&lt;/li&gt;
&lt;li&gt;Is it secure?&lt;/li&gt;
&lt;li&gt;Does it scale?&lt;/li&gt;
&lt;li&gt;Is the UX good?&lt;/li&gt;
&lt;li&gt;Is it maintainable?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;First, run the latest release to observe baseline behaviour. Make detailed notes if necessary, including logs and screenshots where appropriate, to help communicate all this to the team later.&lt;/li&gt;
&lt;li&gt;Observe system behaviour, paying close attention to:

&lt;ul&gt;
&lt;li&gt;Any unexpected warnings or errors, or unexplained behaviour (no matter how harmless it seems).&lt;/li&gt;
&lt;li&gt;All relevant application logs&lt;/li&gt;
&lt;li&gt;Browser console&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;You may need to account for differences between your dev environment and production, for example:

&lt;ul&gt;
&lt;li&gt;Mounted network storage&lt;/li&gt;
&lt;li&gt;Browser ad-blockers/proxies&lt;/li&gt;
&lt;li&gt;Amount of memory/storage/processing power available&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Sanity test the changes. Try to break it. Does everything work as expected? Does it raise any questions in your mind?&lt;/li&gt;

&lt;li&gt;Check the logs again. Do all the messages look right?&lt;/li&gt;

&lt;li&gt;Are there any new non-critical warnings? (don't ignore them)&lt;/li&gt;

&lt;li&gt;Are there any gaps in the automated or manual testing?&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  More things
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Think through the flow with your human brain and apply Murphy's Law.&lt;/li&gt;
&lt;li&gt;Ask AI specifically "review this code/test thoroughly, considering everything that could possibly go wrong".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Avoid gold plating / nit picking / bikeshedding&lt;/li&gt;
&lt;li&gt;Don't assume it will work. Assume it won't and prove otherwise.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>softwaredevelopment</category>
      <category>codereview</category>
      <category>softwareengineering</category>
      <category>howto</category>
    </item>
    <item>
      <title>AI Prompts</title>
      <dc:creator>Zaphod Dev</dc:creator>
      <pubDate>Tue, 24 Feb 2026 10:09:17 +0000</pubDate>
      <link>https://dev.to/zaphoddev/ai-prompts-2nna</link>
      <guid>https://dev.to/zaphoddev/ai-prompts-2nna</guid>
      <description>&lt;h2&gt;
  
  
  Rovo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I'm ________ and ________ happened.&lt;/li&gt;
&lt;li&gt;Search the whole company, restricted to _____ Jira project, _____ confluence space, and ______ github repo.&lt;/li&gt;
&lt;li&gt;Answer my question: ________&lt;/li&gt;
&lt;li&gt;Reply very concisely and abruptly, with no background information or definitions   &amp;lt;--- this doesn't fully work with Rovo!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Copilot
&lt;/h2&gt;

&lt;p&gt;You're an expert __________ with comprehensive knowledge of ________&lt;strong&gt;&lt;em&gt;.&lt;br&gt;
Help me _&lt;/em&gt;&lt;/strong&gt;_____&lt;strong&gt;&lt;em&gt;.&lt;br&gt;
I already know _&lt;/em&gt;&lt;/strong&gt;_____&lt;strong&gt;&lt;em&gt;.&lt;br&gt;
I want you to _&lt;/em&gt;&lt;/strong&gt;_______.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need you to reason step by step and explain your thought process internally before giving the final answer.&lt;/li&gt;
&lt;li&gt;Think through trade-offs before deciding.&lt;/li&gt;
&lt;li&gt;Perform internal reasoning before answering.&lt;/li&gt;
&lt;li&gt;Provide the final output only after complete reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gemini
&lt;/h2&gt;

&lt;p&gt;As of 22nd January 2026, ____________?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answer Yes or No, with sources.&lt;/li&gt;
&lt;li&gt;Do not rely on memory, verify against current official docs.&lt;/li&gt;
&lt;li&gt;If you are not sure, say 'unknown' instead of guessing.&lt;/li&gt;
&lt;li&gt;State whether this comes from official docs, community reports, or inference.&lt;/li&gt;
&lt;li&gt;Don't use markdown tables, they don't render in the android messages app&lt;/li&gt;
&lt;li&gt;Answer in two paragraphs with short, simple sentences. Disable clickbait headings option.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  [critical thinking]
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I need you to reason step by step and explain your thought process internally before giving the final answer.&lt;/li&gt;
&lt;li&gt;Think through trade-offs before deciding.&lt;/li&gt;
&lt;li&gt;Perform internal reasoning before answering.&lt;/li&gt;
&lt;li&gt;Provide the final output only after complete reasoning.&lt;/li&gt;
&lt;li&gt;Do not rely on memory, verify against actual content.&lt;/li&gt;
&lt;li&gt;If you are not sure, say 'unknown' instead of guessing.&lt;/li&gt;
&lt;li&gt;State whether this comes from official docs, community reports, or inference.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  dev.to image generator
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Striking bold solid lines, minimal colours, not too many details (poster-like to be seen at a distance).&lt;/li&gt;
&lt;li&gt;The text _____ and then ____ on a new line in a weird, amusing bulbous font.&lt;/li&gt;
&lt;li&gt;Do not use the 80s synthwave aesthetic at all. No random floating objects.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
      <category>softwaredevelopment</category>
      <category>devto</category>
    </item>
  </channel>
</rss>
