<?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: Brittany Joiner</title>
    <description>The latest articles on DEV Community by Brittany Joiner (@britt_joiner).</description>
    <link>https://dev.to/britt_joiner</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%2F216759%2Fe2194262-f679-4bfb-87fb-7b4c82687357.jpg</url>
      <title>DEV Community: Brittany Joiner</title>
      <link>https://dev.to/britt_joiner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/britt_joiner"/>
    <language>en</language>
    <item>
      <title>Check for pridewashing with AI and PixieBrix</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Wed, 28 Jun 2023 21:45:22 +0000</pubDate>
      <link>https://dev.to/britt_joiner/check-for-pridewashing-with-ai-and-pixiebrix-59lj</link>
      <guid>https://dev.to/britt_joiner/check-for-pridewashing-with-ai-and-pixiebrix-59lj</guid>
      <description>&lt;p&gt;Ah, it's the time of year that every company has decided to come up with some sort of campaign or brand image that says "WE LOVE LGBQT+ FOLKS". 🙃&lt;/p&gt;

&lt;p&gt;But sometimes those same companies have no history of &lt;em&gt;actually&lt;/em&gt; supporting the queer community. Support is way more than slapping a rainbow on your logo or offering pride swag. It's about using your influence as a business to push for supportive legislation, using profits to help causes that support the community, and providing an inclusive place for your customers, users, and employees. &lt;/p&gt;

&lt;p&gt;Although I'm a sucker for anything with a rainbow on it, I've been thinking about ways to make sure I'm not subject to "pridewashing". That's what it's called when a company or organization using Pride-themed marketing or messaging without actively supporting or advocating for the LGBTQ+ community.&lt;/p&gt;

