<?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>Forem: Isaac P</title>
    <description>The latest articles on Forem by Isaac P (@izzlenizzle).</description>
    <link>https://forem.com/izzlenizzle</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%2F218778%2Fd99ff80f-0834-4d34-be61-a11c4dea647f.png</url>
      <title>Forem: Isaac P</title>
      <link>https://forem.com/izzlenizzle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/izzlenizzle"/>
    <language>en</language>
    <item>
      <title>Simplify Your Build Process with XC Tasks</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Mon, 15 May 2023 23:51:32 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/simplify-your-build-process-with-xc-tasks-4bem</link>
      <guid>https://forem.com/izzlenizzle/simplify-your-build-process-with-xc-tasks-4bem</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;XC is a great tool I've been using to document build steps in the readme and simplify the build process. It is easy to integrate and simplifies the code management workflow. Here I'll cover how to use XC Tasks for your projects.&lt;/p&gt;

&lt;p&gt;XC Tasks Github Repository: &lt;a href="https://github.com/joerdav/xc"&gt;https://github.com/joerdav/xc&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Main Build, Push, and Test Environment
&lt;/h2&gt;

&lt;p&gt;With XC Tasks, I have created a task called &lt;code&gt;main-build-push-test-env&lt;/code&gt; which builds, tags, and pushes the Docker image to the remote registry. Additionally, it deploys the application with Caprover.&lt;/p&gt;

&lt;p&gt;The main-build-push-test-env task requires executing these four subtasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;build-test-image&lt;/li&gt;
&lt;li&gt;tag-test-image-remote&lt;/li&gt;
&lt;li&gt;push-test-image-remote&lt;/li&gt;
&lt;li&gt;caprover-deploy-test&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Building and Tagging Docker Images
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Build the Docker Image
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;build-test-image&lt;/code&gt; task builds the Docker image using the &lt;code&gt;docker build&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;--pull&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; image-name:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Tag the Local Image with the Remote Name
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;tag-test-image-remote&lt;/code&gt; task tags the locally built image with the remote registry name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag image-name:latest &lt;span class="nv"&gt;$REGISTRY_ADDRESS&lt;/span&gt;/image-name:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pushing Docker Images to Remote Registry
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3. Push the Local Image to the Remote Registry
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;push-test-image-remote&lt;/code&gt; task pushes the tagged local image to the remote registry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push &lt;span class="nv"&gt;$REGISTRY_ADDRESS&lt;/span&gt;/image-name:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploying the Application with Caprover
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4. Deploy the Application using Caprover
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;caprover-deploy-test&lt;/code&gt; task deploys the application to Caprover using the &lt;code&gt;caprover deploy&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;caprover deploy &lt;span class="nt"&gt;--imageName&lt;/span&gt; &lt;span class="nv"&gt;$REGISTRY_ADDRESS&lt;/span&gt;/image-name:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;

&lt;p&gt;The syntax that XC is looking for might look something like this at the end of your README.md file: You can see the raw syntax &lt;a href="https://gist.githubusercontent.com/IzzleNizzle/2bd482f21086c3c4f866daff34b52555/raw/adb0f60e9f7842a6fc291802e3500ae9c1205b28/XC%2520Tasks%2520Syntax%2520Example.md"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By using XC Tasks to simplify the build process, you only need to maintain the tasks definitions in your readme file, rather than remembering the process or maintaining multiple scripts. This streamlined approach will help you efficiently manage your deployment pipeline while ensuring that your application remains up-to-date and properly deployed.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>ChatGPT Export - Review and Reflections</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Wed, 26 Apr 2023 08:58:03 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/chatgpt-export-review-and-reflections-599a</link>
      <guid>https://forem.com/izzlenizzle/chatgpt-export-review-and-reflections-599a</guid>
      <description>&lt;p&gt;I remember a few years back a personal paradigm shift when I came to realize the breadth of topics you could find answers for by simply googling a topic. &lt;/p&gt;

&lt;p&gt;After a little research and digging around, it's quite possible to find the answer to almost any question, particularly technical questions.&lt;/p&gt;

