<?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: Thabi </title>
    <description>The latest articles on DEV Community by Thabi  (@thabisegoe).</description>
    <link>https://dev.to/thabisegoe</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%2F118866%2Fee73ab92-0ee8-489c-b46a-c53ba9b4d5d7.png</url>
      <title>DEV Community: Thabi </title>
      <link>https://dev.to/thabisegoe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thabisegoe"/>
    <language>en</language>
    <item>
      <title>Smooshing arrays : flat() and flatMap()</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Fri, 10 Jul 2020 14:16:10 +0000</pubDate>
      <link>https://dev.to/thabisegoe/smooshing-arrays-flat-and-flatmap-3l3j</link>
      <guid>https://dev.to/thabisegoe/smooshing-arrays-flat-and-flatmap-3l3j</guid>
      <description>&lt;p&gt;If you want to flatten an array that has sub-arrays, these two methods are helpful. They were introduced in the ES2019 standard. There was a bit of a &lt;a href="https://github.com/tc39/proposal-flatMap/pull/56"&gt;controversy&lt;/a&gt; with the initial name &lt;em&gt;flatten&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Sometimes, we have to deal with data in nested arrays, you can implement the function yourself&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;function&lt;/span&gt; &lt;span class="nx"&gt;flattenArrays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arrays&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="nx"&gt;arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&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;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;flattenArrays&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;span class="c1"&gt;// Expect result : [5, 10, 15, 20]&lt;/span&gt;
&lt;span class="c1"&gt;// This function will only flatten one level of arrays &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luckily Javascript already provides the .flat() array method. Check &lt;a href="https://caniuse.com/#feat=array-flat"&gt;browser support&lt;/a&gt; before using it.&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="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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// Expect result : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;.flat() only flattens one level of arrays. Nested arrays deeper than one level are left unmodified.&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="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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,[[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;// Expect result: [1, 2, [3, 4], 5, 6, 7, 8, 9, 10, 11, 12]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can flatten beyond the first level, the default depth is 1. The depth can also be &lt;em&gt;Infinity&lt;/em&gt; to flatten all arrays.&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="c1"&gt;//flatten two levels deep&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,[[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;//Expect result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The depth can be Infinity, in which case flat will flatten all arrays no matter how deeply nested they are.&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="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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]]],[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;Infinity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;//Expect result: [1, 2, 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Note: The flat method only flattens arrays and stops when it is a non-array value. If there are arrays inside an object, it will skip them.
&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="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;stockIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;124&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;145&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;121&lt;/span&gt;&lt;span class="p"&gt;,[&lt;/span&gt;&lt;span class="mi"&gt;2&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="nx"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;Infinity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="cm"&gt;/* Expect result: [{
  item: "shirt",
  stockIds: [124, 12, 145, 12, 33]
}, 121, 2, 1] */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;.flat() is so commonly used with .map() that a .flatMap() method was created. &lt;/p&gt;

&lt;p&gt;Imagine if you sold paint, and you had a tracking system that allows you to save different colours for each brand. You might want to write a list of every colour you have in stock regardless of the brand.&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;paintBrands&lt;/span&gt; &lt;span class="o"&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Dulux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;colours&lt;/span&gt;&lt;span class="p"&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;red&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;white&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;green&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;yellow&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Berger&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;colours&lt;/span&gt;&lt;span class="p"&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;grey&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;orange&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="nx"&gt;paintBrands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;flatMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colours&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;//Expect result: ["red", "white", "green", "yellow", "grey", "orange"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Note: .flatMap only flattens to 1 depth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any interesting use-cases for these methods please share below. Thanks for reading.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>todayilearned</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A simple introduction to REST and how to get started</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Fri, 03 Jul 2020 15:28:32 +0000</pubDate>
      <link>https://dev.to/thabisegoe/a-simple-introduction-to-rest-and-how-to-get-started-2580</link>
      <guid>https://dev.to/thabisegoe/a-simple-introduction-to-rest-and-how-to-get-started-2580</guid>
      <description>&lt;p&gt;My goal is to share what I have learned about REST. I often apply methods in web development without understanding the history behind them. So, what is REST? What does web development have to do with resting?&lt;/p&gt;

&lt;p&gt;When I started coding, I often ran into tutorials that use data from external resources. Projects such as building a weather app, an online book shop, and a netflix replica. These tutorials often use data from places like Github, Youtube, Twitter or &lt;a href="https://github.com/public-apis/public-apis"&gt;various other APIS&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is an API?
&lt;/h3&gt;

&lt;p&gt;API stands for Application Programming Interface, it is a way for two different applications to communicate. Most large companies have built their own APIs. APIs in simple terms give you data, and this data is used in various ways.&lt;br&gt;
Let's say you want to create an appointment booking app. You can choose to use one of Google's many APIs like Google Maps and calendar to make things easier for you.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is REST?
&lt;/h3&gt;

&lt;p&gt;REST stands for Representational State Transfer, it was introduced by &lt;a href="https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm"&gt;Roy Fielding&lt;/a&gt; in 2000. It is a software architectural style that created a standard that allowed two servers to communicate and exchange data anywhere in the world. REST is standardized this way, to make it easier to work with other RESTful APIs. &lt;/p&gt;
&lt;h3&gt;
  
  
  What does RESTful API mean?
&lt;/h3&gt;

&lt;p&gt;RESTful simply means a service provides a REST interface that you can communicate with.&lt;/p&gt;

&lt;p&gt;A RESTful API is an application programming interface (API) that uses HTTP requests to interact with data. A RESTful API basically is a service that (hopefully) follows the rules.&lt;/p&gt;

&lt;p&gt;There are &lt;a href="https://www.geeksforgeeks.org/rest-api-architectural-constraints/"&gt;6 key constraints&lt;/a&gt; which define a "true" RESTful API.&lt;/p&gt;

&lt;p&gt;Some of the criteria of REST, simplified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be consistent, you ask for data in the same way and get back the same data back. You should follow specific guidelines like naming conventions, link or data formats. You should be able to access the resources using a common approach like HTTP methods.&lt;/li&gt;
&lt;li&gt;You should compose your API into a clear set of entities, and give them unique url identifiers like &lt;em&gt;&lt;a href="http://www.example.com/albums/song/1"&gt;www.example.com/albums/song/1&lt;/a&gt;&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;API should be idempotent (which means you can keep repeating the same operation, and should still expect the same value back). Example if you choose to delete an album with an ID of 52, it should not impact other data. It may give you an error letting you know that the album has already been deleted, but it should not delete random albums. &lt;/li&gt;
&lt;li&gt;It should be stateless which means the server should not remember anything about the user who uses the API. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have you ever received a link from a friend only for it to say, access denied? The developer might have chosen that option, but it goes against the principles of RESTful. Many websites aim to be RESTful which is not always achievable. For example, many websites are stateful, they change the information you see based on cookie sessions. &lt;/p&gt;

&lt;p&gt;Back in the day (even now, who am I kidding?), it was common to see a URL that looked like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/sessionid=AIsdlasdklMVgyfrfksoskeikskZPF63erfswwqwewq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;this does not tell us anything right? I would not know what to expect from this url.&lt;/p&gt;

&lt;p&gt;If you compare it to a url like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/albums/1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/rihanna/albums/1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you would have clearer expectations.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does everything interact?
&lt;/h3&gt;

&lt;p&gt;I will be focusing on a &lt;a href="https://en.wikipedia.org/wiki/Representational_state_transfer#Applied_to_Web_services"&gt;small aspect&lt;/a&gt; of REST when it is applied to Web services.&lt;/p&gt;

