<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Notes from the Burrow]]></title><description><![CDATA[A personal life blog, includes writing about code, food, and bikes.]]></description><link>https://blog.usmanity.com/</link><image><url>https://blog.usmanity.com/favicon.png</url><title>Notes from the Burrow</title><link>https://blog.usmanity.com/</link></image><generator>Ghost 5.79</generator><lastBuildDate>Tue, 20 Feb 2024 08:05:32 GMT</lastBuildDate><atom:link href="https://blog.usmanity.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Subtracting projects]]></title><description><![CDATA[Lately, I've been exploring the idea of simplifying my life by subtracting rather than adding. In this post, I'll focus on subtracting projects I've started over the past years.]]></description><link>https://blog.usmanity.com/subtracting-projects/</link><guid isPermaLink="false">65d3a4271c54a200014240ec</guid><category><![CDATA[projects]]></category><category><![CDATA[subtracting]]></category><category><![CDATA[code]]></category><category><![CDATA[internet]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Mon, 19 Feb 2024 19:06:05 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1508773068480-2e2df9e1cc63?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE4fHxsZXNzfGVufDB8fHx8MTcwODM2OTMzMXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1508773068480-2e2df9e1cc63?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE4fHxsZXNzfGVufDB8fHx8MTcwODM2OTMzMXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Subtracting projects"><p>Lately, I&apos;ve been exploring the idea of simplifying my life by subtracting rather than adding. This journey began with the book <em>Please Unsubscribe, Thanks!</em> and was further inspired by <em>Subtract</em> by <a href="https://www.leidyklotz.com/?ref=blog.usmanity.com">Leidy Klotz</a>. In this post, I&apos;ll focus on subtracting projects I&apos;ve started over the past years, in a future post, I&apos;ll write about financial, physical, and other areas of my life. </p><p>This is a good time to share that I started working full time again. I joined as a web developer at a company called <a href="https://numeralhq.com/?ref=blog.usmanity.com">Numeral</a>. They&apos;re a small startup focusing on making taxes easier for online stores. I&apos;m really enjoying working with the people and the tech stack. Because of this new change in my daily life, how I was structuring my days and time overall has changed a lot.</p><p>Previously, I would start projects that popped into my head. I would work on them for a while to see if they had potential. If they did, I&apos;d continue; if not, I&apos;d move on, despite feeling disappointed about the time invested.</p><p>The issue was and the reason I&apos;m posting this is that they all sort of lingered or more like languished in the background and in the back of my mind while I worked on other things. This has been a sour feeling as it leads me to hoard unrelated projects and I don&apos;t want to start new ones because there&apos;s so much I would like to get done on my previous projects.</p><p>It&apos;s a Monday and I have the day off so I decided to use this time to help my mental state my clearing out some of these old and unused projects. It&apos;s going to be mostly tough for me but I think making a semi-public post about it would push me to really get rid of them.</p><p>Let&apos;s start with the oldest projects first:</p><ol><li>Bookends. My forever neglected project, this is like my precious baby that I never want to get rid of but I also never pay enough attention to to make any progress on it. I think it&apos;s time now, after almost 6 years to give this up. The domain was registered in 2018 and ever since then, I&apos;ve worked on many versions of this project. I&apos;ve learned a lot of web development skills especially with node.js using this and most recently learned next.js with this project too. For now, I don&apos;t see it ever taking priority and I think it&apos;s best I say goodbye to this one. An alternative to Bookends I&apos;ve found and have loved using so far is <a href="https://www.italictype.com/?ref=blog.usmanity.com">Italic Type</a>.</li><li>Treat Samples: this is a pretty cool domain I got as a dot com but I think it&apos;s best I don&apos;t spend more time on this one. My initial approach with this one was that I build an ecommerce store that focused on putting together treat samples for pets. I was trying to scratch an itch I had and I thought others would too which is that there are just so many treat options out there but no real way to sample them. A pack of treats can be anywhere from $10-20 which is pretty expensive if your pet ends up not liking it. The way I wanted to approach this was by offering a $10-15 sample pack with almost a dozen treats in them. The issue was that I didn&apos;t want to deal with all the treat packing and putting together packs. This one is an easy one to let go of because I wasn&apos;t too connected to it.</li><li>Wildwood Pixels: while I was on my sabbatical, I wanted to test my appetite for running a web development agency. The very short summary of this is that building your own agency from scratch, with no clients and no sales skills is really tough. I tried to get a few clients and work on some projects but nothing amounted to real paying work so this one felt very short-lived and I got very uninterested because it really felt like a chicken and egg problem, I didn&apos;t have projects I can show off so I couldn&apos;t convince anyone to let me build stuff for them.</li><li>NextJig: since about October, I have been attempting to build a place for contractors and homeowners. The biggest differentiator for this project compared to what exists out there is surfacing information that is already required for certified contractors e.g. licenses. I made pretty good progress on this, I also had some real people interested in using it but the homeowners&apos; side of this was way tougher to convince someone to give this a chance. With this project, I learned a lot more about Next.js and building a working app using all the other tools in the ecosystem. I loved building this project but for now, I am subtracting it from my life to make time for other things.</li></ol><p>These are the four main projects I&apos;m leaving behind and opening up my mind to new things along with focusing more on work during the week. In January, I was learning iOS pretty seriously and I think my new next few projects will be focused on building iOS apps for fun, and maybe for profit in the far future.</p><p>Subtracting these projects from my life is a bittersweet process, but it&apos;s a necessary step towards focusing on what truly matters and embracing new opportunities.</p>]]></content:encoded></item><item><title><![CDATA[Cancel vs subscribe 2024]]></title><description><![CDATA[<p>For the past few years, I&apos;ve been doing this thing where at the beginning of every year, I take a hard look at my subscriptions and decide if I should consider canceling or continuing to subscribe, and in some rare case, start subscribing to new services. I want</p>]]></description><link>https://blog.usmanity.com/cancel-vs-subscribe-2024/</link><guid isPermaLink="false">65c913524f09b10001155567</guid><category><![CDATA[finances]]></category><category><![CDATA[tracking]]></category><category><![CDATA[internet]]></category><category><![CDATA[services]]></category><category><![CDATA[github]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Sun, 11 Feb 2024 19:15:09 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1504309092620-4d0ec726efa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDExfHxob3QlMjBhbmQlMjBjb2xkfGVufDB8fHx8MTcwNzY3ODg0MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1504309092620-4d0ec726efa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDExfHxob3QlMjBhbmQlMjBjb2xkfGVufDB8fHx8MTcwNzY3ODg0MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Cancel vs subscribe 2024"><p>For the past few years, I&apos;ve been doing this thing where at the beginning of every year, I take a hard look at my subscriptions and decide if I should consider canceling or continuing to subscribe, and in some rare case, start subscribing to new services. I want to share my list below and figure out what the total is and maybe this will give you inspiration to take a look at your services too!</p><h2 id="subscribing">Subscribing</h2><p>First let&apos;s look at new services I&apos;m adding to the list this year:</p><ul><li><a href="https://obsidian.md/?ref=blog.usmanity.com">Obsidian</a> Sync, this is $10 / month. I have been using Obsidian for over a year but recently I&apos;ve <em>really</em> used it! I use it for writing posts like these, for organizing work, for jotting down quick notes. It&apos;s becoming a full replacement for all my notes apps.</li><li><a href="https://kagi.com/?ref=blog.usmanity.com">Kagi</a>, $10 / month. Search should be good, Kagi makes search great. No ads, no SEO bullshit, and I love the customization options.</li><li><a href="https://macrofactorapp.com/?ref=blog.usmanity.com">MacroFactors</a>, $80 / year. I use this app for tracking food. This has been helping me gain my weight back. It&apos;s also one of the best UX when it comes to tracking food.<br>I&apos;m adding about $27 / month of services to my list of all services (see below).</li></ul><h2 id="canceling">Canceling</h2><ul><li>The first service to get the axe this year has been Youtube Premium. I was using it a lot but we were paying the $30 / month price that is charged if you pay through the App Store. It&apos;s plain malicious that they charge 30% more just because you go through the app store, blame Apple, blame Google, it doesn&apos;t matter at this point. I was able to get rid of this by joining my brother&apos;s family plan (I added him to my Spotify plan).</li><li>SimpliSafe. I was never using their cloud features that cost $10 / month.</li><li>Hulu. This is an expensive service that I was only using once in awhile, at $17.99 a month it&apos;s an easy one to let go.<br>In total, I&apos;m canceling about $58 / month worth of services this year. This is exactly double of what I&apos;m adding this year so I think this was a good list of services to get rid of.</li></ul><h1 id="all-services">All services</h1><table>
<thead>
<tr>
<th>Service</th>
<th>Monthly Cost</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Spotify</td>
<td>16.99</td>
<td>I actively use this, has 5 total members. $3.40 per person is a great deal.</td>
</tr>
<tr>
<td>ChatGPT Plus</td>
<td>20</td>
<td>Considering canceling this one at some point this year</td>
</tr>
<tr>
<td>Ghost Hosting</td>
<td>20</td>
<td>Two blogs on here, this one and KeyChronicles.</td>
</tr>
<tr>
<td>Kagi</td>
<td>10</td>
<td>Search engine on all my devices</td>
</tr>
<tr>
<td>Obsidian Sync</td>
<td>10</td>
<td>Notes for everything in my life.</td>
</tr>
<tr>
<td>Peloton</td>
<td>60</td>
<td>For exercising, definitely not worth $60, I can tell you that. This would be more palatable at $25-30 / month.</td>
</tr>
<tr>
<td>Tonal</td>
<td>60</td>
<td>Another exercising service, I think it&apos;s worth $60.</td>
</tr>
<tr>
<td>Apple TV+</td>
<td>7.99</td>
<td>There are a few shows that I watch on here but if the price jumps once, I&apos;m canceling it.</td>
</tr>
<tr>
<td>Netflix</td>
<td>22.99</td>
<td>Probably the last price hike I will live through with this subscription, when the next one happens, I&apos;m gone.</td>
</tr>
<tr>
<td>Disney+</td>
<td>13.99</td>
<td>I get credit through my Amex BCP for $7/mo so it&apos;s really 6.99 but let&apos;s count the full price.</td>
</tr>
<tr>
<td>Github</td>
<td>4</td>
<td>Probably the best bang for your buck in terms of features available and how much it costs. I use Github almost every single day and I get a lot of work done using Github too.</td>
</tr>
<tr>
<td>Tesla Premium</td>
<td>10</td>
<td>I miss the days when cars didn&apos;t need a subscription to play radio or use basic services. This is a rip off and just one step away from extortion.</td>
</tr>
<tr>
<td>Fastmail</td>
<td>3.89</td>
<td>Just like search, email should be ad-free and surveillance free. I&apos;ve been happily using Fastmail for almost 5 years now.</td>
</tr>
<tr>
<td>PIA VPN</td>
<td>2.03</td>
<td>When all else fails, get a VPN. At almost 2 bucks a month, it&apos;s a no-brainer to have and use.</td>
</tr>
<tr>
<td>MacroFactors</td>
<td>6.66</td>
<td>For tracking food and nutrient intake.</td>
</tr>
<tr>
<td>Total</td>
<td>$268.54</td>
<td>per month</td>
</tr>
</tbody>
</table>
<p>At almost $270 / month, this list is pretty pricey. The two exercise services and the extremely expensive Netflix are under my radar for this upcoming year. Let&apos;s hope it doesn&apos;t get much worse next year. </p>]]></content:encoded></item><item><title><![CDATA[Things I read and liked in January 2024]]></title><description><![CDATA[<p>I&apos;ve been busy over the last week so I haven&apos;t been able to write this post but I wanted to share my favorite things I discovered over the last month, and a few things I just want to highlight. </p><h1 id="things-i-read">Things I read</h1><p></p><p>Something I think about</p>]]></description><link>https://blog.usmanity.com/things-i-read-2024-january/</link><guid isPermaLink="false">65c5aae80e01dc000131fd3f</guid><category><![CDATA[apps]]></category><category><![CDATA[things]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Fri, 09 Feb 2024 09:00:25 GMT</pubDate><content:encoded><![CDATA[<p>I&apos;ve been busy over the last week so I haven&apos;t been able to write this post but I wanted to share my favorite things I discovered over the last month, and a few things I just want to highlight. </p><h1 id="things-i-read">Things I read</h1><p></p><p>Something I think about but I thought it was just me.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.nplusonemag.com/issue-44/the-intellectual-situation/why-is-everything-so-ugly/?ref=blog.usmanity.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Why Is Everything So Ugly? | The Editors</div><div class="kg-bookmark-description">Dodging huge grilles we walk on, pulled by ugliness toward a gentrified retail strip. Here the violence of the new ugliness comes more fully into focus. The ruling class seized cities and chose to turn them into&#x202F;.&#x202F;.&#x202F;. this?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.nplusonemag.com/wp-content/uploads/2016/06/cropped-n1_web_favicon-270x270.png" alt><span class="kg-bookmark-author">n+1</span><span class="kg-bookmark-publisher">Subscribe</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.nplusonemag.com/wp-content/uploads/2022/11/20221201_152459-1280x960.jpg" alt></div></a></figure><p></p><p>Dan Luu talks about how a favorite tool of a writer/creator online doesn&apos;t translate to what other people and especially the masses like to use. Twitter has a ton of lurkers but writing on twitter is a pain.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://danluu.com/why-video/?ref=blog.usmanity.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Why do people post on [bad platform] instead of [good platform]?</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="data:;base64,=" alt></div></div></a></figure><p></p><p>I thought this was gonna be another corporate fuck up but no:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.scientificamerican.com/article/why-are-alaskas-rivers-turning-orange/?ref=blog.usmanity.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Why Are Alaska&#x2019;s Rivers Turning Orange?</div><div class="kg-bookmark-description">Streams in Alaska are turning orange with iron and sulfuric acid. Scientists are trying to figure out why</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.scientificamerican.com/account/sciam-favicon.ico" alt><span class="kg-bookmark-author">Scientific American</span><span class="kg-bookmark-publisher">Alec Luhn</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://static.scientificamerican.com/sciam/cache/file/92A46E02-E622-4229-8FF085A42D4FEBA2_source.jpg?w=1200" alt></div></a></figure><p></p><p>This is a hard read but I think it&apos;s important to see someone take a stand:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.paulbiggar.com/i-cant-sleep/?ref=blog.usmanity.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">I can&#x2019;t sleep</div><div class="kg-bookmark-description">I can&#x2019;t sleep. I&#x2019;m lying in bed every night, and images of Gaza are running through my head. Fathers holding their babies, dead, caked in dust. Bombs dropped on homes [1], on hospitals [2], on schools [3]. Tens of thousands of dead [4] in indiscriminate bombings [5]. Children crying, pulling</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.paulbiggar.com/content/images/size/w256h256/2023/01/bio-1.jpeg" alt><span class="kg-bookmark-author">Paul Biggar</span><span class="kg-bookmark-publisher">Paul Biggar</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.paulbiggar.com/content/images/size/w1200/2023/12/gettyimages-1752139716_custom-3689b350517c649aa9ba13127900f3538ab17c92-s2600-c85-1.webp" alt></div></a></figure><p></p><h1 id="my-favorite-app-in-january">My favorite app in January</h1><p>This post was mostly written in Obsidian, I&apos;ve been using it a lot over the last year and I wanted to share it. I really like the app for stripping away a lot of the UI and making writing the focus. There&apos;s a command palette that pops up with &#x2318; + P and a file opener that pops up with &#x2318; + O. This app is slowly moving me away from Notion.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://obsidian.md/?ref=blog.usmanity.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Obsidian - Sharpen your thinking</div><div class="kg-bookmark-description">Obsidian is the private and flexible note&#x2011;taking app that adapts to the way you think.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://obsidian.md/favicon.svg" alt><span class="kg-bookmark-author">Obsidian</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://obsidian.md/images/banner.png" alt></div></a></figure><h1 id="a-nice-font">A nice font</h1><p>I found Gambarino at some point and bookmarked it, I put together the following graphic to show how nice this font is. Unfortunately, only one weight if available for free. <a href="https://www.fontshare.com/fonts/gambarino?ref=blog.usmanity.com" rel="noreferrer">Gambarino on FontShare &#x2192;</a>. </p><figure class="kg-card kg-image-card"><img src="https://blog.usmanity.com/content/images/2024/02/Gambarino.png" class="kg-image" alt loading="lazy" width="2000" height="2000" srcset="https://blog.usmanity.com/content/images/size/w600/2024/02/Gambarino.png 600w, https://blog.usmanity.com/content/images/size/w1000/2024/02/Gambarino.png 1000w, https://blog.usmanity.com/content/images/size/w1600/2024/02/Gambarino.png 1600w, https://blog.usmanity.com/content/images/2024/02/Gambarino.png 2112w" sizes="(min-width: 720px) 720px"></figure><p></p><p>I&apos;ll collect more things to share next month. </p>]]></content:encoded></item><item><title><![CDATA[Snow in Portland, 2024]]></title><description><![CDATA[<p>It&apos;s our annual snowstorm in Portland, a week where the whole city just shuts down and braces for the snow. We got snow on Saturday (Jan 13th) and today&apos;s Thursday and there&apos;s still snow on the ground. </p><p>Here&apos;s the temperatures for the</p>]]></description><link>https://blog.usmanity.com/snow-in-portland-2024/</link><guid isPermaLink="false">65a9ae6bf29ece0001d016e3</guid><category><![CDATA[portland]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Fri, 19 Jan 2024 00:05:31 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2024/01/Screenshot-2024-01-18-at-4.02.12-PM-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2024/01/Screenshot-2024-01-18-at-4.02.12-PM-1.png" alt="Snow in Portland, 2024"><p>It&apos;s our annual snowstorm in Portland, a week where the whole city just shuts down and braces for the snow. We got snow on Saturday (Jan 13th) and today&apos;s Thursday and there&apos;s still snow on the ground. </p><p>Here&apos;s the temperatures for the past few days: </p><figure class="kg-card kg-image-card"><img src="https://blog.usmanity.com/content/images/2024/01/image.png" class="kg-image" alt="Snow in Portland, 2024" loading="lazy" width="790" height="414" srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/image.png 600w, https://blog.usmanity.com/content/images/2024/01/image.png 790w" sizes="(min-width: 720px) 720px"></figure><p>The days after the snow, we stayed under freezing temperatures which made things unbearably cold and on Tuesday, Jan 16th, we got some hail and rain which froze overnight. That frozen rain created a layer of ice on top of the snow which is pretty much the slippery thing I&apos;ve ever experienced! </p><p>Below&apos;s a video of me trying to walk in those conditions:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/66gPOovqArM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Walking on icy sidewalk in Portland, Oregon"></iframe></figure><p>This year made me realize I need the following things for the next year:</p><ul><li>Some salt to put on our stairs and other high traffic areas around the house, like the steps on the deck in the back.</li><li>Get something with traction for my shoes</li><li>Have a snow shovel</li></ul>]]></content:encoded></item><item><title><![CDATA[My unsubscribe rules for marketing emails]]></title><description><![CDATA[<p>When I signed up for Fastmail a few years ago, I decided to keep my inbox as clean as possible. Not just zeroed out but also never getting any emails that were not important or useful to me. The majority of these emails were marketing emails and newsletters.</p><p>Some marketing</p>]]></description><link>https://blog.usmanity.com/my-unsubscribe-rules-for-marketing-emails/</link><guid isPermaLink="false">65a8506cf29ece0001d016a0</guid><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Wed, 17 Jan 2024 22:14:42 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1705112587579-e58ba5154e85?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDU0fHx8fHx8Mnx8MTcwNTUyOTUzOXw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1705112587579-e58ba5154e85?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8YWxsfDU0fHx8fHx8Mnx8MTcwNTUyOTUzOXw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="My unsubscribe rules for marketing emails"><p>When I signed up for Fastmail a few years ago, I decided to keep my inbox as clean as possible. Not just zeroed out but also never getting any emails that were not important or useful to me. The majority of these emails were marketing emails and newsletters.</p><p>Some marketing emails, I care about, for example I love Tailwind and I&apos;m excited to see updates from the team so I am interested in their emails. But some make their way into my inbox without my knowledge, a lot of these are related to places I shop.</p><p>Most of these emails, I just delete or ignore but every once in awhile, I&apos;ll run into an email that just bothers me so much I have to unsubscribe.</p><p>For instance, I got an email from MyFitnessPal that just had images of food with text like &quot;get energy that lasts&quot; or a person drinking water with the text &quot;lose weight&quot;. Clearly this email is not for me, it&apos;s for a marketing list, I joined MyFitnessPal with the goal of <em>gaining</em> weight <strong>and</strong> I don&apos;t even use the app anymore.</p><p>So for emails like this, I first look for the &quot;unsubscribe&quot; link. Oftentimes, clicking the link does it. But once in awhile, some person has designed the unsubscribe flow in a very dumb way, it asks for the email again and when this happens, I go back to the email and specifically mark it as spam. This usually doesn&apos;t do much but I hope that at some point, these emails will not show up in my inbox.</p><p>So to simplify the rules:</p><ol><li>If the email contains an unsubscribe link, I click it and then that&apos;s it.</li><li>If the email&apos;s unsubscribe link doesn&apos;t automatically unsubscribe me, I mark the email itself as spam and then go through the unsubscribe flow.</li></ol>]]></content:encoded></item><item><title><![CDATA[Stop building stingy apps]]></title><description><![CDATA[<p>Are you a greedy little fucker? Does your app have proprietary data in it? Are you building a walled garden full of weeds? Stop. Stop building apps that are hoarding my data. We have standard formats, let me export my data. Don&apos;t build apps that delete my health</p>]]></description><link>https://blog.usmanity.com/stop-building-stingy-apps/</link><guid isPermaLink="false">65a031cbf29ece0001d01672</guid><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Thu, 11 Jan 2024 18:24:30 GMT</pubDate><content:encoded><![CDATA[<p>Are you a greedy little fucker? Does your app have proprietary data in it? Are you building a walled garden full of weeds? Stop. Stop building apps that are hoarding my data. We have standard formats, let me export my data. Don&apos;t build apps that delete my health data from my phone when I delete your app.</p><p>You don&apos;t need to reinvent the wheel to build a todo app or a note taking app, just let me export a text file if you&apos;re so lazy about building something structured. Just don&apos;t build stingy apps that keep my data locked in. Are you being pressured by your MBA colleagues to create vendor lock-ins? Tell them no, it&apos;s not worth it. We as users need to stop using apps that don&apos;t support standardized formats.</p><p>Most of the data in apps these days is text and/or some variations of key/value pairs, just let me export it as a json, xml, or csv file. For the other files, images and videos, just let me download it. </p><p>Stop building apps that hoard user data for no good reason. </p>]]></content:encoded></item><item><title><![CDATA[A new blog for my love of keyboards]]></title><description><![CDATA[<p>I love mechanical keyboards, I have been obsessing over them for more than a decade and every once in a while. I write about keyboards here but I felt like the content I want to write about isn&apos;t as personal and oftentimes just content I want to have</p>]]></description><link>https://blog.usmanity.com/a-new-blog-for-my-love-of-keyboards/</link><guid isPermaLink="false">659dbd81f29ece0001d0161e</guid><category><![CDATA[keyboards]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Tue, 09 Jan 2024 21:46:03 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1550745165-9bc0b252726f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDIzfHxrZXlib2FyZHxlbnwwfHx8fDE3MDQ4MzY3MjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1550745165-9bc0b252726f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDIzfHxrZXlib2FyZHxlbnwwfHx8fDE3MDQ4MzY3MjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="A new blog for my love of keyboards"><p>I love mechanical keyboards, I have been obsessing over them for more than a decade and every once in a while. I write about keyboards here but I felt like the content I want to write about isn&apos;t as personal and oftentimes just content I want to have on the internet. This blog is sort of a mishmash of things already but I wanted to separate out the focus for keyboard related into its own place and go deeper into the topic of keyboards. </p><p>You can go see it below: </p><div class="kg-card kg-button-card kg-align-center"><a href="https://keychronicles.com/?ref=burrow" class="kg-btn kg-btn-accent">Key Chronicles</a></div><p>I would love to take this initiative seriously and write once or twice a week about topics related to keyboards and if you want to follow along, I&apos;d appreciate that very much! </p>]]></content:encoded></item><item><title><![CDATA[Clear app updates after many years!]]></title><description><![CDATA[<p>I first heard about Clear when over 10 years ago. I remember their launch was pretty hyped and I ended up paying the $1 to see just what was great about this app. It was so easy to use, one of the first apps to really use the swiping gestures</p>]]></description><link>https://blog.usmanity.com/clear-app-updates-after-many-years/</link><guid isPermaLink="false">659c4179f29ece0001d0160d</guid><category><![CDATA[apps]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Mon, 08 Jan 2024 18:48:37 GMT</pubDate><content:encoded><![CDATA[<p>I first heard about Clear when over 10 years ago. I remember their launch was pretty hyped and I ended up paying the $1 to see just what was great about this app. It was so easy to use, one of the first apps to really use the swiping gestures effectively and not as a gimmick. </p><p>Below is what the app looks like now. If you&apos;d like to download it, it&apos;s on the <a href="https://l.mhmd.us/lqLcKl?ref=blog.usmanity.com" rel="noreferrer">App Store</a>.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://blog.usmanity.com/content/images/2024/01/IMG_2669.PNG" width="1179" height="2556" loading="lazy" alt srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/IMG_2669.PNG 600w, https://blog.usmanity.com/content/images/size/w1000/2024/01/IMG_2669.PNG 1000w, https://blog.usmanity.com/content/images/2024/01/IMG_2669.PNG 1179w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.usmanity.com/content/images/2024/01/IMG_2671.PNG" width="1179" height="2556" loading="lazy" alt srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/IMG_2671.PNG 600w, https://blog.usmanity.com/content/images/size/w1000/2024/01/IMG_2671.PNG 1000w, https://blog.usmanity.com/content/images/2024/01/IMG_2671.PNG 1179w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.usmanity.com/content/images/2024/01/IMG_2672.PNG" width="1179" height="2556" loading="lazy" alt srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/IMG_2672.PNG 600w, https://blog.usmanity.com/content/images/size/w1000/2024/01/IMG_2672.PNG 1000w, https://blog.usmanity.com/content/images/2024/01/IMG_2672.PNG 1179w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://blog.usmanity.com/content/images/2024/01/IMG_2674.PNG" width="1179" height="2556" loading="lazy" alt srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/IMG_2674.PNG 600w, https://blog.usmanity.com/content/images/size/w1000/2024/01/IMG_2674.PNG 1000w, https://blog.usmanity.com/content/images/2024/01/IMG_2674.PNG 1179w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.usmanity.com/content/images/2024/01/IMG_2673.PNG" width="1179" height="2556" loading="lazy" alt srcset="https://blog.usmanity.com/content/images/size/w600/2024/01/IMG_2673.PNG 600w, https://blog.usmanity.com/content/images/size/w1000/2024/01/IMG_2673.PNG 1000w, https://blog.usmanity.com/content/images/2024/01/IMG_2673.PNG 1179w" sizes="(min-width: 720px) 720px"></div></div></div></figure>]]></content:encoded></item><item><title><![CDATA[End of Year Health Report, 2023]]></title><description><![CDATA[<p><strong>This year started out very differently than how it is ending, and I wanted to jot down as many of my thoughts as possible before I get busy with the new year&apos;s energy. I want to share an overview of my current health, how it has changed over</strong></p>]]></description><link>https://blog.usmanity.com/end-of-year-health-report-2023/</link><guid isPermaLink="false">658f756cf29ece0001d015c4</guid><category><![CDATA[health]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Sat, 30 Dec 2023 01:49:48 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/12/man-tree.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/12/man-tree.png" alt="End of Year Health Report, 2023"><p><strong>This year started out very differently than how it is ending, and I wanted to jot down as many of my thoughts as possible before I get busy with the new year&apos;s energy. I want to share an overview of my current health, how it has changed over the last year, and what it means for me going into the next year.</strong></p><h1 id="a-retrospective-on-30-years-of-a-mildly-healthy-lifestyle">A Retrospective on 30 Years of a Mildly Healthy Lifestyle</h1><p>I am lucky to have lived for over 30 years with no major health issues, eating a moderately healthy diet, and exercising at a below-average rate. Surprisingly, this lifestyle served me well, but that&apos;s all changing now. Being active was easy when I lived in San Francisco, where riding my bike, walking around, and going on short hikes helped keep my heart healthy and my weight under control. For most people, gaining weight is not just easy but inevitable. I have been blessed with a combination of genes that has prevented me from gaining weight, even during times when I wanted to. Not having excess weight helped keep my body functioning healthily, but I think it also created a blind spot for me. I didn&apos;t see my unhealthy habits, like eating too much greasy food or going a whole day without any food. During the pandemic, my health became less of a priority, as working from home required a lot less physical activity, and fear of catching COVID-19 limited my outdoor activities.</p><h1 id="a-change-long-overdue">A Change Long Overdue</h1><p>Over the last 5 years or so, I had been experiencing minor stomach pains, often attributing them to unhealthy eating or suspecting undercooked or contaminated food. It turns out, these factors were not the main issue. Underneath it all, I was developing ulcerative colitis (UC), an autoimmune disease with complex, not fully understood causes, involving genetic predisposition and environmental factors. You can read more about UC on <a href="https://en.wikipedia.org/wiki/Ulcerative_colitis?ref=blog.usmanity.com">Wikipedia</a>.</p><h3 id="how-did-this-happen">How Did This Happen?</h3><p>I wish there was an easy answer. The past decade of my life has been full of stress, changes, life events, and many unpredictable things, as most people&apos;s lives are. With all these variables, it&apos;s hard to pinpoint a specific cause for my UC. Unhealthy eating habits, stress from work, excessive coffee consumption, and irregular eating patterns certainly didn&apos;t help, but it&apos;s impossible to single out one thing as the definitive cause. In September, I started to have very strong stomach pains and it led me to spend a lot of time on the toilet too and this became a concern that first took me to urgent care and eventually to the ER. A few days in the ER revealed that I indeed did have UC and need to start addressing it.</p><h1 id="today-end-of-2023">Today, End of 2023</h1><p>It&apos;s December 29th, with just two days left in the year, so I wanted to capture what I&apos;m feeling and what my next steps will be. Today, I had a follow-up appointment with my doctor, who gave me extensive details on how ulcerative colitis will affect my life and what I should and shouldn&apos;t do. I was prescribed a new medication, mesalamine, which hopefully will help with the colon inflammation. For the past few weeks, I have been following a <a href="https://en.wikipedia.org/wiki/Low-FODMAP_diet?ref=blog.usmanity.com">low FODMAP diet</a> to avoid irritating my gut. It wasn&apos;t showing significant changes but was helpful in identifying foods that irritated me. From the various blood and stool tests I&apos;ve had over the last few months, here are a few things I know to be true:</p><ul><li>I don&apos;t have celiac disease. Eating gluten and wheat products should be safe for me.</li><li>Dairy does not negatively affect my gut. Eating a balanced amount is advisable.</li><li>I&apos;m low in iron and vitamin D3, and high in calcium.</li></ul><h1 id="thalassemia-minor">Thalassemia Minor</h1><p>Almost 5 years ago, a 23andMe test suggested that I might have a genetic disorder called <a href="https://www.mayoclinic.org/diseases-conditions/thalassemia/symptoms-causes/syc-20354995?ref=blog.usmanity.com">thalassemia minor</a>, which was later confirmed through blood tests. This minor disorder has been a challenging part of my life, causing extreme fatigue and occasional lethargy. With recent hospital visits, I was advised to take iron supplements and vitamin D3 to help with my energy levels, under medical supervision to avoid complications associated with thalassemia. About a week into taking these supplements and eating more regularly, my energy levels have been some of the best I&apos;ve remembered in recent years.</p><h1 id="whats-next-for-2024">What&apos;s Next for 2024</h1><p>I&apos;m looking at the new year with hope and positivity. First, I want to focus on improving my habits, health metrics, and lifestyle. Habits like exercising and being mindful, which were secondary to my daily life, are now primary activities I need to engage in every day. To measure and improve these aspects, I&apos;m noting my current metrics and aiming to enhance them over the next 12 months.</p><h2 id="heart-health">Heart Health</h2><p>The main health metric I want to improve, as it has taken a downturn, is my heart rate. The best overall metric I&apos;ve found to measure this is my resting heart rate (RHR), which had an average of 65 BPM over 2023. It has been increasing over the last few months, mainly due to reduced activity, increased stress, weight loss, and dehydration. I&apos;m ending the year with an average RHR of 72 BPM, which is higher than last year&apos;s average of 61 BPM. I&apos;m aiming to lower my RHR below 60 BPM in 2024. This will be a challenging goal, but with the right steps and consistency, I believe I can achieve it. Improving my heart health will be the biggest benefit to my overall well-being, as it&apos;s a crucial aspect of health that cannot be ignored.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.usmanity.com/content/images/2023/12/Resting-Heart-Rate-2023-1.png" class="kg-image" alt="End of Year Health Report, 2023" loading="lazy" width="1854" height="1557" srcset="https://blog.usmanity.com/content/images/size/w600/2023/12/Resting-Heart-Rate-2023-1.png 600w, https://blog.usmanity.com/content/images/size/w1000/2023/12/Resting-Heart-Rate-2023-1.png 1000w, https://blog.usmanity.com/content/images/size/w1600/2023/12/Resting-Heart-Rate-2023-1.png 1600w, https://blog.usmanity.com/content/images/2023/12/Resting-Heart-Rate-2023-1.png 1854w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Resting heart rate, January 64 BPM, December 72 BPM. 2023</span></figcaption></figure><h1 id="weight">Weight</h1><p>My weight has gone down from 140 lbs in September to 123 as of a few days ago. This has been due to the UC symptoms and dehydration. My goal for 2024 will be 150 lbs and that&apos;s going to be a stretch in all cases but I want to push hard and see if I can attain that.</p><hr><p><em>Please note, the content in this post reflects my personal experiences and should not be taken as medical advice. Always consult with healthcare professionals for advice tailored to your individual health needs.</em></p>]]></content:encoded></item><item><title><![CDATA[Refocusing on one thing]]></title><description><![CDATA[<p>The past week has been a valuable exercise in discipline, pushing me to write and learn more frequently. However, I&apos;ve come to the conclusion that I was devoting too much time to these activities rather than building and experimenting.</p><p>This post touches on the above, but it primarily</p>]]></description><link>https://blog.usmanity.com/refocusing-on-one-thing/</link><guid isPermaLink="false">6531523e7abad300017d688e</guid><category><![CDATA[Updates]]></category><category><![CDATA[projects]]></category><category><![CDATA[health]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Thu, 19 Oct 2023 16:36:47 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/10/IMG_2125-1.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/10/IMG_2125-1.JPG" alt="Refocusing on one thing"><p>The past week has been a valuable exercise in discipline, pushing me to write and learn more frequently. However, I&apos;ve come to the conclusion that I was devoting too much time to these activities rather than building and experimenting.</p><p>This post touches on the above, but it primarily explores what&apos;s been happening around and within me.</p><p>I plan to write a detailed kitchen repair and remodel post once the remodeling is complete. However, I believe it&apos;s important to address this in the current post. About 3 &#xBD; weeks ago, we had a water leak in the kitchen and since that day, we&apos;ve had less and less access to a working kitchen. The first week felt a bit crazy with a water damage mitigation company being in and out every day to get the place dried but after about a week of that, we got the kitchen demoed which left us with no counters, no sink, and a hollow room with nothing but plastic sheets covering it. With each passing day, it felt more and more like we&apos;re camping in our own house than living in it. No running water on the main floor and no sink to easily go rinse your hands or dishes. <br>Naturally, this led to a depressing feeling of not being at home while being at home. So, part of this post is writing about what a mental strain it is to not have a living space that feels &quot;normal&quot;. I&apos;ve been feeling overwhelmed by it and of course, I&apos;d feel even worse if it wasn&apos;t for Kristen&apos;s help in pushing through a lot of the planning. </p><p>The other thing I want to write about is a holistic overview of what&apos;s going on within me, my mind and my body. There are numerous studies showing a relationship between the gut microbiota and mental health [<a href="https://pubmed.ncbi.nlm.nih.gov/31454550/?ref=blog.usmanity.com" rel="noreferrer">1</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/35236957/?ref=blog.usmanity.com" rel="noreferrer">2</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/28767318/?ref=blog.usmanity.com" rel="noreferrer">3</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/32459708/?ref=blog.usmanity.com" rel="noreferrer">4</a>], and for me this has become a jarring reality I&apos;ve been dealing with over the last month. Right before I got back home from Idaho last month, I had been feeling an increase need to run to the restroom and I thought it was just a matter of having eaten something bad that was bothering my stomach. Well, over the proceeding weeks, this situation got worse and worse to the point where I had to go to the doctor and get checked. <br>Over the last 6-7 years, I&apos;ve gone to the doctor at least once a year to get blood drawn. This all started with a 23andMe genetic marker mentioning that I might have thalassemia, which is an inherited form of anemia caused by faulty synthesis of hemoglobin. The blood results confirmed this and in short, it meant I should definitely not have kids with someone carrying this gene as well. But as the years passed, the anemia started to become more prominent and recently with the gut issues, it has been causing me to feel pretty tired midway through the day. At some point in the afternoon, I will want to just lay down and sleep. The reason this has become even more of an issue is because I&apos;ve stopped drinking coffee as my morning drink due to the gut issues. According to the doctor, so far, I have nothing serious to worry about with my gut, it might just be my colon trying to heal from stress and bad foods. In an effort to promote gut health, I&apos;ve decided to reduce unnecessary external or self-imposed stressors.</p><p>Being active by walking and exercising is high on my list. Next is watching what I eat, trying to consume whole foods with enough iron to support my body&apos;s lowered ability to hold onto it. And of course, getting adequate sleep. </p><p>Taking care of my body will hopefully lead me to building some useful and fun things but at the moment, I wanted to write about these two things on my mind because they&apos;re affecting me immediately. </p><p>Moving on to projects and ideas I have been experimenting with, the last month has been spent in a sort of wandering place within my mind, no real concrete ideas or projects have been done and over the last few days, this reality has become more jarring and scary for me. Not building something, not having an active project always makes me feel like I&apos;m not doing enough. But I think using this break in building has led me to realize that I should narrow my focus onto one specific thing and stick with it longer. Build towards a goal, build over the bumps and roadblocks, and hopefully put something good and useful out there. </p><p>Over the next few days (and possibly weeks), I will be cutting down on things that take away my focus and eat away at my time and see where I am at by the time the kitchen is ready to go which won&apos;t be until late November. </p>]]></content:encoded></item><item><title><![CDATA[Primitive Data Types]]></title><description><![CDATA[<p>Today, I&apos;m at <a href="https://www.eastsidecoffee.org/?ref=blog.usmanity.com">Eastside Coffee Bar &amp; Workspace</a>. It&apos;s a nice little coffee shop with a bunch of seating available to sit and work. I am not at my house because I wanted to get away from the noise of plumbing work that started today.</p><p>I&</p>]]></description><link>https://blog.usmanity.com/primitive-data-types/</link><guid isPermaLink="false">652ed8016fb2b100011aec89</guid><category><![CDATA[computer science]]></category><category><![CDATA[75 day challenge]]></category><category><![CDATA[code]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Tue, 17 Oct 2023 18:55:23 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1682686581776-b6ebee7c150e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNjk3NTY3NjA5fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1682686581776-b6ebee7c150e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wxfDF8YWxsfDF8fHx8fHwyfHwxNjk3NTY3NjA5fA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Primitive Data Types"><p>Today, I&apos;m at <a href="https://www.eastsidecoffee.org/?ref=blog.usmanity.com">Eastside Coffee Bar &amp; Workspace</a>. It&apos;s a nice little coffee shop with a bunch of seating available to sit and work. I am not at my house because I wanted to get away from the noise of plumbing work that started today.</p><p>I&apos;m focusing on the basic primitive data types. This is one of those topics that is part of every programmer&apos;s foundational knowledge but I think reviewing and going deeper into these can&apos;t hurt anyone.</p><h1 id="data-types">Data Types</h1><p>First we&apos;ll focus on primitive data types. They&apos;re called &quot;primitive&quot; data types because almost all languages implement these data types at a core level, whether through the base language or through an almost always included standard library.</p><h2 id="booleans">Booleans</h2><p>The simplest and one of the most useful data type, the humble boolean. Values can either be <code>true</code> or <code>false</code>. Depending on the language, they might be all lowercase, capitalized, or all upper case. In Python, they&apos;re written as <code>True</code> and <code>False</code>. In C, C++, Javascript, Java, Ruby, and a bunch more, they&apos;re written as <code>true</code> and <code>false</code>. In FORTRAN, they&apos;re written as <code>TRUE</code> and <code>FALSE</code>.</p><p>Moving past just how to write booleans, what are they useful for? Well, almost everything. To me, they&apos;re a parallel to computer hardware because everything at a fundamental level like transistors, RAM, CPU, and control flow is managed by ones and zeros. Since bits exist as either a 1 or 0, a boolean only <em>needs</em> one bit to store it but as most modern computers use a minimum of a single byte to store any data, booleans are stored in a byte.</p><p>Booleans are so very useful in helping the flow of programs, e.g. when writing a conditional.</p><h2 id="numbers">Numbers</h2><p>I didn&apos;t want to call this section Ints or Floats because at a human level, we&apos;re talking about numbers and how they&apos;re stored and interpreted by the computer. Oftentimes, most languages will implement two main types of numbers: Integers and Floats.</p><p><strong>Integers</strong> are whole numbers without the decimal place like <code>2, 5, 420, 5000</code> or any other number you can think of.</p><p>And <strong>Floats</strong> are numbers with a decimal place and how precise you want the number to be becomes relevant, these could be things like <code>97.0, 1.234, 3.14159..., 2.5</code>. Since all data types use space in memory, early implementations of numbers were intentionally done to accommodate most human applications of numbers but not insanely large numbers.</p><p><strong>Aside on signed vs unsigned</strong>: I&apos;ve avoided this part so far because it&apos;s a detail that matters in some programming languages but not all. In a language that use signed and unsigned integers, they use one bit to allocate this distinction. When an integer is signed, it can be both positive and negative numbers but when it&apos;s unsigned, it can only use non-negative numbers (zero and all positive numbers). So for a typical 4 byte integer, it will have 32-bits worth of space to store a number and if it&apos;s a signed integer, that would take away one bit to use for the sign (positive or negative) and leave the remaining 31-bits. Not all languages support signed and unsigned integers.</p><h2 id="strings">Strings</h2><p>The next data type we&apos;ll look at is the string data type. This can be used to store all kinds of characters as long as they&apos;re wrapped with quotes, single or double. Examples are: &quot;hello world&quot;, &quot;an emoji &#x1F60A;&quot;, and even numbers &quot;1 apple, 2 bananas, 3.14 pies&quot;. As humans, we need to use strings pretty often but for some languages like C, strings aren&apos;t even available in the standard library, only a <code>char</code> data type is available which is a single-character string.</p>]]></content:encoded></item><item><title><![CDATA[Hashing and Hash Tables]]></title><description><![CDATA[<p>Today&apos;s topic is pretty straight forward. I got this one from the list of concepts that ChatGPT suggested. I think on days when I&apos;m short on time or feeling less inspired, the generated list could be useful.</p><p>Sidebar: today I am feeling a bit underpowered because</p>]]></description><link>https://blog.usmanity.com/hashing-and-hash-tables/</link><guid isPermaLink="false">652dadbc6aace1000103f18d</guid><category><![CDATA[computer science]]></category><category><![CDATA[75 day challenge]]></category><category><![CDATA[data structures]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Mon, 16 Oct 2023 21:49:56 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/10/IMG_3876.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/10/IMG_3876.jpg" alt="Hashing and Hash Tables"><p>Today&apos;s topic is pretty straight forward. I got this one from the list of concepts that ChatGPT suggested. I think on days when I&apos;m short on time or feeling less inspired, the generated list could be useful.</p><p>Sidebar: today I am feeling a bit underpowered because I went to get my blood drawn. More on this in the future as I find out more information.</p><h1 id="what-are-hash-tables">What are hash tables?</h1><p>A hash table is data type that uses keys and values to create associative arrays or in some programming languages it&apos;s known as a dictionary or hash map. The important difference between a basic associative array and a hash table is the hashing function which makes the lookup times much faster than if you used a generic array and created an associative array from it.</p><p>Python is one language that I know has a dictionary implemented in the standard library, I&apos;m sure there are many others that do it too. Below is an example of what that should look like:</p><pre><code>coordinates = {&quot;latitude&quot;: &quot;45.523064&quot;, &quot;longitude&quot;: &quot;-122.676483&quot;}

