<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emma Odia</title>
    <description>The latest articles on DEV Community by Emma Odia (@emma_odia).</description>
    <link>https://dev.to/emma_odia</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%2F16341%2Fb2dfe1bf-78e4-447b-a768-da7b155b65cd.jpg</url>
      <title>DEV Community: Emma Odia</title>
      <link>https://dev.to/emma_odia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/emma_odia"/>
    <language>en</language>
    <item>
      <title>API for Newbies </title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Wed, 05 Sep 2018 14:03:27 +0000</pubDate>
      <link>https://dev.to/emma_odia/api-for-newbies--5e94</link>
      <guid>https://dev.to/emma_odia/api-for-newbies--5e94</guid>
      <description>&lt;p&gt;Spare me the technical jargons please!&lt;/p&gt;

&lt;p&gt;So in this article I'm going to answer questions that as at when I was a Junior Dev I did not have any answers to. I wish someone had made a post about it when I started out. So here I am and the goal is simple: Explain what an API is in non Dev Talk, so help me God!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Everything Should Be Made as Simple as Possible, But Not Simpler"&lt;/em&gt; &lt;br&gt;
Albert Einstein&lt;/p&gt;

&lt;p&gt;In this article we will take an approach of asking questions and then providing answers which should be sufficient enough to answer the question without any loss in explanations or meaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Is an API a piece of Software?
&lt;/h3&gt;

&lt;p&gt;Answer: There is this common misconception about what an API really is even after you have read the definitions on Wikipedia and all other sources that first begin with the Keyword definition: Application Programming Interface. Emphasis on Interface here that often causes a confusion not to mention the use of examples like Twitter API, YouTube API, Facebook API and APIs made by tech giants and then as a noob there’s this misconception associated with such thinking that APIs are made by the Tech Giants ONLY! &lt;/p&gt;

&lt;p&gt;Well with this one question, I will provide three answers. As there exist two unasked questions given this one. The other two being:&lt;/p&gt;

&lt;h3&gt;
  
  
  1a. Can I build my own API?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  1b. Can other people use my API as well?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;An API is basically a piece of Software like an APP running on your Phone or a Website.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Before the “Senior Engineers” call this misleading, please remember that I said at the beginnig that this will be a non technical explanation! &lt;/p&gt;

&lt;p&gt;Here’s a visual representation that explicitly explains in steps:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F810ntmwroay4d5wfxl2h.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F810ntmwroay4d5wfxl2h.png" alt="App Hosting Servers"&gt;&lt;/a&gt;&lt;br&gt;Use the image as a Visual guide
&lt;/p&gt;

&lt;p&gt;At this point it is safe to resort to using an Analogy to explain the answer and thereby give it some depth.&lt;/p&gt;

&lt;p&gt;Yes, I compared an API to an APP on Mobile or a Website. Now to be explicit:&lt;/p&gt;

&lt;p&gt;Both Apps run (are hosted) on a server before you can have access to use. The App has a code base which may be (or not) split into the front-end and the back-end. You do not see and maybe are not interested in the logic (code) that causes this app to run. You have it as a complete Software that you can access! An API is basically the same, it is a piece of Software hosted on a server that you can access for a myriad of reasons and usage. &lt;/p&gt;

&lt;p&gt;Yes, you can build one! Simple enough answer! In a follow up article to this one I will teach you how to build an API using ExpressJS on Node with either MongoDB or PostgreSQL and you will push out to a server and have others use it. Watch out for this article. Like the Big Tech Giants, other people can use your API as well. The beauty here being that, they can use (consume) it on either Desktop or Mobile. &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%2Fimages.unsplash.com%2Fphoto-1506399558188-acca6f8cbf41%3Fixlib%3Drb-0.3.5%26ixid%3DeyJhcHBfaWQiOjEyMDd9%26s%3D44506d02c01a236c6ac088d527a56568%26auto%3Dformat%26fit%3Dcrop%26w%3D1439%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1506399558188-acca6f8cbf41%3Fixlib%3Drb-0.3.5%26ixid%3DeyJhcHBfaWQiOjEyMDd9%26s%3D44506d02c01a236c6ac088d527a56568%26auto%3Dformat%26fit%3Dcrop%26w%3D1439%26q%3D80" alt="App Hosting Servers"&gt;&lt;/a&gt;&lt;br&gt;You can host your app on a server and make it live!
&lt;/p&gt;

&lt;p&gt;In closing this is what I wish I’d known when I started as a Junior Engineer and the buzz word was often thrown around and I felt dizzy when I discovered big tech companies where the ones who had APIs publicly available. Well, there, this is one of the many ways that it be made into simple language for non techie. If you have more questions, concerns or simply want to add your thoughts to this conversation, please you are kindly welcome to that in the comments section. Also be on the look out for the follow up articles where I build an API and walk you through the entire process so that you can begin building some yourself.&lt;/p&gt;