&lt;p&gt;HTTP-based RESTful APIS are defined with the following aspects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a base URI such as &lt;a href="https://dev.to/"&gt;https://dev.to/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;a media type that defines the data elements (e.g. JSON)&lt;/li&gt;
&lt;li&gt;standard HTTP methods (this is a basic explanation, there is a lot more that goes into HTTP methods):&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Used to "read" or fetch data&lt;/td&gt;
&lt;td&gt;Get's a list of existing customers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Used to create new resources&lt;/td&gt;
&lt;td&gt;Submitting a new customers details on a form&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;Used to update resources&lt;/td&gt;
&lt;td&gt;Updating a customers first name, you will need to send the full parameters to update it : ({"first":"Maddy", "last":"Stone"})&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;Used to delete resources&lt;/td&gt;
&lt;td&gt;Deleting a customer from your database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH&lt;/td&gt;
&lt;td&gt;Used to making partial updates to resources&lt;/td&gt;
&lt;td&gt;Used if you want to change a specific value ({"first":"Jamie"})&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It is conventional to create a unique address for resources. For example, if you had a database of your music collection, the root URL would be something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your albums would be considered as a &lt;em&gt;resource&lt;/em&gt;, and usually have an ID that identifies each one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/api/albums
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's say you stored your favourite Rihanna album with an ID of 15. You would locate it here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.com/api/albums/15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You would be able to interact with your database:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/api/albums&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Get a list of all the albums you have in your database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/api/albums/1&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Get this specific album with the id of 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/api/albums&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Post a new album, you can use a generateID function to automatically create an ID everytime you add a new album&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/api/albums/:id&lt;/td&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;Delete a specific album with the id you choose. :id is replaced with an id&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The above approach follows a model created by &lt;a href="https://martinfowler.com/articles/richardsonMaturityModel.html"&gt;Leonard Richardson&lt;/a&gt;. It does not fully meet the original "REST API" &lt;a href="https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven"&gt;criteria&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A good path to follow is looking at how major companies define their approach to RESTful APIs. Reading documentation is a great way to learn about best practices, and many offer walkthroughs on interacting with their API.&lt;/p&gt;

&lt;p&gt;I recommend looking at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.twilio.com/docs/tutorials"&gt;Twilio&lt;/a&gt; : one of the coolest APIs available, they give you various examples of things you can build using their services and even have tutorials&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stripe.com/docs/api"&gt;Stripe&lt;/a&gt; : simple, straightforward guide &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dropbox.com/developers/documentation"&gt;Dropbox&lt;/a&gt;: I really like that Dropbox gives you an option of choosing the language you prefer working in&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md#3-introduction"&gt;Microsoft REST API guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/rest"&gt;Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://plaid.com/docs/"&gt;Plaid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To summarize, REST is usually mentioned in reference to RESTful APIs which developers use to interact with APIs. It is a set of guidelines to create web applications. &lt;/p&gt;

</description>
      <category>node</category>
      <category>api</category>
      <category>rest</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Free (or affordable) Ways to Learn How to Code in South Africa</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Mon, 25 May 2020 12:07:15 +0000</pubDate>
      <link>https://dev.to/thabisegoe/free-or-affordable-ways-to-learn-how-to-code-in-south-africa-4g0m</link>
      <guid>https://dev.to/thabisegoe/free-or-affordable-ways-to-learn-how-to-code-in-south-africa-4g0m</guid>
      <description>&lt;p&gt;It can be a battle trying to get into the tech industry in South Africa as a non-traditional candidate (no Computer Science/IT related degree). Many people cannot afford bootcamp fees so I tried to compile a list of training initiatives that aim to lessen these barriers. &lt;/p&gt;

&lt;p&gt;Remember that learning how to code can be a long and difficult process. Don't get discouraged, many people share the same sentiment and that is why it is important to connect with others who are on this journey. I highly recommend connecting with "Tech Twitter". I wrote a separate article to share a list of South African based developers. You can find them &lt;a href="https://dev.to/thabisegoe/south-africans-in-tech-you-should-follow-on-twitter-59cm"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Resources
&lt;/h3&gt;

&lt;p&gt;If you are not in the big cities, don't despair, there are amazing &lt;strong&gt;free&lt;/strong&gt; online resources. I would recommend choosing one of the following resources and committing to it, don't fall in the trap of &lt;a href="https://www.youtube.com/watch?v=MxxAc9a4ILU"&gt;tutorial hell&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.freecodecamp.org"&gt;FreeCodeCamp&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.theodinproject.com/"&gt;The Odin Project&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.coursera.org/courses?query=free&amp;amp;index=prod_all_products_term_optimization&amp;amp;skills=Computer+Programming"&gt;Coursera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Techtonica/curriculum"&gt;Techtonica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://africa.googleblog.com/2020/04/grow-your-skills-with-google-africa.html"&gt;Google Africa Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/partners/google/africa/google-africa-developer-scholarship-2020"&gt;Google Africa | Pluralsight Scholarship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.toWatch%20and%20Code"&gt;https://watchandcode.com/courses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lab.github.com/"&gt;Learning Lab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you do use online resources, it would be great if you &lt;a href="https://www.swyx.io/writing/learn-in-public/"&gt;"learn in public"&lt;/a&gt;, especially if you do not have a traditional degree. Many South African companies place an emphasis on degrees, you can get ahead with a company by connecting with others and creating a platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.wethinkcode.co.za/"&gt;WeThinkCode&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campuses in JHB and Cape Town&lt;/li&gt;
&lt;li&gt;WeThinkCode is a Non-Profit Organisation that operates commercially and has Corporate Sponsors that cover their students' tuition and provide two paid four-month internships in their first and second years&lt;/li&gt;
&lt;li&gt;Requirements: anyone between the ages of 17 and 35, able to study full-time for two years, no prior coding experience needed, if you are not South African, you are responsible for obtaining a valid work visa / permit valid for 2 years.&lt;/li&gt;
&lt;li&gt;If you do not have a computer, they host regular Testing Days at both campuses. Email &lt;a href="mailto:info@wethinkcode.co.za"&gt;info@wethinkcode.co.za&lt;/a&gt; to book a time-slot when you can complete the two application tests.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.africateengeeks.co.za/"&gt;AfricaTeenGeeks&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in JHB &lt;/li&gt;
&lt;li&gt;Africa Teen Geeks exists to eliminating the barriers faced by disadvantaged communities in pursuing science, technology, engineering and math (STEM)&lt;/li&gt;
&lt;li&gt;Their programmes include: Saturday coding classes, Girl Geek Summit, and STEM Digital school&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="http://girlcode.co.za/"&gt;GirlCodeZA&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GirlCode is a registered Non-Profit Organisation aimed at empowering women through technology. They have multiple programmes available such as: &lt;/li&gt;
&lt;li&gt;GirlCoder Workshops which are 6-month weekend, in-person trainings that teaches participants how to become a developer&lt;/li&gt;
&lt;li&gt;GirlCoder Club is a nationwide network of volunteer-led, weekend coding clubs for high school girls who want to have a strong foundation in basic programming skills&lt;/li&gt;
&lt;li&gt;Digital Literacy classes that teach basic computer literacy skills to unemployed women&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://colorcode.org.za/"&gt;ColorCode&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town&lt;/li&gt;
&lt;li&gt;A consistent, inclusive community for learning to solve problems with code&lt;/li&gt;
&lt;li&gt;Every second Saturday, from about 9h30 to 13h00&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://codeyourfuture.io/cape-town/"&gt;CodeYourFuture&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town&lt;/li&gt;
&lt;li&gt;A community of students and volunteers, passionate about tech and creating opportunities&lt;/li&gt;
&lt;li&gt;Different courses: 

