<?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: _juliettech</title>
    <description>The latest articles on DEV Community by _juliettech (@_juliettech).</description>
    <link>https://dev.to/_juliettech</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%2F104582%2F57b9556d-dae4-4196-b134-fdfb8a8d03c4.png</url>
      <title>DEV Community: _juliettech</title>
      <link>https://dev.to/_juliettech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_juliettech"/>
    <language>en</language>
    <item>
      <title>nerd_splash: a newsletter for nerds 👩🏻‍💻</title>
      <dc:creator>_juliettech</dc:creator>
      <pubDate>Sun, 18 Apr 2021 18:48:29 +0000</pubDate>
      <link>https://dev.to/_juliettech/nerdsplash-a-newsletter-for-nerds-3o2g</link>
      <guid>https://dev.to/_juliettech/nerdsplash-a-newsletter-for-nerds-3o2g</guid>
      <description>&lt;p&gt;Hey dev community! 👋🏼&lt;/p&gt;

&lt;p&gt;I'm starting a newsletter on &lt;strong&gt;technology trends&lt;/strong&gt;, the future of &lt;strong&gt;education&lt;/strong&gt;, and people's strange, yet &lt;strong&gt;insightful behaviors&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I'm specifically tailoring it to the most &lt;strong&gt;curious, nerdy&lt;/strong&gt; people out there - those who happily indulge in a good rabbit hole and a concisely written idea splash.&lt;/p&gt;

&lt;p&gt;3 intellectual goodies, 2 brain farts, 1 funky audio. &lt;/p&gt;

&lt;p&gt;Join the cyber community &lt;a href="https://newsletter.juliet.tech" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to write clean code</title>
      <dc:creator>_juliettech</dc:creator>
      <pubDate>Mon, 25 Jan 2021 00:19:35 +0000</pubDate>
      <link>https://dev.to/_juliettech/how-to-write-clean-code-3lhl</link>
      <guid>https://dev.to/_juliettech/how-to-write-clean-code-3lhl</guid>
      <description>&lt;p&gt;Writing clean code is like writing poetry. Poetry that is easily understood, has transformational power, and is written in a concise manner. &lt;/p&gt;

&lt;p&gt;Clean code means a scalable organization. It's the difference between a junior dev and a senior engineer.  It means being able to pivot plans without much chaos. &lt;/p&gt;

&lt;p&gt;It took me several recommendations to actually gain up the courage and read &lt;a href="https://shopforbooks.shop/products/clean-code-a-handbook-of-agile-software-craftsmanship-1st-edition?variant=32132717314142&amp;amp;msclkid=2e5d26e1c3b311efa7a446efc2909b49" rel="noopener noreferrer"&gt;Clean Code&lt;/a&gt;. It's one of those books you can't help but judge by its cover. I'll admit though - lives up to the hype. Insights are clear, specific, practical, and with a spark of nerdy humor that gets to my heart. Today, I share with you my top take-aways. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Your code being readable is as important as it being executable
&lt;/h2&gt;

&lt;p&gt;The majority of the cost of a software project is in long-term maintenance. Therefore, the code you write should clearly express your intent so that new developers can easily hop in and understand what is going on and why. &lt;strong&gt;The clearer the author can make the code, the less time others will have to spend understanding it&lt;/strong&gt;. This reduces defects and shrink the cost of maintenance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; good naming practices + single responsibility classes and functions + writing tests&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Later equals never
&lt;/h2&gt;

&lt;p&gt;Let's be honest. We've all said we'd go back and clean it up later and then forgot about it. &lt;strong&gt;Don't leave scraps of useless code that no longer serve a purpose&lt;/strong&gt;. They confuse other devs and provide no value. When changing a feature, always make sure to delete the old code. Tests should notify you if you're breaking stuff elsewhere anyways. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Deleting code can be scary, especially in a big architecture. That's why tests are key to keeping your code clean so you can delete with confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Functions should be small
&lt;/h2&gt;

