<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jovan Hernandez</title>
    <description>The latest articles on Forem by Jovan Hernandez (@jovanhernandex).</description>
    <link>https://forem.com/jovanhernandex</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%2F142854%2F2f25693f-63e8-4a12-9cf4-fc728115da40.jpg</url>
      <title>Forem: Jovan Hernandez</title>
      <link>https://forem.com/jovanhernandex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jovanhernandex"/>
    <language>en</language>
    <item>
      <title>What I Wish I Knew Before Breaking Into Tech</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Thu, 06 Feb 2020 03:52:41 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/what-i-wish-i-knew-before-breaking-into-tech-7i2</link>
      <guid>https://forem.com/jovanhernandex/what-i-wish-i-knew-before-breaking-into-tech-7i2</guid>
      <description>&lt;h4&gt;
  
  
  Things I learned so you don’t have to
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8FhziFeh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4000/1%2Awo3yQq2v6Sqr-aGXKtEU4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8FhziFeh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/4000/1%2Awo3yQq2v6Sqr-aGXKtEU4g.png" alt="[Image by CleanPNG](https://www.cleanpng.com/png-product-design-illustration-human-behavior-cartoon-6584745/preview.html)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  If I Knew Back Then What I Know Now …
&lt;/h1&gt;

&lt;p&gt;Hindsight is 20/20, and it’s always easy to look back and think about what you’d do differently. If I can do anything, I’d love to help anyone learning to code by gently guiding them on a path to success.&lt;/p&gt;

&lt;p&gt;I know everyone has their own style or way of doing things, and the idea anyone can follow your path and have the same results is silly. But many people can learn from others who’ve already experienced a path, so I often like to share my experiences for others to learn from.&lt;/p&gt;




&lt;h1&gt;
  
  
  You Don’t Need to Go to School
&lt;/h1&gt;

&lt;p&gt;Tech is one of those industries where many professionals have taken nontraditional routes.&lt;/p&gt;

&lt;p&gt;Unlike becoming a doctor, accountant, or dentist, working in tech doesn’t require a special degree or specific field of concentration. Many people with different backgrounds have transitioned to careers in tech: From musicians to bankers to chefs to marketers, many people make the jump.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DS9PEtrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/9692/1%2AM_XOnlAT7CEkkhedW7kZEg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DS9PEtrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/9692/1%2AM_XOnlAT7CEkkhedW7kZEg.jpeg" alt="I spent many sleepless nights learning how to learn"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the student-loan crisis continues to grow out of control and many people are considering alternative education routes, tech is one of those industries that’s pretty forgiving of your work history and background. &lt;a href="https://www.cnbc.com/2018/08/16/15-companies-that-no-longer-require-employees-to-have-a-college-degree.html"&gt;Many major tech companies have dropped traditional and outdated hiring policies&lt;/a&gt;, such as drug testing, college degrees, or a certain GPA.&lt;/p&gt;




&lt;h1&gt;
  
  
  But You Probably Should Go to School
&lt;/h1&gt;

&lt;p&gt;With that being said, one should not forgo the opportunity to be traditionally schooled with formal education at a highly regarded institution. Of course, everyone’s circumstances are different, but if you can afford a four-year degree, do it.&lt;/p&gt;

&lt;p&gt;While many companies are lowering their barriers to entry, a four-year degree is still a major filter for recruiters and head hunters.&lt;/p&gt;

&lt;p&gt;Just because it’s possible to land a career in tech without a concentration in computer science doesn’t mean it’s optimal or ideal. I was someone who never took school seriously, which, in turn, caused me to hop around from gig to gig until I landed my first real job in tech at 25 … and it was barely entry level.&lt;/p&gt;

&lt;p&gt;That four years postgraduation possibly cost me hundreds of thousands of dollars in lost wages and compound interest. A four-year degree in a related concentration could have landed me in a better position right out of college to start my career way earlier.&lt;/p&gt;




&lt;h1&gt;
  
  
  Tons of Resources Are Available Online for Free
&lt;/h1&gt;

&lt;p&gt;I like telling people I graduated from YouTube University when they ask me how I learned how to code.&lt;/p&gt;

&lt;p&gt;Of course, that’s a joke, but there’s some truth to how much I owe YouTube for providing so much free useful content for developers and coders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JFwRSRao--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/0%2AaTpOIwd4p3l1RLL8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JFwRSRao--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/0%2AaTpOIwd4p3l1RLL8.jpg" alt="freeCodeCame is probably the best resource on the net to learn how to code interactively and for free. Everyone owes [Quincy Larson](https://medium.com/u/17756313f41a) a lot for this project."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple search can net you a long list of basic tutorials in any language for any framework: Cloud, systems, coding, design, project management, networking … anything can be found on YouTube.&lt;/p&gt;

&lt;p&gt;Not only does YouTube have great content, but there are also many interactive learning environments online for free. Some of my favorites include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.freecodecamp.org/"&gt;freeCodeCamp&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.codecademy.com/"&gt;Codecademy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.w3schools.com/"&gt;W3Schools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  But a Lot of Those Resources Are Stale
&lt;/h1&gt;

&lt;p&gt;As I just mentioned, anything can be found on YouTube, and there are some great free resources if you do some digging. But there also is a lot of junk out there. Perhaps *junk *isn’t the right word, so we’ll go with &lt;em&gt;stale.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nothing is worse than following a tutorial and only finding out several hours into it that the project requires an outdated or deprecated package or module. Paying for content with companies such as Teamtreehouse, Codecademy, or Linux Academy may seem counterintuitive (as I just said there are tons of free resources out there), but you can guarantee you’re getting updated and relevant content that stays up to date with current times and trends.&lt;/p&gt;

&lt;p&gt;Paying $20-$30/month is a way to save you time, energy, and also keep your confidence up when learning to code — or learning any new skill, for that matter. Those initial first few weeks are crucial, and the last thing you need is to lose focus because of terrible audio quality or a horrible resolution on YouTube.&lt;/p&gt;

&lt;p&gt;I’d avoid any large purchases of certification courses, tutors, or bootcamps, though. It’s one thing paying $25/month and another dropping $15k for a crash course on coding fundamentals that most likely won’t stick unless you already have a good grasp of computing basics.&lt;/p&gt;




&lt;h1&gt;
  
  
  It Doesn’t Matter What Language You Learn With
&lt;/h1&gt;

&lt;p&gt;The goal of learning to code is less about technical skills and more about problem-solving and thinking outside of the box. The difference between variables, functions, and loops is all pretty minimal — whether you’re learning programming fundamentals in Python, Ruby, JavaScript, or PHP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WZC7dPRD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3060/0%2AWuxLrjX3Y6LtBC6G.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WZC7dPRD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3060/0%2AWuxLrjX3Y6LtBC6G.png" alt="Example of an array in both Ruby and Python with the same output. Image Credit: Jordan Storms."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Programming itself is just a concept. When you look at it in simplistic terms, you’re telling a computer to do a number of tasks via commands. You can tell a computer to do something a number of times, and for the most part, once you learn the fundamentals of code, it should look rather similar in any modern popular object-oriented language.&lt;/p&gt;




&lt;h1&gt;
  
  
  But Find One Relevant to Your Field, and Stick to It
&lt;/h1&gt;

&lt;p&gt;If you haven’t noticed yet, I like contradicting myself. Learning to code should be language agnostic, but as you find your niche or specialty, you’re going to want to pick a language that’s popular in the industry or field you’re looking to work in.&lt;/p&gt;

&lt;p&gt;Learning how to code in Java when you want to focus on front-end work or design is kind of pointless. You’re better off learning how to code in JavaScript, Ruby, or even Python (some might say learning to code in Java is pointless no matter what field, but I digress).&lt;/p&gt;

&lt;p&gt;As a cloud-security engineer, I learned how to code using Bash and found myself learning Python due to all the security and infrastructure tools for cloud environments being built in Python.&lt;/p&gt;

&lt;p&gt;Clearly, learning to code is much more intuitive in other languages than shell, but considering my background in systems administration, shell was just the go-to for many of us in IT.&lt;/p&gt;

&lt;p&gt;A variable is a variable, and a loop is a loop. It doesn’t matter if it’s Ruby, Python, or PHP, but it helps in the long run to know your field’s dedicated language.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Everyone's journey is unique in their own way. I didn’t take the traditional schooling route and taught myself how to code and climbed the usual tech career ladder. Others have gone to school for computer science and landed jobs right out of college at Google and Facebook. There is absolutely no doubt that some may have an easier path than others, but whether that’s a privilege, economics, or perseverance is another topic entirely.&lt;/p&gt;

&lt;p&gt;If there’s anything I hope you can take from this it’s every point has a counterpoint. Every claim has someone else pointing out exceptions to the rule. Find what path fits your lifestyle, and run with it.&lt;/p&gt;

</description>
      <category>tech</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>firstyearincode</category>
    </item>
    <item>
      <title>My Top Homebrew Packages for 2020</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Sat, 01 Feb 2020 13:52:05 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/my-top-homebrew-packages-for-2020-pmk</link>
      <guid>https://forem.com/jovanhernandex/my-top-homebrew-packages-for-2020-pmk</guid>
      <description>&lt;h4&gt;
  
  
  Become a power user and improve your productivity
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9Kynrk94--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AMBT5gDm1jLU8oeMk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9Kynrk94--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2400/0%2AMBT5gDm1jLU8oeMk.png" alt="Homebrew… or as some call it Apple Cider"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the main reasons I love and continue to stick with macOS is because it’s based on Unix. Having macOS run on Unix has made the transition to Linux much more seamless and I also just find the Unix filesystem more intuitive over Windows and PowerShell.&lt;/p&gt;

&lt;p&gt;With that being said, macOS’s version of Unix (Darwin) doesn’t come without its flaws. For instance, where the heck is the package manager?&lt;/p&gt;

&lt;p&gt;Well, this is where &lt;a href="https://brew.sh"&gt;Homebrew&lt;/a&gt; comes in, but before we go down that rabbit hole, let’s have a package manager primer 101.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a package manager? And should I use one?
&lt;/h1&gt;

&lt;p&gt;If you’re new to macOS or software development, you may be wondering what a package manager is and what its purpose is. Package managers allow users to automate the process of installing, upgrading, configuring, and removing computer programs from systems.&lt;/p&gt;

&lt;p&gt;I’d guesstimate 95% of Mac users have no business using a package manager or even care about how fast they can install applications on their workstations. But when you’re an administrator of a school district with 500 endpoints and no MDM in place (think JAMF), something like Homebrew really comes in handy.&lt;/p&gt;

&lt;p&gt;Having Homebrew installed on endpoints allows you to install CLI tools. Once you add the &lt;code&gt;cask&lt;/code&gt; extension, you also have the ability to daily user applications through the CLI, making onboarding/offboarding and workstation configuration as easy as a few commands in the Terminal.&lt;/p&gt;

&lt;p&gt;You can learn more about Homebrew by visiting &lt;a href="http://brew.sh"&gt;their homepage&lt;/a&gt; here.&lt;/p&gt;

&lt;p&gt;Let's get started with my favorite packages.&lt;/p&gt;




&lt;h1&gt;
  
  
  htop
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;htop&lt;/code&gt;** **is an interactive system-monitor, process-viewer, and process-manager. If you ever worked on an Ubuntu server you should be familiar with this. Mac only comes with &lt;code&gt;top&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oeWaez7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3456/1%2ASZ3VcIheqBFP6hGVicr0Rw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oeWaez7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3456/1%2ASZ3VcIheqBFP6hGVicr0Rw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically, it shows a frequently-updated list of the processes running on a computer, normally ordered by the amount of CPU usage. What makes &lt;code&gt;htop&lt;/code&gt; better than the standard &lt;code&gt;top&lt;/code&gt; is the advanced GUI that makes browsing processes intuitive and simple and tells you how many cores, how loaded they are, and how much memory it has.&lt;/p&gt;




&lt;h1&gt;
  
  
  tldr
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;tldr&lt;/code&gt;** **is a simplified and community-driven version of usual Unix man pages that cuts to the chase. &lt;code&gt;Tldr&lt;/code&gt; leaves all the excess fat from a lot of the standard man pages and outputs the commands you’re probably looking for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DffkY7Yq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/6200/1%2AyAJvRJK5sWUu9NYDNStBAw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DffkY7Yq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/6200/1%2AyAJvRJK5sWUu9NYDNStBAw.png" alt="It’s obvious the difference between normal man pages and tldr"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Word to the wise though, I wouldn’t rely on &lt;code&gt;tldr&lt;/code&gt; if I were new to coding. If you’ve ever played Dark Souls, think of it as the messages other players leave when they die. Most of them are helpful and correct, but there are some stale or odd notes.&lt;/p&gt;




&lt;h1&gt;
  
  
  jq
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;jq&lt;/code&gt; is a lightweight and flexible command-line JSON processor. If you are a command-line addict or find yourself working with APIs and haven’t been using jq, you’ve been missing out. Jq is like sed, but for JSON data. That means you can use it to slice, filter, map, and transform structured data with the same ease as awk, sed, and grep. It’s especially useful for parsing large API payloads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P1-mv1Ca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2358/1%2AJ3IHgYYI8RXuCzVRC8GG5Q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P1-mv1Ca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2358/1%2AJ3IHgYYI8RXuCzVRC8GG5Q.gif" alt="jq is powerful, simple, and great for APIs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The gif above is an example of the simple, yet powerful &lt;code&gt;jq&lt;/code&gt; parsing a giant payload of JSON data from one giant blob of iOS photo metadata to a clean and human-readable output.&lt;/p&gt;




&lt;h1&gt;
  
  
  ncdu
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ncdu&lt;/code&gt;is a disk utility for Unix systems. Its name refers to its similar purpose to the du utility, but &lt;code&gt;ncdu&lt;/code&gt; uses a text-based user interface under the &lt;code&gt;[n]curses&lt;/code&gt; programming library. Users can navigate the list using the arrow keys and delete files that are taking up too much space by pressing the ‘d’ key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--04TjhTbh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2358/1%2AhxIxwhSl9-jCjX2jF6OKAw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--04TjhTbh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2358/1%2AhxIxwhSl9-jCjX2jF6OKAw.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  taskwarrior
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;taskwarrior&lt;/code&gt; is an open-source, cross-platform, time, and task management tool. Or in short, a TODO list built for the command-line.&lt;/p&gt;

&lt;p&gt;As a command-line todo list manager, Taskwarrior maintains a list of tasks that you manage via commands, allowing you to manipulate tasks and organize by priority, date, or project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t09Vfevq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2644/1%2Al-wlR7UmQgXNdreoTLf35w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t09Vfevq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2644/1%2Al-wlR7UmQgXNdreoTLf35w.png" alt="command-line all the things when possible"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One might wonder &lt;em&gt;“why go to the trouble of using all these CLI tools when there are desktop versions with easy-to-use GUIs and cloud syncing capabilities?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It may appear I want to seem like a “leet hacker” by wanting to stare at a black terminal with green text all day, but the reality is that working within the terminal and using CLI-based tools has increased my productivity tenfold within the last year. A lot of that has to do with &lt;code&gt;tmux&lt;/code&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  tmux
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; is a terminal multiplexer for Unix-like operating systems. Think of Visual Studio Code but strictly in the CLI. It allows multiple terminal sessions to be accessed simultaneously in a single window. It’s useful for running more than one command-line program at the same time.&lt;/p&gt;

&lt;p&gt;In the screenshot below, I’m running &lt;code&gt;ping&lt;/code&gt;, &lt;code&gt;htop&lt;/code&gt;, &lt;code&gt;man&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;taskmanager&lt;/code&gt;, and &lt;code&gt;tty-clock&lt;/code&gt; all within one Terminal window for a makeshift, customized command-line IDE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LUylaKhq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5760/1%2Al3Zpaea5EwpFTkll0iBDLQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LUylaKhq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5760/1%2Al3Zpaea5EwpFTkll0iBDLQ.png" alt="tmux can be a valuable tool if you are working on a server and lacking an IDE."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having the ability to run my command-line utilities all within one window allows me to focus without the need to use desktop apps. Using desktop apps is the death of productivity (at least for me).&lt;/p&gt;

&lt;p&gt;Any time you need to go to your desktop, you risk the chance of getting distracted by YouTube, Instagram, Facebook, Reddit, Twitter, etc. Using &lt;code&gt;tmux&lt;/code&gt; with Homebrew has boosted my productivity and delivery rate 10x.&lt;/p&gt;

&lt;p&gt;While that’s fun, I also find &lt;code&gt;tmux&lt;/code&gt; extremely useful when I need to SSH into another server and end the session without killing the process. &lt;code&gt;Tmux&lt;/code&gt; allows me to start a session, run a command, exit the server, and return with the process still intact. Great for those long archives or transfers.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I hope you can see the power, agility, and customization of Homebrew and using CLI tools to become more productive or even creative.&lt;/p&gt;

&lt;p&gt;Some of my most creative ideas and projects have come when I’ve cut out all the excess fat from my workflow and just started with a blank slate. Sometimes too many tools just complicate the process — a streamlined, minimalistic workflow is what we need to get the ball rolling.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>bash</category>
      <category>brew</category>
    </item>
    <item>
      <title>Breaking Into IT and Tech With No Experience: Mindset and Learning</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Thu, 29 Aug 2019 01:09:00 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/breaking-into-it-and-tech-with-no-experience-mindset-and-learning-301</link>
      <guid>https://forem.com/jovanhernandex/breaking-into-it-and-tech-with-no-experience-mindset-and-learning-301</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CN3pj6Ca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2A2GR0MOw90vLQcHP75C-uYg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CN3pj6Ca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2A2GR0MOw90vLQcHP75C-uYg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jovanshernandez.com/going-from-it-to-devops/"&gt;I recently wrote about my experience going from IT to DevOps.&lt;/a&gt;If you’re currently in IT and looking to get involved with software development, or just curious about the transition, I advise you to go check it out.&lt;/p&gt;

&lt;p&gt;After sharing that post, I got a bunch of requests to share how I broke into IT with little to no experience. It’s great that so many people want to be involved in tech and with coding, but with so much information out there, it’s easy to get lost in a sea of information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In Part 1 of this 3 part series, I’ll be focusing on making the jump, having the right mindset, and learning how to learn.&lt;/li&gt;
&lt;li&gt;  Part 2 will cover resources and educational tools for learning how to code and break into tech.&lt;/li&gt;
&lt;li&gt;  Part 3 will conclude with the interview process, how it works, what recruiters look for, and how to continue to advance your career.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Some of the questions that stalled my progress:
&lt;/h4&gt;

&lt;p&gt;One thing I wish I could tell myself from 5 years ago is to stop wasting time and start taking action. Some questions that killed any progress for me included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What I should be studying?&lt;/li&gt;
&lt;li&gt;  Is this course worth the investment?&lt;/li&gt;
&lt;li&gt;  What path I should focus on?&lt;/li&gt;
&lt;li&gt;  How do I gain experience without a job?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, hopefully after reading this and me sharing my experience, you’ll gain some insight as to what path to take, how to get started, and where to go from here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;As I mentioned in my&lt;/em&gt; &lt;a href="https://jovanshernandez.com/going-from-it-to-devops/"&gt;&lt;em&gt;IT to DevOps post,&lt;/em&gt;&lt;/a&gt;&lt;em&gt;this is&lt;/em&gt; &lt;strong&gt;&lt;em&gt;my specific&lt;/em&gt;&lt;/strong&gt; experience. This is not the best, nor most efficient, nor most optimal route or path to take, but it’s my route and it got me to where I’m at today. I’m sharing to help anyone who may find themselves in the same position I was 5 years ago.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started in IT with No Experience
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cG1ET4om--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AWMMS9cK1N8xPOc3yfkRjeQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cG1ET4om--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AWMMS9cK1N8xPOc3yfkRjeQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A little about me — I was around 25 years old, working a sales job that I was terrible at, had a negative bank account, and suffered from depression. Talk about rock-bottom.&lt;/p&gt;

&lt;p&gt;After one day deciding I’d had enough, I made a plan to completely pivot my career path and get involved in tech. My goal was to be a software developer, but I didn’t want to go back to school, and I needed a fulfilling job, ASAP.&lt;/p&gt;

&lt;h4&gt;
  
  
  Quitting Sales and Working at Apple
&lt;/h4&gt;

&lt;p&gt;Not everyone is willing nor will have the opportunity to work at an Apple Store, but one of the first and best things I did was leave my sales job and work for Apple.&lt;/p&gt;

&lt;p&gt;I didn’t quit my sales job before I had an offer in place, but I did leave a full-time salary career with bonus and commission, for a part-time hourly position. I went from making $40–45K a year to just about $13/hour. I bring this up because this is the kind of dedication one needs if they really want switch careers, especially one as demanding as tech.&lt;/p&gt;

&lt;p&gt;It wasn’t easy living just above minimum wage, especially with part-time hours, but those weekdays I had off, I used to learn how to code and develop websites. Not saying everyone needs to quit their jobs, but it gave me much needed time to focus.&lt;/p&gt;

&lt;p&gt;It also helped that while at work, I still was around technology, so I was inundated, whether outside of work, or during work, with technology, computers, and software.&lt;/p&gt;

&lt;p&gt;I highly recommend anyone looking to change careers to find some kind of side gig, part-time gig, or even full-time gig, revolving around technology. When you’re surrounded by tech your whole day, it isn’t that hard to switch gears when you come home to continue learning and self-education.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;If you can’t find a job at Apple or any side-tech gigs, it might be worth it to work in hospitality while you are teaching yourself how to code/change career paths. Working in hospitality as a bartender or server provides you with cash on hand, and also almost always is later in the evening from 5 PM to 2 AM. This allows you to wake up early and use your brain when it is at it’s strongest to learn code.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Trying to learn how to code at 7 PM after a long day of work is one of the hardest things to do and you will lose motivation quickly.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gaining Work Experience
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5SwMYRyl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2Ae1iypsouAGB6jABtPW-JyA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5SwMYRyl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2Ae1iypsouAGB6jABtPW-JyA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don’t need work experience to gain tech experience. Teach yourself using your own environment.&lt;/p&gt;

&lt;p&gt;Since I had little to no experience, I knew I would have to be creative in order to land my first tech/help desk role. I’m an avid Apple/Mac fan and was already working at an Apple store so I leaned into my strengths and focused on Mac OSX Support and Help Desk roles. I went on Indeed and LinkedIn and did some research for what skills recruiters and firms were looking for when it comes help desk roles. Most job listings included things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Strong troubleshooting skills.&lt;/li&gt;
&lt;li&gt;  Strong understanding of network infrastructure.&lt;/li&gt;
&lt;li&gt;  Ability to configure and troubleshoot network infrastructure devices such as routers, firewalls, and switches.&lt;/li&gt;
&lt;li&gt;  Creative problem solver.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;A self-starter and able to solve problems creatively without much management&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I highlight that last one because it’s critical to understand this. Working in IT is all about solving problems and thinking outside of the box if a solution isn’t obvious. Constantly looking for the next step and needing someone to tell you exactly what to do every step of the way is a huge red flag that maybe you aren’t thinking the way IT engineers should be thinking.&lt;/p&gt;

&lt;p&gt;Since I had no professional experience (besides being an Apple Genius), I built my own home lab and hosted websites locally so I could learn and understand things such as DNS, Nameservers, DHCP servers, and routers. All of this “experience” is possible with just your home network and laptop/desktop you already have. Not having real “work experience” is a lazy excuse to not get started in IT. It is literally one of the only professions where you don’t need formal training or real work experience to break into, unlike being a doctor or a dentist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Studying Methods
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---S07glVA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AnNUAut4-eIh5rQaQY1BVMA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---S07glVA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AnNUAut4-eIh5rQaQY1BVMA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it comes to learning a new topic, technology, or language, I try to incorporate a “brick and mortar” approach. Studying and learning the material is almost like laying breaks. The foundation in my case was always a large side project I was working on. Whether it was building a web app, a home server, or designing websites, I always had a side project motivating me to get something done. The point wasn’t to fully 100% grasp everything then and there, but to go through the process of project management start to finish.&lt;/p&gt;

&lt;p&gt;The cement and bricks part of the building would be supplemental YouTube videos or interactive coding courses. After going through a side project, I would watch YouTube videos to reinforce what I was actually learning. It’s critical to physically go through the motions of coding and project planning, and then reinforce what you just learned with supplemental material.&lt;/p&gt;

&lt;p&gt;If you just try to learn everything through coding tutorials, you just end up being a keyboard monkey not retaining anything you typed. If you just try to learn a topic by binge-watching a 20-hour Udemy course, your eyes will glaze over and you’ll forget everything you just watched by the next day.&lt;/p&gt;

&lt;p&gt;You can tweak the brick and mortar approach to cater to your lifestyle and schedule but I stand by the idea that you will suffer from burnout if you try to learn one thing specifically by one single method or curriculum.&lt;/p&gt;

&lt;p&gt;I always was working on a project, in the middle of a YouTube tutorial, and also reading a book. Everywhere and anywhere I went, I could learn something.&lt;/p&gt;

&lt;h4&gt;
  
  
  Having Two Pillars of Study
&lt;/h4&gt;

&lt;p&gt;Having two topics or subjects to learn sometimes can help balance out your schedule and habits. I know when I would try and focus on one topic and I would get stuck, it would derail me and I would lose focus and passion and drive. Learning two things at once can give you something else to turn to when you aren’t feeling so motivated on one specific topic or project. It also makes you more marketable when applying for jobs.&lt;/p&gt;

&lt;p&gt;Applying for help desk roles with IT experience is great, but marketing yourself as a self-taught IT professional with a passion for web and server technologies is going to set you apart from the competition. I was an Apple Genius Bar Specialist with a passion for web development technologies including server management.&lt;/p&gt;

&lt;h4&gt;
  
  
  Learning Code and Web Development
&lt;/h4&gt;

&lt;p&gt;This post is specifically meant to be about making the jump from no experience to entry-level IT/help desk, but I did want to include web development as a key topic I would bring up during interviews.&lt;/p&gt;

&lt;p&gt;Chances are you won’t be going from zero experience to a web development role, but showing interest in technologies and skills outside of your immediate job requirements shows the recruiter you are ambitious, curious, and constantly learning.&lt;/p&gt;

&lt;p&gt;Working at Apple was a good experience at the time, but my end-game was web development. During my days off (since Apple was part-time) I would run through coding tutorials and binge watch YouTube coding videos. Going in to help desk job interviews with the desired skill set and also a passion for advanced technology really set me apart from other applications who just had 2 years of school and a CompTIA A+ cert.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusions and Notes to Part 1
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CmE9qbUE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AEuBPYkJI801Q3GflcwunAw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CmE9qbUE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AEuBPYkJI801Q3GflcwunAw.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I covered a lot in Part 1 of this series and I still feel I’ve barely scratched the surface. To summarize everything I mentioned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  I broke into IT with no experience. It’s hard work, but it’s more than doable. You just need to focus and make it work with your life and schedule.&lt;/li&gt;
&lt;li&gt;  Stop worrying and start doing. Worrying about which line of IT you should focus on isn’t important when breaking into the industry with no experience. Your main goal should be to find a help desk or support technician role. Worrying about coding languages, frameworks, or security protocols is pointless when you still have no experience.&lt;/li&gt;
&lt;li&gt;  Your learning process should be something you stack to with a schedule and a pattern. One day can be focused on your side project, the next day can be reading an IT fundamentals book or watching some YouTube videos/tutorials. Either way, keep it fresh so it keeps your motivation high to avoid burnout.&lt;/li&gt;
&lt;li&gt;  You don’t need real work experience to build IT experience. IT is one of the only fields you can start learning day one, today, right now. If you have a computer and an internet connection, you can start learning and change your career as you’ve always wanted to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Part 2 of Breaking Into IT, I’ll be highlighting specific resources I used to break into IT and advance my career. I’ll be covering YouTube content creators, Udemy courses, interactive online courses like FreeCodeCamp, Codecademy, and more.&lt;/p&gt;

&lt;p&gt;——————————&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jovan is a web developer and DevOps engineer who loves tech, automation, movies, and video games. Visit his site at  &lt;a href="http://www.jovanshernandez.com/"&gt;www.jovanshernandez.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>webdev</category>
      <category>devops</category>
      <category>systems</category>
    </item>
    <item>
      <title>Going From IT to DevOps</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Fri, 23 Aug 2019 11:36:41 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/going-from-it-to-devops-md5</link>
      <guid>https://forem.com/jovanhernandex/going-from-it-to-devops-md5</guid>
      <description>&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AJiGhOFQ2Sgq6KnYTGHA7Fw.jpeg" 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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AJiGhOFQ2Sgq6KnYTGHA7Fw.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Photo by  &lt;a href="https://unsplash.com/@kobuagency?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Kobu Agency&lt;/a&gt;on &lt;a href="https://unsplash.com/search/photos/programmer?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  If You’ve Worked in IT, This Story May Sound Familiar …
&lt;/h3&gt;

&lt;p&gt;You start out as tech support and eventually land a help-desk role. In this position, you gain experience, maybe get promoted to help-desk level 2, and become an IT admin.&lt;/p&gt;

&lt;p&gt;From there, you gain enough experience to start working on systems as a sysadmin or systems engineer. This is where people usually get to a fork in the role: “Should I focus more on code or operations?”&lt;/p&gt;

&lt;p&gt;Well, if you’re a sysadmin looking to get into software or web development, DevOps is almost always the next natural step.&lt;/p&gt;

&lt;p&gt;The primary goal for system administrators and engineers is to make it possible for employees in different departments to share information and work together more efficiently. DevOps engineers are very similar in that they provide efficiency and optimization, but they connect software-development teams with deployment teams.&lt;/p&gt;

&lt;p&gt;Many people still have no idea how to break into software development and feel they’re stuck rebooting computers and fixing printers their whole life in ticket purgatory, but there is a way out (if you work hard.)&lt;/p&gt;

&lt;h4&gt;
  
  
  Who is this for? --
&lt;/h4&gt;

&lt;p&gt;First off, let’s get two things out of the way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. This is not the only way to go from IT/operations to DevOps.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nor is it the definitive best way, but it is  _my_way. You may have had a different experience, and your mileage may vary. But this is how I went about it, and while it may not be the most efficient, it’s just how it played out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. We’ve all seen this before: “DevOps isn’t a job — it’s a culture!”&lt;/strong&gt;. Yeah, sure. We get it. Some say DevOps isn’t a real job and that your development and operations teams should just work hand in hand. Whatever you want to say or believe — who really cares. There are people getting paid, and their title is DevOps. So it is what it is. If your company can afford a DevOps engineer, great. If not, start incorporating these philosophies with your current teams.&lt;/p&gt;

&lt;p&gt;With that said, this is really for anyone who is in IT and wants to get more involved in software development, web development, or anything more on the production side of things.&lt;/p&gt;




&lt;h3&gt;
  
  
  DevOps Tools and Skills
&lt;/h3&gt;

&lt;p&gt;Anyway, now with that out of the way, below are the key skills and technologies I focused on to put me on the path to software development.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Operating system: Linux&lt;/strong&gt;
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A05kTTSqy_JG1GzrcEQBZiw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A05kTTSqy_JG1GzrcEQBZiw.png"&gt;&lt;/a&gt;&lt;br&gt;
If you want to get into DevOps, start getting used to Linux. Even if you aren’t in DevOps, you should still be using Linux since it powers over 90% of computers and systems around the world.&lt;/p&gt;

&lt;p&gt;This is pretty easy if you use a Mac as your daily driver. Since Macs are Unix-based, many, if not most, Linux commands can be used on Macs. This is great for when you’re doing Mac administration and you want to script and automate tasks you do daily or SSH into servers and machines to perform support. More on this topic later.&lt;/p&gt;

&lt;h4&gt;
  
  
  Web stack: LAMP
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AAEDJAyoOruXO7cckyvO_Gw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AAEDJAyoOruXO7cckyvO_Gw.png"&gt;&lt;/a&gt;&lt;br&gt;
While not always applicable to every DevOps role, learning the LAMP stack helped me understand basic fundamentals of web applications from the operating-system level. We all use apps on a daily basis, but knowing how these main components of web applications work together helped me process what exactly is happening, when, and why.&lt;/p&gt;

&lt;p&gt;There are other stacks out there, such as LEMP (Linux, NGINX, MySQL, PHP/Python), and MEAN, but I just went with LAMP because it’s one of the most popular (and I was already familiar with it). The bottom line is, learn how different portions of web applications work.&lt;/p&gt;

&lt;h4&gt;
  
  
  Back-end language: Python
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2APPIp7twJJUknfohZqtL8pQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2APPIp7twJJUknfohZqtL8pQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whenever someone decides they want to get involved in web or software development, they almost always spend way too much time deciding which language they should focus on. While learning specific languages definitely has its benefits for particular roles, when you are just starting out and want to learn how to develop applications or software, just picking any language and sticking with it is the most important part.&lt;/p&gt;

&lt;p&gt;With that being said, I personally think sysadmins and future DevOps engineers should really stick to Python. It’s probably one of the easier languages to learn and use: It’s human friendly, and you’ll find many security tools and frameworks which are written in Python. In reality, it doesn’t matter, though. In my first year of DevOps, I’ve already worked with Ruby, Python, Shell, and even some PHP. Just pick something and stick with it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Scripting: Bash
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A6CHq8F4YNO7_CnEgmtOBYg.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A6CHq8F4YNO7_CnEgmtOBYg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While Python is great, as a Mac sysadmin, one thing I took advantage of was Macs being Unix-based and having a terminal. As a Mac sysadmin, I wrote scripts to help configure systems and automate tasks I found repetitive (and also I was lazy and didn’t want to do the same thing over and over).&lt;/p&gt;

&lt;p&gt;For instance, I wrote scripts that would create users, install apps, and configure printer settings when on boarding new users. Normally this task would take several hours, but who has time for that? With a Bash script, I could configure five or even 10 machines at once through a tool like Apple Remote Desktop, cutting my onboarding time down to minutes, not hours.&lt;/p&gt;

&lt;h4&gt;
  
  
  Automation: Ansible
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ATCxNJ3RDDEALq6tTMrH5-w.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ATCxNJ3RDDEALq6tTMrH5-w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ansible is an open-source IT automation engine, which can remove drudgery from your work life and will also dramatically improve the scalability, consistency, and reliability of your IT environment. You’re going to want to learn Ansible for provisioning, configuration management, and application testing and deployment.&lt;/p&gt;

&lt;p&gt;Once I got to scripting things like user onboarding and application installations, I started combining my scripts with tools like  &lt;a href="https://www.apple.com/remotedesktop/" rel="noopener noreferrer"&gt;Apple Remote Desktop&lt;/a&gt;(ARD) and  &lt;a href="https://github.com/MagerValp/AutoDMG" rel="noopener noreferrer"&gt;AutoDMG&lt;/a&gt;to automate the imaging of machines. When I discovered Ansible, that combined more of my tasks into one single playbook I could execute. Playbooks are like recipes (think Chef or Puppet) which end points are then configured by.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/geerlingguy/mac-dev-playbook" rel="noopener noreferrer"&gt;Here’s a GitHub repo with some good Mac sysadmin playbooks.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  VirtualBox: Vagrant
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AweuMknsLJV1t4lMq4lZIdw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AweuMknsLJV1t4lMq4lZIdw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vagrant is a tool for building and managing virtual-machine environments in a single workflow. Vagrant provides easy-to-configure, reproducible, and portable work environments.&lt;/p&gt;

&lt;p&gt;Need an Ubuntu 18.04 instance for testing? How about a CentOS instance for a staging server? Vagrant gives you a disposable environment and consistent workflow for developing and testing infrastructure management scripts.&lt;/p&gt;

&lt;h4&gt;
  
  
  CI/CD: Jenkins
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2As8mwAOWdb2choX4pj9ozvw.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2As8mwAOWdb2choX4pj9ozvw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Continuous integration (CI) and continuous deployment (CD) is one of the most important parts of DevOps, yet is also one of the most complex to grasp and understand. Jenkins may not be the best tool for CI/CD, but it certainly is one of the most popular and definitely an industry staple, especially being open source.&lt;/p&gt;

&lt;p&gt;As an automation tool, Jenkins is used to build, test, and kick off deployments of apps, making it easier for developers to integrate changes and bug fixes to software continuously, eliminating the dreaded “push to production and pray” mantra.&lt;/p&gt;

&lt;p&gt;If you are at all serious about DevOps, get to know Jenkins inside and out, as you will be staring at it a lot.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cloud: AWS
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Abz1LQz5QqyszXiEGuunmlQ.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%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Abz1LQz5QqyszXiEGuunmlQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it comes to cloud infrastructure and services, Amazon Web Services (AWS) is king. AWS helps companies reduce costs, cuts deployment times, and increase operational scale by not needing to worry about server provisioning and physical asset limits. AWS is a must if you are trying to break into DevOps or software development (Azure and Google Cloud both exist but pale in comparison to the market share of AWS).&lt;/p&gt;

&lt;p&gt;AWS offers hundreds of services, but it’s important to get to know the core services such as EC2, S3, RDS, Route53, and Lambda.&lt;/p&gt;

&lt;p&gt;A good resource for AWS and DevOps projects is right on the AWS  &lt;a href="https://aws.amazon.com/devops/" rel="noopener noreferrer"&gt;website&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion and Resources
&lt;/h3&gt;

&lt;p&gt;The best way to really understand the ins and outs of software development and DevOps is to start your own projects. You can watch YouTube tutorials all day and read Medium posts all night, but until you actually start writing some code, configuring servers, and pushing deployments, what you learn won’t stick with you.&lt;/p&gt;

&lt;p&gt;If you’re looking for some project and tutorial ideas, AWS has a great resource right on their  &lt;a href="https://aws.amazon.com/getting-started/use-cases/devops/" rel="noopener noreferrer"&gt;site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some projects I worked on at home that helped my learning:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Start with a fresh Ubuntu install and configure a LAMP stack and deploy your own website&lt;/li&gt;
&lt;li&gt;  Install and build a Jenkins server, and practice pushing code for deployment&lt;/li&gt;
&lt;li&gt;  Create a free AWS account, and start messing around with EC2s, S3 buckets, and other AWS services&lt;/li&gt;
&lt;li&gt;  Start building scripts to automate some of your everyday tasks.&lt;/li&gt;
&lt;li&gt;  Build scripts that organize files on your desktop by file extension, or build a script that moves files from one location to another automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I spent five years in IT, and I learned a lot. But if I had known what I just went over, I could’ve cut my software-development journey in half and reduced the time to learn tremendously.&lt;/p&gt;

&lt;p&gt;Good luck, and keep coding!&lt;/p&gt;

&lt;p&gt;——————————&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Jovan is a web developer and DevOps engineer who loves tech, automation, movies, and video games. Visit his site at &lt;a href="http://www.jovanshernandez.com" rel="noopener noreferrer"&gt;www.jovanshernandez.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was featured on &lt;a href="https://medium.com/better-programming" rel="noopener noreferrer"&gt;Better Programming&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>python</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>What is NGINX?</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Thu, 08 Aug 2019 14:04:04 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/what-is-nginx-26b2</link>
      <guid>https://forem.com/jovanhernandex/what-is-nginx-26b2</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vsxZ8BlC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AkkZsCClkwMBWPux0qWmT2w.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vsxZ8BlC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AkkZsCClkwMBWPux0qWmT2w.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro to NGINX
&lt;/h3&gt;

&lt;p&gt;If you’ve been following along with my posts, you have a sound introduction to  &lt;a href="https://medium.com/@jovanshernandez/introduction-to-apache-web-server-2138af643039"&gt;Apache Web Server&lt;/a&gt;, how it functions, it’s place in history, and how Sumo Logic can help you sort through the numerous logs provided. Apache Access and Error logs are integral to understanding the traffic patterns and issues your users face when accessing your web applications. Sumo Logic helps administrators parse through logs, isolate issues, and determine the root causes of errors. Sumo Logic also provides invaluable insight for business and product development teams in order to gauge user interaction and navigation patterns.&lt;/p&gt;

&lt;p&gt;Today we will be covering NGINX, an open source software web server and main alternative/competitor to Apache HTTP Server. NGINX has been gaining in popularity since its inception and is used across a wide spectrum of applications for web serving, reverse proxying, caching, load balancing, media streaming, and much more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Quick History of NGINX
&lt;/h4&gt;

&lt;p&gt;In 2002, web developers across the internet were tasked to tackle the challenge of engineering a web server capable of handling ten thousand concurrent web connections, as what would be considered a required benchmark of the modern web. Igor Sysoev, a Russian software engineer released the first public version of NGINX. The challenge was met by relying on an asynchronous, event-driven architecture. This means that unlike Apache HTTP Server, NGINX handles multiple processes and threads for requests in one worker process, as opposed to dedicated processes or threads, which Apache is known for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GbT5E5G4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AVuhH_wxUjl_dY2vCrE8Lng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GbT5E5G4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AVuhH_wxUjl_dY2vCrE8Lng.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NGINX gains ground on Apache&lt;/p&gt;

&lt;h3&gt;
  
  
  NGINX vs Apache
&lt;/h3&gt;

&lt;p&gt;There was a time when Apache reigned supreme without question and everyone was a long way back. Today, in 2019, the web server landscape has changed and depending on who you source, NGINX and Microsoft’s  &lt;a href="https://www.sumologic.com/blog/iis-logs/"&gt;IIS&lt;/a&gt;are neck and neck for 2nd place, or could be swapped for 2nd or 3rd place depending on the specific function of your server. Either way, Apache is losing ground quickly as web applications and their functions are becoming more dynamic and specific to their cause. A decade ago, when web applications and servers were nearly all the same, Apache could handle almost everything you needed, but as the web grew and different needs were required, NGINX began to fill a need that Apache couldn’t. Apache is great for shared hosting of multiple sites, but NGINX is showing it’s strength and dominance for dynamic content, elaborate features, and pure flexibility in an ever-changing landscape of web content.&lt;/p&gt;

&lt;p&gt;Just like Apache and the LAMP stack, NGINX has become popular by offering itself as a LEMP solution for software developers (with the E being used as the phonetic spelling of NGINX). Linux, NGINX, MySQL, and PHP/Python has become a very popular stack that mirrors the classic web LAMP stack. While Apache and the LAMP stack is still a very popular solution, and depending on your use case, you may want to consider NGINX and LEMP as your next go-to stack for your web application.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is NGINX Different than Apache?
&lt;/h3&gt;

&lt;p&gt;NGINX came into the server landscape after Apache, therefore its developers were more aware of the issues and technical limitations plaguing Apache. As previously mentioned, NGINX relies on event-driven, asynchronous, single-threaded architecture. By utilizing the underlying power of modern operating systems like Linux and Unix, NGINX is able to serve at least 10x more (and often 100–1000x more) requests per server compared to Apache. Efficiently optimizing the use of memory and CPU, NGINX is capable of rapidly scaling to provide more users connections while also providing better bandwidth, all while being less of a resource hog when compared to other modern operating systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zWvCWgH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2A7levUUrBPfBh0Mssj4knxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zWvCWgH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2A7levUUrBPfBh0Mssj4knxg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NGINX handles requests differently than Apache which makes NGINX suitable for a more dynamic environment with varied roles. Some of the most popular use case scenarios for NGINX to be used in a web application besides serving dynamic web content include: Having NGINX in your stack allows developers the capability to use it as a reverse proxy server for HTTPS and other TCP protocols, load balancing for efficient traffic distribution, and HTTP caching.&lt;/p&gt;

&lt;p&gt;While it’s totally doable for Apache to be used as a load balancer, Apache is known more for its power and durability while NGINX is known for speed, responsiveness, and resource efficiency. Therefore it’s much more common to have NGINX as a reverse proxy with Apache as the back end server.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Does NGINX Process Dynamic Requests?
&lt;/h3&gt;

&lt;p&gt;You can run benchmark tests all day but real world use-cases are a much better way to determine how servers behave in the wild. We can take a look at static vs dynamic content and how each server handles both requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apache — &lt;/strong&gt;Part of what makes Apache great is its modular configurability with MPMs, or “multi-processing modules” Apache is fully capable of handling static and dynamic content through conventional file-based methods and also through it’s MPM workers. By embedding a required language processor within each worker instance, Apache can server PHP, Python, and other popular languages for dynamic content.&lt;/p&gt;

&lt;p&gt;Being able to handle dynamic content internally without passing to external processes allows Apache to serve it’s content rather simply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NGINX — &lt;/strong&gt;On its own, NGINX is not capable of processing dynamic content natively. In order to handle a scripting language such as PHP, NGINX must pass the request to an external processor that handles the execution of the script and then it waits for the content to be sent back, rendered and ready to be served to the end user. While it sounds complicated and more complex than Apache, there are some advantages.&lt;/p&gt;

&lt;p&gt;NGINX uses protocols such as http, FastCGI, SCGI, uWSGI. Since the dynamic interpreters are external and not integrated with the worker processes, the overall overhead is reduced which inturn gives NGINX its reputation of speed and responsiveness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_TUrDhZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AYGwEssj4tgpGpABQjgwFhQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_TUrDhZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AYGwEssj4tgpGpABQjgwFhQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rundown of differences between NGINX and Apache&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In this intro to NGINX, we covered a brief history of the NGINX server, how it came to be, its place within the server landscape and also the benefits of NGINX over Apache. While both types of servers are leaders and powerful within their own right, it’s important to recognize specific use-case scenarios so developers and administrators can be better equipped when it comes to making infrastructure decisions.&lt;/p&gt;

&lt;p&gt;In Part 2 of Introduction to NGINX, we’ll be taking a deeper dive into NGINX including configuration management, log files, error pages, and the different types of modules that can be used to enhance your web application and server architecture. Stay tuned for Part 2 soon.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.sumologic.com/blog/what-is-nginx/"&gt;&lt;em&gt;Note: This post was originally featured on Sumo Logic’s Resource Center Blog&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nginx</category>
      <category>linux</category>
      <category>servers</category>
    </item>
    <item>
      <title>Configuring Ubuntu 18.04 for a Python Dev Environment with Flask, Gunicron, and VirtualEnv</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Mon, 22 Jul 2019 21:17:23 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/configuring-ubuntu-18-04-for-a-python-dev-environment-with-flask-gunicron-and-virtualenv-595i</link>
      <guid>https://forem.com/jovanhernandex/configuring-ubuntu-18-04-for-a-python-dev-environment-with-flask-gunicron-and-virtualenv-595i</guid>
      <description>&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AgK7JTwGHlbhnqLOB18Xy_w.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AgK7JTwGHlbhnqLOB18Xy_w.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flask is a great Python framework for getting ideas up and running quickly on a lightweight app environment. In this tutorial we are going to get Python 3.6 configured with development system packages to start a new Flask web application project and run it with Green Unicorn (Gunicorn).&lt;/p&gt;

&lt;h3&gt;
  
  
  But first, what is Green Unicorn?
&lt;/h3&gt;

&lt;p&gt;Green Unicorn (from here on out, we will refer to it as Gunicorn) is &lt;em&gt;“…a Python WSGI HTTP Server for UNIX. It’s a pre-fork worker model. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can find out more about Gunicorn, &lt;a href="http://gunicorn.org" rel="noopener noreferrer"&gt;from their website&lt;/a&gt;, which is also where I pulled that quote. But for the sake of brevity, Gunicorn is an easy to use HTTP server for Python web apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Package Installations
&lt;/h3&gt;

&lt;p&gt;To begin, we’re going to install three packages. python-dev python-pip &amp;amp; python-virtualenv. You should also check which version of Python you have installed and it’s location, then run the following command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install python3-dev python3-pip python3-virtualenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AviHn_D1PVeNfccbiMgV14g.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AviHn_D1PVeNfccbiMgV14g.png"&gt;&lt;/a&gt;Installing Python packages.&lt;/p&gt;

&lt;p&gt;If run correctly, the package manager should spit a bunch of output and report when everything is set up. From there, we’ll use pip and virtualenv, both packages we just installed, to form a directory and handle our app dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###CREATE A NEW DIRECTORY TO HOUSE YOUR VIRTUAL ENVS
cd ~
mkdir -p ~/venvs

###SPECIFY PYTHON3 FOR THE INSTALLTION AND THEN ACTIVATE YOUR VIRTUAL ENV
python3 -m venv venvs/flaskproject
source ~/venvs/flaskproject/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZcDXHBP7poZqV9W_uj2YKw.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZcDXHBP7poZqV9W_uj2YKw.png"&gt;&lt;/a&gt;Installing packages and setting up a virtual environment for your Flask project.&lt;/p&gt;

&lt;p&gt;If all goes well, you should see your terminal prompt changes with the name of your virtual environment that was activated. In our case, we have (flaskproject) now in our terminal prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using PIP for upgrades, Wheel, and Gunicorn
&lt;/h3&gt;

&lt;p&gt;We’re going to use pip to install a few dependencies and packages. Let’s start by updating our packages list and then installing wheel. Then we will install Flask and Gunicorn as well.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###UPDATING AND INSTALLING WHEEL
pip install --upgrade &amp;amp;&amp;amp; pip install wheel

###INSTALLING FLASK AND GUNICORN
pip install flask gunicorn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a bunch of output expressing successful installations. If all goes well, you shouldn’t see any errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing Flask and Running it with Gunicorn
&lt;/h3&gt;

&lt;p&gt;We need to create a new directory to hold our app files. This directory will live within our home folder, not within our virtualenvs folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###CREATE A DIRECTORY AND MOVE INTO IT
mkdir ~/flaskproject
cd ~/flaskproject
###CREATE FILE FOR TEST APP CODE
nano app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within the app.py file, write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask, Response

app = Flask(\_\_name\_\_)

@app.route("/")
def index():
 return Response("Your Python Flask Project is Working!"), 200

if \_\_name\_\_ == "\_\_main\_\_":
 app.run(debug=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AK8NBrPSsu5H-pL7CzHQWug.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AK8NBrPSsu5H-pL7CzHQWug.png"&gt;&lt;/a&gt;Your test app code.&lt;/p&gt;

&lt;p&gt;Now move to the directory above the flaskproject folder, which in our case is the user home folder. You can also just typecd ~ to get there.&lt;/p&gt;

&lt;p&gt;From your home folder, we can use Gunicorn to run your app with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###RUN THIS FROM YOUR HOME FOLDER ~/
gunicorn flaskproject.app:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AIqi40pXgYWVcOwijg6-ozw.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AIqi40pXgYWVcOwijg6-ozw.png"&gt;&lt;/a&gt;Running Gunicorn with Flask to test your app.&lt;/p&gt;

&lt;p&gt;If successful, we’ll get output of Gunicorn starting and listening on localhost:8000 or 127.0.0.0:8000 and going to that address should show your app.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AXVuUvqXNx8bloPO24D-nGg.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AXVuUvqXNx8bloPO24D-nGg.png"&gt;&lt;/a&gt;You should see this if you are successful.&lt;/p&gt;

&lt;p&gt;That’s it! You basically set up a quick Python test environment using PIP, Flask, and Gunicorn. From here, you can build more dynamic web apps using Flask and test them the same way.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>coding</category>
      <category>python</category>
      <category>flask</category>
    </item>
    <item>
      <title>Using Logs to Monitor Apache Web Server</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Mon, 08 Jul 2019 14:11:03 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/using-logs-to-monitor-apache-web-server-46ce</link>
      <guid>https://forem.com/jovanhernandex/using-logs-to-monitor-apache-web-server-46ce</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ragn7l4---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AgA0FgYwMANuYMT74dknCXA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ragn7l4---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AgA0FgYwMANuYMT74dknCXA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to effectively manage and monitor your infrastructure, a web admin needs clear and transparent information about the types of activity going on within their servers. Server logs provide a documented footprint of all traffic and errors that occur within an environment.  &lt;a href="https://www.sumologic.com/application/apache/"&gt;Apache&lt;/a&gt; has two main log files, Error Logs, and Access Logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error Logs&lt;/strong&gt; — Apache error logs provide diagnostic information and descriptive errors that occur during a server’s uptime. This is almost always your first step to diagnosing and troubleshooting issues with your server and environment. Depending on your environment, your Apache error logs may be available in different folders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access Logs&lt;/strong&gt; — Apache access logs record all incoming requests and traffic to a central file. For example, when someone visits your website, a log is created and stores the visitor’s information such as IP address, what pages they accessed, browser information, and what time they visited. This information is critical to administrators and developers at providing insight into their end-users behavior, what they are accessing, where they are accessing the site from, and with what software and operating systems.&lt;/p&gt;

&lt;p&gt;A normal  &lt;a href="https://www.sumologic.com/blog/apache-web-server-introduction/"&gt;log file for Apache&lt;/a&gt; could have hundreds of thousands of lines that an administrator would need to parse through using command-line tools and utilities. If you are new to an environment, it could be like finding a needle in a haystack. Even for seasoned administrators, it can often be cumbersome when you are in a time-sensitive situation and you need to find the root cause of your server being down. Your issues become compounded if you are managing more than one server, and they exponentially increase if you are in an enterprise environment managing multiple infrastructures.&lt;/p&gt;

&lt;p&gt;Why deal with a log file when you can deal with a clean dashboard graphical user interface? This is where Sumo Logic comes in.&lt;/p&gt;

&lt;p&gt;Where normal human eyes flounder, Sumo Logic comes in to save the day. On even a somewhat low-traffic server, the amount of data that is stored in the log files gets to be very large. Eventually, that file will get too large which in turn will require admins to rotate those log files by moving or deleting them. Configuring Sumo Logic to ingest these log files gives you a complete history or what your systems are doing and how they were performing months ago when you no longer have an archive of those log files.&lt;/p&gt;

&lt;p&gt;Log rotation alone is enough to cause information inconsistency issues when maintaining systems, so imagine trying to wrangle several dozen or even several hundred servers. Having logs rotated every day (and some may even require hourly rotations) from hundreds of servers would cause any IT admin to lose their mind by trying to find the needle in the haystack root issue. Even if you are a command-line wizard, log files become unruly very quickly. Having them all stored in one central dashboard in the cloud allows admins to oversee and maintain hundreds of servers all in one central location.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gain extra visibility into Apache
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iN4eRgsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ABug5oNV6RXKKaP5idSTw9Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iN4eRgsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ABug5oNV6RXKKaP5idSTw9Q.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parsing through Apache logs can be burdensome without tools like Sumo Logic&lt;/p&gt;

&lt;p&gt;Chances are, if you’re reading a tech blog about analytics software, you might be familiar with this scenario. Your team just finished building and deploying a brand new app. It’s been released out into the wild and everyone is excited and anxious for some public feedback. You noticed activity on the server but don’t know where it’s coming from, who these users are, or what they’re doing. You start to get bug reports from certain users yet you aren’t able to recreate those issues on your end. Other users are reporting the same bugs while some users say they can’t even log in. You start tailing the error logs and try grepping for users who are strictly accessing via Safari on iOS, but you can’t seem to find the root cause to the reported issues. How do you launch an app, fix bugs, and keep up with all the incoming data from end-users without getting overwhelmed? If only there were an analytics tool that could parse through the hundreds of thousands of lines of code from your log files to help identify where your users are coming from, what software they are running, and which pages they are visiting. This is where Sumo Logic comes in.&lt;/p&gt;

&lt;p&gt;Sumo Logic captures and transforms your data analytics, providing full visibility through a clear and easy to use dashboard useful for you and your team to search, monitor, and identify specific events or outliers that occur throughout your application infrastructure. With tools such as advanced logging, traffic analysis and the ability to isolate critical errors, Sumo Logic is great for performance management and also identifying potential security threats or vulnerabilities. Sumo Logic can also be leveraged to provide better insight into how your users are navigating your site and what their experience is from reaching your site to when they sign off. Having end-user analytics improves your business with invaluable information to build a better overall experience for anyone who navigates your website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use Sumo Logic with Apache?
&lt;/h3&gt;

&lt;p&gt;Sumo Logic uses analytics to optimize an administrators ability to monitor and troubleshoot activity, allowing them to be proactive and react to issue before they affect end users. Being able to identify root issues decreases downtime, increases availability, and improves overall system performance and user experience.&lt;/p&gt;

&lt;p&gt;Resolving issues and server downtime is certainly helpful, but combing Sumo Logic with Apache log data provides information to marketers and developers as well, not just infrastructure and systems teams. Sumo Logic provides developers with the tools to be able to highlight customer interaction with popular web pages, identify frequent referrers or sources, and determine what devices and operating systems most users are using while visiting a website or application.&lt;/p&gt;

&lt;p&gt;Sumo Logic is versatile in a way that allows you to install an agent into your infrastructure to allow constant loading of new log data, or you can also manually import your own log files for the data to be analyzed and displayed on custom dashboards that you choose to build. The choice is really yours on how you want Sumo Logic to parse through your data. There are so many different metrics, variables, and parameters that can be configured, the possibilities are pretty endless.&lt;/p&gt;

&lt;p&gt;Some key metrics you can search for in Sumo Logic include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pageviews&lt;/li&gt;
&lt;li&gt;  IP Addresses&lt;/li&gt;
&lt;li&gt;  Geolocation of Users&lt;/li&gt;
&lt;li&gt;  Status Errors (400 and 500)&lt;/li&gt;
&lt;li&gt;  Browser and Software Versions&lt;/li&gt;
&lt;li&gt;  and more…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Sumo Logic, teams are given a centralized location to store and view all critical Apache server logs. The business team can log in and view specific dashboards with custom metric filters that cater to their business needs, while developers and engineers can also log into the same account and view their own custom dashboards with analytics on their server performance, view errors, and find root causes all from a GUI web portal.&lt;/p&gt;

&lt;p&gt;Not only do teams and organizations gain a better insight into their systems infrastructure, but they also gain better insight into their clients and customers’ interaction with their website or applications. It’s a win-win for both system operations and business development.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.sumologic.com/blog/monitor-apache-web-server/"&gt;&lt;em&gt;Note: This post was originally featured on Sumo Logic’s Resource Center Blog&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>apache</category>
      <category>linux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Dangers of Shadow IT</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Thu, 14 Feb 2019 16:04:37 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/the-dangers-of-shadow-it-210k</link>
      <guid>https://forem.com/jovanhernandex/the-dangers-of-shadow-it-210k</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zvLXILo_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AV9w7S9UhdgmWbbC6XYGkmA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zvLXILo_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AV9w7S9UhdgmWbbC6XYGkmA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shadow IT is a term often used to describe information-technology systems and solutions built and used inside organizations without explicit organizational approval. It is also used, along with the terms “Stealth IT” and “Client IT”, to describe solutions specified and deployed by departments other than the IT department. At one point, Shadow IT was merely employees using special or unapproved macros in Excel to get their jobs done faster. Now, Shadow IT can involve a small group of employees installing their own file-sharing services without realizing they are opening their company up for major lawsuits and data breaches.&lt;/p&gt;

&lt;p&gt;How do companies develop their own Shadow IT habits? Sometimes an end-user will be stubborn and just not want to listen to IT rules and policies. While that may be the case sometimes, Shadow IT more often occurs due to the IT department not being able to, or in some cases, not be willing to help solve workflow and efficiency problems within their organization. If a department or team becomes frustrated enough with their current tools and workflow, they will often find a workaround to avoid putting in a ticket to IT because they feel it will go unanswered.&lt;/p&gt;

&lt;p&gt;A major area of concern today is the rapid adoption of cloud-based services. The growth of Shadow IT has accelerated with the consumerization of information technology. Users have become comfortable downloading and using apps and services from the cloud to assist them in their work. This is often common amongst Creative and Product departments where there are constant file shares going on and the app or service within their workflow isn’t sufficient enough. I can’t count how many times I’ve found out XYZ’s company assets were being uploaded and shared to a client through John Smith’s personal Dropbox account, which is a huge risk to both the company and the client.&lt;/p&gt;

&lt;p&gt;With the consumerization of IT, hundreds of these applications are in use in the typical enterprise. The lack of visibility into these applications also presents a major security gap. There are many file sharing apps and services that open ports to end-users workstations that make them vulnerable to outside threats, and if that workstation is on the company network, that puts the entire company at risk. While most applications are harmless, there have been many reports of applications adding backdoors or even crypto mining software without the end-users consent. IT and security departments need to know what applications are being used and what risks they pose&lt;/p&gt;

&lt;p&gt;To counter this, IT departments need to have strategic meetings with end-users to address pain points. End-users are circumventing IT administration because they want to get their job done in an efficient and streamlined workflow, yet are lacking the proper tools to be productive. Some steps to prevent Shadow IT include but are not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Identifying weaknesses within ITs policies and procedures that caused the need for users to go the Shadow IT route in the first place.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Reestablish relationships with department heads and end-users that like to circumvent IT and try to nail down pain points to be remedied.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Reinforce that IT is the single gatekeeper for technology within a business infrastructure and solutions and services need to be presented to them before implementation.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Taking a proactive measure will help reduce Shadow IT instances and also mitigate your company’s risk of vulnerabilities. Don’t wait until it is too late. If you don’t figure out a solution, someone else will, and it may not be a secure method of problem-solving.&lt;/p&gt;

</description>
      <category>infosec</category>
      <category>tech</category>
      <category>security</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Using Twilio to Send SMS Texts via Python, Flask, and Ngrok</title>
      <dc:creator>Jovan Hernandez</dc:creator>
      <pubDate>Mon, 06 Aug 2018 14:18:56 +0000</pubDate>
      <link>https://forem.com/jovanhernandex/using-twilio-to-send-sms-texts-via-python-flask-and-ngrok-4i39</link>
      <guid>https://forem.com/jovanhernandex/using-twilio-to-send-sms-texts-via-python-flask-and-ngrok-4i39</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvynvv0eni1qfo3tjxbkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvynvv0eni1qfo3tjxbkr.png" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python is great for many things. One thing, in particular, is hacking together code to develop and deploy simple web apps for particular functions or utilities you may need in your business. In this tutorial, I’ll be going over several how to integrate &lt;a href="https://www.twilio.com/docs/api?filter-product=sms" rel="noopener noreferrer"&gt;Twilio’s Programmable SMS systems using their Communications REST API&lt;/a&gt;, &lt;a href="http://flask.pocoo.org" rel="noopener noreferrer"&gt;Python’s Flask micro-framework&lt;/a&gt;, and &lt;a href="https://ngrok.com" rel="noopener noreferrer"&gt;ngrok&lt;/a&gt;, a cloud service that exposes local servers behind NATs and firewalls to the public internet over secure tunnels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Outbound SMS — How Does It Work?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mf6pjfu9flqc04alf2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mf6pjfu9flqc04alf2w.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Twilio’s REST API, you can send outgoing SMS messages from your Twilio phone number to mobile phones around the globe.&lt;/p&gt;

&lt;p&gt;Your application makes a post request to Twilio. Once received, Twilio sends a text message to a number declared in the Python script, or whatever variable is declared. It’s that simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Twilio Account &amp;amp; Purchasing a Number
&lt;/h3&gt;

&lt;p&gt;Before you begin, you’ll need to open an account with Twilio and also purchase a number that your messages will be sent from. It’s a fairly simple process and you won’t need to spend anything for this tutorial as they give you free credits to purchase and test out their services. If you plan on integrating Twilio into your business, you will incur some costs in the future so it’d be a good idea to skim over their pricing model.&lt;/p&gt;

&lt;p&gt;Head over to &lt;a href="https://www.twilio.com" rel="noopener noreferrer"&gt;Twilio.com&lt;/a&gt;and sign up for a free account. Once registered, you can purchase a number using the credits they give new members. For the sake of brevity, &lt;a href="https://support.twilio.com/hc/en-us/articles/223135247-How-to-Search-for-and-Buy-a-Twilio-Phone-Number-from-Console" rel="noopener noreferrer"&gt;I’ll link you to their support page on How to Purchase a Number.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4n1zajrd4b9xy55skkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4n1zajrd4b9xy55skkr.png" width="800" height="347"&gt;&lt;/a&gt;Make sure you purchase a number that is SMS capable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Your Environment and Installing Packages
&lt;/h3&gt;

&lt;p&gt;In my last post, I went over how to &lt;a href="https://dev.to/jovansn0w/configuring-ubuntu-18-04-for-a-python-dev-environment-with-flask-gunicron-and-virtualenv-phc-temp-slug-3414608"&gt;configure Ubuntu for Python development, Flask apps, and VirtualEnv&lt;/a&gt;. You might want to check that out first but if you already have, let’s begin by installing twiliopackage. &lt;em&gt;(NOTE: You should be on Python3 for this tutorial.)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install twilio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Twilio installed, we can now send outbound messages from the number we purchased to target numbers with a simple Python script. Create and open a new file called send_sms.pyand type or paste in this code sample. Make sure to replace the placeholder values with your own information &lt;em&gt;(those being your&lt;/em&gt; &lt;em&gt;account_sid,&lt;/em&gt; &lt;em&gt;auth_token,&lt;/em&gt; &lt;em&gt;body,&lt;/em&gt; &lt;em&gt;from, and&lt;/em&gt; &lt;em&gt;tofields. You can find your Account SID and Auth Token in your&lt;/em&gt; &lt;a href="https://www.twilio.com/console" rel="noopener noreferrer"&gt;&lt;em&gt;Twilio Console.&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Download the helper library from [https://www.twilio.com/docs/python/install](https://www.twilio.com/docs/python/install)

from twilio.rest import Client

# Your Account Sid and Auth Token from twilio.com/console
account\_sid = ‘AC00000000000000000000000000000’
auth\_token = ‘your\_auth\_token’
client = Client(account\_sid, auth\_token)

message = client.messages.create(
 body=’This is a test message!’,
 from\_=’[+][1][5555555555]',
 to=’[+][1][6666666666]'
 )
print(message.sid)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ght7tgbrwvk9r8wo2ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ght7tgbrwvk9r8wo2ao.png" width="800" height="500"&gt;&lt;/a&gt;Replace the placeholder values with your own information.&lt;/p&gt;

&lt;p&gt;Once done, save and run the script with the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python send\_sms.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it! You should have a message from your Twilio phone number hit your cell phone shortly. You’ll see a prefix to your message if you are on a Trial account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcczs7l7wh1ufsa2te43a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcczs7l7wh1ufsa2te43a.png" width="800" height="721"&gt;&lt;/a&gt;Ignore my goofy test messages :P&lt;/p&gt;

&lt;h3&gt;
  
  
  Receiving and Replying to Incoming SMS Messages
&lt;/h3&gt;

&lt;p&gt;In order to receive and reply to incoming SMS messages, we will need to install Flask, setup a virtualenv sandbox, and also configure ngork so Twilio can talk to our app. Let’s begin.&lt;/p&gt;

&lt;h4&gt;
  
  
  Installing Pip and Virtualenv
&lt;/h4&gt;

&lt;p&gt;If you are familiar at all with Python development or have seen my last post on setting up a development environment, this should seem familiar. Lucky for us, if you are on Python 3.4+, pip should automatically be installed. If not, Google is your friend.&lt;/p&gt;

&lt;p&gt;Not to install virtualenv, just run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install virtualenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, navigate to your directory where you are keeping this project and create a virtual environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/path\_to\_your\_project
virtualenv — no-site-packages .

###ACTIVATE THE VIRTUALENV SANDBOX
source bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once activated, you should see the name of your project sandbox prefixed in your terminal. &lt;a href="https://dev.to/jovansn0w/configuring-ubuntu-18-04-for-a-python-dev-environment-with-flask-gunicron-and-virtualenv-phc-temp-slug-3414608"&gt;If you are confused or ran into an issue, see one of my previous posts here.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Installing dependencies in your Virtualenv
&lt;/h4&gt;

&lt;p&gt;Virtualenv is great for testing apps and installing packages and dependencies unique to each project. For this Twilio app, we are going to need two packages. Start by creating a new file called requirements.txtand adding the following lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###YOUR VERSIONS MAY VARY WHEN DEPENDING WHEN YOU GO THROUGH THIS TUTORIAL

Flask\&amp;gt;=0.12
twilio~=6.16.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install these packages by running the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bin/pip install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If all is well, we can test everything by creating a test file and running it locally. Make sure your virtualenv is activated, navigate to your project folder and create a new file called run.py. Paste or write the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask
app = Flask(\_\_name\_\_)

[@app](http://twitter.com/app).route(“/sms”)
def hello():
 return “This is your Twilio App Working!”

if \_\_name\_\_ == “\_\_main\_\_”:
 app.run(debug=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7x7mskqbxno36glmzev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7x7mskqbxno36glmzev.png" width="800" height="500"&gt;&lt;/a&gt;Test code for the Twilio app in Flask.&lt;/p&gt;

&lt;p&gt;Now let’s run the script by running python run.py.&lt;br&gt;&lt;br&gt;
You should see: * Running on &lt;a href="http://127.0.0.1:5000/" rel="noopener noreferrer"&gt;http://127.0.0.1:5000/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Naviage to localhost:5000/sms. You should see the following text in your browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz9mrr9uu3t5fpsjwkif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz9mrr9uu3t5fpsjwkif.png" width="800" height="500"&gt;&lt;/a&gt;What you should see if you did it correctly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Allow Twilio to talk to your Flask App Using ngrok
&lt;/h3&gt;

&lt;p&gt;When you’re working on your Flask application in your development environment, your app is only reachable by other programs on your computer. This is why your app is only available on localhostor 127.0.0.1. In order to resolve this, we can deploy our app on something like Heroku, AWS, or other cloud services, but for this specific tutorial, we are going to use ngrok.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ngrok.com/docs" rel="noopener noreferrer"&gt;Per their own website&lt;/a&gt;, ngrok &lt;em&gt;“allows you to expose a web server running on your local machine to the internet. Just tell ngrok what port your web server is listening on.”&lt;/em&gt; Once started, Ngrok provides a unique URL on the ngrok.io domain which forwards incoming requests to your local development environment. If you’ve never used ngrok, head over to their &lt;a href="https://ngrok.com/download" rel="noopener noreferrer"&gt;download page&lt;/a&gt;and grab the binary for your OS.&lt;/p&gt;

&lt;p&gt;Once the package has been downloaded and unzipped, we can run our test app we made previously: python run.py. Then in a new terminal app, we’ll initialize a session with ngrok with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./ngrok http 5000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output similar to the terminal in the top left of the screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7wbbytd684qs9qmnitz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7wbbytd684qs9qmnitz.png" width="800" height="500"&gt;&lt;/a&gt;Ngrok gives you public access to locally hosted applications.&lt;/p&gt;

&lt;p&gt;Copy your unique public address, put it in a browser, and trail it with a &lt;em&gt;“/sms/”&lt;/em&gt;. For instance, the address above should be “&lt;em&gt;&lt;a href="http://a0f8f155.ngrok.io/sms" rel="noopener noreferrer"&gt;http://a0f8f155.ngrok.io/sms&lt;/a&gt;&lt;/em&gt;”.&lt;/p&gt;

&lt;h3&gt;
  
  
  Replying to Incoming SMS Messages Sent from Twilio
&lt;/h3&gt;

&lt;p&gt;When someone sends an SMS to your Twilio phone number, Twilio makes an HTTP request to your server asking for instructions on what to do next. Once you receive the request, you can tell Twilio to reply with an SMS, kick off a phone call, store details about the message in your database, or trigger an entirely different action.&lt;/p&gt;

&lt;p&gt;For this specific tutorial, we’ll have Twilio reply to the user’s response with an acknowledgment receipt. Use a text editor to open run.pyagain and edit the code to reflect the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# /usr/bin/env python
# Download the twilio-python library from twilio.com/docs/libraries/python
from flask import Flask, request
from twilio.twiml.messaging\_response import MessagingResponse

app = Flask(\_\_name\_\_)

[@app](http://twitter.com/app).route("/sms", methods=['GET', 'POST'])
def sms\_ahoy\_reply():
 """Respond to incoming messages with a receipt SMS."""
 # Start our response
 resp = MessagingResponse()

# Add a message
 resp.message("Thank you for your response! We are confirming your message.")

return str(resp)

if \_\_name\_\_ == "\_\_main\_\_":
 app.run(debug=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to edit the code above, especially the line under # Add a message.I was playing around with my code while watching the Matrix so my messages will seem goofy in the following examples.&lt;/p&gt;

&lt;p&gt;Save the file and run the python run.pycommand again. Make sure ngrok is still running and copy the custom public URL they give you. For Twilio to know what URL to grab, we need to configure our Twilio phone number to call your webhook URL whenever a new message comes in, which is what ngrok does for us.&lt;/p&gt;

&lt;p&gt;Log into Twilio.com and go to the &lt;a href="https://www.twilio.com/console/phone-numbers/incoming" rel="noopener noreferrer"&gt;Console’s Numbers page&lt;/a&gt;, click on your SMS-enabled phone number and find the Messaging section. The default “CONFIGURE WITH” is what you’ll need: “&lt;a href="https://www.twilio.com/docs/glossary/what-is-a-webhook" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt;/&lt;a href="https://www.twilio.com/docs/glossary/what-is-twilio-markup-language-twiml" rel="noopener noreferrer"&gt;TwiML&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;In the “A MESSAGE COMES IN” section, select “Webhook” and paste in the URL you want to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup96tl7r2l65hlasf2pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup96tl7r2l65hlasf2pa.png" width="800" height="196"&gt;&lt;/a&gt;Paste your custom ngrok URL in the Twilio Console Number’s page.&lt;/p&gt;

&lt;p&gt;Now let’s test your entire SMS messaging app by executing your two python scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###RUN THIS TO SEND THE INITIAL TEXT
python send\_sms.py

###RUN THIS TO MAKE SURE TWILIO IS LISTENING FOR THE RESPONSE
python run.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedu9qatrj7bepinuwvk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedu9qatrj7bepinuwvk3.png" width="800" height="500"&gt;&lt;/a&gt;Everything running together. You can confirm your response script is publicly available by going to the URL.&lt;/p&gt;

&lt;p&gt;You should receive your initial text, and if you reply to it, you should get the response text that you coded in your second python script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscux1mf9mvjqrgk0vgxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscux1mf9mvjqrgk0vgxy.png" width="800" height="721"&gt;&lt;/a&gt;Again, ignore my goofy Matrix references :P&lt;/p&gt;

&lt;p&gt;That’s pretty much it! With the knowledge from this tutorial, you can build out a fully-fledged web app that you have more than likely interacted with already. Many professions from doctors and dentists use services like this to confirm appointments, or even ride-sharing apps like Uber to confirm a user is ready to be picked up.&lt;/p&gt;

&lt;p&gt;There are many other Twilio tutorials out there that guide you through similar processes. Piece some of them together to build your own custom app!&lt;/p&gt;




</description>
      <category>linux</category>
      <category>python</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
