<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rach Smith</title>
    <description>The latest articles on DEV Community by Rach Smith (@rachsmith).</description>
    <link>https://dev.to/rachsmith</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F27660%2Fd61a5e1b-fa01-40d4-8d75-970f231e418a.jpeg</url>
      <title>DEV Community: Rach Smith</title>
      <link>https://dev.to/rachsmith</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rachsmith"/>
    <language>en</language>
    <item>
      <title>Lerp</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Thu, 06 Apr 2023 20:12:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/lerp-2mh7</link>
      <guid>https://dev.to/rachsmith/lerp-2mh7</guid>
      <description>&lt;p&gt;When &lt;a href="https://blog.codepen.io/2020/08/28/posts-sunset/"&gt;CodePen blogs&lt;/a&gt; were a thing I added a bunch of posts to mine. Some of the content still holds up in 2023 so I decided to repost my favourites on this site.&lt;/p&gt;

&lt;p&gt;Today I want to talk about a little animation trick that I use all the time called  &lt;strong&gt;lerp&lt;/strong&gt;. Lerp is the nickname for Linear Interpolation between two points. It's a fairly simple effect to implement but can really improve the look of your animations if you're moving an object from a point A to point B.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;Given you have a current position for an object, and a position you want to move that object towards - you can linearly interpolate to a percentage of the distance between those points, and update the position by that amount on each frame.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// to run on each frame
function lerp(position, targetPosition) {
// update position by 20% of the distance between position and target position
  position.x += (targetPosition.x - position.x)*0.2;
  position.y += (targetPosition.y - position.y)*0.2;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By doing this, the amount the object moves becomes smaller as the distance between position and target decreases. This means the object will slow down as it gets closer to its target, creating a nice easing effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lerp in action - some examples
&lt;/h2&gt;

&lt;p&gt;Here is an example of a ball following the user's mouse or touch. If we make the ball move to the place the mouse is as soon as it moves, the ball movement can be very fast and/or disjointed. We might also be able to see separate "ball frames" if we move our mouse really fast.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/avXmyV?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here's the same demo, except this time we're using lerp. Instead of moving the ball right to the mouse position, we'll move it 10% of the distance towards that position on each frame.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/yYZapV?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Notice the ball movement is a lot smoother and an overall more pleasing effect.&lt;/p&gt;

&lt;p&gt;Here's another example of using lerp. This time we've got a scrolling indicator that updates as you scroll down the "page".&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/rOPMvz?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/epxdxe?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If we add lerp to this example we're lerping the indicator towards the scroll percentage instead of pointing it at the actual position - this smoothes out the movement of the indicator.&lt;/p&gt;

&lt;p&gt;So, the lerp "trick" is a great tool to have up our web animation sleeves to combat linear or jagged movement.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>animation</category>
    </item>
    <item>
      <title>Content Collections are a welcome addition to my Astro setup</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Wed, 29 Mar 2023 13:15:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/content-collections-are-a-welcome-addition-to-my-astro-setup-47e</link>
      <guid>https://dev.to/rachsmith/content-collections-are-a-welcome-addition-to-my-astro-setup-47e</guid>
      <description>&lt;p&gt;All of the notes on this site are built from markdown files in an &lt;a href="//Astro.build"&gt;Astro&lt;/a&gt; static site. As of &lt;a href="https://astro.build/blog/astro-2/"&gt;Astro 2.0&lt;/a&gt;, you can effectively add type validation to your markdown files, via a feature called Content Collections.&lt;/p&gt;

&lt;p&gt;I must confess I don't enjoy TypeScript all that much. I can see how and why it is helpful in certain circumstances, but I'm not in the "make everything TypeScript because &lt;em&gt;TyPeScRiPt iS tHe fUtUre&lt;/em&gt;" demographic.&lt;/p&gt;

&lt;p&gt;It makes sense for this usecase of improving the experience of debugging issues in your markdown files. I'm currently working on a little redesign of this site, and having the note content typed has made working on it faster and easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I upgraded my site to use Content Collections
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Updated Astro
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npm install astro@latest&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Moved all the notes to &lt;code&gt;src/content/notes&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Previously there were in a a directory at &lt;code&gt;src/notes&lt;/code&gt;, but Content Collections need to be kept in the &lt;code&gt;content&lt;/code&gt; directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Added type definitions
&lt;/h3&gt;

&lt;p&gt;For my notes collection in &lt;code&gt;src/content/config.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 1. Import utilities from `astro:content`
import { z, defineCollection } from 'astro:content';
// 2. Define your collection(s)
const notesCollection = defineCollection({
  schema: z.object({
    title: z.string(),
    tags: z.array(z.string()),
    added: z.string(),
    updated: z.string(),
    excerpt: z.string().nullable(),
  })
});
// 3. Export a single `collections` object to register your collection(s)
// This key should match your collection directory name in "src/content"
export const collections = {
  'notes': notesCollection,
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Replaced the usage of &lt;code&gt;Astro.glob&lt;/code&gt; with &lt;code&gt;getCollection&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The old way of getting all my notes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const notes = await Astro.glob(`../notes/*.md`);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The new way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { getCollection, getEntryBySlug } from 'astro:content';

const notes = await getCollection('notes');

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Astro.glob&lt;/code&gt; returned an array objects with a &lt;code&gt;frontmatter&lt;/code&gt; property. &lt;code&gt;getCollection&lt;/code&gt; returns an array of objects with a &lt;code&gt;data&lt;/code&gt; property, so I had to update the places where I was accessing the frontmatter.&lt;/p&gt;

&lt;p&gt;For example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;note.frontmatter.title

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is now&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;note.data.title

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>astro</category>
    </item>
    <item>
      <title>Using regex with make find-and-replace in VS Code</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Tue, 21 Mar 2023 20:20:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/using-regex-with-make-find-and-replace-in-vs-code-5a6j</link>
      <guid>https://dev.to/rachsmith/using-regex-with-make-find-and-replace-in-vs-code-5a6j</guid>
      <description>&lt;p&gt;The context for how and why is &lt;a href="https://dev.to/learning-in-public-is-complicated/"&gt;too niche&lt;/a&gt; for me to go in to here, but I had a bunch of files where I needed to change all instances of this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'FileClient:1643853467530'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;to this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;'PenVersionFileClient:{"cpid":"1643853467530"}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Except for each instance, the id value (the number) was different.&lt;/p&gt;

&lt;p&gt;I wanted to keep the number in there, but change the text that wraps it.&lt;/p&gt;

&lt;p&gt;Because I needed to replace text on either side of the number, a simple find-and-replace term wasn't going to work. I needed regex.&lt;/p&gt;

&lt;p&gt;To turn on search using regex, you want to make sure this option is selected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1KINcOAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://rachsmith.com/images/regex-search.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1KINcOAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://rachsmith.com/images/regex-search.png" alt="A screenshot of VS Code's search sidebar with &amp;quot;Use Regular Expression&amp;quot; selected" width="678" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To replace the text on either side of text, you want a regular expression that follows this pattern:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/BEFORE_TEXT(.+?)AFTER_TEXT/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;where &lt;code&gt;BEFORE_TEXT&lt;/code&gt; and &lt;code&gt;AFTER_TEXT&lt;/code&gt; match the text on the left and the right of the text you want to wrap-replace.&lt;/p&gt;

&lt;p&gt;Then, in the Replace input of the Search UI, you add a &lt;code&gt;$1&lt;/code&gt; to wherever you want the original text to go.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NEW_BEFORE_TEXT$1NEW_AFTER_TEXT&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For my case above, I used this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search&lt;/strong&gt; : &lt;code&gt;'FileClient:(.+?)'&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Replace&lt;/strong&gt; : &lt;code&gt;'PenVersionFileClient:{"cpid":"$1"}'&lt;/code&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Create a rainbow-coloured list with :nth-of-type()</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Mon, 20 Feb 2023 20:03:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/create-a-rainbow-coloured-list-with-nth-of-type-3g2a</link>
      <guid>https://dev.to/rachsmith/create-a-rainbow-coloured-list-with-nth-of-type-3g2a</guid>
      <description>&lt;p&gt;This is my favourite thing to do with the &lt;code&gt;:nth-of-type()&lt;/code&gt; selector:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/yLxYwxx?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;First, you need some colour values. I like to store them in &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties" rel="noopener noreferrer"&gt;CSS custom properties&lt;/a&gt; so it easy to order them the way you like later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:root {
  --red: #f21332;
  --orange: #f27225;
  --pink: #e20b88;
  --yellow: #f2ad24;
  --green: #00b249;
  --blue: #1844b5;
  --purple: #a033b3;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you want to add an &lt;code&gt;:nth-of-type&lt;/code&gt; declaration for each colour. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child#functional_notation" rel="noopener noreferrer"&gt;functional notation&lt;/a&gt; for each &lt;code&gt;:nth-of-type&lt;/code&gt; is in the format of &lt;code&gt;An+B&lt;/code&gt;, where &lt;code&gt;A&lt;/code&gt; is the total number of colours you have, and &lt;code&gt;B&lt;/code&gt; is the position of each colour. So as I have 7 colours, my functions look like &lt;code&gt;7n+1&lt;/code&gt;, &lt;code&gt;7n+2&lt;/code&gt;, &lt;code&gt;7n+3&lt;/code&gt; and so on...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;li:nth-of-type(7n + 1) {
  color: var(--red);
}

li:nth-of-type(7n + 2) {
  color: var(--orange);
}

li:nth-of-type(7n + 3) {
  color: var(--pink);
}

li:nth-of-type(7n + 4) {
  color: var(--yellow);
}

li:nth-of-type(7n + 5) {
  color: var(--green);
}

li:nth-of-type(7n + 6) {
  color: var(--blue);
}

li:nth-of-type(7n + 7) {
  color: var(--purple);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can never have too many rainbows.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rachsmith/embed/yLxYwxx?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Reading code is a different experience to writing code</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Mon, 30 Jan 2023 07:18:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/reading-code-is-a-different-experience-to-writing-code-fdj</link>
      <guid>https://dev.to/rachsmith/reading-code-is-a-different-experience-to-writing-code-fdj</guid>
      <description>&lt;p&gt;When writing code, the first thing I focus on is making it do the thing I want it to do. After that is achieved, I might end up with a large file or method. Once I reach the point where I know what the code is doing, I kind of wish it would get out of the way.&lt;/p&gt;

&lt;p&gt;Enter: abstraction. If I could take out all these lines of code and abstract them into neat little functions, I could make the main method read like a book!&lt;/p&gt;

&lt;p&gt;The CodePen Rails codebase went through an era of organising code this way, so we have many methods that look like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;new&lt;/span&gt;
    &lt;span class="vi"&gt;@new_user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
    &lt;span class="vi"&gt;@init_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'__pageType'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'signup'&lt;/span&gt;

    &lt;span class="n"&gt;set_owner&lt;/span&gt;
    &lt;span class="n"&gt;set_pay_ownable_tier&lt;/span&gt;
    &lt;span class="n"&gt;set_current_interval&lt;/span&gt;

    &lt;span class="vi"&gt;@team_user_pending_invite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;find_team_user_pending_invite&lt;/span&gt;

    &lt;span class="n"&gt;store_request_session_return_to&lt;/span&gt;

    &lt;span class="n"&gt;respond_to&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;layout: &lt;/span&gt;&lt;span class="s1"&gt;'signup-and-login'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you're the person authoring this sort of code, it is satisfying to look at. Look how neat this is; all the implementation details are tucked away in places that are not right here. I don't need to see those details because I'm confident they are doing what they should. I wrote it.&lt;/p&gt;

&lt;p&gt;When you're the person reading this code three months, nine months, or three years down the track, you can't be confident that everything is doing what it should. You can't be sure that the function names tell you everything you need to know about this code. You have to jump to their definition and see what's inside them.&lt;/p&gt;

&lt;p&gt;And when you're in a codebase that has been abstracted to high-heaven, having to "Go To Definition" up to six times before you arrive at the actual logic in a program is maddening.&lt;/p&gt;

&lt;p&gt;We've been moving our CodePen backend from Rails to Go. When I first started using Go, I found it to be &lt;a href="https://www.reddit.com/r/golang/comments/9te39s/does_anyone_else_feel_like_go_is_disgustingly/" rel="noopener noreferrer"&gt;"disgustingly verbose"&lt;/a&gt;. It seemed the "Go way" to write code was to err on the side of leaving logic "in-line" rather than abstract it to another location. &lt;a href="https://www.youtube.com/watch?v=PAAkCSZUG1c&amp;amp;t=9m28s" rel="noopener noreferrer"&gt;"A little copying is better than a little dependency."&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When working with Go, my gut reaction was to dislike having to look at all that code. I also missed all the helper functions available in JavaScript and Ruby, for doing things like finding items in arrays.&lt;/p&gt;

&lt;p&gt;However, when I returned to reading the old Rails code, I found myself &lt;em&gt;missing&lt;/em&gt; the simplicity and verbosity of the Go code. When I switched from &lt;strong&gt;code writer&lt;/strong&gt; to &lt;strong&gt;code reader&lt;/strong&gt; , clever abstractions were far less appealing, no matter how well they were named.&lt;/p&gt;

&lt;p&gt;As my experience as a developer grows, I realise that if my goal is to write clear code, I should put myself in the perspective of the person who has to come back and read the code later, whether that is a team member or myself in 6 months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/just-a-big-brain-dev/"&gt;Just a big brain developer trying to be a grug brain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.joshwcomeau.com/career/clever-code-considered-harmful/" rel="noopener noreferrer"&gt;Clever Code Considered Harmful&lt;/a&gt; by Josh Comeau&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>networking</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Remove Shorts from your YouTube Subscriptions feed with :has()</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Thu, 19 Jan 2023 15:28:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/remove-shorts-from-your-youtube-subscriptions-feed-with-has-5hg9</link>
      <guid>https://dev.to/rachsmith/remove-shorts-from-your-youtube-subscriptions-feed-with-has-5hg9</guid>
      <description>&lt;p&gt;I have nothing against short-form video content. TikTok is a lot of fun! YouTube shorts are... not it. I hate having them show up in my subscriptions feed! Today I figured out how to remove them from the feed with one line of CSS.&lt;/p&gt;

&lt;p&gt;I wanted to set &lt;code&gt;display: none&lt;/code&gt; on all items in the feed that had a child element that signified it was Short. Previously I'd have to go to JavaScript to do this sort of thing, but now we have the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:has" rel="noopener noreferrer"&gt;:has() selector&lt;/a&gt; I can do it with CSS. This means we can use a CSS-injecting extension like &lt;a href="https://chrome.google.com/webstore/detail/user-css/okpjlejfhacmgjkmknjhadmkdbcldfcb?hl=en" rel="noopener noreferrer"&gt;User CSS&lt;/a&gt; or &lt;a href="https://chrome.google.com/webstore/detail/stylebot/oiaejidbmkiecgbjeifoejpgmdaleoha?hl=en" rel="noopener noreferrer"&gt;Stylebot&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm using &lt;a href="https://arc.net/" rel="noopener noreferrer"&gt;Arc&lt;/a&gt; as my browser, which has a CSS injection feature built-in via Style Boosts.&lt;/p&gt;

&lt;p&gt;Here's the CSS to add to your extension (or Boost if you're using Arc ) to hide all the Shorts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update: &lt;a href="https://fosstodon.org/@healsdata/109719116763728009" rel="noopener noreferrer"&gt;Jon Campbell&lt;/a&gt; pointed out the snippet I had here doesn't work on grid view of the subscriptions page, only the list view.&lt;/strong&gt; I've updated it so shorts are hidden on both views. To get a snippet that hid the correct things on list view &lt;em&gt;without&lt;/em&gt; breaking grid view needed a combination of &lt;code&gt;:not()&lt;/code&gt; and &lt;code&gt;:has()&lt;/code&gt;. I've definitely learned some things about &lt;code&gt;:has()&lt;/code&gt; during this process!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Grid View */&lt;/span&gt;
&lt;span class="nf"&gt;#items&lt;/span&gt;&lt;span class="nc"&gt;.ytd-grid-renderer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;ytd-grid-video-renderer&lt;/span&gt;&lt;span class="nd"&gt;:has&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ytd-thumbnail-overlay-time-status-renderer&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;overlay-style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"SHORTS"&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* List View */&lt;/span&gt;
&lt;span class="nt"&gt;ytd-item-section-renderer&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;:has&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ytd-grid-renderer&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="nd"&gt;:has&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;ytd-thumbnail-overlay-time-status-renderer&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;overlay-style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"SHORTS"&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt; 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hooray for the &lt;a href="https://daverupert.com/2022/09/patchability-of-the-open-web/" rel="noopener noreferrer"&gt;patchability of the Web&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Learning in public isn't so easy when you're buried by layers of engineering</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Wed, 18 Jan 2023 20:15:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/learning-in-public-isnt-so-easy-when-youre-buried-by-layers-of-engineering-2o1o</link>
      <guid>https://dev.to/rachsmith/learning-in-public-isnt-so-easy-when-youre-buried-by-layers-of-engineering-2o1o</guid>
      <description>&lt;p&gt;I've come to appreciate that unless you're a full-time content creator who can devote hours to polishing, the only way to publish regularly is by embracing the approach of "&lt;a href="https://notes.andymatuschak.org/Work_with_the_garage_door_up" rel="noopener noreferrer"&gt;working with the garage door up&lt;/a&gt;" or "&lt;a href="https://www.swyx.io/learn-in-public/" rel="noopener noreferrer"&gt;learning in public&lt;/a&gt;". &lt;a href="https://dev.to/thoughts-on-show-your-work-by-austin-kleon/"&gt;Show Your Work!&lt;/a&gt; as &lt;a href="http://austinkleon.com/" rel="noopener noreferrer"&gt;Austin Kleon&lt;/a&gt; says.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary.cambridge.org/dictionary/english/til" rel="noopener noreferrer"&gt;TIL&lt;/a&gt;-style posts about what you've been working on are a great type of content for your developer blog. And if your work is straightforward enough, the writing is straightforward enough too. A CSS developer could share how they use a new language feature. A UI developer could share their opinions on a React component pattern.&lt;/p&gt;

&lt;p&gt;But as the scope and complexity of your role grows, the harder it is to write something about your day. At least this is how I've experienced it.&lt;/p&gt;

&lt;p&gt;Take one of my work days recently. I was struggling with something and thought writing a note about it might help. The problem was that the "something" was generating &lt;a href="https://www.typescriptlang.org" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt; types from &lt;a href="https://graphql.org" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; files using &lt;a href="https://the-guild.dev/graphql/codegen" rel="noopener noreferrer"&gt;GraphQL Code Generator&lt;/a&gt; in a &lt;a href="https://nextjs.org" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; project using a custom &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;webpack&lt;/a&gt; config, that lives in a &lt;a href="https://en.wikipedia.org/wiki/Monorepo" rel="noopener noreferrer"&gt;monorepo&lt;/a&gt; powered by &lt;a href="http://www.lerna.com.au/" rel="noopener noreferrer"&gt;Lerna&lt;/a&gt;. There were ...seven tools or technologies in that sentence. My potential note is niched down so hard, it feels like there is maybe one other person in the world who can relate. His name is Geoff and chances are he's not reading this site&lt;sup id="fnref1"&gt;1&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;A way to rise to this challenge is to work on the skill of abstracting something more generic/simple from your complex work situation. A "minimal, reproducible example" via blog post if you will. &lt;a href="https://chriscoyier.net/" rel="noopener noreferrer"&gt;Chris Coyier&lt;/a&gt; is good at this, turning what is &lt;em&gt;layered&lt;/em&gt; work at &lt;a href="https://codepen.io" rel="noopener noreferrer"&gt;CodePen&lt;/a&gt; into simpler hypothetical scenarios.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://chriscoyier.net/2022/11/12/personal-coding-challenge-data-validation-correction-and-default-handling/" rel="noopener noreferrer"&gt;Say you have some JSON data like this....&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or, you could turn complaining about this challenge into post content instead, as I have here.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Geoff, if you're reading, we should talk. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>blogging</category>
    </item>
    <item>
      <title>The hardest part of being a Junior Developer</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Mon, 16 Jan 2023 05:49:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/the-hardest-part-of-being-a-junior-developer-1eai</link>
      <guid>https://dev.to/rachsmith/the-hardest-part-of-being-a-junior-developer-1eai</guid>
      <description>&lt;p&gt;Even though it was 12 years ago, I still remember what the most stressful part of being a junior developer was. I was reminded of it when I saw this meme in my Twitter timeline yesterday:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xr7wq3n45jeddwu07lz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xr7wq3n45jeddwu07lz.jpg" alt="The " width="503" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my first developer job, I had no previous experience - just some basic front-end coding and design classes at Uni. I had been hired by an advertising agency to animate flash banners and code marketing emails. The work atmosphere was fast-paced but I enjoyed the challenge. There was a lot to learn but I was loving everything I was learning. A lot of the people who worked there - 'ad people' were intense personalities but I grew used to working with them.&lt;/p&gt;

&lt;p&gt;I loved that job, and couldn't believe I was being paid more to do it than in any hospitality role I had worked prior. There was just one part that stressed me out: knowing how long I should work on figuring out something by myself vs. asking for help. I had no context for how long anything should take. I didn't want to be judged harshly for asking too many dumb questions, but I also didn't want to appear to be slow. I had the added pressure of feeling like I was &lt;a href="https://xkcd.com/385/" rel="noopener noreferrer"&gt;representing my entire gender&lt;/a&gt; with my performance.&lt;/p&gt;

&lt;p&gt;My manager at the time must have noticed my anxiety around this, and he did a wonderful thing. He made the timing aspect of it super explicit for me. He would do things like give me my next task and then say "try and get this done, if at any point you have spent an hour without making any progress, come and ask for help". Then I knew how long was too long to spin my wheels on something on my own. Most of the time, I could keep figuring things out on my own, but when I couldn't I could approach my manager without worrying whether I was bothering him "too soon".&lt;/p&gt;

&lt;p&gt;By the time I moved on from that job, with the help of that manager, I had enough experience to be able to judge when it is time to ask for help on something and didn't have to worry about it again.&lt;/p&gt;

&lt;p&gt;As I've always worked on small teams, I haven't had the opportunity to manage a green developer that needs a lot of direction. But I thought I would just share this in case it is useful to anyone who does. Try and be very specific when you share your expectations around timing, it might help them out. It certainly helped me.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Don't want to fix that bug? Here are 6 things you can do instead</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Sat, 07 Jan 2023 19:52:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/dont-want-to-fix-that-bug-here-are-6-things-you-can-do-instead-4kc5</link>
      <guid>https://dev.to/rachsmith/dont-want-to-fix-that-bug-here-are-6-things-you-can-do-instead-4kc5</guid>
      <description>&lt;p&gt;Look, coding is hard. Every time you start to solve a problem or fix a bug you run the risk of not being able to do it and then feeling like you aren't as smart as you thought you were. That sucks! Here are some things you can do instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a new font for your IDE
&lt;/h2&gt;

&lt;p&gt;My paid favourites are &lt;a href="https://berkeleygraphics.com/typefaces/berkeley-mono/" rel="noopener noreferrer"&gt;Berkeley Mono&lt;/a&gt;, &lt;a href="https://www.typography.com/fonts/operator/styles" rel="noopener noreferrer"&gt;Operator Mono&lt;/a&gt; and &lt;a href="https://philpl.gumroad.com/l/dank-mono" rel="noopener noreferrer"&gt;Dank Mono&lt;/a&gt;. But there is a whole set of &lt;a href="https://fonts.google.com/?category=Monospace" rel="noopener noreferrer"&gt;free monospace fonts&lt;/a&gt; on Google Fonts that you can try out, one by one until you find one you like, or don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Change your terminal
&lt;/h2&gt;

&lt;p&gt;I've heard &lt;a href="https://www.warp.dev/" rel="noopener noreferrer"&gt;warp&lt;/a&gt; is good?&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a new theme for your IDE
&lt;/h2&gt;

&lt;p&gt;Some of my favourites: &lt;a href="https://marketplace.visualstudio.com/items?itemName=atomiks.moonlight" rel="noopener noreferrer"&gt;Moonlight II&lt;/a&gt;, &lt;a href="https://marketplace.visualstudio.com/items?itemName=sdras.inbedby7pm" rel="noopener noreferrer"&gt;In Bed By 7pm&lt;/a&gt; and &lt;a href="https://marketplace.visualstudio.com/items?itemName=astro-build.houston" rel="noopener noreferrer"&gt;Houston&lt;/a&gt;. But there are &lt;a href="https://vscodethemes.com/" rel="noopener noreferrer"&gt;hundreds&lt;/a&gt; (thousands?) of options to choose from. Try them out. Use each for half an hour before you decide to change back to the same one you've had for the last 3 years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide you're going to learn all the keyboard shortcuts in VSCode
&lt;/h2&gt;

&lt;p&gt;Pretend you're improving your productivity when you're actually procrastinating! Check out the &lt;a href="https://code.visualstudio.com/docs/getstarted/keybindings" rel="noopener noreferrer"&gt;Keybindings reference&lt;/a&gt; or if you're too lazy for that, watch some videos on people's&lt;a href="https://www.youtube.com/watch?v=4xA5JePvCJc" rel="noopener noreferrer"&gt;favourite VSCode shortcuts&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buy a new keyboard
&lt;/h2&gt;

&lt;p&gt;Your code is going to be so much better when you have the ultimate keyboard. Research is important so make sure you head back to YouTube to find out &lt;a href="https://www.youtube.com/watch?v=wmQt-QM0mbQ&amp;amp;t=1s" rel="noopener noreferrer"&gt;which is the best&lt;/a&gt;. Now instead of doing the work that makes you money, you are spending money. Amazing!&lt;/p&gt;

&lt;h2&gt;
  
  
  Redesign your personal website
&lt;/h2&gt;

&lt;p&gt;I mean it has been at least 6 months since you overhauled it. And the fact it doesn't include a dark/light theme switcher is frankly, embarrassing. Check out &lt;a href="https://personalsit.es/" rel="noopener noreferrer"&gt;other people's sites&lt;/a&gt; for some inspo. Bonus: you can go back to Google Fonts!&lt;/p&gt;

</description>
      <category>work</category>
      <category>procrastination</category>
    </item>
    <item>
      <title>How Supabase fits into your stack</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Fri, 09 Dec 2022 09:20:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/how-supabase-fits-into-your-stack-3a6k</link>
      <guid>https://dev.to/rachsmith/how-supabase-fits-into-your-stack-3a6k</guid>
      <description>&lt;p&gt;Recently I considered replacing the &lt;a href="https://www.talkyard.io/" rel="noopener noreferrer"&gt;Talkyard&lt;/a&gt; comments solution on my notes here with something I've built myself. To do that I need a database. I was looking at different Postgres hosting options when I recalled I had seen buzz from developers on Twitter about &lt;a href="https://supabase.com/" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;. I wondered if that could be my database host?&lt;/p&gt;

&lt;p&gt;Supabase's tagline starts with "&lt;em&gt;Supabase is an open source Firebase alternative.&lt;/em&gt;" That didn't tell me much because it has been years since I used &lt;a href="https://firebase.google.com/" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt; and I could barely remember how it worked or what it offered. I've done some reading of the Supabase docs and thought I would share my understanding of how Supabase can help on a new project.&lt;/p&gt;

&lt;p&gt;When I think about how a website or app is set up, it looks something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The server renders the page.&lt;/li&gt;
&lt;li&gt;The client sends subsequent requests to a back-end application on the server.&lt;/li&gt;
&lt;li&gt;The application connects to a database and retrieves/writes data, and returns a response to the client.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or, in the case of this particular project I was designing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;a href="https://docs.astro.build/en/guides/server-side-rendering/" rel="noopener noreferrer"&gt;Astro SSR&lt;/a&gt; page is rendered via a &lt;a href="https://docs.netlify.com/functions/overview/" rel="noopener noreferrer"&gt;Netlify function&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The client sends subsequent requests to an API provided by a Netlify function.&lt;/li&gt;
&lt;li&gt;The serverless function code connects to a database and retrieves/writes data, and returns a response to the client.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In both cases, it's the same client -&amp;gt; server -&amp;gt; DB flow, except serverless functions are standing in for an app on a server in the second case.&lt;/p&gt;

&lt;p&gt;I was looking for something to fulfill the database section of that design, and Supabase does provide Postgres DB hosting, but it is also trying to remove the need for you to code a server-side application to control the flow of data in your project. You can write code on the client that interfaces directly with the database via the &lt;a href="https://supabase.com/docs/guides/api#rest-api-overview" rel="noopener noreferrer"&gt;API&lt;/a&gt; provided by Supabase.&lt;/p&gt;

&lt;p&gt;When I saw that the flow of information in a Supabase Project goes from client to DB (via a thin ready-made API layer), my first thought was, what about authentication? Don't you need to write server-side code to make sure the person who is sending the data is allowed to put that in the database? Supabase allows you to set &lt;a href="https://supabase.com/docs/guides/auth/row-level-security" rel="noopener noreferrer"&gt;policies&lt;/a&gt; on DB table rows so you can control access to reading, creating, updating and deleting rows on tables.&lt;/p&gt;

&lt;p&gt;On the subject of authentication... one of the features of the Supabase JS client is that it provides shortcuts to building "Sign Up and Log In" solutions for your app. That's pretty cool as most apps require user authentication and it is a tedious thing to get right when you're coding it from scratch.&lt;/p&gt;

&lt;p&gt;Anyway, I think I will use Supabase as the DB solution for my new project. Even if I don't go all-in on client-side functionality with the &lt;a href="https://supabase.com/docs/reference/javascript" rel="noopener noreferrer"&gt;Supabase JS client&lt;/a&gt; (I'm trying to make progressive enhancement a priority), I can use their REST APIs with Astro SSR functionality. It still looks like an easy enough (and affordable) option for adding a Postgres database to my project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can't you hear that&lt;br&gt;&lt;br&gt;
Boom, badoom, boom, boom, badoom, boom, bass?&lt;br&gt;&lt;br&gt;
&lt;a href="%5Bhttps://genius.com/26716640/Nicki-minaj-super-bass/He-got-that-super-bass%5D(https://www.youtube.com/watch?v=4JipHEz53sU)"&gt;He got that super bass&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Thanks for reading this post via RSS! Let me know your thoughts by leaving a comment on the &lt;a href="https://rachsmith.com/how-supabase-fits-in-to-your-stack" rel="noopener noreferrer"&gt;original post&lt;/a&gt;, send &lt;a href="//mailto:contact@rachsmith.com?subject=re%3A%20How%20Supabase%20fits%20into%20your%20stack"&gt;me an email&lt;/a&gt;, or &lt;a href="https://twitter.com/intent/tweet?screen_name=rachsmithtweets&amp;amp;text=re%3A%20https%3A%2F%2Frachsmith.com%2Fhow-supabase-fits-in-to-your-stack" rel="noopener noreferrer"&gt;Tweet at me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>database</category>
      <category>supabase</category>
    </item>
    <item>
      <title>Do what you say you're going to do</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Wed, 23 Nov 2022 09:28:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/do-what-you-say-youre-going-to-do-22nc</link>
      <guid>https://dev.to/rachsmith/do-what-you-say-youre-going-to-do-22nc</guid>
      <description>&lt;p&gt;If you want to impress people you work with/for, do what you say you're going to do. Be reliable and deliver what you have promised (almost) every time.&lt;/p&gt;