&lt;p&gt;Now ChatGPT enters the mix and enhances this capabilites by a large order of magnitude. Now instead of having to make a search, then sift through the noise to find the answer, you can simply just get the answer direct.&lt;/p&gt;

&lt;p&gt;Of course ChatGPT isn't God, I find it useful to set realistic expectations. But there are most definitely strengths that it has. &lt;/p&gt;

&lt;p&gt;It's technical prowess is incredible, many times I've walked myself through a topic I know nothing about, simply by just asking the right questions. &lt;/p&gt;

&lt;p&gt;It is not always correct, it often gets code examples wrong or it doesn't have knowledge of the tool/framework in question. Commonly it'll give answers for old frameworks as well.  Also it needs very specific questions at times in order to get the answer you are looking for. But there's no mistaking it, it is an incredibly powerful tool!&lt;/p&gt;

&lt;h2&gt;
  
  
  Reflection
&lt;/h2&gt;

&lt;p&gt;ChatGPT launched on November 30, 2022, it's been nearly 5 months since it's launch, lets take a moment and reflect on our own personal usage of this tool. &lt;/p&gt;

&lt;p&gt;I began by extracting my search/query data from ChatGPT.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Extract Data
&lt;/h2&gt;

&lt;p&gt;On the bottom left, click your personal icon to find your settings button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hrC8kQ2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/22232800/234517328-f7f094c7-729e-4ab7-ad15-81b7c45b7c19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hrC8kQ2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/22232800/234517328-f7f094c7-729e-4ab7-ad15-81b7c45b7c19.png" alt="image" width="427" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then expand "Data controls" to find your export button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jLcyI5ll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/22232800/234517122-26a4090c-83d0-4acc-a7c1-645119463ba5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jLcyI5ll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/22232800/234517122-26a4090c-83d0-4acc-a7c1-645119463ba5.png" alt="image" width="402" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you get the email, inside the exported files there's an html file named &lt;code&gt;chat.html&lt;/code&gt; that has all of the chat history data there. &lt;/p&gt;

&lt;p&gt;If you open that file in your browser and then open your dev tools, here's a quick script you can run to get the various chat headers into a string or an array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;chatHeaderArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chatHeaderArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`You made &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;chatHeaderArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; requests.`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;chatHeaderString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chatHeaderString&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// This can be used to get text for all of your headers&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chatHeaderString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Questions
&lt;/h2&gt;

&lt;p&gt;I found it quite interesting to send the headers to GPT and ask it questions about myself. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Given these chat headers, describe to me the pro and cons of this chat author&lt;/p&gt;

&lt;p&gt;Give me a count of the different topics for my chat headers&lt;/p&gt;

&lt;p&gt;what are some areas I should deepen my understanding to differentiate myself as a individual contributor&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I found this to be a fun practice, and I feel there's much more insight to glean from our search data. I would  really like to hear what others have tried.&lt;/p&gt;

&lt;p&gt;It seems like ChatGPT and other similar tools have become such a strong force in all of our life's that these types of practices will be widely adopted in time.&lt;/p&gt;

&lt;p&gt;I think this tool has incredible potential to advance our minds and society. It's just a tool, so it really depends on how we use it. I'd love to hear what approaches you will take to analyze and reflect on your own question history. &lt;/p&gt;

</description>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Optimize your Digital Appearance</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Wed, 25 Jan 2023 10:21:30 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/optimize-your-digital-appearance-maj</link>
      <guid>https://forem.com/izzlenizzle/optimize-your-digital-appearance-maj</guid>
      <description>&lt;p&gt;Let's talk about the importance of having a clean digital appearance, specifically having a tidy url for your homepage / portfolio.&lt;/p&gt;

&lt;p&gt;I’m often asked to help interview candidates for web developer and software developer positions. I’m notified beforehand, sent a name and a resume, and someone schedules a half hour interview. I’ve learned quite a bit from this process, and I’d like to share some low hanging fruit for those wanting to impress as they interview. &lt;/p&gt;

&lt;p&gt;So with very little knowledge beforehand, i start scanning my resources and trying to gain insight into what type of individual this may be. I’ve found that most often the best telling variable into whether this individual is likely to be a standout is the individuals online presence. I’m not talking social media, however that is very important. Today i want to focus on a more professional presence.&lt;/p&gt;

