<?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: Bytegasm!</title>
    <description>The latest articles on DEV Community by Bytegasm! (@bytegasm).</description>
    <link>https://dev.to/bytegasm</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%2F12783%2F67d1d69a-a423-43fc-aa18-650093e3d9c8.jpg</url>
      <title>DEV Community: Bytegasm!</title>
      <link>https://dev.to/bytegasm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bytegasm"/>
    <language>en</language>
    <item>
      <title>15 CSS Relative units, how many do you know? em, rem, ex, cap, ch, ic...</title>
      <dc:creator>Bytegasm!</dc:creator>
      <pubDate>Sat, 18 Aug 2018 13:05:47 +0000</pubDate>
      <link>https://dev.to/bytegasm/15-css-relative-units-how-many-do-you-know-em-rem-ex-cap-ch-ic-6m</link>
      <guid>https://dev.to/bytegasm/15-css-relative-units-how-many-do-you-know-em-rem-ex-cap-ch-ic-6m</guid>
      <description>

&lt;p&gt;If you are reading this, I'm pretty sure you know at least 5 ways of centring HTML elements using CSS. So, 15 options for relative sizing shouldn't come as a surprise to you. Let me tell you, some of them are bizarre.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The story&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I saw this tweet by JavaScript Teacher, I only knew 5–7 of these properties and it gave me a massive &lt;a href="https://www.urbandictionary.com/define.php?term=fomo" rel="noopener noreferrer"&gt;FOMO&lt;/a&gt; attack. So, I decided to write this article and save your from the FOMO.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1029722982774697985-289" src="https://platform.twitter.com/embed/Tweet.html?id=1029722982774697985"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1029722982774697985-289');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1029722982774697985&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What are relative units &amp;amp; why do we need 'em?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Have you ever wondered that none of the screens you own have the same sizes &amp;amp; dimensions? But they all do display webpages. So the webpages need to be styled in a way that adapts in &lt;em&gt;relative proportions&lt;/em&gt; to the display (or any other HTML element).&lt;/p&gt;

&lt;p&gt;In short, making such responsive, adaptive layouts gracefully possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zpy7ipngetcig8co0dg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zpy7ipngetcig8co0dg.gif" alt="new app downloads" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. the unpredicatble em&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Relative to the &lt;strong&gt;font-size&lt;/strong&gt; of the current element (&lt;code&gt;2em&lt;/code&gt; means twice the current font-size).  &lt;em&gt;A length property dependent on font-size, yep how magical.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.post {   
   font-size: 24px;
   border-left: 0.25em solid #4a90e2;
}

/* The border-left-width will compute to 6px. */
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Working with &lt;code&gt;em&lt;/code&gt; can get tricky as it gets it's value relatively from its parent element. In case of nested elements, it gets messy when the parent has &lt;code&gt;em&lt;/code&gt; value too.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. the savior rem (root em)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Just like &lt;code&gt;em&lt;/code&gt; but relative to the font size of the &lt;strong&gt;root element&lt;/strong&gt; of the document.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p {
    margin-left: 1rem;
}

h4 {
    font-size: 2rem;
}

/* Unlike the em, which may be different for each element, the rem is constant throughout the document */

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

&lt;/div&gt;


&lt;p&gt;For this technique, it is fundamental to set your base font-size, by browser default usually this is 16px.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3,4. vh and vw &lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Unlike &lt;code&gt;em&lt;/code&gt; and &lt;code&gt;rem&lt;/code&gt; which are dependent on font size &lt;code&gt;vh&lt;/code&gt; &amp;amp; &lt;code&gt;vw&lt;/code&gt; are dependent on the size of the viewport.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1vh&lt;/code&gt; = &lt;strong&gt;1%&lt;/strong&gt; or &lt;strong&gt;1/100th&lt;/strong&gt; of viewport height&lt;br&gt;
&lt;code&gt;1vw&lt;/code&gt; = &lt;strong&gt;1%&lt;/strong&gt; or &lt;strong&gt;1/100th&lt;/strong&gt; of viewport width&lt;/p&gt;