&lt;p&gt;The key to achieving this isn't to hustle and crush it week upon week - It's becoming adept at managing expectations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Do what you say you're going to do&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
can also be phrased as:&lt;br&gt;&lt;br&gt;
&lt;em&gt;Only say you're going to do something you know you can do&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;People get this backwards and think that other people are impressed by how much work they promise or intend to do. They are not. They remember what you delivered, or annoyingly, what you failed to deliver.&lt;/p&gt;

&lt;p&gt;CodePen has a flat structure. We define our goals as a team but the individual work people do on a day-to-day basis is self-directed. Each week we have a meeting where we essentially commit to doing something in the following week. I am conservative with my commitments. I leave space for hitting a roadblock or two at work or a daycare emergency at home. Why? So I can show up the following week and say I did what I said I was going to do.&lt;/p&gt;

&lt;p&gt;What if you're not sure if you can do something, but you'd like to give it a try? Communicate that. I use these words &lt;em&gt;all the time&lt;/em&gt; in discussions with my coworkers: "I'm not sure if that is possible, but I'll try to make it happen". Then after I'll either report that I made it work or explain how I tried to make it work. I promised to try. I delivered on my promise.&lt;/p&gt;

</description>
      <category>work</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Moving from problem adder to problem solver</title>
      <dc:creator>Rach Smith</dc:creator>
      <pubDate>Sat, 19 Nov 2022 07:00:00 +0000</pubDate>
      <link>https://dev.to/rachsmith/moving-from-problem-adder-to-problem-solver-4din</link>
      <guid>https://dev.to/rachsmith/moving-from-problem-adder-to-problem-solver-4din</guid>
      <description>&lt;p&gt;From one of &lt;a href="https://jamesclear.com/3-2-1/october-13-2022" rel="noopener noreferrer"&gt;James Clear's newsletters&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One type of person approaches a situation with the mindset of, “How can I make this work?” Another type seems to approach each circumstance with the mindset of, “What are all the reasons this wouldn’t work?”&lt;/p&gt;