&lt;p&gt;This may be more common among web developers, but mobile and software developers all have mediums by which to show off their talent. And i would hope that they do. &lt;/p&gt;

&lt;p&gt;In my technical interviews, i can get a pretty good sense of where someone is with their skills and practice. However i believe that to gauge someone’s passion for their craft can be best judged by those who go the extra mile and present their best work publicly for others to review. &lt;/p&gt;

&lt;p&gt;Even so, individuals do this to different degrees. Having seen how a poor attempt at displaying your work online can be worse than never presenting them at all, I’d like to set a standard for what i think should be the baseline should you decide to share your work with others. &lt;/p&gt;

&lt;h3&gt;
  
  
  Fast Impressions
&lt;/h3&gt;

&lt;p&gt;Have you ever seen a resume come through looking sharp and tidy, then you look closer at their email and it looks like they haven’t changed it since Junior high? &lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:who-let-the-dogs-out-926@hotmail.com"&gt;who-let-the-dogs-out-926@hotmail.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can’t help but chuckle, however it does make a negative impact. I would have hoped the individual would have grown and changed since junior high. &lt;/p&gt;

&lt;p&gt;The same can be said about URLs. I’ve seen some abnormally large URLs that look cheap, unprofessional and distracting. And many coke through without any URL at all, really leaves me with an empty feeling that you’re gonna have to work hard in an interview to fill. &lt;/p&gt;

&lt;p&gt;Remember we interview plenty of talented people, it often comes down to the small details that sways our decision one way or another. &lt;/p&gt;

&lt;p&gt;Thankfully there are a lot of options to get you a good online presence to give interested parties a little insight into your talents and passion. You can get fairly clean URL’s for free, no need to pay money. But for those that want top notch delivery,  there are strong benefits to those willing to pay for a custom domain.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/izzlenizzle/github-pages-2947"&gt;Github pages&lt;/a&gt; - My recommendation for getting started. You can get a clean URL hosted for free at a respectable and trusted website. Plus most every IT pro i know has an account there. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/izzlenizzle/buying-custom-domain-4k71"&gt;Buying Custom Domain&lt;/a&gt; - Recommended if you want to step your game up a notch. Worth the ~$10 p/ year (Often less).&lt;/p&gt;

&lt;p&gt;Other considerations:&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Profile
&lt;/h2&gt;

&lt;p&gt;You can also make a good impression by polishing your GitHub portfolio. These are the few things i take notice of when i glance at someone’s page. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile picture?

&lt;ul&gt;
&lt;li&gt;Is it good?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Do they have a subtitle?

&lt;ul&gt;
&lt;li&gt;Is it clever?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Do they have their location set?&lt;/li&gt;
&lt;li&gt;Do they have any pinned repositories?

&lt;ul&gt;
&lt;li&gt;I’ll quickly glance repositories, looking for a Readme &lt;a href="https://gist.github.com/IzzleNizzle/7e3eb81bd0cca4cbb55db4e31586ccaf"&gt;2019-12-21 - Why Readme&lt;/a&gt; or a link that can show what the app is. &lt;/li&gt;
&lt;li&gt;Major bonus points for apps that have live hosted demos! I know how much work that takes, but it matters. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;How many commits have they done in the last year

&lt;ul&gt;
&lt;li&gt;Any fun badges from GitHub?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Whoever is interviewing you likely has a handful of candidates to research on top of their daily responsibilities. I certainly would not expect them to be downloading files, cloning repo’s or signing into anything, however a hosted app/webpage can be visited with a just few clicks. Because links can easily be placed on your GitHub profile, linked in or resume, to me it’s a low hanging fruit that i hope you take advantage of. &lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>GitHub Pages</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Wed, 25 Jan 2023 10:19:29 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/github-pages-2947</link>
      <guid>https://forem.com/izzlenizzle/github-pages-2947</guid>
      <description>&lt;p&gt;Hosting your website/portfolio on Github pages (gp) can give you a clean URL to send people to. You can even use a custom domain.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-requisites:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An account on &lt;a href="http://Github.com" rel="noopener noreferrer"&gt;Github.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Have your Github Username handy&lt;/li&gt;
