<?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: Nana Adjei Manu</title>
    <description>The latest articles on Forem by Nana Adjei Manu (@claeusdev).</description>
    <link>https://forem.com/claeusdev</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%2F78612%2F6a0ece02-4651-410f-9ce6-6d28fb43012e.jpeg</url>
      <title>Forem: Nana Adjei Manu</title>
      <link>https://forem.com/claeusdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/claeusdev"/>
    <language>en</language>
    <item>
      <title>I refactored a large codebase from Enzyme to React testing library. Ask me anything</title>
      <dc:creator>Nana Adjei Manu</dc:creator>
      <pubDate>Tue, 17 Mar 2020 19:51:50 +0000</pubDate>
      <link>https://forem.com/claeusdev/i-refactored-a-large-codebase-from-enzyme-to-react-testing-library-ask-me-anything-3gi9</link>
      <guid>https://forem.com/claeusdev/i-refactored-a-large-codebase-from-enzyme-to-react-testing-library-ask-me-anything-3gi9</guid>
      <description>

</description>
      <category>ama</category>
      <category>react</category>
      <category>testing</category>
      <category>reacttestinglibrary</category>
    </item>
    <item>
      <title>How I became a Software Engineer/Developer/Teacher/Dummie</title>
      <dc:creator>Nana Adjei Manu</dc:creator>
      <pubDate>Tue, 19 Mar 2019 11:00:49 +0000</pubDate>
      <link>https://forem.com/claeusdev/how-i-became-a-software-engineerdeveloperteacherdummie-5e44</link>
      <guid>https://forem.com/claeusdev/how-i-became-a-software-engineerdeveloperteacherdummie-5e44</guid>
      <description>&lt;p&gt;I'm Nana, just turned 27 living in Accra, Ghana, I'm a Software Developer trying to hack things one way or the other. I didn't write code till I was 22. I used to spend my free time with my friends in a very small Chinese pizza shop in the very nice beach city of Dalian, China (Y'all should find the time and visit the place, its unbelievable). Oh and my writing skills have never been a thing, pardon my mistakes and poor writing skills, I suck at telling stories. I actually intend to get better by writing more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Genesis
&lt;/h2&gt;

&lt;p&gt;It all began in 2013 after a series of mistakes and confusion found me back home in Ghana after spending 3 years studying Medicine in China. It was tough but then my elder brother who is also a Software Engineer had then heard about an HBO show "Silicon Valley", he asked that I find the time and watch it mainly for the comedy. So I started watching because it was the only thing I had to do. Then came Richard Hendricks, weirdly smart, mostly awkward and to top it all never understood many of these cool people jokes. Then something struck me, hey ain't you just like this dude? Smart, weird and awkward, say all the wrong things at the wrong time. After a few episodes man did I enjoy the show, I went to my elder brother to ask about coding. Joe (elder brother) also didn't hesitate, opened his command prompt and wrote some weird stuff that changed something in his file system and BOOM!!! a decision was made.&lt;br&gt;
Now comes the hard part, convincing the chief (Dad) that I wasn't going to study medicine again because I had found inner peace, LOL. The big guy was tough, had to fight him for a few months but then he gave in and gave my full support.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hustle
&lt;/h2&gt;

&lt;p&gt;I then started watching YouTube videos of Mark Zuckerberg and other guys saying coding wasn't hard. I read several articles that recommended Codecademy, so I started with their JavaScript course and it was okay but I didn't like it so much only because I like watching how stuff is done and doing it myself. Luckily enough, I found a YouTube ad of Treehouse that offered a 2 week trial period. I signed up and built my first webpage with HTML and CSS on their "Learn how to build a website" module. Loving what I had done I enrolled in a CS program.&lt;/p&gt;

&lt;p&gt;On this CS program, I learned PHP the first semester, built a few projects and then I found a lot of buzz around Ruby. At this time my trial period at Treehouse had expired so I created another account with my other email and started a new 2-week trial. I then found the awesome Jason Siefer, RIP, he made me fall in love with Ruby as I was able to complete the Ruby track in like a week and then went on the Rails track, unfortunately, I wasn't able to complete the track before the trial expired. So back in school, we did Java and C++ for more advanced CS modules which were cool but I still loved Ruby more because I hated Java for so many moving part and worst of all the syntax was just so much for me. Out of school, my free time went into trying out different ways of building things and clones of popular apps from online articles and YouTube videos. Mackenzie Child's channel helped me explore Rails further by building 12 apps in 12 weeks challenge.&lt;/p&gt;

