<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ satire - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ satire - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 25 May 2026 20:15:52 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/satire/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Test Engineering Anti-Patterns: Destroy Your Customer Satisfaction and Crater Your Quality By Using These 9 Easy Organizational Practices ]]>
                </title>
                <description>
                    <![CDATA[ By Cristian Medina A recent podcast episode reminded me that it's a good idea to examine things from different perspectives. Doing so can expose behaviors that appear purposeful as consequences of environmental factors. You won't succeed at fixing th... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/organizational-test-practices-guaranteed-to-lower-quality/</link>
                <guid isPermaLink="false">66d45e03680e33282da25e53</guid>
                
                    <category>
                        <![CDATA[ engineering ]]>
                    </category>
                
                    <category>
                        <![CDATA[ organization ]]>
                    </category>
                
                    <category>
                        <![CDATA[ satire ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 30 Sep 2019 13:59:11 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9ca033740569d1a4ca4735.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Cristian Medina</p>
<p>A recent podcast episode reminded me that it's a good idea to examine things from different perspectives. Doing so can expose behaviors that appear purposeful as consequences of environmental factors. You won't succeed at fixing those behaviors unless you do something about the environment that encourages them.</p>
<p>Today the discussion is about Test engineering and organizational practices that tend to lower the quality of your deliverables.</p>
<p>When reading through, please keep in mind that we're emphasizing goals that are contrary to what you expect - lower quality and customer satisfaction. The suggestions may seem cynical and counter-intuitive, but that's the point of the exercise. So let's get started.</p>
<h2 id="heading-1-make-the-test-teams-solely-responsible-for-quality">1. Make the Test teams solely responsible for quality</h2>
<p>One of the best ways to lower quality is by shifting focus away from the product and towards internal politics.</p>
<p>You want to capitalize on default human behavioral responses that minimize reasoning and maximize conflict — what better way of doing so than encouraging tribalism.</p>
<p>Holding only one organization responsible for a goal (no matter what it is) will guarantee the divisive behavior you're trying to obtain.</p>
<p>That group will spend most of its time and resources proving their responsibilities were met, instead of facilitating product goals.</p>
<p>To maximize the impact of this principle, make sure that Test teams <em>only</em> own the quality objective. They should not be responsible for determining release content, that's the Marketing team. Nor should they be involved in setting release dates, that's a Sales function. They also don't determine which problems to fix, that's up to the Product team.</p>
<p>You want the Development team focused on delivering features by the time the Marketing and Sales orgs promised them. So avoid imposing any code commit or merge rules requested by Test, like requiring code reviews, passing linters, passing unit tests, and others. After all, quality is Test's responsibility, not Development's.</p>
<p>Breaking up objectives in this way, turns meeting agendas away from customer experience and towards the blame game. You know you're on the right track when you hear statements like:</p>
<ul>
<li>"Why didn't you find this bug sooner!"</li>
<li>"The current tests failed, but we really need to merge this new feature so you can start testing it."</li>
<li>"Why didn't Test find this customer issue?"</li>
<li>"We promised the customer a release by this date, so let's defer all Test findings and give them a build today."</li>
<li>"We found the issue that the customer reported, but you deferred it last month!"</li>
<li>"I can't run tests because you gave me a broken build."</li>
</ul>
<p>Spending time arguing about whose job it is to do the work is an excellent mechanism to reduce satisfaction with your product or service.</p>
<h2 id="heading-2-require-all-tests-to-be-automated-before-releasing">2. Require all tests to be automated before releasing</h2>
<p>Another device for distracting from quality is requiring test automation for every feature. It guarantees that your Test organization spends most of its time doing software development instead of test engineering.</p>
<p>The goal should change from validating a product attribute, to counting how many automated tests ran to verify it.</p>
<p>Rather than thinking through the test breakdown that validates various code paths or fundamentals of a function, engineers will spend time and resources executing multiple iterations of the same test. It leads to higher counts.</p>
<p>It also promotes a fragile test infrastructure and increases maintenance costs.</p>
<p>Since there's no time to consider test strategy and abstractions, they're forced to write very specific - yet brittle - workflows. Whenever Development makes slight changes to the feature, the tests break.</p>
<p>The Test organization must focus on producing a large number of tests as fast as possible. Otherwise, they'll have time to push more value into the product with more meaningful tests.</p>
<p>Make sure to reward this behavior by promoting engineers that produce the highest number of automated tests that run frequently. But don't forget about those that save time by writing scripts that execute other scripts while hard-coding all the arguments so the user won't have to type them.</p>
<h2 id="heading-3-require-100-code-coverage">3. Require 100% code coverage</h2>
<p>Since product quality and customer experience are only correlated to code coverage, forcing your Test and Dev teams to chase 100% coverage is another tactic.</p>
<p>Make sure you direct all execution conversations towards the coverage measurement and hold teams accountable for it. People will focus on building tests that call all code functions, regardless of their output.</p>
<p>A nice bonus is that measuring coverage tends to affect timing or performance. It makes it hard for anyone to understand the actual customer experience, thereby adding to your goal of decreased satisfaction.</p>
<p>Make sure that tool implementations are automated, and that every report includes the coverage numbers, so it's easy to bring up in conversations.</p>
<p>Avoid focusing on code branching coverage. It's essential to prove that you tested every function, not every code path in the function. After all, there's no point in planning for customers to hit failure cases. They only happen a small percentage of the time.</p>
<p>Just like the previous section, don't forget to reward the team for being as close as possible to the 100% coverage number. It goes a long way in showing your engineers the behavior that matters.</p>
<h2 id="heading-4-isolate-the-test-organization-from-development">4. Isolate the Test organization from Development</h2>
<p>One of the worst things in software development is when the Dev team is so in-sync with Test that they finish each other's sentences. It's a red flag! It means that you're on a path for producing a quality product or service.</p>
<p>Reduce all chances for collaboration, including physical proximity. </p>
<p>Make sure to separate the teams, so it takes physical effort for a Test engineer to walk over to a Developer and ask questions. Human nature will take hold and solve the rest of the problem for you.</p>
<p>When both of these organizations actively collaborate, they tend to help each other considerably. You'll find the Developer gives the Tester a heads-up about new changes. Alternatively, the opposite could happen, where a Developer will know about a bug before it's reported. Not only does this break tribalism, but it sidetracks well-defined responsibilities.</p>
<p>Collaboration leads to less process: </p>
<ul>
<li>In some cases, issues are just fixed instead of reported.</li>
<li>Internal documentation and knowledge transfers receive less time and attention.</li>
<li>Test engineers become more knowledgeable about the product. </li>
<li>Release schedules start to reflect reality during planning. </li>
</ul>
<p>All of these lead to higher quality and better customer satisfaction! The direct opposite of your goals.</p>
<p>Enforcing more process is a great way of discouraging this behavior. It helps highlight the requirements that an engineer doesn't meet when directly engaging with other teams. It can come in the form of extra checkpoints and meetings, but preferably, more documentation.</p>
<p>Another excellent tool for increasing isolation is access controls. Make sure that Test does not have access to source code and that Dev cannot see the procedures of a test case.</p>
<p>I find that separating tests from code is a must! If you have both in the same repository, then Developers will know ahead of time when they break a test. A process shortcut that leads to the very efficiencies we don't want.</p>
<h2 id="heading-5-measure-the-success-of-the-process-not-the-product">5. Measure the success of the process, not the product</h2>
<p>I can't tell you how many conversations I've had with coworkers that keep asking impertinent questions about customer adoption.</p>
<p>Things like: How many customers are using that feature? What's the potential impact to our install base? How many steps must the user go through to use this feature? What's the attach rate? How big is our potential customer pool for that requirement? How many users asked for this function?</p>
<p>These folks don't get it. It's imperative to discourage this behavior as it happens. It tends to spread to other team members, and pretty soon, you'll have an organization that only cares about quality.</p>
<p>The best thing to do is redirect that energy by asking questions about the process instead. The items below are some stats that help accomplish this.</p>
<h3 id="heading-number-of-open-issues-and-who-opened-them">Number of open issues and who opened them</h3>
<p>It helps prove how well the Test team is doing and how much work they're putting in.</p>
<p>Don't forget to encourage the employees that opened the highest number of issues. Bring it up in meetings often, so the rest of the folks are not surprised during performance reviews.</p>
<p>Some will try to argue that too many open issues lead to significant overhead in managing them. Again, that's the whole point.</p>
<p>Refocus team effort away from quality and towards process. Plus, if there are too few issues, then the Test org looks like their not working.</p>
<h3 id="heading-amount-of-time-an-issue-spent-waiting-for-test-response">Amount of time an issue spent waiting for Test response</h3>
<p>It's trickier to measure, but when you can pull it off, it's a great way to show how well the Test org is doing when compared to Development. It encourages behaviors that help maximize the active issue count.</p>
<p>To help the situation, try to tie issue status changes to process requirements that enforce particular field values for specific situations.</p>
<p>It reduces the time an issue spends on the Test side whenever parameters don't match because the engineer will have to ask for the correction.</p>
<p>Development is usually too busy to care about this stuff. So it also leads to lots of political discussions in project management meetings and encourages more tribalism.</p>
<h3 id="heading-percentage-of-issues-in-a-closed-state">Percentage of issues in a closed state</h3>
<p>Before a release, you want to encourage the team to close all issues. It's best to base the performance review of Development engineers on how many issues were open against their code at release time.</p>
<p>It guarantees fewer defects opened by the Development team - further boosting your Test performance. It also discourages communication with the Test organization and increases friction.</p>
<h3 id="heading-percentage-of-tests-executed-compared-to-an-execution-plan">Percentage of tests executed compared to an execution plan</h3>
<p>Don't forget to make an execution curve telling the team how to spend their time throughout the test cycle. Be careful not to base it on history, or you may find that the org meets the numbers and improves quality.</p>
<p>Check the graph in every status meeting and ask for progress regardless of the state of the product. It forces the inclusion of tests meant to always complete just to pad the numbers and meet expectations.</p>
<p>Discourage anyone that beats projections. Doing so makes it look like the Test org has free time.</p>
<h3 id="heading-measure-the-pass-rate">Measure the pass rate</h3>
<p>You'll want to track the percent of test execution that's passing vs. failing for all the tests put together.</p>
<p>Make sure you explain to the team the required pass rate to reach a release stage. It reminds them to design suites with enough tests that always pass so that you can meet process requirements.</p>
<h2 id="heading-6-require-granular-projections-from-engineers">6. Require granular projections from engineers</h2>
<p>Getting a schedule from Dev is hard. Many times they try to throw reality at the problem as if complexity mattered. The truth is you'll release by the date designated by the Sales organization regardless, but Dev never seems to understand that.</p>
<p>Whenever discussing code completion dates, make sure to ask for the day, not the week or the month when they'll complete. If you disagree with that date, bring it up in a public forum of all their peers so they can argue it.</p>
<p>Doing so accomplishes several essential points in lowering quality:</p>
<ul>
<li>Developers fight among themselves, reducing communication.</li>
<li>They stop thinking they have a say in how to spend their days or do their jobs, which increases turnover.</li>
<li>It makes it unlikely that they meet their deadlines, which lowers their performance review and also increases turnover.</li>
</ul>
<p>Achieving high turnover is like the holy grail of lowering quality. It helps reduce the bottom line with fewer raises and promotions. It increases disinformation, emphasizing individualism. Finally, it removes any ownership that might build up in the team over time.</p>
<h2 id="heading-7-reward-quick-patching-instead-of-solving">7. Reward quick patching instead of solving</h2>
<p>Given enough time, engineers can solve almost every problem. But when you do the opposite, an interesting phenomenon occurs: instead of resolving the root issue, they fix the symptoms, sometimes ignoring the problem completely.</p>
<p>Here are some of the benefits you'll see when using this technique:</p>
<ul>
<li>Development gets praise for being quick.</li>
<li>The base problem isn't solved, so there's a bunch of opportunities for writing future bugs, making the Test team and the process look better.</li>
<li>The customer will keep running into the same issues, which translates to lower satisfaction.</li>
<li>The patches for each symptom develop a spiderweb of dependencies, making future work harder and more brittle, which translates to lower quality.</li>
<li>You'll gain issues for everyone you fix at a viral pace. The more problems to fix, the more process you need to track the ones left behind. Win-win!</li>
</ul>
<p>Rewards are fundamental here as well. Make sure to incentivize this type of work with awards, and broadcast them to the team so everyone is aware of the behavior you want.</p>
<h2 id="heading-8-plan-for-today-instead-of-tomorrow">8. Plan for today instead of tomorrow</h2>
<p>There's always someone trying to foresee what tomorrow brings. These days some engineers will do statistical analysis or machine learning. Formulating an algorithm that explains how well execution is going, which issues are important, how much time is actually needed, the number of resources required to test, etc.</p>
<p>Then there are the folks that have been around long enough and keep bringing up past mistakes or wasted efforts you should avoid.</p>
<p>Ignore that advice and always plan for the best case today. It doesn't matter if technical debt is high, if the 3rd party vendor has low quality, or if everyone planned a vacation on the same day during the next release.</p>
<p>Deal with problems when they occur, not before. Otherwise, efficiency will increase.</p>
<h1 id="heading-9-conclusions">9. Conclusions</h1>
<p>While there are many more points to cover, it seems our fictional Sales team decided to ship before completing the article!</p>
<p>On a more serious note, test engineering and product validation gets exponentially harder with complex systems and large organizations. It's important to incentivize the right type of behaviors in order to succeed. However, those aren't always obvious and in some cases, they're even counter-intuitive.</p>
<p>I do hope the article helped you observe the test world from a different perspective. One that provides some helpful insight. I find this practice of aiming for bad outcomes quite illuminating sometimes. At the very least, it's loads of fun to think through.</p>
<hr>
<p>If you liked the article and want to read more about development best practices from Cristian Medina and others, please visit <a target="_blank" href="https://tryexceptpass.org">tryexceptpass.org</a>. Stay informed with their latest content by subscribing to <a target="_blank" href="https://tinyurl.com/tryexceptpass-signup">the mailing list</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Totally Not Sarcastic at All Guide to How to Design for the Web ]]>
                </title>
                <description>
                    <![CDATA[ By Casper Beyer I’ve written about how to design for the modern web before, way back in 2018. But the web moves forward quickly so those guidelines are already obsolete and outdated, as more modern conventions have become mainstream. Let's break down... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-design-for-the-web-in-2019/</link>
                <guid isPermaLink="false">66d45dd5c7632f8bfbf1e3e3</guid>
                
                    <category>
                        <![CDATA[ satire ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 26 Aug 2019 15:56:13 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/08/1-HG5PTqPptU4IKFhrLu2j9w-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Casper Beyer</p>
<p>I’ve written about how to design for the modern web before, way back in 2018. But the web moves forward quickly so those guidelines are already obsolete and outdated, as more modern conventions have become mainstream.</p>
<p>Let's break down and go through the most important design principles of designing for the <strong>modern web in 2019</strong>.</p>
<h3 id="heading-let-users-know-you-have-a-mobile-application">Let Users Know You Have A Mobile Application</h3>
<p>This one remains the most important principle and it’s not without reason. Well paid focus groups have shown that the very first thing a user wants to do when visiting your web site in their web browser is to install a mobile application.</p>
<p>The best way to achieve this is to show a modal dialog that prompts them to install it.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-N52LD7f0iAMB9-iPo496zA.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>As an optional step, you may add a button or hyperlink to close said dialog. But it's important to use some cryptic text, preferably worded to shame the user to comply.</p>
<p><strong>Tip</strong>: If you don’t have an actual mobile application, you can just get an intern to package your website in a webview with security disabled and ship that!</p>
<h3 id="heading-implement-a-do-not-track-policy">Implement a Do Not Track Policy</h3>
<p>Many modern browsers these days support a HTTP header called DNT which stands for Do Not Track. This header is meant to signal that a user does not want to be tracked. Unfortunately this is enabled by default in some browsers like <a target="_blank" href="https://brave.com/cas860">Brave (An open source ad-blocking browser made by the creator of JavaScript Brendan Eich)</a>.</p>
<p>However, don’t worry as all is not lost! We’ve found that most users will remove this header when prompted to do so so. In order to handle this, we recommend that you serve a guide on how to disable it when the header is present.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-Gfb0mEijJO5D263uDCZlRA.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Don’t serve the prompt to disable <strong>DNT</strong> on the guide that shows the users how to disable it, as the conversion rate ends up being rather poor.</p>
<h3 id="heading-implement-a-cookie-policy">Implement a Cookie Policy</h3>
<p>Cookie consent is confusing. While it's not required in most cases, with reasonable cookie use it’s better to prompt the user for consent so we can track everything without fear of repercussions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-nje_74QVARVpyYXWjEqBkg.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Don’t serve pages without cookies enabled even when we don’t need them. It means we can track less personal information, thus we have less user information to sell.</p>
<h3 id="heading-blocking-ad-blockers">Blocking Ad-Blockers</h3>
<p>Ad-blockers are everywhere and can really hurt your margins, so the obvious precaution to take is to block ad-blockers.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-Xzcqh2F2hYOnmu85f8lUSA.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Chrome is moving to block ad-blockers, so if the user is using a browser like Brave we’ll be able to just claim the user’s browser isn’t modern enough.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-YdD82em4kZRVeYsMvHRQxg.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Don’t tell anyone about <a target="_blank" href="https://brave.com/cas860">Brave, the open source Chromium based browser with built-in ad-blocking</a>.</p>
<h3 id="heading-blocking-non-us-countries-and-devices">Blocking Non U.S Countries and Devices</h3>
<p>Between Cupcake nations, GDPR, link taxes and the Huwaei ban which we haven’t been able to figure out at all, the best approach is just to block them all to avoid any and all liability.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-kUODMQZJ7hSwkgviUdRGrA.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: You can …</p>
<h3 id="heading-maximizing-your-layout">Maximizing Your Layout</h3>
<p>The days of 800 pixels wide layouts are gone. Modern displays tend to be widescreen so make sure to take advantage of the entire width in the layout.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-gOOfNDipsZ7CWWfsIpi16A.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Research has shown that modal dialogs that cannot be closed perform better.</p>
<h3 id="heading-use-notifications">Use Notifications</h3>
<p>Modern browsers support notifications so enabling them is a must. But as a fallback, also automatically subscribe the user to to a newsletter, sms notifications and/or email notifications.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-gOOfNDipsZ7CWWfsIpi16A-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Use these notifications to tell users when you have a new version of the mobile application available.</p>
<h3 id="heading-prompt-the-user">Prompt The User</h3>
<p>Sometimes users forget they can sign up. Be sure to prompt them regularly and feature a prominent sign up link or button.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-mzhgQidc4ThapURdDfRGyQ.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Also prompt the user when they’re about to leave the website or their mouse cursor leaves the website.</p>
<h3 id="heading-allow-the-user-to-opt-out">Allow The User To Opt-Out</h3>
<p>It’s very important that we are user friendly and aren’t intrusive. This means we have to let users opt out of our constant prompts and modal dialogs.</p>
<p>The best practice here is to put the opt-out settings in a place where the user will easily spot it — typically this is inside one of the “account preferences” pages.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-hUVWFANCpA4LXjJW4hx3Uw.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h3 id="heading-use-javascript">Use JavaScript</h3>
<p>It’s a known fact, all websites require JavaScript.</p>
<p>While you might think, “Oh it’s only plain text and a couple of modals.” But in the future? By then, it’ll be many many more modals, and I’ll promise you right now.</p>
<p>When that happens, you’ll regret not making your website an isomorphic application using the latest framework running on a serverless cloud.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/08/1-Cmno6gxTMAdMXGqE1EksLA.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><strong>Tip</strong>: Don’t render this page with JavaScript.</p>
<hr>
<p>Not a web developer yet? Don’t worry about it - you're already qualified from reading this post.</p>
<p>Already a <a target="_blank" href="https://amzn.to/2OKhVsg">web developer? buy the C programming language book here and <strong>get out while you still can</strong>!</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to code like a Hacker in the terminal ]]>
                </title>
                <description>
                    <![CDATA[ By Caleb Taylor You are a hacker. Your home is the terminal. You know every key stroke is valuable. If something is less than 100% efficient, you will spend hours figuring out the right tool to save yourself seconds. Because it’s always worth it. _S... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/coding-like-a-hacker-in-the-terminal-79e22954968e/</link>
                <guid isPermaLink="false">66c3477f4f1fc448a3678fc7</guid>
                
                    <category>
                        <![CDATA[ hacking ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ satire ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 17 Oct 2018 19:55:16 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*V73Ai9Nc8NhSRrs8zOvcHA.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Caleb Taylor</p>
<p>You are a hacker. Your home is the terminal. You know every key stroke is valuable. If something is less than 100% efficient, you will spend hours figuring out the right tool to save yourself seconds. Because it’s always worth it.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*GMvdjMQAjokYEFzTXjsp6Q.jpeg" alt="Image" width="800" height="800" loading="lazy">
_Source: [Twitter](https://www.pablostanley.com/" rel="noopener" target="_blank" title=""&gt;Pablo Stanley via &lt;a href="https://twitter.com/pablostanley/status/963469081910296576" rel="noopener" target="<em>blank" title=")</em></p>
<p>Does your constant search for newer and better ways to do things detract from actually doing things? Some may say yes, but you say nay. No work is worth doing unless you can lecture your coworkers on why you were able to do it so efficiently (setup time not included).</p>
<p>The following is a list of tools/features that every good hacker should know about.</p>
<blockquote>
<p><strong>Dislcaimer</strong>: This article is written with a heavy dose of satire. It’s a twist on the <a target="_blank" href="https://knowyourmeme.com/memes/me-an-intellectual">“Me, an Intellectual” meme.</a> While the suggestions are sincere (and by no means complete), the references to being a “hacker” are just for fun.</p>
</blockquote>
<h3 id="heading-shell-zsh"><strong>Shell (zsh)</strong></h3>
<blockquote>
<p><strong>Average developer</strong>: A shell is a shell. It doesn’t really matter which one I use. They all suck anyway.</p>
<p><strong>You, a Hacker</strong>: The shell is the lifeblood of my work. My passion for efficiency and features knows no bounds. My shell must be one worthy of a true hacker.</p>
</blockquote>
<p>You live in the terminal, and that’s why you want to use a great shell. That’s why you use <a target="_blank" href="http://www.zsh.org/">zsh</a>.</p>
<p>It comes with a whole slew of features:</p>
<ul>
<li>Auto-correct of misspelled commands</li>
<li>Easy drop-in replacement of bash</li>
<li>Better <code>cd</code> completion using <code>&lt;t</code>ab&gt;</li>
<li>Path expansion: <code>cd /u/c/c/j</code> + <code>&lt;t</code>ab<code>&gt; =cd /user/caleb/code/</code>jarvis</li>
<li><a target="_blank" href="http://zsh.sourceforge.net/Doc/Release/zsh_toc.html">Much more</a></li>
</ul>
<p>It also comes with a great framework for managing your zsh configuration: <a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh">Oh My Zsh</a>. It includes 200+ plugins and 140+ themes to add all sorts of awesome features to your terminal. A small sample:</p>
<ul>
<li><a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git">git</a> - tons of aliases and useful functions for git</li>
<li>t<a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/tmux/tmux.plugin.zsh">mux</a> - alias and settings for integrating zsh with tmux</li>
<li><a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/node">node</a> - adds <code>node-docs</code> command for opening website docs</li>
<li><a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/osx">osx</a> - several utilities for working with OSX</li>
<li><a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/web-search">web-search</a> - initialize web searches from command line</li>
<li><a target="_blank" href="https://github.com/zsh-users/zsh-autosuggestions">auto-suggestions</a> - fast, unobtrusive suggestions as you type based on history</li>
</ul>
<p>You can find the full list of plugins <a target="_blank" href="https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins">here</a>.</p>
<h3 id="heading-session-management-tmuxhttpsgithubcomtmuxtmux">Session Management (<a target="_blank" href="https://github.com/tmux/tmux">tmux</a>)</h3>
<blockquote>
<p><strong>Average developer</strong>: Okay I’ve got my files open for lame_project_1. But I also need to do work in boring_project_2. I also need to ssh into a server and look at the logs. I guess I’ll just create a huge mess in my terminal that has files/tabs from multiple projects open in a way that I’ll eventually lose control of and be forced to close and start over.</p>
<p><strong>You, a Hacker</strong>: I work on several projects at once, so I need a tool to help me keep it organized. It should work across multiple platforms, and allow me to create organized work spaces and have a lot of other features that help with productivity.</p>
</blockquote>
<p>You know that development can get messy. Sometimes, you have to work on several projects at once. That’s why you use <a target="_blank" href="https://github.com/tmux/tmux">tmux</a>.</p>
<p>It allows you to create sessions. Each session can be customized to the exact layout you need. You can name sessions for easy switching, and even save and restore sessions if your terminal is closed. Plus, it has its own customizable status line that will allow you display things like time, date, CPU usage, and more. And if you don’t know your CPU usage at any given moment, are you even a hacker?</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*1aaEQExjdaueLgsLWxfr1g.gif" alt="Image" width="1252" height="860" loading="lazy">
<em>Organize your terminal with sessions and use fzf for fuzzy create/finding/deleting of sessions</em></p>
<p>It even has a <a target="_blank" href="https://github.com/tmux-plugins/tpm">plugin manager</a> and a <a target="_blank" href="https://github.com/rothgar/awesome-tmux">whole slew of awesome plugins &amp; features</a> that will take your hacking to the next level.</p>
<p><strong>Super-Pro Hacker Tip:</strong><br>Use tmux with fzf via some <a target="_blank" href="https://github.com/junegunn/fzf/wiki/examples#tmux">awesome scripts</a> to quickly create/delete/navigate to push your hacker level to over 9000.</p>
<h3 id="heading-search-ripgrep">Search (ripgrep)</h3>
<blockquote>
<p><strong>Average developer</strong>: Where did I define that constant at? I know it’s somewhere in here. I’ll try to grep for it. What are the arguments again? Let me google that. Ah crap, now it’s searching my node_modules folder. This is the worst.</p>
<p><strong>You, a Hacker</strong>: When I search for something, it should be blazing fast. Also, it should use sensible default settings, like ignoring binaries or hidden files.</p>
</blockquote>
<p>You know that searching your project is a common task. It should be fast, and it should not waste your time. This means things like ignoring anything that your <code>.gitignore</code> file ignores, and skipping binaries and hidden files. That’s why you use <a target="_blank" href="https://github.com/BurntSushi/ripgrep">ripgrep</a>. It’s like grep on steroids.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*5Nt_6zoCkF0THdmdNtGoQw.gif" alt="Image" width="670" height="434" loading="lazy">
<em>ripgrep in action</em></p>
<p>In the <a target="_blank" href="https://blog.burntsushi.net/ripgrep/">words of its creator</a>: <em>“Use ripgrep if you like speed, filtering by default, fewer bugs and Unicode support.”</em></p>
<h3 id="heading-fuzzy-finding-fzfhttpsgithubcomjunegunnfzf">Fuzzy Finding (<a target="_blank" href="https://github.com/junegunn/fzf">fzf</a>)</h3>
<blockquote>
<p><strong>Average developer</strong>: It’s sure hard to remember the exact location of so many files within my project. I guess I’ll stumble around until I find the right one.</p>
<p><strong>You, a Hacker</strong>: I should be able to fuzzy-find files. I can type the file name, or some of the path, or all of it, and quickly find the file I’m looking for.</p>
</blockquote>
<p>You know you shouldn’t have to type any more than you need to. So you use <a target="_blank" href="https://github.com/junegunn/fzf">fzf</a>, a general-purpose command-line fuzzy finder. It can also do much more than fuzzy-find files. It can used with any list: “files, command history, processes, hostnames, bookmarks, git commits, etc”.</p>
<p><strong>Super-Pro Hacker Tip:</strong> You know that aliases are a great way to make shortcuts to take advantage of fzf’s features. For example, if you wanted to fuzzy-find a file, and then open up the selection in your default editor, you can add this to your <code>zsh</code> config:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*c4DFt6p5PDhOxHTx2p_lag.gif" alt="Image" width="1264" height="860" loading="lazy">
<em>Now you can run “fo” fuzzy-find and open a file</em></p>
<p>Many more examples can be found on the <a target="_blank" href="https://github.com/junegunn/fzf/wiki/examples">fzf wiki</a>.</p>
<h3 id="heading-terminal-prompt-spaceshiphttpsgithubcomdenysdovhanspaceship-prompt">Terminal Prompt (<a target="_blank" href="https://github.com/denysdovhan/spaceship-prompt">Spaceship</a>)</h3>
<blockquote>
<p><strong>Average developer</strong>: Who cares what my terminal prompt looks like? There’s no way it could possibly give me any useful information. I’ll just leave it as the default.</p>
<p><strong>You, a Hacker</strong>: I want my prompt to be amazing. It should be context-aware. It should give me useful info and be configurable. Also, it would be sweet if it was related to space.</p>
</blockquote>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Vtc9ZCR2p7a_9-6MuFB-hw.gif" alt="Image" width="800" height="566" loading="lazy">
<em>Welcome to the future… but actually the present. Hackers/astronauts only.</em></p>
<p>You know a prompt should be simple, clean, and provide only relevant information. It should also blow people’s minds when they see its beauty. That’s why you use <a target="_blank" href="https://github.com/denysdovhan/spaceship-prompt">spaceship-prompt</a>. It provides git/mercurial integration, battery level indicator, clever host name and user data, version numbers for a variety of libraries, gorgeous icons, and much more.</p>
<h3 id="heading-changing-directories-zhttpsgithubcomrupaz">Changing directories (<a target="_blank" href="https://github.com/rupa/z">z</a>)</h3>
<blockquote>
<p><strong>Average developer:</strong> I need to change my directory to my “hacker” project, which is inside of my cool folder, which is inside of my personal folder, which is inside of my code folder, which is in my home directory.</p>
</blockquote>
<pre><code>cd ~<span class="hljs-regexp">/code/</span>personal/cool/hacker
</code></pre><blockquote>
<p><strong>You, a Hacker:</strong> I need to change my directory to my “hacker” project.</p>
</blockquote>
<pre><code>z hacker
</code></pre><p>Typing out full file paths is what average developers do. You are a hacker. You rely on <a target="_blank" href="https://github.com/rupa/z">z</a>. Once installed, it will start learning which directories you visit. Then, you can give it a regex (or simple folder name) to hop to the most likely candidate.</p>
<h3 id="heading-bonus-hacker-tools">Bonus Hacker Tools</h3>
<p>The following tools are additional ways to truly elevate your hacking game.</p>
<ol>
<li><a target="_blank" href="https://github.com/chubin/wttr.in">wttr.in</a> — There’s only one right way to check the weather.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*eoCAnuHdh9I69SiGJU_aOg.png" alt="Image" width="800" height="559" loading="lazy"></p>
<ol start="2">
<li>Star Wars — Cool people like Star Wars. Hackers watch it in the terminal.</li>
</ol>
<pre><code>telnet towel.blinkenlights.nl
</code></pre><p><img src="https://cdn-media-1.freecodecamp.org/images/1*VHd1lA9C36pYxi_a5-afYQ.gif" alt="Image" width="670" height="434" loading="lazy">
<em>Pro Tip: Watch star wars in another tmux pane while working. No one will question you.</em></p>
<ol start="3">
<li><a target="_blank" href="https://github.com/donnemartin/haxor-news">haxor-news</a> - Are you even a hacker if you don’t read <a target="_blank" href="https://news.ycombinator.com/">Hacker News</a>?</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*lcF0nWWF74IZCcc8I-ULBQ.gif" alt="Image" width="812" height="484" loading="lazy"></p>
<ol start="4">
<li>Spotify - Using <a target="_blank" href="https://github.com/hnarayanan/shpotify">shpotify</a>, you can play music from the terminal (OSX only… Hey, stop booing! Put that chair down! Who threw that tomato!?), or <a target="_blank" href="https://www.mopidy.com/">mopidy</a> for something that’s cross-platform.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ued2Pipg7m16DOKuwpAUdw.gif" alt="Image" width="888" height="602" loading="lazy">
<em>God bless the commands in the terminal</em></p>
<p>That about wraps it up. This is by no means a comprehensive list. Do you have any other amazing hacker tools? Leave a comment and let me know.</p>
<p>If you are interested in seeing more of these tools in action, checkout out my <a target="_blank" href="https://github.com/ctaylo21/jarvis">dotfiles</a> that I use for development. As a bonus, here’s a screenshot of the glorious terminal in action:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*V73Ai9Nc8NhSRrs8zOvcHA.png" alt="Image" width="800" height="539" loading="lazy"></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How my social network for sharing photos of knees will save the world ]]>
                </title>
                <description>
                    <![CDATA[ By Roger Collier There are two things every person has in common: knees. Your friends have knees. Your coworkers have knees. So does your Aunt Sally. And your Uncle Aloysius. You. Me. Left knee. Right knee. Yet, despite this common bond, people conti... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-my-social-network-for-sharing-photos-of-knees-will-save-the-world-2074367d10ad/</link>
                <guid isPermaLink="false">66d460c8d7a4e35e384349ad</guid>
                
                    <category>
                        <![CDATA[ humor ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Life lessons ]]>
                    </category>
                
                    <category>
                        <![CDATA[ satire ]]>
                    </category>
                
                    <category>
                        <![CDATA[ social media ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 21 Sep 2018 16:19:27 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*YE_Y-aNfMRQc7FYFGPHBnw.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Roger Collier</p>
<p>There are two things every person has in common: knees. Your friends have knees. Your coworkers have knees. So does your Aunt Sally. And your Uncle Aloysius.</p>
<p>You. Me. Left knee. Right knee.</p>
<p>Yet, despite this common bond, people continue to argue, fight and hurt one another. There is conflict everywhere, both online and in the real world. But what if it were possible, after centuries of squabbling, to bring peace and harmony to all mankind through our shared identity. Well, that day has finally come.</p>
<p>Introducing Deez Knees, the first and only social network for sharing photos of knees — only knees.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Eip0YkIYcNF4zOYyZn6RjSU3gJR9ac0kpJtT" alt="Image" width="800" height="518" loading="lazy"></p>
<h3 id="heading-why-knees">Why knees?</h3>
<p>I created Deez Knees to unify humanity. Some of us are taller than others. Some of us have dark hair and others have light hair. But when it comes to knees, there is little variety. A knee has only two parts: an interior component (the knee bone) and an exterior component (the knee skin). This is true for my knees, your knees, his knees and her knees. By sharing pictures of knees, we remind ourselves that deep down, beneath the knee skin, we are all basically the same.</p>
<blockquote>
<p>Deez Knees promotes unity</p>
</blockquote>
<p>You know what else Deez Knees promotes? Diversity. “Hey, hold on a second mister,” you might be thinking. “You just said all knees are the same, so how can your amazing new creation promote both unity and diversity?”</p>
<p>That, my friend, is the power of Deez Knees.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/QXWTJQhJjNliBbTTlAyU7V1FqC5w3Re0G6s8" alt="Image" width="800" height="424" loading="lazy"></p>
<h3 id="heading-scalable-configurable-technologicable">Scalable, configurable, technologicable</h3>
<p>The core technology behind Deez Knees is a sophisticated knee-recognition algorithm. You can try to post a photo of something else, but it won’t work. Upload a picture of your elbow? No dice. Share a pic of your butt? Try Instagram.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/A8sXhB4t2aK4y3JohYcJLpMcWg-S5tNyaB51" alt="Image" width="800" height="282" loading="lazy"></p>
<p>Deez Knees is fully integrateable across all digital platforms — vertical, horizontal and diagonal. The user interface is intuitive, responsive and gratuitive. Your personal information will remain secure. We use triple-bypass, hexagonalical encryption with cross-key hashtags. All data on Deez Knees are stored not only in the cloud, but also in the mist and the yawn.</p>
<p>Do we use blockchain? Yes, indeed — 27 blockchains, to be precise. Users can also select the cryptocurrency of their choice: Bitcoin, CyberDime or WebDough. Our network is lightening fast. Images load quickly thanks to our middle-out compression algorithm, which is based on science and math. Deez Knees is also chocked full of nanotechnology and artificial intelligence.</p>
<blockquote>
<p>Digital, Advanced Tech, The Future — Deez Knees</p>
</blockquote>
<p><img src="https://cdn-media-1.freecodecamp.org/images/gLzORlhxZB6TQse97zA1VBJ5pzGdjqysPSbf" alt="Image" width="800" height="447" loading="lazy"></p>
<h3 id="heading-making-the-world-a-better-place">Making the world a better place</h3>
<p>Most tech entrepreneurs care only about money and fame. They want to be the next high-profile billionaire, grace the covers of magazines, hobnob with celebrities. Not me. I created Deez Knees for you. For you and your knees.</p>
<p>Will there be advertising on Deez Knees? That goes without saying. Will I give your personal information to marketing companies? Yes, of course, but not for free. Will I sell Deez Knees to Facebook the first chance I get? You betcha.</p>
<p>But don’t let these minor business details distract you. Deez Knees was created for a higher purpose. There is too much bad in the world. Let’s inject a little bit of good. Actually, make that a whole lot of good.</p>
<p>I don’t know about you, but I think this world of ours is worth saving. Enough with the crime and the wars. Enough with the nasty YouTube comments and the silly Twitter beefs. Why so hostile? Friend, you have only one life. One life and two knees. Use them well.</p>
<p>That’s where Deez Knees comes in. Instead of clapping back at that internet troll, share a photo of your knees. You’ll both soon realize you aren’t so different after all. Instead of bashing Republicans, or Democrats or Saskatchewanians, scroll through your Deez Knees feed and reflect on how we are all diverse yet the same, different yet not so different, unequal in some ways yet — really, when you think about it, really think about it— always equal in all the ways that count.</p>
<blockquote>
<p>Deez Knees turns nasty into nicety</p>
</blockquote>
<p>It’s time, my friend. Time to make this world a better place. Time to bring light into darkness. Time to turn conflict into proflict. All we need is you, me and Deez Knees. We can do it. Two knees at a time.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