&lt;li&gt;Create a new repository and name it &lt;code&gt;&amp;lt;your_github_username&amp;gt;.github.io&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Upload files/assets for website there&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;More in depth guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github is basically hosting static pages for free, it's quite a nice feature. &lt;/p&gt;

&lt;p&gt;Normal repo's hosted on gp will give a URL like the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://&amp;lt;your_username&amp;gt;.github.io/&amp;lt;your_repo_name&amp;gt;&lt;/code&gt;&lt;br&gt;
e.g.:&lt;br&gt;
&lt;code&gt;https://izzlenizzle.github.io/ReadoutAssistant/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But with a special eye for cleanliness, you can get a url like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://&amp;lt;your_username&amp;gt;.github.io/&lt;/code&gt;&lt;br&gt;
e.g.:&lt;br&gt;
&lt;code&gt;https://izzlenizzle.github.io/&lt;/code&gt;&lt;br&gt;
Looking good 👌💅&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>flutter</category>
      <category>privacy</category>
      <category>software</category>
    </item>
    <item>
      <title>Buying Custom Domain</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Wed, 25 Jan 2023 10:19:13 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/buying-custom-domain-4k71</link>
      <guid>https://forem.com/izzlenizzle/buying-custom-domain-4k71</guid>
      <description>&lt;p&gt;It’s a little scary if you’ve never done it before, but with todays modern web it’s very easy. There are many tools and sites you can buy domains from. &lt;/p&gt;

&lt;p&gt;Some popular choices :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.godaddy.com/domains" rel="noopener noreferrer"&gt;Go daddy&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://domains.google/get-started/domain-search/" rel="noopener noreferrer"&gt;Google domains&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.namecheap.com/domains/domain-name-search/" rel="noopener noreferrer"&gt;Name cheap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Their checkout flows are top notch, hard to mess up. They will ask for name and address and that info may be public as part of owning the domain. Some sites have protections for that, there’ll surely advertise that features as part of their signup flow. &lt;/p&gt;

&lt;p&gt;Check unique domain names, look for urls that will look safe and familiar. .com .co .dev .io are my personal favorites. &lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>plugin</category>
      <category>software</category>
      <category>news</category>
    </item>
    <item>
      <title>Subtle VsCode Extension I Can't Live Without</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Fri, 13 Jan 2023 15:00:09 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/subtle-vscode-extension-i-cant-live-without-56gk</link>
      <guid>https://forem.com/izzlenizzle/subtle-vscode-extension-i-cant-live-without-56gk</guid>
      <description>&lt;p&gt;I came across an extension for VsCode when I was frustrated about having to run the &lt;code&gt;code .&lt;/code&gt; or &lt;code&gt;code ../&amp;lt;some_dir&amp;gt;&lt;/code&gt; command over and over when I wanted a new VsCode window to open. &lt;/p&gt;

&lt;p&gt;I came across this &lt;a href="https://marketplace.visualstudio.com/items?itemName=chrisdias.vscode-opennewinstance"&gt;VsCode extension&lt;/a&gt;: &lt;code&gt;chrisdias.vscode-opennewinstance&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GasGsy58--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/chrisdias/vscode-opennewinstance/raw/HEAD/images/preview.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GasGsy58--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/chrisdias/vscode-opennewinstance/raw/HEAD/images/preview.png" alt="Context Menu Shortcut" title="Context Menu Shortcut" width="433" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's real simple, it just adds an option to your context menu inside of VsCode that allows you to open a folder in a new window/workbench. &lt;/p&gt;

&lt;p&gt;Although it's simple, I find it super useful, and realized recently when working on a VM that I can't live without it! It's one of the first extensions that I add to a new system. &lt;/p&gt;

</description>
      <category>vscode</category>
    </item>
    <item>
      <title>Easily Sync Github SSH keys with your Servers</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Thu, 12 Jan 2023 16:00:58 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/easily-sync-github-ssh-keys-with-your-servers-2m34</link>
      <guid>https://forem.com/izzlenizzle/easily-sync-github-ssh-keys-with-your-servers-2m34</guid>
      <description>&lt;p&gt;tl;dr&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-import-id-gh &amp;lt;github_username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I've spent too much time not know about this..&lt;/p&gt;