&lt;p&gt;In school, I realized that if I was going to make it as a Software Engineer I had to put in a lot of effort so I did a lot of staying in and writing code and building more web apps. I enjoyed not going for many of my classes because, to be honest, some of my lecturers didn't really show that they understood the concepts. I mean I spent most of my time and data watching MIT OpenCourseWare, Havard's CS50 and I could tell the difference, LOL. So I went to ask my elder brother about a school is good if I had to do everything by myself. He said even at Carnegie Mellon where he studied, you had to do most by yourself. So I rushed through school making sure my grades were satisfying the Chief while making sure I was learning to meet industry standards. I ended up being the go-to guy for people when they needed help on their assignments and projects. This probably was the best way I learned so many things. Because mostly some problems required extra googling and stackoverflow'ing.&lt;br&gt;
Because you don't learn how to code at school. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You learn how to code by writing programs in it. Most companies don't care if you have a nice paper saying that you studied programming at college: people care that you can show that your coding skills are good and that you love to code. &lt;em&gt;Lydia Hallie&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Mistakes
&lt;/h2&gt;

&lt;p&gt;Although I enjoyed coding through the past 5 years, along with the lines of studying and mastering my craft I made a few mistakes which turned out to hinder my progress.&lt;br&gt;
The most crucial of these mistakes was never getting an internship. You never know how good you really are when you're working on your own and creating simple web apps. It is only when you work with people with different skill sets that you really learn and enjoy the trade of coding and programming. If I were to go back again I would probably take an internship every school holiday or vacation. Not only does it help you learn by giving you industry experience you also get to meet industry pros which give wonderful advice and show you a few tricks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;Well, challenges were not so much, only huge challenge was convincing my parents especially my Mom who's been a teacher for all my life that there's a decent career in software development and engineering. I mean don't get me wrong, over here, growing up, people don't really want their kids to study computing. It's even more serious when your grades are good, its either Law, Medicine, Accounting or one of these "cool and job safe" professions. So she would always call to ask if that was what I really wanted and what the career was all about. There was a time I was up at dawn writing code and watching an online course she came to sit with me for about an hour asking questions about what I was doing, LOL. There was a time I told my friend I had switched career paths from Medicine to Computing, he asked: "What is wrong with you?". Hehe. In all, the folks are happy now.&lt;br&gt;
Another major major challenge is whether I have at least 3 years of coding experience or not. Do you think I have? Please let me know in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fun
&lt;/h2&gt;

&lt;p&gt;With all the challenges and mistakes I have learned a whole lot. I have built things, I have tried to build startups which didn't even get off with 10 users, I have participated in a hackathon with awesome people, I have worked with amazing people from all over the world, I have sucked at an interview(yes, only one, the first one). I get people contact me so many times about gigs and roles. The hardest part about what I do is explaining to my Mom why I am not in the office on a workday. I am currently completing a contract as a Frontend Developer at a startup in Accra. Every day I am taking online courses and reading engineering books and articles and I have some time to take care of myself. I can also help more people learn how to code by sitting behind my ThinkPad and responding to Twitter messages and emails.&lt;/p&gt;

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

&lt;p&gt;In the end, I hope to inspire some people to also get involved in Software development and Tech as a whole, and that it's really as it has been portrayed to be. Trust me, it is very rewarding, sometimes I occasionally need to remind my 64-year-old Mom that I am not at work but I am working because yeah, my work allows me to work from anywhere at any time. And hell yeah, programming and coding aren't only for the smart kids. This has been a very good experience for me writing this, it took a little over 30 mins to freestyle this, pardon my inexperience in writing.&lt;br&gt;
I make a lot of noise coding and programming on my &lt;a href="https://twitter.com/claeusdev" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Med School dropout to Software Engineer, Ask Me Anything!</title>
      <dc:creator>Nana Adjei Manu</dc:creator>
      <pubDate>Tue, 19 Mar 2019 10:48:28 +0000</pubDate>
      <link>https://forem.com/claeusdev/i-med-school-dropout-and-front-end-engineer-ask-me-anything-28o8</link>
      <guid>https://forem.com/claeusdev/i-med-school-dropout-and-front-end-engineer-ask-me-anything-28o8</guid>
      <description></description>
      <category>ama</category>
    </item>
    <item>
      <title>A point of VUE with an instance.</title>
      <dc:creator>Nana Adjei Manu</dc:creator>
      <pubDate>Sun, 17 Mar 2019 17:27:57 +0000</pubDate>
      <link>https://forem.com/claeusdev/a-point-of-vue-with-an-instance-321o</link>
      <guid>https://forem.com/claeusdev/a-point-of-vue-with-an-instance-321o</guid>
      <description>&lt;p&gt;As front-end engineers, most of the things we deal with as problems at work is rendering data into our views. Over the years there have been so many iterations of the best way to do this but then came along VUE.js. Vue helps us front-end engineers and developers by providing a very easy to use API for rendering data into our view. This post is going to be part of a series or post introducing the Vue framework to absolute beginners. In this post, I will be introducing the &lt;code&gt;vue&lt;/code&gt; instance.&lt;/p&gt;

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

