<?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: Nick Palenchar</title>
    <description>The latest articles on DEV Community by Nick Palenchar (@nickpalenchar).</description>
    <link>https://dev.to/nickpalenchar</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%2F155552%2F7d141aa7-6477-4eac-aab7-6b2d15d02a2e.png</url>
      <title>DEV Community: Nick Palenchar</title>
      <link>https://dev.to/nickpalenchar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nickpalenchar"/>
    <language>en</language>
    <item>
      <title>goodtimer - a setTimeout for humans (+ timer functionality)</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Sat, 13 Mar 2021 17:09:22 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/goodtimer-a-settimeout-for-humans-timer-functionality-51i8</link>
      <guid>https://dev.to/nickpalenchar/goodtimer-a-settimeout-for-humans-timer-functionality-51i8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Om-d4Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sclnvi5gz7ek4aee2051.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Om-d4Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sclnvi5gz7ek4aee2051.png" alt="goodtimer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was my first npm package I ever published (originally "t-minus"). I only started revisiting it 4 years later and did some serious rewriting with the goal of making it very developer friendly.&lt;/p&gt;

&lt;p&gt;I never felt setTimeout/setInterval alone made for more sophisticated timers. I hope this makes it easier&lt;/p&gt;

&lt;p&gt;Thanks for checking out &lt;a href="https://github.com/nickpalenchar/goodtimer"&gt;goodtimer&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>npm</category>
    </item>
    <item>
      <title>[Realistically] Boosting Your Interview Chances with GitHub</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Sat, 06 Feb 2021 19:27:42 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/realistically-boosting-your-interview-chances-with-github-2jda</link>
      <guid>https://dev.to/nickpalenchar/realistically-boosting-your-interview-chances-with-github-2jda</guid>
      <description>&lt;p&gt;&lt;em&gt;Canonical URL: &lt;a href="https://nickpalenchar.com/github/"&gt;https://nickpalenchar.com/github/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;When my employer is hiring, I'm the first to want to refer a good person. I'll reach out to my network of bootcamp grads, asking for resumes, hoping I can get them a job at a great company.&lt;/p&gt;

&lt;p&gt;I end up throwing out 99% of them every time.&lt;/p&gt;

&lt;p&gt;The reason is always the same: their GitHub has half a year or much more of total radio silence.&lt;/p&gt;

&lt;p&gt;If there's one piece of advice I could shout from the rooftops, especially to new devs, is that an active GitHub is probably your best competitive advantage to getting an interview or referral cold.&lt;/p&gt;

&lt;p&gt;It's not a perfect system. But it's the system we have. And it never fully made sense to me until I found myself on the receiving end of resumes, with more to go through and time I had available.&lt;/p&gt;

&lt;p&gt;Simply put, most resumes with equal experience look the same. New bootcamp grads went to a bootcamp and did a couple of projects (that may or may not be hosted). Those with two years of experience have a company they've worked for, maybe two. And everyone is listing similar languages and technologies they use.&lt;/p&gt;

&lt;p&gt;It's a start, but then I'm left with 5-10 resumes and 1-3 referrals I can comfortably make. At this point I could paste them to a wall and throw a dart. Or I could look at their GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting your Github ready without loosing slee
&lt;/h2&gt;

&lt;p&gt;You can easily increase your candidacy with an active GitHub but &lt;strong&gt;you don't need to go crazy either&lt;/strong&gt;. Please don't &lt;a href="https://medium.com/@iamtjah/eat-sleep-code-repeat-please-dont-f1453659d703"&gt;Eat-Sleep-Code-Repeat&lt;/a&gt;. Conversely, you can get away with doing the bare minimum and be in a stratospherically better place. Here's some simple ways to do just that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set up some &lt;a href="https://missing.csail.mit.edu/2020/command-line/#dotfiles"&gt;dotfiles&lt;/a&gt;&lt;/strong&gt; - Effortlessly save your configuration. And whenever you add to it, you get a 🟩. I use &lt;a href="https://github.com/anishathalye/dotbot"&gt;dotbot&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Whenever you take a class, or code through a book, &lt;strong&gt;put that code on GitHub&lt;/strong&gt; - You don't need to author an open source library. Simple code snippets or notes in markdown are great! Put your LeetCode solutions up there too while you're at it. Don't let all the stuff you're already doing collect dust. Get those 🟩s!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://pages.github.com/"&gt;Host your website statically on GitHub&lt;/a&gt;.&lt;/strong&gt; - If you have a portfolio, every new thing you add is a 🟩. If you host a blog, new posts are new 🟩. &lt;a href="https://nickpalenchar.com"&gt;My website/blog&lt;/a&gt; is hosted &lt;a href="https://github.com/nickpalenchar/nickpalenchar"&gt;this way&lt;/a&gt; with &lt;a href="https://hugo.io"&gt;hugo&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It will be very, very unlikely a hiring manager will look at your actual commits. Simply having anything up there is what matters. It shows you walk the walk and talk the talk. It immediately proves you have basic knowledge of the same version control they are definitely using at work.&lt;/p&gt;