print(f&quot;Portland is located at {coordinates[&apos;latitude&apos;]} &#xD7; {coordinates[&apos;longitude&apos;]}&quot;)
</code></pre><p>In this example, I&apos;m using a simple lookup to get the latitude and longitudes of the <code>coordinates</code> dictionary.</p><h1 id="what-is-hashing">What is hashing?</h1><p>Hashing is the important part that makes a hash table good as a data structure. A hashing function is used to convert a given key within the hash table to a unique index. This indexing allows constant lookup times which means that the size of the hash table does not matter as long as there is enough space for indexing of the keys.</p><h1 id="how-is-a-hash-table-different-than-an-associative-array">How is a hash table different than an associative array?</h1><p>According to my internet searching, it seems like in most cases, they&apos;re the same. But the important terminology difference lies in which context they&apos;re being used in. An associative array is usually an abstract concept and can be implemented using a hash table or a regular array, one that does not have a built in associative functionality. The term &quot;hash table&quot; is used to refer to the data structure that includes a key-value relation and includes a hashing function, in the context of computer science it&apos;s used as a catch-all for all the various names programming languages use like Object (JS), dictionary (python), HashMap (java), Hash (ruby), map (go), std::collections::HashMap (rust).</p><h1 id="conclusion">Conclusion</h1><p>The good thing about today&apos;s learnings was that now I know that when people refer to maps, hash tables, associative arrays, they&apos;re usually the same aspect and do not really differ much, mainly the naming and programming language are the major difference. I didn&apos;t know about the hashing function which is seems to be the magic in all hash tables.</p>]]></content:encoded></item><item><title><![CDATA[Recursion]]></title><description><![CDATA[<p>It&apos;s the weekend and I didn&apos;t have much free time today so I&apos;m covering recursion. </p><p>Recursion is an important topic in programming that often gets looked over because oftentimes it&apos;s used in self-evaluating algorithms. But before I go into Opinionland, I&apos;</p>]]></description><link>https://blog.usmanity.com/recursion/</link><guid isPermaLink="false">652b47c26aace1000103f158</guid><category><![CDATA[computer science]]></category><category><![CDATA[75 day challenge]]></category><category><![CDATA[code]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Sun, 15 Oct 2023 02:13:34 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/10/Droste_Cacao_Alcalinise_blikje-_foto4.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/10/Droste_Cacao_Alcalinise_blikje-_foto4.JPG" alt="Recursion"><p>It&apos;s the weekend and I didn&apos;t have much free time today so I&apos;m covering recursion. </p><p>Recursion is an important topic in programming that often gets looked over because oftentimes it&apos;s used in self-evaluating algorithms. But before I go into Opinionland, I&apos;m going to define what recursion is.</p><h1 id="what-is-recursion">What is recursion?</h1><p>I really like the Wikipedia definition of recursion even if it&apos;s sort of confusing:</p><blockquote>Recursion&#xA0;occurs when the definition of a concept or process depends on a simpler version of itself.</blockquote><p>Ok so what does that mean? To me, it made sense once I looked at an algorithm that uses recursion, inside merge sort. But let&apos;s define things that make up a recursion so that it&apos;s a bit easier to understand. </p><p>Recursion contains:</p><p><strong>Base case</strong>: think of this as a step that the function <em>has</em> to take or else it will have not-so-fun consequences (more on this soon). </p><p><strong>Recursive step</strong>: this step is one that seemingly just calls itself based on a condition that doesn&apos;t send the function into another call to itself.</p><p>Here&apos;s some pseudocode that might explain this too:</p><pre><code>function recursiveFunction(parameters):
  if baseCase is true:
    return something
  else:
    someValue = doSomething(parameter)

    return recursiveFunction(someValue)</code></pre><p>Let&apos;s take this line by line:</p><ol><li>We define a function called <code>recursiveFunction</code> that will take <code>parameters</code> as the argument when called.</li><li>A &#x2013; We check the base case and if the conditional checks to be true, we return <code>something</code>. Here, <code>something</code> can be some calculated value or just the same value passed into it. <br>B &#x2013; If the base case is not true, then we do the following:</li><li>Calculate some value from <code>doSomething</code> which <em>should</em> do something like modify the value, get some resulting thing, because this will become useful next.</li><li>We run the recursive function again and just pass the value we just got from <code>doSomething</code>. </li></ol><p>If you didn&apos;t cause any issues that would never hit the base case, you should be good to go. If you didn&apos;t catch your base case, then your function will run over and over forever&#x2013;or until you kill it. </p><p>That seems to make sense to me. Now, I&apos;m going to log off and test this tomorrow. </p>]]></content:encoded></item><item><title><![CDATA[Programming Paradigms]]></title><description><![CDATA[<p>Continuing the theme of digging deeper into topics I&apos;m familiar with but not an expert in, today I want to focus on programming paradigms.</p><h1 id="what-are-programming-paradigms">What are programming paradigms?</h1><p>Programming languages can be designed to accommodate what &quot;style&quot; of programming you can do with them. This is</p>]]></description><link>https://blog.usmanity.com/programming-paradigms/</link><guid isPermaLink="false">6529bf826aace1000103f143</guid><category><![CDATA[computer science]]></category><category><![CDATA[75 day challenge]]></category><category><![CDATA[code]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Fri, 13 Oct 2023 22:07:49 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/10/IMG_1482.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/10/IMG_1482.jpg" alt="Programming Paradigms"><p>Continuing the theme of digging deeper into topics I&apos;m familiar with but not an expert in, today I want to focus on programming paradigms.</p><h1 id="what-are-programming-paradigms">What are programming paradigms?</h1><p>Programming languages can be designed to accommodate what &quot;style&quot; of programming you can do with them. This is not to say, what you can build with them, but more of how you build with them. A paradigm is an abstract way of thinking about writing code. This is what I understand about it at the moment. I will have to look up the definition and come back here.</p><p>Ok so I was not too far off, this is from Wikipedia:</p><blockquote>Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms.</blockquote><p>At this point, I ran into an interesting issue. Wikipedia mentioned &quot;programming models&quot; which is a term I haven&apos;t used before and haven&apos;t heard much before so I started looking into this.<br>Both programming models and programming paradigms almost step on each other&apos;s toes when being defined and I&apos;m going to try my best to separate out the two. A programming model is a way to structure code and/or how a program&apos;s design is implemented at a high level. While a programming paradigm is a fundamental way of thinking about how a problem can be solved using a specific language.<br>I think I&apos;ll have more differentiation in the examples below</p><h1 id="examples-of-programming-paradigms">Examples of programming paradigms</h1><p>Let&apos;s list some programming paradigms so it might make more sense.</p><h1 id="declarative-programming"><strong>Declarative programming</strong></h1><p>This paradigm focuses on what you expect to see as a result of writing some code, it is usually found in languages like SQL, HTML, and CSS. These examples are all languages that are not general purpose programming languages and are instead used for specific purposes. In the SQL example, you are telling the database to give something back based on a statement instead of computing or using a lot of logic. Logic is possible in declarative programming but it&apos;s more oriented towards rules or conditions instead of loops and computed checks.</p><p>Here&apos;s a CSS example of something completely declarative:</p><pre><code class="language-css">h1 {
  color: blue;
  font-size: 24px;
}</code></pre><p>In this CSS example, we&apos;re not checking or referencing anything and in general just telling the rendering engine what the color and font size should be.</p><p>And a SQL example:</p><pre><code>SELECT name, age FROM users WHERE age &gt; 25;
</code></pre><p>In the SQL example, it&apos;s all declared to the database engine instead of anything being calculated or determined in the code.</p><p>I learned a lot about declarative programming from this <a href="https://stackoverflow.com/a/145148/318822?ref=blog.usmanity.com">Stack Overflow answer &#x2192;</a>.</p><h1 id="imperative-programming"><strong>Imperative programming</strong> </h1><p>Naturally, the next paradigm that makes sense to look at is something that contrasts pretty hard against declarative. Instead of being declarative statements of what a program should do, imperative programming uses statements that change the program&apos;s state as it runs. It tells the program &quot;how&quot; something should be done.<br>Imperative programming is made up of procedures or functions which is also why it&apos;s sometimes called procedural programming.<br>There are a lot of programming languages that use imperative programming, like C, Python, Javascript, Java, and so many more.<br>Below are some examples of the same thing being accomplished with these two different paradigms:</p><p><strong>Addition example using declarative programming</strong></p><pre><code>const numbers = [1, 2, 3, 4, 5];
const result = numbers.reduce((acc, current) =&gt; acc + current, 0);
console.log(result); // prints out: 15
</code></pre><p><strong>Addition example using imperative programming</strong></p><pre><code>function sumArray(arr) {   
	let sum = 0;   
	for (let i = 0; i &lt; arr.length; i++) {     
		sum += arr[i];   
	}   
	return sum; 
}  
const numbers = [1, 2, 3, 4, 5]; 
const result = sumArray(numbers); 
console.log(result); // prints out: 15
</code></pre><p>Both these examples accomplish the same thing but in the imperative example, we can reuse that <code>sumArray</code> function in multiple places, it&apos;s the &quot;how&quot; to do the addition, while in the declarative example, we simply do the math by using <code>numbers.reduce()</code> which makes code very clearly a one-time use.</p><p><strong>What about object-oriented programming?</strong><br>Object-oriented programming (OOP) takes imperative programming one step further by introducing the use of objects which can contain both data and code. The &quot;code&quot; in these objects is usually methods (functions within objects) which are more generally just procedures.<br>OOP also allows us to model real-world concepts as objects, like a &apos;person&apos; object with properties such as name, age, and location, and methods to interact with the object. The person object would contain properties (data) like name, age, location and it would also have methods (procedures) which would allow you to add them as a friend, message them, or view a computed value like their full name in a sentence. OOP also introduces many other programming concepts like encapsulation, inheritance, and polymorphism which I&apos;m not going to get into today.</p><h1 id="functional-programming"><strong>Functional programming</strong> </h1><p>This one is a subset of declarative programming. Functional programming is a loaded term, it can be a subset of declarative programming or it can be a purely functional programming which treats all functions as deterministic mathematical functions (aka pure functions). Functional programming emphasizes preventing side effects while running a program. This means if a function is written to simply do one thing and does not produce any side effects, there&apos;s potentially less room for errors or bugs. Haskell is a common example of a programming language that uses functional programming. Javascript can have functional code coexist with other types of code like imperative or declarative.</p><p><strong>Addition example from before using functional programming</strong></p><pre><code>function add(a, b) {
  return a + b;
}