&lt;p&gt;The first rule of functions is that they should be small - &lt;strong&gt;hardly 20 lines long&lt;/strong&gt;. This is because the smaller and more focused the function is, the easier it is to choose a highly descriptive name. &lt;/p&gt;

&lt;p&gt;When it comes to a function's arguments: the ideal number is 0. Then goes 1, then 2, but more than 3 should be avoided where possible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Functions should follow the &lt;a href="https://hackernoon.com/you-dont-understand-the-single-responsibility-principle-abfdd005b137" rel="noopener noreferrer"&gt;Single Responsibility Principle&lt;/a&gt; and the &lt;a href="https://stackify.com/solid-design-open-closed-principle/" rel="noopener noreferrer"&gt;Open Closed Principle&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Duplication is the evil of all code
&lt;/h2&gt;

&lt;p&gt;Duplication is the enemy of a well-designed system. &lt;strong&gt;It represents additional work, additional risk, and additional unnecessary complexity.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Avoid it at all times by keeping your code DRY (Don't Repeat Yourself), isolated, and modular.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. The only good comment is the one you found a way not to write
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Nothing can be quite so helpful as a well-placed comment. But comments are, at best, a necessary evil."&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The proper use of comments is to compensate for our failure to express our self in code. Comments are always failures. We must have them because we cannot always figure out how to express ourselves without them, but their use is not cause for celebration.&lt;/p&gt;

&lt;p&gt;Thing is, comments often lie. Not always, and not intentionally, but too often. The older a comment is, and the farther away it is from the code it describes, the more likely it is to be just plain wrong. &lt;/p&gt;

&lt;p&gt;The reason is simple: programmers can't realistically maintain all of them so all too often they become separated from the code they describe and become orphaned blurbs of ever decreasing accuracy. &lt;strong&gt;Usually comments are crutches or excuses for poor code or justifications for insufficient decisions&lt;/strong&gt;, amounting to little more than the programmer talking to him/herself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; descriptive naming practices that allow devs to know what the variables represent + provide tests so other devs can see what the main functionalities are.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. An object exposes behavior but not data
&lt;/h2&gt;

&lt;p&gt;A module should not know about the innards of the objects it manipulates. &lt;strong&gt;Objects hide their data and expose operations.&lt;/strong&gt; This means that an object should not expose its internal structure through &lt;code&gt;accessors&lt;/code&gt; because to do so is to expose, rather than to hide, its internal structure. There's no need for everyone to see you naked.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; The scope of variables should be as local as possible, without exposing more than is necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. On testing
&lt;/h2&gt;

&lt;p&gt;Test code is just as important as production code and as such, it must change and grow as the production code evolves. &lt;strong&gt;Keeping tests clean is so important because without them, you lose the very thing that keeps your production code flexible, maintainable, and reusable&lt;/strong&gt;. If you have tests you do not fear making changes to the code and without tests, every change is a possible bug. Tests eliminates the fear that cleaning code will break it.&lt;/p&gt;

&lt;p&gt;Readability keeps tests clean because they are an opportunity to explain to other devs the intent of the original author in plain English. This is why we want to test only a single concept in each test function so that the test is descriptive, reads easier, and is easier to track when it fails. Clear separation and good test writing help define expectations and keeps the scopes clear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to do this:&lt;/strong&gt; Follow the FIRST Principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast: tests should be ran quickly. If you have to wait too long for each test you're less likely to run them often.&lt;/li&gt;
&lt;li&gt;Independent/isolated: tests should not depend on each other or build from each other. They should be as isolated as possible.&lt;/li&gt;
&lt;li&gt;Repeatable: tests should be repeatable in any environment - development, staging or production.&lt;/li&gt;
&lt;li&gt;Self-validating: tests should have a boolean output. They either pass or fail.&lt;/li&gt;
&lt;li&gt;Thorough: tests should aim to cover all edge cases, all security issues, every use case and happy path.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. On error handling and exceptions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Each exception that you throw should provide enough context to determine the source and location of the error.&lt;/strong&gt; Although you usually get a stack trace from any exception, a stack trace can't tell you the intent of the operation that failed.&lt;/p&gt;

&lt;p&gt;You should avoid passing null in the code whenever possible. And if you are tempted to return null from a method, consider throwing an exception. Set error handling as a separate concern, something that is viewable independently of our main logic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Create informative error messages and pass them along with your exceptions. Mention the operation that failed and the type of failure. Our most important concern should be how they are caught.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. On classes
&lt;/h2&gt;

&lt;p&gt;Classes should be small, but rather than counting lines, we should count responsibilities. The names of classes are key to describe which responsibilities it fulfills. Our systems should be composed of many small classes, instead of a few large ones, where each small class encapsulates a single responsibility. Each class has a single reason to exist and collaborates with a few others to achieve the desired system behaviors.&lt;/p&gt;

&lt;p&gt;There is seldom a good reason to have a public variable. Loosening encapsulation is always a last resort and there should be a small number of instance variables at all. &lt;strong&gt;Good software designs accommodate change without huge investments and rework.&lt;/strong&gt; Narrowing the scopes of variables allows us to do this more easily.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Separation of concerns is one of the oldest and most important design techniques in our craft. This is for a reason. Trust it. Classes should be open for extensions, but closed for modification. In an ideal system, we incorporate new features by extending the system, not by making modifications to existing code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. On format
&lt;/h2&gt;

&lt;p&gt;Each &lt;strong&gt;blank line&lt;/strong&gt; is a visual cue that identifies a new and separate concept. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local variables&lt;/strong&gt; should appear at the top of the function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instance variables&lt;/strong&gt; should be declared at the top of the class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short lines are preferred to long ones&lt;/strong&gt; — usually around 45 characters - 100-120 characters. After that, it's probably just careless.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to do this:&lt;/strong&gt; Most of these options can be passed to a linter in your CI or text editor. Take advantage of these tools to keep you code as clean as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principles of software development
&lt;/h2&gt;

&lt;p&gt;In summary, follow these practices and your code will be clean:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a) Naming variables:&lt;/strong&gt; Implicitly knowing where things are - and using approaches such as suitable naming — is crucial to keep the code readable and hence, maintainable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"You should name a variable using the same care with which you name a first-born child."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The hardest thing about choosing good names is that it requires good descriptive skills and a shared cultural background. Clean code is read and enhanced by any developer.&lt;/p&gt;

