<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Gary Ghayrat&#39;s Blog</title>
    <link>https://blog.gary.gg/</link>
    <description></description>
    <pubDate>Wed, 06 May 2026 10:56:53 +0000</pubDate>
    <item>
      <title>Is your VPN connected but not working on a public Wifi? </title>
      <link>https://blog.gary.gg/is-your-vpn-connected-but-not-working-on-a-public-wifi?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[The default ports used by Wireguard and OpenVPN might be blocked by the network admin. &#xA;&#xA;Solution: See if your VPN provider supports running OpenVPN over port 443 (the same port HTTPS uses). For example, ProtonVPN supports &#34;stealth&#34; connections, which you can enable in Settings -  Connection -  Protocol -  Stealth. ]]&gt;</description>
      <content:encoded><![CDATA[<p>The default ports used by Wireguard and OpenVPN might be blocked by the network admin.</p>

<p>Solution: See if your VPN provider supports running OpenVPN over port 443 (the same port HTTPS uses). For example, ProtonVPN supports <a href="https://protonvpn.com/blog/stealth-vpn-protocol">“stealth” connections</a>, which you can enable in Settings –&gt; Connection –&gt; Protocol –&gt; Stealth.</p>
]]></content:encoded>
      <guid>https://blog.gary.gg/is-your-vpn-connected-but-not-working-on-a-public-wifi</guid>
      <pubDate>Thu, 03 Jul 2025 02:30:21 +0000</pubDate>
    </item>
    <item>
      <title>Visualizing Solidity Test Coverage</title>
      <link>https://blog.gary.gg/visualizing-solidity-test-coverage?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;An easy way to visualize your test coverage on foundry projects is by using the VSCode extension Coverage Gutter.&#xA;&#xA;After you&#39;ve installed the extension, you can generate a lcov report using the command:&#xA;&#xA;forge coverage --report lcov&#xA;&#xA;This will create a lcov.info file that will be read by the Coverage Gutter extension.&#xA;&#xA;To enable the coverage visualization, you can click on the Watch button on the bottom left corner of VSCode.&#xA;&#xA;Once you&#39;ve enabled the Watch mode, in its place you&#39;ll start seeing coverage info for the file you have open.&#xA;&#xA;You can also use the keyboard shortcut ⇧⌘P (Shift + Command + P) to pull up the Command Palette on VS Code, and search for Display Coverage. Or you can use the keyboard shortcuts ⇧⌘7(Shift + Command + 7) to display and  ⇧⌘7(Shift + Command + 0) to hide the visualization.&#xA;&#xA;Functions that are covered by tests will have a green bar next to them, and the ones that aren&#39;t covered by any tests will have a red bar.&#xA;&#xA;After you&#39;ve added tests, in order for the extension to reflect the changes, you need to re-create the lcov.info file by using the same command above:&#xA;&#xA;forge coverage --report lcov&#xA;&#xA;Only then, the lines you&#39;ve written tests for will be marked as covered.&#xA;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://youtu.be/XaoNoZdLRVE" title="Link to video"><img src="https://i.snap.as/n19OIwaD.png" alt=""/></a></p>

<p>An easy way to visualize your test coverage on foundry projects is by using the VSCode extension <a href="https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters">Coverage Gutter</a>.</p>

<p><img src="https://i.snap.as/FTYZx9zX.png" alt=""/></p>

<p>After you&#39;ve installed the extension, you can generate a lcov report using the command:</p>

<pre><code class="language-sh">forge coverage --report lcov
</code></pre>

<p>This will create a <code>lcov.info</code> file that will be read by the Coverage Gutter extension.</p>

<p>To enable the coverage visualization, you can click on the Watch button on the bottom left corner of VSCode.</p>

<p><img src="https://i.snap.as/76fss5dm.png" alt=""/></p>

<p>Once you&#39;ve enabled the Watch mode, in its place you&#39;ll start seeing coverage info for the file you have open.</p>

<p><img src="https://i.snap.as/p0URDc8w.png" alt=""/></p>

<p>You can also use the keyboard shortcut <strong>⇧⌘P</strong> (Shift + Command + P) to pull up the Command Palette on VS Code, and search for Display Coverage. Or you can use the keyboard shortcuts <strong>⇧⌘7</strong>(Shift + Command + 7) to display and  <strong>⇧⌘7</strong>(Shift + Command + 0) to hide the visualization.</p>