const result = add(3, 4);
console.log(result); // prints: 7
</code></pre><p>In this example, the <code>add</code> function will always return the same thing as long as the same input is given. The function also tries not to have any side effects like a <code>console.log</code> or some other unrelated operation.</p><h1 id="logic-programming">Logic programming</h1><p>This is brand new to me, I have been skimming through Wikipedia and ChatGPT to get a grasp of it. Logic programming is based on formal logic. It is declarative but unlike declarative programming where you state &quot;what&quot; you want, you can use it to build expert systems (decision making like humans) and natural language processing (NLP) and artificial intelligence. Rule based systems can also use logic programming to answer questions about a heuristic like fraud, trust, quality, etc.<br>Unlike other programming paradigms, in logic programming, you write statements and rules, and the computer determines the answer based on these rules.<br>The computer determines the answer based on the rules and statements you&apos;ve provided to it.</p><p>I got the following example from ChatGPT so take it with a grain of salt.</p><pre><code class="language-prolog">% Define the criteria for a fraudulent user
fraudulent_user(User) :-
    has_many_accounts(User),
    has_unusual_activity(User),
    has_recent_suspicious_activity(User).

% Define predicates for various conditions
has_many_accounts(john).
has_unusual_activity(john).
has_recent_suspicious_activity(john).