&lt;p&gt;The name of a variable, function, or class, should answer all the big questions: why it exists, what it does, and how it is used. If a name requires a comment, then the name does not reveal its intent as it should. Programmers must avoid leaving false clues that obscure the true meaning of the code.&lt;/p&gt;

&lt;p&gt;Longer names trumps shorter names, and any searchable name is better than a constant in the code base. Single-letter names can only be used as local variables inside short methods: the length of a name should correspond to the size of its scope. Methods should be verbs or verb phrases; a class name should not be a verb.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;b) Minimal dependencies:&lt;/strong&gt; We should avoid letting too much of our code know about the third-party particulars. It's better to depend on something you control than on something you can't control. If you do, it ends up controlling you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;c) Tidiness:&lt;/strong&gt; A piece of code should be where you expect to find it. Code bases should be intuitive to navigate through; developer's intentions feel clear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;d) Cleaning:&lt;/strong&gt; Don't litter your code with useless code scraps or lines of code that capture history or wishes of the future. Reduced duplication, high expressiveness and early building of simple abstractions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;e) Standardization:&lt;/strong&gt; Your code should keep a consistent coding style and set of practices across repositories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;f) Self-discipline:&lt;/strong&gt; you frequently reflect on one's work and are willing to change and improve. However, you don't fall into the hype too fast. Study new stacks with depth and purpose.&lt;/p&gt;