&lt;p&gt;To sum it up, Vue is a reactive, versatile and performant front-end framework that provides an API that enables easy maintenance and testability. The makers of Vue have made it so easy that you can just drop Vue in just a tiny portion of your view hence making it very progressive. Unlike frameworks such as Ember(one of my favorites) and Angular, Vue doesn't require a hold of your whole UI just from it where you need it. It is heavily inspired by the MVVM pattern. &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started.
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;vue&lt;/code&gt; application starts with a Vue &lt;code&gt;instance&lt;/code&gt; which is a function, which is our topic for the day. An instance of Vue looks something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;el&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Instance
&lt;/h2&gt;

&lt;p&gt;The Vue instance is a function that takes an &lt;em&gt;options&lt;/em&gt; object as an argument. This is basically the root of the &lt;code&gt;vue&lt;/code&gt; application. The options object simply put stores data and performs actions. The &lt;em&gt;options&lt;/em&gt; object is composed of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;'el'&lt;/em&gt;: This property of the options object is helping us connect our instance to the DOM(document object model). Thus the value &lt;code&gt;'#app'&lt;/code&gt; means that we're binding our instance to an element on the DOM with an &lt;em&gt;id&lt;/em&gt; of &lt;em&gt;app&lt;/em&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;data&lt;/em&gt;: This property is an object that may be used to pass data into the DOM. When an instance is created all the properties found in the object is added to something called the &lt;em&gt;reactivity system&lt;/em&gt;. As I described earlier Vue is reactive, which basically means it responds to change simultaneously. The reactivity system works such that the instance's &lt;em&gt;data&lt;/em&gt; is bound or linked to everywhere the data is referenced. When a value changes in the data object its value at all references to it on the DOM "reacts" and then update to match the change. NB: properties are only reactive when they were created with the instance, this means that when you add a new property after the instance has been created, any changes to this property will not cause a change on the dom.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;methods&lt;/em&gt;: In addition to the data object and its properties, instances offer a number of useful instance properties and methods. Denoted by the &lt;code&gt;$&lt;/code&gt; prefix, mainly to differentiate instance methods from the user-defined ones. Let's have a look at this below an example from the official Vue docs:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;vm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Vue&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#example&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; true&lt;/span&gt;
    &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$el&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; true&lt;/span&gt;

    &lt;span class="c1"&gt;// $watch is an instance method&lt;/span&gt;
    &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$watch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;oldValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// This callback will be called when `vm.a` changes&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;lifecycle hooks&lt;/em&gt;: Just like any other framework, Vue also has its own process an instance goes through to complete its instantiation. From setting up data, compiling the template and mounting the instance on the DOM. It then has to update the DOM with new changes as and when it comes in. During the lifetime of an instance, thus from the start of the instantiation to mounting the instance to the DOM, Vue exposes functions by way of &lt;em&gt;lifecycle hooks&lt;/em&gt; that allows the developer to perform certain actions based on the specific stage in the lifetime of the instance. A typical example is &lt;code&gt;created&lt;/code&gt;, this runs after the instance has been created. Others include &lt;code&gt;mounted&lt;/code&gt;, &lt;code&gt;updated&lt;/code&gt; and &lt;code&gt;destroyed&lt;/code&gt; which are descriptive of the roles or functions in the lifecycle of a Vue instance. If you've done React before these may sound familiar as &lt;code&gt;component lifecycle method&lt;/code&gt;. It is also worthy to note that each of these methods holds context of the instance they're being called on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, this is a very short intro to the VUE instance, which is the root of any vue application. In subsequent articles, I will be exploring more into each component of the instance with better examples. Also if this boosted your interest into trying Vue or learning more about it please &lt;a href="https://vuejs.org/"&gt;Checkout the Vue Docs&lt;/a&gt; and also follow me for more of these posts if you enjoyed this.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>frontend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Omniauth-Twitter</title>
      <dc:creator>Nana Adjei Manu</dc:creator>
      <pubDate>Sun, 26 Aug 2018 14:29:36 +0000</pubDate>
      <link>https://forem.com/claeusdev/omniauth-twitter-1la4</link>
      <guid>https://forem.com/claeusdev/omniauth-twitter-1la4</guid>
      <description>

&lt;p&gt;I have realized all my twitter apps keep breaking after the new api settings since July. I have tried to get my developer account approved and tried to many times to add the callback URL so many times but I still get the 403. Any help about how to get around this? Thanks&lt;/p&gt;


</description>
      <category>rails</category>
      <category>omniauthtwitter</category>
      <category>twitterapi</category>
    </item>
  </channel>
</rss>
