<?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: Shariq</title>
    <description>The latest articles on DEV Community by Shariq (@shariq).</description>
    <link>https://dev.to/shariq</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%2F688441%2Faca5e035-d410-4b96-a702-c9eb176efec3.jpeg</url>
      <title>DEV Community: Shariq</title>
      <link>https://dev.to/shariq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shariq"/>
    <language>en</language>
    <item>
      <title>Managing Your Lows</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Tue, 04 Jan 2022 16:11:19 +0000</pubDate>
      <link>https://dev.to/shariq/managing-your-lows-14ll</link>
      <guid>https://dev.to/shariq/managing-your-lows-14ll</guid>
      <description>&lt;p&gt;As someone in a management role at a large, multi-national, software engineering firm, I've come across many diverse individuals for whom it's my goal to make work approachable, flexible, and supportive. Today, I wanted to share something that was affecting one of my team members earlier this year and often affects me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=HJp14HBB5a4"&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Having A Bad Day
&lt;/h2&gt;

&lt;p&gt;My team member said they were having a down day. This is definitely something a lot of us hear from others and feel&lt;br&gt;
ourselves, especially with the limited social interactions that we've had since the onset of COVID-19. This "low" may have been just how they were feeling for some unknown reason, how productive they were that day, or anything really where they felt they didn't meet their own expectations for what success or happiness felt like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sometimes, We All Get A Little Down
&lt;/h2&gt;

&lt;p&gt;However, you need to remember that having an off day is really just that - one day. Sometimes, you feel like you’ll&lt;br&gt;
never recover or that you’ve made a mistake that’s going to haunt you forever. Fortunately, though, our mistakes are not unique. Someone else likely made that exact mistake before we did, and they were able to move on. Maybe the anguish lasts a few days or weeks, but you can generally find a modicum of happiness somewhere in there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do I Do To Deal With A Bad Day
&lt;/h2&gt;

&lt;p&gt;For me, if I can’t find that happiness, I try to or at least find a vision of what happiness looks like to me. This has a two-fold effect. One is that it gets my mind off of whatever is making me feel not quite like myself that day. The second is that it helps me re-frame my state of mind to think through how I can achieve that state of happiness that I envisioned. This plan isn't always eating healthier, working out more, or studying harder. We don't always need to strive to achieve and fall into some sort of glorified hustle culture.&lt;/p&gt;

&lt;p&gt;Sometimes it's just deciding I need time off from work or social interaction to stay home and read or play video games. Maybe it's to catch up on TV or post memes about how mad I am at Game of Thrones.&lt;/p&gt;

&lt;h2&gt;
  
  
  What To Say To Someone Having A Bad Day
&lt;/h2&gt;

&lt;p&gt;The way I try to look at it is somewhat like the stock market. It has a long history of highs and lows, but in&lt;br&gt;
general, its more recent lows are higher than its past lows. This isn't always the case, but as long as we aim to grow over time, hopefully, we can achieve the same level of higher lows. There are going to be days when we bottom out. There are going to be days when those around you bottom out. No one really has it together - not all the money, fame, or success can help that. All we can do is aim to be better - whatever we ourselves define better as.&lt;/p&gt;

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

&lt;p&gt;The most important thing to me as a manager, a friend, and someone random on the internet is your ability to succeed in the long term. Today doesn't define you. It's everything you've done until today and what you will do tomorrow that I look for. I hope you can do the same for yourself.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Next.js and TailwindCSS Made Me Want to Write Front-End Code</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Fri, 03 Dec 2021 15:19:34 +0000</pubDate>
      <link>https://dev.to/shariq/nextjs-and-tailwindcss-made-me-want-to-write-front-end-code-3e5l</link>
      <guid>https://dev.to/shariq/nextjs-and-tailwindcss-made-me-want-to-write-front-end-code-3e5l</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UBuWR3Cs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n4k476qibxvapv9h4p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBuWR3Cs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5n4k476qibxvapv9h4p3.png" alt="Image description" width="880" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Components, micro-frontends, promises, middleware. These are just a few of the front-end development-specific technologies that gave me nightmares and had me ready to walk away from my IDE when I encountered them. Career-wise, I've been very limited in front-end development, and so I try not to be too hard on myself. My main focus has been on backend technologies and infrastructures such as Java, Spring Boot, Docker, and Kubernetes with some DevOps tooling like Jenkins, Sonar, and Nexus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time of Reckoning
&lt;/h2&gt;

&lt;p&gt;However, everything that glitters isn't gold. This is also the case with my time away from any substantial front-end development. I wanted to provide value no matter the situation I was in and decided I had to, at least, try and learn basic front-end development principles. I couldn't have junior developers running laps around me.&lt;/p&gt;

&lt;h2&gt;
  
  
  TailwindCSS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Highly customizable&lt;/li&gt;
&lt;li&gt;Incline CSS&lt;/li&gt;
&lt;li&gt;Responsive out of the box&lt;/li&gt;
&lt;li&gt;Just-in-time engine&lt;/li&gt;
&lt;li&gt;HeadlessUI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TailwindCSS redefined how a developer interfaces with CSS and brought a much more approachable, single-file approach. No longer did I have to worry about correct naming structures, pre-processors, BEM (which is also super helpful), or hex codes as I haphazardly applied CSS to my elements and hoped that the z-index was correct.&lt;/p&gt;

&lt;p&gt;On to screen sizes. Creating custom &lt;code&gt;@media&lt;/code&gt; modifiers and having to guess screen sizes was always frustrating. Being responsive was always a challenge, and no amount of Flexbox Froggy could save me. If you solved screen sizes once, you could copy and paste your CSS across multiple applications, but it never sat well with me. On the other hand, TailwindCSS brings in opinionated screen sizes from extra small to some multiplier of extra-large and easy to apply flex and grid classes that almost always do what I expect.&lt;/p&gt;