&lt;p&gt;Truth is, keeping your code clean is key to maintaining innovation and organizations alive. As systems scale and grow, it is inevitable that old technology practices and hacks get left behind in the code. Keeping your code base clean is more than a nice gesture for other devs. It's a necessity for long-term survival. The cleaner your code, the happier the devs, the better the product, the longer it lasts. &lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>architecture</category>
      <category>testing</category>
      <category>career</category>
    </item>
    <item>
      <title>Best Firefox plugins for developers</title>
      <dc:creator>_juliettech</dc:creator>
      <pubDate>Tue, 08 Sep 2020 14:38:14 +0000</pubDate>
      <link>https://dev.to/_juliettech/best-firefox-plugins-for-developers-1f7e</link>
      <guid>https://dev.to/_juliettech/best-firefox-plugins-for-developers-1f7e</guid>
      <description>&lt;p&gt;Let's face it. As a dev, we spend more time on the browser than we do pretty much anywhere else. Whether we're designing, building, or going deep into the research rabbit-hole, the browser is the home and breeding ground for most of our ideas and tools.&lt;/p&gt;

&lt;p&gt;That's why collecting a good repertoir of plugins is so crucial to surfing smoothly and optimizing our workflow. What you'll see below is a curated list of the best ones I've gathered throughout the years using Firefox. &lt;/p&gt;

&lt;p&gt;"Why Firefox?", you may ask. Few reasons. &lt;br&gt;
1) Is open-source,&lt;br&gt;
2) MDN documentation has saved my life multiple times, &lt;br&gt;
3) I have &lt;em&gt;some&lt;/em&gt; respect for the last shreds of privacy I have left from Google, &lt;br&gt;
4) Awesome dev tools.&lt;/p&gt;

&lt;p&gt;Need I say more. Let's begin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wappalyzer
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#stack #research&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.wappalyzer.com/" rel="noopener noreferrer"&gt;Wappalyzer&lt;/a&gt; shows you which frameworks and technologies were used to build a specific site. This is very useful when you want to make an estimate to start working on an existing project, or simply get some insights on the stack someone else used for their great designs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; freelance developer working on pre-built projects who needs to know more about the platform at a fast glance. Also helpful if you're a curious human wondering how other people have built their platforms and designs. &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%2Fi%2Fw5wgxi58cq0t287gv2op.gif" 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%2Fi%2Fw5wgxi58cq0t287gv2op.gif" alt="Alt Text" width="1763" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Pesticide
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#front-end #css #layout&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/pesticide-for-firefox/" rel="noopener noreferrer"&gt;Pesticide&lt;/a&gt; is a front-end must-have for everyone who has spent time struggling to find &lt;em&gt;that&lt;/em&gt; one closing &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; breaking my entire screen, aka every one who's ever done front-end. Open Pesticide visibly lays out where a container starts and ends by drawing borders around &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s. This clearly point out which &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; is causing havoc and save us hours of emotional pain. Pesticide is a gift from the front-end Gods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; front-end devs struggling to find broken &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s or enlarged paddings.&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%2Fi%2F8lnzpz5g0q5bo45anhdg.gif" 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%2Fi%2F8lnzpz5g0q5bo45anhdg.gif" alt="Alt Text" width="760" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  OLI Grid CSS
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#front-end #css #grid&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Whether you're using CSS or Bootstrap grid, &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/oli-grid-css/" rel="noopener noreferrer"&gt;OLI Grid CSS&lt;/a&gt; comes in really handy to help visualize your layout throughout a page by showing you exactly where and how big your columns are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; front-end web devs dealing with grids and Bootstrap often.&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%2Fi%2Fwf265q3fulbx99sf7348.gif" 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%2Fi%2Fwf265q3fulbx99sf7348.gif" alt="Alt Text" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily 2.0
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#news #browser-experience&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://daily.dev/" rel="noopener noreferrer"&gt;Daily 2.0&lt;/a&gt; turns your browser's &lt;strong&gt;New Tab&lt;/strong&gt; screen onto a tailored dev news feed filled with all your favorite resources about the topics you care about. If you like being up to date with the latest technologies, tech articles, events, and tutorials, Daily 2.0 will save you hours of browsing brought directly at your doorstep. And no, it's not another newsletter to jampack your inbox. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; you endulge in reading tech articles, but don't have time to scroll through HackerNews or dev.to for hours.&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%2Fi%2Fjcd5z8r1dfsbg1ag8hm9.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%2Fi%2Fjcd5z8r1dfsbg1ag8hm9.png" alt="Alt Text" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dark Reader
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#browser-experience&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As devs, we spend most of our days in front of a computer, which  means our eyes will eventually start to hurt from so much UV light. In order to help, &lt;a href="https://darkreader.org/" rel="noopener noreferrer"&gt;Dark Reader&lt;/a&gt; transforms every website into Dark Mode. &lt;/p&gt;