&lt;p&gt;If you work on remote servers often and connect via ssh, you'll surely want to know this.&lt;/p&gt;

&lt;p&gt;This command grabs the public keys from Github for the username provided and adds them to your &lt;code&gt;authorized_keys&lt;/code&gt; file. So if you work on multiple machines and have your ssh keys added to Github, then you can easily update any server by simply running this command.&lt;/p&gt;

&lt;p&gt;Maybe it was just me, but I always just edited that file manually and copied my public keys around. This is a hassle and introduces potential for mistakes.&lt;/p&gt;

&lt;p&gt;Especially because I develop on several different machines and the dynamic nature of life, it's nice to have an easy way to sync your Github keys with the allowed keys on your servers.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Configure Python Formatter and Linter for a VSCode Dev Container</title>
      <dc:creator>Isaac P</dc:creator>
      <pubDate>Tue, 10 Jan 2023 16:52:26 +0000</pubDate>
      <link>https://forem.com/izzlenizzle/configure-python-formatter-and-linter-for-a-vscode-dev-container-3n1e</link>
      <guid>https://forem.com/izzlenizzle/configure-python-formatter-and-linter-for-a-vscode-dev-container-3n1e</guid>
      <description>&lt;h2&gt;
  
  
  tl;dr
&lt;/h2&gt;

&lt;p&gt;Code example here:&lt;br&gt;
&lt;a href="https://gist.github.com/IzzleNizzle/997f36145db751ca6f340af8e5dde07c" rel="noopener noreferrer"&gt;Gist of only devcontainer.json&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/IzzleNizzle/Python-Dev-Container-w-Linter-Formatter" rel="noopener noreferrer"&gt;Full Example Repo&lt;/a&gt; – I recommend cloning and opening with Github Codespaces to see this in action&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;I had a goal to set up a python coding environment, pre-configured with all needed tools to develop, lint and format my code. I found that with a &lt;a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="noopener noreferrer"&gt;devcontainer&lt;/a&gt; this could be a relatively frictionless process and be ready to go immediately following the initial devcontainer build process. &lt;/p&gt;

&lt;h2&gt;
  
  
  Benefit
&lt;/h2&gt;

&lt;p&gt;The top benefits I want from this is twofold. First is a clear coding standard easily adopted that ensures consistent code styling and practices. Second is fast and easy onboarding. This ensures that as I load my code, I can get up to speed quickly and tools are configured automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawbacks
&lt;/h2&gt;

&lt;p&gt;This approach is really convenient, but it is attached to VsCode and docker devcontainers. So it's not super portable. Also linting and formatting are opinionated topics, so inevitably someone is going to disagree with my approach.&lt;/p&gt;

&lt;p&gt;For me these drawbacks are no big deal, the benefit outweighs the drawbacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set up
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://gist.github.com/IzzleNizzle/997f36145db751ca6f340af8e5dde07c" rel="noopener noreferrer"&gt;devcontainer.json&lt;/a&gt; holds all the configuration for this to work.&lt;/p&gt;

&lt;p&gt;The fastest way to see this work is by cloning the full example repo linked above, then opening with Github Codespaces. It will build and everything will be ready to go. You can test and see that linting and formatting happen automatically on file save, as dictated by the rules set in the devcontainer.json file.&lt;/p&gt;

&lt;p&gt;If adding a .devcontainer directory and file into an existing project in VsCode, bring up the Command Palette. On mac it’s &lt;code&gt;⇧⌘P&lt;/code&gt; Then search for Reopen in Container. This should do all the work for you.&lt;/p&gt;

&lt;p&gt;Be sure you have this extension installed: ms-vscode-remote.remote-containers&lt;/p&gt;

&lt;p&gt;The initial build process takes a few minutes, works on all platforms (M1 mac tested).&lt;/p&gt;

&lt;p&gt;This example uses the &lt;a href="https://github.com/devcontainers/templates/tree/main/src/docker-in-docker" rel="noopener noreferrer"&gt;Docker in Docker&lt;/a&gt; dev container. There are others that may suit you better, feel free to customize to your needs. This example doesn’t rely on the exact type of dev container used.&lt;/p&gt;

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