&lt;p&gt;And again you don't even need to go overboard in frequency. Your 🟩s can be sprinkled like cayenne on a dish that shouldn't be too spicy. But it should not look completely and totally abandoned for the year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reversal
&lt;/h2&gt;

&lt;p&gt;I think an active GitHub is the easiest way to give you a competitive advantage, but there are alternatives if they are your thing. Among them, you could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Be an active blogger&lt;/strong&gt; - Personally, &lt;a href="https://nickpalenchar.com/worst-blogging-advice/"&gt;I don't like doing this&lt;/a&gt;. I'd rather showcase my GitHub.&lt;/li&gt;
&lt;li&gt;If you're more media oriented, &lt;strong&gt;create a YouTube channel&lt;/strong&gt; - Live coding? Put the recording on your YouTube. Do any talks? Get them on YouTube (if you have permission). Or link all your media on a portfolio page (guess where you should host it).&lt;/li&gt;
&lt;li&gt;And none of the GitHub nonsense applies whenever you're referred by a person who knows you well, or even someone you've met at an event and had a good conversation with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just remember, if you do have an alternate to GitHub established, &lt;strong&gt;do not include a link to an empty GitHub in your resume&lt;/strong&gt;. You might want to delete your account altogether, if you really never ever use it. Would a photographer link-drop a portfolio with no photos?&lt;/p&gt;

&lt;h2&gt;
  
  
  But whyyyyyy does it have to be this way?
&lt;/h2&gt;

&lt;p&gt;Yes there are totally flaws in the system. The hiring process has a lot of room for improvement (some companies are trying). You could be a great programmer without doing any of these. But right now, there is no way I can know this by looking at just your resume, and my company will not let me spend 80% of my time talking to candidates to get to know them better.&lt;/p&gt;

&lt;p&gt;I totally welcome the conversation to improve the hiring process, from interview to whiteboarding to everything in between. So please write about how it's broken and how we can fix it. I would love to read that. Just make sure it gets committed and hosted on GitHub when you do.&lt;/p&gt;

</description>
      <category>interviewing</category>
    </item>
    <item>
      <title>The Worst Blogging Advice I Ever Received</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Sat, 16 Jan 2021 18:56:26 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/the-worst-blogging-advice-i-ever-received-3h9h</link>
      <guid>https://dev.to/nickpalenchar/the-worst-blogging-advice-i-ever-received-3h9h</guid>
      <description>&lt;p&gt;&lt;em&gt;Canonical URL: &lt;a href="https://nickpalenchar.com/worst-blogging-advice/"&gt;https://nickpalenchar.com/worst-blogging-advice/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;No annoying intro here. This is it:&lt;/p&gt;

&lt;h2&gt;
  
  
  "When starting a blog, be sure to update it regularly"
&lt;/h2&gt;

&lt;p&gt;I've actually heard or read this general "nugget" many times. It is as ubiquitous as it is terrible. One reason is that it's only applicable to one type of blog. The kind that is monetized, relying on a large group of subscribers, with aspirations of generating a livable wage for the author. Obviously, there are many types of blogs.&lt;/p&gt;

&lt;p&gt;Back in 2018 I had set a goal to publish one post a month. I thought it was modest at the time (some authors seem to post weekly at least), but it turned out to be GRUELING. It also didn't produce work I was most proud of. The result of this goal is most of the 2018 posts on this site (you might notice there's less than 12).&lt;/p&gt;