&lt;p&gt;You may have seen some sites with typography that scales beautifully as you resize your browser window, &lt;code&gt;vw&lt;/code&gt; &amp;amp; &lt;code&gt;vh&lt;/code&gt; make it happen.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;5,6. vmax &amp;amp; vmin&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Viewport max and viewport min: 1vw or 1vh, whichever is bigger or smaller respectively.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1vmax&lt;/code&gt; = &lt;strong&gt;1%&lt;/strong&gt; or &lt;strong&gt;1/100th&lt;/strong&gt; of the bigger value between 1vw or 1vh&lt;br&gt;
&lt;code&gt;1vmin&lt;/code&gt; = &lt;strong&gt;1%&lt;/strong&gt; or &lt;strong&gt;1/100th&lt;/strong&gt; of the smaller value between 1vw or 1vh &lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;7. Good'ol %&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Quite popular, everyone's friend &amp;amp; fairly obvious &lt;code&gt;%&lt;/code&gt; is relative to it's parent element.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.post {
  font-size: 24px;
}
.post-category {   
  font-size: 85%; 
} 
.post-title {   
  font-size: 135%; 
}
/*      
Child elements with % font sizes...      

  85%     
  0.85 * 24 = 20.4 px        
  135%     
  1.35 * 24 = 32.4 px
*/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Now let's dig into some obscure and relatively unknown ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;8,9. Experimental vi &amp;amp; vb&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The are experimental APIs not meant to be used in production as there .isn't any browser support.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1vb&lt;/code&gt; = 1% of the size of the initial &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FAll_About_The_Containing_Block" rel="noopener noreferrer"&gt;containing block&lt;/a&gt;, in the direction of root element's &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties#block-dimension" rel="noopener noreferrer"&gt;block axis&lt;/a&gt;.&lt;br&gt;
&lt;code&gt;1vh&lt;/code&gt; = 1% of the size of the initial &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FAll_About_The_Containing_Block" rel="noopener noreferrer"&gt;containing block&lt;/a&gt;, in the direction of root element's &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties#inline-dimension" rel="noopener noreferrer"&gt;inline axis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They aren't very popular or supported as they are quite new, you can dig more about them in CSS Value and Units Module Level 4.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;10,11. lh &amp;amp; rlh&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;They're like &lt;code&gt;em&lt;/code&gt; &amp;amp; &lt;code&gt;rem&lt;/code&gt; but instead of font-size they depend on line-height.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lh&lt;/code&gt; =  Equal to the computed value of the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/line-height" rel="noopener noreferrer"&gt;line-height&lt;/a&gt; property of the element on which it is used.&lt;br&gt;
&lt;code&gt;rlh&lt;/code&gt; = Equal to the computed value of the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/line-height" rel="noopener noreferrer"&gt;line-height&lt;/a&gt; property on the root element.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;12. ex&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;**ex**&lt;/code&gt; unit is rarely used. Its purpose is to express sizes that must be related to the x-height of a font. The &lt;strong&gt;x-height&lt;/strong&gt; is, roughly, the height of lowercase letters such as a, c, m, or o.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;13. cap&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It's the measure of the so called cap-height. The &lt;a href="https://drafts.csswg.org/css-values-4/#cap" rel="noopener noreferrer"&gt;spec&lt;/a&gt; defines cap-height as &lt;em&gt;approximately equal to the **height of a capital Latin letter&lt;/em&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;14. ch&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Represents the **width of character 0&lt;/em&gt;&lt;em&gt;,&lt;/em&gt; or more precisely the advance measure of the glyph "0" (zero, the Unicode character U+0030) in the element's font.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;15. 'ic' ideograph count&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ic&lt;/code&gt; is the Eastern equivalent of &lt;code&gt;ch&lt;/code&gt; mentioned above. It is the size of the CJK (Chinese/Japanese/Korean) ideograph &lt;code&gt;*水*&lt;/code&gt; ("water", U+6C34), so it can be roughly interpreted as "ideograph count".&lt;/p&gt;

&lt;p&gt;Some of these are pretty strange and uncommon but I'm pretty sure each one of them have their own use-cases and reasons to exist. What are your favourite ones?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>html</category>
      <category>responsive</category>
    </item>
    <item>
      <title>Fusion.js Universal Web Framework by UBER opensourced</title>
      <dc:creator>Bytegasm!</dc:creator>
      <pubDate>Thu, 02 Aug 2018 12:12:23 +0000</pubDate>
      <link>https://dev.to/bytegasm/fusionjs-universal-web-framework-by-uber-16em</link>
      <guid>https://dev.to/bytegasm/fusionjs-universal-web-framework-by-uber-16em</guid>
      <description>&lt;p&gt;If you are reading this, you already know that there is a new 'framework' in town. This may sound like everyday news in the Javascript world, but before you roll your eyes and go on a twitter rant, let's see what all the &lt;em&gt;FUSSion&lt;/em&gt; is about.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;React, Angular, Vue and now Fusion?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NO!&lt;/strong&gt; Fusion.js is not a replacement for React. To be precise Fusion.js is &lt;strong&gt;feature-rich-boilerplate&lt;/strong&gt; built on top of react &amp;amp; redux which tries to ease major pain points of modern Single Page Web Appications.&lt;/p&gt;