&lt;p&gt;Both people will be forced to deal with reality, but the first person will only have to solve problems that actually occur while the second person will often avoid taking action entirely because of the potential problems they have dreamt up before starting.&lt;/p&gt;

&lt;p&gt;There will always be reasons to not do something. Be a problem solver, not a problem adder."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, sorting all people into two buckets like this is nonsense, that's not how humans work. But I think people fall on a spectrum from "problem adder" to "problem solver".&lt;/p&gt;

&lt;p&gt;My natural inclination is to be a problem adder. When someone describes an idea to me my mind immediately goes to the 15 reasons why it wouldn't work. It is just how I'm wired. I'm always willing to give things a try and attempt to solve the problems of course, but I can't help but be aware of them.&lt;/p&gt;

&lt;p&gt;Enter my boss: founder of CodePen Alex Vazquez. Alex is at the opposite end of the spectrum. He is an incredibly optimistic and ambitious problem solver. We used to have conversations where he'd describe his ideas to me and I would start listing off the reasons it may not be possible. He'd say: "forget about that, assume all that is solved". &lt;em&gt;Excuse me? Just assume these problems are solved?!&lt;/em&gt; This was nonsensical to me.&lt;/p&gt;

&lt;p&gt;Over time and many conversations, and us reaching the outlandish goals he'd set, I saw the real value in being a problem solver. I stopped thinking so much about all the reasons why something wouldn't work and instead started assuming we could solve them. Even better, Alex taught me how to look for ways to remove the problems altogether. Instead of thinking "what could go wrong" I am now more likely to think "what if it were easy? how would that work?".&lt;/p&gt;

</description>
      <category>work</category>
    </item>
  </channel>
</rss>