% Sample user data
user(john, &quot;John Doe&quot;, &quot;johndoe@email.com&quot;).

% Query to check if a user is fraudulent
% Example: Is John a fraudulent user?
% Query: fraudulent_user(john).
% Expected Output: true (since John meets all the conditions).

</code></pre><p>In this example we&apos;re trying to determine if the user is fraudulent based on the various predicates. It&apos;s weird to me because it reads pretty much like a declarative language but I&apos;m guessing this is because I&apos;m looking at it from a decade plus of declarative and imperative programming experience.</p><h1 id="symbolic-programming">Symbolic programming</h1><p>The last one for today that I&apos;m learning about is <strong>symbolic programming</strong> allows a program to manipulate its code as data. Lisp introduced symbolic programming. You can use symbolic programming to solve mathematical proofs and evaluate expressions on the fly. By the end of learning about symbolic programming, I didn&apos;t come away with a use-case for my own day to day programming but it&apos;s one of those things that will make sense over time.</p><h1 id="conclusion">Conclusion</h1><p>Each of these programming paradigms really opened up old pathways in my brain that haven&apos;t been thought about for a long time now. Writing this up and then learning about new ones was a good use of time today.</p>]]></content:encoded></item><item><title><![CDATA[Sorting algorithms]]></title><description><![CDATA[<p>Today&apos;s recommendation from ChatGPT was &quot;Algorithms&quot;&#x2013;yup, just that, in one day, master all algorithms &#x1F923;. But as reality set in, I wanted to narrow down to some algorithms I&apos;m familiar with and try to see if I can dig into them past</p>]]></description><link>https://blog.usmanity.com/sorting-algorithms/</link><guid isPermaLink="false">652893086aace1000103f128</guid><category><![CDATA[computer science]]></category><category><![CDATA[75 day challenge]]></category><category><![CDATA[learning]]></category><category><![CDATA[coding]]></category><category><![CDATA[algorithms]]></category><dc:creator><![CDATA[Muhammad Usman]]></dc:creator><pubDate>Fri, 13 Oct 2023 00:49:44 GMT</pubDate><media:content url="https://blog.usmanity.com/content/images/2023/10/IMG_3770.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.usmanity.com/content/images/2023/10/IMG_3770.jpg" alt="Sorting algorithms"><p>Today&apos;s recommendation from ChatGPT was &quot;Algorithms&quot;&#x2013;yup, just that, in one day, master all algorithms &#x1F923;. But as reality set in, I wanted to narrow down to some algorithms I&apos;m familiar with and try to see if I can dig into them past the high level understanding. I chose sorting algorithms specifically because it gives me a constraint. Searching algorithms could be a whole college course of their own so I&apos;m not gonna get into those today.</p><h1 id="common-sorting-algorithms">Common sorting algorithms</h1><p>At this point, I&apos;m writing from the top of my head, all things I&apos;m familiar with and then I&apos;ll go deeper into what things I don&apos;t understand or don&apos;t know about.</p><p>The few basic sorting algorithms are: selection sort, insertion sort, and bubble sort. Then there&apos;s slightly faster algorithms like merge sort.</p><p>Selection sort selects the smallest element and moves it to the beginning of the list. From my understanding, the big-O of insertion sort is always going to be N-1 because it has to check and compare.</p><p>Insertion sort picks an element and moves it if the next element is smaller, the picked element is moved until it&apos;s not smaller than the next element it&apos;s checking. But...this is kinda where my understanding of insertion sort stops. I should look into it more.</p><p>Bubble sort works similarly but it &quot;bubbles&quot; the elements in one way or another, for example in a list with <code>[4,1,3,2,5]</code>, bubble sort will first bubble 4 all the way to the correct position, then go back to check from <code>1,2,3...</code> this is super simple contrived example but it seems like that&apos;s the basic concept.</p><p>The above three algorithms use basic one check at a time approaches which can be ok for smaller sets of data but as the dataset grows in size, their runtimes can be very slow.</p><p>From what I&apos;ve studied, the next algorithm I&apos;m familiar with is merge sort. Merge sort uses a divide and conquer approach, and the trick up its sleeve is recursion. So it&apos;s good to have a grasp on how recursion works before diving into merge sort but simple put it takes the following steps:</p><pre><code>1. splits the elements in half until each half only has 2 elements left
2. it sorts the elements
3. merges the sorted arrays
</code></pre><p>At a high level it seems simple but implementing it can be a bit tricky. First you have to handle the default case so the recursion knows when to end. This can be done by this: <code>if array size is 1, return array</code>. Next, you have to split the array into smaller arrays, so if an array is 5 elements big, you&apos;d split one into 3 elements and the other into 2 elements. Now when it gets to the list with 2 elements, it will split them once more and at this point it will run a separate function that will &quot;merge&quot; these two. And the way it does this is by comparing which of the two single element arrays contains the smaller integer.</p><p>Here&apos;s a javascript implementation of this:</p><pre><code>function mergeSort(arr) {
  if (arr.length &lt;= 1) {
    return arr;
  }

  const middle = Math.floor(arr.length / 2);
  const left = arr.slice(0, middle);
  const right = arr.slice(middle);

  return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right) {
  let result = [];
  let leftIndex = 0;
  let rightIndex = 0;

  while (leftIndex &lt; left.length &amp;&amp; rightIndex &lt; right.length) {
    if (left[leftIndex] &lt; right[rightIndex]) {
      result.push(left[leftIndex]);
      leftIndex++;
    } else {
      result.push(right[rightIndex]);
      rightIndex++;
    }
  }

  return result.concat(left.slice(leftIndex), right.slice(rightIndex));
}

const unsortedArray = [64, 34, 25, 12, 22, 11, 90];
const sortedArray = mergeSort(unsortedArray);

console.log(&quot;Unsorted Array:&quot;, unsortedArray);
console.log(&quot;Sorted Array:&quot;, sortedArray);

</code></pre><p>Ok so these few I have a basic grasp of but I&apos;m not too familiar with other sorting algorithms.</p><p>The following are new to me (from the wiki on <a href="https://en.wikipedia.org/wiki/Sorting_algorithm?ref=blog.usmanity.com">sorting algorithms</a>):</p><ul><li>Quicksort</li><li>Heapsort</li><li>Tree sort</li><li>Library sort</li><li>Block sort</li><li>Tournament sort</li><li>Timsort</li><li>Patience sorting<br>And a bunch more.</li></ul><p>On Wikipedia, there&apos;s a nice comparison of different attributes for the algorithms like best, average, and worst runtimes along with memory usage, stability, and the method used for sorting.</p><p>For things like merge sort, the runtime the same in all cases which is O(<em>n</em> log <em>n</em>) but space usage is n (which isn&apos;t bad, IIUC). But things like Quicksort can be average <em>n</em> log <em>n</em> but worst can be <em>n^2</em>.</p><h2 id="quick-sort">Quick sort</h2><p>This one is a new one to me so I&apos;m going to focus on it a bit because I want to learn about it.<br>So reading the algorithm details on wikipedia, this is what I found:</p><ol><li>Because this is a recursive algorithm, when there less than 2 elements, then return.</li><li>If more than 2 elements, pick an element and call it the <em>pivot</em>.</li><li>Use two algorithms, one called <code>quicksort</code> and the other called <code>partition</code>, the former being the main function that will insure recursion stops when it needs to, splits the array at the pivot and passes one side of the partitioned array to one quicksort and the other to another quicksort function call.</li><li>Inside the <code>partition</code> function, the same approach is used as having a pivot and then using that to compare against.</li></ol><h2 id="out-of-time">Out of time</h2><p>I spent way more than 2 hours on this today. I spent close to 3 hours on this and I wasn&apos;t able to capture all my thoughts and learnings into one succinct post. I&apos;m happy with this because it forced me to go back and review my fundamental understanding of some basic algorithms.<br>I think in the future, I&apos;d want to timebox better and stick with it.</p><h3 id="questions-for-future-self">Questions for future self</h3><ul><li>How is quicksort better or worse compared to merge sort?</li><li>What are some other useful and commonly used sorting algorithms? </li></ul>]]></content:encoded></item></channel></rss>