&lt;p&gt;It's been few hours since the &lt;a href="https://eng.uber.com/fusionjs/" rel="noopener noreferrer"&gt;launch of fusion.js&lt;/a&gt; so this is not a deep dive but a brief summary &amp;amp; first impressions on Fusion.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Server Side Rendering out of the box&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;SSR-ing your SPA has always been a bit tricky. There are various boilerplates that provide you setups to render your app on the server and hydrate it on the client. But these setups are quite opinionated and are deserted after some time, leaving you on your own. Fusion.js supports &lt;strong&gt;server-side-rendering right out of the box&lt;/strong&gt;. Which means, &lt;em&gt;isomorphic universal webapps&lt;/em&gt; which render on server and hydrate in the browser and SEO friendly pages which load faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Code Splitting &amp;amp; HMR right away&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Bundle splitting on an SSRed react-redux SPA has always been a front-end developer's &lt;em&gt;wet dream&lt;/em&gt;. But configuring webpack for it and getting it to work as intended in all major browsers has been a &lt;em&gt;nightmare&lt;/em&gt;. Also, Hot Module reloading is a blessing for devs, right? Both supported out of the box in Fusion.js.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Plugin Based Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A single entry point architecture enables Fusion.js to run it's code universally on the client as well as on the server. Thus also enabling plugins to be universal too. It allows plugin developers to co-locate snippets of code based on the library the code pertains to, as opposed to the environment the code runs in.&lt;/p&gt;

&lt;p&gt;This can be better understood by this graphic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AVst7vvHUUP-Fbzccb9PSxQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AVst7vvHUUP-Fbzccb9PSxQ.png" alt="plugins in fusion.js"&gt;&lt;/a&gt;&lt;br&gt;
plugins logic based on their logical grouping rather than based on where the code needs to be added.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Typed dependency injection&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Plugins  can expose &lt;em&gt;well-defined APIs as services&lt;/em&gt; to other plugins, and a plugin's dependencies can easily be mocked during tests. This is especially important when dependencies are responsible for communicating with data storage infrastructure or when they relate to observability (e.g., logging, analytics, and metrics).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2A4isGmV2nTYUvKdNN-WM2UQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2A4isGmV2nTYUvKdNN-WM2UQ.png" alt="dependency injection in  Fusion.js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;No more Express, welcome Koa&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Most of the SSR, code-splitting solutions out there are based on Express. Express has an API that encourages side effects which made complex response transformations difficult to encapsulate and test. Fusion.js however is &lt;strong&gt;based on Koa&lt;/strong&gt;, which provides a more &lt;strong&gt;unit-test friendly context-based API&lt;/strong&gt;, and an elegant and lightweight abstraction for request lifetime management based on the concept of downstreams and upstreams. Fusion.js core segregates network side effects from application state and leverages Koa and DI to achieve loose coupling between subsystems.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Test by your Taste&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Fusion.js support modern test tooling such as &lt;strong&gt;Jest, Enzyme &amp;amp; Puppeteer&lt;/strong&gt;. Apart from these, it also provides tools to test plugins. The fusion-test-utils package allows mocking the server itself, making it possible to quickly run integration tests between any permutation of plugins and mocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What about styling?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It's possible to use any CSS framework or library with Fusion.js. By default Fusion comes with support of &lt;strong&gt;&lt;a href="https://github.com/rtsao/styletron" rel="noopener noreferrer"&gt;Styletron&lt;/a&gt;&lt;/strong&gt;, a high performance atomic CSS library that is maintained by the Fusion.js team.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Component based routing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Fusion apps can use the &lt;strong&gt;fusion-plugin-react-router&lt;/strong&gt; to integrate routing features into the component tree. The plugin uses react-router under the hood, and exposes a similar API which allows you to add routing behavior anywhere in your component tree.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Other Goodies&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Security: automatically setup CSRF protection on endpoints.&lt;/li&gt;
&lt;li&gt;Data fetching: supports RPC-driven composable data fetching and GraphQL/Apollo&lt;/li&gt;
&lt;li&gt;Quality metrics: easily consume server performance and browser performance logging, error logging and generic event streams&lt;/li&gt;
&lt;li&gt;I18N: Automatically set up efficient bundle-splitting-aware translation loading&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;My 2 cents:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Open source projects from big companies always warm my heart. Being a front-end developer setting up SSRed, code-splitting setup on react, redux &amp;amp; express was one of the hardest challenges I've faced. So, seeing such setup open sourced which is also used on a large scale by Uber is really nice. &lt;/p&gt;