&lt;p&gt;That's right, you're welcome. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; if you're a Dark Mode fan, which is everyone, or if you're having some problems with your eyes after being in the computer for so long. &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%2Fi%2Fs32u682y1zlpov9wxofk.gif" 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%2Fi%2Fs32u682y1zlpov9wxofk.gif" alt="Alt Text" width="1763" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adblock Plus
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#browser-experience #privacy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There is nothing worse than having spammy ads chase you all around the web. &lt;a href="https://adblockplus.org/" rel="noopener noreferrer"&gt;Adblock Plus&lt;/a&gt; allows you to have an add-free, zen experience while browsing online by eliminating all targeted ads. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; you have way too information about you on the internet already and ads are getting annoying and scarily specific. &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%2Fi%2Fr6daz4k3at9u85zgnmz8.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%2Fi%2Fr6daz4k3at9u85zgnmz8.png" alt="Alt Text" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Facebook container
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#privacy #tracking&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Built by &lt;a href="https://www.mozilla.org/en-US/" rel="noopener noreferrer"&gt;Mozilla&lt;/a&gt; itself, &lt;a href="https://www.mozilla.org/en-US/firefox/facebookcontainer/" rel="noopener noreferrer"&gt;Facebook Container&lt;/a&gt; plugin stops any page from giving your information to Facebook so can track your movements and habits. It's honestly scary the amount of sites where this actually shows up as being automatically enabled. The things you don't know 'til you know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; you worry about privacy and want to keep your browsing habits away from Facebook.&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%2Fi%2Fjb8u651uc9q48fbnonrz.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%2Fi%2Fjb8u651uc9q48fbnonrz.png" alt="Alt Text" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTPS Everywhere
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#privacy #encryption&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;HTTPS protects your communications by enabling SSL encryption automatically on sites that are known to support it, even when you type URLs or follow links that omit the &lt;code&gt;https://&lt;/code&gt; prefix. &lt;a href="https://www.eff.org/https-everywhere" rel="noopener noreferrer"&gt;HTTPS Everywhere&lt;/a&gt; adds a layer of protection to your browsing experience, which is especially useful if you often use public wi-fis and fear people will intercept your transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; digital nomads who move from café to bar to airports with their computers. You probably also care about privacy issues while you do important transactions online.&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%2Fi%2Ftsp7ci5r34c2x380lnnm.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%2Fi%2Ftsp7ci5r34c2x380lnnm.png" alt="Alt Text" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Liner
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#note-taking #productivity&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getliner.com/" rel="noopener noreferrer"&gt;Liner&lt;/a&gt; is a greeeat tool if you're someone who's reading way too many articles and wants to keep track of good quotes or explanations you find online. It allows you to save quotes, paragraphs, and images and categorize them onto folders for easier retrieval when you need them. It's like having a highlighter online. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; researchers, documentation hoarders, deep readers.&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%2Fi%2Faewx0jtw7dt1tqd1f0em.gif" 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%2Fi%2Faewx0jtw7dt1tqd1f0em.gif" alt="Alt Text" width="1763" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Side View
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#productivity #browser-experience&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You know that moment when you're doing a tutorial and wish you could see the video on one end of the screen and have your note-taking web app on the other? Or when you're reading notes and want to edit your presentation slides at the same time, all in your browser? &lt;/p&gt;