&lt;ul&gt;
&lt;li&gt;Intro to Coding&lt;/li&gt;
&lt;li&gt;Programming Fundamentals&lt;/li&gt;
&lt;li&gt;8-month Full Stack Web Development Bootcamp&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Requirements: 18+, No Matric Required, Annual Household Income less than R350k&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.datacentrix.co.za/internship-programme.html"&gt;Datacentrix&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Midrand&lt;/li&gt;
&lt;li&gt;Datacentrix annually selects learners from previously disadvantaged backgrounds who have completed Grade 12 with potential and interest in various aspects of IT. Selected individuals receive a sponsorship from Datacentrix to complete their qualification. Upon completion of their NQF, interns are appointed, either for a temporary period to acquire practical, on-the-job experience, or even permanently at Datacentrix.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.umuzi.org/learnership-overview"&gt;Umuzi Academy&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campus in JHB &lt;/li&gt;
&lt;li&gt;Umuzi Academy works with leading employers to equip talented young people with the scarce digital skills they need to access high-value careers and thrive in the fourth industrial revolution. They offer a one-year learnership in many fields in the digital space including web development, UI/UX design, Data Science and many others. &lt;/li&gt;
&lt;li&gt;If you are not from JHB, they offer an affordable &lt;a href="https://www.umuzi.org/umuzi-housing"&gt;housing program&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.quirky30.co.za/"&gt;Quirky30&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campus in Langa, Cape Town
&lt;/li&gt;
&lt;li&gt;Non-Profit Organisation that offers marketable skills using technology to empower, advance and create sustainable communities, tackling youth unemployment, crime and poverty. They offer various programs such as:&lt;/li&gt;
&lt;li&gt;Web and Mobile Development (HTML/CSS, JavaScript, Firebase and Nodejs)&lt;/li&gt;
&lt;li&gt;AWS Cloud Platform&lt;/li&gt;
&lt;li&gt;Automation Testing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://i-canlearn.westerncape.gov.za/"&gt;I-CAN LEARN&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Western Cape Province&lt;/li&gt;
&lt;li&gt;An initiative of the Western Cape Government’s Department of Economic Development and Tourism, in partnership with IBM and Google, that provides free digital skills courses to the public at selected Libraries and Youth Cafés across the province&lt;/li&gt;
&lt;li&gt;I-CAN Learn is free if you use it at government sites such as Libraries and Youth Cafes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://tshimologong.joburg/"&gt;Tshimologong&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Jhb&lt;/li&gt;
&lt;li&gt;Established by Wits University, Tshimologong Digital Innovation Precinct aims to commercialize world class African digital innovation.&lt;/li&gt;
&lt;li&gt; They teach entry level ICT skills and various programming languages&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pay-it-forward model
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.citi.org.za/capaciti/"&gt;CITI - Cape Innovation &amp;amp; Technology Initiative&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town &lt;/li&gt;
&lt;li&gt;Candidates receive blended training at their Tech Campuses via an online learning platform that promotes self-learning and group work as part of a holistic programme designed to develop digitally confident candidates. &lt;/li&gt;
&lt;li&gt;Industry mentors provide teams with a business challenge and ask them to investigate a solution and present back to their mentor weekly. These activities enhance team work, communication and create a culture of solution-driven design thinking.&lt;/li&gt;
&lt;li&gt;CapaCiTi Programmes work on a Pay It Forward model. You do not pay anything during your programme; instead, only once you receive a full-time job/employment, will you be required to pay back your training costs in affordable instalments, every month. Your contributions will be used to give another, young South African the chance to participate in a CapaCiTi Programme.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Learnerships / Internships
&lt;/h3&gt;

&lt;p&gt;A learnership is a work based learning programme that leads to an NQF registered qualification. Learnerships require you to complete a theoretical course as well as practical training, which is done at a workplace, in order to graduate. You must be older than 16 and younger than 35 to be eligible for a learnership.&lt;/p&gt;

&lt;p&gt;Examples of IT related learnerships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.indeed.co.za/IT-Learnership-jobs"&gt;Indeed Listings&lt;/a&gt; can vary, some offer full training, some require a computer science degree&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.placementpartner.co.za/wi/vacancy/?id=jdmplacements&amp;amp;vacancy_ref=JHB000030&amp;amp;source=Indeed"&gt;JDM Placements&lt;/a&gt; is a structured Software programming learnership during which the learner spends some time learning theory &amp;amp; some time learning practical skills in the workplace. It is a 12-month programme where you study and gain workplace experience. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.younglings.capetown/"&gt;Younglings&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campus in Cape Town&lt;/li&gt;
&lt;li&gt;1 year Internship to hone your skills and try your hand at making a digital product work&lt;/li&gt;
&lt;li&gt;Requirement: Matric Certificate with a Bachelors Pass, above 50% Pass in Pure Maths &amp;amp; IT, and interest in coding&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="http://thecodingground.com/"&gt;The Coding Ground&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 Campuses, one at The Riversands Incubation Hub which is located close to Diepsloot and the other at Olievenhoutbosch&lt;/li&gt;
&lt;li&gt;Intensive 18-month program focusing on  Computer Science Fundamentals,  Javascript, Python, Java &amp;amp; C#&lt;/li&gt;
&lt;li&gt;Students are sponsored and have a requirement to work for their clients as part of your tuition&lt;/li&gt;
&lt;li&gt;Requirements: Individuals between the ages of 16 (guardian permission for minors required) and 25 can apply&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.dvt.co.za/learnership-programme"&gt;DVT’s Learnership programme&lt;/a&gt;    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offices in Cape Town, Centurion, Johanneburg and Durban
&lt;/li&gt;
&lt;li&gt;Two types of programmes, IT Systems Development and Finance Bookkeeping.&lt;/li&gt;
&lt;li&gt;Requirements:  Matric Certificate with Mathematics, No tertiary qualification, A passion for IT/Finance&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.dynamicdna.co.za/courses/overview/"&gt;DynaminDNA&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Jhb &lt;/li&gt;
&lt;li&gt;Focuses on the upskilling of learners and facilitate the placement of each student into a workplace environment within the Technology sector. &lt;/li&gt;
&lt;li&gt;They offer various courses such as: Systems Development, CompTIA courses and various Microsoft’s certifications&lt;/li&gt;
&lt;li&gt;All Dynamic DNA courses are mict SETA, Microsoft and Pearson accredited.&lt;/li&gt;
&lt;li&gt;Requirements: Ideal candidate will have completed Matric, with an average of 60% in Mathematics and Science&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.mip.co.za/internship.html"&gt;MIP Holdings&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internship starts in Bryanston, Sandton where interns will complete three months of training&lt;/li&gt;
&lt;li&gt;During this time, interns will be taught how to program and write code&lt;/li&gt;
&lt;li&gt;Learners are then placed in teams where they begin writing programmes. Compulsory working hours are Monday to Friday, from 8.00 - 16.30. MIP has offices in Johannesburg and Cape Town.&lt;/li&gt;
&lt;li&gt;Requirements: South African citizenship, Matric certificate, keen interest in coding, no previous experience needed&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.thedigitalacademy.co.za/"&gt;The Digital Academy&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in JHB&lt;/li&gt;
&lt;li&gt;Interns learn practical, hands-on development skills that are needed in the real world whilst building commercial facing products via a rapid internship programme.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Meetup groups
&lt;/h3&gt;