&lt;p&gt;Talking about Open Source, &lt;a href="https://dev.to/ben/the-devto-codebase-will-go-open-source-on-august-8-2kia"&gt;dev.to is going Open Source on 8/8/18&lt;/a&gt;. Yay!&lt;/p&gt;

&lt;p&gt;We already have amazing modern web setups like &lt;a href="https://github.com/zeit/next.js/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;, &lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;, &lt;a href="http://www.electrode.io/" rel="noopener noreferrer"&gt;Electrode&lt;/a&gt; , the more the merrier. I can't wait to use Fusion's in my next project and find out how it plays out. What do you think about Fusion.js?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Exciting year to be a web developer</title>
      <dc:creator>Bytegasm!</dc:creator>
      <pubDate>Fri, 19 Jan 2018 17:21:09 +0000</pubDate>
      <link>https://dev.to/bytegasm/exciting-year-to-be-a-web-developer-o0h</link>
      <guid>https://dev.to/bytegasm/exciting-year-to-be-a-web-developer-o0h</guid>
      <description>&lt;h1&gt;
  
  
  Exciting year to be a web developer.
&lt;/h1&gt;

&lt;p&gt;Welcome to 2018, where websites are the new rage. Mind you, we call them webapps and not websites anymore. Every developer is in the race to deliver the fastest first byte. &lt;a href="https://digiday.com/media/new-mobile-site-forbes-boosted-impressions-per-session-10-percent/" rel="noopener noreferrer"&gt;Forbes&lt;/a&gt; new mobile site renders in 2.5 seconds, &lt;a href="https://developers.google.com/web/showcase/2017/bookmyshow" rel="noopener noreferrer"&gt;BookMyShow’s&lt;/a&gt; web conversion rates up by 80% and &lt;a href="https://developers.google.com/web/showcase/2017/olx" rel="noopener noreferrer"&gt;OLX&lt;/a&gt; has seen 250% more re-engagement on their website. What’s going on in this world wide web? With scary Javascript-CPU-profiler graphs that look like cardiograms of the lochness monster, all is being done to optimize every little bit we send down the wire. With google leading the bandwagon, all devs are set on the path to make the web great again. Oh, did I tell you websites can send notifications? And yes, offline websites are a thing now.&lt;/p&gt;

&lt;h2&gt;
  
  
  App craze of 201X
&lt;/h2&gt;

&lt;p&gt;Let’s go back to 2010, the rise of the smartphone pandemic. Thanks to iPhones &amp;amp; cheap android phones, you could find every second person using a smartphone. Every second guy was shooting angry birds or being a fruit ninja, whatsapp was becoming the goto communication channel and people were actually paying to download an app. All of a sudden every company wanted to have an app. But why?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offline access&lt;/strong&gt;: Since apps are download-once-use-forever, once downloaded a user can access them just on tap.&lt;br&gt;
&lt;strong&gt;Re-targeting by notifications&lt;/strong&gt;: You can make your users come back to the app by sending them notifications, relevant product information to capture their attention.&lt;br&gt;
&lt;strong&gt;Native features&lt;/strong&gt;: A native app has compatibility with a devices’ hardware and features like camera, location, sensors, file system etc.&lt;br&gt;
&lt;strong&gt;Better performance&lt;/strong&gt;: Since apps have access to device hardware and they have freedom of design, apps are supposed have a better performance and speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with mobile apps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Low new app downloads&lt;/strong&gt;: Majority of smartphone users do not download new apps. &lt;a href="https://www.morenews.pk/people-spend-80-of-their-time-on-these-5-mobile-apps/" rel="noopener noreferrer"&gt;Consumers spend 80% of their time on these 5 apps&lt;/a&gt;. Top 10 heavily used apps are owned by facebook &amp;amp; google.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2A_xHHcGy5P-PxQ8gN95WMbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2A_xHHcGy5P-PxQ8gN95WMbg.png" title="percentages of people downloading new apps per month (its 51% for 0 apps)" alt="new app downloads"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Barrier to entry&lt;/strong&gt;: Getting a user to download an app, spend time and data for the download and then getting to use it is a big barrier in app acquisition.&lt;br&gt;
Apps are storage intensive: With most iphones users running out of space frequently and cheap android phones with low storage capabilities, downloading and keeping an app is a tough choice for a lot of users in developing countries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where web wins:
&lt;/h2&gt;

