<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ian&#39;s Blog on Ian&#39;s blog</title>
    <link>/</link>
    <description>Recent content in Ian&#39;s Blog on Ian&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 26 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Notes on Web Performance</title>
      <link>/blog/15-webperf/</link>
      <pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>/blog/15-webperf/</guid>
      <description>There are 2 main things that affect the performance of network-based applications.
Bandwidth Latency In an ideal world, the latency is low and bandwidth is high.
Bandwidth problems become more important when the things being sent over the network are large files ie: &amp;gt;1MB. Latency issues become more important when the things being sent become smaller/require realtime feedback ie: &amp;lt; 100kb.
Reducing page size &amp;amp; The time to first byte can be critical if you want to target users on high latency, low bandwidth environments.</description>
    </item>
    
    <item>
      <title>How to prevent CLS in Hugo</title>
      <link>/blog/14-cls-hugo/</link>
      <pubDate>Mon, 04 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>/blog/14-cls-hugo/</guid>
      <description>Lee Robinson @leeerob · Apr 13 2022 &#34;What is Cumulative Layout Shift (CLS) and why does it matter?&#34; This is probably my favorite example.
MidlineShift @detroit_bound · Mar 27 2022 @ampol_moment 3:13 AM · Apr 13, 2022 1.1K Link to Tweet Preventing CLS requires setting explicit width and height attributes on all pictures. Here are the steps I took to optimize the images in hugo using the render hooks feature.</description>
    </item>
    
    <item>
      <title>Parse JSON with comments in Go</title>
      <link>/blog/13-json-golang/</link>
      <pubDate>Mon, 23 May 2022 00:00:00 +0000</pubDate>
      
      <guid>/blog/13-json-golang/</guid>
      <description>The Go standard library can&amp;rsquo;t parse json files containing comments or trailing commas. Doing so gives you the following error.