&lt;p&gt;Meetup is a service used to organize online groups that host in-person events for people with similar interests. I recommend going to meetup events, many of them host free coding workshops, talks and provide mentors too. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/GDGJohannesburg/"&gt;GDG Johannesburg&lt;/a&gt;&lt;br&gt;
GDG Johannesburg is a local community run Google Developer Group (GDG). Google Developer Groups are for developers who are interested in Google's developer technology; everything from the Android, Chrome, Drive, and Google Cloud platforms, to product APIs like the Cast API, Maps API, and YouTube API. At the core, GDGs are focused on developers and technical content, and the core audience is developers. GDG Johannesburg aims to meet once a month, the first Wednesday evening every month. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/GDG-Pretoria"&gt;GDG Pretoria&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/jozi-js/"&gt;Jozi.JS&lt;/a&gt; is a meetup group dedicated to all things JavaScript! They have recordings of their previous events &lt;a href="https://www.youtube.com/playlist?list=PLm6KaX_ZYui3v__OZzlSC2m2siTSgwFki"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/meetup-group-LEyPQtvD/"&gt;Ladies That Code - Johannesburg&lt;/a&gt; is a meetup that focuses on teaching you the basics of coding. They usually have monthly events covering topics such as Javascript and CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/rladies-johannesburg/"&gt;R-Ladies Johannesburg&lt;/a&gt;  welcomes members of all R proficiency levels, whether you're a new or aspiring R user, or an experienced R programmer interested in mentoring, networking &amp;amp; expert upskilling. Their non-profit, civil society community is designed to develop our members' R skills &amp;amp; knowledge through social, collaborative learning &amp;amp; sharing. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.meetup.com/ctfeds"&gt;Front-end Development South Africa (FEDSA)&lt;/a&gt;&lt;br&gt;
is a group of Cape Town-based web developers and designers passionate about the technologies and are keen to share what they've learnt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Facebook Developer Circles :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developer Circles connects you to collaborate, learn, and code with other local developers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.facebook.com/groups/DevCPretoria/"&gt;Pretoria&lt;/a&gt;, &lt;a href="https://www.facebook.com/groups/DevCJohannesburg/"&gt;Johannesburg&lt;/a&gt;, &lt;a href="https://www.facebook.com/groups/DevCCapeTown/"&gt;Cape Town&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Flexible payments and bursaries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.codespace.co.za/"&gt;CodeSpace&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town &lt;/li&gt;
&lt;li&gt;Offers Coding &amp;amp; Robotics courses &lt;/li&gt;
&lt;li&gt;Bursaries allow talented individuals to study free of charge. Aside from removing financial constraints, bursary recipients also receive mentoring and support once they start working&lt;/li&gt;
&lt;li&gt;CodeSpace’s also offers a Financial Assistance Programme which allows you to repay your course fees only when you start working. &lt;/li&gt;
&lt;li&gt;Requirements: Students must be computer literate and have good digital literacy. You do not need any prior coding knowledge.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.lifechoices.co.za/academy/coding"&gt;LifeChoices&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town&lt;/li&gt;
&lt;li&gt;A 12-month Coding course that is valued at R35,000 per student. You pay for your fees retroactively through work placement fees and once you begin your internship (5-10% of monthly salary).&lt;/li&gt;
&lt;li&gt;Requirements : Matric with a minimum English pass of 60% (a good mark in Maths or Math Lit preferable). You do not need any prior coding knowledge. Someone that can fully commit for 12 months - Monday to Friday [09.00 to 17.00]&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="http://www.projectcodex.co/learn/index.html"&gt;Codex&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in East City, Cape Town&lt;/li&gt;
&lt;li&gt;codeX is a full time coding program that runs over two terms of four and half months each.&lt;/li&gt;
&lt;li&gt;The curriculum focuses on full-stack web development. They don’t teach specific frameworks, but expose you to the building blocks so that you can make your own technical choices&lt;/li&gt;
&lt;li&gt;Eligible coders with demonstrated financial need qualify for Stipend Sponsorship for transport &amp;amp; living costs as well as Tuition Sponsorship covering some or all of the tuition cost. &lt;/li&gt;
&lt;li&gt;The cost for 2020 is R65,000 (ex VAT). They have various flexible payment plans for our customers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://explore-datascience.net/"&gt;Explore &lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Based in Cape Town&lt;/li&gt;
&lt;li&gt;A 12 month bootcamp that offers different courses such as Data Science/Web Development&lt;/li&gt;
&lt;li&gt;They have a limited number of scholarships offered by corporate South African companies&lt;/li&gt;
&lt;li&gt;Courses start at R36,000, you can pay once a month (e.g. R4000 p/m)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Interesting notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.offerzen.com/state-of-sa-developer-nation-2019?"&gt;2019 State of South Africa’s Software Developer Nation&lt;/a&gt; : 3389 developers working in South Africa shared details about what it’s like to work in South Africa, their most-widely used programming languages and what they are looking to do in the next five years.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.internationalscholarships.dhet.gov.za/"&gt;International Scholarships&lt;/a&gt; : Technically not in South Africa, but many people don't know about this gem. There are many scholarships offered to study abroad ranging from short courses to PHD opportunities.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.4irskills.africa/"&gt;4irskills&lt;/a&gt; : Keep an eye out for this program. The initial program already started, hopefully they will continue the program. Led by the South African Department of Telecommunications and Postal Services, the 4IR Skills Programme provides courses such as: Data Science, Digital Content Production, Software Development, Cyber Security,3D Printing and Drone Piloting.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code4ct.com/join"&gt;Code4CT&lt;/a&gt; : Code for Cape Town is a community of young women tech leaders. Members of the Code for Cape Town community have access to a variety of opportunities that support your development as a young tech leader.&lt;/li&gt;
&lt;li&gt;I have a list of South Africa based people working in tech you should follow on Twitter, &lt;a href="https://dev.to/thabisegoe/south-africans-in-tech-you-should-follow-on-twitter-59cm"&gt;find them here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the most up-to-date information, it’s always best to contact the organisations themselves. If you have any resources/thoughts to share, please comment below.&lt;/p&gt;

</description>
      <category>southafrica</category>
      <category>codenewbie</category>
      <category>bootcamps</category>
      <category>free</category>
    </item>
    <item>
      <title>South Africans in Tech You Should Follow on Twitter</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Mon, 25 May 2020 11:54:24 +0000</pubDate>
      <link>https://dev.to/thabisegoe/south-africans-in-tech-you-should-follow-on-twitter-59cm</link>
      <guid>https://dev.to/thabisegoe/south-africans-in-tech-you-should-follow-on-twitter-59cm</guid>
      <description>&lt;p&gt;This is a follow up to the article I posted about learning how to code for free in South Africa, &lt;a href="https://dev.to/thabisegoe/free-or-affordable-ways-to-learn-how-to-code-in-south-africa-4g0m"&gt;link here&lt;/a&gt; . Twitter is an amazing place to meet and converse with others in the tech field especially if you are new to coding and want to meet fellow people in Tech living near you. This is by no means an exhaustive list and it is in no particular order.&lt;/p&gt;

&lt;p&gt;While writing this, I realized it might come across as if I am only focusing on nationality. I am mainly focusing on South African Based Developers due to local events. Please do not take this in a negative light. &lt;/p&gt;