&lt;p&gt;The world wide web has been the go-to source for our information consumption since the advent of internet. Let us check out why web still exists and wins:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discoverability&lt;/strong&gt;: You search something on google and bam! you’ve a list of websites you never knew existed. Its easy for you to discover new content on web and the websites to be discovered.&lt;br&gt;
&lt;strong&gt;Broader Reach And Instant Access&lt;/strong&gt;: From low-end feature phones to shiny iphones, each one of them has a browser in it. Hit a URL and voila, you’ve the content to you in a matter of seconds irrespective of the device config.&lt;br&gt;
&lt;strong&gt;Shareability&lt;/strong&gt;: Even when native apps need to share something over the web they need a web URL. URLs are the best way to point someone to a source.&lt;br&gt;
&lt;strong&gt;Development&lt;/strong&gt;: A website doesn’t need to be developed differently for every other OS or device. Its awrite-once-run-everywhere thing.&lt;br&gt;
&lt;strong&gt;Updates &amp;amp; maintenance&lt;/strong&gt;: You can update your webapp multiple times a day but updating an app frequently? Boy your users are going to be so pissed.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-784795446472544256-289" src="https://platform.twitter.com/embed/Tweet.html?id=784795446472544256"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-784795446472544256-289');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=784795446472544256&amp;amp;theme=dark"
  }



&lt;br&gt;
--Relatable?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution? Progressive Web Apps :
&lt;/h2&gt;

&lt;p&gt;What if you marry all the goodness of the web with features that native apps provide? You get progressive web apps. Let’s see what all Progressive Webapps can do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installable&lt;/strong&gt;: With just a tap, your website gets installed in the phone and added to the homescreen just like a native app.&lt;br&gt;
Notification goodness: You can send push notifications, just like native apps can.&lt;br&gt;
&lt;strong&gt;Offline&lt;/strong&gt;: Using offline cache APIs your installed webapp can function offline as well.&lt;br&gt;
&lt;strong&gt;Updates are a bliss&lt;/strong&gt;: You just update the website on your server and the app cache will gracefully update itself without the user noticing. As many updates as you want without the user noticing it.&lt;br&gt;
&lt;strong&gt;Progressive&lt;/strong&gt;: Though the support for PWA is increasing rapidly, there may be some browser not supporting all the APIs. In such cases your PWA will function just like any other website. So, no more support issues. Support everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the future holds:
&lt;/h2&gt;

&lt;p&gt;It is clear that the next generation of webapps a.k.a Progressive Webapps are going to be an obvious standard in a few years. With growing browser support and user education users will expect websites to be PWAs. These are the exciting things coming up in PWAs :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install PWAs on your computer from windows store. Microsoft has promised to bring PWAs to edge and then PWAs can be added to the windows store which users can download on their computers. Isn’t that terrific?&lt;/li&gt;
&lt;li&gt;Firefox for android, adds support for progressive web apps.&lt;/li&gt;
&lt;li&gt;Apple added support for service workers in Safari Tech preview. ( &lt;a href="https://mobiforge.com/news-comment/safari-service-workers-and-other-pwa-good-news-stories" rel="noopener noreferrer"&gt;Good things coming&lt;/a&gt; )&lt;/li&gt;
&lt;li&gt;Tinder launched its PWA. So did Twitter, Uber, Pinterest, Google Maps and many other big players. Also, you are reading this on a blazing fast PWA right now, try adding it to the homescreen. ;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Popular articles on PWAs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Very Opinionated: &lt;a href="https://medium.com/javascript-scene/native-apps-are-doomed-ac397148a2c0" rel="noopener noreferrer"&gt;Native Apps are doomed - by Eric Elliot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://events.withgoogle.com/progressive-web-app-dev-summit/" rel="noopener noreferrer"&gt;Progressive Web App Dev Summit&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/dev-channel/why-progressive-web-apps-vs-native-is-the-wrong-question-to-ask-fb8555addcbb" rel="noopener noreferrer"&gt;Why PWA vs Native is the wrong question to ask&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://m.phillydevshop.com/apples-refusal-to-support-progressive-web-apps-is-a-serious-detriment-to-future-of-the-web-e81b2be29676" rel="noopener noreferrer"&gt;Apple’s refusal to support Progressive Web Apps is a detriment to future of the web&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web</category>
      <category>webdev</category>
      <category>pwa</category>
      <category>progressivewebapps</category>
    </item>
  </channel>
</rss>