</description>
      <category>api</category>
      <category>software</category>
      <category>begineer</category>
    </item>
    <item>
      <title>How to Fix that Heroku Push Error!</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Thu, 23 Aug 2018 12:54:54 +0000</pubDate>
      <link>https://dev.to/emma_odia/how-to-fix-that-heroku-push-error-17o</link>
      <guid>https://dev.to/emma_odia/how-to-fix-that-heroku-push-error-17o</guid>
      <description>&lt;p&gt;You made a mistake pushing your code to the work account instead of your personal account!?!! The Horror! The Pain!! OMG... The PAIN!!!&lt;/p&gt;

&lt;p&gt;Apparently you were on your PC and had logged into the work account the last time you made a push and now you have created a personal heroku app, most likely a weekend hobby project and yes, you pushed to the office dashboard... Hmmm. Well let's fix that shall we?&lt;/p&gt;

&lt;p&gt;Here's how to fix that.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to your account on Heroku via the CLI
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter your credentials. Apparently this is why you pushed to the wrong account in the first place! Duh!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the remote urls that your app is hosted on
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Check for the current url 
git remote -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Well seeing as your current user account cannot push to the remote heroku url, we then have to delete it!
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// remove remote url
git remote rm heroku
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Now we have to create  a new Heroku app via the CLI since we are now logged into your user account
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;You get a url at this point, which is also created on your heroku dashboard. Now set this url as the remote url for your app
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add https://git.heroku.com/&amp;lt;unique-heroku-app-name&amp;gt;.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;We can never be too careful! Just to be sure run
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Now we are confident to push our app to heroku
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push heroku master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Phew! That was a close call mate!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>heroku</category>
      <category>git</category>
    </item>
    <item>
      <title>A Weekend Hackathon: ReCode Nigeria.</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Mon, 30 Jul 2018 09:15:52 +0000</pubDate>
      <link>https://dev.to/emma_odia/a-weekend-hackathon-recode-nigeria-42mf</link>
      <guid>https://dev.to/emma_odia/a-weekend-hackathon-recode-nigeria-42mf</guid>
      <description>&lt;p&gt;July 17th 2018 was when my friend told me about the Recode Nigeria Hackathon. I immediately registered as it held the promise of being a fun weekend. I mean, 3 days of coding! What else can a man ask for!?! This friend of mine, Habeeb, I had met not quite long, July 8th actually at… you guessed right a Hackathon! Here’s a fun fact, Habeeb isn’t a coder, yet. He is a digital marketer who has a knack for product design, management and leading teams. All in, dude’s an exceptional fella to work with. We came 3rd in the July 8 Hackathon where we first met and were grouped in the same teams. We became quite acquainted immediately a lot more because of his endearing nature and patience. Something that I don’t have so much of a reserve for, especially when I my code gets bugs… aarrrghhh. Yes back to the conversation. &lt;a href="http://affrecodenigeria.com/"&gt;The Recode Nigeria Hackathon&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Funny enough, that weekend had another hackathon that was being organized by Figma and which was geared towards designers. I had registered for that when Recode was announced; I immediately shifted my gaze as Recode appealed more to my interests as a developer. Well, Friday came by very quickly and I left work early so as to make it to the venue early. Yeah, my team in the company knew about it. This not being my first code slumber party, I had packed the necessary requirements in my backpack: Hoodie, Water Bootle for the energy drinks, Toothbrush, soap, deodorant and an extra Tshirt. One extra Tshirt because I knew that the organizers will make Tshirts available to the participants and I planned on wearing that for the last day.&lt;/p&gt;

&lt;p&gt;Habeeb and I had planned to leave for the venue together, somehow our timelines did not sync and he left for the venue before I did and I had to catch up with him there. I got to the venue and I was wowed by the arrangement put in place. The venue African Fintech Foundry did wow me too, buh ama be chill about that and not flip… Lol &lt;/p&gt;

&lt;p&gt;The venue used for the event is called &lt;a href="https://goo.gl/r4moxz"&gt;the Hive&lt;/a&gt; and… you will not believe this… it is built entirely out of containers! All floors! Man… Like I said I ain’t going to flip. I’m not tripping though when I tell you that it is an architectural masterpiece. A thing of beauty and delight.&lt;/p&gt;

&lt;p&gt;Day 1 had us arrive and the opening sessions delivered by the various companies who had brought problem statements for the participants to build solutions for over the course of the weekend. Participants who did not have team mates and those who wanted more people on their teams were paired together. All of this happened intermitently and well into late evening. Habeeb and I were joined by two other folks: Emmanuel (my namesakes) and a dude who called himself Tj. Emmanuel is a product person like Habeeb and Tj claimed to be a Software Engineer. My team chose to work on the FMCG problem statement as Habeeb had gained experience working in that sector. Night came and I never realized that Tj had left! He simply upped and left! I was left alone as the coder on the team.&lt;/p&gt;