&lt;p&gt;I am constantly in awe of other developers who come from non-traditional backgrounds and what they achieve, with that being said, the accounts below share great resources, events and spark interesting conversations about the tech landscape in South Africa. They are also in diverse fields of tech. The descriptions I wrote are brief, follow them to learn more about the work they are doing and to connect/network.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/musakeninda"&gt;Nomusa Keninda&lt;/a&gt; : Mpumalanga ICT Club Founder &amp;amp; CEO #MIEExpert, Google &amp;amp; Microsoft Certified, eLearning Specialist &amp;amp; Motivational Speaker&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/StreetDev"&gt;The Digital Academy&lt;/a&gt; : helps talented young Africans create innovative digital products that have commercial value&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/SocialGeeksZA"&gt;Social GEEKS Podcast&lt;/a&gt; hosted by &lt;a href="https://twitter.com/YolandaMabusela"&gt;Yolanda Mabusela&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/kamogelo142"&gt;Kamogelo&lt;/a&gt; : a software developer who retweets various learning resources, and has a &lt;a href="https://www.youtube.com/channel/UCUtTPgZxfZv-p9XlMsxmMqQ"&gt;youtube channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/chle_fromtheweb"&gt;Sihle Mabaleka&lt;/a&gt; : App Developer who shares tutorials on their &lt;a href="https://www.youtube.com/channel/UCR6xpz1G0q_YPEMp1I7JEkQ"&gt;youtube channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/itsTiisetso"&gt;Tiisetso&lt;/a&gt; : Physics Student, Coder and Space enthusiast.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/reacoda_"&gt;Reacoda&lt;/a&gt; : facilitates workshops on Robotics &amp;amp; Automation, IoT and Programming&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/mamascoding"&gt;MamasCoding&lt;/a&gt; : They teach moms to code | Founders:  &lt;a href="https://twitter.com/neli_ngqulana"&gt;Neli Ngqulana&lt;/a&gt; &amp;amp; &lt;a href="https://twitter.com/elisja6"&gt;Elisja van Niekerk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/tmg_makerspace"&gt;tmg_makerspace&lt;/a&gt; : seeks to promote and
enable access to innovation through collaborative making, upskilling and purposeful play (R&amp;amp;D)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MatlaliTebello"&gt;Matlali Tebello&lt;/a&gt; : 8 year old who codes, plays piano, sings and is an up and coming IOT specialist&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/africateengeeks"&gt;Africa Teen Geeks&lt;/a&gt; : Africa’s largest computer science education nonprofit that educates &amp;amp; inspire Africa’s future tech innovators &amp;amp; entrepreneurs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MsNoloMokoena"&gt;Nolo Mokoena&lt;/a&gt; : Software Developer and Computer Science Student &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/Magagulawandile"&gt;Magagulawandile&lt;/a&gt; : Tech Consultant &amp;amp; Computer Systems Engineer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/Fikile888"&gt;Fikile&lt;/a&gt; : Expert in Digital Marketing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MokoenaDee"&gt;MokoenaDee&lt;/a&gt; : Forensic Practitioner, Internet Governance, Cybersecurity, Ethical Hacker &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/vukosi"&gt;Vukosi&lt;/a&gt; : Chair of Data Science University of Pretoria&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/KhulekaniMj"&gt;KhulekaniMj&lt;/a&gt; : Graphics &amp;amp; Web Designer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/ITWeb"&gt;ITWeb&lt;/a&gt; : South Africa's leading technology news website and publisher&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/adpead"&gt;Allan Pead&lt;/a&gt; : Electrical Engineer and developer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/GomoMohapi"&gt;Gomo Mohapi&lt;/a&gt; : Gold Microsoft Student Partner and Future Software Engineer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/DataWomenSA"&gt;Data WomenSA&lt;/a&gt; : Encourages more female talent to the big data &amp;amp; analytics field and help them connect, engage and grow&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/Sewagodimo_M"&gt;Sewagodimo_M&lt;/a&gt; : Software developer, Tech Speaker &amp;amp; &lt;a href="https://youtu.be/TlqaXWbNu1k"&gt;Youtuber&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/zandy_keebine"&gt;zandy_keebine&lt;/a&gt; : CEO and Founder of &lt;a href="https://twitter.com/GirlCode_za"&gt;GirlCodeZA&lt;/a&gt;, a nonprofit organization that provides training opportunities for girls interested in learning software development&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/TkeoiB"&gt;TkeoiB&lt;/a&gt; : Developer and Coding Activist for disadvantaged communities, founder of &lt;a href="https://twitter.com/KidsInICT"&gt;KidsInIct&lt;/a&gt;,  an organization that provides ICT and entrepreneurship skills to kids from disadvantaged communities&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/BabesGotBytes"&gt;BabesGotBytes&lt;/a&gt; : A non-profit organisation aimed at teaching and empowering young girls in ICT&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/leahmolatseli"&gt;leahmolatseli&lt;/a&gt; Lawyer focusing on Legal Tech&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/ForestKagiso"&gt;ForestKagiso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/KennaMonnye"&gt;KennaMonnye&lt;/a&gt; : Software Engineer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/CrestonCam"&gt;CrestonCam&lt;/a&gt; : Developer focusing on AgriTech and FoodTech&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/GKSS_VUT"&gt;GKSS_VUT&lt;/a&gt; : a Student Chapter under 
&lt;a href="https://geekulcha.com/about"&gt;Geekulcha&lt;/a&gt; : a platform with a focus on empowering young geeks through ICT skills development and training&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/satechevents_"&gt;satechevents&lt;/a&gt; : shares tech related events in South Africa&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/GDGJohannesburg"&gt;GDGJohannesburg&lt;/a&gt; : Community run developer group based in Johannesburg, South Africa&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/NalediMadlopha"&gt;NalediMadlopha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/PabiForbes"&gt;Pabi Forbes&lt;/a&gt; : Software Engineer and Creator of &lt;a href="https://twitter.com/uteroo_za"&gt;Uteroo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/kgundula"&gt;kgundula&lt;/a&gt; : Developer, Open Source Technologist and Android Dev&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/oscarwhiskylima"&gt;oscarwhiskeylima&lt;/a&gt; : Software Developer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/NdabaMbalenhle"&gt;NdabaMbalenhle&lt;/a&gt; : Mobile Developer &amp;amp; GDGJhb Organiser&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/riggaroo"&gt;riggaroo&lt;/a&gt; : Creative Android Engineer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/droid_shrink"&gt;droid_shrink&lt;/a&gt; : Software Engineer&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/AngelinaMathuso"&gt;Angelina Mathuso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/alienelf"&gt;alienelf&lt;/a&gt; : ML (Machine Learning) Engineer &amp;amp; ML Researcher&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/MmakiJ"&gt;MmakiJ&lt;/a&gt; : Associate Professor at The University of the Western Cape who is passionate about using computing innovations to make an impact&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/vt_codes"&gt;Vutlhari Rikhotso&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/khabubu_phathu"&gt;Phathutshedzo Khabubu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know who else should be on the list, I would be interested in following them and of course feel free to follow &lt;a href="https://twitter.com/lala_tjo"&gt;me&lt;/a&gt; too. &lt;/p&gt;

</description>
      <category>twitter</category>
      <category>networking</category>
      <category>southafrica</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>Final bootcamp project and doubts</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Wed, 29 Apr 2020 15:42:03 +0000</pubDate>
      <link>https://dev.to/thabisegoe/creating-while-drowning-in-doubt-1m2h</link>
      <guid>https://dev.to/thabisegoe/creating-while-drowning-in-doubt-1m2h</guid>
      <description>&lt;p&gt;I went to bootcamp to have a structured learning path and gain confidence in my abilities. My time in bootcamp went by and the confidence never arrived. I still feel the same, however, earlier this year I made a deal with myself to not allow imposter syndrome to dictate my actions. I will share my journey, lessons, and challenges while navigating this transition. &lt;/p&gt;

&lt;p&gt;The last week of my coding bootcamp is dedicated to final projects. You get to decide what to work on. I chose to build a project using React, mainly because I wanted to go more in depth with it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Final Project
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6J1VH2qU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w355imm6q1r96rjoipxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6J1VH2qU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w355imm6q1r96rjoipxc.png" alt="Home vibes logo" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Homevibes is a concept where you use your surroundings to help you discover new music. It is built with a React frontend and Express Backend. I used the Google Vision API and the Spotify Web API. &lt;/p&gt;

&lt;h4&gt;
  
  
  Inspiration
&lt;/h4&gt;

&lt;p&gt;Our bootcamp moved to a remote setting halfway through, due to the current climate. Being home all day, I had a few moments where I was bored and decided to take pictures of random objects using the Google Lens feature on my phone, and searched random phrases on Spotify (I found gems) and this became my final project topic.&lt;/p&gt;