&lt;p&gt;The fact that I couldn't commit made me question if I should even host a blog at all. I felt like a blog with large gaps in the timeline would give the same impression a "streaky" resume gives off. As a matter-of-fact, the aforementioned terrible advice is often paired with a warning that you will look like you lack a drive for commitment, which could turn off recruiters during the job search, if you don't post regularly.&lt;/p&gt;

&lt;p&gt;This is equally misguided. When I look at my blog, I see a collection of articles that generally represents my thoughts on coding, and general values in the industry. These are topics that are valuable to me, the topics I want to talk about. I don't want it cluttered with noise that is less helpful to readers or myself. Form the viewpoint of a recruiter, wouldn't they rather find content that supports the author's expertise in the field?&lt;/p&gt;

&lt;p&gt;I'm not really sure what my blog is. Heck why does it matter? I just enjoy my tiny space on the corner of the internet I can call my own! Maybe it's a subtle rebellion against larger platforms (blog and social media based). But the autonomy makes me feel warm and fuzzy inside.&lt;/p&gt;

&lt;p&gt;For me, it's helpful to write my thoughts whenever I'm moved to do so. And I hope the result is a collection of genuine thoughts and advice that others might find helpful, too.&lt;/p&gt;

</description>
      <category>blogging</category>
    </item>
    <item>
      <title>The Whale, the Container, and the Ocean - A Docker Tale with Nick Palenchar</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Thu, 23 Jul 2020 11:51:10 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/the-whale-the-container-and-the-ocean-a-docker-tale-with-nick-palenchar-2hj6</link>
      <guid>https://dev.to/nickpalenchar/the-whale-the-container-and-the-ocean-a-docker-tale-with-nick-palenchar-2hj6</guid>
      <description>&lt;p&gt;Nick is a former Actor/Director turned coder who has been working as a software engineer for 4 years. With particular interest in DevOps tools and Automation, he has worked in large corporations and small startups alike, and maintains open source projects and teaches coding in his spare time.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="//www.slideshare.net/slideshow/embed_code/key/JO6kirU3jJbMgF" alt="JO6kirU3jJbMgF on slideshare.net" width="100%" height="450"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://palencharizard-public.s3.amazonaws.com/The+Whale%2C+the+Container%2C+and+the+Ocean.pdf"&gt;Click to download as PDF&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I. Intro - Defining Docker
&lt;/h2&gt;

&lt;p&gt;A. Imagine a new engineer asks you, ""What is Docker?"". How would you answer &lt;br&gt;
  B. For any engineer in the stack, Docker can be powerful, simplifying development setup and ensuring higher deployment confidence.&lt;br&gt;
  C. But there's not many clear resources to help understand the eco-system and what it means for running, building, and debugging.&lt;br&gt;
  D. Today we will examine the subtle ways Docker goes about building and running containers.&lt;br&gt;
  E. Docker is more than a container. There is a Docker daemon (the ""whale"") which assembles the container, and it lives in your computer ""the ocean"", which is the environment it has to work with. Let's explore how these areas relate to each other. &lt;/p&gt;

&lt;h2&gt;
  
  
  II. From the Computer to the Docker Daemon.
&lt;/h2&gt;