&lt;p&gt;Mozilla's &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/side-view/" rel="noopener noreferrer"&gt;Side View&lt;/a&gt; enables you to split your browser window in two so you can see both sites at the same time. If you thought native screen splitting was cool, you're not gonna regret getting Side View. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; you don't often use native apps, but rather do most things on the browser. Probably because you use a public/office computer or don't have much space locally. Or maybe you just prefer browser apps to native ones. &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%2Fi%2F7lbx59c44seww9olxn04.gif" 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%2Fi%2F7lbx59c44seww9olxn04.gif" alt="Alt Text" width="760" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Notion Clipper
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;#note-taking #productivity&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For you &lt;a href="https://notion.so" rel="noopener noreferrer"&gt;Notion&lt;/a&gt; heavy-users, this baby seduced me the moment I found out it existed. With &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/notion-web-clipper/" rel="noopener noreferrer"&gt;Notion Web Clipper&lt;/a&gt; you can automatically save an article directly onto a page in your Notion workspace straight from the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideal target:&lt;/strong&gt; You take most of your notes in Notion and want to keep information centralized in that space. You're probably also too lazy to just copy paste the link and add it yourself.&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%2Fi%2Fuzjjx0h3gre0e2ujnhcr.gif" 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%2Fi%2Fuzjjx0h3gre0e2ujnhcr.gif" alt="Alt Text" width="1763" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firefox</category>
      <category>plugins</category>
      <category>free</category>
      <category>hacks</category>
    </item>
    <item>
      <title>Git merge, git rebase, and crawling out of the git hole</title>
      <dc:creator>_juliettech</dc:creator>
      <pubDate>Tue, 28 Jan 2020 03:09:42 +0000</pubDate>
      <link>https://dev.to/_juliettech/git-merge-git-rebase-and-crawling-out-of-the-git-hole-1k9d</link>
      <guid>https://dev.to/_juliettech/git-merge-git-rebase-and-crawling-out-of-the-git-hole-1k9d</guid>
      <description>&lt;p&gt;To master git is like being a time wizard ✨. You can move across points in time, flying like a bird from one commit to the next, always having a stepping point to go back to when you fuck up. Because let’s be honest, at one point or another, we will. &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%2Fyz2rc05p399rhwrqjd6f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyz2rc05p399rhwrqjd6f.jpg" alt="git hole explained" width="800" height="995"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's how we get into the git hole. For those of you lucky enough to have never experienced it, the git hole is that dark place in a developer’s life when your timeline becomes a blur and you’re not sure what happened or where you lost your perfectly-working code.&lt;/p&gt;

&lt;p&gt;So what's this big fuss between &lt;code&gt;git merge&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most important thing to understand is that when we’re talking about merging and rebasing, it’s all about how your branch ends where it ends.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What do I mean by this?&lt;/p&gt;

&lt;h2&gt;
  
  
  What they have in common
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git merge&lt;/code&gt; and  &lt;code&gt;git rebase&lt;/code&gt; both join your code with another branch, usually your remote’s master branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where they differ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  git merge
&lt;/h3&gt;