&lt;p&gt;Here is a brief demo:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/413105668" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h4&gt;
  
  
  Structure
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With a weeks deadline and no experience with React Native, I decided to limit it to a website where I can directly upload images instead of using the camera. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To keep myself sane, I created a basic plan using Notion before building the project. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kdZq4hN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fj4rjtycvotp6ibug0li.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kdZq4hN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fj4rjtycvotp6ibug0li.png" alt="Notion Plan For Final Project" width="880" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Challenges
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;It was challenging to work with the Spotify API and it took a day  to wrap my head around the authentication flow. I made so many requests,I am surprised that they did not ban me.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--29_lIQ4Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9b45e7f1dyblgx7b2z8m.jpg" alt="Spotify Web Api Graph" width="880" height="471"&gt;
&lt;/li&gt;
&lt;li&gt;One particularly difficult area was organization and structure of the code. I wanted to properly utilize React and build reusable components, I did not accomplish that yet, the components are very specific to their role. &lt;/li&gt;
&lt;li&gt;I had some issues with data flow in the beginning, the moment I stepped back and visualized the data flow the easier it became. &lt;/li&gt;
&lt;li&gt;Avoiding distractions when I found amazing songs&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Thought Process and Lessons Learnt
&lt;/h4&gt;

&lt;p&gt;For styling I chose styled-components, because I like the CSS-in-js structure. I chose to use the Spotify Web Playback SDK, which made it easier to focus on the endpoints rather than building a player that can only play 30 second previews.&lt;/p&gt;

&lt;p&gt;This project helped me to gain more React knowledge, practice with ES6+ syntax, hooks and updating state across the entirety of the project.&lt;/p&gt;

&lt;p&gt;The Google Vision API is not free after the first 1000 requests, once I got the desired responses back, I created my own placeholder JSON data to loop through and use as fake data for the Spotify search during development. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dwv9XDHn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdmioozw6znfdeezkwas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dwv9XDHn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdmioozw6znfdeezkwas.png" alt="Google Vision API code" width="880" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Deployment &amp;amp;&amp;amp; Future Plans
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;I made sure to hide API keys but I am still hesitant with deploying the project until I am 100% sure that I am not exposing anything. I plan on making the the project publicly available on Github soon.&lt;/li&gt;
&lt;li&gt;I want to refine this project in the future and hopefully post a tutorial, but right now, I need to focus on learning data structures and algorithms. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I finally want to say, when I first had this idea, I had no idea if I could do it, and working with two APIs sounded intimidating. Breaking it down made it manageable.&lt;/p&gt;

&lt;p&gt;I hope that this post encourages someone to just play around and build something, I struggle with doubt but I still made something. You can too.&lt;/p&gt;

</description>
      <category>react</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>bootcamp</category>
    </item>
    <item>
      <title>Learn how to code for free in Berlin</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Fri, 14 Feb 2020 12:22:24 +0000</pubDate>
      <link>https://dev.to/thabisegoe/learn-how-to-code-for-free-in-berlin-4098</link>
      <guid>https://dev.to/thabisegoe/learn-how-to-code-for-free-in-berlin-4098</guid>
      <description>&lt;h2&gt;
  
  
  Where can you learn how to code in Berlin?
&lt;/h2&gt;

&lt;p&gt;There is no shortage of Berlin learning groups and meetups if you want to learn how to code. If you are not in Berlin, similar resources can be found by heading to meetup.com, and choosing the "tech" meetups in your city. Many of the listed resources have chapters in different cities worldwide. I hope you find something that fits for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I will mostly stick to free options as bootcamps are not accessible to
everyone.
&lt;/li&gt;
&lt;li&gt;Many meetups start at 18:30 or later, which is helpful if
you are working.  Unfortunately many of my favourite meetups often clash, so you will have to pick your focus.&lt;/li&gt;
&lt;li&gt;90% of the events are in english, but you will usually find a tutor who speaks German if you prefer that&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Delivery Hero Tech Academy 2021&lt;/strong&gt;&lt;br&gt;
Delivery Hero, in partnership with &lt;a href="https://digitalcareerinstitute.org/"&gt;Digital Career Institute&lt;/a&gt; is launching a new program that teaches students Java and Python to start a career as an entry-level engineer at Delivery Hero.&lt;br&gt;
&lt;em&gt;Applications&lt;/em&gt;:  Applications are open until &lt;strong&gt;15 July 2021&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn more about the program and &lt;a href="https://careers.deliveryhero.com/global/en/techacademy"&gt;apply here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;No prior experience in coding is required to join, 20 students will be selected to participate in the program.&lt;/li&gt;
&lt;li&gt;Program will take 9.5 months long. All the necessary equipment and tools you will need are fully paid for. You will earn a monthly intern salary for the entire duration of the program. &lt;/li&gt;
&lt;li&gt;You need to be based in Berlin for contractual reasons, and comfortable speaking and writing in English. All courses will be conducted online with DCI teachers due to the pandemic. &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;TechLabs Berlin&lt;/strong&gt;&lt;br&gt;
TechLabs is new to Berlin. The TechLabs Digital Shaper Program combines online learning, project work as well as regular community events at one of their locations. &lt;br&gt;
You can choose one of 4 tracks: Web Development, Data Science, Artificial Intelligence or User Experience. The workload is around 5-10 hours per week for 4 months including a final project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://techlabsorg.typeform.com/to/voTAXD?fbclid=IwAR0Jd9_fHzNSI3VM9ksBJJtdgtHuJZTiFSWRypSYskD3rLf4g6u_rCJr9iE"&gt;Applications are open until 17.04.2020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Due to the current situation they will kickoff their semester entirely online. Brief introduction to their mission and goals &lt;a href="https://www.youtube.com/watch?v=iL8MZkqpUIA&amp;amp;fbclid=IwAR2HxwtetSzUBts9t7CvlXVisgDcsgofHUrSOqY7-nObzGPF9JqQov58Urg"&gt;here.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://www.techlabs.org/location/Berlin?fbclid=IwAR3JeBdiPrhpoQPMgpfntB-tQSFxIYgiNh8Vnc_JvvcyNEUHLGcerRlsJHo"&gt;TechLabs Berlin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Women who Code Berlin&lt;/strong&gt;&lt;br&gt;
Women Who Code is the largest and most active community of engineers focused on inspiring women to excel in technology careers. &lt;br&gt;
They often have full scale workshops that take place over a few weeks. I will be heading to their &lt;a href="https://www.meetup.com/Women-Who-Code-Berlin-Germany/events/268654644/"&gt;Intro to SQL workshop&lt;/a&gt; soon. They also have biweekly hack evenings, where you can work on your side project, online course, tutorials etc. It is not language specific and there are more experienced people who can help you if you get stuck.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://www.womenwhocode.com/berlin"&gt;Women Who Code Berlin&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/Women-Who-Code-Berlin-Germany/"&gt;Women Who Code Berlin Meetup&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tip&lt;/em&gt;: Set up notifications for their meetup page and rsvp as soon as you can, as there is often a waiting list for their events. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Women Techmakers Berlin&lt;/strong&gt;&lt;br&gt;
I usually confuse it with Women Who Code, but I blame the similar colour schemes. WTM Berlin is an amazing group that also offers workshops, intense study sessions and events. One of the most notable is the &lt;a href="http://wtmberlin.com/javascript-crash-course/"&gt;Javascript Crash Course&lt;/a&gt; , they have an archive of the classes. They also live streamed it to people who could not make it to the classes. &lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/Women-Techmakers-Berlin/"&gt;WTM Berlin Meetup&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="http://wtmberlin.com/"&gt;WTM Berlin&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PyLadies Berlin&lt;/strong&gt;&lt;br&gt;
They host monthly meetups which usually follow a short talk + workshop formula.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="http://berlin.pyladies.com/"&gt;Berlin Pyladies&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/PyLadies-Berlin/"&gt;Berlin Pyladies Meetup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heart of Code&lt;/strong&gt;&lt;br&gt;
A hackerspace for women and those who identify as a women. &lt;br&gt;
They also have various open learning and working groups, for example, topics focused on Python, data visualization, 3D printing, IT security, cycle tracking app, Java, hardware &amp;amp; flashing and many more.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="http://heartofcode.org/"&gt;Heart Of Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Women who Go&lt;/strong&gt;&lt;br&gt;
A study group for women that want to learn the Go(also known as Golang) language. You do not need to have experience to participate.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="//www.womenwhogo.org"&gt;Women Who Go&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/Women-Who-Go-Berlin"&gt;Women Who Go Meetup&lt;/a&gt;  &lt;em&gt;Study resources&lt;/em&gt;: &lt;a href="https://github.com/wwgberlin/GoStudyGroup"&gt;Go Study Group&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codebar&lt;/strong&gt;&lt;br&gt;
Codebar is one of my favourite meetups. It is often hosted every second Monday in different offices. They also have a small library where you can borrow books, I am currently reading their Eloquent Javascript book. &lt;br&gt;
Their workshops are available to women, LGBTQ and people who are underrepresented in the tech industry.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://codebar.io/berlin"&gt;Codebar&lt;/a&gt;&lt;br&gt;
They also share their tutorials online: &lt;a href="http://tutorials.codebar.io/"&gt;Codebar Tutorials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Tech School&lt;/strong&gt;&lt;br&gt;
OpenTechSchool is a movement aiming to offer free tech education. Their events are open to technology enthusiasts of all genders, backgrounds, and experience levels, willing to coach or learn in a friendly environment. They have learning materials that are shared and collectively improved by the online community and anyone is welcome to use it to organize new OTS chapters anywhere in the world. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="http://www.opentechschool.org/berlin/"&gt;Open Tech School&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;:&lt;a href="https://www.meetup.com/opentechschool-berlin/"&gt;Open Tech School Meetup&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Learning materials&lt;/em&gt;:&lt;a href="https://www.opentechschool.org/material.html"&gt;OTS Study&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GDG Berlin Android&lt;/strong&gt;&lt;br&gt;
They are the Berlin Google Developer Group (GDG) focused on Android development. They host a weekly Android Co-Learning event which is a mix of experienced developers and beginners. &lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/berlindroid/"&gt;GDG Meetup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open source coding in Berlin&lt;/strong&gt; &lt;br&gt;
An open-source coding workshop aimed at those who are curious about programming.&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt;: &lt;a href="https://www.meetup.com/Open-Source-Coding-in-Berlin/"&gt;Open Source Workshop&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Less frequent events
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rails Girls Berlin&lt;/strong&gt;&lt;br&gt;
They organize &lt;em&gt;free workshops for women&lt;/em&gt; without prior experience in programming. The workshops are led by skilled Ruby on Rails programmers. They are focused on keeping the group sizes small to be able to focus on the student and stick to one dedicated coach per two or three learners. I was lucky to attend a workshop and in a few hours, I had created a basic website that had some crud functionality and I learnt how to deploy it to Heroku. That experience led me to play around with uploading projects, and eventually my blog. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="http://railsgirlsberlin.de/"&gt;Rail Girls Berlin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Django Girls&lt;/strong&gt;&lt;br&gt;
 They host free, one-day workshops for beginners that will teach you how to create a website using Python and Django. Unfortunately the workshops happen every few months, but you can subscribe to their mailing list to be notified of the next one. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://djangogirls.org/berlin/"&gt;Django Girls Berlin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ClojureBridge Berlin&lt;/strong&gt;&lt;br&gt;