invalid character &amp;#39;/&amp;#39; looking for beginning of object key string To prevent this error, you need to sanitize the json using the hujson package from Tailscale.
Here&amp;rsquo;s an example on how to use it, also available in the Go playground.
1package main 2 3import ( 4	&amp;#34;encoding/json&amp;#34; 5	&amp;#34;fmt&amp;#34; 6 7	&amp;#34;github.</description>
    </item>
    
    <item>
      <title>Static twitter embed</title>
      <link>/blog/12-tweet-embed/</link>
      <pubDate>Wed, 20 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>/blog/12-tweet-embed/</guid>
      <description>The official tweet embed provides you with a &amp;lt;blockquote&amp;gt; element containing the tweet text and a third party script to replace it with an &amp;lt;iframe&amp;gt; containing a better UI.
Here&amp;rsquo;s an example of the code twitter provides.
&amp;lt;!-- Markup--&amp;gt; &amp;lt;blockquote class=&amp;#34;twitter-tweet&amp;#34;&amp;gt; &amp;lt;p&amp;gt;just setting up my twttr&amp;lt;/p&amp;gt; — jack⚡️ (@jack) March 21, 2006 &amp;lt;/blockquote&amp;gt; &amp;lt;!--Script to enhance markup--&amp;gt; &amp;lt;script src=&amp;#34;https://platform.twitter.com/widgets.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt; The problem This method of embedding tweets has some disadvantages:
Causes a lot of layout shifting Difficult to style Does not preserve deleted tweets The solution A good solution would be to get the tweet data from the API then use plain HTML &amp;amp; CSS to display it, which gives you the best lighthouse scores.</description>
    </item>
    
    <item>
      <title>New Look</title>
      <link>/blog/meta-update/</link>
      <pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate>
      
      <guid>/blog/meta-update/</guid>
      <description>I decided to make a new theme from scratch. This helped me improve my frontend skills a little. The theme isn&amp;rsquo;t quite yet complete, but it&amp;rsquo;s good enough.
For the static site generator, I chose Hugo because of its speed &amp;amp; simplicity. The tradeoff is that feature-wise, it&amp;rsquo;s limited. Although it doesn&amp;rsquo;t matter that much for a blog.
I also transferred my domain from NameCheap to Cloudflare. It made sense since I was already using Cloudflare for DNS.</description>
    </item>
    
    <item>
      <title>Stop chrome from pausing when switching desktops</title>
      <link>/chrome-pauses/</link>
      <pubDate>Sun, 04 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>/chrome-pauses/</guid>
      <description>Sometimes I switch desktop environments because, why not? Every time I switch between gnome and kde, I face the same issue. Chrome pauses.
When chrome displays the paused sign, it’s an issue with cookies. In this case, the cookies are encrypted, and chrome can’t decrypt them because it’s looking for the decryption key in the wrong keyring.
Too many keyrings A keyring is a lot like a password manager. The only difference is that keyrings are meant for programs, and password managers are meant for humans.</description>
    </item>
    
    <item>
      <title>Some youtube-dl aliases</title>
      <link>/blog/08-ytdl/</link>
      <pubDate>Fri, 26 Mar 2021 08:00:00 +0300</pubDate>
      
      <guid>/blog/08-ytdl/</guid>
      <description>Setup some variables
# Default Command CMD=&amp;#34;youtube-dl&amp;#34; # Use yt-dlp if avaiable command -v yt-dlp &amp;gt;/dev/null &amp;amp;&amp;amp; CMD=&amp;#34;yt-dlp&amp;#34; ARGS=&amp;#34;&amp;#34; # Quality Options Q_HD=&amp;#34;720&amp;#34; Q_FHD=&amp;#34;1080&amp;#34; Q_DEFAULT=&amp;#34;$Q_HD&amp;#34; Default command Saves video to ~/Videos/Channel/video.mp4 without video Id.
# Video ydl() { &amp;#34;$CMD&amp;#34; &amp;#34;$ARGS&amp;#34; \ --no-playlist \ --embed-subs \ --format &amp;#34;[height&amp;lt;=$Q_DEFAULT]&amp;#34; \ --output &amp;#34;$HOME/Videos/%(uploader)s/%(title)s.%(ext)s&amp;#34; &amp;#34;$@&amp;#34; } 720p Video Single video No playlist Saves to ~/Videos/Uploader/Title.mp4 # Video (720p) yhd() { &amp;#34;$CMD&amp;#34; &amp;#34;$ARGS&amp;#34; \ --no-playlist \ --embed-subs \ --format &amp;#34;[height&amp;lt;=$Q_HD]&amp;#34; \ --output &amp;#34;$HOME/Videos/%(uploader)s/%(title)s.</description>
    </item>
    
    <item>
      <title>Reproducible Builds</title>
      <link>/blog/reproducible-builds/</link>
      <pubDate>Wed, 13 Jan 2021 11:30:00 +0300</pubDate>
      
      <guid>/blog/reproducible-builds/</guid>
      <description>A reproducible build is one that produces the same byte for byte output when given the same input. These builds aren&amp;rsquo;t common. Mostly because of compiler defaults.
The things that can make a build non-reproducible are:
Timestamps Unique IDs Build paths etc Why they matter Reproducible builds have inherent security. They allow us to verify the source code a binary comes from. This makes detecting changes or tampering straightforward.
Compile the program on at least two different systems Compare the checksums.</description>
    </item>
    
    <item>
      <title>Automating updates on Debian</title>
      <link>/blog/debian-updates/</link>
      <pubDate>Wed, 13 Jan 2021 00:00:00 +0000</pubDate>
      
      <guid>/blog/debian-updates/</guid>
      <description>Debian is a good operating system. Forming the basis for Ubuntu, Kali Linux and many others it is one of the most stable operating systems out there.
In this post, I will go over how to configure automatic security updates on Debian, which are not enabled by default.
Introduction Debian uses the apt package manager. A system update is done with the following commands:
$ apt update $ apt upgrade The importance of security updates Security updates contain fixes for security vulnerabilities.</description>
    </item>
    
    <item>
      <title>Building a Pentest lab with Docker</title>
      <link>/docker-lab/</link>
      <pubDate>Sat, 13 Jun 2020 14:30:00 +0300</pubDate>
      
      <guid>/docker-lab/</guid>
      <description>What is Docker? Docker is a container platform that is similar to a Hypervisor like Virtualbox. Containers use less storage and RAM and are portable.
Docker can run on:
Linux Windows Mac OS In this article I will go over how to set up a penetration testing lab entirely in docker
It will consist of two types of containers.
Attacker Machine Target Machines Installation on Linux The Docker engine is in the official repositories of most Linux distributions.</description>
    </item>
    
    <item>
      <title>Running my website on $1 monthly</title>
      <link>/blog/site-cost/</link>
      <pubDate>Tue, 19 May 2020 14:30:00 +0300</pubDate>
      
      <guid>/blog/site-cost/</guid>
      <description>Updated version
This website costs me almost nothing to run. I take advantage of a few free services. This site is fast and looks okay. Here&amp;rsquo;s what I use.
1. DNS : Cloudflare DNS is what enables the translation of website names to IP addresses. I use Cloudflare to manage the DNS of my domain at ianmuchina.com. I can have unlimited subdomains.
2. CDN: Cloudflare Cloudflare have over 200 datacenters worldwide meant for just this purpose.</description>
    </item>
    
    <item>
      <title>Why SSH certificates are awesome</title>
      <link>/blog/ssh-certificates/</link>
      <pubDate>Fri, 15 May 2020 11:30:00 +0300</pubDate>
      
      <guid>/blog/ssh-certificates/</guid>
      <description>Big Tech companies such as Facebook, Google, Netflix, Uber with thousands of users and servers use SSH Certificates to manage access. This post will go over why that&amp;rsquo;s the case
What is SSH? SSH is a protocol used by system administrators and developers to communicate securely with a server. Authentication can be done with SSH keys or passwords.
Passwords and why they’re not recommended We all know passwords and have used them at some point.</description>
    </item>
    
    <item>
      <title>Isolating vocals from songs using Spleeter</title>
      <link>/blog/Spleeter/</link>
      <pubDate>Sun, 08 Mar 2020 10:00:00 +0300</pubDate>
      
      <guid>/blog/Spleeter/</guid>
      <description>Isolating vocals from a song in the past has had a high barrier to entry. It is now an easy thing to do . In this article, I will go over the various methods.
1. The browser method This is done entirely online. Open a browser, go to a upload a song and get vocal and instrumental stems. This is a simple method which relies on third party websites to process the music.</description>
    </item>
    
    <item>
      <title>Tracking documents with Canarytokens</title>
      <link>/blog/canarytokens/</link>
      <pubDate>Sat, 15 Feb 2020 11:30:00 +0300</pubDate>
      
      <guid>/blog/canarytokens/</guid>
      <description>The ability to track Documents might come in handy in some situations. To do this we use Canarytokens. These are files and links that trigger email alerts anytime anyone accesses them.
In this article, I will go over how to create and deploy these tokens.
Requirements Email Address Target With An Internet Connection Steps 1. Creating the file Go to canarytokens.org Choose either a Word Document or an Adobe PDF token Enter an email address where alerts will be sent Choose an appropriate reminder eg: &amp;ldquo;Opened&amp;rdquo; Click on &amp;ldquo;Create My Canary Token&amp;rdquo; Download the token 2.</description>
    </item>
    
  </channel>
</rss>