&lt;p&gt;If I ever do feel the need to define my own sizes, everything in TailwindCSS is customizable from default color palettes, screen breaks, and spacing. It can be further customized and tailored with the JIT engine and plug-ins that can be created or leveraged by developers who have posted their solutions online.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Consistent, opinionated structure and workflow&lt;/li&gt;
&lt;li&gt;Static, incremental, and server-side rendering&lt;/li&gt;
&lt;li&gt;Pre-defined routing&lt;/li&gt;
&lt;li&gt;Image and Link components (if you're using the Vercel ecosystem, which you should)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Styling is only one part of the front-end development story. The actual creation of elements, components, and functionality take a majority of the proverbial cake. Whether it was passing around data, managing routing, or making API requests, it was all so foreign to me. I attempted to understand React Router, Express, and even Promises but because of the complexity and constant shape-shifting nature of React, I was never able to capture how it all came together.&lt;/p&gt;

&lt;p&gt;Next.js is not inherently different from React, namely because it is a framework built on React itself. What it is, however, is an opinionated approach that can be followed with relative ease. Thanks to predefined routing and useful lifecycle events to fetch static and server-side data and a very clear, forced organization structure, I was able to spend less time thinking about the right way to do something and more time learning and creating front-end applications.&lt;/p&gt;

&lt;p&gt;Overall, Next.js made React more approachable and deployable for someone with very limited experience such as myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you're excited to get started on a Next.js project with TailwindCSS, I have GREAT news for you. It starts with one simple NPX command and the Next.js tutorial. This command can also be found in my developer cheat sheet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app -e with-tailwindcss
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Next.js tutorial can be found on Vercel's site. The TailwindCSS guide can be found here.&lt;/p&gt;

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

&lt;p&gt;Don't get me wrong, I'm still horrible at front-end development. I'm still haphazard in my classes and structure. My organization and component naming would make any code reviewer uncomfortable. I really don't understand the difference between functional and class components (at least not enough to have a debate as to why one is better than the other). But, I can now provide value. I can, with a bit of copy and paste, create components, utilize state and routing, style and create responsive UIs, and even use some middleware to capture and validate requests.&lt;/p&gt;

&lt;p&gt;The goal is always simple, be able to provide value in any situation. TailwindCSS and Next.js have allowed me to do just that.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>tailwindcss</category>
      <category>ui</category>
      <category>ux</category>
    </item>
    <item>
      <title>Ethics of Software Engineering</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Wed, 01 Dec 2021 23:04:52 +0000</pubDate>
      <link>https://dev.to/shariq/ethics-of-software-engineering-dgl</link>
      <guid>https://dev.to/shariq/ethics-of-software-engineering-dgl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F8XthTaD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8vp5ryd7hoqyqbq7vnd7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F8XthTaD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8vp5ryd7hoqyqbq7vnd7.png" alt="Image description" width="880" height="441"&gt;&lt;/a&gt;&lt;br&gt;
Ethics are hardly spoken about in the development world. Sure we see ourselves as ethicals developer and never intentionally want to do anything that would be considered the opposite, but rarely do we treat ethics as a priority or guideline. It's easy to say, "Hey, I'm just trying to deliver my story" and leave the onus on our employers and clients. It's just as easy to leave the blame on another codebase or principle that you are referencing or modeling after. If Facebook does it, it must be okay right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  On Ethics and Being a Software Engineer
&lt;/h2&gt;

&lt;p&gt;It's not enough to expect your employer or larger corporations to set the standard of ethics. As a matter of fact, it's to be expected that they are pushing the boundaries of unethical - not because our bosses are bad people, but because the pressure to produce profitable features in a short amount of time makes the cognitive dissonance easier to settle. Imagine a scenario where a client is demanding a new feature at the risk of exposing user information. For a developer, it's potentially do or die - you either deliver the feature with whatever risks it comes with or you delay and risk your contract. However, as developers, we're the first line of defense for our users. We have to bring ethics to the forefront of the software development lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you do?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---sTMbd3P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92veekpuxg49fh55n6dr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---sTMbd3P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92veekpuxg49fh55n6dr.png" alt="Image description" width="880" height="328"&gt;&lt;/a&gt;&lt;br&gt;
I'm proposing four principles for developers to bring ethics into the fold of development, not as an afterthought but as a core tenant of development.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Be an active bystander&lt;/strong&gt; Often times, when we see something bad, it's easier to just ignore it and move on. Surely the code must have been reviewed, read a dozen times by other developers editing the same code base and approved by some manager. This is known as the bystander effect or bystander apathy. In 1964, Kitty Genvese was publicly stabbed to death outside her apartment and not a single neighbor tried to help or at a minimum notify the police. What this moment proved was the concept of the diffusion of responsibility. Neighbor Joe assume neighbor Sara was going to call the cops, and so on like dominos until no one took action. Do your best to be an active bystander - if you see something, say something. Do not assume it has been reported or will be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Make it your problem&lt;/strong&gt; It doesn't matter if you wrote the code or if you are refactoring someone else's efforts, it is your problem. At the very least, it needs to be communicated that you've stumbled upon code that could lead to major ethical violations. The worst case scenario is that you've informed the stakeholder, and they ignore it but are aware (send an email, so it's documented), best case you've won yourself some more work and trust from your client to help them solve problems they may not even know they had.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Teach yourself&lt;/strong&gt; A large reason ethical issues in development are ignored is because we are not exposed to the topic of ethics in our field. Due to the subjective nature of ethics, even if we were presented with some topics, they are rarely enforced. As a developer, you need to expose yourself to different ethical violations found in the development community. Form an opinion and defend it, but be flexible enough to learn and evolve those opinions. Inevitably, as more developers become aware of the ethics of programming, more opinions will arise. This will allow more discourse around what is truly considered to be ethical. This leads directly into the next principle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Socialize your ethics&lt;/strong&gt; We are often told to be careful of out opinions at work - especially those that include politics and personal life. The good news is when you socialize your ethics around development, you're actually working (take this with a grain of salt). As you bring the discussion of ethics to your workplace, you are inherently helping make better developers. Developer who are more aware of their work and what constitutes being ethical are able to make more informed decisions. Maybe they will be able to implement code more effectively, write better tests, leave better documentation and take pride in the work they produce.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8hy9KZkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/evcf2ojr3pxvl7ni5l1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8hy9KZkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/evcf2ojr3pxvl7ni5l1p.png" alt="Image description" width="880" height="420"&gt;&lt;/a&gt; &lt;br&gt;
Code that is ethical is something every developer can be proud of. An ethical developer would never have to worry about if their code could be causing harm to their users because they used ethics as a part of the planning toolkit. Ethics was not an afterthought but instead a part of their IPM in which they call out potentially unethical measures.&lt;/p&gt;

</description>
      <category>ethics</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>A Curated List of The Best FREE Blogging Resources I Use Everyday</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Wed, 01 Dec 2021 22:14:48 +0000</pubDate>
      <link>https://dev.to/shariq/a-curated-list-of-the-best-free-blogging-resources-i-use-everyday-3pc5</link>
      <guid>https://dev.to/shariq/a-curated-list-of-the-best-free-blogging-resources-i-use-everyday-3pc5</guid>
      <description>&lt;p&gt;If you're trying to start a blog, there's a lot of resources and tools available for free! But with so many out there, it can become confusing as to which ones are right for you and keeping them all centralized.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This post will be a living document and updated as I find more tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without further ado, here's the list of resources and what they can do for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MxicUn_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhmhy9vgjyl98j8i1syq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MxicUn_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhmhy9vgjyl98j8i1syq.png" alt="Image description" width="880" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://app.grammarly.com/"&gt;Grammarly&lt;/a&gt; is great for spell check, grammar, and punctuation on the free account. If you opt for a paid account, you'll get some other goodies. It's like your own marketing department!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CJPIQ3ye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a956fr4xjaxlqgzjy8dg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CJPIQ3ye--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a956fr4xjaxlqgzjy8dg.png" alt="Image description" width="880" height="331"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://tinypng.com/"&gt;TinyPNG&lt;/a&gt; helps shrink your .png and .jpg file sizes. I never noticed how slow my images were loading until I saw how fast they could load. 5/7 would recommend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AM0UFSh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b33ewqdl4i8beawbgl9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AM0UFSh2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b33ewqdl4i8beawbgl9f.png" alt="Image description" width="880" height="432"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://heroicons.com/"&gt;heroicons&lt;/a&gt; is brought to us by the developers of TailwindCSS. It's a growing list of SVGs that can be directly added to your HTML.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ndLlRh_B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7q0hzmh2tya6aaovmv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ndLlRh_B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7q0hzmh2tya6aaovmv6.png" alt="Image description" width="880" height="439"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://iconmonstr.com/"&gt;Iconmonstr&lt;/a&gt; has a more robust catalog of icons that can be downloaded or embedded as SVGs as well. Between this and heroicons, I have been able to find every icon I needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y-dD8sRY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yuzweb665iwsr50bbhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y-dD8sRY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1yuzweb665iwsr50bbhn.png" alt="Image description" width="880" height="423"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ads.google.com/home/tools/keyword-planner/"&gt;Google Ads Keyword Planner&lt;/a&gt; might be a boon or a bane, I've yet to come to that conclusion. The power of keywords and planning to be ranked on Google search can make your blog, but also make it a chore. I think a few minutes of research per article is fine but focus on creating value in your content more so.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o4lpGEl---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a1p7ve0qvkxgjecv2chz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o4lpGEl---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a1p7ve0qvkxgjecv2chz.png" alt="Image description" width="880" height="518"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.semrush.com/"&gt;SEMrush&lt;/a&gt; is a premium tool that allows 10 free searches a day and provides very specific insight on what a blog might need to perform well on search engines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l0OM3Dmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ic5rquot2owvehpzj5wa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l0OM3Dmq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ic5rquot2owvehpzj5wa.png" alt="Image description" width="880" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://socialsharepreview.com/"&gt;Socialsharepreview&lt;/a&gt; helps ensure that your share previews are correct! Be sure to search your site in their search bar and ensure that all your share images are up to snuff. First impressions hold more value than we may think.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mA1rgsY7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t8ll1vguodseomsf1nux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mA1rgsY7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t8ll1vguodseomsf1nux.png" alt="Image description" width="880" height="339"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt; is a treasure chest of royalty-free images uploaded by the community. These are great images, but just be sure to crop them to a more manageable size (1200x630) and then throw them into TinyPNG to really save some file space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zne1HM1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95vbm5vqe96p5nswuv2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zne1HM1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95vbm5vqe96p5nswuv2s.png" alt="Image description" width="880" height="398"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://feedhive.io/"&gt;Feedhive&lt;/a&gt; is a new player in the field but makes cross-posting between social media platforms much less painful. As of now, they support LinkedIn and Twitter with Facebook and Instagram on the horizon. The free tier is pretty generous, especially if you don't plan too far ahead of time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rNn5AGx3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t0q0tbu2m9rijclf6b3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rNn5AGx3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t0q0tbu2m9rijclf6b3e.png" alt="Image description" width="846" height="261"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.favicon-generator.org/"&gt;Favicon-generator&lt;/a&gt; is great for getting all those pesky little icons created for all the potential platforms. Apple, Google, Microsoft, and Android all have different specifications. Do yourself a favor and let this site figure it out for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rMJyzr2W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r9kn6lrv3hl6hcojvm32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rMJyzr2W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r9kn6lrv3hl6hcojvm32.png" alt="Image description" width="880" height="358"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://fiverr.com/"&gt;Fiverr&lt;/a&gt; is great for getting some professional resources created. We're talking logos, favicons, business cards, and whatever else you may think of.&lt;/p&gt;

</description>
      <category>blog</category>
      <category>blogging</category>
    </item>
    <item>
      <title>A Cloud Native CI/CD Flow</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Wed, 01 Dec 2021 20:51:33 +0000</pubDate>
      <link>https://dev.to/shariq/a-cloud-native-cicd-flow-2p71</link>
      <guid>https://dev.to/shariq/a-cloud-native-cicd-flow-2p71</guid>
      <description>&lt;h2&gt;
  
  
  CI/CD/CD
&lt;/h2&gt;

&lt;p&gt;Continuous integration, continuous development, and ANOTHER CD. As expected in DevOps fashion, the two CDs are often treated interchangeably. In reality, they need to be set apart as their own processes. If organizations want to be bleeding edge and match the productivity of large corporations like Amazon, Facebook, and Google - hopefully not their arguably unethical coding practices - they need to embrace all three facets. The final CD is seen as somewhat of a unicorn in the industry as of now. However, it is gaining levels of normalization at select firms.&lt;/p&gt;

&lt;p&gt;So what are all three tenets?&lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Integration, Continuous Development, Continuous Delivery
&lt;/h3&gt;

&lt;p&gt;We will walk through each step and their implementations with specific open-source tools and their respective use-cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Gradle/Maven&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;SonarQube&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Continuous Integration (CI)
&lt;/h3&gt;

&lt;p&gt;CI is the practice of integrating multiple branches and features of code into a single, golden, pre-production repository branch referred to as the develop branch. This branch needs to be free of too many mistakes. Developers should aim to mitigate any problems before they reach this branch through manual code review and some automated tooling that will be explored here.&lt;/p&gt;

&lt;h3&gt;
  
  
  How To Use The Tools
&lt;/h3&gt;

&lt;p&gt;Organizations need to utilize source code management (SCM) services such as git to push, merge, and store code. This removes the burden of developers having to locally merge and update multiple feature branches (manually managing code is archaic, but I am laying it out for posterity). Developers should always merge the develop branch down to their feature branches before pushing.&lt;/p&gt;

&lt;p&gt;Gradle or Maven can be utilized to create or override tasks that will help automate the testing and build flow. For example, we can build projects, generate test reports, and even using custom plugins to validate that feature branches have integrated the latest commits from the develop branch.&lt;/p&gt;

&lt;p&gt;SonarQube should, at a minimum, be utilized to validate test coverage and check for code smells. It provides a few other features that should be integrated by a team as they find them necessary.&lt;/p&gt;

&lt;p&gt;Docker is brilliant for supporting continuous integration with its ability to take pre-created images and run them on any hardware where the docker engine is installed. Think of it as a bunch of mini-VMs that can be spun up and down with little consequence. If a developer needs to test that service A is correctly calling service B, they can spin them up locally and test across localhost. Additionally, they can spin up local database instances with seed data or even run a development environment solely with Docker containers.&lt;/p&gt;

&lt;p&gt;Jenkins is the master puppeteer of this whole process. All the tools above would still require one to run each step manually if a tool like Jenkins was not utilized. It can run Gradle commands, stop pipelines from merging upon test failures or reports from Sonar, and even create and deploy Docker containers (which will be covered in the continuous deployment section).&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Development
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Gradle&lt;/li&gt;
&lt;li&gt;IDE&lt;/li&gt;
&lt;li&gt;Shortcut&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Continuous Development (CD)
&lt;/h3&gt;

&lt;p&gt;To promote effective development in the CI/CD2 model, an environment that allows ownership of tasks and awards self-sufficiency should be implemented. In short, continuous development is being in an environment that allows developers to take on tasks continuously, without being blocked by other developers, technical roadblocks, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to use the tools
&lt;/h3&gt;

&lt;p&gt;Any git tooling can be utilized to have repositories easily clone-able and branch-able for any developer on the team. Additionally, developers should commit and push code often to the feature branches and save and have easily accessible code review tools.&lt;/p&gt;

&lt;p&gt;Gradle can be used to run tests locally and when merge requests are created (with the help of Jenkins as stated in the CI section) and ensure projects are building correctly, even before a merge is needed.&lt;/p&gt;

&lt;p&gt;The necessity and use case of an IDE should be obvious here, but it works well if every developer on the team tries to keep the project settings agnostic of the IDE. This would allow other team members to not be tied into specific tooling. I always recommend IDEA IntelliJ as my IDE of choice as the community edition offers more than enough functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shortcut.com/"&gt;Shortcut&lt;/a&gt; (formerly Clubhouse) will be the bread and butter of continuous development, and it has a very liberal free plan for small teams. If developers can self-manage tasks, adding Shortcut to an organization's agile strategy will find efficiency increases. Shortcut is used to break down stories and tasks and see a very powerful but simple kanban dashboard that can be easily managed by folks who are even new to the program. Tasks should be created to be as simple as possible, non-blocking of other tasks (easier said than done), and motivating to developers. Holistically, tasks should be built so that they can be easily picked up by a developer as they complete others. Code review can be a big blocker here as well- it’s much better if organizations can use paired programming to avoid it, but that topic would warrant its own blog post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Deployment or Delivery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Gradle&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Continuous Deployment or Delivery (CD)
&lt;/h3&gt;

&lt;p&gt;The final CD is somewhat of a unicorn to achieve. Was I a betting man, I would wager that less than 10% of production apps have true continuous deployment. In a perfect world, this would necessitate eliminating change management meetings and review boards. Instead of application changes being approved at some scheduled rate, the organization would instead trust that the developers and their teams have done the due diligence to deploy code - not just to the development or QA environment but all the way to production. shudders.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to use the tools
&lt;/h3&gt;

&lt;p&gt;Git, Gradle, Jenkins, and Docker's use cases have been identified in the above sections and still apply to this section.&lt;/p&gt;

&lt;p&gt;Kubernetes, on the other hand, is a game-changer as a component of continuous deployment. It hosts a plethora of in-built functionality that will make organizations question why they ever deployed apps manually. Kubernetes's abilities allow architects to deploy new applications and updated features, re-deploy failed applications, set automatic scaling, and auto-heal containers without manual intervention. This is great in a production environment but might be overkill in a development or QA environment wherever something simpler like Docker Compose can be utilized with much less cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bringing It All Together
&lt;/h2&gt;

&lt;p&gt;There is an overarching theme across all three stages of continuous integration, development, and deployment. Developing, deploying, and maintaining applications at scale for enterprise architecture is more involved than an individual developer may be able to contribute. Fortunately, with the maturation of the CI/CD2 cycle, the tools discussed in this post can be used to create a system built on automation that decreases developer overhead and can allow them to spend more time creating great applications and writing excellent code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation
&lt;/h3&gt;

&lt;p&gt;For truly achieving a CI/CD2 flow, automation must be implemented across the whole toolchain of integration, development, and deployment (i.e. delivery). The tools and use cases above are only examples of what organizations can do with the right tools - especially open-source ones. This article can be taken further with more recent toolings such as Rancher, Terraform, and Ansible. Bringing these environment-level tools into an organization's strategy can allow the creation and deployment of not just individual applications, but complete ecosystems of application architecture, agnostic of the cloud provider.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>webdev</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>Moving Up In Technical Leadership</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Wed, 01 Dec 2021 19:21:34 +0000</pubDate>
      <link>https://dev.to/shariq/moving-up-in-technical-leadership-5egl</link>
      <guid>https://dev.to/shariq/moving-up-in-technical-leadership-5egl</guid>
      <description>&lt;p&gt;Many paths lead to the top of the mountain that is technical leadership and it all starts with the definition of the term. We will define technical leadership as a position where an individual leads a team and focuses on the details of a project along with the overall implementation. Today's leaders need to pay attention to the part where a technical leader is still focusing on the details. The nitty-gritty details are, if anything, even more so the responsibility of a technical leader than they were of an independent contributor. An individual in the role will need to take the on responsibilities of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Making sure their team is up to speed on defined best practices.&lt;/li&gt;
&lt;li&gt;Ensuring the quality of code meets defined expectations.&lt;/li&gt;
&lt;li&gt;Training their team to prepare them for the responsibilities that will help progress their careers over a defined career lattice.&lt;/li&gt;
&lt;li&gt;Managing defined stakeholder expectations.&lt;/li&gt;
&lt;li&gt;Delivering a full-scale implementation of a feature or product as defined by stakeholders.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Technical Lead Roles and Responsibilities&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Leaders must provide structure and definition to be able to effectively support their teams and deliver excellent products and features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s quite a lot of responsibility on the shoulders of one individual, isn’t it? But defining technical leadership isn't the penultimate goal of this post. This article is for individuals who have started tackling all of these responsibilities and have embraced the role. How does a technical leader move up in their role? The answer roundaboutedly lies in these initial responsibilities. The most surprising aspect of technical leadership is that it is much less technical than one expects in today’s technology spheres. Each of the individual responsibilities and how they can be used to move up will be covered below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Sure Your Team Is Up To Speed on Best Practices
&lt;/h2&gt;

&lt;p&gt;The responsibility for clearly setting details of a project for the stakeholder fall to the technical lead. They will be the main point of contact and will need to be up to date on all the technical measures of said project. If a technical lead is not well practiced in the necessary technologies, they can not expect any other behavior from their team. First, the Lead must ensure that they are at an expert level in the skills needed on a project. Once that is done, ensure that they can constantly work with their team to get them as close to that same level as possible. The buck stops with the technical lead. If they can maintain their's and their team's expertise, it will undoubtedly show that they contain the knowledge to not simply better themselves, but those around them. There’s not a quality I would rank higher than this when it comes to any sort of leadership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ensuring the Quality of Code Meets Expectations
&lt;/h2&gt;

&lt;p&gt;Ensuring high-quality code cannot be overstated and goes hand in hand with the above responsibility of keeping a team up to speed on best practices. If a team is well-versed in the necessary technologies, the chances of higher code quality increase substantially and make the leadership role easier.&lt;/p&gt;

&lt;p&gt;One way in which I learned to tackle these first two responsibilities two was to hold ad-hoc tech talks or lunch and learns with an open forum for the team to ask questions relevant to the current project. This has a two-fold effect in that it helped me learn what the team did not know coupled with allowing me to further support and educate them on those topics. It also had the unintended effect of building camaraderie with my team and potentially others at my place of work. Leads should always feel free to extend the invitation to other teams that could benefit from the information that you have to share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Training Your Team to Prepare Them for the Responsibilities that Will Help Progress Their Careers
&lt;/h2&gt;

&lt;p&gt;The world of software development is increasingly social and career growth also depends on individuals taking full advantage of this fact. There are only so many roles that let someone excel at technology and continue onto leadership without embracing a team. Technical leaders must learn to individually tailor guidance for each team member. The above two topics help with the technical grooming, but leads must go further and help team members identify their own weaknesses and strengths and build upon them. This is where the most pertinent aspects of leadership are seen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing Stakeholder Expectations
&lt;/h2&gt;

&lt;p&gt;Communication with stakeholders is the most paramount skill that can be attained in the realm of software leadership. Whether focusing on an internal project, a high-profile client, or even just an individual project, it’s key to manage these expectations. As developers estimate stories early in their careers, they're able to get away with miscalculations and misses on demo day because leaders are taking the heat or because they had already managed the expectations to the stakeholders prior to demo day.&lt;/p&gt;

&lt;p&gt;For leaders in these situations, it goes further than estimation - they have to begin to look at implementation and delivery on an agreed-upon date and timeframe. As an expert, technical leaders must be able to identify the total effort needed on a project, the dates that stories and the final product will be delivered, and any roadblocks - all at the inception of a project and convince the stakeholder that the team will need the estimated time to deliver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivering Full-Scale Implementations as Agreed Upon with Stakeholders
&lt;/h2&gt;

&lt;p&gt;Meeting deadlines with technical excellence in the project code and management all lead to this final responsibility. Just like dominos, every topic interconnects and can make or break another responsibility. The above four responsibilities all tie into the final one of delivering full-scale implementations as agreed up with stakeholders. If leaders have successfully managed the responsibilities above, they will be able to focus on the larger implementation and delivery.&lt;/p&gt;

&lt;p&gt;What it all comes down to is playing these dominos correctly so that each of these responsibilities can be handled expertly. But “handling” does not mean that leads get to solo the effort and only rely on themselves. At this point in a developer's career, they’ve ideally built up a network and strong team to support their responsibilities. Leads manage those around them and make them better all while managing the other flip side of the coin with the stakeholders. If leads can trust their teams, and thus trust their own ability in keeping their team motivated and skilled, and if they can effectively manage client expectations and delivery, they will have mastered the tools needed to move up in technical leadership.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>leadership</category>
      <category>engineeringmanagement</category>
    </item>
    <item>
      <title>Launching A SonarQube Docker Container</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Tue, 05 Oct 2021 18:02:58 +0000</pubDate>
      <link>https://dev.to/shariq/launching-a-sonarqube-docker-container-2p1</link>
      <guid>https://dev.to/shariq/launching-a-sonarqube-docker-container-2p1</guid>
      <description>&lt;h2&gt;
  
  
  What Is SonarQube
&lt;/h2&gt;

&lt;p&gt;SonarQube, before 2013 known as Sonar, is a tool for inspecting code quality with static analysis, bug detection, code smells, and security vulnerabilities. It's best to run these scans at build time with your CI/CD tools such as Jenkins or GitLab CI/CD. There are plenty of tools with which SonarQube can integrate seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Should I Use SonarQube
&lt;/h3&gt;

&lt;p&gt;SonarQube has a few advantages over its alternatives. Namely, it has a long history as it's been continuously developed since 2008 as an open-source tool. Additionally, if you are integrating SonarQube within your CI/CD pipelines, you can automatically stop build and deployments if any of the analyses run don't meet your pre-defined thresholds. It supports over 25 programming languages, including Java, Swift, JavaScript, and C#. The full list can be &lt;a href="https://www.sonarqube.org/features/multi-languages/"&gt;found here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's basically free automated code review for every single push, merge, and deployment!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Docker
&lt;/h2&gt;

&lt;p&gt;For most use cases, a Docker container running SonarQube will be ample for testing if you want to bring a SAST tool into your main production pipelines. Docker makes it easy to build and destroy images with minimal impact on your systems. &lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.shariq.dev/blog/docker-series/pt-1-installing-docker-and-docker-compose"&gt;Installing Docker and Docker Compose&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Be sure to have Docker installed and running on your system. See the guide tagged above for help!&lt;/p&gt;

&lt;p&gt;I'll cover the installation steps for a bare minimum test instance and also a more reliable solution that can be torn down and rebuilt with no data loss (well you still can lose data if you wipe the database and volumes).&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Instance
&lt;/h3&gt;

&lt;p&gt;To pull the &lt;a href="https://hub.docker.com/_/sonarqube/"&gt;official SonarQube Docker image&lt;/a&gt;, run the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;SONAR_ES_BOOTSTRAP_CHECKS_DISABLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 9000:9000 &lt;span class="se"&gt;\&lt;/span&gt;
    sonarqube:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Somewhat Reliable Test Instance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;You need a running instance of one of the &lt;a href="https://docs.sonarqube.org/latest/requirements/requirements/"&gt;supported databases&lt;/a&gt;. I opted for PostgreSQL.&lt;/li&gt;
&lt;li&gt;Then you'll need to create three new Docker volumes.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker volume create &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube_data
docker volume create &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube_logs
docker volume create &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube_extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now pull the image and bind to the database and volumes.&lt;/p&gt;

&lt;p&gt;If using Oracle will have to install the extension first. Find it &lt;a href="https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html"&gt;here&lt;/a&gt; and move it to the &lt;code&gt;sonarqube_extensions/jdbc-driver/oracle&lt;/code&gt; location]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;SONAR_JDBC_URL&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;INSERT JDBC URL&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;SONAR_JDBC_USERNAME&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;INSERT JDBC USERNAME&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;SONAR_JDBC_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;INSERT JDBC PASSWORD&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; sonarqube_data:/opt/sonarqube/data &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; sonarqube_extensions:/opt/sonarqube/extensions &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; sonarqube_logs:/opt/sonarqube/logs &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 9000:9000 &lt;span class="se"&gt;\&lt;/span&gt;
    sonarqube:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't include the curly braces.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breakdown
&lt;/h3&gt;

&lt;p&gt;I'll dissect each of the Docker commands and flags above if you're new to this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker&lt;/code&gt; simply invokes the Docker daemon that you have installed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;run&lt;/code&gt; has three use cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pull the image from Docker Hub. You can specify other locations from Docker Hub, but that's not for this tutorial.&lt;/li&gt;
&lt;li&gt;Create a container based on the image. Think of the image as a class and the container as an instance of that class i.e. an object.&lt;/li&gt;
&lt;li&gt;Start the container based on the parameters provided as flags to Docker.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;-d&lt;/code&gt; is shorthand for detached. This will keep your terminal on its current instance instead of porting you into a new container's terminal instance.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;--name sonarqube&lt;/code&gt; is, well, the name you want to assign the container. If you don't include it, Docker will assign it a random name like jubilant_powerwasher. In this case, it will be sonarqube. Much better.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true&lt;/code&gt; is adding and setting the environment variable &lt;code&gt;SONAR_ES_BOOTSTRAP_CHECKS_DISABLE&lt;/code&gt;. This will disable some checks that a production level SonarQube determines are necessary with its ElasticSearch integration and could otherwise break your build. Generally, these are memory checks to make sure there's enough available for smooth operation. When using an external database, this setting will be ignored. Bootstrap checks will run every time and probably fail your build.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-p 9000:9000&lt;/code&gt; binds the &lt;a href="http://localhost"&gt;localhost&lt;/a&gt;'s port 9000 to the Docker container's port of 9000. The localhost port (the first number) can be changed to any open port you have, but the container port (the second number, after the colon) is pre-determined by whoever created the image. Do not change the second port number.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sonarqube:latest&lt;/code&gt; is the final parameter passed. It tells Docker which image to pull and what version (identified as tags after the colon). In this case, it's pulling the latest version, which at the time of writing this article is &lt;code&gt;9.0.1-community&lt;/code&gt;. You could replace the &lt;code&gt;latest&lt;/code&gt; tag with this explicit version or &lt;code&gt;lts&lt;/code&gt; which is &lt;code&gt;8.9.2-community&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Steps
&lt;/h2&gt;

&lt;p&gt;You can now navigate to &lt;a href="http://localhost:9000"&gt;localhost:9000&lt;/a&gt; in your web browser and be presented with the login screen. The default log-in credentials for SonarQube are username: admin and password: admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Note About Databases
&lt;/h3&gt;

&lt;p&gt;SonarQube runs with an embedded H2 instance for its database on initial creation after these specific steps. This is okay for the actual testing of SonarQube but bad in a real-world scenario. Be sure to bind it to a persistent relational database. Support exists for Oracle, Microsoft SQL Server, and PostgreSQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;To see the logs for your container, run the following. This section of the document will be updated as I find more errors (or readers tell me about them!)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs sonarqube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bootstrap checks failed
&lt;/h3&gt;

&lt;p&gt;If you're getting this or a similar error message, follow the below steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ERROR: &lt;span class="o"&gt;[&lt;/span&gt;1] bootstrap checks failed. You must address the points described &lt;span class="k"&gt;in &lt;/span&gt;the following &lt;span class="o"&gt;[&lt;/span&gt;1] lines before starting Elasticsearch.
bootstrap check failure &lt;span class="o"&gt;[&lt;/span&gt;1] of &lt;span class="o"&gt;[&lt;/span&gt;1]: max virtual memory areas vm.max_map_count &lt;span class="o"&gt;[&lt;/span&gt;65530] is too low, increase to at least &lt;span class="o"&gt;[&lt;/span&gt;262144]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will need to increase the memory areas available. However, be sure to understand the &lt;a href="https://www.suse.com/support/kb/doc/?id=000016692"&gt;risks associated with doing so&lt;/a&gt;.&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="nb"&gt;sudo &lt;/span&gt;vim /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vm.max_map_count&lt;span class="o"&gt;=&lt;/span&gt;262144
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source the new settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sysctl &lt;span class="nt"&gt;--system&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Everything Docker is frozen
&lt;/h3&gt;

&lt;p&gt;Restart the Docker daemon. Worst case, restart the machine. With volumes and databases set up, you shouldn't lose any data.&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="nb"&gt;sudo &lt;/span&gt;service docker restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>docker</category>
      <category>testing</category>
      <category>codequality</category>
      <category>sonar</category>
    </item>
    <item>
      <title>Installing Docker and Docker Compose</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Fri, 01 Oct 2021 14:00:16 +0000</pubDate>
      <link>https://dev.to/shariq/installing-docker-and-docker-compose-1nd9</link>
      <guid>https://dev.to/shariq/installing-docker-and-docker-compose-1nd9</guid>
      <description>&lt;h2&gt;
  
  
  Pick Your Operating System
&lt;/h2&gt;

&lt;p&gt;You came here to ask, "how do I install Docker?" The answer can be straightforward if you're willing to accept my way, but the steps differ based on which operating system is utilized. To make things more complicated, there are a few ways to install Docker on your OS that are largely based on preference. Today I'm going to walk you through my preferred method. This isn't the only way, but I've found it to be the best way to get up and running with ease. For Ubuntu, we'll be setting up the Docker Engine. For Windows and macOS, we'll be using Docker Desktop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker on Ubuntu
&lt;/h2&gt;

&lt;p&gt;For Ubuntu, we're going to install Docker Engine and Docker Compose using the Docker and Compose repositories. This also happens to be the recommended approach by Docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set Up
&lt;/h3&gt;

&lt;p&gt;Delete any prior versions if you had installed them.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Update your system and install the necessary dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;br&gt;
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;For security purposes, add Docker's official GPG key. Read more about that &lt;a href="https://unix.stackexchange.com/questions/96951/why-do-i-need-to-add-a-gpg-key-with-apt-key-before-adding-url-to-sources-list-an" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Set up the stable repository.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo \&lt;br&gt;
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \&lt;br&gt;
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;That's quite a few steps, but if you followed along exactly, you should be ready to install Docker!&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Install the latest version of Docker, along with its dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;br&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Verify your install by running your first image.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Add your user as an admin to the Docker user group.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo usermod -aG docker $USER&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Doing this last step means you no longer have to append sudo to run Docker commands!&lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstall
&lt;/h3&gt;

&lt;p&gt;Fed up with Docker on your Ubuntu box? Uninstall and remove the configuration files with the following commands.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get purge docker-ce docker-ce-cli containerd.io&lt;br&gt;
sudo rm -rf /var/lib/docker&lt;br&gt;
sudo rm -rf /var/lib/containerd&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker Compose on Ubuntu
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;You must have completed the installation of Docker Engine in the steps above before you can install Docker Compose. Assuming you've done so without any errors, let's continue on!&lt;/p&gt;

&lt;p&gt;Download the stable release of Docker compose.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Unlike the installation for Docker Engine where it automatically installs the latest version, Docker Compose has to have the version manually specified. At the time of writing, the latest version is &lt;code&gt;1.29.2&lt;/code&gt;. The latest version can be viewed at the &lt;a href="https://github.com/docker/compose/releases" rel="noopener noreferrer"&gt;Compose repository release page on GitHub&lt;/a&gt;. Feel free to substitute the version in the command above as needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F4wuyamsyi4trnhavuzy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F4wuyamsyi4trnhavuzy8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make the downloaded binary executable.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/docker-compose&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstall
&lt;/h3&gt;

&lt;p&gt;To remove Docker Compose, utilize the following command (assuming you installed with curl as we did above).&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo rm /usr/local/bin/docker-compose&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker Desktop on macOS
&lt;/h2&gt;

&lt;p&gt;Note that Docker Desktop comes pre-equipped with Docker Engine, Docker Compose, Kubernetes, and a &lt;a href="https://docs.docker.com/desktop/mac/install/#whats-included-in-the-installer" rel="noopener noreferrer"&gt;few other goodies&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Intel or Apple Silicon
&lt;/h3&gt;

&lt;p&gt;Depending on which chipset you have on your Mac, you'll need to install one of two versions of the Docker Desktop application. As this is a GUI application, there's not much needed other than navigating to the correct site and installing the .dmg file. Just drag and drop the Docker icon into your Applications directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fb2nkjm1c7qtzikm6jnsi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fb2nkjm1c7qtzikm6jnsi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker for macOS with Intel
&lt;/h3&gt;

&lt;p&gt;The official link for installing Docker Desktop for macOS with an Intel chipset can be found here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apple Silicon
&lt;/h3&gt;

&lt;p&gt;We'll also need to take a few prior steps to get Docker Desktop running with Apple Silicon. Namely, you'll need to install Rosetta 2 with the following command.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;softwareupdate --install-rosetta&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Afterward, install Docker Desktop for macOS with an Apple Silicon chipset from here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstall
&lt;/h3&gt;

&lt;p&gt;Within the Docker Desktop toolbar item, navigate to the &lt;code&gt;menu &amp;gt; Troubleshoot &amp;gt; Uninstall&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F28z956ksb9vlugu35vhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F28z956ksb9vlugu35vhy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker Desktop on Windows and WSL2
&lt;/h2&gt;

&lt;p&gt;Note that Docker Desktop comes pre-equipped with Docker Engine, Docker Compose, Kubernetes, and a &lt;a href="https://docs.docker.com/desktop/windows/install/#whats-included-in-the-installer" rel="noopener noreferrer"&gt;few other goodies&lt;/a&gt;. Firstly, you will need Docker Desktop even if you want Docker to only run on WSL. This is due to the sandboxed nature of WSL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;First, you'll need to ensure that virtualization is enabled for your CPU in the BIOS. This differs amongst motherboard manufacturers and chipsets (namely Intel and AMD). A quick Google search will get you going though.&lt;/p&gt;

&lt;p&gt;The executable for Docker Desktop for Windows can be found &lt;a href="https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe" rel="noopener noreferrer"&gt;here&lt;/a&gt;. It can also be found on &lt;a href="https://hub.docker.com/editions/community/docker-ce-desktop-windows/" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;. Click the installer, follow the prompts and wait for it to be downloaded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fuzbue7lpmlllk5rx01tm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fuzbue7lpmlllk5rx01tm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the process, be sure to allow the prompts for Enable Hyper-V Windows Features and the Install required Windows components for WSL 2.&lt;/p&gt;

&lt;h3&gt;
  
  
  WSL2
&lt;/h3&gt;

&lt;p&gt;You'll need to complete the steps for installing Docker Desktop on Windows before you can utilize WSL2. However, once you've completed it, feel free to come back to this section.&lt;/p&gt;

&lt;p&gt;Enable &lt;code&gt;Use the WSL2 based engine&lt;/code&gt; in the Docker Desktop for Windows settings and &lt;code&gt;Apply &amp;amp; Restart&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fxi4lsi581q2mn4eti4v3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fxi4lsi581q2mn4eti4v3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Be sure that WSL2 is set as your default and current distribution. Check the current WSL mode.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wsl.exe -l -v&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;If not set to v2, upgrade your existing Linux.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wsl.exe --set-version (distro name) 2&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Set v2 as the default version.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wsl.exe --set-default-version 2&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Navigate to WSL Integration and make sure Enable Integration with my default WSL distro is checked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fvumvs3l74epwx7v499vb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fvumvs3l74epwx7v499vb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Uninstall
&lt;/h3&gt;

&lt;p&gt;Docker Desktop can be uninstalled from the Apps &amp;amp; features system settings. Just search for Docker Desktop and select Uninstall. Follow the prompts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgwr9s72qjjbekgctal6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fgwr9s72qjjbekgctal6n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  More Questions or Need Help
&lt;/h2&gt;

&lt;p&gt;Be sure to check out the official documentation for Docker Engine and Docker Desktop and if you have more questions, feel free to send a message!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>containers</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Be Shamelessly Cutting Edge</title>
      <dc:creator>Shariq</dc:creator>
      <pubDate>Tue, 17 Aug 2021 21:40:58 +0000</pubDate>
      <link>https://dev.to/shariq/be-shamelessly-cutting-edge-lih</link>
      <guid>https://dev.to/shariq/be-shamelessly-cutting-edge-lih</guid>
      <description>&lt;h2&gt;
  
  
  The Competition is Too Scared to be Cutting Edge
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T0Q8MB3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cy6fu91yii86lyrjpdl7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T0Q8MB3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cy6fu91yii86lyrjpdl7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We look to the monopoly organizations and think to ourselves, â€œWhat do I need to do to be the next Google, Apple, or Microsoft? Then we are sorely reminded of the scale at which these organizations operate and quickly snap back to reality, perhaps a little less ecstatic than before. There is no way for a startup, or even small company to compete with these orgs, especially in their specific niches. The competition is quickly crushed or bought out without large commercial investors - and even then you must face the challenge of being a unicorn in your space.&lt;/p&gt;

&lt;p&gt;With that said, you have to remember that these organizations are scared to make drastic changes, they're scared to take the technology of tomorrow and apply it to their use cases today. Okay, maybe they're not scared but definitely weary! They can't go change their stack and create a new solution, and if anything they're better off for not doing so. Oftentimes, it may lead to cannibalizing their own product and market share. Think of these large firms similarly to pharmaceuticals, they &lt;em&gt;could&lt;/em&gt; make a better version, but it could cost them their own business or not provide enough profit margin based on their revenue models.&lt;/p&gt;

&lt;p&gt;To be ahead of the competition, you can and sometimes must be cutting edge, always teetering between chaos and success, anything else can be easily mimicked, or crushed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does Chaos Look Like?
&lt;/h2&gt;

&lt;p&gt;Chaos in our world should be seen as a positive construct for change and advancement. The most recent example of this positive change is blockchain and crypto-currency. The former isn't a new idea, but its use case as a tool for goods and products has led to a chaos that made many individuals rich, and I'm sure some less rich. Overall, it can be argued that individuals have been given a choice to free themselves from a national currency and decouple their own financial well-being from that of where they live. More choice is more chaos, and I think that's good. Real good.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_d22I1Jy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdkvm256w5ni5itg03ud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_d22I1Jy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdkvm256w5ni5itg03ud.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So if chaos looks like choice, and we want to be cutting edge, and you're giving your users a choice to break away from their current constructs, then you may be considered a master of chaos, a harbinger that captures the attention of these large organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Back to the Future
&lt;/h2&gt;

&lt;h3&gt;
  
  
  or How to be Cutting Edge
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WPp0Yckb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ci3ftbukwgqa7498rs4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WPp0Yckb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ci3ftbukwgqa7498rs4a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To be cutting edge doesn't mean you have to master VR, blockchain, and AI to bring forth the perfect digital bank (however if you do, please do throw some credit my way). It means that you need to think differently, be sure that you are aware of how to leverage the latest tech to give you an advantage against your competitors, and don't be scared to pivot. If your first idea or product takes you to the mass success we look for, then you may have a more lucrative career as a fortune-teller.&lt;/p&gt;

&lt;p&gt;Use data and analysis to solve problems that need solving and keep digging into your domain. You may find a problem that's been ignored or is going to be created by other companies trying to solve problems as well. Look to the jeans as your motivation. Sure some gold miners struck gold by sheer chance and luck, but the jean was a guaranteed success thanks to the conditions created in the mining caves.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>bleedingedge</category>
    </item>
  </channel>
</rss>