<p><img src="https://i.snap.as/5X8Ojh1B.png" alt=""/></p>

<p>Functions that are covered by tests will have a green bar next to them, and the ones that aren&#39;t covered by any tests will have a red bar.</p>

<p><img src="https://i.snap.as/HfsOKkOI.png" alt=""/></p>

<p>After you&#39;ve added tests, in order for the extension to reflect the changes, you <strong>need to re-create the <code>lcov.info</code> file</strong> by using the same command above:</p>

<pre><code class="language-sh">forge coverage --report lcov
</code></pre>

<p>Only then, the lines you&#39;ve written tests for will be marked as covered.</p>

<p><img src="https://i.snap.as/NAsPV6uc.png" alt=""/></p>
]]></content:encoded>
      <guid>https://blog.gary.gg/visualizing-solidity-test-coverage</guid>
      <pubDate>Wed, 12 Feb 2025 23:09:23 +0000</pubDate>
    </item>
    <item>
      <title>PGP</title>
      <link>https://blog.gary.gg/pgp?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----&#xA;&#xA;mDMEZ+KfWhYJKwYBBAHaRw8BAQdAnvwafnga88iMkDLdLTHzrduGaJbadD8CdG8q&#xA;EvHq/Ny0EmdhcnkuZ2hheXJhdEBwbS5tZYiWBBMWCAA+FiEEBMx0KkXWrYZP7Vak&#xA;eBPgIzXvywMFAmfin1oCGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA&#xA;CgkQeBPgIzXvywN7fAEAqy3JU1Fgu/m2r86tapbuNHxK/BjDh/RTkSB7x/oSNdAA&#xA;/17MQRn2Zax4LplPunZYeSUv8QsIxxGCAIoJOrARKwoDuDgEZ+KfWhIKKwYBBAGX&#xA;VQEFAQEHQGk2Lx6jlW1+PgA6+Ea2+CEBTAdT53RgUdNkws1UaNB5AwEIB4h4BBgW&#xA;CAAgFiEEBMx0KkXWrYZP7VakeBPgIzXvywMFAmfin1oCGwwACgkQeBPgIzXvywOi&#xA;FwEA4WkQQTBAmNyK8Qph6e7aKfVOEEbyY9epgLNy+nqdCJIA/iG0kjUF+hRDTStU&#xA;TTT8nBSAewp4eYvukSWZ8pXlod4F&#xA;=oNhV&#xA;-----END PGP PUBLIC KEY BLOCK-----&#xA;&#xA;`]]&gt;</description>
      <content:encoded><![CDATA[<pre><code>-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEZ+KfWhYJKwYBBAHaRw8BAQdAnvwafnga88iMkDLdLTHzrduGaJbadD8CdG8q
EvHq/Ny0EmdhcnkuZ2hheXJhdEBwbS5tZYiWBBMWCAA+FiEEBMx0KkXWrYZP7Vak
eBPgIzXvywMFAmfin1oCGwMFCQPCZwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AA
CgkQeBPgIzXvywN7fAEAqy3JU1Fgu/m2r86tapbuNHxK/BjDh/RTkSB7x/oSNdAA
/17MQRn2Zax4LplPunZYeSUv8QsIxxGCAIoJOrARKwoDuDgEZ+KfWhIKKwYBBAGX
VQEFAQEHQGk2Lx6jlW1+PgA6+Ea2+CEBTAdT53RgUdNkws1UaNB5AwEIB4h4BBgW
CAAgFiEEBMx0KkXWrYZP7VakeBPgIzXvywMFAmfin1oCGwwACgkQeBPgIzXvywOi
FwEA4WkQQTBAmNyK8Qph6e7aKfVOEEbyY9epgLNy+nqdCJIA/iG0kjUF+hRDTStU
TTT8nBSAewp4eYvukSWZ8pXlod4F
=oNhV
-----END PGP PUBLIC KEY BLOCK-----

</code></pre>
]]></content:encoded>
      <guid>https://blog.gary.gg/pgp</guid>
      <pubDate>Sun, 28 Nov 2021 06:04:27 +0000</pubDate>
    </item>
  </channel>
</rss>