&lt;p&gt;When you’re doing a merge, your git tree is coming full circle and you can see this graphically if you download a visual tool like &lt;a href="https://www.sourcetreeapp.com/" rel="noopener noreferrer"&gt;Sourcetree&lt;/a&gt;. This means that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The branch you’re currently working on, with all your commits and lines of code, will be joined back into master, leaving a trail of where it first left and when you came back into the code.&lt;/li&gt;
&lt;li&gt;Once the conflicts are fixed, if any, it will generate an additional &lt;strong&gt;merge commit&lt;/strong&gt; to keep track of where you were when your code joined master’s.&lt;/li&gt;
&lt;/ol&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%2F9tn3ad1vpjv4w6945cuc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tn3ad1vpjv4w6945cuc.jpg" alt="Alt Text" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  git rebase
&lt;/h3&gt;

&lt;p&gt;When you rebase, you’re basically playing with time. The result is as if you were coding from and into masters the whole time, except you were really coding off of your own branch. If you look at your tree after a &lt;code&gt;git rebase&lt;/code&gt;, it doesn’t have any branches connected back into master because &lt;code&gt;git rebase&lt;/code&gt; pretends as if you were "always" coding in master. &lt;/p&gt;

&lt;p&gt;This means that when fixing conflicts, rebasing chooses your remote master version as the Queen of All Truth 👸🏻. It’s as if you’re changing the base of your code to be the base of the code found in your masters branch and &lt;strong&gt;it does not leave a merging commit&lt;/strong&gt; because it acts as if it had been “there the whole time”.&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%2Fbczdi1fb1t6878q6bzl6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbczdi1fb1t6878q6bzl6.jpg" alt="Alt Text" width="800" height="969"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Going deeper
&lt;/h2&gt;

&lt;p&gt;Now, to my understanding, git’s superpower is keeping track of where we are at any given point thanks to us writing commits that mark specific moments to go back to if needed. &lt;/p&gt;

&lt;p&gt;So, in my brain, I’ve never really understood why people would want to &lt;code&gt;rebase&lt;/code&gt; and play git kong-fu rather than just &lt;code&gt;merge&lt;/code&gt; and be on the safe of history. Playing with time like this had to be either contradictory or brilliant.&lt;/p&gt;

&lt;p&gt;Indeed, what I hadn’t understood was that the reason &lt;strong&gt;why&lt;/strong&gt; people use rebase instead of merging. Rebasing allows your codebase to be slimmer and have a cleaner overall history without any branches coming off of your linear tree. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;With both &lt;code&gt;git rebase&lt;/code&gt; and &lt;code&gt;git merge&lt;/code&gt;, you can squash all your commits into one so that your codebase has only one commit per feature, but &lt;code&gt;git merge&lt;/code&gt; will always produce that final merge commit that only fattens your code and provides no additional value.&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;And it makes sense. If you have 30+ developers working on the same code, and each is committing every step of their process, you will quickly have a fat and dirty codebase filled with random commits like 'fixed typo'. If you &lt;code&gt;rebase&lt;/code&gt; and squash all your commits together, however, the result is a linear tree detailing every feature built and their code.&lt;/p&gt;

&lt;h2&gt;
  
  
  In practice
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Setup
&lt;/h4&gt;

&lt;p&gt;I’ll first create a random &lt;code&gt;index.rb&lt;/code&gt; file and make sure git is initiated. This assumes you already have git in your computer connected to a remote repository somewhere. I’ll also create a branch for my first feature.&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="c"&gt;# Create file&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;music-app &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;index.rb    
&lt;span class="c"&gt;# Initiate git   &lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;music-app &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git init    
&lt;span class="c"&gt;# Creates github repo with the name of the folder (I’m in using the [hub gem](https://hub.github.com/)) &lt;/span&gt;
hub create    
&lt;span class="c"&gt;# Checkout of master and create a branch called bands4tonight    &lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; bands4tonight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  What we'll build?
&lt;/h4&gt;