&lt;p&gt;Using PixieBrix + OpenAI, I created a tool that helps me check for pridewashing on websites that I use. And I plan to use this not just in June, but as part of my regular online shopping routine!&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;My new mod (that's what we call automations built with PixieBrix) grabs the name of the company of the current webpage you're on and asks ChatGPT if they support LGBTQ+ causes and communities. It then returns a response with an invitation to search and learn more with just a click. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kuj7rgIM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wse360aatjscpf2etg0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kuj7rgIM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wse360aatjscpf2etg0.gif" alt="Demo of how it works" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's break it down.
&lt;/h3&gt;

&lt;p&gt;Right click on any webpage and select a button to &lt;strong&gt;Check for pridewashing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aiaLBVCh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9b7mhgod5zsvqbhqrp0l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aiaLBVCh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9b7mhgod5zsvqbhqrp0l.png" alt="Context menu" width="554" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An alert appears letting you know that PixieBrix is asking ChatGPT to look up the company. &lt;/p&gt;

&lt;p&gt;After a few seconds, a sidebar appears on the page, with more details and an explanation about anything the company has done to support the LGBTQ+ community. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hv42z1XE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yuambksvllshiytksvom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hv42z1XE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yuambksvllshiytksvom.png" alt="Sidebar" width="571" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember - this is AI, and it's NOT always accurate. So do not rely solely on the results, but let this start your research!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Below the explanation, you'll see a button to continue your research.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OpCNwP8r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2kdv8ai450b2qi7vk1mc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OpCNwP8r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2kdv8ai450b2qi7vk1mc.png" alt="Button to continue research" width="550" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking the button takes you to Google results about things that company has done to support the LGBQT+ community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2QJy7KI2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8uj4teo9916s8o1iochf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2QJy7KI2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8uj4teo9916s8o1iochf.png" alt="Research button" width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's simple, but it helps me be more aware of the companies I'm engaging with.&lt;/p&gt;

&lt;p&gt;If you want to try it out, you can &lt;a href="https://www.pixiebrix.com/marketplace/ada1dc95-c0fe-4aa8-9ab3-178ef24a96fa/check-for-pridewashing/?utm_medium=guest-blog&amp;amp;utm_source=britt&amp;amp;utm_campaign=devto-pride"&gt;activate it here&lt;/a&gt;. But if you're wanting to know how this works and how you can build something similar, here's how I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built this mod with PixieBrix, a browser based automation tool. It allows you to create automations built by small functions called "Bricks". Piecing together a couple actions, I'm able to make this whole workflow!&lt;/p&gt;

&lt;p&gt;If you want to follow along, here's how to do it. &lt;em&gt;Comment if you get stuck and I'll be monitoring to help!&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;a href="https://app.pixiebrix.com/?utm_medium=guest-blog&amp;amp;utm_source=britt&amp;amp;utm_campaign=devto-pride"&gt;free PixieBrix account&lt;/a&gt;. &lt;em&gt;(You'll be prompted to add the PixieBrix Chrome Extension as you sign up.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Right click on any page, click &lt;strong&gt;Inspect&lt;/strong&gt;, and then select the &lt;strong&gt;PixieBrix&lt;/strong&gt; tab to open the Page Editor. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_TPUIYLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hkrd1m1hm82za5sa3lqa.png" alt="Chrome dev console" width="800" height="398"&gt;
&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Add&lt;/strong&gt; button in the top left of the panel, and select how you want to trigger your mod (&lt;em&gt;we call these starter bricks&lt;/em&gt;. In my case, I used Context Menu but you could use Quick Bar or a Sidebar panel.&lt;/li&gt;
&lt;li&gt;Configure the starter brick buy giving it a name and a title &lt;em&gt;(this is the caption that appears in the context menu)&lt;/em&gt;. Lastly, scroll to the Sites section and click &lt;strong&gt;All URLs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click the + button in the middle panel to add another brick. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7kQ2i0sE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ghtt19v9v9k9v82dw5zj.png" alt="Brick actions panel" width="276" height="248"&gt;
&lt;/li&gt;
&lt;li&gt;Search for ChatGPT and select the &lt;strong&gt;Create a Chat Response with ChatGPT&lt;/strong&gt; brick. Click the blue &lt;strong&gt;Add&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;Now time to configure your prompt brick! I started with a prompt to ask it to tell me the name of the company based on the URL. It looks like this. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--upNPkbpc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o3g3osh0d44gusj5jz7h.png" alt="Configuring chatGPT brick in PixieBrix" width="642" height="562"&gt;
&lt;/li&gt;
&lt;li&gt;Next, I'm going to make another prompt that asks ChatGPT to research the company. You can duplicate the previous brick &lt;em&gt;(click the copy button at the top of brick panel to the right of &lt;strong&gt;Brick Actions&lt;/strong&gt;.)&lt;/em&gt; Here's the prompt I used. Feel free to adjust it!
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;you are a system that analyzes a company and determines if they are helping folks in the LGBQT+ community.  You will research a company to see if they have ever donated to any LGBQTQ causes. You will also research to see if they've ever supported any pro-LGBQT+ legislation. You'll also research if they've ever done anything to hurt the LGBQT+ community.


Please research {{@getCompany.choices[0].message.content}}. 

Based on your research, are they supportive of the LGBQT+ community? Please respond with a Yes or No, and an explanation. You can only cite information you know to be true, do not make up information about the company.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scroll down to turn the temperature down. I changed it to .5 because I don't want it to make up information.&lt;/p&gt;

&lt;p&gt;You're nearly done! Now it's about styling and referencing information from our bricks.&lt;/p&gt;

&lt;p&gt;Add the &lt;strong&gt;Display Temporary Information&lt;/strong&gt; brick. This allows you to create a sidebar panel to display the response from OpenAI. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o4V23Tgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ofbg38mecwgahq992tkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o4V23Tgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ofbg38mecwgahq992tkv.png" alt="How to use the editor for the Display Temporary Information" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll need to tinker around with the Render Document brick a bit depending on what you'd like it to do. If you're interested in building with PixieBrix, best to get started with a &lt;a href="https://docs.pixiebrix.com/tutorials"&gt;tutorial&lt;/a&gt; or join the &lt;a href="https://slack.pixiebrix.com/"&gt;Slack Community&lt;/a&gt; and get support!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Else You Can Build with PixieBrix + OpenAI
&lt;/h2&gt;

&lt;p&gt;I walked you through one example, but explore the bricks as you're building and you'll see there's a million different kind of things you can build. For instance, you could build a mod that recommends LGBQT+ causes for you to donate to whenever you spend money. &lt;/p&gt;

&lt;p&gt;You could use the Fetch Google Search Results to show recent news about a company in the sidebar, without even opening a new tab to go to Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  Oh no... is this all pridewashing?
&lt;/h2&gt;

&lt;p&gt;And just in case you're wondering... how does Dev.to support the LGBQT+ community? The #devpride tag is &lt;a href="https://dev.to/devteam/share-your-expertise-stories-with-devpride-this-pride-month-39mc"&gt;amplifying posts by queer authors&lt;/a&gt; to help their voices get past the algorithm this month. Last year they promoted some &lt;a href="https://dev.to/devteam/happy-lgbtqia-pride-month-1j7b"&gt;special groups for LGBTQ+ folks in tech to join&lt;/a&gt;, my favorite being &lt;a href="https://outintech.com/"&gt;Out in Tech&lt;/a&gt;, a community I joined in the last year that has led to new friends, more connections, and a lot of support and joy!&lt;/p&gt;

&lt;p&gt;And how does PixieBrix support the LGBQT+ community? Well, for a small team, we have a high percentage of LGBTQ+ members on our team, over 25%! Rather than simply saying "we're inclusive", we actually do something about it by offering competitive pay and creating a safe workspace that brings in talent, regardless of identity. We didn't switch our logo, or create any rainbow swag this year though... &lt;/p&gt;

</description>
      <category>devpride</category>
      <category>lowcode</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I used the Courier API to send secret morse code messages!</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Wed, 31 Aug 2022 18:15:22 +0000</pubDate>
      <link>https://dev.to/britt_joiner/i-used-the-courier-api-to-send-secret-morse-code-messages-4m7c</link>
      <guid>https://dev.to/britt_joiner/i-used-the-courier-api-to-send-secret-morse-code-messages-4m7c</guid>
      <description>&lt;p&gt;I followed along with this &lt;a href="https://dev.to/shreythecray/nodejs-tutorial-sending-secret-messages-with-the-courier-api-n64"&gt;amazing tutorial from the Courier team&lt;/a&gt;, and I was able to send my own secret message!&lt;/p&gt;

&lt;p&gt;I sent an email...&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z6BgtBeJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4g3ibd83zrs23108f6kz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z6BgtBeJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4g3ibd83zrs23108f6kz.png" alt="Email with secret code" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And a text!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HCyk_zV0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w35m14uzz3mh6zd4bntq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HCyk_zV0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w35m14uzz3mh6zd4bntq.png" alt="Text with secret morse code" width="624" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Video to come but wanted to share this now!)&lt;/p&gt;

&lt;p&gt;And here's my repo! &lt;a href="https://github.com/brittanyjoiner15/cascadia"&gt;https://github.com/brittanyjoiner15/cascadia&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to make an event website with Eui and React</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Thu, 25 Aug 2022 19:11:00 +0000</pubDate>
      <link>https://dev.to/britt_joiner/how-to-make-an-event-website-with-eui-30jc</link>
      <guid>https://dev.to/britt_joiner/how-to-make-an-event-website-with-eui-30jc</guid>
      <description>&lt;p&gt;I'm hosting an event for our Rainbow Stack ERG (employee resource group for LGBTQIA+ members and allies), and I wanted to make it feel like a real conference. The event is several members who have agreed to give talks about things that are meaningful to them that the rest of the group would find interesting!&lt;/p&gt;

&lt;p&gt;I'm super excited about the event and wanted to make the speakers feel special, and also use my developer skills to make it better. So, I created a single page app with multiple tabs showing information about the event, and thanks to EUI (&lt;a href="https://elastic.github.io/eui/#/"&gt;Elastic UI&lt;/a&gt;), it turned out AMAZINGLY and wasn't hard to build at all!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V4qyEdm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqd8i6qy6a0mhuiw5ti1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V4qyEdm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqd8i6qy6a0mhuiw5ti1.gif" alt="Event site with details, speakers, and talk schedule" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to check it out in action? &lt;a href="https://eui-event.vercel.app/"&gt;Here's the live version&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I wanted to share how it works, how I built it, and how you can use it too if you're hosting an event or conference!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ps - If you prefer to watch, scroll the bottom and you can watch me go through this &lt;a href="https://youtu.be/S99yqQzbhcc"&gt;in my YouTube video&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;So, yes. It renders data. Nothing too terribly fancy on that front. But I did work in a few cool things that I'm particularly proud of and hope provide utility for others. &lt;/p&gt;

&lt;h3&gt;
  
  
  Convert time to local timezone
&lt;/h3&gt;

&lt;p&gt;Use the button on the talks page to change the timezone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hg_YCDcc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxi4cucvkxng6qm02cp0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hg_YCDcc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hxi4cucvkxng6qm02cp0.gif" alt="clicking a button changes from EDT to local time zones" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was actually much easier to make than I thought it would be, thanks to &lt;a href="https://momentjs.com/timezone/"&gt;Moment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's how to implement something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const moment = require("moment-timezone");

// Get the users local timezone
const getLocalTimezone = () =&amp;gt; {
  return Intl.DateTimeFormat().resolvedOptions().timeZone;
};


export const showTime = (timestamp, checkTime) =&amp;gt; {
  let localTime = moment.tz(timestamp, getLocalTimezone());
  let estTime = moment.tz(timestamp, "America/New_York");

  // return the correctly formatted time zone by passing the state
  return checkTime ? estTime.format("h:mm a z") : localTime.format("h:mm a z");
};

```




### Create rainbow letters 


This takes a string and array of colors and creates one big span with individual spans of colorful letters!

![The words Rainbow Stack with each letter a different color](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1qav4fdw4mw40oihi0k.png)

Here's how to implement this.



```
export const makeRainbowText = () =&amp;gt; {
  const colors = [
    "#FF1616",
    "#F7B012",
    "#FFDE59",
    "#7ED957",
    "#38B6FF",
    "#CB6CE6",
    "#8C52FF",
    "",
    "#FF1616",
    "#F7B012",
    "#FFDE59",
    "#7ED957",
    "#38B6FF",
  ];
  const letters = "RAINBOW STACK".split("");
  const rainbowedLetters = letters.map((letter, index) =&amp;gt; {
    return (
      &amp;lt;span style={{ color: `${colors[index]}`, fontFamily: "Inter" }}&amp;gt;
        {letter}
      &amp;lt;/span&amp;gt;
    );
  });
  return (
    &amp;lt;span&amp;gt;
      &amp;lt;strong&amp;gt;{rainbowedLetters} SUMMIT&amp;lt;/strong&amp;gt;
    &amp;lt;/span&amp;gt;
  );
};

```




### Inject `Speaker` object details into a field in the `Talks` Array


I wanted to be able to show the speaker details, such as name and avatar, as a field on talk object, so I created a function to grab the whole speaker object by looking up the name of a speaker. 


![preview of the speaker section](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z00mg7aofj51i0qr1chw.png)

While I could have simply added the `speakerName` and `speakerAvatar` fields to each talk, that felt like way too much duplication and then if those things changed, I'd have to change in both places. This was more fun :)




```
const findSpeaker = (name) =&amp;gt; {
  return speakers[speakers.findIndex((speaker) =&amp;gt; speaker.name === name)];
};
```



And then I just use that function in my `speaker` field for each talk, which returns the whole speaker object to get what I need from it in the render.



```
  {
    sessionDate: "Sept 8th",
    sessionTime: "2022-09-08T20:00:00.000Z",
    title: "Making Color Coding Cooler",
    description:
      "We think that colors and organization isn't cool. Well, it's actually the coolest thing that ever existed.",
    genre: "Business",
    speaker: findSpeaker("Leslie Knope"),
  },
```



Here's how I reference it in the render for that field/column.



```
 {
      field: "speaker",
      name: "Speaker",
      render: (speaker) =&amp;gt; (
        &amp;lt;&amp;gt;
          &amp;lt;EuiAvatar
            imageUrl={speaker.avatar}
            size="s"
            name={speaker.name}
            className="xMargin"
          /&amp;gt;
          &amp;lt;EuiText&amp;gt;{speaker.name}&amp;lt;/EuiText&amp;gt;
        &amp;lt;/&amp;gt;
      ),
    },
```


So those are the exciting features and how it works, but here's a little more about under the hood how this site is put together. 

## How It Works

I spun up a quick site with `create-react-app`, and then [added Eui](https://elastic.github.io/eui/#/guidelines/getting-started) to it so that I can quickly access components, rather than needing to build a bunch of things out of the box. This is probably my favorite thing about Eui - there's so much built out of the box that lets me get up and running quickly, but you can easily customize so many things about it. 

### Main Page
This is my layout component:



```
&amp;lt;EuiPage paddingSize="none"&amp;gt;
      &amp;lt;EuiFlexGroup className="eui-fullHeight"&amp;gt;
        &amp;lt;EuiPageBody panelled&amp;gt;
          &amp;lt;Navbar tabs={tabs} /&amp;gt;
          &amp;lt;EuiPageContent
            hasBorder={false}
            hasShadow={false}
            paddingSize="none"
            color="transparent"
            borderRadius="none"
            verticalPosition="center"
            horizontalPosition="center"
          &amp;gt;
            &amp;lt;EuiPageContentBody&amp;gt;{showSelectedContent()}&amp;lt;/EuiPageContentBody&amp;gt;
            &amp;lt;EuiSpacer size="l" /&amp;gt;
          &amp;lt;/EuiPageContent&amp;gt;
          &amp;lt;BottomBar /&amp;gt;
        &amp;lt;/EuiPageBody&amp;gt;
      &amp;lt;/EuiFlexGroup&amp;gt;
    &amp;lt;/EuiPage&amp;gt;
```



Eui has a page component that I can add children to. I added a NavBar, made the body a panel with tabs (and details about those tabs, like content to show, ids, and `onClick` actions, which I used to set the state which then renders the correct tab content.)

### NavBar

Simple `EuiPageHeader` component that I just plug in an icon, title, and any elements I want, like buttons.



```
   &amp;lt;EuiPageHeader
        restrictWidth
        iconType={rainbowCluster}
        pageTitle={makeRainbowText()}
        rightSideItems={[
          addCalButtons(sessionTwo.dateAndTime, sessionTwo.calendarLink),
          addCalButtons(sessionOne.dateAndTime, sessionOne.calendarLink),
        ]}
        tabs={props.tabs}
      /&amp;gt;
```



I actually created my own functional component that returns a `EuiButton` when I pass a link and date. Not a very complicated function, and you could maybe argue it wasn't necessarily but since I referenced these buttons in a couple places, it felt right.



```
export const addCalButtons = (date, calendarLink) =&amp;gt; {
  return (
    &amp;lt;EuiFlexItem component="span"&amp;gt;
      &amp;lt;EuiButton
        color="accent"
        fill
        iconType="calendar"
        href={calendarLink}
        target="_blank"
      &amp;gt;
        Save the {date} session
      &amp;lt;/EuiButton&amp;gt;
    &amp;lt;/EuiFlexItem&amp;gt;
  );
};
```



Final product looks like this: 

![Navbar with logo, site title, and two buttons to add to calendar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9y6tuiwkhtlo42s66it.png)



### Panels - Event Details

This one was really straightforward! Just rendered an image as a hero, and then a `EuiEmptyPrompt`, which accepted title, description, and actions, so it was actually just what I was looking for!



```
renderMoreDetails = () =&amp;gt; {
    return (
      &amp;lt;EuiEmptyPrompt
        title={
          &amp;lt;span&amp;gt;
            Bringing Rainbow Stack members together to share ideas, learn from
            each other, and have fun together!
          &amp;lt;/span&amp;gt;
        }
        body={
          &amp;lt;EuiText&amp;gt;
            Two sessions with different talks at each one, so join both if you
            can!
          &amp;lt;/EuiText&amp;gt;
        }
        actions={[
          addCalButtons(sessionOne.dateAndTime, sessionOne.calendarLink),
          addCalButtons(sessionTwo.dateAndTime, sessionTwo.calendarLink),
        ]}
      /&amp;gt;
    );
  };
```


Then I stacked that together in a FlexGroup with the image, and viola!

![Site hero with image and dates, then description about the event and two buttons](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d70iga9rmq60cnfrid3u.png)

### Panels - Speaker Details

I used the `EuiCard` component to map through my array of speakers and return a styled version of each speaker.



```
 renderAllSpeakers() {
    return (
      &amp;lt;&amp;gt;
        {speakers.map((speaker) =&amp;gt; {
          return (
            &amp;lt;EuiFlexItem&amp;gt;
              &amp;lt;EuiCard
                aria-label={speaker.name}
                image={&amp;lt;EuiImage size="m" src={speaker.avatar}&amp;gt;&amp;lt;/EuiImage&amp;gt;}
                footer={speaker.shortBio}
                description={
                  &amp;lt;&amp;gt;
                    &amp;lt;EuiText color="success"&amp;gt;
                      &amp;lt;strong&amp;gt;{speaker.title}&amp;lt;/strong&amp;gt;
                    &amp;lt;/EuiText&amp;gt;
                    &amp;lt;EuiBadge color="primary" iconType="branch"&amp;gt;
                      {speaker.team}
                    &amp;lt;/EuiBadge&amp;gt;
                    &amp;lt;EuiBadge color="warning" iconType="globe"&amp;gt;
                      {speaker.basedIn}
                    &amp;lt;/EuiBadge&amp;gt;
                    &amp;lt;EuiBadge color="success" iconType="faceHappy"&amp;gt;
                      {speaker.pronouns}
                    &amp;lt;/EuiBadge&amp;gt;
                  &amp;lt;/&amp;gt;
                }
                title={speaker.name}
              /&amp;gt;
            &amp;lt;/EuiFlexItem&amp;gt;
          );
        })}
      &amp;lt;/&amp;gt;
    );
  }
```



I'm REALLY happy with how this turned out!


![Speaker card with name, image, description, and bio details](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4t7lk0iqbs7gwi1vs3an.png)


### Panels - Talk Details

I used the `EuiBasicTable` component to grab an array of Talks and display a row for each object in the array. 

Check out [the source code for this file](https://github.com/brittanyjoiner15/eui-event/blob/main/src/components/panels/TalksPanel.jsx) if you want to specific components I used to style specific items, as there are quite a few.

 I also added a button so you could change the timezone. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7wh5c7378p5ne0dkcykr.png)

### Bottom Bar

Lastly, I used to `EuiBottomBar` component to create a bar across the bottom that had some custom text and two different buttons.



```
        &amp;lt;EuiBottomBar position="static"&amp;gt;
          &amp;lt;EuiFlexGroup direction="row" alignItems="center"&amp;gt;
            &amp;lt;EuiFlexItem&amp;gt;
              &amp;lt;EuiText&amp;gt;
                &amp;lt;h4&amp;gt;Hosted by Elastic's Rainbow Stack ERG &amp;lt;/h4&amp;gt;
              &amp;lt;/EuiText&amp;gt;
              &amp;lt;EuiText&amp;gt;Group for LGBTQIA+ members and allies&amp;lt;/EuiText&amp;gt;
            &amp;lt;/EuiFlexItem&amp;gt;

            &amp;lt;EuiFlexItem grow={false}&amp;gt;
              &amp;lt;EuiButton color="success" fill href="#" target={"_blank"}&amp;gt;
                Sign up for updates
              &amp;lt;/EuiButton&amp;gt;
            &amp;lt;/EuiFlexItem&amp;gt;

            &amp;lt;EuiFlexItem grow={false}&amp;gt;
              &amp;lt;EuiButton color="primary" fill href="#" target={"_blank"}&amp;gt;
                Join the slack group
              &amp;lt;/EuiButton&amp;gt;
            &amp;lt;/EuiFlexItem&amp;gt;
          &amp;lt;/EuiFlexGroup&amp;gt;
        &amp;lt;/EuiBottomBar&amp;gt;
```



Nothing too fancy here, but shows the details I need with ideal "CTA"s (Calls to Action). You could use them for joining an email list or subscribing to event updates.

![Footer with text and two buttons](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u493dg8vk19x4w7gkwm1.png)

### Deploying

Once I built it and pushed it to GitHub, all I needed to do was go to [Vercel](https://vercel.com/) and hook up the repo to a project and 🎉! She's live! 

## How To Use It

Now that you know how it works, time to jump into it! Whether you want to use it, add features, or learn more about it, here's everything you need. 

- **Check out the source code**. I copied some of the code, but it's likely to change and be improved, and there's plenty of parts I left out! If you're trying to learn more about how this works or how to build a simple app, read through it all and clone the repo to get it running locally on your computer! You can view the repo at [brittanyjoiner15/eui-event](https://github.com/brittanyjoiner15/eui-event).

- **Fork and make it your own!** Want to create something like this for an event you're hosting? Just for it and customize the information to be specific to your event, speakers, and talks!


- **Contribute if you have ideas or improvements!** Have ideas on how this could be better? I do too! Please [add an issue](https://github.com/brittanyjoiner15/eui-event/issues) or if you'd like, fork the repo, then open a pull request with your changes! (Let me know if you need any help with it if you've never done that before, I know it can be intimidating at first, but I'm happy to help show you how to do that and make simple changes!)


&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/S99yqQzbhcc"&gt;
&lt;/iframe&gt;

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

&lt;/div&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>eui</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Here's My System For Tracking Progress as a Developer</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Mon, 18 Jul 2022 13:57:52 +0000</pubDate>
      <link>https://dev.to/britt_joiner/heres-my-system-for-tracking-progress-as-a-developer-434o</link>
      <guid>https://dev.to/britt_joiner/heres-my-system-for-tracking-progress-as-a-developer-434o</guid>
      <description>&lt;p&gt;Are you tracking your progress as a developer? It's not a requirement (at least in most places), but I've found it to be quite helpful. Especially when I'm trying to &lt;strong&gt;get past the imposter syndrome&lt;/strong&gt; and remember how far I've come. &lt;/p&gt;

&lt;p&gt;It's also helpful to track my progress because &lt;strong&gt;I'd like to get a promotion&lt;/strong&gt;. I bet you would too! Imagine if you could create a list of goals with your manager, and then come to them with quantifiable list of activities and tasks you completed related to those goals? Wouldn't it be a no brainer for that promotion and raise? &lt;/p&gt;

&lt;p&gt;Because of that, I built this system for helping me create &lt;strong&gt;tangible, actionable goals&lt;/strong&gt; and log progress I'm making on them to &lt;strong&gt;compile those stats in a dashboard&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I made it as simple as possible and accessible from anywhere because I knew if I had to open up another app or tool, I'd never do it. &lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/y0H-ZJy_ft0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;From anywhere I'm at, I just use a keyboard shortcut to open a sidebar in my browser with a form. I fill out any details about the task I completed and select which goal it relates to. When I submit, that task is sent to a Google Sheet, and a preview of my dashboard shows in the sidebar panel. (The dashboard is the count of total submitted tasks that relate to each goal). &lt;/p&gt;

&lt;p&gt;Below that, I see the last logged task, and a list of new tasks that I can grab and start to work on so that once I complete them, I can add them in!&lt;/p&gt;

&lt;p&gt;Want to try it out and use it for yourself? Keep reading to see how I built it. &lt;em&gt;(And comment on here if you have any questions as you try to build!)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need to get started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Google Sheet (&lt;a href="https://docs.google.com/spreadsheets/d/1_evUZHCHN8HR5UgQJnQEOAtXVIrvxHPXOjJxSxdJIH8/edit?usp=sharing"&gt;I made this template&lt;/a&gt;, but you could create your own)&lt;/li&gt;
&lt;li&gt;Free &lt;a href="https://pixiebrix.com/?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=brittany"&gt;PixieBrix&lt;/a&gt; account&lt;/li&gt;
&lt;li&gt;Task tracking tool (I prefer &lt;a href="https://trello.com/britt_joiner/recommend"&gt;Trello&lt;/a&gt;, but to each their own!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Set the goals
&lt;/h2&gt;

&lt;p&gt;You can really build this with all sorts of tools, but if you want something straightforward like I did, just grab this &lt;a href="https://docs.google.com/spreadsheets/d/1_evUZHCHN8HR5UgQJnQEOAtXVIrvxHPXOjJxSxdJIH8/edit?usp=sharing"&gt;spreadsheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Start with the first tab and do some research about what your job is and what kind of skills or areas you might need to master. Fill out the details in &lt;code&gt;Column F&lt;/code&gt; with what you find in your research. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NstzpwYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jag64m386etkdm7582j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NstzpwYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jag64m386etkdm7582j.png" alt="Gaols tab" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, fill out &lt;code&gt;Column G&lt;/code&gt; with what I like to call &lt;code&gt;tangibilized&lt;/code&gt; action items. Aka, whatever is in the column before it, create a specific, actionable goal that relates to that. &lt;/p&gt;

&lt;p&gt;For example, if you want to learn Vue, maybe create a goal of building a single page app with Vue. If you want to get better at code reviews, have a goal of doing 2 code reviews each week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Set up the dashboard
&lt;/h2&gt;

&lt;p&gt;You can ignore the middle tab in the spreadsheet for now... that's essentially just a list of logs of each task that progresses a goal. You'll do most of that work outside of the spreadsheet and get PixieBrix to fill that in for you. &lt;/p&gt;

&lt;p&gt;But head to the third tab, called &lt;code&gt;Dashboard&lt;/code&gt;. Here you'll want to rename the items in &lt;code&gt;Column A&lt;/code&gt; with short titles for the goals you just created. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ie3kC794--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9t8ey7l2yy80orbxtow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ie3kC794--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z9t8ey7l2yy80orbxtow.png" alt="Google Sheet dashboard" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The purpose of this is to be able to track each goal, and how many tasks you have that relate to that goal. If you don't make any changes, the formulas in the cells next to these titles will count how many items are in the &lt;code&gt;Relevant Tasks&lt;/code&gt; tab that relate to each goal.&lt;/p&gt;

&lt;p&gt;Here's the formula if you're curious:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNTIF('Relevant Tasks'!B:B,A4)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's not so important what you name these short titles at the moment, but it WILL BE important to make sure that you use the exact same short title in your dropdown field on your PixieBrix form. But don't worry - we'll get to that!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 : Make a form to log progress and a way to view stats from any tab
&lt;/h2&gt;

&lt;p&gt;Okay you've got your log, now you're ready to break out PixieBrix and build a form and a sidebar panel!&lt;/p&gt;

&lt;p&gt;If you've never used PixieBrix before, you'll need to create an account and add the Chrome Extension. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Don't worry, it's totally free, and the best part is, you can build all sorts of cool stuff with it besides just this extension. (You can see tutorials and demos of all the things I've built with PixieBrix in my &lt;a href="https://www.youtube.com/playlist?list=PLEf3bvtcLTpgK21WUqoqelMLwrZoa11pu"&gt;PixieBrix YouTube playlist&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you're all set up, you're ready to start building. &lt;/p&gt;

&lt;p&gt;Prefer to watch? Here's a video.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Y4PVoArz0pI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Want to read the steps while you watch? Keep going!&lt;/p&gt;

&lt;h3&gt;
  
  
  Open up the page editor
&lt;/h3&gt;

&lt;p&gt;From anywhere in Chrome, right click on a page and click "Inspect" to open up the Inspector. Notice you will have a new tab called &lt;code&gt;PixieBrix&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yoGd_MzF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/du4rcng7qxopq13se1vn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yoGd_MzF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/du4rcng7qxopq13se1vn.png" alt="PixieBrix Page Editor" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select that to start building your extension.&lt;/p&gt;

&lt;p&gt;We'll technically need two. Let's start by building the preview panel that shows the dashboard from the Google sheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Click "add" and sidebar panel
&lt;/h3&gt;

&lt;p&gt;In the top left of the page editor, you'll see an option for adding a new extension. We want a sidebar, so click that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xJpCKZWA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pnhya95ja15wqk7oku0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xJpCKZWA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pnhya95ja15wqk7oku0.png" alt="PixieBrix sidebar panel add button" width="670" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add a brick in the render document section
&lt;/h3&gt;

&lt;p&gt;Go to the "Render document" brick, and look at the preview on the right side. Select the three dots in the element that holds the text and then choose "Brick". Just like this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3EeYHmDe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qn8e7l2fpyjs9n1ms4lf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3EeYHmDe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qn8e7l2fpyjs9n1ms4lf.gif" alt="Add a brick to render" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add an iframe to the brick
&lt;/h2&gt;

&lt;p&gt;Now you see on the left something that says &lt;code&gt;brick&lt;/code&gt; just under the &lt;code&gt;Render Document&lt;/code&gt; item. Click the + button just below &lt;code&gt;brick&lt;/code&gt; and search for &lt;code&gt;iframe&lt;/code&gt;. Click &lt;code&gt;Add&lt;/code&gt; and that brick is now inserted into your renderer. &lt;/p&gt;

&lt;p&gt;Just configure the iframe with the embed link for your Google Sheet. (Here's how to &lt;a href="https://support.google.com/docs/answer/183965?hl=en&amp;amp;co=GENIE.Platform%3DDesktop"&gt;create an embed link for your Google doc&lt;/a&gt; if you're curious.)&lt;/p&gt;

&lt;p&gt;Once, you're done, it should look something like this, and you should be able to see it in your browser when you click &lt;code&gt;Render Panel&lt;/code&gt; in your extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G83WDnLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qh4ikn1j7wadirjrfei8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G83WDnLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qh4ikn1j7wadirjrfei8.png" alt="Preview of iframe" width="800" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Step&lt;/strong&gt; &lt;br&gt;
I'm going to keep this written explanation a little bit bare bones, but if you are following along in the video, you'll see I actually also add another section to the document, with another brick for getting data from PixieBrix and rendering that. &lt;/p&gt;

&lt;p&gt;It's a way to show the last logged task. If you're not worried about seeing it, you can skip this part! &lt;/p&gt;

&lt;p&gt;Click the three dots to add a text element and you can add a header then choose the options to style it as you please, like with colored text, italics, etc.&lt;/p&gt;

&lt;p&gt;Next, you'll just need to a brick called &lt;code&gt;Get data from PixieBrix database&lt;/code&gt; and search for the key that you will define in your form brick. &lt;em&gt;(I called mine &lt;code&gt;mostRecent&lt;/code&gt;.)&lt;/em&gt; You'll also need to create a database if you haven't already. I just called mine &lt;code&gt;Achievements&lt;/code&gt;. Doesn't really matter what you name these, but you'll want to remember it for the next extension where we push data here on form submit. &lt;/p&gt;

&lt;p&gt;Next, you'll add the &lt;code&gt;Render markdown&lt;/code&gt; brick to format the data in a more readable way. &lt;/p&gt;

&lt;p&gt;Here's what you'll copy and paste into that brick, assuming you've set everything up the way that I did in the video. Note - if something doesn't work, follow the trail and check that your outputs are named correctly!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{@transformed5.data.name}}, _completed on_ {{@transformed5.data.date}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Should look like this, depending on what you name your fields in the form that we'll create in the next extension.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uEgbXUTH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50euyy3ma5xi4ekybnjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uEgbXUTH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50euyy3ma5xi4ekybnjj.png" alt="Example of render markdown brick" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not going to show any data because we haven't pushed anything to that database yet. If you're having trouble, you might need to change the &lt;code&gt;Missing Behavior&lt;/code&gt; to &lt;code&gt;blank&lt;/code&gt; instead of &lt;code&gt;error&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;
  
  
  Create another extension by clicking "add" then choose the Quick Bar option
&lt;/h3&gt;

&lt;p&gt;I prefer to use the quickbar because it means I can trigger actions happening with a keyboard shortcut that opens a list of commands. In this case, I want to open up a sidebar panel with a form. &lt;/p&gt;

&lt;p&gt;You can configure this &lt;code&gt;Quick Bar&lt;/code&gt; brick pretty much however you like - this is just naming and styling.&lt;/p&gt;

&lt;p&gt;Next, add a brick called &lt;code&gt;Show sidebar&lt;/code&gt;. This tells PixieBrix to open a sidebar when you trigger this action. I set the &lt;code&gt;panelHeading&lt;/code&gt; to &lt;code&gt;Log&lt;/code&gt; so that it creates its own sidebar panel with the form. &lt;/p&gt;
&lt;h3&gt;
  
  
  Time to build the form
&lt;/h3&gt;

&lt;p&gt;Now add another brick called &lt;code&gt;Show a modal or sidebar form&lt;/code&gt;. This a brick that you just configure the form for how you want it to look. If you're pairing it with the spreadsheet above, I recommend adding the following fields (and field types): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;title/name of task (single line text)&lt;/li&gt;
&lt;li&gt;goal it was related to (dropdown)&lt;/li&gt;
&lt;li&gt;notes (paragraph text)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The other important thing to configure is the &lt;code&gt;Location&lt;/code&gt; field just below the form fields. &lt;strong&gt;Make sure you set it to &lt;code&gt;sidebar&lt;/code&gt;&lt;/strong&gt; instead of &lt;code&gt;modal&lt;/code&gt;. &lt;/p&gt;
&lt;h3&gt;
  
  
  Get a timestamp, then send to Google Sheets and PixieBrix
&lt;/h3&gt;

&lt;p&gt;Now you just need to reference the input form the form, get a timestamp and ship that info!&lt;/p&gt;

&lt;p&gt;Start by adding the &lt;code&gt;Parse Date&lt;/code&gt; brick, which will give you an output that you can use to reference a time stamp. Just type &lt;code&gt;now&lt;/code&gt; in the &lt;code&gt;Date&lt;/code&gt; field, and that's all the config you need.&lt;/p&gt;

&lt;p&gt;Now add the &lt;code&gt;Add Google Sheet row&lt;/code&gt; brick, and connect your spreadsheet and pick the tab "Relevant Tasks (Don't Edit)". &lt;em&gt;(If you've never use Google Sheets with PixieBrix before, you may have to log in to Google Sheets and authorize PixieBrix)&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;You'll see it pulls in the headings, and now you just need to map the data. Here's how I set it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BQl5NnN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ikvyofczpul1p6kv9uos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BQl5NnN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ikvyofczpul1p6kv9uos.png" alt="Send data to Google Sheets" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Show confetti and display the achievements dashboard panel.
&lt;/h3&gt;

&lt;p&gt;Now add a brick called &lt;code&gt;Show Confetti&lt;/code&gt;, which requires no configuration, and just sprays digital confetti across your screen! What a way to celebrate. 🎉&lt;/p&gt;

&lt;p&gt;Lastly, add the &lt;code&gt;Show Sidebar&lt;/code&gt; brick, and set &lt;code&gt;panelHeading&lt;/code&gt; to be the name of the Achievements sidebar you just made in the previous extension. &lt;em&gt;You can see what it's called by going to the first brick in the Achievements Panel extension and look at the value for &lt;code&gt;Heading&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nJqrAaeu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20775a2bczakancbk1yk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nJqrAaeu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20775a2bczakancbk1yk.png" alt="Finding heading title for sidebar" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Advanced - push "last updated" data to PixieBrix.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;You only need to do this if you've done the advanced part of the previous extension where you pull data from the PixieBrix database.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add another brick called &lt;code&gt;Put data in PixieBrix database&lt;/code&gt; to send the data to the PixieBrix data and rewrite the &lt;code&gt;mostRecent&lt;/code&gt; item. That way it only ever holds the latest value. You'll want to select the same database and key that you used in the previous extension, and then you'll want to set a &lt;code&gt;replace&lt;/code&gt; value for &lt;code&gt;Merge Strategy&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Lastly, just add two properties to send to it. Remember the "last task" message? We showed the name and the date. So just reference those two things, like this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Z7iocGl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m4xt9ugd5vsbvsghhwvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Z7iocGl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m4xt9ugd5vsbvsghhwvg.png" alt="Push data to PixieBrix database" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to create a table of upcoming tasks? Here's &lt;a href="https://www.youtube.com/watch?v=BudZVZr9L0Y"&gt;how to set that up&lt;/a&gt;. The only difference is that you'll need to use the jq filter to render cards in a list named &lt;code&gt;Elastic&lt;/code&gt; (assuming that's how you have your Trello board set up). &lt;/p&gt;

&lt;p&gt;Here's the syntax for doing that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.list as $list | .input|.cards|=(del(.[][]|select(.idList==$list|not)) | del(.[]|select(.==[])))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Now go and do!
&lt;/h2&gt;

&lt;p&gt;Need any help? Comment on here or my video and I'll respond as quickly as I can! The &lt;a href="https://community.pixiebrix.com?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=brittany"&gt;PixieBrix community&lt;/a&gt; is also extremely supportive and happy to help when you have an idea for something to build but you're stuck. So if you like this idea but have some modifications, let me know and we can try them!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Developer Diaries | Week 14 - Hacktoberfest Time!</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Fri, 15 Oct 2021 21:51:43 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-14-hacktoberfest-time-5737</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-14-hacktoberfest-time-5737</guid>
      <description>&lt;p&gt;Happy October! It's one of my favorite months. Why? &lt;/p&gt;

&lt;p&gt;Because some of us in the dev community celebrate...&lt;/p&gt;

&lt;p&gt;HACKTOBER FEST!&lt;/p&gt;

&lt;p&gt;It's a whole month long celebration of Open Source Software and learning how to contribute to code together. I started celebrating about two years ago, and I credit it with connecting me with other developers who graciously held my digital hand and guided me into the world of code collaboration while I was a baby developer terrified of pushing any of the wrong buttons.&lt;/p&gt;

&lt;p&gt;So this week's post is a tribute with some info, like how to get involved, how to write your first PR, and projects I'm contributing to this Hacktober. Enjoy!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Get Involved
&lt;/h2&gt;

&lt;p&gt;Head to the &lt;a href="https://hacktoberfest.digitalocean.com/"&gt;Hacktoberfest website &lt;/a&gt; and connect with your github account. &lt;em&gt;(Don't have a github account? Now's a great time to get one! It's easy to set up.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you're registered and connected with Github, it will automatically track your successful PRs and show you progress updates. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal&lt;/strong&gt;: Complete 4 successful PRs in October, and ... YOU GET A FREE TSHIRT&lt;/p&gt;

&lt;p&gt;[insert oprah gif a out you get a car]&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not gonna lie, I do this for the open source celebration, but also for the t-shirt.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Okay now it's time to find some issues! (Not sure what that means? Keep reading.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Here are some good resources for finding issues: 
&lt;/h2&gt;

&lt;h2&gt;
  
  
  - 
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Writing Your First PR
&lt;/h2&gt;

&lt;p&gt;Okay so how does one exactly "make a PR"? I'm glad you asked because the first time I did Hacktoberfest, I was pretty confused. Here's some lingo you'll hear and what it means. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;repo&lt;/strong&gt;: A repo is where a project's code is stored. This is typically on Github, and its basically like a Google Doc of all the code related to a project. When contributing to a project, you need to fork that repo and clone it on your local machine. But I'm getting ahead of myself with lingo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fork&lt;/strong&gt;: Imagine you spent years building a project, and then someone came in, changed a few lines of code, and the entire app went down. That would be tragic right? We don't want that. So Github makes it reallllly hard to do that, and one way is by having a contributor say "this project is cool! I'm going to grab it and bring a copy of it to my house and then add some cool stuff on to it, and then I'll send it back to you and you can decide if you want it." The "fork" is when you tell it go over to your house. The "clone" is when you actually open the door and let it come inside. (I... guess that's a good metaphor?)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PR/Pull request&lt;/strong&gt;: Let's stick with my analogy. A PR is when you've played around with the code inside your house, and you want to let the other person see your changes and if they like them, bring them into their code. So you create a "pull request" where you're asking them to pull your changes (from your fork) into their code- the main codebase/repo! &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;issues&lt;/strong&gt;: We've all got issues, but no one has more than Github 😂. An issue is like a ticket saying "hey this is something I need done in the code". It could be a bug that needs fixing, or a new feature they want implemented. It could be something really small, like adding a &lt;code&gt;target=_blank&lt;/code&gt; to a link, or it could be really large, like building a new page and components in an app. When you want to help out with a project, you want to start by looking at a repo's issues and pick one, then you'll reference that issue in your pull request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;contribution guidelines&lt;/strong&gt;: Look for a file called &lt;code&gt;contribution.md&lt;/code&gt; or &lt;code&gt;contributing.md&lt;/code&gt; typically in the root folder of a project. This is kinda like instructions for when you want to send your code back to the original code base so you know what they're hoping for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't worry if these terms don't all make sense... it can take a while to get used to. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip&lt;/strong&gt;: Download the Github Desktop app. I spent a lot of time learning Git on the command line, and while it comes in handy sometimes, it's not essential for a newbie and if you're feeling intimidated with git and github, don't force yourself to stress about command line right now :) ESPECIALLY when cloning repos locally after you fork them. It's much easier to follow the UI as it walks you through it and uses normal language to help you understand what you're doing.&lt;/p&gt;

&lt;p&gt;Don't worry if you're still feeling intimidated. Github makes it really hard to actually break anything, so no matter what you do, you don't have enough admin rights to actually destroy anyone else's code, so you really can't hurt anything, no matter what buttons you click. Also, ask questions in the issues. Code maintainers are typically super happy to help newbies get familiar with the PR process and answer any questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects I'm Contributing To
&lt;/h2&gt;

&lt;p&gt;This year, I've found two projects that I'm helping out. &lt;a href="https://github.com/Team-Vibhav/Hacktoberfest-2k21"&gt;Team Vibhav&lt;/a&gt; (that's the place where my fix was as simple as making some links open in a new tab), and &lt;a href="https://github.com/anitab-org/anitab-org.github.io"&gt;AnitaB.org&lt;/a&gt; where I'm helping set up Prettier and Github actions, add routing, and add a documentation link section for each of their projects. Feel free to come join the party over there and grab some issues!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>javascript</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Developer Diaries: Week 13 | Celebrating the wins</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Tue, 12 Oct 2021 21:39:20 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-13-celebrating-the-wins-1pai</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-13-celebrating-the-wins-1pai</guid>
      <description>&lt;p&gt;If anyone is following closely, you might have noticed I missed last week! Sorry about that - was a bit of a crazy week. But as I prepped for this week (realizing it's &lt;em&gt;technically&lt;/em&gt; week 14 as a developer), I thought writing about how I was actually able to set up an new app to run locally almost all by myself, and was I like "I've come so far!" and took a little moment to celebrate. &lt;/p&gt;

&lt;p&gt;It reminded me that we all need to take a moment to celebrate the wins, and I think as developers we don't do that enough. We go from solving one bug to jumping to the next. We come up with ideas left and right and implement them as quick as we can.&lt;/p&gt;

&lt;p&gt;And then sometimes, we just have those days where it feels like NOTHING we did worked, and maybe we don't even know what we're doing. You know it - imposter syndrome. On days that like these, I find it helpful to reference a list of things I &lt;strong&gt;can&lt;/strong&gt; do that I know even when I have those down days, I've still come along way. &lt;/p&gt;

&lt;p&gt;So I'm going to list out some &lt;strong&gt;things that I can do now that I couldn't do 13 &lt;em&gt;(er, technically 14)&lt;/em&gt; weeks ago&lt;/strong&gt;. This post might not be useful for anyone else except myself - although I hope it will encourage each of you to do the same, no matter where you are at in your developer journey.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using Github desktop&lt;/li&gt;
&lt;li&gt;Running new apps locally (for the first time!)&lt;/li&gt;
&lt;li&gt;Catching bugs/problems/areas of improvement in code reviews (admittedly, this still doesn't happen much)&lt;/li&gt;
&lt;li&gt;Create a utility function and being able to reference it in multiple places in my apps&lt;/li&gt;
&lt;li&gt;Create a React App Project and build a landing page completely from scratch with components in less than 2 hours. (&lt;a href="https://penge.netlify.app/"&gt;Here it is&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Create tests with Jest (for both frontend AND API)&lt;/li&gt;
&lt;li&gt;Sign git commits&lt;/li&gt;
&lt;li&gt;Upgrade dependencies&lt;/li&gt;
&lt;li&gt;Understand the difference between Sprint and Kanban view in Zube&lt;/li&gt;
&lt;li&gt;Regex for replacing special characters with "_"&lt;/li&gt;
&lt;li&gt;A javascript function that doesn't require me to write regex to replace special characters :) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Things I still can't do? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spell &lt;code&gt;component&lt;/code&gt; right on the first try.&lt;/li&gt;
&lt;li&gt;Explain what &lt;code&gt;this&lt;/code&gt; is and how it works&lt;/li&gt;
&lt;li&gt;Get the right audio source on zoom&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devjournal</category>
      <category>programming</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Developer Diaries: Week 12 | Over-engineering</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Thu, 30 Sep 2021 15:51:18 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-12-over-engineering-n4c</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-12-over-engineering-n4c</guid>
      <description>&lt;p&gt;Everyone says developers think a lot, and they do, but the problem is... sometimes we think too much. I had a couple cases of that this week, one of which involved me learning some regex that was TOTALLY unnecessary, but a good learning experience, and I found a cool &lt;a href="https://regexr.com/"&gt;regex checker&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Let's dive right in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Over-engineering
&lt;/h2&gt;

&lt;p&gt;We've all heard the term over-engineering, but turns out it's actually a real thing. I've noticed a few examples of me doing this recently, both in actually development and outside of work. &lt;/p&gt;

&lt;p&gt;Here's a funny example.&lt;/p&gt;

&lt;p&gt;I was laying in bed and realized I was tired of having to get up and cross the room to turn off my bedroom ceiling lights, and I honestly didn't even love rolling over to turn off the lamp. It felt like too much work to hit a button to turn things off, so I bought smart lights. &lt;/p&gt;

&lt;p&gt;Not only did I set them up... I went all in. I replaced my bedroom lamp AND ceiling lights with the new smart bulbs. And that was kinda great! Now I could just shout "hey Alexa, turn off my bedroom lights". But then I quickly got tired of doing that and wished there was a button on the side of my bed I could push to tell Alexa to turn off the lights. &lt;/p&gt;

&lt;p&gt;And that was the moment I realized I'd come full circle... I was right back where I started. Classic example of implementing a new feature because you think it solve a problem, but it just creates new problems and that feature was actually a red herring distracting you from either a deeper problem, or a totally non-existant one!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V1Igv5QJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i0wvrdgfcqrapmpnd34g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V1Igv5QJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i0wvrdgfcqrapmpnd34g.jpg" alt="smart-lights" width="800" height="1067"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;I installed smart lights in my living room too and have found it much more helpful, and also very cool looking with special effects that change colors.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I did something similar to this at work recently where I realized the problem was that we needed some characters replaced so that a  &lt;code&gt;&lt;/code&gt;  didn't turn into &lt;code&gt;%20&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;My mind got busy with coming up with a solution for replacing characters and learning regex, but really all I needed to do was find a library that already encoded and decoded URI text :) &lt;/p&gt;

&lt;p&gt;One step back even more, I realized I wasn't even thinking through how the text was getting encoded to start with and why it needed decoding. It wasn't until a senior developer asked me that I realized I was doing my classic smart light situation! I was scratching an itch, without realizing what was causing the itch. &lt;/p&gt;

&lt;p&gt;So I'm going to work on spending more time sitting and thinking before jumping in and adding features that I think solve the problem. Some of this comes with time, because I think that's what makes a developer experienced — being able to think through a problem rather than just code something that makes a change. That's important too, but as I grow, I want to be better about thinking through the problem first. &lt;/p&gt;

&lt;p&gt;Here's how I plan to do that. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🙋‍♀️ Ask more questions.&lt;/strong&gt; I feel like I get really excited when I think I can just start coding to solve something, but I wanna do a better job about asking more questions and getting clarification on issues before diving right in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Think like the computer.&lt;/strong&gt; Before I even architect a solution, I want to think through why the computer is doing what it's doing. Often this is necessary to solve a bug, but I'm realizing sometimes it's not and when you skip over this, you miss other things that might be impacted as a result of your code change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚶‍♀️ Walk. The. Eff. Away.&lt;/strong&gt; It's really hard for me to step away from something when I'm in a zone. I just wanna solve it! I need to get into a better practice of not working for more than about 60 minutes in a deeply focused state, and then being okay with breaking that to walk around, get some air and new perspective, and then come back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--weBu5FDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/9rtpurjbqiqZXbBBet/giphy.gif%3Fcid%3Decf05e47bdxur2ysg05jbmvcuuit56f1ws0rlb026tz15mq4%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--weBu5FDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/9rtpurjbqiqZXbBBet/giphy.gif%3Fcid%3Decf05e47bdxur2ysg05jbmvcuuit56f1ws0rlb026tz15mq4%26rid%3Dgiphy.gif%26ct%3Dg" alt="dog using computer" width="298" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What about you? Have you ever over-engineered something? What did you learn from it?
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Developer Diaries: Week 11 - Exploring Libraries</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Sat, 25 Sep 2021 15:32:58 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-10-exploring-libraries-3c62</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-10-exploring-libraries-3c62</guid>
      <description>&lt;p&gt;This week - aside from surviving food poisoning - I really only had one mission. Another dev on our team had built a modal asking for a user to select their &lt;code&gt;country&lt;/code&gt; and &lt;code&gt;timezone&lt;/code&gt;, and I needed to use some libraries to get those options and make sure they were consistent with the same libraries we used for a feature we're planning to release down the road that also has a form asking users to select those options.&lt;/p&gt;

&lt;p&gt;Thankfully I'd already worked with them before, but this time I got to take the reins with implementing them and really got to dive right in to not just copying and pasting, but actually solving through all the bugs to make that code work on this new modal, which was on an entirely different branch of the app.&lt;/p&gt;

&lt;p&gt;I solved most of the bugs but not everything (got a little stuck on a weird spread operator typescript nonsense... if you ever see "oh no you can't use that, try using &lt;code&gt;--downlevelIterator&lt;/code&gt;", well you can do that, or you can use &lt;code&gt;Array.from(your_array_you_were_using_the_spread)&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using &lt;code&gt;Moment.Tz&lt;/code&gt; library
&lt;/h1&gt;

&lt;p&gt;I used the &lt;a href="https://momentjs.com/timezone/"&gt;Moment-Timezone&lt;/a&gt; library, which returns, well, all the timezones! Super easy to get started with, just add using &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt; to add it, and then add &lt;code&gt;import moment from 'moment-timezone';&lt;/code&gt; to the top of your file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wzUr1KDw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kogf5r929gzpxrbe2kya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wzUr1KDw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kogf5r929gzpxrbe2kya.png" alt="getting time zones" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I needed to get a wee bit fancy with it, and this returns ALOT of things, but I only needed the names of the timezones. So I pulled out just the names, and then sorted them alphabetically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AOe_RLLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asungcj33cqic4n3cwdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AOe_RLLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asungcj33cqic4n3cwdu.png" alt="moment timezone guess" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then to make it easier on a user,  I used the guess function to look in the browser and figure out what their timezone is, and if it's part of my list, then woohoo awesome, if not, then just return an empty string and make them go select it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using Iso
&lt;/h1&gt;

&lt;p&gt;For the country field, we needed a standard list of countries, so I used the &lt;a href="https://www.npmjs.com/package/i18n-iso-countries"&gt;i18n iso countries library&lt;/a&gt;. (Easy to install from &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;. And just add &lt;code&gt;import { getNames } from 'i18n-iso-countries';&lt;/code&gt; to the top of your file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H8cbPtVm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5b8hnsoozgnetcs1bxwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H8cbPtVm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5b8hnsoozgnetcs1bxwn.png" alt="iso-countries-library" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked it to grab the names of countries, then look at the first couple letters we pull on a user's locale to determine if we show in another language or in English, if we don't have their locale info.&lt;/p&gt;

&lt;p&gt;Then I created an array of objects with a value and text of the country codes and country names, along with pushing a default option of "Select country" as the first option.&lt;/p&gt;

&lt;p&gt;Viola!!&lt;/p&gt;

&lt;p&gt;Here's how it looks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vaM1LDBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uj9w2tvrw1j5g7qjxhjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vaM1LDBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uj9w2tvrw1j5g7qjxhjf.png" alt="demo of country and timezone options" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>react</category>
      <category>devjournal</category>
      <category>library</category>
    </item>
    <item>
      <title>How to start your day like a developer (Dev Diaries: Week 10)</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Thu, 16 Sep 2021 20:04:02 +0000</pubDate>
      <link>https://dev.to/britt_joiner/how-to-start-your-day-like-a-developer-dev-diaries-week-10-4lae</link>
      <guid>https://dev.to/britt_joiner/how-to-start-your-day-like-a-developer-dev-diaries-week-10-4lae</guid>
      <description>&lt;p&gt;This week, I had a few days where I just really struggled to get up an at 'em and get my mind in the zone. It led me to research and ask other developers how they start their days and experiment around with some tactics myself. I also spent ALOT of time building some tests on our app. So let's hop right in!&lt;/p&gt;

&lt;h2&gt;
  
  
  What I worked on this week
&lt;/h2&gt;

&lt;p&gt;Tests, tests, and more tests. &lt;/p&gt;

&lt;p&gt;But really, my focus this week was building some basic tests to just check that critical parts of our app work and actually render. &lt;/p&gt;

&lt;p&gt;We use &lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt;, and I'm really happy about that because there were a lot of resources on google. My tests were fairly simple-- starting off easy just to make sure a component actually mounts. But I got a little fancy with some of them to check that the right &lt;code&gt;onClick&lt;/code&gt; functions are called when you, well, click!&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%2Fawrpka1kwc99syu10x2z.png" 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%2Fawrpka1kwc99syu10x2z.png" alt="standard-jest-test" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If anyone finds this interesting, happy to do a separate blog post on what I learned specifically about testing and how you can set up some basic tests for your app, too!&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting your day like a developer
&lt;/h2&gt;

&lt;p&gt;It took me a little while to get going in the morning this week. Like I'd get to my desk and then instead of being able to get up and start working, I'd just find my brain in a bit of a fog.&lt;/p&gt;

&lt;p&gt;I asked some fellow devs what they do, and I started to develop my own sort of routine, for like a pre-work morning ritual, and then a work warm-up ritual. Think of it kind of like stretching before a game. I can't just walk up to my computer and begin churning out code; I need to warm up a bit. &lt;/p&gt;

&lt;p&gt;Here's what I've been trying, and so far it's been helpful, although I want to shorten the amount of time so I have more time for other morning routines, or can start working sooner. WIP. :) &lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-Work Morning Ritual
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1) Play on my phone when my alarm goes off in bed.&lt;/strong&gt; I know this is technically against every rule in the book, but I swear it helps me wake up, and doesn't feel as intimidating as getting out of bed. I don't go straight for work emails though... I just bring up Pokemon Go and do my daily field research, send gifts to my friends, and catch any Pokemon that are out. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Sit on the porch and do journals, read newsletters/books, as time permits.&lt;/strong&gt; This depends how much time I spent laying in bed playing Pokemon :) &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Go outside and feed Artie.&lt;/strong&gt; (Who is Artie? Check out &lt;a href="https://dev.to/brittany_join/developer-diaries-week-7-finding-my-zone-and-developing-clever-solutions-2aac"&gt;week 7's post&lt;/a&gt; where I made a new stray cat friend.) He's so cute... every morning when I go outside, he's just sitting nearby waiting for me to fill up his foodbowl 🥺.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) ePause!&lt;/strong&gt; Hop on a Zoom call with some coworkers and we do a 10 minute meditation to kick off the day. After this ends, I kick off my Morning Hype playlist on Spotify.**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5) Stretch / pushups.&lt;/strong&gt; The point is - do something phsyical. I don't really want to do a whole workout, just get myself moving abit. I maybe spend two minutes max on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6) Warmup my brain to think.&lt;/strong&gt; Okay, now I do a quick mini crossword or NYT spelling bee game to try to get my brain moving. This morning I did &lt;a href="https://www.morningbrew.com/daily/r?kid=1c7e6e" rel="noopener noreferrer"&gt;Morning Brew's&lt;/a&gt; mini crossword, and I solved in about a minute and half. I think I'm going to start doing those as they feel less intimidating that the NYTimes ones.&lt;/p&gt;

&lt;p&gt;Once I've done all those things, my brain has started to feel like I'm alive, awake, and alert. But I'm still not quite ready to put keys to the board and start coding, so time to do my "work warmup".&lt;/p&gt;

&lt;h3&gt;
  
  
  Work Warmup
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1) Check emails/slack.&lt;/strong&gt; Read through any content of what I might have missed since I was last online. See if there's any new issues that came in, and be very careful not to let this turn into a rabbit trail. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Review any open PRs/Do code reviews.&lt;/strong&gt; I actually find this to be a good way to start the day because my brain just has to read some code. And if I have questions, that's perfect, because I comment them and learn more. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Watch SHORT tutorial on something I'm working on.&lt;/strong&gt; I realized one of the reasons I would struggle to get started on something was because I would often feel intimidated if I was stuck on something from the night before. I started to watch short videos on my specific thing I was working on to 1) help jog my memory, but also 2) give me more insight as to how I might solve my problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Timebox my first task.&lt;/strong&gt; I am now ready to start coding and working on my tasks, but first I make sure to set a Pomodoro Timer and timebox it so doesn't feel so intimidating to get started. (If I know I just have to work and focus for 25 minutes, it feels manageable enough, and I often keep going well past those first 25 minutes before I need a break.)&lt;/p&gt;

&lt;p&gt;What do you do to start your day like a developer?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Developer Diaries: Week 9 - When you don't feel like a dev</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Fri, 10 Sep 2021 20:57:33 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-9-when-you-don-t-feel-like-a-dev-502l</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-9-when-you-don-t-feel-like-a-dev-502l</guid>
      <description>&lt;p&gt;Hi everyone! This is my first "live" / non-ported-from-hashnode post on dev.to! I'm excited to be here and hoping everyone finds this useful. If this is the first post of mine that you're reading, I'm doing a series on what it's like as a young developer. I just started a full time dev job at the beginning of July 2021, and each week I spend a little time reflecting on what I've learned, partly for myself, but also in hopes of helping out others who are also starting out on their dev journey and wonder what it's like!&lt;/p&gt;

&lt;h2&gt;
  
  
  What I worked on
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Upgrading packages.&lt;/strong&gt; We use &lt;a href="https://elastic.github.io/eui/#/"&gt;Elastic's UI library&lt;/a&gt;, and I needed to update that because of some bug fixes they recently made. Turns out, it's both easier and harder than upgrading my iOS software 😂. But really, I started out by overcomplicating it, then realized I just have to update the &lt;code&gt;package.json&lt;/code&gt; file with the version I want, then delete node modules, and then &lt;code&gt;yarn&lt;/code&gt;/&lt;code&gt;yarn install&lt;/code&gt;. That led me to my second thing I learned which was...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NPM is not the same as yarn!&lt;/strong&gt;  Not that I ever really thought it was, but our environment uses yarn, so when I was trying to upgrade with NPM, it made for some weird problems. What's the difference? They're both package managers, and they handle adding and updating new packages, as well as running specific commands within them. I kinda think of it as the App Store? But I'm not sure that's a perfect metaphor. Yarn is a newer version of NPM, and according to my team, a better option. There's pros and cons for both. It seems NPM is technically more popular, based on downloads and google trends. Yarn seems to work better in terms of performance. I did some googling around just to get more familiar with them, and what I learned is... probably doesn't matter which one you use cause they're both good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Autosave feature&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also worked on creating some features in our app to allow autosaving on new case creation! It only saves to local storage (for now), and it's not a completely new feature because we already had it on comments, but it was cool to take something and replicate it a slightly different way to add new functionality. Check it out!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoccv1v69trmi57xr98q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoccv1v69trmi57xr98q.gif" alt="autosave feature" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do when you don't feel like a developer
&lt;/h2&gt;

&lt;p&gt;I struggled earlier this week - call it the long weekend, call it surviving a hurricane, or just call it a really stubborn bug - but I had a day where I swear it felt like more senior people had to straight up tell me exactly what words to type on a screen to solve a problem.&lt;/p&gt;

&lt;p&gt;It was a little disheartening, and I'm sure it's not the last time I'll feel it. So just in case you're over here reading about everyone's programming wins and you're feeling like you maybe didn't have one today or this week, don't sweat it. You're not alone. &lt;/p&gt;

&lt;p&gt;As Hannah Montana once said...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lGQr4xeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/SqSfph2kgJ53IZmG4n/giphy.gif%3Fcid%3Decf05e472usdspgob9sju7snomswzokn13d1hknv9bt760y8%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lGQr4xeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/SqSfph2kgJ53IZmG4n/giphy.gif%3Fcid%3Decf05e472usdspgob9sju7snomswzokn13d1hknv9bt760y8%26rid%3Dgiphy.gif%26ct%3Dg" alt="everybody has those days" width="270" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a few helpful things I found to do, and I hope you'll find them helpful, too. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;1) Take a break and walk away. *&lt;/em&gt; This is pretty good advice all the time even when you're not having a hard day but just generally stuck on something. Walk away. I know it's hard... you feel like you need to work harder on something you're struggling with, you feel lazy if you take a break. But sometimes you literally need distance and to turn your brain off for a few moments. Imagine putting a lot of weight on a foot that's hurting. You wouldn't keep pushing on it would you? Nah you'd take a break.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Remember how far you've come.&lt;/strong&gt; Take a pause and remember where you were a week ago, a month ago, a year ago. That's one of the reasons I like writing on this blog, it forces me to write down something new I've learned each week so I can see growth. And that's just weekly! A month ago, I was barely able to get simple PRs all along on their own, now I can do it with more advanced things! A year ago, I was still working in marketing. Progress!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Ask for help.&lt;/strong&gt; I don't usually feel too bad asking for help, but a lot of people do. And sometimes I do if I feel like I've already asked a lot of questions that day/week, I am going to look stupid if I ask more. But people understand you're new and getting your sea legs... I read that it often takes people 3-6 months to really be "useful" feeling members of a team, so if you have a day or two where you don't feel useful, don't worry! No one is expecting you to be useful 100% of the time. And I know I personally love when people ask me questions cause I feel smarter when I do know things :).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Have a drink.&lt;/strong&gt; Okay you can't technically probably do this on work hours, depending on where you work. But seriously, just make it through the day and take it easy afterwards. Relax, have a drink and just chill, and decide to try again tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other fun updates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Check out my Support Challenge Coin!&lt;/strong&gt;&lt;br&gt;
I just got this for working on the support app that I've been working on and I'm so excited! I'm getting a fancy glass case for it so I can display it on my desk and not worry about losing it 😂.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwir42p6sg8xflaj0l5rq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwir42p6sg8xflaj0l5rq.jpg" alt="Alt Text" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VTO: Volunteer Time Off&lt;/strong&gt;&lt;br&gt;
Elastic offers a super special benefit, which is 40 hours a year of VTO (volunteer time off). I've gotten lazy about using it this year, but I'm picking it back up starting with a &lt;a href="https://www.cathaven.org/"&gt;local cat shelter&lt;/a&gt;. Look at these little cuties I got to work with today.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sk4nvhsbxuxooh7mqk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sk4nvhsbxuxooh7mqk0.png" alt="image" width="800" height="1336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to come work with me and build cool things and get paid to go volunteer places like this? &lt;a href="https://www.elastic.co/about/careers/"&gt;We're hiring!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 That's all for now! See ya next week!&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>devjournal</category>
      <category>devpride</category>
    </item>
    <item>
      <title>Developer Diaries: Week 8 - Life happens</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Fri, 10 Sep 2021 18:34:58 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-8-life-happens-3p6i</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-8-life-happens-3p6i</guid>
      <description>&lt;p&gt;I'll be honest, I don't have a ton to write about this week, but I'm still trying to keep the weekly habit, so I'll say a few things quickly. &lt;/p&gt;

&lt;h1&gt;
  
  
  Life is distracting (that's okay)
&lt;/h1&gt;

&lt;p&gt;I moved to Baton Rouge about a year and a half ago, and while hurricane season hits Lousiana, it doesn't seem to do too much to Baton Rouge, but Hurricane Ida was an exception. I usually don't worry too much about nearby hurricanes because I'm not on the coast, so there's not much to worry about. But this one turned out to be a pretty serious one and managed to inflict some damage pretty close to us. Thankfully my family and I were okay - didn't even have any power outages, but it's been pretty rough for Baton Rouge (a lot of the city has been without power), and for just about anything 20 minutes south of us has been straight up devastating with damages to homes and roads, traffic lights out, and water in more places than it should be. &lt;/p&gt;

&lt;p&gt;And then Ida had the nerve to keep going up north and devastate New York and New Jersey! Thinking of all the folks who've been impacted by this storm. Definitely has had me pretty distracted this week, and I wasn't even seriously impacted. Thankful for a team that's been very understanding and given me the space and time to check on my home and family/friends and be as available with them as I need to this week.&lt;/p&gt;

&lt;p&gt;If you're able, &lt;a href="https://gizmodo.com/how-to-help-hurricane-ida-victims-right-now-1847581474?utm_source=morning_brew"&gt;Gizmodo&lt;/a&gt; has compiled a list of places to give to help victims from these storms. &lt;em&gt;(I donated to Cajun Navy as I kept seeing them come up in a few of my searches.)&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Testing
&lt;/h1&gt;

&lt;p&gt;This week I've been cleaning up some PRs I had out and incorporate some testing pieces in them. Sometimes, I'm like "yay testing, that's a great idea." And sometimes, I just get lazy. I'm working on having a better perspective and getting good at understanding what's good enough to move on, because it's easy to feel like you need to boil the whole ocean with testing. I create one test, then think of six more scenarios!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EESoldlh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/iF8IaDx2N6vfzS2k52/giphy.gif%3Fcid%3Decf05e47b9vrchlvyi3ed0np81wmj9xxnpmjx4jqcdlyh3zc%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EESoldlh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/iF8IaDx2N6vfzS2k52/giphy.gif%3Fcid%3Decf05e47b9vrchlvyi3ed0np81wmj9xxnpmjx4jqcdlyh3zc%26rid%3Dgiphy.gif%26ct%3Dg" alt="Leslie Knope and dry erase board - overwhelmed" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the moment, my goal is to keep it roughly within the scope of the issue I'm solving for, but I'm excited for next sprint which will give me some dedicated issues to set up testing across our front end. It will nice for that to be the "main issue", rather than some extra work I'm having to do on top my initial issue.&lt;/p&gt;

&lt;h1&gt;
  
  
  Everything's a sort function
&lt;/h1&gt;

&lt;p&gt;I had a bit of a mind blowing moment this week when I realized a lot of functions are really just fancy "sort" functions that compare info and output something based on the comparison. &lt;/p&gt;

&lt;p&gt;That's all folks. Stay safe, hug your loved ones, and keep learning, even on the hard weeks.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>devjournal</category>
      <category>typescript</category>
      <category>react</category>
    </item>
    <item>
      <title>Developer Diaries: Week 7 - Finding my zone and developing "clever" solutions</title>
      <dc:creator>Brittany Joiner</dc:creator>
      <pubDate>Fri, 10 Sep 2021 18:34:52 +0000</pubDate>
      <link>https://dev.to/britt_joiner/developer-diaries-week-7-finding-my-zone-and-developing-clever-solutions-2aac</link>
      <guid>https://dev.to/britt_joiner/developer-diaries-week-7-finding-my-zone-and-developing-clever-solutions-2aac</guid>
      <description>&lt;p&gt;Sending my post a bit early this week because tomorrow is an Elastic Shut It Down day &lt;em&gt;(basically random vacation days we're given just because! it's awesome. Oh and we are hiring if you want to  &lt;a href="https://www.elastic.co/careers"&gt;come work with me&lt;/a&gt; .)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Will be AFK tomorrow as I'm doing an orientation for a cat shelter I'm volunteering at, and I'm also officially changing my address on my license since my move! So let's get to it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Working in bursts / finding my zone
&lt;/h1&gt;

&lt;p&gt;I think one of the biggest revelations I had this week was that I can't easily turn "on" my focus. I can't decide if it's something I should lean in to, or try to fix, but I have very much found myself in a zone at certain times and I don't want to pull myself away. &lt;/p&gt;

&lt;p&gt;Sometimes this zone hits me at like 7pm, when I get an idea for how to fix something, and I just want to click away until I knock it out. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gg3f_vFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/unQ3IJU2RG7DO/giphy.gif%3Fcid%3Decf05e47kbfc3h2dv51tlwemmcagi9075ai1gl5090rqjmmw%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gg3f_vFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/unQ3IJU2RG7DO/giphy.gif%3Fcid%3Decf05e47kbfc3h2dv51tlwemmcagi9075ai1gl5090rqjmmw%26rid%3Dgiphy.gif%26ct%3Dg" alt="" width="300" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then I come to my desk the next morning and I just can't get my coffee to kick in fast enough. I'm unable to turn on that focus and actually work on something. Or I'll work on something for an hour, and then need a 30 minute break to walk around, have a snack, befriend my stray cat, or install a new doorbell.&lt;/p&gt;

&lt;p&gt;It's like I'm working in bursts, rather than just sitting at my desk for 8 hours a day. And it feels a little weird, but I don't think it's ineffective because I've nearly completed all my tasks for this sprint that I thought would take me two weeks - I've done in less than one!&lt;/p&gt;

&lt;p&gt;Is this normal for developers? I started to do some research and see what the internet said.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;As a developer

I don't get paid to type
I don't get paid to write code
I do get paid to solve problems.

And solving problems works far better if I think before I do.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://softwareengineering.stackexchange.com/questions/81929/is-it-normal-for-people-to-not-work/82024"&gt;from Andreas on this StackExchange post&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My first software manager said that the most you can get out of people is five hours of real work a day. She also said that programmers need to learn to tell when the most productive thing they can do is go look out the window. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=20363095"&gt;from AnimalMuppet on YCombinator forums&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Personally, I work every day. When I am tired and not productive, I work less. When I feel good, I work much. The minimum is usually 6 hours. Maximum is usually 12 -14 hours. At weekends, it happens it's just 2 hours a day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=9360061"&gt;from grobmeier on YCombinator forums&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Turns out, what the most productive 10% of our users have in common is their ability to take effective breaks. Specifically, the most productive people work for 52 minutes at a time, then break for 17 minutes before getting back to it (similar to the Pomodoro Method—more on that here).&lt;br&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;
The employees with the highest productivity ratings, in fact, don't even work eight-hour days. Turns out, the secret to retaining the highest level of productivity over the span of a workday is not working longer—but working smarter with frequent breaks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.themuse.com/advice/the-rule-of-52-and-17-its-random-but-it-ups-your-productivity"&gt;from the Muse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, when chatting with one of my fellow devs a couple weeks ago, he mentioned that he regularly gets up and walks around and takes breaks and that taking breaks is key. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JsVW7b-y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/muCo9BLS7vjErTON27/giphy.gif%3Fcid%3Decf05e476a1xrc2xsvc1f9zsyn6x2jigohvvg8d6iwhsbgfi%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JsVW7b-y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/muCo9BLS7vjErTON27/giphy.gif%3Fcid%3Decf05e476a1xrc2xsvc1f9zsyn6x2jigohvvg8d6iwhsbgfi%26rid%3Dgiphy.gif%26ct%3Dg" alt="" width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I guess we're not lazy and weird, our brains - just like batteries - need to be recharged after use :) And unlike our iPhones, we can't just go all day and recharge overnight.&lt;/p&gt;

&lt;h1&gt;
  
  
  I'm clever!!
&lt;/h1&gt;

&lt;p&gt;I don't often brag, but I'm learning you have to celebrate your accomplishments. And there's a lot of days where you don't know what you're doing, and feel like you know nothing, but sometimes you discover you do know something and you solve a problem and that. needs. to. be. celebrated! 🎉&lt;/p&gt;

&lt;p&gt;I had a moment like that this week. I was trying to figure out how to be overly prepared for an edge case that was unlikely to happen, but it bothered me what &lt;em&gt;would&lt;/em&gt; happen if a user got to that state in the app. Essentially, a variable would not be shown, and there would just be a set of &lt;code&gt;""&lt;/code&gt; that showed up and it looked weird to me. &lt;/p&gt;

&lt;p&gt;After a bit of thinking through it, I realized I could make those &lt;code&gt;"&lt;/code&gt; only appear if the variable was defined by setting a &lt;code&gt;quote&lt;/code&gt; variable and if the other variable was defined, then &lt;code&gt;quote&lt;/code&gt; would be ", otherwise it would be nothing!&lt;/p&gt;

&lt;p&gt;Here's the code if you're curious.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;EuiI18n
    token="pageTitle.search"
    default="Search results {quote}{searchBarTerm}{quote} | Elastic Support"
    values={{
    quote: this.props.searchBarTerm ? '"' : '',
    searchBarTerm: this.props.searchBarTerm,
    }}
&amp;gt;
    {(title: string) =&amp;gt; &amp;lt;UseTitle title={title} /&amp;gt;}
&amp;lt;/EuiI18n&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I felt pretty smart about it, and my fellow (significantly more senior) frontend dev said....&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bSwXdHtm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002776601/t3kQiBoeA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bSwXdHtm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002776601/t3kQiBoeA.png" alt="image.png" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So yeah, this pretty much made my week.&lt;/p&gt;

&lt;h1&gt;
  
  
  Meet my new cat friend!
&lt;/h1&gt;

&lt;p&gt;Okay lastly, say hello to Artie (short for Artimus). They're a stray cat in my neighborhood that I'm trying to befriend, so I've named it and I leave food and water out for it. Trying to figure out how to help it out this weekend with the hurricane on it's way to southern Lousiana. Any ideas? :) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xuVXZxs_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002891512/qQZLEym0W.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xuVXZxs_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002891512/qQZLEym0W.jpeg" alt="Image from iOS (5).jpg" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v5N92FZk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002887099/Vlqk7afb9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v5N92FZk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1630002887099/Vlqk7afb9.jpeg" alt="Image from iOS (4).jpg" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 See y'all next week!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>devjournal</category>
      <category>react</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