&lt;p&gt;A. (Visual: A ""box"" (the container) sits on top of the ""whale"" (docker daemon), who floats above an ""ocean"" (computer (filesystem)).&lt;br&gt;
  B. !Important distinction! Docker daemon does &lt;em&gt;not&lt;/em&gt; see your filesystem. It only sees the context that you the developer sets for it (commonly ""."").&lt;br&gt;
  C. That dot is small but important. It's the common unix character for the current directory. When running docker build, you often use this to set the context to the location where you're runinng the cli from.&lt;br&gt;
  D. Specifying a directory (""."") copies everything within it to the Docker Daemon (""whale""). The only thing it sees is the subset of your file system.&lt;br&gt;
    i. (image of an abridged filesystem in a tree layout, with a section selected in red that corrosponds to the terminal command. That section is copied to the whale. The result is the whale has a smaller file system, and the ""root"" of it is ""."")&lt;br&gt;
    ii. from here a few examples how things work:&lt;br&gt;
      a. A Dockerfile ""COPY .. /someplace"" doesn't work. While the &lt;em&gt;computer&lt;/em&gt; has a parent directory from its working directory, the &lt;em&gt;daemon&lt;/em&gt; is already at the top level directory, and directories above it weren't copied to the daemon. Take away is: wherever you set the build context, you can't go higher than it during buildtime.&lt;br&gt;
      b A `docker build ./project-with-tons-of-node_modules in it, to show that builds can significantly slow down if your context is too large (reminding that everything first needs to be copied to the daemon before even starting the build process).&lt;br&gt;
  E. Overview of dockerignore&lt;br&gt;
    i. (visual, demonstrating the same thing as above but with some diretories ""redacted"" out, as specified by the .dockerignore file, leaving a leaner filesystem for the docker daemon's context)&lt;br&gt;
    ii. More than size, it would be a mistake to copy node_modules or generated builds into the container.&lt;br&gt;
    iii. Your computer might be running a different version of a process than the container might have, introducing inconsistency with builds. We'll talk about RUN commands to better handle this next.&lt;/p&gt;

&lt;h2&gt;
  
  
  III. From the Docker Daemon to the Container.
&lt;/h2&gt;

&lt;p&gt;A. Section title: You've sent things to the Docker Daemon, but where it's going looks different still.&lt;br&gt;
  B. Isolated visual of the box, this time with the lid open and a disk hovering over (the ""image"")&lt;br&gt;
  C. Points on how during buildtime (going through the Dockerfile), is the only time content can be added to a container to get it working (footnote that this is oversimplification)&lt;br&gt;
  D. A look at some Dockerfile commands and how they relate between the docker context and the container.&lt;br&gt;
    i. WORKDIR - setting the working directory in the container (just like how there's a default working directory on your computer's shell)&lt;br&gt;
    ii. COPY - again, this is sourcing from the Docker Daemon and moving to the container&lt;br&gt;
      a. Important to note, there is no access to your computers files at this point. &lt;br&gt;
    iii. RUN - executes commands inside the container.&lt;br&gt;
      a. Important note is not the context (The run command ""already doesn't"" run on your computer&lt;br&gt;
    iv. ENTRYPOINT/CMD - these are ""saved"" rather than ran, as defaults, and can be overridden for customization or debugging.&lt;br&gt;
  E. Final tips for successful building and debugging.&lt;br&gt;
    i. Selecting the right amount of ""context"" can speed up build time, but be sure it encompasses all files you need.&lt;br&gt;
    ii. Files generated from build processes or installs (npm) should happen in the container (rather than your computer) to ensure consistency.&lt;br&gt;
    iii. Errors around files not found (common) is because the file wasnt copied or copied to the wrong place. Identify where in the container the process is starting from, and try to connect it to where the file may be. &lt;/p&gt;




&lt;p&gt;&lt;em&gt;This talk will be presented as part of &lt;a href="https://codelandconf.com"&gt;CodeLand:Distributed&lt;/a&gt; on &lt;strong&gt;July 23&lt;/strong&gt;.  After the talk is streamed as part of the conference, it will be added to this post as a recorded video.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codeland</category>
      <category>docker</category>
      <category>containers</category>
    </item>
    <item>
      <title>An interactive CLI that updates the default branch name in any/all your GitHub repositories.</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Tue, 07 Jul 2020 23:56:53 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/an-interactive-cli-that-updates-the-default-branch-name-in-any-all-your-github-repositories-1eod</link>
      <guid>https://dev.to/nickpalenchar/an-interactive-cli-that-updates-the-default-branch-name-in-any-all-your-github-repositories-1eod</guid>
      <description>&lt;p&gt;Technically, this is in &lt;strong&gt;preview&lt;/strong&gt; stability.. but wouldn't it be nice if some great members of Dev previewed it?? :D&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; flipswitch
&lt;span class="nv"&gt;$ &lt;/span&gt;flipswitch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.npmjs.com/package/flipswitch"&gt;Here's the npm page&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/nickpalenchar/flipswitch/"&gt;Here's the github page&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>t-minus v2.0 - timers/setTimeout with superpowers (a rewrite of my oldest side-project)</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Mon, 06 Jul 2020 00:12:28 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/t-minus-v2-0-timers-settimeout-with-superpowers-a-rewrite-of-my-oldest-side-project-4gkk</link>
      <guid>https://dev.to/nickpalenchar/t-minus-v2-0-timers-settimeout-with-superpowers-a-rewrite-of-my-oldest-side-project-4gkk</guid>
      <description>&lt;p&gt;Earlier this year I decided to take my oldest side project and rewrite it with what I know now.&lt;/p&gt;

&lt;p&gt;t-minus v1.0 was written in 2015 as an easy way to set timers, with some emphasis on use in a browser UI.&lt;/p&gt;

&lt;p&gt;Specifically, it was born out of an even larger side project that uses pomodoro timers (eattomatoes.herokuapp.com - unmaintained but still somewhat functional)&lt;/p&gt;

&lt;p&gt;It utilized callback functions to control what happens as seconds pass, as well as when the timer hits 0.&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;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1:30&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;onInterval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTimerUI&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// human readable string!&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;onTimeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// times up!&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// `this` refers to its own timer + handy methods!&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It had all the methods you'd expect on a timer.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;timer.pause&lt;/code&gt;&lt;br&gt;
&lt;code&gt;timer.resume&lt;/code&gt;&lt;br&gt;
&lt;code&gt;timer.reset&lt;/code&gt;&lt;br&gt;
&lt;code&gt;timer.clear&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;and it was written as a single vanilla JavaScript file&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2.0 rewrite
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Timer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t-minus&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I rewrote the entire module from scratch, taking into account v1's README to preserve the interface. I wanted a better written package that's more optimal, but had the same basic API and usage as its original.&lt;/p&gt;

&lt;p&gt;The end result has some new features for use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for milliseconds (v1's smallest unit was essentially the second)&lt;/li&gt;
&lt;li&gt;UI/timer setting units up to years (v1's largest unit was the hour)&lt;/li&gt;
&lt;li&gt;More accurate pausing (v1's pause would stop at the last full second)&lt;/li&gt;
&lt;li&gt;More memory efficient (v1 would keep setIntervals when a timer is paused; not in v2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...and new features for development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit test coverage 🙌&lt;/li&gt;
&lt;li&gt;Written in TypeScript 👨‍💻&lt;/li&gt;
&lt;li&gt;Overall better documented.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need timer functions or want a better way to handle countdowns in the browser (or node). Consider giving t-minus an install 😁&lt;/p&gt;

&lt;p&gt;If this project gets even one contribution from someone other than me, I would have exceeded my goals with it. &lt;a href="https://github.com/nickpalenchar/t-minus"&gt;Check out the repo if you feel so inclined&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>npm</category>
      <category>contributorswanted</category>
    </item>
    <item>
      <title>Life-changing git Commands you probably aren't using</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Sat, 11 Apr 2020 16:45:50 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/life-changing-git-commands-you-probably-aren-t-using-fdn</link>
      <guid>https://dev.to/nickpalenchar/life-changing-git-commands-you-probably-aren-t-using-fdn</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was published May 26 2018 on my own site, &lt;a href="http://nickpalenchar.com"&gt;nickpalenchar.com&lt;/a&gt;. The original post is maintained &lt;a href="http://nickpalenchar.com/git"&gt;here&lt;/a&gt;, but I thought I'd share it with the broader community on dev 💌&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every developer uses some kind of version-control system (sometimes called VCS). It a fail-safe to losing work, allowing you to jump back in time and reference files as they once were. Because branching is supported, so much more than linearly stepping back in time is possible. VCS is the backbone for agile collaboration, allowing each developer to have their own copy of some codebase, where they can work at their own pace and merge changes back into a master copy when ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter &lt;code&gt;git&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;If you or your company uses GitHub, you're probably very familiar with git. Depending on how well you can wrangle the CLI, git can be amazingly useful or incredibly infuriating. And like everyone else using git, I've ran into numerous problems and found my own various ways out of them. As my experience grew I began to keep a log of "git solutions", which in turn revealed a few useful commands I commonly employ. While simple, they've come in handy time and again. Maybe they'll come in handy for you as well!&lt;/p&gt;

&lt;p&gt;I call these commands "life-changing" because they are so simple yet pretty unknown. But most importantly, after adopting them you will probably find notable differences in your workflow. You'll (hopefully) spend less time on git and more time on what matters--pushing that code!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git remote -v&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;-v&lt;/code&gt; option stands for "verbose". Many people use &lt;code&gt;git remote&lt;/code&gt; to verify a remote (usually named &lt;code&gt;origin&lt;/code&gt;) was added to a repo. Fine for that single case, but we don't get much more information. Especially since most repos have only one remote, frequently with the same &lt;code&gt;origin&lt;/code&gt; name. If you want a bit more info, &lt;code&gt;-v&lt;/code&gt; gives you the URL to which those generic &lt;code&gt;origin&lt;/code&gt; remotes are actually pointing too. I like to think of it as knowing what the value of a variable is in a certain instance, which is often helpful in debugging situations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it's life-changing:&lt;/strong&gt; Ever have a directory you &lt;em&gt;think&lt;/em&gt; linked to a certain remote repo but wasn't sure? A directory holding a git project does not have to have the same name as the repo on, say, GitHub, so it could be a similar or vastly outdated repo. Out of caution, some developers might just delete the directory and re-clone the repo, ensuring it is the project they want. But &lt;code&gt;git remote -v&lt;/code&gt; can validate the remote repo in one step. Observe this sample output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
origin  https://github.com/nickpalenchar/nickpalenchar.git &lt;span class="o"&gt;(&lt;/span&gt;fetch&lt;span class="o"&gt;)&lt;/span&gt;
origin  https://github.com/nickpalenchar/nickpalenchar.git &lt;span class="o"&gt;(&lt;/span&gt;push&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The location of where I ran this command is a repo that is linked to my &lt;code&gt;nickpalenchar&lt;/code&gt; repository under my username (&lt;code&gt;nickpalenchar&lt;/code&gt;). No recloning needed!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git commit --allow-empty -m 'your message...'&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Generally, when you try to commit when nothing is staged for doing so, you'll get a &lt;code&gt;nothing to commit, working tree clean&lt;/code&gt; response, with no commit made. The &lt;code&gt;--allow-empty&lt;/code&gt; flag bypasses this saftey check, allowing (you guessed it) an empty commit. So even when nothing is staged or changed, a commit will be written to the git log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it's life-changing:&lt;/strong&gt; (I love showing off this one.) There are lots of situations where you need to test doing something with a new commit in order to verify some sort of workflow. A common scenario in my work is verifying a webhook in Continuous Integration will pick up a newly pushed branch. I &lt;em&gt;could&lt;/em&gt; &lt;code&gt;touch yet_another_new_file&lt;/code&gt;, then add it, &lt;em&gt;then&lt;/em&gt; commit it. Or I could &lt;code&gt;git commit --allow-empty -m 'empty commit for debugging'&lt;/code&gt; and push that. So convenient. Just one word of warning: you probably don't want this in a more formal codebase; but it's great for a prototyping/testing repo that you will dispose of.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git stash&lt;/code&gt; / &lt;code&gt;git stash pop&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Admittedly a little more well-known, but if you &lt;em&gt;weren't&lt;/em&gt; aware of &lt;code&gt;stash&lt;/code&gt;, I'm glad I can take this opportunity to enlighten you. &lt;code&gt;git stash&lt;/code&gt; sets all your working changes aside (on a stack) and gives you a clean working directory. You can git stash multiple times, and the most recent stash will be at the top if the stack that git has been adding them too. As it goes with stacks, &lt;code&gt;git stash pop&lt;/code&gt; will pop the top-most set of working changes and add them back to the branch you're currently on, ready to be modified or committed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it's life-changing:&lt;/strong&gt; The most common use for a quick &lt;code&gt;git stash&lt;/code&gt;/&lt;code&gt;git stash pop&lt;/code&gt; is to move the working changes you've made from one branch to another. Say you've started working on some changes, only to realize you're on the &lt;code&gt;master&lt;/code&gt; branch! Depending on your repo setup (and if you're in a team), you probably can't push changes from your master branch. You're stuck! This is the classic opportunity for the stash command. Simply &lt;code&gt;git stash&lt;/code&gt; to set those changes aside, restoring your master branch to good-standing cleanness. Then &lt;code&gt;git checkout&lt;/code&gt; the branch you intended to use and &lt;code&gt;git stash pop&lt;/code&gt;. All your new work has been seamlessly moved from one branch to another!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git rm --cached&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Another one that's a bit well known, but not known enough in my opinion (or I wouldn't still be removing files that were considered removed). &lt;code&gt;git rm&lt;/code&gt; can remove a file that has previously been committed, but adding &lt;code&gt;--cached&lt;/code&gt; will better ensure it does not come back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it's life-changing:&lt;/strong&gt; It's life changing when trying to update a &lt;code&gt;.gitingore&lt;/code&gt; file. Life gets tough when you &lt;code&gt;git add .&lt;/code&gt; and commit before you remember to add a certain file to a &lt;code&gt;.gitignore&lt;/code&gt;. Now you have a file tracked that you did not want. To fix this problem in a fool-proof way, you can &lt;code&gt;git rm --cached name_of_file&lt;/code&gt; (for directory use &lt;code&gt;git rm --cached -r name_of_dir&lt;/code&gt;), add the file to &lt;code&gt;.gitignore&lt;/code&gt; and commit all changes. You won't find that file ever showing up in that repo's tracking again. Another word of caution: this is NOT a solution for removing secrets that were accidentally committed, as they will still exist in the git log! But for something like say, removing &lt;code&gt;node_modules&lt;/code&gt;, this would be the perfect solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus: git auto-complete
&lt;/h3&gt;

&lt;p&gt;Not an actual command but I had to include as it's probably the biggest life-changing thing you can do with git! Git autocomplete will save you a &lt;em&gt;LOT&lt;/em&gt; of time (both in typing and fixing typos). Once set up, you'll be able to start typing a few characters of a name, then tab to auto-complete or see all possibilities of the current name fragment. It can autocomplete names of git subcommands, remotes, and branches. You can find steps to set this up &lt;a href="http://code-worrier.com/blog/autocomplete-git/"&gt;here&lt;/a&gt; or here in &lt;a href="https://github.com/nickpalenchar/swanked-out-bash"&gt;my bash profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I love these commands. They've solved common problems quickly, and  have largley improved my overall git competency. Do you have any git commands/tricks you've found to be time-saving? fool-proofing? life-changing!? I'd love for you to share your common git commands in the comments. Thanks for reading!&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Did you loose faith in the tech industry at some point in your career? How did you bounce back?</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Fri, 10 Apr 2020 13:02:49 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/did-you-loose-faith-in-the-tech-industry-at-some-point-in-your-career-how-did-you-bounce-back-bj8</link>
      <guid>https://dev.to/nickpalenchar/did-you-loose-faith-in-the-tech-industry-at-some-point-in-your-career-how-did-you-bounce-back-bj8</guid>
      <description></description>
      <category>discuss</category>
      <category>burnout</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Non-CS degree devs: How has your non-traditional background shaped your perspective on coding?</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Thu, 09 Apr 2020 22:06:46 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/non-cs-degree-devs-how-has-your-non-traditional-background-shaped-your-perspective-on-coding-31l9</link>
      <guid>https://dev.to/nickpalenchar/non-cs-degree-devs-how-has-your-non-traditional-background-shaped-your-perspective-on-coding-31l9</guid>
      <description>&lt;p&gt;Do you feel it has had a positive impact? Maybe it hass given you a unique perspective, allowing you to see things many others don't.&lt;/p&gt;

&lt;p&gt;Or maybe a negative one? Separating you from the rest of your team.&lt;/p&gt;

&lt;p&gt;Or maybe its neutral 🤔?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>codenewbie</category>
      <category>nontraditional</category>
      <category>question</category>
    </item>
    <item>
      <title>What git strategies does your company use?</title>
      <dc:creator>Nick Palenchar</dc:creator>
      <pubDate>Mon, 06 Apr 2020 19:42:53 +0000</pubDate>
      <link>https://dev.to/nickpalenchar/what-git-strategies-does-your-company-use-epp</link>
      <guid>https://dev.to/nickpalenchar/what-git-strategies-does-your-company-use-epp</guid>
      <description>&lt;p&gt;There's general best practices of working with git on a team (such as the popular gitflow), but things are always more complicated in practice! Let's talk about how our git workflow is designed in our workplace or team, including but not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Branching strategies used&lt;/li&gt;
&lt;li&gt;How mistakes in git are addressed&lt;/li&gt;
&lt;li&gt;How commit messages are formatted&lt;/li&gt;
&lt;li&gt;Any advanced concepts employed (configs, hooks, submodules, trees)&lt;/li&gt;
&lt;li&gt;Anything else!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to add how your experience has been with your company's workflow. What have you learned? Anything you would change?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>git</category>
    </item>
  </channel>
</rss>