&lt;p&gt;I will create a small Ruby app that iterates over an array of my favorite bands and throws at me one by random.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;bands&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Incubus'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Arctic Monkeys'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Papooz'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'L’imperatrice'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Poolside'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;bands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sample&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then go to the terminal to save up my progress. God forbid I lose my beautiful work.&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="c"&gt;# Check everything is as I expect    &lt;/span&gt;
git status    
&lt;span class="c"&gt;# Adds everything to the bucket    &lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;    
&lt;span class="c"&gt;# Commit my changes    &lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'program returns a sample band'&lt;/span&gt;    
&lt;span class="c"&gt;# Push my code to bands4tonight branch    &lt;/span&gt;
git push origin bands4tonight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  git kong-fu
&lt;/h4&gt;

&lt;p&gt;At this point my code is found remotely in my branch. Great.&lt;/p&gt;

&lt;p&gt;Meanwhile, let's say other developers are coding away features on different parts of the app, adding their favorite bands to the mix or just building new functionalities. I need to make sure I have the latest updated version of the code.&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="c"&gt;# Move to master branch&lt;/span&gt;
git checkout master
&lt;span class="c"&gt;# Pull in locally the work the other devs have been doing&lt;/span&gt;
git pull 
&lt;span class="c"&gt;# Move into my working branch&lt;/span&gt;
git checkout bands4tonight
&lt;span class="c"&gt;# Make sure the code I just pulled in is now the base for my working code in my branch&lt;/span&gt;
git rebase master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Up until here, my working branch has the latest code from master and acts as if I was always there. Yes, that's exactly what we wanted!&lt;/p&gt;

&lt;p&gt;The real trick happens as I keep on adding more code to my feature.&lt;/p&gt;

&lt;p&gt;Let's say this week I’m obsessed with a new band (which I'd recommend &lt;a href="https://open.spotify.com/artist/04kzQulIze9pZ7MadKI9w2?si=1i9B4Q4IRuGrxN99A97Ysw" rel="noopener noreferrer"&gt;checking out&lt;/a&gt; btw 😉). So I go back into &lt;code&gt;index.rb&lt;/code&gt; and add it to my list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;bands&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Incubus'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Arctic Monkeys'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Papooz'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'L’imperatrice'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Poolside'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Señor Loop'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Back in terminal, it's time to push my code to my remote branch to make the Pull Request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'program returns a sample band'&lt;/span&gt;
git push &lt;span class="nt"&gt;-force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By writing &lt;code&gt;git commit --amend -m ‘..’&lt;/code&gt;, I’m adding my new work on top of my latest commit and just moving it forward in the timeline.&lt;/p&gt;

&lt;h4&gt;
  
  
  This is great because:
&lt;/h4&gt;

&lt;p&gt;1) It conveniently preserves the older versions inside my commit so I can go back in time if I need it. &lt;br&gt;
2) It creates one commit per feature so that someone checking out the code base later on can easily see all the code where one feature is built.&lt;br&gt;
3) It doesn't fatten the codebase with lots of commits, but rather only shows up the one where all code is seen together&lt;br&gt;
4) It doesn't generate an extra merging commit it actually doesn't need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also important to note&lt;/strong&gt; is that because I updated the commit, I am playing wizard with git's regular timeline. This means I have to force the push otherwise git won't allow it. &lt;/p&gt;

&lt;p&gt;(Disclaimer here: I was afraid of forcing the push the first time I did it too. But a smart dev told me that at the end of the day, I was only working in my own local branch anyways so allll shall be fine under the Tuscan sun.)&lt;/p&gt;

&lt;p&gt;And just like that, once our Pull Request is merged into master, you can run &lt;code&gt;git log&lt;/code&gt; and see the clean, elegant timeline we've just created without any unnecessary merge commits. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Because at the end, your git tree is the only tree that is better off without leaves or branches.&lt;/strong&gt; 🌳&lt;/p&gt;

&lt;p&gt;Hope this was helpful :) spare some love if it was 💙 &lt;/p&gt;

</description>
      <category>git</category>
      <category>merge</category>
      <category>rebase</category>
      <category>bash</category>
    </item>
  </channel>
</rss>