ClojureBridge is a free workshop introducing women and non-binary people to programming and the local technology community. Unfortunately they have not had a workshop in a long time, but I suggest signing up to their mailing list for updates.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;:  &lt;a href="https://clojurebridge-berlin.org/"&gt;ClojureBridge Berlin&lt;/a&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Notable mentions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Geekettes&lt;/strong&gt;&lt;br&gt;
A community for women in tech. They host talks and organize workshops to teach and refine skills. They also host a unique  &lt;a href="http://berlingeekettes.github.io/hackathon/"&gt;hackathon&lt;/a&gt; . They have a  &lt;a href="http://www.geekettes.io/cities/berlin/mentorship"&gt;mentorship program&lt;/a&gt;  that pairs ambitious tech professionals and entrepreneurs with experienced mentors.&lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;:  &lt;a href="http://www.geekettes.io/"&gt;Geekettees&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paid bootcamp events&lt;/strong&gt;&lt;br&gt;
Bootcamps like Le Wagon, Ironhack and Wild Code School often have workshops as part of their &lt;em&gt;marketing strategy&lt;/em&gt; to attract students, some of the classes are fun and can be a way to try out coding. Do attend the graduation events and talk to previous students before you decide to join one. Take your time researching them. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Co-up space&lt;/strong&gt;&lt;br&gt;
co.up is a community space that provides affordable event and workshop spaces in Kreuzberg. They also provide free space for public and free events in the local tech and creative scene. They host a lot of meetups, so follow them on their accounts. &lt;br&gt;
&lt;em&gt;Events&lt;/em&gt;: &lt;a href="https://co-up.de/events/"&gt;co-up events&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Calendar&lt;/em&gt;: &lt;a href="https://calendar.google.com/calendar/embed?src=qlat42csulq2krlclc3rk3e8io@group.calendar.google.com&amp;amp;ctz=Europe/Berlin&amp;amp;pli=1"&gt;Events&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Free coding "bootcamps"
&lt;/h3&gt;

&lt;p&gt;These options below are similar to a bootcamp structure, where they take you from a to b.  I am familiar with all of them and I think they are a good alternative to paying for a bootcamp. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeDoor&lt;/strong&gt;&lt;br&gt;
CodeDoor is a non-profit organisation that provides refugees and migrants with the opportunity to learn to code. They have developed their own learning platform for students, which they also provide to NGOs and other initiatives. You will have to go through an interview phase to be accepted. They meetup every Monday afternoon around 4pm in Charlottenburg, Berlin for learning support, additional training and exchange. I highly recommend them. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://codedoor.com/"&gt;CodeDoor&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup&lt;/em&gt; : &lt;a href="https://www.meetup.com/CodeDoor-meets-BuddyForce"&gt;CodeDoor Meetup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ReDI&lt;/strong&gt;&lt;br&gt;
ReDI School of Digital Integration is a non-profit digital school for tech-interested locals and newcomers in Germany. They have different programs available and the one that is similar to a bootcamp structure is their 4 month career program that consists of two weekly evening classes (two hours each) taught by volunteers. They are selective and you will need to go to their career information day first before being sent the link to apply for the program. Sometimes their response is really slow, but I think they are a solid option. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://www.redi-school.org/berlin"&gt;ReDI School&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frauenloop&lt;/strong&gt;&lt;br&gt;
FrauenLoop is an evening program that trains women with resident, immigrant, refugee, non-science, or family-status backgrounds who might otherwise face obstacles to starting or re-entering professional tech roles. They teach 9-month tracks of progressive full-stack web development, data science, and software manual testing and automation, but the registrations are split into 3 months. It is not entirely free, I had to pay 200 euros for the 3 month program I attended. It was hosted by Microsoft Berlin, and was a great experience.You will need to supplement it with another course (for example, an online course) if you want to learn more as it is only once a week. It was not the perfect fit for me because I was a bit advanced for the track I joined and I found it too slow, I should have spoken up to join the intermediate group. &lt;br&gt;
&lt;em&gt;Website&lt;/em&gt;: &lt;a href="https://www.frauenloop.org/"&gt;FrauenLoop&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative options : Paid bootcamp funding
&lt;/h3&gt;