&lt;p&gt;Day 2 started 12:00am! Yes because the moment the moment the clock moved a second forward from 11:59pm we were in Day 2. No one slept that night. With Tj gone, the team progressed with prototyping the product flow and we sufficiently completed this before 4:00am and I started to build. In hindsight now I would have gone with Ruby On Rails over the MERN stack. I will tell you why when I close the article. Day 2 went by very fast as I had to attend another event I was organizing that day. The plan was to go there early, set up and go find "one corner" to continue hacking. At the time I had no inkling that Tj was not coming back. Well, what was I thinking, I mean, how on Earth will an event organizer be at an event and be able to attend to other things until his event is donw!!? Silly me! The afternoon went into evening and the event was thankfully a success and I had to go back to the Hackathon. That was almost 10 hours of work time lost! Evening progressed into night and morning came.&lt;/p&gt;

&lt;p&gt;Day 3: Working alone on the products. Sleep deprived and powered by energy drinks, I did not (could not) complete building out the entire product that we had prototyped. Long story short, presentations took place and we did not come top 3. That broke me... apart. I blamed myself for everything. From not inviting my friends who are developers (they couldn't have been able to make it down), not asking about Tj's skills set (might have served as an early warning system), discussing with the other members of the team who were non technical and giving them a wide enough berth to interrupt my coding flow (getting in and out of the zone is frigging stress... arrrgghhh). Hackathon ended and it was good byes and back pats.&lt;/p&gt;

&lt;p&gt;Lessons learned: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Form a team prior to entering into a hackathon and each team member should be clear on what is expected of them and internal team interactions should be clearly understood!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you are going at it solo, decide on a programming language that you can use to quickly get an MVP up and running on a live server! I could have done this with Ruby on Rails even whilst sleeping! I wouldn't worry about code best practices given the short time and that I would be coding alone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is okay to let everyone know not to disturb you while you are writing code. Especially the non technical members of the team. Very important to verbally communicate this and not just assume that they ought to understand!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Well there you have it. I hope you enjoyed reading this and learnt a couple of lessons that you can apply in it. Do kindly let me know your thoughts in the comments. Thank you!&lt;/p&gt;

</description>
      <category>hackathon</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Customize your Bootstrap Navbar</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Fri, 20 Jul 2018 11:14:58 +0000</pubDate>
      <link>https://dev.to/emma_odia/customize-your-bootstrap-navbar-4kfe</link>
      <guid>https://dev.to/emma_odia/customize-your-bootstrap-navbar-4kfe</guid>
      <description>

&lt;p&gt;I want to sincerely appreciate everyone that takes the time to read my articles. I will keep sharing lessons that I know present a steep learning curve when you go at them by presenting them in a most comprehensible format.&lt;/p&gt;

&lt;p&gt;The Navbar is important to every web app because it serves as the navigational compass that users of your app will your to find their way around your application.&lt;/p&gt;

&lt;p&gt;Read my introductory article on setting up the Bootstrap Navbar here: &lt;/p&gt;


&lt;div class="ltag__link"&gt;
        &lt;a href="/emma_odia" class="ltag__link__link"&gt;
          &lt;div class="ltag__link__pic"&gt;
            &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ikLHwpV6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--miFTjjMH--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://thepracticaldev.s3.amazonaws.com/uploads/user/profile_image/16341/b2dfe1bf-78e4-447b-a768-da7b155b65cd.jpg" alt="emma_odia image"&gt;
          &lt;/div&gt;&lt;/a&gt;
          &lt;a href="/emma_odia/fine-course-charting-through-the-bootstrap-nav-menu-4l45" class="ltag__link__link"&gt;
            &lt;div class="ltag__link__content"&gt;
              &lt;h2&gt;Fine course charting through the BootStrap Navbar&lt;/h2&gt;
              &lt;h3&gt;Emma Odia&lt;/h3&gt;
              &lt;div class="ltag__link__taglist"&gt;
&lt;span class="ltag__link__tag"&gt;#bootstrap&lt;/span&gt;&lt;span class="ltag__link__tag"&gt;#development&lt;/span&gt;&lt;span class="ltag__link__tag"&gt;#web&lt;/span&gt;&lt;span class="ltag__link__tag"&gt;#frameworks&lt;/span&gt;
&lt;/div&gt;
            &lt;/div&gt;
        &lt;/a&gt;
      &lt;/div&gt;


&lt;p&gt;I will share important factors you should take into consideration when building your Navbar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It must be immediately visible: I recommend setting it at the top of the page and fixed there too, thus whenever a user scrolls they can easily navigate to any other section of the web app which they want to to access with out scrolling all the way back to the top of your website. Sufficient A/B testing can also make your decide on what works for your web app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It must be easily understood and reflect drop-down icons if any: I suggested the URLs to add to your Navbar in the article I mentioned above and listed &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Home | About | Contact | FAQs | Blog  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Home&lt;/strong&gt; is the landing page of your website. It can be described as the inscription on the door which determines if people reading it will want to pull the door knob which is the big call to action button that tell people to either sign up to use your service (product) or read more about you (portfolio).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;It must be responsive across devices: Whether a user visits your web app on Desktop, Tablets and small mobile screens they should be able to easily navigate around your web app and get the same user experience (UX) across devices. This is where using Bootstrap makes it all easier!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It must convey meaning in ONE word: Once a user sees your Navbar they should immediately understand what each url represents. Thus I recommend using single words which convey meaning immediately. Like our example URLs thus: &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Home | About | Contact | FAQs | Blog  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;&lt;em&gt;HOW TO BUILD A FIXED TO TOP NAVBAR USING BOOTSTRAP&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;I created a gist with the code and I left comments in it which explains a sequential step by step process to build it.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;  &lt;/div&gt;

&lt;h3&gt;Here's a codepen example which shows how it works. &lt;em&gt;Scroll up and down the page to see the fixed Navbar in action.&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/emmaodia/full/JBbVrY/%20?height=500&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt; &lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Well if you have read this far and been able to implement it, CONGRATULATIONS!&lt;/p&gt;

&lt;p&gt;I simply love using bootstrap because of the ease with which you can achieve accomplishing styling tasks that might take hours if not days to hand code especially taking into consideration different device sizes.&lt;/p&gt;


</description>
      <category>bootstrap</category>
      <category>webdev</category>
      <category>programming</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Fine course charting through the BootStrap Navbar</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Sat, 14 Jul 2018 14:15:33 +0000</pubDate>
      <link>https://dev.to/emma_odia/fine-course-charting-through-the-bootstrap-nav-menu-4l45</link>
      <guid>https://dev.to/emma_odia/fine-course-charting-through-the-bootstrap-nav-menu-4l45</guid>
      <description>

&lt;p&gt;Okay! I'm not even going to front: I LOVE USING BOOTSTRAP!&lt;/p&gt;

&lt;p&gt;I think this has a lot to do with the fact that when I picked up using Ruby on Rails all that 4+ years ago, Bootstrap was the recommended go to resource to design front end. Boy, did it integrate into Rails nicely!!?!! You bet!&lt;/p&gt;

&lt;p&gt;I will share the little bits of small gotchas that can easily get you peeved over using Bootstrap as often as I can here on dev.to with corresponding code snippets. If this is something that you are interested in, I recommend that you tag along for the ride. Quickly a brief intro. What is Bootstrap?&lt;/p&gt;

&lt;p&gt;"Build responsive, mobile-first projects on the web with the world's most popular front-end component library.&lt;/p&gt;

&lt;p&gt;Bootstrap is an open source toolkit for developing with HTML, CSS, and JS. Quickly prototype your ideas or build your entire app with our Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful plugins built on jQuery."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="https://getbootstrap.com/"&gt;The official Bootstrap website.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well I don't know about the claim being the world's most popular front end component library. Nonetheless is it used a lot? Well it is. Make that definitely so. I assume two kinds of readers, one who requires a simplified breakdown and another who just wants to see the Github gist. If you are the latter, kindly skip the next paragraph.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Keep it as simple as possible, but not any simpler"&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Albert Einstein&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically I define Bootstrap as the go to resource when you don't want/like/desire to write CSS styles for your web app. You just make use of the default already created Bootstrap options available. Many a time all you will have to do is just change the front appearing text as I will show you with creating a simple Navigation Bar for your web app.&lt;/p&gt;

&lt;p&gt;First we head over to the Bootstrap documentation where we are given 3 options out of which we have to choose one to get Bootstrap working in our app. I have preference for the CDN and that is what we will rely on in this article and all future articles I will write on Bootstrap. Using the CDN has the following &lt;a href="https://www.globaldots.com/9-benefits-using-cdn/"&gt;advantages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's get building that Navbar. So let's begin with the default Bootstrap Starter Template Code:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Required meta tags --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1, shrink-to-fit=no"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Bootstrap CSS --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;BootStrap Nav!&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Plug Bootstrap Nav Bar code here --&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello, world!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Optional JavaScript --&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- jQuery first, then Popper.js, then Bootstrap JS --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://code.jquery.com/jquery-3.3.1.slim.min.js"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Well, as often is the case a web app has a part of it's navigation:&lt;/p&gt;

&lt;p&gt;Home | About | Contact | FAQs | Blog&lt;/p&gt;

&lt;p&gt;We will just stick with those 5 items when we go to the next articles in this series. Let's head over to Bootstrap documentation to copy the code for creating a Nav bar.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;nav class="navbar navbar-expand-lg navbar-light bg-light"&amp;gt;
  &amp;lt;a class="navbar-brand" href="#"&amp;gt;Navbar&amp;lt;/a&amp;gt;
  &amp;lt;button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"&amp;gt;
    &amp;lt;span class="navbar-toggler-icon"&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;/button&amp;gt;

  &amp;lt;div class="collapse navbar-collapse" id="navbarSupportedContent"&amp;gt;
    &amp;lt;ul class="navbar-nav mr-auto"&amp;gt;
      &amp;lt;li class="nav-item active"&amp;gt;
        &amp;lt;a class="nav-link" href="#"&amp;gt;Home &amp;lt;span class="sr-only"&amp;gt;(current)&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item"&amp;gt;
        &amp;lt;a class="nav-link" href="#"&amp;gt;Link&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item dropdown"&amp;gt;
        &amp;lt;a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"&amp;gt;
          Dropdown
        &amp;lt;/a&amp;gt;
        &amp;lt;div class="dropdown-menu" aria-labelledby="navbarDropdown"&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Action&amp;lt;/a&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Another action&amp;lt;/a&amp;gt;
          &amp;lt;div class="dropdown-divider"&amp;gt;&amp;lt;/div&amp;gt;
          &amp;lt;a class="dropdown-item" href="#"&amp;gt;Something else here&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li class="nav-item"&amp;gt;
        &amp;lt;a class="nav-link disabled" href="#"&amp;gt;Disabled&amp;lt;/a&amp;gt;
      &amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
    &amp;lt;form class="form-inline my-2 my-lg-0"&amp;gt;
      &amp;lt;input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search"&amp;gt;
      &amp;lt;button class="btn btn-outline-success my-2 my-sm-0" type="submit"&amp;gt;Search&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This is the default navigation view of the Navbar in Bootstrap and all we have to do is plug it into the html starter template where I left the comments.&lt;/p&gt;

&lt;p&gt;Then we have:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;  &lt;/div&gt;

&lt;p&gt;You should have something which looks like this:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/emmaodia/full/bjVXpN/%20?height=500&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt; &lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;If you can see that view on your end, congratulations. I will end here in other not to make this lesson any longer that it should be.&lt;/p&gt;

&lt;p&gt;The goal here was just to show you how easy it is to build a web app Navbar using Bootstrap. In follow up articles I will share how you can customize the Navbar to suite your needs, look, feel and what other considerations you may have.&lt;/p&gt;

&lt;p&gt;Many thanks for reading! Please drop whatever comments you may have, I'm most glad to hear from you. Also if you are open to conversations about Bootstrap. Kindly say "Hi"!&lt;/p&gt;

&lt;p&gt;Cover image credit: Photo by Artem Sapegin via &lt;a href="https://unsplash.com"&gt;unsplash&lt;/a&gt;&lt;br&gt;
Further Reading: &lt;a href="https://getbootstrap.com"&gt;The Official Bootstrap Documentation&lt;/a&gt;&lt;br&gt;
CDNs: &lt;a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/"&gt;What is a CDN?&lt;/a&gt;&lt;/p&gt;


</description>
      <category>bootstrap</category>
      <category>development</category>
      <category>web</category>
      <category>frameworks</category>
    </item>
    <item>
      <title>What do you tell the PM when the deadline is against you?</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Mon, 09 Jul 2018 21:08:34 +0000</pubDate>
      <link>https://dev.to/emma_odia/what-do-you-tell-the-pm-when-the-deadline-is-against-you-2pie</link>
      <guid>https://dev.to/emma_odia/what-do-you-tell-the-pm-when-the-deadline-is-against-you-2pie</guid>
      <description>&lt;p&gt;The truth! The truth, the whole of it!&lt;/p&gt;

&lt;p&gt;We have all had that time where the Project Manager has come at us in ways that we felt like one of the following:Throw the mug you are drinking coffee out of at his head OR Raise the mug and smash it against your own head!&lt;/p&gt;

&lt;p&gt;Here’s the thing, as with every story, perspective is very important. Only when we sufficiently see a story from all sides can we make certain affirmations. There’s you, the PM and then those bugs that you told the PM you were going to squash a few days ago. What then do you do when the PM comes at you days after and asks:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“About that feature that you said we could implement on Tuesday, errr... today is Friday… You know.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, he is not asking about how much you know the days of the week or if you have lost the ability to number the days. Don’t throw the coffee mug at him!&lt;/p&gt;

&lt;p&gt;You think to yourself:&lt;br&gt;
&lt;em&gt;“How can I make this dude understand that coding isn’t woodwork? You do NOT simply bring out a measuring tape, take measures and the cut!”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Just pause, before you question his powers of observation, take a sip of that coffee, if for no other reason, this ought to calm your nerves down. Try, try as much as you can to see things from the point of view of the PM. Let’s begin with some questions. For a minute, see this as an arbitrary session. There’s the PM, you the developer and myself. My purpose is to ask the questions.&lt;/p&gt;

&lt;p&gt;Me: Did you and the PM open up a document before you started on this project.&lt;/p&gt;

&lt;p&gt;You: Yes.&lt;/p&gt;

&lt;p&gt;PM: Of course, there was no other that we could communicate what we both thought we should build without first outlining it on paper.&lt;/p&gt;

&lt;p&gt;(You suck in a deep breathe as you think to yourself that a “yes” answer would have been just fine. But, no, the PM has to “talk”.)&lt;/p&gt;

&lt;p&gt;Me: Okay. That’s fine. Did you both agree on the timeless that you set and did you as Engineer particularly expand the timeline with the view to make up for possible delays.&lt;/p&gt;

&lt;p&gt;PM: We were on a deadline and didn’t have time for that. Besides he &lt;em&gt;(points at you)&lt;/em&gt; reassured me of his competence and his ability to complete this project within a period lesser than the original estimate. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(I take a glance at you and you run your left hand across your face whilst making a fist with your right.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let break out from this scence and come back to the present reality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dude, there were obvious mistakes on both your parts.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Common knowledge: &lt;strong&gt;A structure built on faulty foundations will not stand!&lt;/strong&gt; Well, is the inference from this to break down the entire structure simply because? The answer is no. Thank goodness that you guys are not building an actual physical building but a software product. Well, it is time to revisit that features doc and the timelines. Yes, you need to sit the PM down and not reassure that you are Ninja dev but that you are an engineer that does need “f*vk room” as part of the timeline. Point of note that you will not necessarily need this extra time of every feature, hence you can use the extra time to make up for when you do need it. Trust me, you will definitely need it!&lt;/p&gt;

&lt;h2&gt;
  
  
  From here on out, What do you tell the PM when the deadline is against you? The truth! The truth, the whole of it!
&lt;/h2&gt;

</description>
      <category>software</category>
      <category>projectmanagement</category>
      <category>softskills</category>
      <category>communication</category>
    </item>
    <item>
      <title>MVC pattern explained using a Guitar Shop analogy.</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Wed, 27 Jun 2018 15:13:30 +0000</pubDate>
      <link>https://dev.to/emma_odia/mvc-pattern-explained-using-a-guitar-shop-analogy-15e3</link>
      <guid>https://dev.to/emma_odia/mvc-pattern-explained-using-a-guitar-shop-analogy-15e3</guid>
      <description>&lt;p&gt;I have a friend who is of the opinion that he wants to understand the entire abstraction process going on under the hood that makes an app work. This is often very hilarious to me and I always ask if he is interested in doing same with automobiles! I mean who is changing gears and wondering how the gears shift! That had be very funny! Not to mention all the people cussing at you when the red light turns green and you are lost in thought about how the ignition works! The point that I'm trying to make here is best explained by one of my favorite &lt;a href="https://www.poemhunter.com/poem/stupid-cupid-ep-1/#content"&gt;poems&lt;/a&gt;. Just because we have toothbrushes now doesn't mean that there wasn't a time when men used sticks to clean out their mouths. Processes over the years have been deployed and re-tweaked to make them better.&lt;/p&gt;

&lt;p&gt;The MVC process is akin to this! There was a time when a individual had to set up their own servers just to share static assets over ftp and write all the machine level DevOps code! Now hosting your software (web and mobile) apps is easy with organizations abstracting away a huge chunk of the DevOps responsibility for you. The point as has already been made and which I still want to hit nail on the head here is the fact that once a task is abstracted away, it is simply done to make life easier. The MVC process is hence made to ensure a faster way to rapidly build web applications by thinking them of separate entities that communicate as part of an entire activity. I will define the general overview of a web app and then explain the structure using the MVC pattern and bring it close to home by using an actual guitar shop analogy in closing.&lt;/p&gt;

&lt;p&gt;Say we have a website app that sell guitars. The Website has for example:&lt;br&gt;
A landing page: Home Page. Static Pages: About and FAQ. A page that wrangles data: Contact form. Shop. Checkout. If we are to use the MVC pattern to build out this website we have to first define what is our MODEL, which of the pages will be simple views, which page VIEWS will return data from the MODEL and finally what logic will go into the CONTROLLER. Holding the mental picture or better still putting this on paper.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Static VIEWS: Home, About and FAQ pages.

Static VIEWS which returns data: Shop and Checkout pages.

MODEL: Where our guitar data will be saved. 

MODEL we will call SHOP: has_id has_item: guitar {guitar: has_price, has_name}

CONTROLLER: Static Pages controller and Guitar Controller.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a user lands on the Home Page VIEW: He is served a Static Page by the (take a quick guess…) Static Pages CONTROLLER. Same action when he visits the about and Contact Pages, he is served by the (as you may have learned quickly by now) Static Pages CONTROLLER.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;VIEWS&lt;/th&gt;
&lt;th&gt;CONTROLLER&lt;/th&gt;
&lt;th&gt;MODEL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;td&gt;Shop&lt;/td&gt;
&lt;td&gt;Shop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;About&lt;/td&gt;
&lt;td&gt;Guitar&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAQ&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3ZFPGFAl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lkn2hn09axeql6zak4pd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3ZFPGFAl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lkn2hn09axeql6zak4pd.jpg" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a user clicks and goes to the Store Page VIEW (quickly, what do you think happens here?) He is still served by the CONTROLLER, this time the Guitar Controller which communicates with the shop MODEL ans serves up all the guitars in the Database according to their ids. When he proceeds to make a check out upon selection of a particular data, he is sent to a checkout page that bring up the particular guitar according to it's id in the database and he can then make payment for the particular guitar. &lt;/p&gt;

&lt;h3&gt;
  
  
  Guitar Shop Analogy
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Let me use a Guitar shop as an example now.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;You live in a city and have decided to pursue your long interest in music. You are not such a bad singer, to make up for the small (likely off key) singing inability you decide to purchase an instrument to accompany your singing with. Your instrument of choice: THE GUITAR! &lt;/li&gt;
&lt;li&gt;You are on a budget and decide to walk to the local market where there are a couple of guitar dealers.&lt;/li&gt;
&lt;li&gt;You see xyz shop (Home page VIEW), walk into the shop and see a larger roll up banner (About Page VIEW). &lt;/li&gt;
&lt;li&gt;A Salesman walks up to you (CONTROLLER) and offers you an option to take you round the shop to see available guitars and their prices. &lt;/li&gt;
&lt;li&gt;Salesman CONTROLLER action here can either tell you more about the shop (render Static Pages About VIEWS) and/or answer all other questions that you may have (render Static Pages FAQ VIEWS). &lt;/li&gt;
&lt;li&gt;You asked a couple of questions and then you two proceed to walk round the shop and as you reach each guitar you ask for name, brand and price. &lt;/li&gt;
&lt;li&gt;Salesman CONTROLLER pulls all relevant data (from the Shop MODEL) and serves them to you upon each ask. &lt;/li&gt;
&lt;li&gt;When you finally decide on a guitar to purchase you select it by it's id and then proceed to Checkout where the Guitar CONTROLLER now pulls price information of that particular guitar and delivers it via the sticker on it and you make your payment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CFwMQ2sN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/pyc12y547bc49747d953.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CFwMQ2sN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/pyc12y547bc49747d953.jpg" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I designed this using Figma. Photo Courtesy &lt;a href="https://unsplash.com/photos/Jd6eJ-zOE1k"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, if you read this far and still think this isn't cool I still need to GET concepts at deeper level of abstraction, just remember the dude that had to purchase an accompanying instrument to make up for his apparent lapses in music!&lt;/p&gt;

&lt;p&gt;Many thanks for reading. Please, heart and share on Twitter. Thank you!&lt;/p&gt;

</description>
      <category>development</category>
      <category>mvc</category>
      <category>rails</category>
      <category>mern</category>
    </item>
    <item>
      <title>Run Windows Applications in Linux Environment.</title>
      <dc:creator>Emma Odia</dc:creator>
      <pubDate>Mon, 25 Jun 2018 12:35:36 +0000</pubDate>
      <link>https://dev.to/emma_odia/run-windows-applications-in-linux-environment-301m</link>
      <guid>https://dev.to/emma_odia/run-windows-applications-in-linux-environment-301m</guid>
      <description>&lt;p&gt;Problem: If you are a Linux user who recently ported from the Windows environment not necessarily because you despise explorer (Lols… I couldn’t resist throwing shade here!). Well if you will be honest enough, you will then admit that there some apps that you are missing out on in the Linux environment. This article is not meant to debate the use of virtual environments or dual booted machines (Hypocrites! Lols… Another shade!) rather it is the path to the gold mine patch that nicely integrates Windows packages in Linux based environments that it possesses an even sweet name.&lt;/p&gt;

&lt;p&gt;Hear hear all ye Linux beer gulpers that seek the serendipity of the windows cocktails, bear with me and exchange the savor of the beer mug and bring wine glasses to pour some and join in the toast. There is a nice package that is actually called wine which we can use to run windows based packages in a Linux environment!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Wine?
&lt;/h2&gt;

&lt;p&gt;According to the user manual on the &lt;a href="https://winehq.org/"&gt;Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;“Different software programs are designed for different operating systems, and most won't work on systems that they weren't designed for. Windows programs, for example, won't run in Linux because they contain instructions that the system can't understand until they're translated by the Windows environment. Linux programs, likewise, won't run under the Windows operating system because Windows is unable to interpret all of their instructions.&lt;/p&gt;

&lt;p&gt;Wine makes it possible to run Windows programs alongside any Unix-like operating system, particularly Linux. At its heart, Wine is an implementation of the Windows Application Programming Interface (API) library, acting as a bridge between the Windows program and Linux. Think of Wine as a compatibility layer, when a Windows program tries to perform a function that Linux doesn't normally understand, Wine will translate that program's instruction into one supported by the system.”&lt;/p&gt;

&lt;p&gt;You can read more about wine here&lt;/p&gt;

&lt;h2&gt;
  
  
  Install wine of your Linux PC.
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a&gt;winehq.org/downloads.&lt;/a&gt; Select your Linux distro from the list of available options and you will land on a page with further instructions of installing the said distribution.&lt;/p&gt;

&lt;p&gt;Here is the step by step approach to the Ubuntu install. You will need a working internet connection for this and it should take 10 minutes in all:&lt;/p&gt;

&lt;p&gt;First if your Linux environment is 64 bit and has not been enabled to run 32 bit architecture, run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dpkg –add-architecture i386
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we will install the wine package from the wine repository. This way we can install future releases from the terminal. Run each of the following commands, one before the other.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget -nc https://dl.winehq.org/wine-builds/Release.key

sudo apt-key add Release.key

sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the following command in place of the last command if you have a Linux Mint version 18.x&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-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ xenial main'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As often with running new installations on Linux, update all the packages:&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 update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next is to install the wine package itself. I recommend installing the stable package. Run this command to do that:&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 --install-recommends winehq-stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If apt-get complains about missing dependencies, install them, then repeat the last two steps (update and install).&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up the wine configuration environment
&lt;/h2&gt;

&lt;p&gt;Before using Wine, it is necessary to create the fake C: drive where your Windows applications will be installed. To do this open the terminal and enter 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;winecfg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow all the prompts to install packages and set the Windows environment which will you be prompted to choose a version of. When this step is completed, wine is now set up on your Linux environment and you can check if wine is installed by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wine --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install a windows app
&lt;/h2&gt;

&lt;p&gt;To install Windows applications using Wine, follow these instructions:&lt;br&gt;
    1. Download the Windows application from any source, downloading the .exe (executable file). &lt;br&gt;
    2. Place it in a convenient directory (e.g. the desktop, or home folder).&lt;br&gt;
    3. Open the terminal, and cd into the directory where the .exe file is located.&lt;br&gt;
    4. Type wine the-name-of-the-application.extension&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wine realplayer_installer.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will run the .exe using Wine. If it is an installer, it should then run as it would in Windows. If the application asks for a directory to install the application to, select put it under C:\Program Files.&lt;/p&gt;

&lt;p&gt;To test this you can install the Balsamiq mockups creator for window here. Using the above instructions will become &lt;br&gt;
&lt;em&gt;&lt;code&gt;cd /home/user/Desktop&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If the file downloaded into that dir, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wine Balsamiq_Mockups_3.5.15.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will install Balsamiq, after the installation. Launch the Balsamiq app and begin to use!&lt;/p&gt;

&lt;h2&gt;
  
  
  To start/run Windows programs using Wine
&lt;/h2&gt;

&lt;p&gt;After installing an application using the directions above, those applications can be started and used by entering wine programname.exe (e.g. &lt;code&gt;wine realplayer.exe&lt;/code&gt;). When done, close the application as one would normally. You must run the installed executable, which will by default be in the virtual Windows drive created by Wine, at &lt;code&gt;~/.wine/drive_c&lt;/code&gt;. Generally programs will install themselves somewhere under Program Files inside the virtual Windows drive, following Windows conventions.&lt;/p&gt;

&lt;p&gt;You can also use the Wine file browser, by running winefile in a terminal. Clicking the C:\ button in the toolbar will open a window where you can browse the virtual Windows drive created in .wine. Double Clicking an executable in the Wine file browser will run it in Wine.&lt;/p&gt;

&lt;p&gt;Instead of having to always enter the terminal or use the Wine file browser, you may also create a desktop icon, and start a Wine application using that icon. To do this, right click on the desktop and select "Create a launcher." If you wish, select an icon from the list of available icons (or browse to an icon you would like to use), fill out other information that is requested (Name, generic name, etc.). For the command, type in wine the-location-of-the-program.exe (e.g. &lt;em&gt;&lt;code&gt;wine /home/john/.wine/realplayer.exe&lt;/code&gt;&lt;/em&gt;). The most important part of creating a launcher is the command, the generic name is not as important. Just make sure you de-select "Run in terminal." This completes the process.&lt;/p&gt;

&lt;p&gt;In some cases the application requires to be running from a certain location. In this case create launcher with command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "cd /home/USER/.wine/drive_c/Program Files/Appdir/; wine /home/USER/.wine/drive_c/Program Files/Appdir/game.exe"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course you will need to replace USER and Appdir with the proper data.&lt;br&gt;
If you desire to have an icon on the panel, create a launcher on the panel of choice. Do this by right-clicking the panel, selecting "Add to Panel," and selecting "Custom Application Launcher." This will ask you for the same information as before.&lt;/p&gt;

&lt;p&gt;Alternatively, to make life easier, you can set it so wine will automatically open .exe files files for you - instead of using the Wine File to locate the file each time. To do so, right click on the .exe file, select Properties, and then select the Open With tab. Click the 'Add' button, and then click on 'Use a custom command'. In the line that appears, type in wine, then click Add, and Close. Now all .exe files will be automatically opened by Wine, so you can use Nautilus to browse and open them instead of the Wine File.&lt;/p&gt;
&lt;h2&gt;
  
  
  Uninstalling Wine Applications
&lt;/h2&gt;

&lt;p&gt;Open up a terminal window and type 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;wine uninstaller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this will do is open up a program similar to the Windows add/remove programs control panel, allowing you to uninstall applications from a Wine installation. Running uninstall programs directly via Wine should also work normally. Alternatively, you could also simply delete the folder of the application. However, as when done in Windows, this method will be unclean and will not remove the program's configuration from the Wine registry like using an uninstaller will.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enjoy!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Credits:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://wiki.winehq.org/Wine_User%27s_Guide#What_is_Wine.3F"&gt;Winehq User Guide&lt;/a&gt;&lt;br&gt;
&lt;a href="https://help.ubuntu.com/community/Wine"&gt;Ubuntu Community&lt;/a&gt; &lt;br&gt;
&lt;a href="http://google.com"&gt;Papa Google&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>dev</category>
      <category>windows</category>
      <category>machine</category>
    </item>
  </channel>
</rss>
