{"componentChunkName":"component---src-templates-post-post-jsx","path":"/blog/promises-in-javascript","result":{"data":{"markdownRemark":{"html":"<p>Promises in <code class=\"language-text\">Javascript</code> is a very interesting topic and a bit complicated topic as well. Many a time we come across promises but we fail to identify them. Promises are very common in <code class=\"language-text\">Javascript</code> programming.</p>\n<h2>So what are promises in Javascript ?</h2>\n<p>So a <code class=\"language-text\">Promise</code> is an object that represents an eventual completion or failure of an asynchronous operation and its resulting value. Which means promises return some value after a particular interval of time. The value can either be a success value or a failure value.</p>\n<p>So let's consider the below code</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">let</span> promiseObj <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token string\">'some promise'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>promiseObj<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n    * the output will be Promise {&lt;pending>} not 'some promise'\n    */</span></code></pre></div>\n<p>A promise can be any of the below three states at a point of time:</p>\n<ol>\n<li><strong>pending</strong> - The initial state when a promise is created.</li>\n<li><strong>fulfilled</strong> - The state when the promise is executed successfully.</li>\n<li><strong>rejected</strong> - The state when a promise fails due to some error or some condition.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">const</span> promise <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span> \n        <span class=\"token keyword\">try</span><span class=\"token punctuation\">{</span>\n            <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span> \n                <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token string\">'resolved promise'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \n\n    <span class=\"token comment\">// this will print - 'resolved promise'</span>\n    promise<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>The setTimeout function in the above code will be executed after 5 seconds. So the promise will settle after 5 seconds. Hence we can say that the promise will be resolved after 5 seconds. After that  <code class=\"language-text\">promise.then((val) =&gt; console.log(val))</code> block will be executed and will return the output <code class=\"language-text\">resolved promise</code>.</p>\n<p>The <code class=\"language-text\">Promise</code> object takes in executor function as a parameter. </p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span>executor_function<span class=\"token punctuation\">)</span></code></pre></div>\n<p>The executor function has two parameters again <code class=\"language-text\">resolve</code> or <code class=\"language-text\">reject</code>. Let's say you want to settle the promise with a success value then you do it with the <code class=\"language-text\">resolve</code> method, which is the first parameter to the executor method. If you want to settle a promise with a failure value then you use the reject method, which is the second parameter to the executor method.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve <span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">try</span><span class=\"token punctuation\">{</span>\n            <span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token comment\">/** resolve some suceess way over here */</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token punctuation\">}</span><span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token comment\">/** reject if some error occured */</span>\n            <span class=\"token function\">reject</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span>\n\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2>Promise methods</h2>\n<ol>\n<li>\n<h3>Promise.all()</h3>\n<p><code class=\"language-text\">Promise.all()</code> method accepts an array as a parameter. <code class=\"language-text\">Promise.all()</code> waits for all the <code class=\"language-text\">Promises</code> in the array passed to either be resolved or rejected and returns the new array of resolved promises.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">const</span> promise1 <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token number\">32</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> promise2 <span class=\"token operator\">=</span> <span class=\"token number\">1234</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> promise3 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span> <span class=\"token string\">'resolve something'</span><span class=\"token punctuation\">,</span><span class=\"token number\">2000</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n    Promise<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>promise1<span class=\"token punctuation\">,</span> promise2<span class=\"token punctuation\">,</span> promise3 <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>\n        <span class=\"token comment\">/** \n        * will console the values after 2 seconds\n        * [32, 1234, 'resolve something']\n        */</span>\n        <span class=\"token parameter\">val</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span></code></pre></div>\n<p>The problem with <code class=\"language-text\">Promise.all</code> is, suppose that one promise fails or gets rejected then the entire chain of promises fails, throwing the respective error. Hence you need to be careful while performing <code class=\"language-text\">Promise.all</code>.\nThe advantage of <code class=\"language-text\">Promise.all</code> is it can perform concurrent tasks. But we need to make sure that none of the promises in the array fail.</p>\n</li>\n<li>\n<h3>Promise.allSettled()</h3>\n<p><code class=\"language-text\">Promise.allSettled</code> takes an array as a parameter and waits for all the promises to settle. The settled promise can either be a rejected or resolved value. Once the promises are settled it returns an array of settled promises. For a resolved promise the return object will have the status field as fulfilled and value field as the resolved value of that promise. For a rejected promise the return object will have the status field as rejected and instead of value field it will have a reason field with the reason for the promise to get rejected.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">const</span> promise1 <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token string\">'resolved value'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> promise2 <span class=\"token operator\">=</span> <span class=\"token number\">23</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">const</span> promise3 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>reject<span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'i will be rejected'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Promise<span class=\"token punctuation\">.</span><span class=\"token function\">allSettled</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>promise1<span class=\"token punctuation\">,</span> promise2<span class=\"token punctuation\">,</span> promise3<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">values</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>values<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">/**\n*\n* output for the above code:\n*\n* Array [   Object { status: \"fulfilled\", value: 'resolved value' }, \n*           Object { status: \"fulfilled\", value: 23 }, \n*           Object { status: \"rejected\", reason: \"i will be rejected\" }\n*       ]\n*\n*/</span></code></pre></div>\n</li>\n<li>\n<h3>Promise.race()</h3>\n<p><code class=\"language-text\">Promise.race</code> accepts an array as a parameter and returns the value of the first settled promise. The settled promise may either be resolved or rejected. If it is rejected, it is rejected with the reason from the first promise that was rejected.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">const</span> promiseMeApple <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">🍎</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> promiseMeGrapes <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve<span class=\"token punctuation\">,</span> reject</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> <span class=\"token number\">300</span><span class=\"token punctuation\">,</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">🍇</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Promise<span class=\"token punctuation\">.</span><span class=\"token function\">race</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>promiseMeApple<span class=\"token punctuation\">,</span> promiseMeGrapes<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">//resolved value </span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// expected output: \"🍎\"</span></code></pre></div>\n</li>\n<li>\n<h3>Promise.resolve()</h3>\n<p><code class=\"language-text\">Promise.resolve</code> accepts a value to be returned by the new <code class=\"language-text\">Promise</code> as a parameter and return the new <code class=\"language-text\">Promise</code> with the resolved value.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">let</span> melonPromise <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">🍉</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/** will console log : [object Promise] */</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>melonPromise<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n    * if u want to console the value of promise then use a callback\n    *\n    * This will print 🍉 as output\n    */</span>\n    melonPromise<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>   </code></pre></div>\n</li>\n<li>\n<h3>Promise.reject()</h3>\n<p><code class=\"language-text\">Promise.reject</code> accepts the reason for the promise to be rejected as a parameter and return a rejected promise with the reason.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">let</span> tomatoPromise <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">reject</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">I don't like Tomatos 🍅 </span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/** will console log : Promise {&lt;rejected>: \"I don't like Tomatos 🍅 \"} */</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>tomatoPromise<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">/**\n    * if u want to console the value of promise then use a callback\n    *\n    * This will print \n    *\n    * : Uncaught (in promise) I don't like Tomatos 🍅 \n    *\n    * as output\n    */</span>\n    tomatoPromise<span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>   </code></pre></div>\n</li>\n</ol>\n<h2>Application of promises</h2>\n<p>The main advantage of promises is performing tasks concurrently. With promises we can perform tasks concurrently which will reduce the time significantly.</p>\n<p>Let's consider making an API call using <code class=\"language-text\">async await</code> . </p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">performingTwoApiCalls</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> burgerData <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/get-api-call-for-burget-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">const</span> pizzaData  <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/get-api-call-for-pizza-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">/**\n         * \n         * some processing with the above data\n         * \n         */</span>\n        <span class=\"token keyword\">const</span> combineBurgerAndPizzaData <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>burgerData<span class=\"token punctuation\">,</span> <span class=\"token operator\">...</span>pizzaData<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span></code></pre></div>\n<p>If we look at the above example the second API call has to wait for the first API call to finish. A better way of doing this using <code class=\"language-text\">Promises</code> is</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">    <span class=\"token keyword\">function</span> <span class=\"token function\">performingTwoApiCalls</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> burgerPromise <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/get-api-call-for-burget-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">const</span> pizzaPromise  <span class=\"token operator\">=</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">resolve</span><span class=\"token punctuation\">(</span><span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/get-api-call-for-pizza-data'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        Promise<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span> burgerPromise <span class=\"token punctuation\">,</span> pizzaPromise <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span><span class=\"token punctuation\">)</span><span class=\"token operator\">=></span><span class=\"token punctuation\">{</span>\n                    <span class=\"token keyword\">const</span> burgerData <span class=\"token operator\">=</span> val<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token keyword\">const</span> pizzaData  <span class=\"token operator\">=</span> val<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n                    <span class=\"token keyword\">const</span> combineBurgerAndPizzaData <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>burgerData<span class=\"token punctuation\">,</span> <span class=\"token operator\">...</span>pizzaData<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token punctuation\">}</span></code></pre></div>\n<p>In the above example, the two API calls are performed asynchronously using the <code class=\"language-text\">Promise.all</code> method and the resolved values are extracted for further processing.</p>","timeToRead":5,"frontmatter":{"title":"BLink - an all in one events solution","date":"20 Dec 2019","tags":["android","java","opencv"],"path":"blog/promises-in-javascript","excerpt":"An events solution application that is targeted at reducing queues, smoothening event registration processes, and for users to seamlessly expand and build their professional network.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='410'%20viewBox='0%200%20400%20410'%20preserveAspectRatio='none'%3e%3cpath%20d='M17%2044l-1%2011a18073%2018073%200%20002%20309l1%203c-1%201%200%203%201%204l1%204c0%202%203%205%205%205s2%201%202%202c-1%202%204%206%208%206l3%202%20159%201a1115%201115%200%2000169-3c2%200%207-5%206-6l1-2h2l2-1%202-5%201-3%202-4c0-2%200-2%201-1%202%205%202-28%202-166a3926%203926%200%2000-2-150v-5l-1%207-1%20157c0%20170%201%20153-8%20163-9%209%208%208-171%208l-163-1c-6-1-14-7-18-13l-2-4-1-159a8617%208617%200%2000-2-159m61%2096l-1%2061%201%2061h26c47%200%2061-4%2068-22%206-17%200-32-15-39-5-3-5-3%200-6%2016-10%2014-36-3-49-2-2-10-4-18-6H78m224%200c-8%202-12%208-13%2017v7l3%205c3%203%209%206%2014%206%2012%200%2020-12%2017-23-3-8-13-14-21-12m-103%201l-8%201v120h78v-11l-1-12-24-1-25-2-1-48c0-51%201-48-6-48l-13%201m-94%2035l1%2013%2013-1c13%200%2013%200%2016-3%203-2%203-3%203-8%200-11-3-13-22-14h-11v13m194%2019c-4%201-7%204-9%209-2%203-2%206-2%2030l1%2028h14l18-1h3v-26a160%20160%200%2000-2-30c0-8-13-14-23-10m-193%2016c-1%200-2%2026%200%2027%203%201%2026%200%2032-2l6-2%201-11c0-7-2-9-12-11-9-1-25-2-27-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":0.9767441860465116,"src":"/static/f983134a008a6eccfceeeff5c61e5b36/1b0b3/blink.jpg","srcSet":"/static/f983134a008a6eccfceeeff5c61e5b36/1b0b3/blink.jpg 168w","sizes":"(max-width: 168px) 100vw, 168px"}}}}},"allMarkdownRemark":{"edges":[{"node":{"frontmatter":{"path":"blog/icbs","title":"Consultation Booking System","tags":["python","firebase","raspberrypi"],"excerpt":"An integrated professor-student realtime consultation booking system.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='234'%20viewBox='0%200%20400%20234'%20preserveAspectRatio='none'%3e%3cpath%20d='M171%2046c-14%202-26%206-26%208h2c2-6%2041-8%2085-6%2021%201%2023%202%2026%209%204%207%203%2045-1%2052-3%205-15%206-57%206-35%200-43%200-51-5l-3-1c0%201%204%204%2011%206%2011%203%2091%202%2098-2%205-3%207-12%207-35%201-24-3-30-17-31-12-1-66-2-74-1m-31%2012a332%20332%200%20002%2044c3%200%203-2%203-15%200-20-1-29-3-30l-2%201m54%200c-2%201%200%2041%202%2043h8c9-1%2013-5%2012-11-1-4-5-9-8-11-2%200-1-1%202-4%206-6%206-9%202-14-4-3-4-3-11-4l-7%201m-29%202c-9%206-13%2022-8%2032%204%207%206%208%2016%209%208%200%208%200%208-2s-2-3-8-3c-8%200-12-4-14-13-1-9%208-23%2013-20%202%202%204%201%204-1%200-4-6-5-11-2m67%200c-3%202-6%207-6%2010%200%204%202%206%208%209%2010%204%2014%2010%209%2014-2%203-6%202-11-1-4-2-5-2-6-1-5%205%2014%2012%2020%207%208-6%203-17-9-23-6-3-7-5-6-8%202-4%206-5%2011-5h5c0-4-11-5-15-2m-35%203l1%207v5h3c7-2%2011-7%208-11-2-3-13-4-12-1m2%2025c0%209%200%209%204%208%2010-1%2011-9%201-13-6-3-6-3-5%205m-59%2048v7h3c3%200%206-3%205-5v-4c0-3-1-4-4-4h-4v6'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.7045454545454546,"src":"/static/fba3ec7bc8986a5670124b1e4f67f29f/4fe8c/icbs.jpg","srcSet":"/static/fba3ec7bc8986a5670124b1e4f67f29f/aabdf/icbs.jpg 150w,\n/static/fba3ec7bc8986a5670124b1e4f67f29f/9dc27/icbs.jpg 300w,\n/static/fba3ec7bc8986a5670124b1e4f67f29f/4fe8c/icbs.jpg 600w,\n/static/fba3ec7bc8986a5670124b1e4f67f29f/9842e/icbs.jpg 900w,\n/static/fba3ec7bc8986a5670124b1e4f67f29f/50ba2/icbs.jpg 1109w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/stagecraft","title":"StageCraft - a neural network based game that helps actors build acting skills","tags":["tensorflow","opencv","tkinter"],"excerpt":"Winner for HackNRoll 2019, a gamified application that allows users to improve their acting skills by thriving on a deep neural network emotion classifier.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='253'%20viewBox='0%200%20400%20253'%20preserveAspectRatio='none'%3e%3cpath%20d='M164%205c-3%203-3%205-3%208l-3%202-2%201h2c5-1%204%201-2%206l-5%206%206-5%207-4-1%202c-2%201-3%203-1%203l-1%204c-2%204-2%205-1%205l-1%205c-2%204-4%207-4%204h-2l-3-1-1-1c-2%202-9-1-8-3h-7l-5-1c-2%200%208%204%2012%204%206%202%207%202%203%207l-3%206%204-5c4-6%2010-7%206-1l-1%204%203-3c1-4%203-5%203-2h1c1-1%201-1%201%201l-1%203-1%201v-2c0-2%200-2-1%200-1%203-5%205-5%203h-1c-2%202-8%204-8%202h-1c-1%202-2%202-2%201l-2-1v1c2%202-7%204-9%203h-1c1%201%200%202-1%202-1%201-1%201%201%201l3%201h1c-1-2%205-5%206-3l3-1%205-2c3-1%203-1%203%202l1-1c1-3%205-5%205-3h4c0-2%203-3%204-2v2c-1%202%200%203%202%201l-4%207c-5%207-5%207-7%205l-1-2c0-1%201-1%201%201h1l2-4c2-2%202-3%200-3h-1l-2%203h-1c2-5%202-7%200-3-2%205-4%206-5%203%200-1-1-2-2-1l-1%201c1%200-3%2010-5%2011l-2-2h-1c1%202%200%202-1%202-2%200-2%200%200%201l3%202-2%201-3%201-1%202c-1%203%202%203%203%200h1c1%202%201%202%202-1l1-3%202%202%202%204%201%201v2c-1%201-1%201-1-1l-2%203-2%205-1-3c0-2-1-3-2-3v3l1%202c1%202%201%202-1%202-3%200-5-3-3-4%201%200%202-1%201-2l1-1%201-2c0-3-2-3-2%200-1%202-1%202-2%201l-1-2-1-1c-1%200-3-5-2-7l2%201c1%202%202%202%202%201l-1-3c-1%200-1-1%201-1v-1c-2%200-3-2-1-2l1-2h-1c-2%202-2%202-3%200l-2-2%201%202c0%203-3%203-4-1v-5l2%202%201%202-6-13c-1-1-1-1-1%201h-1l-1-3h2c0-2-2-3-2-2l-1-2%201-3%201-1-1-1h-1c0%202-1%200-2-3%200-2%201-3%203%200l2%201-1-2c-3-4-2-5%204-3l6%201-5-2c-8-3-8-5%200-8l5-2-6%201c-5%202-5%202-6%200-5-7-17-4-17%204%200%202-1%203-3%204l-2%201h2c3-1%203%200%204%201l1%202%201%203-1%201-2%201c-3%204-2%205%200%202l2-1c1%201%201%200%202-1%201-3%208-4%208-2l3%2010c2%208%202%2010-1%208-4-2-9-1-11%202-2%202-5%203-7%201l1-5%202-5-3%204-4%205c-2%200-2%200-1-2%200-2%200-2-2-1-1%201-3%202-5%201h-3l3%201c2%201%203%202%202%203h1c2-2%205-1%205%201h1c1-2%206%200%207%203l-4%203c-5%201-6%201-5-1%200-2%200-2-2%201l-5%204c-4%201-5%200-3-1l1-2-2%201-3%202-2%202v3h1c2-2%202-2%204-1%202%203%204%202%202%200s-2-2%201-3l4-1h2l6-3c7-1%208%200%203%204l-3%204%205-3c2-3%203-3%203-1-1%202%200%205%202%203%200-2%202-2%204-2%203%200%203%201%205%205l2%203c0-2%203%202%203%204l-1-1c-2-2-2-2-2%202%200%203%201%204%202%203v1c0%203%201%202%204%200%202-2%202-2%200-3s-2-4%200-3l1-1c-1-1%200-2%201-3h1l1%201c1-1%203%200%202%201h-1c-1-1-1-1-1%201l-1%202-1%202h2c1-1%201-1%201%201v3c3%202%202%203%200%203l-3-2-2-2%201%203v2h-2l-2%201-2-1c0-4-10-6-13-3h-2c-2-2-3-1-2%201l1%203c-1%201-6-1-6-3h-1c-1%202-4%201-4-1v-1l-3%202-1%201-1%203-2%202-5%208-2-2c0-2%200-2-1-1h-1c-1-1%202-9%204-12l2%202h1c-1-2%200-2%202-1h4l-4-1c-3-1-3-3%200-9%201-3%202-4%203-3s1%202-1%204l-1%202%202-1%203-2%201-1%202-3%203-3-4%202c-3%203-5%203-6-1l-4%205-3%207-3-3c-2-4-3-6-1-6l1-2h-2c-1%202-2%202-3%201h-1l1%201v3l1%201c0-1%202%200%203%202l2%203h-2l-4-1v-2c0-2%200-2-1-1s-2%200-3-3l-3-3%201%204c2%204%202%204%200%203-2%200-2%200%200%201l1%203h4c1-2%207%200%207%202-1%204-2%206-3%205l-1%201c1%201%200%203-1%203l-1%203-1%203c-1%203-1%203-3%202-1-1-1-1-1%201%201%202%201%202-1%202s-4-3-3-6l-1-1h-1c-1-1-1-1-1%201l2%203c1%203%201%204-1%204-1%201-1%201%201%201%203%200%204%203%203%206h-4c-3-1-4-4-2-5v-1c-3%200-3-2-1-4l2-2-3%202c-2%201-2%201-2-1v-1l-6%201c-5%200-9%203-9%206%200%202-2%202-14%202H9l13%201c12%200%2013%200%2014%202%201%204%205%206%209%206l6%201c1%201%201%201%201-1-1-2-1-2%201-1%203%203%204%202%201%200-2-3-1-4%202-3%202%200%203%201%203%202h1c1-2%204-1%203%202h1c2-1%202-1%203%202l1%204c0%202%201%201%203-1%202-1%202-1%202%201-1%203%200%202%201-1l2-3%205%208%201%201c2%200%201-2-2-6-2-3-2-4%202-2%202%201%203%201%202%203h1c1-1%202%200%203%202l2%202-1-3c-1-2-1-2%205-1l4%203c0%203-6%205-7%203h-1l2%203%201%201c0-2%202-3%205-3%202%200%201%203-3%206l-3%203-2-3c-3-5-7-9-7-7l1%202-2%202-2%201h3c3-1%204-1%206%203%202%205%203%205%204%203s1-2%202-1h1l2-4c3-2%203-2%206-1%204%203%2011%201%2011-3l2-1c1%200%202%201%201%202%200%202%200%202%201%201%201-2%202-2%204-1%204%201%204%201%203%203-1%201-2%203-1%204h-3l1%202v3c0%204-2%203-2-1%201-2%201-2-2%201l-3%202%201-2%201-3%202-2%202-4c0-3%200-3-1-1-2%202-2%203-3%201l-1-1v2c1%201%202%202%201%203h-1l-2-3c-2-1-3%200-1%202%201%201%201%202-1%207-3%208-3%208-7%208-2%201-3%201-4-2-1-4-2-4-1%201v4l-4-3-4-3%206%206c2%200%200%203-2%203v1c2%200%201%204-1%205s-2%201%200%201c1%200%204%201%205%203%202%202%208%203%2012%201%201-1%202%200%202%201v3l-3%207c-2%208-2%208-6%208-2%200-3-1-4-3-1-1-1-2-2-1h-1c-2%200-1%201%201%203v3l-1%201c1%203-1%203-5%201l-7-1%205%202c5%202%206%202%206%205%200%208%2012%2011%2017%204%201-2%201-2%206%200l6%201-5-2c-6-2-8-5-5-6v-1c-3%200-2-2%200-5l1-2-2%202c-3%203-4-3-1-7%201-2%202-4%201-5%200-2%200-2%201-1s1%201%202-1c1-1%201-1%205%202%205%204%207%203%202%200l-2-3%202-3c2-2%203-3%205-2h4l-3-1c-2-1-3-2-2-3h-1l-3%201c-2%200-2%200-1%201%202%200%202%201%200%204-3%203-4%203-4%200%200-2%200-2-1-1%200%202-2%200-1-2h-2l1-2c2%201%204-3%203-5l-1%201-1%202v-3c1-3%201-3%202-1%201%201%201%201%201-1l3-2-1%204v3l2-3c2-5%203-6%207-6%203-1%203-1%202%201h1c2-2%202-2%204-1%203%202%204%201%202-1s-2-2%200-2c2-1%202%200%204%202l1%204-1-4c0-5-1-5-3-4h-2l1-2c0-1-1-1-2%201l-2%202-1-4-2-4-1-2v-3c-2%200-5-4-4-5l1%201h1l1-2%201-1h2l-1%202v1c2%200%202%200%201%201v3c1%201%201%201%201-1%201-1%202%200%203%204l3%205c1-1%202-1%203%201%202%201%202%202%201%202v1c2%200%204%208%203%209-1%202%202%201%204-1l3-2%201-2c0-1%201-1%202%201v5c0%202%200%202%201%201h2l-2-5c-1-4%200-7%204-5%203%201%2012%201%2012-1v-2l2%202c0%202%200%202%201%201h1c0%201%201%202%202%201l1%202v1c1-2%202-2%203%200%202%201%202%201%200%202l-2%202-4-5-1-1h-1l-2-1%201%202%201%202h-1c0-1-2%201-3%206-2%207-3%208-6%208-2%200-3%200-4-4-1-3-1-4-2-3h-1l1%204-1%201c-2-1-1%200%201%202%201%202%201%202-1%201-2%200-2%200-1%201v3c-1%201-4%200-4-2h-1c-1%202-1%202-2%201%200-2-1-2-1-1l1%205c2%202%202%202%202%200v-2l2%206-1-1h-1c-1%202-1%202-4-2l-1-5v-1l-2-1c-1-2-2-2-3%200v1c2%200%208%2010%206%2010l1%201%203%205%202%202-2-4v-3l2%202c0%202%200%202%201%201%201-2%201-2%201%201l2%2012-1%202%201%202c2%203%201%205-1%202-4-3-5-2-2%201%204%204%203%205-2%204l-4-1%203%202%205%202c-1%208%209%2013%2015%208l2-4c0-3%202-3%2023-3h21l2%203c3%206%209%208%2013%204%203-2%206-10%204-10s-1-3%202-6l1-2-2%202c-3%203-5%202-3%200l1-3v-4l2-3h-1c-2%202-1-1%201-4l1-6c-1-2-1-2%200%200h1c0-2%202-3%202%200l1-1c3-2%203-5%200-3-1%201-1%201-1-2%201-4%204-7%205-4l2-1%203-2%203-1c1-1%201-1-2-1l-5%201c-2%202-3%201-2-2l1-4-2%204c-1%204-3%206-2%201%200-3%203-8%204-6l2-1%201-2%202-3%203-3-3%201c-1%201-1%201-1-2l-1%201c-2%205-4%204-2-2%201-4%204-5%204-2h4l1%201-1%204v3l2-3c0-2%202-3%202-2l1-2%201-3v-2c-1-1-1-1-2%201%200%202-5%202-6%200l1-1c2%201%202%201%202-1l-1-3h-1l-1-1%202-1v-1l1-1%202-2v-2l1%202c1%202%201%202%202%201l3%202c3%201%203%202%202%203-1%202-3%200-2-1l-1-2c-2-1-2-1-1%203l1%203c0%202%201%201%203-1h3l1%201v6h-2l-2%201c-1%201-1%201%201%201v3h2l1-1c0-2%203%200%205%203%201%202%201%202%201%200-1-3%201-3%201%200v3h-1l-1%202h-3c-2%201-7-2-6-4l-1-2-2%202v2l-1%201h1c2-1%205%201%204%203l1%201h2l2-1h5v4c-1-1-2%201-2%202%200%202%203%200%203-1h1v4c0%202%200%202%201%201s1-1%201%201v1c1-1%201-1%201%201l1%204-1%202c-2-1-1%200%201%202v2l-1-1-2-1%201%202c3%203%200%204-7%202l-8-2%206%203c6%201%208%203%208%204v2l2%204c4%203%208%204%2012%202%202-1%205-7%205-9-1-1%200-1%203-2l8-3-7%201c-6%202-7%201-4-2v-2l-1%201-2%201%201-3c3-4%204-7%201-3l-2%201v1c0%202%200%202-1%201h-1c-1%201-2%202-4%201-3%200-3-1-6-9-3-10-3-12%201-10%203%202%208%201%2011-2l5-2c2%200%202%200%200-1-4-2-3-5%203-6l3-2-5%201c-3%201-7-1-7-4%201-2%200-3-1-2l-4%201c-4%200-4-1-6-5-1-4-1-5-2-4v9c2%202%200%206-3%206-1%200-3-4-3-7v-3c-2-2%201-4%203-1l-1-3c0-2%202-3%202-1v-1c0-2%200-2%201-1s1%201%201-2l-1-3-1-1-1-3v-3c2%200%205%204%204%205l-1%201h1l5-1c5%200%206%200%208-3%203-2%206-2%208%200h3l1-1-2-1h-1l-4-1c-4-1-3-4%201-6l4-1-4%201c-4%200-8-3-6-5l1-1h-1l-6%201h-4l-3-7c-3-5-3-6-2-7s1-1%201%201v1l2-4v-2h6c4-1%205%200%207%202l2%202-2-3-1-4%201%201%201%201v-1c-1-2-1-4%202-4v-1l-1-2-1-4c-1-3%203-7%205-4%201%201%201%201%201-2-1-4-1-4-5%200-2%203-3%203-4%202l-6-1c-4%200-5%200-6-2-2-3-2-9-1-7h1v-2l2-3c1-3%201-4%205-4l4%201h2c-1%201%200%204%201%207l3%203-1-3c-2-3-1-4%201-1s3%201%200-2c-1-2-1-2-2-1s-1%201-1-1v-2l-1-3%201-1c1%201%201%200%200%200-1-3%201-3%207-1%205%201%206%202%207%204s2%203%202%200c-1-1-1-2%201-2%201-1%201-1-1-1l-3-2h-1c-1%201-10-2-10-4-1-2%204-5%206-3l1-1c2-2%205-1%207%203l3%203-2-4c-3-4-2-4%204-6%203%200%204%200%206%202%204%204%205%204%202%200-3-3-3-3%202-4l3-2-6%201h-6c-2-3-4-2-2%200s2%202-2%203h-5l-1%201c0%202-4%201-5-1-1-1-1-1-1%201%201%204-4%204-7%201s-7-4-12-2c-1%201-2%200-2-2v-2l3-7c2-8%202-8%205-8l4%201h1l1%201v1l2%201h1l-2-3-1-3%202%201%201%201v-2c-3-3-2-4%202-3%205%202%207%201%202-1-3-1-4-2-4-4-2-8-11-11-16-5-2%202-3%203-6%202h-2l2%201%203%203%201%204c1%201%201%201-1%203l-1%203%202-1%202-2v2c-2%202-3%203-1%203h1l-1%202-1-1h-1l-1%201%201%201h1l1%203h-1c-1-1-1-1-1%201v5l-2%201-1-2c-1%201-2-1-1-2%202-2%201-3-1-2-1%201-2%202-3%201v4h1l3%201%201%201v3c-1%203-2%202-1%200%200-2%200-2-1%200-2%203-2%204%200%203v5c-2%203-4%204-4%201h-1c-2%202-2%202-3%200-2-3%200-7%204-7%202%200%202%200%201-1l-2-1-1-1c-1%201-9-1-9-2l-1-1-3-3-3-3%201%204%202%202h-3l-5-3-2-1c0%203-3%201-4-1%200-2%200-2-1%200-1%201-1%201-2-1l-1-1c0%203-2%202-2%200%200-1%200-2%201-1l1-1h2c1%202%201%202%201%200%200-3%202-3%202%200l2%202-2-5c-1-3-1-3-2-1-1%201-1%201-2-1-1-1-1-1-1%201v2l-1-2c-1-2-1-2-1%201%200%202%200%202-1%201-3-5-10-7-14-3-2%202-2%202-1-3a652%20652%200%20007-17c2%200%203%202%205%2010l4%208h1v-1l1-3v-2h-1c0%204-1%201-2-2v-5c-1-2-1-2%201%200%203%204%203%201%200-3-4-4-3-5%201-1l3%202-2-4c-3-3-4-6-1-5l13%204-6-3c-6-2-8-2-8-4%200-10-15-12-18-3%200%202-1%202-22%202l-21%201%2021%201%2022%201c1%201%200%202-1%203l-2%202%203-1c3-2%203%201-1%205l-3%203%204-2c3-4%204-3%201%201-2%202-3%205-1%204l1%203-1%202c-1-1-1-1-1%201v4l-1%203v-3c0-2%200-2-1-1-1%202-3%202-2-1h-4c-2%200%201%203%203%203%202%201%200%207-2%207l-2-1h-1c-3%202-11%201-14-2l-3-3%202%204%202%202h-3l-4%201h4l3%201h1l3%202%203%203-1-3-2-2h10c2-1%202-1%202%201-2%205-2%206%200%202s2-4%203-2c0%202%200%202%201%201l1-2v2c0%202-2%205-2%203s0-2-1%200c-1%203-4%205-4%203h-1c-2%202-4-1-3-4%202-3%201-4-1-1s-2%204%200%206l2%202-3%201-3%203%203-1h3l1-1c0-2%204%203%204%205l-1-1h-1v1l-1%201c0%202-4%207-5%207l-1-2-2-3%201-1%201%202%202-1c1-3%202-6%200-4-1%202-2%202-4%201-1-1-2-1-1-2v-2h-1l-3%201c-3-1-3-1-2%201%202%201%202%201%201%202v1h2c1-1%204%204%204%206l-2%205-1%204-2-3-1-2h-1v-5c2-4%202-5%200-2-1%201-1%201-1-1v-2l-4-7-1-3c0%201-4-6-4-9%200-1%203-1%204%201h1l-2-4c-1-2-2-2-2-1%201%204-3%202-4-1s-1-3%201-4%202-1%201-2-2%200-2%201h-2c-1-1-1-1-1%201l-1-1c-2-3-3-6-1-4%201%202%201-1-1-4l1-2c2%201%201%200-1-4s-3-5%200-3h1l-1-2c-2-2-1-3%201-2v-5c2-7-9-13-15-8m3%2018a5522%205522%200%2001-4%2019c3-3%208-4%2012-2l2%202-5-20c-1-2-5-1-5%201M38%2041l-2%204c0%202-2%202-13%202l-13%201%2013%201h12l1%203c2%203%206%205%2010%205%202%200%203%201%206%207l4%206-1-4c-2-4-2-5%200-3s1%200-1-4c-3-3-4-4-1-4h1l-1-1v-2c0-1%202-1%206%201l6%201-5-2c-7-2-8-4-4-7%202-1%202-1%200-1l-5-2c-4-4-9-4-13-1m314-1l-3%203c0%202-1%202-2%202l-4-2c-3%200-3%200%201%202%206%202%205%204-1%206-4%202-1%202%204%200%204-1%202%203-4%207l-5%206%206-4c6-5%207-6%206-4%200%201%201%202%205%201%206%200%208-1%2010-5l2-3h12l13-1-13-1c-12%200-13%200-13-2-2-5-9-7-14-5M240%2052l2%204%201%202-2-1c-2-3-3-2-2%200l1%203-1%202%201%204c0%202%200%202%201%201s1-1%201%201v2l1%203v-2h1c2%201%202%201%201%203-1%201-2%202-1%203%201%202%203%203%202%201v-2l4%207-1-1c-2-4-4-2-2%203%201%203%204%204%204%202h1c2%202%203-1%202-4-3-7-6-12-8-11v-4c-3-2-2-4%200-1l2%202c2%200%200-7-2-8l-1-2%201-1%202%202c2%203%204%204%202%200l-1-3%202%203%203%204v1l2%203%203%203-2-1h-2l-1-1c-2-3-3-1-2%204%201%204%202%205%204%202h4l1-1v-3h1c1%202%208%202%2010%201%201-1-2-5-3-4l-1-1c1-2-4-9-6-9h-1l-1-1-4-2c-2%200-2%200-1%203%202%203%202%203%204%202%202-2%202-1%200%202l-2%202-2-5c-3-5-5-6-6-4h-1c0-3-2-2-2%200s0%202-1-1c-2-3-4-4-5-2m-75%209l-2%203h-1v-3c-2%200-7%209-6%2010l-1%201-4%203-1%203h7v-6l4%203v2c-2-1-4%202-2%203v1l-2%201h-1c0-2-2-3-2-1l-2%203%201-3c0-2%200-2-2-2l-3%202-1%201v5h3l1-1c0%203%202%202%204-1%201-2%201-2%201%200v2c2%200%204-2%205-4%200-6%205-9%2011-8l4%202%202%201%201-2h2c0-2%200-2%201-1%201%202%202%200%201-3h1c1%202%202%202%203%200%202-1%202-1%201-2s-1-1-1%201l-1-1-1-2-2%202-2%203-1%201h-1l-1%201-1-1-2-8c-2-8-3-9-6-9-2%200-3%200-4%204m61%206l-2%2011%201-2v-1h5c2-1%204%200%205%201h5v1c-1%202%200%203%202%203s2%200%201-3l-2-3v-1l-1-4c-2-8-5-12-8-12s-3%200-6%2010m43%207l-3%201v4c-1%201-1%201-2-1%200-2-1-2-1-1h-4l-2%201h-1c-2%200-2%201-1%202%202%202%203%203%203%201l2-2c1-1%201-1%201%201l-1%203-1%201h-1l2%201%202%202%202%204%202-5c2-4%204-8%203-4-1%202%201%204%202%204v-3c0-2%200-2%201-1h2l1-2c1%201%201-5-1-6h-1l-1%203-1-2c1-2%201-2-2-1M53%2076h-3c-4-3-14%201-14%205%200%202-2%202-14%202H9l13%201c13%200%2013%200%2014%202%201%204%206%207%209%207%203-1%203%200%206%206%203%207%205%209%205%206l1-2%202-3c1-2%201-2%203-1%201%201%202%203%201%204h1l2-1%203-2%202-4-3-2v2c1%201%200%202-1%203-1%202-1%202-4-1-3-2-4-2-5%202l-2-1c-2-3-3-2-1%201l1%203c-1%200-2-1-2-3l-1-3%201-1-2-1v-1l-1-1-1-1%202-1%201-2%204-1h4l-4-1c-4-1-4-5-1-6%202-1%202-1%200-1-3%200-4-2-1-4%202-2%200-3-2%200m298%200l-2%203-3%201c-2%200-2%200%200%201s3%205%201%205v1c2%200%202%202%200%204-1%202%200%203%202%201l1%202-1%202-2%201h1l1%203%202-3c2-4%202-5%206-5s9-3%209-7l13-1%2014-1h-27l-1-3c-2-5-8-7-14-4m-15%2012c-2%202-8%204-8%202h-3l-1-1h-1v-1h-2c-1%200-1%201%201%202%203%202%203%202-2%204-4%201-4%201-6-1-3-3-2-1%200%202s2%203%203%202l5-2h1l-1%202%202-1%202-1%203%202h3l-3-2-1-2%209-1%203%205%203%206%201%201c1-1%202%200%201%202h-5l-2%204-2%202-2-3c-1-4%200-6%203-5%202%200%202%200%201-1v-2l-2-1-2%201v2c-2%201-2%201-3-2-1-2-1-2-2%200-1%205-3%208-6%208a18943%2018943%200%2001-12-2c2%200%204%201%206%205%201%201%201%201%201-1-1-2-1-2%202-1%205%200%205%200%201%204l-2%203%202-1c0-1%201-1%201%201%201%201%201%201%202-2l2-2h2c1-1%205%200%208%202l2%201%202-1-1%202-1%203%201%202%201%202-2-1h-1c-1%201-2%201-3-1h-1l1%202c2%201%201%202-3%202-2%201-3%201-2-1h-1c-2%203-4%201-4-2l-1-1v5l1%203%201%201%202%202c1%201%201%202%202%201%200-2%202-1%202%201s2%200%202-3v-1c-2%202-2%202-4-1l-2-2h2c6-1%208%200%209%201%201%202%202%202%202%201l-1-1c-2-1-1-4%200-4l3%202%202%202-1-3c-1-1-1-2%201-2%201-1%201-1-1-1-4%200-4-7%200-7%202-1%201-1-2-2h-4l2-4c2-2%203-3%204-2v2l-1%203%201-1c1-1%202-2%203-1v-3c0-2%200-2%201-1h2l-1-1v-3l-1-1h-1v-1l1-2h-1c-3%202-4-1-2-3%201-2%200-3-2-1l-3-2-1-3v-2c0-2-1-2-2%200m-179%200c-3%200-5%204-3%208l1%203c-1-1-2-1-3%201-2%202-2%202%200%203%202%202%204%201%204-2l1-1%201%201%201%202%203%205c3%203%204%204%205%203h10l-1%201%201%202c2%200%204-1%204-3h2l1-2c-1-2-1-2%201-1%202%202%205%200%203-2v-3c1-2%201-2%202%200%200%202%200%203%201%202h2v-1l-1-4c-1-3-3-4-3-1l-2%202v2h-1c-2%200-2-3%200-3v-3c-1-2-1-2-3%201-1%202-1%202-2%200s-4-5-4-3l2%203c4%205%205%2010%203%209-1-1-1%200-1%201l-2%202v-2c0-2%200-2-1-1l-1-1c1-1%200-4-1-7-3-5-3-6-7-6l-4%201h-1l-1%201v1h-1v-7c0-2-2-2-5-1m70%208l-2%203h-1v-2c0-2%200-2-1-1-2%201-3%205-1%204%201-1%201%200%201%201h1c1-1%201-1%201%202v3l1%202h-2l-1-1%202%203h2l3%201h5c1%201%202%200%203-1l2-2-1%202%201%202v2c0%202%200%202%202%202s2%200%201%201c-1%200-2%201-2%203l2%202c1%201%201%201-1%201s-3%202-1%204v1l-2-1h-1l-7%201c-4%200-4%201-6%205l-2%204v1l-1%202c-2%200-2-1-1-2%202-5%201-6-1-3l-3%202%202%203c4%204%204%205%200%202-3-4-5-3-4%200%201%202%201%202%203%201h1l-1%202%201%202%201%202h-2c0%202%202%206%204%206%201%200%202-3%200-5v-1c4%201%205-1%203-5-2-3-3-5%200-3l1%201%201%201c2%203%202%203%205%203s4%200%206-4%203-5%203-3v3h1l-2%201v1l-1%202-1%202%202-1c4-3%205-2%202%201l-2%203c1%201%206%200%208-2h2l1-1h-1l-1-2c0-2-2-4-2-2l-2%201c-1%200%200-2%203-4l3-4%201-1%202-3c1-2%200-7-2-5l-1-1-4-3c-3%200-3%200-1-1l3-3%202-4-1-1-1%202h-1l-2-1c-2%200-2%200-1-1%201%200%202-1%201-2h1c2%201%204%201%204-1l1-1%202-1c1-3-1-7-3-6v-1c1-1%201-2-1-3-2-2-5%200-4%202l-1%202c0-1-2%200-2%202l-3%202%201-2c1-1%200-3-2-7-3-6-4-7-7-7s-3%201-5%204m-145%207l-4%206%203-1c4%200%205-1%203-2-2-2-1-3%201-2%201%202%202%202%202%201h1l4%201%205-1-4%201a678%20678%200%2001-5%204l2%204-2-2c-1-3-1-3-3-1h-1c1-2%200-2-4-1-2%201-2%201-1%202v3l1%202%201-1c-1-2%201-2%203%200l3%202c2%200%201%202-1%204-2%200-2%201-2%203s0%202-1%201c-2-2-2-2-3%200-3%203-2%203%203%203%203%201%204%200%205-1l2-2-1%203c-1%202-1%202%201%203%208%203%2011%202%207-2v-2l2%202c2%202%202%200%200-3l-2-4%203%203c3%204%2011%204%2012%200%201-2%201-2%202-1h1c2%200%201%202%200%203l-2%202h1l2-1v1c-2%202-1%204%202%204%204-1%204-2%202-5l-2-2%202-2c3-2%204-3%204-1h1l1-1v-6l-1-3-1%201v2c-2-1-4%203-3%204l1%201h-1c-2-1-3%200-2%201l-1%202-2-2v-1l-1%201-1-3c0-4%201-5%202-3h1l-1-1-1-2%202%201c2%203%203%203%204%202%201-2%200-4-2-2-2%200-1-3%201-5s1-4-2-4c-3-1-4%200-2%202%201%202%200%203-2%201h-1l1%202v3c-1%201-1%201-2-1-1-3-8-4-11-1h-2l1-1%201-2-2%201-4%202%202-2c2-3%203-5%200-5v-1l1-2c0-3-6-5-7-3h-1c0-4-4-3-8%204m193-5v1c-1-2-2-1-3%202-1%205%202%206%203%202%202-4%203-5%203-3-1%204%200%204%202%203%201-2%201-2%201%200v6c1%202%201%202%202%201%202-2%203-1%201%201v3l2-1%202-3c2%200-2-5-4-5h-2l2-1c1-1%202-1%201-3%200-2-3-3-3-1h-1l-1-2h-2l-1-1-2%201m-127%207h-1v-1c-1%201%201%208%202%208l1-2%202-1-1%202c-1%202%201%204%203%203h1c0%202%205%202%207%200%202-1%202-2%200-5l-3-2-1-2v-2l-2%202-2%202-2-2c-3-2-3-2-4%200m207%206h-3l-1%201h-1c-1%200-2%200-1%202%200%202%200%202-2%202s-2%200-1%201c1%200%202%201%202%203l-2%202c-1%201-1%201%201%201s2%200%202%202c-1%202%200%202%201%202h1c0%201%206%202%2010%200l4-4%201-3h13l14-1h-27l-1-3c-1-3-6-6-8-6l-2%201m-285%202c-3%200-3%200-2%202%200%202%200%202-1%201-2-2-4%203-3%206l2%201%201%201c0%204%202%208%203%208l4-3-2-1v-1c2%200%202-1%201-1l-1-2%202%201c2%202%202%202%203%201l1-2c1%201%201-6-1-9l-1-3-2%202-2%201%201-2v-1l-3%201m87%2011c-2%200-2%201-1%202%200%202%200%202-1%201-2-3-5-2-4%201h-4c-1-2-1%201%201%206%201%202%201%202%203%201l2-1-2%202v3c2%201%202%202%200%203-1%201-1%201-2-1l-2-2h-1l1-1c1%200%200-2-3-3-2-3-3-3-3-2l1%203h2l1%205%202%204c0%201-1%201-1-1-1-2-1-2-4%200s-3%203%200%203h7l2-2c0-3%202-3%202%200l-1%202-1%201%201%201h2l3%202v1c-1%200-2%201-1%202%200%202%200%202-1%200-2-4-8-4-7%201%200%204%201%205%203%205l2-1-1-4%202%203c0%202%202%201%202-1h1c0%202%203%201%203-1%201-1%200-2-1-3v-1c3%200%205-4%204-6l-2-2h2l1%201h1c3%203%208%201%2010-3%201-4%201-4%202-2%201%201%200%203-1%204v3l1%201v2l1%201c0%201%201%204%203%204l1-1h1c0%202%202%201%203-1v-4c-1-1-1%200-2%202s-1%202-1%200l-1-2v-1c1-1%202-2%201-3%200-2-1-2-4%200l-2%201%202-2%202-3c1-2%201-2%202%200%202%203%203%204%203%201h1c0%203%201%202%203%200l2-1h1v-1l-1-2%201-3v-1h-3l-1%202v3c0%203%200%203-2%202l-3-2c-2%202-1-1%202-4s3-3%202-4c-2-1-3-1-5%202-1%203-1%203-2%201h-2c0%202%200%202-2-1-3-3-2-5%200-2l2%201-1-1-1-2h3l1%201c0%202%202%203%202%200v-2h-2c0-2-3-3-4-2v1l-1%201h-1l-6%201-6-1c1-2-2-5-3-5l-3%201m160%203c-1%203-1%203-3%202h-1l-1%203c-2%201-2%201%200%201h3c2%200%203%204%202%206%200%202%200%202%201%201%202-1%202-1%204%202s2%203%200%203v1c3%200%202%201%200%203l-1%202h3c2-3%202-4%203-2h1c0-2%206%200%208%202l2%201%202-1c2-1%202-1%200-1s-2%200-2-3v-1c-1%202-2%202-3-1l-2-1%201%203c1%201%201%201-1%201l-4-1c-2%200-2%200%200-2s2-3%200-4c-1-1-1-1-2%201l-1%203-3-4-2-4c2-2%201-3%200-2-2%201-2%201-3-1-1-3-1-3%201-3v-1c-2%200-2%200-1-2l1-3-2%202M52%20138c-3%208-4%209-6%208-3-1-8%202-9%206l-2%203H22l-13%201h13l14%201%202%204c2%203%209%204%2012%202h2c2%202%203%201%202-1-1-1-2-2-1-3l1-4%204-3c6-2%206-1%204%203s-2%204-5%203h-3l2%201c3%201%203%202%202%204%200%202%200%202%202%200l3-8c2-3%203-4%204-3s1%201%201-1c-1-1-1-2%201-2v-1c-1%200-2-1-1-2%200-2%200-2-1%200l-2%202-1-2-2-2%201%203c1%202%201%202-4%203-5%202-8%202-7-1v-1l-1-2%201-2c0%201%201%201%202-1v-5c1-2%201-2%202-1l2%203%201%202c1%201%202%201%204-1%202-3%203-3%204-1%201%201%202%202%201%203h1c2-1%202-1%200-4-3-3-4-3-7%200l-2%202-1-2-2-3v-3l1-2%201%202%201%201%201%201%202%201v-2c-2-1-2-2-1-2l1-2h-1c-2%202-2%202-3%201-2-3-2-3-7%207m299%206l-1%201h-1l1%202%201%201-2-1-3-1%201%202c3%202%202%204%200%204s-2%200-1%201c3%200%203%205%200%205-2%201-2%201%200%201%203%200%203%200%203%202-1%201%200%202%201%202l6%201c5%200%208-1%209-5l1-3h13l14-1h-14c-11%200-13%200-13-2%200-3-6-7-9-7-3%201-4%200-5-1%200-2-1-2-1-1m-269%209c2%202%203%203%202%204s-2%200-3-2l-2-2%201%203c1%202%201%203-1%205s-2%202-4%200h-2c1%201%200%202-1%202v1l2%201%205%201c7%201%206%201%2013%2014l6%2010-2-6-2-6-1-1-5-9c1-1-2-2-6-3-4%200-5-1-2-3l2-2%201%203%202%201-1-3c-1-1%200-2%202-5l2-3-1%201-3-1c-4-4-5-4-2%200m117%208l-2%202-1-2%202%206%203%205%201-2%202-1c0%202%202%201%202-1h1v3l-4%201v4h-1c-1-1-1-1-2%201h-2l-2-1h-1l3-2%201-1c0-1-4-2-5-1s-1%201-1-1l-1-2c-2-1-2%200-2%201s0%202-1%201c-3-1-3%202-1%204l2%202%202-2c1-2%201-2%201%200v2l-1%203-3%204c-1%201-1%201-1-1%202-5-3%200-4%206l-1%203%202-3c2-2%202-2%202%200%201%202%204%202%204%200l2-3-1%204%203%201c3%200%204-1%203-2h1c2%201%202%201%204-1l3-3-1%203-2%202h9c3%202%203%201%202-3l-1-4%202%203c2%204%203%205%203%202h1l1%202v-3c-1-3-1-3-2-1-1%201-1%201-1-1-1-3-4-5-4-3h-3l-1-1-1-4-1-1c1%201%202%200%202-1l1%201%202%201c1-2%200-6-2-10l-2-3-2%202c-2%202-2%202-2%200l-3-9-2%204m41-1c0%204-14%205-15%202%200-2-2-1-2%201h1v6l3%206c2%207%203%207%205%207%203%200%203-1%204-3l2-2v-2c0-2%200-2%201-1h2l-1%203-1%201h2c2-2%201%200-1%203-3%204-2%204%202%200%206-4%209-12%205-11h-1l-1-3c-2-2-2-2-3%200-1%201-1%201-1-1v-2l-1-2%203%201c1%202%202%202%202%201%201-1%201-1%201%201%200%203%201%203%204%200l2-3-2-1-3%201h-1c1-2-2-3-2-1-1%201-1%201%200%200l-2-2-2%201M53%20174c-4%207-5%208-7%208-4%200-9%203-10%205%200%204-3%204-16%204H9l13%201c12%200%2014%200%2014%202l2%204c4%203%209%203%2013-1%203-2%203-3%206-2l4%201-3-2c-5-1-5-4-1-6%202-1%202-1-1-1l-3-1-1-2-1-3c0-2%200-2%201-1s1%201%201-1v-1c0%201%203%200%203-2h-1c-3%202-2%201%200-4s5-6%203-2c0%202%200%202%201%201h3v-3l1-2h-1c-2%202-2%202-3%201-2-3-2-3-6%207m298%205l-1%202h-1l1%202%201%201-3-1-3-3c-1%200%200%202%202%203%202%202%203%205%201%205l-7-2-8-2c-1%200%202%202%207%203%2010%203%2011%205%204%207l-4%202%204-1c4%200%204%200%207%202%203%204%209%204%2012%200l3-4%2013-1h14l-13-1h-13l-1-3c-3-4-6-6-10-6l-4-2c-1-4-2-4-1-1m-169%2015v3h1c0%202%207%205%209%204h1l-3%204h-2c1-3-2-4-4-2h-1c1-3%200-5-1-3h-1c0-2%200-2-1-1l-1%204v5c-2%203-2%204-1%204l-1%202c-1%203-1%205%201%203h1l-1%202c-2%202-1%203%201%202v1c-3%204%200%204%2022%204s25-1%2022-4v-1c3%200%202-1%200-4l-3-3%202%201%203%202v-3l-1-2c-1%201-1%201-2-1v-3l1-3c0-3-1-4-1-2-1%201-1%201-1-1l-2-2c-1%200-1%201%201%204%202%205%201%205-2%200l-3-7c2%203%204%202%203-1h1c1%202%202%201%201-2-1-2-1-2-2-1l-1%201c-1-3-4-2-4%200l1%203-2-3c-1-2-2-2-6-2-2%200-4%200-3%201l1%201h-2c-2-2-2-2-4%201l-3%203%202-4%202-2h-4l-6%202h-1c1-3-2-2-4%200l-1%203v-3c1-2%200-3-1%200m58%201c0%205-10%207-14%203a807%20807%200%20012%2013c4%2012%206%209%2011-9l2-8-1%201m-79%204c3%2012%206%2019%208%2019s3-1%206-10c3-11%203-12%200-9-3%202-8%201-12-1l-2-2v3'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.5789473684210527,"src":"/static/0dc323ac434a4af322c40aa263f121d7/4fe8c/network.jpg","srcSet":"/static/0dc323ac434a4af322c40aa263f121d7/aabdf/network.jpg 150w,\n/static/0dc323ac434a4af322c40aa263f121d7/9dc27/network.jpg 300w,\n/static/0dc323ac434a4af322c40aa263f121d7/4fe8c/network.jpg 600w,\n/static/0dc323ac434a4af322c40aa263f121d7/9842e/network.jpg 900w,\n/static/0dc323ac434a4af322c40aa263f121d7/ff531/network.jpg 1056w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/sprint","title":"Cloud Sprint Student Program","tags":["gcp"],"excerpt":"A 12 week summer program sponsored by Google Cloud for selected undergraduates to explore GCP and take on the ACE Certification.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='222'%20viewBox='0%200%20400%20222'%20preserveAspectRatio='none'%3e%3cpath%20d='M31%2073c-6%203-10%205-13%209-4%205-7%2011-5%2012%201%200%200%202-2%203l-3%203-2%201c-1%202%200%203%201%204v2H6c0-3-2-1-2%202%200%202%200%202%202%201h1l1%203c0%202%200%202-1%201l-2-2c-1%201%202%209%203%208v2h1l2-1-1%202c-1%201%202%204%206%206l24%201c19%200%2021%200%2025-2%2012-6%2014-21%205-32l-6-9c-6-12-22-18-33-14m77%2010c-13%207-15%2024-4%2033%2013%2011%2033%203%2033-13v-4h-19v6h7c7%200%207%200%204%205-4%209-19%207-24-3-7-13%2010-27%2022-18%201%201%202%201%203-1l2-2-3-2c-5-4-15-4-21-1m118%2019v19h6V82h-6v20m56-16c-17%207-15%2032%204%2035%205%201%2011%200%2015-3%202-3%202-3%201-4-2-2-2-2-5%200-4%204-13%204-17%200-10-10-3-26%2010-25%203%200%206%201%207%203h4c4-5-11-10-19-6M32%2087c-3%201-5%204-3%204s3%200%205%202c3%202%203%202%202%203-2%201-2%202-2%203%201%204-2%207-4%205-2-4-13-3-13%200l-1%202c-2%200-2%205%200%207v5c-2%200-2%201-1%202l2-1%2020-1c19%200%2022%200%2025-4s0-10-5-11l-2-4c0-10-13-17-23-12m275%2016v18h5V85h-5v18m83-11c0%204%200%207-1%206-2-4-12-3-16%202-8%2010%202%2026%2013%2021l4-1%203%201h2V85h-2c-3%200-3%200-3%207m-244%204c-10%205-9%2020%201%2025%2010%203%2018-3%2018-12%200-11-9-17-19-13m29%200c-7%204-10%2015-4%2021%208%209%2023%204%2023-8%200-10-10-17-19-13m30%200c-15%206-7%2030%207%2025%204-1%204-1%204%201%200%206-7%208-11%204-3-2-7-2-7%200s6%207%208%207c13%201%2016-3%2016-24V96h-17m36%201c-12%206-7%2024%206%2024%207%201%2013-4%209-7h-4c-2%202-7%203-9%201s-1-3%203-4l8-4%205-2-2-3c-3-6-10-8-16-5m83-1c-8%203-11%2015-5%2021%207%209%2020%204%2022-7%201-10-8-17-17-14m21%2010c0%2012%201%2013%206%2015h7c2-2%204-2%204-1l2%201c2%200%202-1%202-12%200-12%200-13-2-13s-2%201-2%208c0%2010-2%2013-7%2013s-6-3-6-13c0-7%200-8-2-8s-2%201-2%2010m-166-5c-8%202-6%2015%202%2015s10-13%202-15h-4m144%201c-3%204-3%2010%200%2013%206%205%2013%201%2013-7%200-7-8-11-13-6m54%200c-5%206-1%2015%206%2015%206%200%2010-10%205-15-3-3-7-3-11%200m-230%201c-3%202-3%208%200%2011%205%205%2012%201%2012-6%200-6-6-9-12-5m57%200c-3%204%200%2013%205%2013%206%200%2010-8%206-13-3-3-8-3-11%200'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.8072289156626506,"src":"/static/34571f89f87caa7608d9228147ff2778/4fe8c/google-cloud_fb.jpg","srcSet":"/static/34571f89f87caa7608d9228147ff2778/aabdf/google-cloud_fb.jpg 150w,\n/static/34571f89f87caa7608d9228147ff2778/9dc27/google-cloud_fb.jpg 300w,\n/static/34571f89f87caa7608d9228147ff2778/4fe8c/google-cloud_fb.jpg 600w,\n/static/34571f89f87caa7608d9228147ff2778/9842e/google-cloud_fb.jpg 900w,\n/static/34571f89f87caa7608d9228147ff2778/47498/google-cloud_fb.jpg 1200w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/routingpear","title":"Pear - A Web Application designed for Routing customer calls to agents","tags":["node.js","rainbow","css"],"excerpt":"A Node.js based web application built on top of the Rainbow SDK to help customers route their calls and queries to appropriate call center agents.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='256'%20viewBox='0%200%20400%20256'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20128v128h401V0H0v128m69-73c-3%201-4%204-3%206%200%202%202%203%207%204l2%202c0%202-3%202-4%200-2-2-6-1-6%201%201%205%2013%205%2014%200%201-3-1-7-4-7l-4-1c-1-2-1-2%201-2l3%201c0%202%204%201%204%200%200-3-5-5-10-4M9%2063v9h7c6%200%206%200%206-3%200-2%200-2-4-2h-4v-6c0-6%200-6-2-6-3%200-3%200-3%208m24%200c0%208%201%209%203%209s3-1%203-4%200-3%203-3l3-1c0-1-1-2-3-2l-3-1c0-2%201-2%204-2%202%200%203%200%203-2s-1-2-7-2h-6v8m16%200v9h7c6%200%207%200%207-2s-1-2-4-2l-5-1c0-2%201-2%204-2s4%200%204-2-1-2-4-2c-5%200-5-2%200-2%203%200%205-1%205-2%200-2-1-2-7-2h-7v8m32-6l3%202c2%200%202%201%202%206%200%206%201%207%203%207s3-1%203-7c0-5%200-6%202-6l3-2%201-1c4%205%206%2010%206%2012%200%204%200%204%203%204%202%200%202%200%202-4%200-3%201-5%203-8%204-5%204-5%200-5-2%200-3%201-4%203s-1%202-3%201l-1-3-12-1c-10%200-11%200-11%202m36%206v9h7c6%200%206%200%206-2l-1-3c-7%201-7%200-7-6s0-6-2-6c-3%200-3%200-3%208m15-7v9l1%207h6c6%200%208-1%208-2%200-2-1-2-4-2-6%200-7-3-1-3%205-1%206-4%200-4l-4-1%204-1c3%200%204%200%204-2s-1-2-7-2l-7%201M11%2083c-4%203-2%207%203%209l4%203h-5c0-2-5-3-5-1%200%203%203%205%207%205%2010%200%2011-9%202-11l-3-1c0-1%201-2%203-1l4%201h3l-3-3c-2-2-8-3-10-1m15%207c0%208%200%209%202%209s2-1%202-5c0-6%200-6%202%201%202%206%204%206%206-1l2-4v4c0%205%200%205%202%205%203%200%203%200%203-8l-1-8h-3c-3%200-4%200-4%203l-2%204-2-4c0-3-1-4-4-4h-3v8m24-1l-4%208c0%202%200%202%203%202l3-1c0-1%201-2%203-2l3%202%203%201c3%200%203%200%203-2l-4-8c-2-6-2-7-5-7s-3%201-5%207m16%202c0%208%200%208%202%208%203%200%203-1%203-4l1-3%202%203c2%203%203%204%205%204s3-2%200-5v-4c4-4%200-8-7-8h-6v9m17-8c-2%201-1%203%201%203%203%200%203%200%203%206s1%207%203%207h3v-6c0-7%200-7%203-7l2-2c0-2-1-2-7-2l-8%201m216%2051c-3%203-3%20115%200%20117%202%202%2091%203%2093%201l1-60c0-56%200-58-2-59l-46-1c-42%200-45%200-46%202m4%2030v3h50v-7h-50v4'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.5625,"src":"/static/a4177b2784a4d043bf2af946ce9d0864/4fe8c/pear.jpg","srcSet":"/static/a4177b2784a4d043bf2af946ce9d0864/aabdf/pear.jpg 150w,\n/static/a4177b2784a4d043bf2af946ce9d0864/9dc27/pear.jpg 300w,\n/static/a4177b2784a4d043bf2af946ce9d0864/4fe8c/pear.jpg 600w,\n/static/a4177b2784a4d043bf2af946ce9d0864/9842e/pear.jpg 900w,\n/static/a4177b2784a4d043bf2af946ce9d0864/73482/pear.jpg 989w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/twohandsonebrain","title":"2 Hands 1 Brain - a Verilog based Arcade Station","tags":["verilog","fpga","lucid"],"excerpt":"A mind boggling, single player arcade game built for one of my academic modules.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='205'%20viewBox='0%200%20400%20205'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20102v103h242V70h94v67a1505%201505%200%2001-1%2056v-10l-11-1h-11v22l1-11v-10h10l10%201v9c0%2011%201%2010-12%2010l-10%201v-21l-11-1h-11v11l-1%2011v-21l-11-1h-11v22l1-11v-10h10l10%201v19h-10c-10%200-10%201-6%201h22l7-1c7%200%208%200%205%201l45%201h50V0H0v102m326-80c-3%203-3%203-3%2013v10l4%203%203%204h22l3-3c3-4%203-4%203-14V24l-3-3-4-3h-22l-3%204M59%2036v14h4c4%200%205-1%205-4%200-5%204-4%204%201%200%203%200%203%204%203h4V22l-4-1h-4v4c0%206-2%206-2%201v-4l-6-1h-5v15m30-12v2l-1%202-1%202-1%202-1%202-1%202-1%207v7h22V39c0-10%200-10-3-13-2-2-11-3-13-2m20%201c-2%202-2%204-2%2013l1%2012h8v-3c0-4%201-5%203-2l6%202h4V24h-4c-4%200-5%200-5%202s-1%203-3%200-6-3-8-1m28-1h-6v13l1%2013h5c6%200%206%200%2010-4%206-6%206-13%200-19-3-3-4-3-10-3m62%200c-2%200-2%200-2%2013v13h8c7%200%208%200%2011-3%203-4%204-12%202-13l-2-4-1-5c-2-1-12-2-16-1m30%200h-8v13l1%2013h4c3%200%204-1%204-3%200-3%201-3%203%201%203%203%206%203%208%200%202-2%202-4%202-11s0-8-3-11c-2-2-3-2-11-2m28%200c-4%200-5%200-5%202l-1%202-1%202-2%202-1%202c1%201%200%202-1%202l-1%207%201%207h21V40c0-11%200-11-3-14-2-2-3-2-7-2m19%200h-6v26h4c4%200%204%200%204-3s0-4%202-4l1-3%201-3V24h-6m23%200l-1%202c0%203-1%202-3%200s-6-3-9-1l-1%2013%201%2012h8v-3c0-4%201-5%203-2l6%202h4V36c0-11%200-12-2-12l-4-1-2%201M61%2035c0%209%200%2010%202%2010%201%200%202-1%202-3%200-3%201-3%205-3%203%200%204%200%204%203%200%202%201%203%202%203%202%200%202-1%202-10%200-10%200-11-2-11s-2%201-2%204c0%204%200%204-3%204-4%200-4%200-4-4s0-4-3-4h-3v11m95-8c-3%203-3%2017%200%2019l2%203%208%201%207-1%201-2c2%200%201-20%200-22-3-2-15-1-18%202M36%2028c0%202%201%202%204%202l5%201-1%201c-2%200-8%208-8%2010v3h8c6%200%207%200%207-2s-1-2-4-2c-5%200-5%200-1-4l3-4%201-1c1-1%200-2-1-3-4-4-13-4-13-1m56%200l-1%202-1%201-4%208-1%203c0%203%200%203%204%203%202%200%203%200%203-2l2-2%202%202c0%202%201%202%203%202h3v-7c0-6%200-7-2-10-4-3-8-3-8%200m19-1l-1%2010c0%207%200%208%202%208s2-1%202-5l1-6%204%205c6%206%208%205%208-3s-1-10-3-10l-1%204c0%205-1%206-6%200-4-5-4-4-6-3m23%209v9h3c4%200%2012-6%2012-9%200-4-8-10-12-10h-3v10m24-7c-2%202-1%205%202%205l2%201%202%201c1%200%205%203%205%205%200%201-6%200-8-2s-2-2-4-1c-1%202-1%202%201%204%203%203%2011%204%2014%202%203-4%200-9-4-9-2%200-6-3-6-5l7%201h2c3-3%200-5-6-5-3%200-5%201-7%203m41%207v9h6c9%200%2014-5%209-9-2-2-3-4-1-4v-5l-8-1h-6v10m25%200c0%208%200%209%202%209s2-1%202-3c0-5%201-5%206%200%203%203%203%203%205%202%201-2%201-2-1-4-3-2-3-3%200-5%205-4%200-9-8-9h-6v10m30-8l-1%202-1%202-1%203-1%202-1%202-1%203c0%203%200%203%203%203%202%200%203%200%203-2%200-1%201-2%203-2l2%202c0%202%201%202%203%202h3v-7l-1-8-3-2-4-2c-2%200-3%200-3%202m18%208c0%208%200%209%202%209s2-1%202-3l1-3%201-3%201-4%201-3c0-3%200-3-4-3h-4v10m17-9l-1%2010c0%207%200%208%202%208s2-1%202-5c0-7%200-7%206-1s7%205%207-5c0-7%200-8-2-8s-2%201-2%204c0%205-1%206-6%200-4-5-4-4-6-3m-46%2055v10h23V71h-23v11m24%200v10h21V81l1-10h-22v11m23%200v10h22V71h-22v11m23%200v10h22V71h-22v11M137%2093v8l1%207h16V93l-8-1-9%201m22%200l-1%208v7h16V93l-8-1-7%201m84%2011v10h23V93h-23v11m24%200v10h21V93h-21v11m23%200v10h22V93h-22v11m23%200v10h22V93h-22v11m-174-4v6h13V94h-13v6m106%204v9h19V94h-19v10m46%200v9h20l-1-7c0-13%201-12-9-12h-10v10M93%2098c0%202-6%202-12%201h-3l-7%201-7%201c0%202%2011%202%2011%200h1c2%202%207%202%209%200h2l5%202c2%200%203-1%202-3%200-3-1-4-1-2m150%2028v11h23v-21l-12-1h-11v11m24%200v11h21v-22h-21v11m23%200v11h22v-21l-11-1h-11v11m23%200v11h10l11%201h-21v21h22v-43l-11-1h-11v11m-176%201l1%208h16v-15h-17v7m21%2019v7h16v-15h-16v8m85%203v10h23v-21h-23v11m24%200v10h21v-21h-21v11m23%200v10h22v-21h-22v11m-45%200v9h19v-19h-19v10m-2%2022v10h23v-21h-23v11m24%200v10h21v-21h-21v11m23%200v10h22v-21h-22v11m23-1v11h22v-20l-11-1h-11v10m-22%201v9h19v-19h-19v10m-130%201v8h16v-16h-16v8m82%2021v12h13c7%200%2012%200%2011-1l-1-11v-10l-12-1h-11v11m-82-5c-1%2010-1%2010%208%2010h8v-15h-16v5m1%202v7l6-1h7v-12h-13v6m154%203v8h16v-16h-16v8'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.948051948051948,"src":"/static/136983f100d98cb7c1e2d1ef306cf5fa/2a4de/poster.png","srcSet":"/static/136983f100d98cb7c1e2d1ef306cf5fa/6d161/poster.png 150w,\n/static/136983f100d98cb7c1e2d1ef306cf5fa/630fb/poster.png 300w,\n/static/136983f100d98cb7c1e2d1ef306cf5fa/2a4de/poster.png 600w,\n/static/136983f100d98cb7c1e2d1ef306cf5fa/db955/poster.png 900w,\n/static/136983f100d98cb7c1e2d1ef306cf5fa/f3583/poster.png 1200w,\n/static/136983f100d98cb7c1e2d1ef306cf5fa/be6d9/poster.png 9710w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/liberate","title":"Liberate - A Distributed Book Review Application","tags":["node.js","hadoop","spark","bash","rest-api"],"excerpt":"A Node.js based fully automated web application like GoodReads, with distributed analytics functionality.","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='289'%20viewBox='0%200%20400%20289'%20preserveAspectRatio='none'%3e%3cpath%20d='M183%2037v14l-1-13-1-12v27h2l6%201c3%200%203%200%202-1-2-1-2-1%200-1l3%201h11c-1%201-1%201%202%201l6-1h2V26l-1%2012v13l-4%201h-4l3-1%204-1V37l-1-13c-1-1-11%202-13%203l-5-1-8-2-3-1v14m-67%2074l-4%201-1%204v8l1%202h172l1-2c1-6%200-12-3-13H116m134%2046h-4l-3%201-1%207c0%207%200%208%202%209l2%201h1l2-1%201%201v2c2%202-1%205-4%206-3%200-3%201-4%204v3h6c5%200%206%200%205%201s0%201%203%201%203%200%201-1l-2-1h2l3%201h1v-34c0-1-10-2-11%200m-110%201l-5%201-3%201v20l4%201h11l7%201v-22l-14-2m76%2016l1%2016h17v-31l-9-1h-9v16m-21-12c-3%200-3%200-1%201v1c-5%202-6%202-3%203l2%201-2%201c-2-1-2%200-2%202s0%202%209%202c8%200%209%200%209-2s-1-2-5-2-4%200-3-2h4l3-1c1-1%200-1-2-1s-2%200-1-1l1-2-2%201h-1l-1-2-5%201m-28%2019l-2%202c-1%200-2%200-2%203-1%204-1%204%204%204l4%201%202%201%202-1v-1l1%201h2l2-4-2-4-2-2h-2c-3%202-6%203-6%201l2-1c2-1%202-1%200-1-2-1-3%200-3%201m23%202l-1%204c0%203%200%203%205%203l4%201%204%201%203-1v-1c2%200%202-1%202-4v-4h-8l-9%201m-45%2014h-4l-3%201c-2%200-2%202-2%2016v16h5c4%200%205%200%204%201s-1%201%201%201c1%200%202%200%201-1l3-1%203%201v-17l-1-16v-1l-1-1c-5-1-6-1-6%201m26-1h-2l-1%202c1%201%200%203-1%204l-2%204c1%201%200%202-1%202-3%200-3%205%200%206%203%200%204%2014%201%2014s-4%200-3%201l5%201%205%201c-1%201%200%201%202%201s2%200%201-1c-2-1-2-1%202-1l4-1-5-1c-6%200-7-3-5-7%201-1%201-1%201%201%200%201%204%205%205%204%202-2%200-6-3-6s-3-5%200-6c2%200%203-1%203-2h1c0%203%202%202%202-1l-1-3-1-4-2-4-1-1%203-1c2%200%202%200%201-1-1-2-5-2-6%200l-2%201v-1l1-2-1%201m55%200l-6%201-3%201-1%2016v16h5l4%201%202%201c2%200%202%200%201-1-2-1-2-1%202-1h4v-16l-1-17c-1-1-4-2-7-1m27%200l-4%201h4c3%201%202%201-3%201h-6l-1%2016v16h5l4%201c-1%201%200%201%201%201%202%200%202%200%201-1s0-1%202-1l4-1a4430%204430%200%2001-2-32l-1-2-4%201m-56%209v5c1%202-1%204-2%202l-2-2c-2%200-2%200-1-1v-2c-2%200-2%202-2%2012v11h4l4%201%202%201c2%200%202%200%201-1s-1-1%202-1l4%201v-24h-4l-3-1c0-2-2-2-3-1'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.3888888888888888,"src":"/static/bf0b5ac8334f3577278aa5b949685a71/4fe8c/liberate-1.jpg","srcSet":"/static/bf0b5ac8334f3577278aa5b949685a71/aabdf/liberate-1.jpg 150w,\n/static/bf0b5ac8334f3577278aa5b949685a71/9dc27/liberate-1.jpg 300w,\n/static/bf0b5ac8334f3577278aa5b949685a71/4fe8c/liberate-1.jpg 600w,\n/static/bf0b5ac8334f3577278aa5b949685a71/9842e/liberate-1.jpg 900w,\n/static/bf0b5ac8334f3577278aa5b949685a71/67c96/liberate-1.jpg 983w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}},{"node":{"frontmatter":{"path":"blog/music-generation","title":"Music Generation","tags":["keras","python","flask"],"excerpt":"A deep Neural Network tuned for jazz music generation, with a comparative study on multiple network architectures like LSTM and Transformers. A front end developed on React that allows users to feed in their own input notes while the model generates some infinite music!","cover":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='217'%20viewBox='0%200%20400%20217'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2051v51h12l13%201H0v6h12l13%201H12c-11%200-12%200-12%202s1%202%207%202l7%201H0v3c0%203%200%203%207%203l7%201H0v95h401V0H0v51m151-36c-8%204-10%2014-6%2023%204%208%201%208%2063%208h55l3-3c8-8%206-23-3-28-5-3-107-3-112%200m180%202c-9%206-8%2021%202%2026%205%203%2054%203%2059%201%206-3%208-6%208-14%200-15-1-15-37-15-27%200-29%200-32%202M104%2092v19H71l16%201h17v30a824%20824%200%20000-51m-86%2091c-15%205-15%2026-1%2031%2017%206%2031-16%2017-28-5-5-10-6-16-3m51-1c-13%204-16%2021-5%2030%204%203%2014%204%2019%200%2015-11%204-36-14-30m48%201c-13%206-13%2024-1%2030%2014%206%2029-6%2024-21-4-9-14-13-23-9m52%200c-12%203-15%2017-7%2026%209%2011%2027%206%2029-9%200-6%200-8-5-13-5-6-10-7-17-4m51-1c-8%202-12%209-12%2018%202%2021%2033%2020%2033-2%200-11-11-19-21-16m48%201c-13%206-13%2024-1%2030%206%203%2011%203%2016%200%2018-10%204-39-15-30m52-1c-20%208-12%2036%209%2033%2010-2%2016-15%2011-25-4-7-13-10-20-8m51%200c-8%202-12%2010-12%2018%202%2019%2028%2020%2033%202%203-12-9-24-21-20'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.829268292682927,"src":"/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/2a4de/musicgen.png","srcSet":"/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/6d161/musicgen.png 150w,\n/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/630fb/musicgen.png 300w,\n/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/2a4de/musicgen.png 600w,\n/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/db955/musicgen.png 900w,\n/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/f3583/musicgen.png 1200w,\n/static/79b0b87a20e4d8ff7f7f9809c0d3fac6/d004a/musicgen.png 3622w","sizes":"(max-width: 600px) 100vw, 600px"}}}}}}]}},"pageContext":{"postPath":"blog/promises-in-javascript","translations":[{"hreflang":"en","path":"/blog/promises-in-javascript"}]}},"staticQueryHashes":["4097791827"]}