&lt;p&gt;If you are unemployed or at risk of unemployment the job center can pay for your coding bootcamp. You need to be registered in Germany to be eligible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a bildungutschein?&lt;/strong&gt;&lt;br&gt;
A Bildungsgutschein is an Education Voucher issued by the Agentur für Arbeit (job center). The aim of the Bildungsgutschein is to train people with new skills in order to find a new career path or job. Once you’re issued with the voucher, you’ll need to take the course within the timeframe specified. The voucher is valid for 3 months. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get a Bildungsgutschein&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Contact your Agentur für Arbeit and  &lt;a href="https://www.arbeitsagentur.de/privatpersonen"&gt;set up an appointment.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Contact the bootcamp and ask for their information packet. It will include their syllabus in German, a report of the job market, and their "registration number"&lt;/li&gt;
&lt;li&gt; Prepare a motivation letter for your job agent explaining why you want to learn to code. You can use the following questions to build your motivation letter:

&lt;ul&gt;
&lt;li&gt;  Where did you work before?&lt;/li&gt;
&lt;li&gt;  Why do you want to change your career path or why do you need the coding skills for the future?&lt;/li&gt;
&lt;li&gt;  Where do you see yourself after the bootcamp with your new coding skills?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Reality&lt;/strong&gt; Be prepared, and you will be fine. I had a stack of documents, and my advisor was impressed by the fact that I knew details about the course I wanted to take, and issued me the voucher. They want to see that you have done your research. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens after your appointment at the Agentur für Arbeit/Job Center?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you received a positive outcome, you need to go to the bootcamp for them to sign a contract with you and mail the documents back to the job center.&lt;/li&gt;
&lt;li&gt;  If you are rejected, try again. Ask the bootcamp for advice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also attend other IT focused programs that are listed on the Bildungsgutschein website. I do not speak German yet, so that did not work for me.&lt;br&gt;
These are the popular bootcamps that have a Bildungsgutschein option available. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://info.lewagon.com/berlin_bildungsgutschein"&gt;9 week/24 weeks part-time Le Wagon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://www.spiced-academy.com/learn-to-code-free/"&gt;Spiced Academy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://careerfoundry.com/"&gt;The online bootcamp, CareerFoundry&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Tip&lt;/em&gt;&lt;/strong&gt; If you go this route, time your appointment with the job center well. It can take up to a month to see an advisor who will issue you the voucher. You also need to contact the bootcamp and go through their application/interview process. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
The organizers take their job seriously and offer safe spaces to learn, do not be intimidated to attend the events. The events follow the &lt;a href="https://berlincodeofconduct.org/"&gt;Berlin code of conduct&lt;/a&gt;. Make sure to read it before attending them.There are many different routes you can take on your journey to learn programming. I hope this guide helps you as a starting point. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>webdev</category>
      <category>free</category>
    </item>
    <item>
      <title>Emmet love</title>
      <dc:creator>Thabi </dc:creator>
      <pubDate>Thu, 13 Feb 2020 17:22:40 +0000</pubDate>
      <link>https://dev.to/thabisegoe/emmet-love-4be5</link>
      <guid>https://dev.to/thabisegoe/emmet-love-4be5</guid>
      <description>&lt;p&gt;I have recently started my own blog to keep track of my learning progress, this will serve as a blog post rather than a full tutorial. &lt;/p&gt;

&lt;p&gt;Whenever I ask for help with a coding program, and the person asks me to change a certain line, I always feel clunky and slow with my typing. I need to take full advantage of shortcuts and extensions available. One of them is Emmet. &lt;/p&gt;

&lt;h3&gt;
  
  
  What is Emmet?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://emmet.io/" rel="noopener noreferrer"&gt;Emmet&lt;/a&gt; is a plugin that comes built in VScode (and other IDE's, if not, you can add it as an extension). It is a plugin that improves your workflow, well if you know how to use it!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the name Emmet?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Emmet&lt;/strong&gt; is a word that originally meant ant, which is known to carry over 50 times of its weight. The word is also similar to "emit," which is basically what Emmet does when it expands abbreviations.&lt;/p&gt;

&lt;p&gt;The HTML Pair Matcher allows you to locate the matching open/close tag for the tag at the current cursor position.&lt;br&gt;
I was only using the html tag matcher from emmet, but it is so much &lt;em&gt;more powerful.&lt;/em&gt; There is no reason to be intimidated by emmet, I thought I would need to watch a video tutorial to grasp it but the documentation is clear and to the point. &lt;br&gt;
The cool thing is: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The syntax is inspired by CSS selectors&lt;/li&gt;
&lt;li&gt;You can customize your own snippets&lt;/li&gt;
&lt;li&gt;It is written in pure Javascript&lt;/li&gt;
&lt;li&gt;Emmet has intuitive abbreviations. Many of them are triggered by a single character. For example &lt;code&gt;btn&lt;/code&gt; expands to &lt;code&gt;button&lt;/code&gt;.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.lensdump.com%2Fi%2FjAquj0.png" alt="Code screenshot"&gt;
&lt;/li&gt;
&lt;li&gt;You can do a lot by adding values to your abbreviations. If I type &lt;code&gt;li*10&lt;/code&gt; I will get 10 list items.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.lensdump.com%2Fi%2FjAqYP3.png" alt="Code emmet screenshot"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://docs.emmet.io/abbreviations/syntax/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; is beginner friendly, I highly recommend opening it side to side with your IDE and practising the shortcuts. They also have a cheat sheet available.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sidenote : Someone needs to invent flexible cheatsheet items. I have seen mousepads with vscode shortcuts, but I need more options. Maybe blankets? Or interchangeable phone pop sockets that have different options available?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Gradients
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;lg(left,#808,#FFF)&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;The expected output :&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[css]background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#808), to(#FFF));&lt;br&gt;
background-image: -webkit-linear-gradient(left, #808, #FFF);&lt;br&gt;
background-image: -moz-linear-gradient(left, #808, #FFF);&lt;br&gt;
background-image: -o-linear-gradient(left, #808, #FFF);&lt;br&gt;
background-image: linear-gradient(left, #808, #FFF);[/css]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;I love making pretty gradients with third party GUIs, but it would be nice to do it all in my IDE.&lt;br&gt;
Only issue is that the documentation did not work for me in this case, I tried googling it but I cannot figure out why it did not work. If someone has a tried and tested solution to using the gradients shortcut in vscode please feel free to share. &lt;/p&gt;

&lt;h4&gt;
  
  
  Repeated “Lorem ipsum”
&lt;/h4&gt;

&lt;p&gt;I thought I escaped Lorem Ipsum when I "left" design for programming, but it has come back to haunt me.&lt;/p&gt;

&lt;p&gt;You can use &lt;code&gt;lorem&lt;/code&gt; generator inside repeated elements to create tags filled with completely random sentences. For example, &lt;code&gt;p*10&amp;gt;lorem&lt;/code&gt; will generate 10 paragraphs with random sentences in them.&lt;/p&gt;

&lt;p&gt;All in all, Emmet is pretty great. I did not know much about it, but I hope it inspires you to try it out.&lt;/p&gt;

&lt;h4&gt;
  
  
  Valentine's Day
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;cool discovery : I wanted to share a code snippet, and I discovered &lt;a href="[https://carbon.now"&gt;Carbon&lt;/a&gt;. I have always wondered what people used to create beautiful code snippets.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the spirit of the commercial holiday coming up, here is a love letter to programming, and to my first post here!&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%2Fi.lensdump.com%2Fi%2FjAqDdD.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%2Fi.lensdump.com%2Fi%2FjAqDdD.png" alt="Code screenshot, infinite loop javascript"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>vscode</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
