<?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: Nicholas Mendez</title>
    <description>The latest articles on DEV Community by Nicholas Mendez (@snickdx).</description>
    <link>https://dev.to/snickdx</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%2F304653%2Fd0e52f0e-c7ea-4cfe-ac87-d6755560c44b.jpg</url>
      <title>DEV Community: Nicholas Mendez</title>
      <link>https://dev.to/snickdx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/snickdx"/>
    <language>en</language>
    <item>
      <title>Low code solutions for devs to consider.</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Tue, 15 Nov 2022 17:07:11 +0000</pubDate>
      <link>https://dev.to/snickdx/low-code-solutions-for-devs-to-consider-1057</link>
      <guid>https://dev.to/snickdx/low-code-solutions-for-devs-to-consider-1057</guid>
      <description>&lt;h2&gt;
  
  
  How low can you go
&lt;/h2&gt;

&lt;p&gt;Traditionally as dev's we may take pride in our ability of implementing systems 'from scratch'. We may scoff at tools that seem to provide 'shortcuts' for the work we do, but perhaps this attitude is counter productive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Low-code_development_platform"&gt;Low code/no code&lt;/a&gt; is a term that refers to a class tech products and services which aim to simplify the implementation of technological solutions. This can be done at various levels and this post will give a breakdown of the eco-system at a glance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spreadsheets&lt;/li&gt;
&lt;li&gt;Builders&lt;/li&gt;
&lt;li&gt;Static Site Generators&lt;/li&gt;
&lt;li&gt;Content Management Systems&lt;/li&gt;
&lt;li&gt;Backends&lt;/li&gt;
&lt;li&gt;Automations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Spreadsheets
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iBBLM-sW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5dnmtjpi2hxxqmtlbo9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iBBLM-sW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5dnmtjpi2hxxqmtlbo9a.png" alt="spreadsheet apps logos" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've probably heard it before but the joke "economies and industries run on excel" definitely holds water.&lt;/p&gt;

&lt;p&gt;Products like &lt;a href="https://www.microsoft.com/en-us/microsoft-365/excel"&gt;Excel&lt;/a&gt;, &lt;a href="https://www.google.com/sheets/about/"&gt;Google Sheets&lt;/a&gt;, &lt;a href="https://airtable.com"&gt;Airtable&lt;/a&gt; and &lt;a href="https://www.nocodb.com/"&gt;Noco DB&lt;/a&gt; are very effective for organizing data and can be integrated to work as a data source for web &amp;amp; mobile applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Builders
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qsvKN0es--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/neuvrzm64kxc6jsi28e1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qsvKN0es--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/neuvrzm64kxc6jsi28e1.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These products provide drag and drop interfaces for quickly putting together an application or website. For websites there's; &lt;a href="https://www.squarespace.com/"&gt;Squarespace&lt;/a&gt;, &lt;a href="https://www.wix.com/"&gt;Wix&lt;/a&gt; and really recently &lt;a href="https://www.canva.com/website-builder/"&gt;Canva&lt;/a&gt; to name a few.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kYyefgrd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jmd2o7b9gx0qrl8j56i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kYyefgrd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jmd2o7b9gx0qrl8j56i.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For building applications there's; oracle apex for that work with larger scaled oracle databases, &lt;a href="https://livecode.com/"&gt;LiveCode&lt;/a&gt;, &lt;a href="https://powerapps.microsoft.com/"&gt;Microsoft Power Apps&lt;/a&gt; and &lt;a href="https://flutterflow.io/"&gt;Flutter Flow&lt;/a&gt; for cross platform applications built in flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Static Site Generators
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L_6FEIa4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9qxldifwb720cy6kjxwy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L_6FEIa4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9qxldifwb720cy6kjxwy.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are nifty tools that let you create a fully static build of a website (no server-side code required). Tools like &lt;a href="https://www.gatsbyjs.com/"&gt;gatsby&lt;/a&gt;, &lt;a href="https://www.11ty.dev/"&gt;eleventy&lt;/a&gt; and &lt;a href="https://jekyllrb.com/"&gt;jekyll&lt;/a&gt; allow you to author a website's content with plain text files. Then, you can generate a full web experience from the files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Management Systems
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2k8XlamW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjq0ygwhocku9wqvoc2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2k8XlamW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjq0ygwhocku9wqvoc2p.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Content/learning management systems, such as &lt;a href="https://wordpress.org/"&gt;Wordpress&lt;/a&gt;, &lt;a href="https://www.drupal.org/"&gt;Drupal&lt;/a&gt;, &lt;a href="https://www.joomla.org/"&gt;Joomla&lt;/a&gt;, &lt;a href="https://business.adobe.com/products/magento/magento-commerce.html"&gt;Magento&lt;/a&gt; and &lt;a href="https://moodle.org/"&gt;Moodle&lt;/a&gt; are fullstack web applications that you can configure and customize for course websites, blogs and e-commerce. Many if not all of these options are popular and open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backends
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ocJGAWt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9jn2gn0afawjt142p2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ocJGAWt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9jn2gn0afawjt142p2l.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Mobile_backend_as_a_service"&gt;Back end as a Service (BaaS)&lt;/a&gt; are products that let you manage various aspects of you applications such as hosting, auth, database, uploads, cloud functions in a very "&lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;serverless&lt;/a&gt;" way. The most popular one is probably &lt;a href="//firebase.com"&gt;firebase&lt;/a&gt;, &lt;a href="https://www.netlify.com/"&gt;netlify&lt;/a&gt; is vastly growing. &lt;a href="https://appwrite.io/"&gt;Appwrite&lt;/a&gt; and &lt;a href="https://supabase.com/"&gt;Superbase&lt;/a&gt; are really cool opensource alternatives. &lt;/p&gt;

&lt;h2&gt;
  
  
  Automations
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--afJlfOhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pojyn36sviz9djmpf4gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--afJlfOhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pojyn36sviz9djmpf4gk.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Automations are really fun tools that let us create flows with popular products and services without needing to setup api keys and coding. For example you can let a form submission from airtable trigger an automated email campaign in &lt;a href="https://mailchimp.com"&gt;mailchimp&lt;/a&gt;. Tools like &lt;a href="https://zapier.com"&gt;zapier&lt;/a&gt; and &lt;a href="https://ifttt.com/"&gt;IFTTT&lt;/a&gt; are very popular and more recently we have &lt;a href="https://www.buildable.dev/"&gt;buildable&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zGmBi4Ki--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/spnzl09r6wruirgugbco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zGmBi4Ki--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/spnzl09r6wruirgugbco.png" alt="Image description" width="622" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will also include &lt;a href="https://en.wikipedia.org/wiki/Robotic_process_automation"&gt;Robotic Process Automation (RPA)&lt;/a&gt; tools like UI path, Automation 360 and Microsoft's power automate. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why should devs care about no code?
&lt;/h2&gt;

&lt;p&gt;The proliferation of lowcode shows a clear trend in the industry. There is a growing market of people that don't mind trading off in-depth customization for ease of use.&lt;/p&gt;

&lt;p&gt;Meanwhile, as developers we may take pride of our 'from scratch' implementations but are we really doing that? &lt;/p&gt;

&lt;p&gt;Yes, you wrote that code but you're using a framework, written in a language implemented on a runtime running on protocol by someone else's design. One can argue that your &lt;a href="https://reactjs.org/"&gt;react.js&lt;/a&gt; is just a lowcode wrapper for vanilla JS.&lt;/p&gt;

&lt;p&gt;Technology is all about building on top of work done by those before us and low/code is just an extension of that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wZCXCy3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqdomid87s3nuy2v6ks0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wZCXCy3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqdomid87s3nuy2v6ks0.jpg" alt="coding purity comic illustrating the previous point." width="740" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My parody of xkcd's &lt;a href="https://xkcd.com/435/"&gt;purity&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Many of these services can be integrated with to save us considerable amount of time. This let's us focus on delivering our core competency rather than stretching ourselves thin over various concerns of a software solution.&lt;/p&gt;

&lt;p&gt;Note, this is by no means an exhaustive list. As technologists we need to be aware of all options that are available if we are to build the best solution for our users. &lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>tooling</category>
      <category>react</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Connection Types In Web Apps</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Mon, 14 Feb 2022 17:26:27 +0000</pubDate>
      <link>https://dev.to/snickdx/connection-types-in-web-apps-15ie</link>
      <guid>https://dev.to/snickdx/connection-types-in-web-apps-15ie</guid>
      <description>&lt;h1&gt;
  
  
  Making Connections
&lt;/h1&gt;

&lt;p&gt;Web apps have come a long way form being static documents that are loaded into the browser. Here's an overview of the different methods modern web apps can use to send and receive data.&lt;/p&gt;

&lt;h1&gt;
  
  
  XHR/Fetch
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpn2a5akxat8ca1l086h7.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpn2a5akxat8ca1l086h7.png" alt="Image description"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest" rel="noopener noreferrer"&gt;XMLHttpRequest (XHR) API&lt;/a&gt; became standard in 2004 and revolutionized how web apps were build. Before then, presenting new data on a page required an immersion breaking refresh or a redirect. &lt;/p&gt;

&lt;p&gt;XHR allowed apps to request data programmatically in the background and then we can manipulate the DOM to present it. This technique of data fetching and updating the page is referred to as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Guide/AJAX" rel="noopener noreferrer"&gt;Asynchronous JavaScript and XML (AJAX)&lt;/a&gt;. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" rel="noopener noreferrer"&gt;fetch API&lt;/a&gt; is a newer, promise-based alternative to XHR.&lt;/p&gt;

&lt;h1&gt;
  
  
  Web Sockets
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4sta1xz6sw911ymub7f.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4sta1xz6sw911ymub7f.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://images.app.goo.gl/YbwfRo4WDat7KQ3X9" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API" rel="noopener noreferrer"&gt;Web Socket API&lt;/a&gt; is a very popular API for building real time web apps that provide features like tracking and messaging. &lt;/p&gt;

&lt;p&gt;It allows web apps to create a keep open connection to the server and transfer bidirectional messages across the connection. &lt;a href="https://socket.io/" rel="noopener noreferrer"&gt;Socket IO&lt;/a&gt; is a popular library used for building with web sockets.&lt;/p&gt;
&lt;h1&gt;
  
  
  Server Sent Events
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzafqwpzndqnznqfshl1h.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzafqwpzndqnznqfshl1h.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://images.app.goo.gl/bNeDzhWixwTUSn7T9" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events" rel="noopener noreferrer"&gt;Sever Sent Events&lt;/a&gt; is an API that allows application servers to send data to the client over an HTTP connection.&lt;/p&gt;

&lt;p&gt;This API is different from web sockets in that it is unidirectional. It is simply a means for a server to push updates to a client.&lt;/p&gt;
&lt;h1&gt;
  
  
  Web RTC
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy31y0ait580w66x77uug.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy31y0ait580w66x77uug.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://images.app.goo.gl/rrp1xRNrWbuL9mdB7" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://webrtc.org/" rel="noopener noreferrer"&gt;Web Real-time Connection (RTC)&lt;/a&gt; is a standardized API for peer to peer communication. It is available on all major browsers and supports video and voice. Many video calling applications use Web RTC Under the hood.&lt;/p&gt;
&lt;h1&gt;
  
  
  Push Notifications
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgym2htp0vo9jp2k5cja7.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgym2htp0vo9jp2k5cja7.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://images.app.goo.gl/e32MPopWLFgEjpeN8" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Push_API" rel="noopener noreferrer"&gt;Push API&lt;/a&gt; is a standard web API that facilitates push notifications on the web. It is natively supported on all major browsers except those on the MAC or IOS platform (push notifications can sill be done however using &lt;a href="https://developer.apple.com/notifications/safari-push-notifications/#:~:text=Use%20the%20Apple%20Push%20Notifications,when%20Safari%20isn't%20running.&amp;amp;text=They%20display%20your%20website%20icon,go%20right%20to%20your%20website." rel="noopener noreferrer"&gt;Apple Push&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Push notifications are a neat way to give reminders, updates and alerts to the user to increase engagement once the user has opt-in. &lt;/p&gt;

&lt;p&gt;Push notifications are special from the others in that it is the only way for a server to push data to an app that isn't currently open by the user.&lt;/p&gt;

&lt;p&gt;You can also have silent data notifications that update your apps in the background.&lt;/p&gt;
&lt;h1&gt;
  
  
  Web Transport
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2yQIBZbKhdU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.dev/webtransport/#use-cases" rel="noopener noreferrer"&gt;Web transport&lt;/a&gt; is a new specification which serves to be provide a lower latency connection by removing the sequencing delivery that web sockets do. It works on top of &lt;a href="https://en.wikipedia.org/wiki/HTTP/3" rel="noopener noreferrer"&gt;HTTP3&lt;/a&gt; to provide and can be used as a client to server alternative to web RTC. It's still very early for web transport (scheduled for release in chrome 97) but it is an exciting development none the less.&lt;/p&gt;

&lt;h1&gt;
  
  
  Comparison
&lt;/h1&gt;

&lt;p&gt;So which method should you use? Here's a table which summarizes the differences:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Connection Type&lt;/th&gt;
&lt;th&gt;Transfer Mode&lt;/th&gt;
&lt;th&gt;Common Usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XHR/Fetch&lt;/td&gt;
&lt;td&gt;Client to Server&lt;/td&gt;
&lt;td&gt;Most dynamic web apps, pull to refresh, gmail, instagram etc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Sockets&lt;/td&gt;
&lt;td&gt;Bi Directional&lt;/td&gt;
&lt;td&gt;Text messaging applications, broadcasting, real-time applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server Sent Events&lt;/td&gt;
&lt;td&gt;Server to Client&lt;/td&gt;
&lt;td&gt;Streaming data, tracking, timers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web RTC&lt;/td&gt;
&lt;td&gt;Client to Client&lt;/td&gt;
&lt;td&gt;Screen sharing, video calling apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push Notifications&lt;/td&gt;
&lt;td&gt;Server to Client&lt;/td&gt;
&lt;td&gt;Notifications, alerts, background updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Transport&lt;/td&gt;
&lt;td&gt;Bi Directional&lt;/td&gt;
&lt;td&gt;Low latency, unordered messaging, media streaming, online games&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Over the next couple of weeks I shall take a deep dive in each methodology. Which one have you used? Are you looking forward to a specific method?&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webrtc.org/" rel="noopener noreferrer"&gt;Web RTC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.dev/webtransport/#use-cases" rel="noopener noreferrer"&gt;Web.dev Using Web Transport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Push_API" rel="noopener noreferrer"&gt;MDN Push API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://auth0.com/blog/developing-real-time-web-applications-with-server-sent-events/" rel="noopener noreferrer"&gt;Auth0 Developing Real Time Web Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>webrtc</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Dev in Dev: Issue 1 Nov 2021</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Fri, 19 Nov 2021 04:28:26 +0000</pubDate>
      <link>https://dev.to/snickdx/dev-in-dev-issue-1-nov-2021-482i</link>
      <guid>https://dev.to/snickdx/dev-in-dev-issue-1-nov-2021-482i</guid>
      <description>&lt;h1&gt;
  
  
  About D.I.D.
&lt;/h1&gt;

&lt;p&gt;The Developments in (Web) Development series is about pulling together interesting updates and developments that come across my radar in web development. This can include product releases, updates conference talks and events.&lt;/p&gt;

&lt;h1&gt;
  
  
  Transitional Apps?
&lt;/h1&gt;

&lt;p&gt;AJAX and Single Page Apps ushered in a new age of web experiences, however it is not without it's flaws. Transitional Apps is a new paradigm of web apps that proposes a new direction. &lt;a href="https://mobile.twitter.com/Rich_Harris"&gt;Rich Harris&lt;/a&gt; of &lt;a href="https://svelte.dev/"&gt;Svelte&lt;/a&gt; introduces this concept at &lt;a href="https://jamstackconf.com/"&gt;Jam Stack Conf 2021&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/860d8usGC0o"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Transitions on the Web
&lt;/h1&gt;

&lt;p&gt;Transitional apps isn't the only effort to improve navigational experiences in web apps. The &lt;a href="https://developer.chrome.com/blog/shared-element-transitions-for-spas/"&gt;shared element transition API&lt;/a&gt; is a proposal to bring native transitions to the web platform. Some of the goals of this overlap with an earlier proposal called the &lt;a href="https://web.dev/hands-on-portals/"&gt;Portals API&lt;/a&gt;. You can try out shared element transitions and give feedback at their &lt;a href="https://github.com/WICG/shared-element-transitions"&gt;github repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can demo this &lt;a href="https://preact-with-nav-transitions.netlify.app/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fJVUos3K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akd4nswo7901zifdrige.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fJVUos3K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akd4nswo7901zifdrige.gif" alt="Image description" width="640" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Powerful Performance Tooling
&lt;/h1&gt;

&lt;p&gt;One really interesting announcement of Chrome Dev Summit 2021 is the &lt;a href="https://web.dev/lighthouse-user-flows"&gt;lighthouse user flows&lt;/a&gt;. This allows you to audit and profile the performance of an application throughout various user interactions.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/n57U2_-3NLQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Cutting Edge Computing
&lt;/h1&gt;

&lt;p&gt;NextJS recently &lt;a href="https://nextjs.org/blog/next-12"&gt;announced version 12&lt;/a&gt; and with it came a several features and services. One of which is &lt;a href="https://vercel.com/features/edge-functions"&gt;Vercel's edge functions&lt;/a&gt; which is basically cloud functions that run on the &lt;a href="https://en.wikipedia.org/wiki/Edge_computing"&gt;edge&lt;/a&gt; (CDNs). This concept isn't entirely new as &lt;a href="https://workers.cloudflare.com/"&gt;Cloud Flare Workers&lt;/a&gt; and &lt;a href="https://deno.com/deploy/docs"&gt;Deno Deploy&lt;/a&gt; have a similar goals. This signifies yet another shift in how we think about building and deploying web apps.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/lRQ5z7i7pxE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Next level serverless
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.serverless.com/blog/introducing-serverless-cloud-public-preview"&gt;Serverless Cloud&lt;/a&gt; is a recently launched platform that lets build, test and deploy to cloud seamlessly right into your cloud editor!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/GtLnCy4oVPk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;That brings us to the end of the first issue of D.I.D. What is your favourite update? Do you have one you'd like to share? Please let me know in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  Need More?
&lt;/h1&gt;

&lt;p&gt;I'll be giving a talk at &lt;a href="https://bit.ly/DFCarib2021"&gt;DevFest Caribbean 2021&lt;/a&gt; today at 4:30 pm (-400 GMT) that goes deeper into this stuff. You are welcomed to check it out as well as the other amazing talks at the event.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3l7oy-ijKlk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>news</category>
      <category>webdev</category>
      <category>performance</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Backend, for The Absolute Beginner</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 17 Oct 2021 03:04:22 +0000</pubDate>
      <link>https://dev.to/snickdx/backend-for-the-absolute-beginner-4bk5</link>
      <guid>https://dev.to/snickdx/backend-for-the-absolute-beginner-4bk5</guid>
      <description>&lt;p&gt;Nowadays, it seems that Frontend gets all of the hype in web dev. You build a page with HTML, CSS &amp;amp; JS then let it talk to an API (JAM Stack). However, how do you build an API in the first place? What is server side programming? This is your quick start guide.&lt;/p&gt;

&lt;h1&gt;
  
  
  History of web
&lt;/h1&gt;

&lt;p&gt;To understand backend, I think it's a good understand how web started first. Luckily, I have just the article for you.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/snickdx" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sht9hMwX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.dev.to/cdn-cgi/image/width%3D150%2Cheight%3D150%2Cfit%3Dcover%2Cgravity%3Dauto%2Cformat%3Dauto/https%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F304653%252Fd0e52f0e-c7ea-4cfe-ac87-d6755560c44b.jpg" alt="snickdx"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/snickdx/a-brief-history-of-the-web-9c3" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;A "Brief" History of the Web&lt;/h2&gt;
      &lt;h3&gt;Nicholas Mendez ・ Sep 19 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#php&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;In any case here is the TLDR;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A guy creates a network protocol (it lets computers talk to each other)&lt;/li&gt;
&lt;li&gt;Another person creates a language for formatting documents (HTML)&lt;/li&gt;
&lt;li&gt;Web browser software is invented that lets you request and loads documents from one networked computer to another &lt;/li&gt;
&lt;li&gt;JavaScript is created and it allows for simple programs to be executed after being loaded alongside the requested documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point people thought if you are connecting to a computer anyway why not allow a programs to be ran on that said computer instead of just returning documents.&lt;/p&gt;

&lt;p&gt;These programs were called server side scripts and they did things like dynamically build ( or pre-process) the documents before sending them to the client. &lt;/p&gt;

&lt;h1&gt;
  
  
  Server Side Programming
&lt;/h1&gt;

&lt;p&gt;Now there are two programming environments in the web. The server side scripts that are executed before the response given to the client and then the client side scripts (JavaScript) that executes after.&lt;/p&gt;

&lt;p&gt;The following diagram shows how the same experience can be offered with a webpage vs a server side script. Some html is sent to the browser and "hi" is logged to the console. &lt;/p&gt;

&lt;p&gt;The server side script in this case simply returns what otherwise would have been the contents of an html document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqjedstcmmvoifao6j5z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqjedstcmmvoifao6j5z.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unlike the client side JavaScript code, the server side scripts are never downloaded to the browser. This enabled server-side scripts to perform more security critical tasks like connecting to databases and thus be used to build dynamic web applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  TLDR What really is backend then?
&lt;/h1&gt;

&lt;p&gt;Backend programming is simply writing code to be executed when a request is sent to a server side script. The output of said code must be some text that will finally be sent back to the browser.&lt;/p&gt;

&lt;p&gt;The following is an example of a server side script written in &lt;a href="https://nodejs.org/en/"&gt;Nodejs&lt;/a&gt; using the &lt;a href="https://expressjs.com/"&gt;express framework&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//initialize express&lt;/span&gt;

&lt;span class="c1"&gt;//code to run when the url "/" is requested by the browser&lt;/span&gt;
&lt;span class="c1"&gt;//req object lets us get details of the request like the url path&lt;/span&gt;
&lt;span class="c1"&gt;//res object lets us set details for the response&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;&amp;lt;script&amp;gt;console.log('hi')&amp;lt;/script&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server up!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Routing
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/URL"&gt;URLs&lt;/a&gt; play a critical role in the web. It determines which page on the webserver that we want to retrieve. In the case of back end programming, the concept of routing relates to what code we execute in response to the URL path of the request. For example we can setup another route that does something different when /index is requested.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
    &amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;
    &amp;lt;a href="/index"&amp;gt;Go to /index&amp;lt;/a&amp;gt; 
    &amp;lt;script&amp;gt;console.log('hi')&amp;lt;/script&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
    &amp;lt;h1&amp;gt;This is a second route&amp;lt;/h1&amp;gt;
    &amp;lt;a href="/"&amp;gt;Go to /&amp;lt;/a&amp;gt;
    &amp;lt;script&amp;gt;console.log('hi')&amp;lt;/script&amp;gt;
    `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server up!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see this code in action &lt;a href="https://replit.com/@Snickdx/nodeapp"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Did we just build a Web Server?
&lt;/h1&gt;

&lt;p&gt;This is a common misconception. This script can also be called a node web application but some may call it a node web server. However, the proper term for this program is &lt;a href="https://en.wikipedia.org/wiki/Application_server"&gt;application server&lt;/a&gt;. Application server's do respond to http requests but they are not web server software. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Comparison_of_web_server_software"&gt;Web Server Software&lt;/a&gt; are usually standalone applications that host static files and can be configured to do many things. Two popular web server software are &lt;a href="https://httpd.apache.org/"&gt;Apache&lt;/a&gt; and &lt;a href="https://www.nginx.com/"&gt;Nginx&lt;/a&gt;. When we deploy a node web application we let browsers connect to a webserver which then forwards along requests meant for the application server (&lt;a href="https://en.wikipedia.org/wiki/Reverse_proxy"&gt;Reverse Proxy&lt;/a&gt;). This setup is shown in this article's first diagram. This isn't to say a webserver cannot be &lt;a href="https://www.npmjs.com/package/http-server"&gt;implemented in node&lt;/a&gt; but most use cases we use it to build an application server.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;And that's basically what backend is about, setting up routes to be executed based on the path of the URL. I hope this article has proved to be informational for some.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A "Brief" History of the Web Part 4</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 10 Oct 2021 02:50:28 +0000</pubDate>
      <link>https://dev.to/snickdx/a-brief-history-of-the-web-part-4-194b</link>
      <guid>https://dev.to/snickdx/a-brief-history-of-the-web-part-4-194b</guid>
      <description>&lt;p&gt;In this final post of the series, we shall cover some of the popular developments in web since 2017 to today. Whether it's Web Assembly, PWA, SSR or the JAM Stack let's take a look at web dev today and possibly, the future.&lt;/p&gt;

&lt;h1&gt;
  
  
  Integrations
&lt;/h1&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpbu61l7l99hjpdxp8zd.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzpbu61l7l99hjpdxp8zd.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gisford.medium.com/the-third-party-api-economy-891b2a774fa5" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Web services, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Third_party_APIs" rel="noopener noreferrer"&gt;3rd Party APIs&lt;/a&gt; and Software Development Kits are resources that let you integrate 3rd party solutions and services into your product. APIs allow you build on top of existing products like PayPal, Google Services, Facebook etc instead of building everything from scratch. &lt;/p&gt;

&lt;h1&gt;
  
  
  The Single Page App
&lt;/h1&gt;

&lt;p&gt;The rise of AJAX gave birth to a new kind web application architecture. The &lt;a href="https://en.wikipedia.org/wiki/Single-page_application" rel="noopener noreferrer"&gt;single page application&lt;/a&gt; is a web app that rewrites the content of the page instead of redirecting an entirely new one. &lt;/p&gt;

&lt;p&gt;The core mechanic that allows this is routing, whereby JavaScript code is used to alter the URL and change the view to simulate navigating to another page. The following article gives a nice overview on this.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/marcomonsanto" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F306557%2F063989e9-8f7c-4a7a-8818-13b3eab529f8.jpg" alt="marcomonsanto"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/marcomonsanto/routing-in-spas-173i" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Routing in SPAs&lt;/h2&gt;
      &lt;h3&gt;Marco Monsanto ・ Jun 24 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#routing&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#spa&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Many of the popular web frameworks provide some means to perform routing.&lt;/p&gt;

&lt;h1&gt;
  
  
  Server Side Rendering
&lt;/h1&gt;

&lt;p&gt;However, in the craze of SPAs, many apps became too JavaScript heavy which resulted in long load times on lower-end devices and slower networks. Hence, many teams returned to the server side to once again take on view logic. &lt;/p&gt;

&lt;p&gt;Server Side Rendering allowed you to use the JavaScript Frameworks you love but on the server side. Projects like &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next JS&lt;/a&gt; render the first page of your react app on the server resulting lower load times.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mm4ided4zh89b168kvf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mm4ided4zh89b168kvf.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.websitepulse.com/blog/server-side-vs-client-side-rendering-complete-guide" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;After the first page load, JavaScript code would then be ready to handle subsequent routes. This handover is often called hydration. I go into more details about SSR in the following post.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/snickdx" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F304653%2Fd0e52f0e-c7ea-4cfe-ac87-d6755560c44b.jpg" alt="snickdx"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/snickdx/understanding-rendering-in-web-apps-ssr-1h83" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Understanding Rendering in Web Apps: SSR&lt;/h2&gt;
      &lt;h3&gt;Nicholas Mendez ・ Jan 14 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ssr&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#html&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 
&lt;h1&gt;
  
  
  JAM Stack
&lt;/h1&gt;

&lt;p&gt;As 3rd Party APIs and web services evolved, it suddenly became evident that 'static sites' can provide full app experiences which we thought were only possible with a full stack approach. &lt;/p&gt;

&lt;p&gt;Today, you don't need to manage your own database or write any backend code! Instead you can integrate with an API or a backend as a service (&lt;a href="https://www.cloudflare.com/learning/serverless/glossary/backend-as-a-service-baas/" rel="noopener noreferrer"&gt;BaaS&lt;/a&gt;) like &lt;a href="https://firebase.google.com/" rel="noopener noreferrer"&gt;firebase&lt;/a&gt;, &lt;a href="https://appwrite.io/" rel="noopener noreferrer"&gt;appwrite&lt;/a&gt; or &lt;a href="https://hasura.io/" rel="noopener noreferrer"&gt;hasura&lt;/a&gt;.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv64wwuazv7zm4klfstio.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv64wwuazv7zm4klfstio.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.freecodecamp.org/news/what-is-the-jamstack-and-how-do-i-host-my-website-on-it/" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can build a static site as a SPA using something like &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt; or using a &lt;a href="https://www.cloudflare.com/learning/performance/static-site-generator/#:~:text=A%20static%20site%20generator%20is,to%20users%20ahead%20of%20time" rel="noopener noreferrer"&gt;Static Site Generator&lt;/a&gt; like &lt;a href="https://www.11ty.dev/" rel="noopener noreferrer"&gt;Eleventy&lt;/a&gt; that will generate your website from markdown files. Projects like &lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; and &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; lets you statically generate your site and still use react.&lt;/p&gt;

&lt;p&gt;Headless Content Management Systems like &lt;a href="https://strapi.io/" rel="noopener noreferrer"&gt;Strapi&lt;/a&gt; and &lt;a href="https://www.netlifycms.org/" rel="noopener noreferrer"&gt;Netlify CMS&lt;/a&gt; let you manage content for your applications and make them accessible to your static sites via an API. The following talk gives a really good idea of how the JAM stack providing a new way to address old challenges.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/lFOfQsi5ye0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Progressive Web Apps
&lt;/h1&gt;

&lt;p&gt;In 2015, the term Progressive Web Applications (&lt;a href="https://en.wikipedia.org/wiki/Progressive_web_application" rel="noopener noreferrer"&gt;PWAs&lt;/a&gt;) was coined to describe next generation web applications that use cutting edge browser API's like the Service Worker to provide native like app experiences. &lt;/p&gt;

&lt;p&gt;In 2019, widespread adoption of the service worker was achieved and since then the capabilities of web applications now seem limitless. Now web apps can offer native like feature such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Offline Mode&lt;/li&gt;
&lt;li&gt;Push Notifications&lt;/li&gt;
&lt;li&gt;Background Synchronization&lt;/li&gt;
&lt;li&gt;OS Hemiscreen Integration&lt;/li&gt;
&lt;li&gt;File System Access&lt;/li&gt;
&lt;li&gt;Web Sharing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And much more. PWAs bring the capabilities of mobile to the reach of the web and its adoption and growth does not seem to be slowing down anytime soon. You can check out the &lt;a href="https://pwasummit.org/" rel="noopener noreferrer"&gt;PWA Summit 2021&lt;/a&gt; to get an idea of some of the recent developments of PWAs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Web Assembly
&lt;/h1&gt;

&lt;p&gt;Web Assembly is an open standard for a portable low-level code for executable programmes in the browser. It can also be compiled from other languages such as C/C++, C# and Rust. This made porting all kinds of applications to the web possible at near native speed. You can also use web assembly modules in JavaScript! &lt;/p&gt;

&lt;p&gt;One game changing application of web assembly is &lt;a href="https://blog.stackblitz.com/posts/introducing-webcontainers/" rel="noopener noreferrer"&gt;Stackblitz's web containers&lt;/a&gt;. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcp6dswhzvf73o8ewmpo.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcp6dswhzvf73o8ewmpo.png" alt="image"&gt;&lt;/a&gt;&lt;a href="https://blog.stackblitz.com/posts/introducing-webcontainers/" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The StackBlitz IDE now loads an entire node.js environment right into your web browser so you can execute server side code.. in the browser!? This innovation allows you to run and debug node.js servers right in the browser going full circle with JavaScript. &lt;/p&gt;

&lt;h1&gt;
  
  
  Web 3
&lt;/h1&gt;

&lt;p&gt;Web 3 is a proposed next evolution of the internet. It proposes moving to AI driven services, decentralized data via the blockchain and edge computing infrastructure. It will facilitate decentralized applications that may offer more privacy than current platforms ran by large corporations. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rb2b89qn4iu24la0lmp.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rb2b89qn4iu24la0lmp.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;While there is good reason for scepticism, there is a lot of buzz going around web 3 as many believe that it might be the next big thing. &lt;a href="https://web3js.readthedocs.io/en/v1.2.1/" rel="noopener noreferrer"&gt;web3.js&lt;/a&gt; is a JavaScript library that allows you to build apps on top of the Ethereum blockchain.&lt;/p&gt;

&lt;p&gt;You can learn more about Web 3 below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://decrypt.co/resources/what-is-web-3" rel="noopener noreferrer"&gt;What is Web 3?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b" rel="noopener noreferrer"&gt;What is Web 3.0 and Why it Matters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Writing this proved to be considerably more challenging than I thought. Even in this 4 part series I've left out so many other important developments like REST, SOAP, languages like ruby &amp;amp; pearl etc. Nevertheless, I hope you enjoyed this trip through memory lane and maybe you got a peek on what's to come.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A "Brief" History of the Web Part 3</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 03 Oct 2021 01:53:38 +0000</pubDate>
      <link>https://dev.to/snickdx/a-brief-history-of-the-web-part-3-3k3d</link>
      <guid>https://dev.to/snickdx/a-brief-history-of-the-web-part-3-3k3d</guid>
      <description>&lt;p&gt;It was 2006, AJAX was being widely adopted to build dynamic web experiences. As web apps became more complex, there was a need to make building them simpler. Thus the dawn of the framework wars began.&lt;/p&gt;

&lt;h1&gt;
  
  
  The First Generation
&lt;/h1&gt;

&lt;p&gt;I can't talk about the first frameworks/libraries without mentioning &lt;a href="https://jquery.com/" rel="noopener noreferrer"&gt;jquery&lt;/a&gt; of course. In this wave, libraries mainly focused providing some UI widgets, DOM manipulation, and AJAX. &lt;a href="https://en.wikipedia.org/wiki/Dojo_Toolkit" rel="noopener noreferrer"&gt;Dojo Toolkit&lt;/a&gt; appears to be the first framework ever released in 2004. jQuery was released in 2006, along with &lt;a href="https://en.wikipedia.org/wiki/MooTools" rel="noopener noreferrer"&gt;mootools&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/YUI_Library" rel="noopener noreferrer"&gt;yui&lt;/a&gt;. However, that fact that you probably only recognized jQuery is testament to its domination.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Second Generation
&lt;/h1&gt;

&lt;p&gt;In 2009 JavaScript was updated to EcmaScript Version 5, with growing platform capabilities and user expectations a second wave of frameworks began. Frameworks likes Angular in 2009, Backbone JS in 2010, Ember and Meteor in 2011 were on the rise. Two-way data-binding and templating were the features you would typically see in these frameworks. React was released in 2013 and two promising frameworks called Vue and Polymer were released in 2014. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmw9jhvhfupafllahsc0.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmw9jhvhfupafllahsc0.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/michaellnorth/status/720030263905005568/photo/1" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the server side, an interesting development happened in 2009. &lt;a href="https://en.wikipedia.org/wiki/Node.js" rel="noopener noreferrer"&gt;Nodejs&lt;/a&gt; was released as the first server side runtime for JavaScript. Now you can write your sever-side scripts and your client side code in JavaScript!&lt;/p&gt;

&lt;h1&gt;
  
  
  The Third Generation
&lt;/h1&gt;

&lt;p&gt;EcmaScript version 6 was released in 2015, this brought many quality of life improvements like arrow functions, template literals, let &amp;amp; const, promises and the fetch API. &lt;/p&gt;

&lt;p&gt;In this generation much attention was paid to state management, building UI components an optimizing their rendering with concepts like virtual DOM in the case of react. In 2015 Ember had a major update and in 2016 Angular JS was 'rebooted' to Angular &lt;a href="https://jaxenter.com/angular-2-0-announcement-backfires-112127.html" rel="noopener noreferrer"&gt;much to the dismay of many dev teams&lt;/a&gt;.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Freiamfs7fa2ll39dwpts.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Freiamfs7fa2ll39dwpts.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;One may argue that the framework fatigue really &lt;a href="https://www.breck-mckye.com/blog/2014/12/the-state-of-javascript-in-2015/" rel="noopener noreferrer"&gt;began to be felt here&lt;/a&gt;. Many developers were overwhelmed at the amount of diversity and the of fear having to learn a new framework ever so often was real. &lt;/p&gt;

&lt;p&gt;In 2016, interest in React surpassed Angular and Vue's popularity saw steady growth. Popularity in &lt;a href="http://aurelia.io/" rel="noopener noreferrer"&gt;Aurelia&lt;/a&gt; was also on the rise. By 2017 Angular took a clear 3rd place behind Vue and React at the top.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;While there were still new frameworks appearing, many took solace in how things seem to have settled down at the top. In the next post we shall catch up to the web today.&lt;/p&gt;

&lt;p&gt;Have you been in dev during these years? Perhaps you have been burned by the Angular Upgrade? Did you use Redux with React? Please share!&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/history-of-frontend-frameworks/" rel="noopener noreferrer"&gt;History of Front-End Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.breck-mckye.com/blog/2014/12/the-state-of-javascript-in-2015/" rel="noopener noreferrer"&gt;The State of JavaScript 2015&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://2016.stateofjs.com/" rel="noopener noreferrer"&gt;The State of JavaScript 2016&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://2017.stateofjs.com/" rel="noopener noreferrer"&gt;The State of JavaScript 2017&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>node</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A "Brief" History of the Web Part 2</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 26 Sep 2021 03:58:16 +0000</pubDate>
      <link>https://dev.to/snickdx/a-brief-history-of-the-web-part-2-2f8d</link>
      <guid>https://dev.to/snickdx/a-brief-history-of-the-web-part-2-2f8d</guid>
      <description>&lt;p&gt;In the last post in the series, we left off around a bit after 1993. Dynamic data-based applications were possible via the use of server side scripts.&lt;/p&gt;

&lt;h1&gt;
  
  
  CSS Standardization
&lt;/h1&gt;

&lt;p&gt;In 1994 Cascading Style Sheets (CSS), a language for affecting the presentation of HTML documents, was proposed by &lt;a href="https://en.wikipedia.org/wiki/H%C3%A5kon_Wium_Lie" rel="noopener noreferrer"&gt;Håkon Wium Lie&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/World_Wide_Web_Consortium" rel="noopener noreferrer"&gt;World Wide Web Consortium W3C&lt;/a&gt; was founded in 1994 as the standards organization of the Web and is still led by Tim Berners-Lee up to the time of writing.&lt;/p&gt;

&lt;p&gt;Additionally, in 1994, HTML version 4 was published with CSS support and CSS became recommended by the W3C. &lt;/p&gt;

&lt;h1&gt;
  
  
  The Rise JavaScript
&lt;/h1&gt;

&lt;p&gt;At this time webpages could be described as 'dynamic' but only until they were loaded in the browser. Until the next page load, the experience was static. There was great desire to add interactivity to webpages after being loaded. &lt;/p&gt;

&lt;p&gt;Hence, In 1995 the first version of a web browser was released with support of a new programming language created by &lt;a href="https://en.wikipedia.org/wiki/Brendan_Eich" rel="noopener noreferrer"&gt;Brendan Eich&lt;/a&gt;. That language later came to be known as JavaScript. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figqeto02f5c5wcsv7e4d.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figqeto02f5c5wcsv7e4d.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
JavaScript running in the Netscape Browser &lt;/p&gt;

&lt;p&gt;Now, we can manipulate the page, alert and prompt the user without performing a page navigation!&lt;/p&gt;

&lt;p&gt;In 1997 JavaScript was standardized as &lt;a href="https://en.wikipedia.org/wiki/ECMAScript" rel="noopener noreferrer"&gt;ECMAScript&lt;/a&gt; Version 1, ushering JavaScript to be supported across all browsers.&lt;/p&gt;

&lt;h1&gt;
  
  
  AJAX
&lt;/h1&gt;

&lt;p&gt;Using JavaScript, web pages became more interactive but more was left to be desired. If for instance, some data was changed in the database our page must be reloaded to retrieve it and see those changes. Additionally, when submitting a form; a page navigation must be made to the script handling the form data. &lt;/p&gt;

&lt;p&gt;Browser vendors experimented with various methods for having the browser make http requests in the background (or asynchronously) and then update the page with the response. In April 2006 the World Wide Web Consortium &lt;a href="https://en.wikipedia.org/wiki/World_Wide_Web_Consortium" rel="noopener noreferrer"&gt;W3C&lt;/a&gt; standardized the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest" rel="noopener noreferrer"&gt;XMLHTTPRequest (XHR) Object &lt;/a&gt; as a means to achieve this.&lt;/p&gt;

&lt;p&gt;This was big, now there was a standardized method for developers to have their web applications send and receive data without page loads! This revolutionized web application experiences. App-like sites like Gmail were now possible.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jw7y1tgmhwpmphq49gf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jw7y1tgmhwpmphq49gf.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The term Asychronous JavaScript and XML (AJAX) was coined to refer to this method of building dynamic web applications using XHR.&lt;br&gt;
Instead of returning HTML, some of our server side scripts can simply return our data as XML/JSON. Our JavaScript will request it then perform templating on the browser to display the data.&lt;/p&gt;

&lt;p&gt;Nowadays this is referred to as Client Side Rendering as opposed to Server Side Rendering when templating was done by the server side script.&lt;/p&gt;

&lt;h1&gt;
  
  
  Almost There
&lt;/h1&gt;

&lt;p&gt;I'm sure the technologies and methods in this article are familiar to the modern dev. We shall finish this series in the next and final post.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://auth0.com/blog/a-brief-history-of-javascript/" rel="noopener noreferrer"&gt;A Brief History of JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Ajax_(programming)" rel="noopener noreferrer"&gt;AJAX Programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>A "Brief" History of the Web</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 19 Sep 2021 03:59:54 +0000</pubDate>
      <link>https://dev.to/snickdx/a-brief-history-of-the-web-9c3</link>
      <guid>https://dev.to/snickdx/a-brief-history-of-the-web-9c3</guid>
      <description>&lt;p&gt;Looking back on how web apps started can give us an insight on where it's going. &lt;/p&gt;

&lt;h1&gt;
  
  
  Birth of the WWW
&lt;/h1&gt;

&lt;p&gt;While working for CERN in 1989 a British scientist of the name Tim Berners-Lee invented the World Wide Web. The idea was to create a world wide network of computers to form a global information system.&lt;/p&gt;

&lt;h1&gt;
  
  
  The first Web Webserver, Web Browser and Web Page
&lt;/h1&gt;

&lt;p&gt;It wouldn't be until late 1990 where Berners-Lee deployed the &lt;a href="http://info.cern.ch/hypertext/WWW/TheProject.html" rel="noopener noreferrer"&gt;world's first web page&lt;/a&gt;. A web page is a text document written in a special formatting language called the Hypertext Mark-up Language(HTML).&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ezmwnsf86v1jaui9nu7.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ezmwnsf86v1jaui9nu7.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
The world's first web server &lt;a href="https://cds.cern.ch/record/42413" rel="noopener noreferrer"&gt;Photo Credit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Web servers are simply computers connected to a network that exposes a portion of it's filesystem to any web browser that connects to the web server's IP address. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohyubyflp0v88vzvnu7g.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohyubyflp0v88vzvnu7g.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How the web works &lt;a href="https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fhackernoon.com%2Fhttp-made-easy-understanding-the-web-client-server-communication-yz783vg3&amp;amp;psig=AOvVaw1OCVjE_jE01-2c3ZIp6Lpk&amp;amp;ust=1632108712555000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;ved=0CA0Q3YkBahcKEwiQ_6vzjIrzAhUAAAAAHQAAAAAQAw" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When web browser software running on a networked client computer connects to the web server; it downloads and displays the server's documents according to the formatting specified in the document's HTML code. The network protocol that governs this communication is the Hypertext Transfer Protocol (HTTP).&lt;/p&gt;
&lt;h1&gt;
  
  
  The Start of the Dynamic Web
&lt;/h1&gt;
&lt;h2&gt;
  
  
  The Common Gateway Interface
&lt;/h2&gt;

&lt;p&gt;There was a demand for webpages to be 'smarter'. Since web servers are just computers why not execute programs on it? Hence the  &lt;a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface" rel="noopener noreferrer"&gt;Common Gateway Interface&lt;/a&gt; (CGI) was created in 1993. The CGI lets us configure our webservers to execute a program/script on the server as opposed to returning an html page from the filesystem when responding to a request.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06b5vf68b6dgw6e760xk.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06b5vf68b6dgw6e760xk.png" alt="CGI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially CGI was specified to execute scripts written in C. Support for shell scripts and other languages such as Perl, Ruby, Java Server Pages, Active Server Pages and PHP followed. But, what did these scripts do?&lt;/p&gt;
&lt;h2&gt;
  
  
  Templating
&lt;/h2&gt;

&lt;p&gt;Before server side scripting, websites were static read only experiences. When a web page was visited in the browser, the same content will appear unless there was an update by the author. If you had many pages of a website that shared common, styles or sections, they had to be individually written and updated on each page.&lt;/p&gt;

&lt;p&gt;Templating was the solution to this problem. This made building large websites significantly easier as you can reuse part of pages and use loops and if statements to generate html code. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52os29tq032m57mupxf6.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52os29tq032m57mupxf6.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How a template engine works &lt;a href="https://www.google.com/url?sa=i&amp;amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFile%3ATempEngWeb016.svg&amp;amp;psig=AOvVaw3HmEFye5Iv8bb7Pbak08qg&amp;amp;ust=1632110485306000&amp;amp;source=images&amp;amp;cd=vfe&amp;amp;ved=0CA0Q3YkBahcKEwjQ6uvEk4rzAhUAAAAAHQAAAAAQCQ" rel="noopener noreferrer"&gt;Image Credit&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;print_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;EOF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;putchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/var/www/cgi-bin/hello-world.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/var/www/cgi-bin/header.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;footer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/var/www/cgi-bin/footer.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Content-Type: text/html &lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;print_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;print_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;print_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A CGI Script written in c &lt;a href="https://stackoverflow.com/questions/41744184/using-a-c-cgi-to-serve-html-templates-forms" rel="noopener noreferrer"&gt;credit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The server side script interpreters come with a &lt;a href="https://en.wikipedia.org/wiki/Template_processor" rel="noopener noreferrer"&gt;Template Engine&lt;/a&gt;. Template Engines interpret script commands for pre-processing html in the server before being sending them to the browser.&lt;/p&gt;

&lt;p&gt;At this point, large websites were easier to make and we can change our page content based on form submission data from a previous page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling Data
&lt;/h2&gt;

&lt;p&gt;Now that an execution model has been established on the server, long term data storage could be integrated into web experiences. By having our server side scripts connect to databases and apply templating, web pages can become more dynamic. &lt;/p&gt;

&lt;p&gt;Now, the data on a page can be separated from its formatting.&lt;br&gt;
We can use a script to connect to a database, retrieve some data, then apply template syntax to display the data on a page. This allows the content of pages to be &lt;strong&gt;dynamically altered without updating the page itself&lt;/strong&gt; but rather by altering the data source instead. This was the start for many interactive web applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Stopping for now
&lt;/h1&gt;

&lt;p&gt;This post is turning out to be much longer than I imaged. Maybe it's not so brief after all. I think I shall make this a series instead and explore this further in the next post. Until next time! &lt;/p&gt;

&lt;p&gt;Update (25/09/2021)&lt;br&gt;
Many thanks to &lt;a href="https://dev.to/jcubic"&gt;Jackub&lt;/a&gt; for the suggestion about expanding on CGI. I have updated this article to expand on it.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting" rel="noopener noreferrer"&gt;Server Side Scripting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://home.cern/science/computing/birth-web/short-history-web" rel="noopener noreferrer"&gt;CERN a short history of the Web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>php</category>
    </item>
    <item>
      <title>Computer Science vs Software Engineering</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 12 Sep 2021 03:44:38 +0000</pubDate>
      <link>https://dev.to/snickdx/computer-science-vs-software-engineering-13di</link>
      <guid>https://dev.to/snickdx/computer-science-vs-software-engineering-13di</guid>
      <description>&lt;p&gt;Computer Science and Software Engineering are often compared with each other. While there are overlapping skills in both fields let's take look at how their approach to programming differ.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Computer Science 💻👩🏽‍🔬?
&lt;/h1&gt;

&lt;p&gt;Computer Scientist are typically preoccupied with developing new theory and technologies. This can be the next ground breaking Machine Leaning model like &lt;a href="https://openai.com/blog/gpt-3-apps/" rel="noopener noreferrer"&gt;GPT3&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/HTTP/3" rel="noopener noreferrer"&gt;the next version of HTTP&lt;/a&gt;. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwd9fd5ambd9m1u0tdoo.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwd9fd5ambd9m1u0tdoo.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Computer Scientists often work in Academic Institutions or Research &amp;amp; Development departments researching the building blocks of tomorrow's technology.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Software Engineering 🛠📱?
&lt;/h1&gt;

&lt;p&gt;Software Engineers apply traditional Engineering theory for developing to not only develop software products, but deploy, maintain and manage the people involved in the process. Software Engineering applies established theories and methods for building and maintaining software products under constraints.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0jfd46hohuuwmparfx9.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0jfd46hohuuwmparfx9.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Picture of SCRUM which is a popular agile development methodology&lt;/p&gt;

&lt;p&gt;Software Engineers can not only be found behind any software product but even in companies that do not sell software as their main product or service.&lt;/p&gt;

&lt;h1&gt;
  
  
  How does a Computer Scientist Code?
&lt;/h1&gt;

&lt;p&gt;All scientific fields strive to push the known theoretical boundaries through research and innovation. As such, when it comes coding, computer scientist are very much concerned with maximizing the efficiency of their programs and models. Computer Scientists place much emphasis in the design and the empirical analysis of their algorithms. &lt;/p&gt;

&lt;h1&gt;
  
  
  How does a Software Engineer Code?
&lt;/h1&gt;

&lt;p&gt;The goals of Software Engineers are much different to that of the Computer Scientist. Software Engineers spend time in various activities other than development such as software specification, validation and evolution. &lt;/p&gt;

&lt;p&gt;Often Software Engineers find themselves in a tricky balancing act between deadlines, stakeholder expectations and the non-functional requirements of the product. To such an extent that even code efficiency can take a back seat if the returns are not worth the effort. Instead, more focus is given to the quality of the code, so that it is easy to extend and maintain.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rha4rfum4lrexsan5yp.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rha4rfum4lrexsan5yp.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Software Engineers clearly specify the goals of their code and minimize the effort spent in achieving them precisely.&lt;/p&gt;

&lt;h1&gt;
  
  
  Should Engineers care about Algos &amp;amp; DS?
&lt;/h1&gt;

&lt;p&gt;We all hear about the dreaded code interviews of the big &lt;a href="https://en.wikipedia.org/wiki/Big_Tech" rel="noopener noreferrer"&gt;FAANG&lt;/a&gt; companies. Some devs are of the view that such focus on algorithms and data structures is unnecessary because they have never need to write something like a binary tree for production.  &lt;/p&gt;

&lt;p&gt;I think this criticism is misplaced. The reason FAANG requires mastery of algorithms and data structures is not only for their implementation sake, but rather for you to posses the profound &lt;strong&gt;analytical and problem solving skills you gain with them&lt;/strong&gt;. It also helps with cutting down their huge application pool. You can say that these companies prefer a software engineer with a strong set of Computer Science skills.&lt;/p&gt;

&lt;p&gt;However, this is for really big tech companies. You may very well find yourself in an software engineering job without a CS background, but I argue that the best engineers are likely to have it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Of course there's some nuance to this as it really depends on what you work on. If you are an engineer that never looked into Algos and DS, &lt;em&gt;I am in no way saying you are bad at your job&lt;/em&gt;. The good news is if you are interested about learning CS theory there are many &lt;a href="https://github.com/ForrestKnight/open-source-cs" rel="noopener noreferrer"&gt;online resources&lt;/a&gt; that are freely available.&lt;/p&gt;

&lt;h1&gt;
  
  
  References &amp;amp; Image Credit
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.digite.com/agile/scrum-methodology/" rel="noopener noreferrer"&gt;What is Scrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://decemberlabs.com/blog/openai-gpt3-the-new-ai-that-will-blow-your-mind-might-also-be-a-little-overrated/" rel="noopener noreferrer"&gt;GPT-3 The new  Ai that will blow you mind...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>computerscience</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>codequality</category>
    </item>
    <item>
      <title>How well do you know DOM JavaScript?</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 05 Sep 2021 03:50:49 +0000</pubDate>
      <link>https://dev.to/snickdx/how-well-do-you-know-dom-javascript-3fl5</link>
      <guid>https://dev.to/snickdx/how-well-do-you-know-dom-javascript-3fl5</guid>
      <description>&lt;p&gt;HTML and JavaScript have been around awhile, with its age there are some very nuanced tricks and hacks that aren't very well known. Let's take a look at some of them and when they are appropriate to use.&lt;/p&gt;

&lt;h1&gt;
  
  
  But first... the BOM
&lt;/h1&gt;

&lt;p&gt;The collection of JavaScript objects &amp;amp; methods that let use access the features of the browser is referred to as the Browser Object Model. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fczniaazwv9pgm5pegycu.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fczniaazwv9pgm5pegycu.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Document Object Model which is the hierarchy of elements on a page that is accessed from the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/documentElement" rel="noopener noreferrer"&gt;window.document&lt;/a&gt; object. The DOM is really just part of the wider Browser Object Model BOM. &lt;/p&gt;

&lt;p&gt;The BOM then forms part of the wider set of Web APIs which allow us to tap into the wider features of the web.&lt;/p&gt;

&lt;p&gt;I often like to access a form and its element via their names and the document object as shown below.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

    &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"myform"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;

       &lt;span class="c1"&gt;//you can access myform from the dom using document.forms&lt;/span&gt;
       &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;myform&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

       &lt;span class="c1"&gt;//you can access a form's element using form.elements&lt;/span&gt;
       &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  DOM Elements
&lt;/h1&gt;

&lt;p&gt;Every other html element can be accessed in JavaScript by using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector" rel="noopener noreferrer"&gt;document.querySelector()&lt;/a&gt;. The attributes of the HTML element can be accessed as a property of it's corresponding element object. &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#mylink&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mylink&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// https://google.com&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

      &lt;span class="c1"&gt;//access html attributes via properties&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// username&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// text&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// value entered into text field  &lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  Window and Global Scope
&lt;/h1&gt;

&lt;p&gt;Global functions and objects declared with &lt;strong&gt;var&lt;/strong&gt; can be referenced via the window object. Note, that doesn't work with block scoped variables declared with &lt;strong&gt;let&lt;/strong&gt; and &lt;strong&gt;const&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;(){}&lt;/span&gt;

        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;myVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// foo&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// undefined&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;// [function: baz]&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  DOM nodes and ID
&lt;/h1&gt;

&lt;p&gt;Any element with an ID will create a JavaScript object named after that ID. innerHTML is a very useful property that returns the contents of an HTML tab. Though it seems to behave quite differently across various browsers so you're probably better of using document.querySelector().&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"myheading"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My Heading&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;  

    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myheading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- logs "My Heading" --&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  JS in html attributes
&lt;/h1&gt;

&lt;p&gt;Some html attributes can allow JavaScript to be executed. The most popular use case is probably calling a function in an &lt;a href="https://www.w3schools.com/tags/ref_eventattributes.asp" rel="noopener noreferrer"&gt;event attribute&lt;/a&gt;. &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

   &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"btnClick()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;My Button &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
       &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;btnClick&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
           &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button clicked!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;You can also execute JavaScript in an anchor tab by specifying JavaScript in the hrefs value. This can supposedly work with elemetets that have the src attribute as well.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

   &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"javascript: console.log('hello')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; Say Hello&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;
&lt;h1&gt;
  
  
  Data attributes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes" rel="noopener noreferrer"&gt;Data attributes&lt;/a&gt; are custom attributes we can add to and element and are a great way to provide contextual data to an event handler. You can create a data attribute by supplying your custom attribute with a data- prefix. Then you can access the value by using the dataset property.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

   &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;data-name=&lt;/span&gt;&lt;span class="s"&gt;"john"&lt;/span&gt; &lt;span class="na"&gt;data-age=&lt;/span&gt;&lt;span class="s"&gt;"17"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"logUser(event)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;John Button&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;data-name=&lt;/span&gt;&lt;span class="s"&gt;"mary"&lt;/span&gt; &lt;span class="na"&gt;data-age=&lt;/span&gt;&lt;span class="s"&gt;"18"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"logUser(event)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Mary Button&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
      &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;logUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
         &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
         &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// logs john | mary&lt;/span&gt;
         &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// logs 17 | 18&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Here we used &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Event/target" rel="noopener noreferrer"&gt;event.target&lt;/a&gt; to get the elment that the click event occured on. This can only work if &lt;strong&gt;event&lt;/strong&gt; is passed to event handler logUser.&lt;/p&gt;

&lt;h1&gt;
  
  
  Editable Content
&lt;/h1&gt;

&lt;p&gt;I'm updating this post to include this section as I literally just came across this. You can add the &lt;strong&gt;coententeditable&lt;/strong&gt; attribute to any element to allow the user to edit the text of the element on the page.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

   &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;contenteditable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Text 1&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

   &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"heading2"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Text 2&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

   &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;

     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;heading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#heading2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

     &lt;span class="c1"&gt;// can also be set via contentEditable property&lt;/span&gt;
     &lt;span class="nx"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contentEditable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

     &lt;span class="c1"&gt;// the input event fires anytime content id edited&lt;/span&gt;
     &lt;span class="nx"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;oninput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
         &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Input received&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;You can also apply this to the entire page via the window.document.designMode property. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;designMode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;on&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oawauodalacn9f61t6i.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oawauodalacn9f61t6i.gif" alt="FairYellowgreenBusiness - Replit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I hope you've learned a few new things in this post. Are there any lesser known tricks that I may have missed? Please share!&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/buntine/dom-elements-with-ids-are-global-variable"&gt;Dev.to: DOM Elements with IDs are Global Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/6003819/what-is-the-difference-between-properties-and-attributes-in-html" rel="noopener noreferrer"&gt;Stack Overflow: Attributes &amp;amp; Properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/2725156/complete-list-of-html-tag-attributes-which-have-a-url-value" rel="noopener noreferrer"&gt;Stack Overflow: URL Elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/27852405/html-attributes-that-can-contain-javascript" rel="noopener noreferrer"&gt;Stack Overflow: Elements with JS Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/3434278/do-dom-tree-elements-with-ids-become-global-variables" rel="noopener noreferrer"&gt;Stack Overflow: ID and Global Variable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/1391278/contenteditable-change-events" rel="noopener noreferrer"&gt;Stack Overflow: OnInput Event&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>Degree vs Self Taught vs Boot Camp </title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 29 Aug 2021 02:37:45 +0000</pubDate>
      <link>https://dev.to/snickdx/degree-vs-self-taught-vs-boot-camp-3bo7</link>
      <guid>https://dev.to/snickdx/degree-vs-self-taught-vs-boot-camp-3bo7</guid>
      <description>&lt;p&gt;It's been a long ongoing debate. With the prevalence of widely available information online, many wonder if a degree is still worth it for getting into the tech industry. My programming journey started self taught but I am a CS graduate and currently teach CS Courses at the University level. Here's my take on the matter.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Criticisms of a college degree
&lt;/h1&gt;

&lt;p&gt;The most obvious disadvantage of a degree is the cost. Cost in terms of time and finances. Tuition in US based Universities appear to be on the constant rise. For many people, finding the time to do a 3 or 4 year degree may simply be infeasible especially when trying for a career change.&lt;/p&gt;

&lt;p&gt;There will always be a gap between the cutting edge developments of industry and academic curriculum. A common concern is undergoing the sacrifices of pursuing a degree only to learn irrelevant or outdated material. &lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges of being self taught
&lt;/h1&gt;

&lt;p&gt;We live at a great time for dev, there's so much free content, communities and mentors that can be of great help. However, the caveat is that the sheer amount of content can be overwhelming. Often, it's hard to know where to start or what to learn as there are so many differing opinions in web development.&lt;/p&gt;

&lt;p&gt;Secondly, many traditional firms still require a degree programme for even entry level tech jobs. Even when a degree is not required, you often hear stories of self taught devs being condescended by their formally educated colleagues. The good news things like this seem to be on decline as the industry focuses more on outcomes and portfolios rather than just grades.&lt;/p&gt;

&lt;h1&gt;
  
  
  The dangers of Boot Camps
&lt;/h1&gt;

&lt;p&gt;Boot Camps, nano degrees and courses are a great way to seek focused shorter term education dedicated to mastering a specific subject. Unfortunately, there are some predatory boot camps out there offering &lt;a href="https://ultratechlife.com/tech/coding-bootcamp-fraud-isa/"&gt;poor quality education or making false promises&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I've seen Boot Camps that rush content and you end up learning a specific framework as opposed to programming and web development in general. A web developer should have other skills like communication, project management and software design. A boot camp typically focuses on the technical skillset.&lt;/p&gt;

&lt;h1&gt;
  
  
  Advantages of being self taught
&lt;/h1&gt;

&lt;p&gt;Good self taught developers will always have my respect. It takes so much motivation, discipline and courage to take on web dev like that. The self taught devs I've worked with are passionate people and are generally happy to help others as they can empathize with newbies.&lt;/p&gt;

&lt;p&gt;The only advice I'd give to self taught devs is to look into some computer science and software engineering concepts to round off their knowledge. Things such as algorithms, data structures, requirements gathering, agile, design patterns and SOLID principles.&lt;/p&gt;

&lt;h1&gt;
  
  
  Advantages of a Degree
&lt;/h1&gt;

&lt;p&gt;When it comes to the degree discussion I think people often undermine some of its value. Yes, you will get a paper at the end, but the university experience offers much more. The life-long colleagues you will make, networking, internships and other student opportunities that offer profound personal growth and development also await. People don't describe college as the 'best time of their life' for no reason. For those who can do college, it's ultimately up to you to make the best of your time there.&lt;/p&gt;

&lt;p&gt;New tech comes and goes all the time but a good degree programme instils a balance of solid, immutable foundational concepts and modern methodologies &amp;amp; technologies. Additionally, a Computer Science degree will cover more than just web development, you get alorithms &amp;amp; data structures, operating systems, databases, devops, software engineering, cloud, networking, AI, cyber security etc so there are other career options as well.&lt;/p&gt;

&lt;p&gt;When it comes to cost, you may want to consider Universities based outside of the US where tuition can be as much as 50% cheaper!&lt;/p&gt;

&lt;h1&gt;
  
  
  Advantages of a Boot Camp
&lt;/h1&gt;

&lt;p&gt;Like a degree, boot camps provide a set curriculum and ensures you cover content via lectures, labs and assessments. For many, it's easier to rely on this structure a rather than finding the motivation for self study. A good boot camp can get you up to speed without the commitment of a degree. I know some talented devs who have transitioned into tech via a Boot Camp. &lt;/p&gt;

&lt;p&gt;If you are doing a Boot Camp, try to go for one recommended by an experienced dev, ideally one without ties to the camp itself. Additionally, you may also want to seek out online courses or Nano degrees to cover Computer Science and Software Engineering concepts to compliment your technical knowledge. &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;At the end of the day, no matter what the path, learning never ends as that is the nature of Technology. This stuff can be intimidating but that's what your community is for! &lt;/p&gt;

&lt;p&gt;Please feel free to @me on &lt;a href="https://twitter.com/snickdx"&gt;twitter&lt;/a&gt; if you have questions on career guidance or just need of general advice, I'd be happy to help out!&lt;/p&gt;

&lt;p&gt;I promise you, if you really want it you can make it no matter the path, you just need to keep striding. What path are you on or have taken? What advice would you give for that path? Please share in the comments!&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>career</category>
    </item>
    <item>
      <title>The Async Series: Async Functions</title>
      <dc:creator>Nicholas Mendez</dc:creator>
      <pubDate>Sun, 22 Aug 2021 03:50:26 +0000</pubDate>
      <link>https://dev.to/snickdx/the-async-series-async-functions-pnb</link>
      <guid>https://dev.to/snickdx/the-async-series-async-functions-pnb</guid>
      <description>&lt;h1&gt;
  
  
  The long awaited async function
&lt;/h1&gt;

&lt;p&gt;In the last post, we covered promises and promise chaining with .then(). Promise chains provided an improvement over nested callbacks but in this post we'll cover something that does even better.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Recap
&lt;/h1&gt;

&lt;p&gt;Recall our favourite async library lib from previous posts in this series. We saw how we can use the .then() method on promises to form a promise chain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
    &lt;span class="nf"&gt;printBlue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;printGreen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Green&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;printRed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The promise chain synchronises the async calls so that they execute in the intended order.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrjns3tanh4hkvnxd48x.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrjns3tanh4hkvnxd48x.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Async/Await
&lt;/h1&gt;

&lt;p&gt;However, ECMAscript 2016 released the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function" rel="noopener noreferrer"&gt;Async/Await&lt;/a&gt; syntax, it allows us to declare async functions. In async functions we can use the &lt;strong&gt;await&lt;/strong&gt; keyword. Await lets us block asynchronous promised based calls and get the value that the promise resolves to instead of using .then(). The following is previous code snippet converted to an async function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printFun&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;printBlue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;printGreen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Green&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//doesn't execute until printBlue finishes&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;printRed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//doesn't execute until printGreen finishes&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;    
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice we use a top level try catch block instead of the .catch() method. Async functions lets uses easily &lt;strong&gt;synchronize&lt;/strong&gt; promised based APIs in the top level. &lt;/p&gt;

&lt;h1&gt;
  
  
  It all adds up
&lt;/h1&gt;

&lt;p&gt;Let's see how we can use this with the async add() function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;  &lt;span class="nf"&gt;addAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;The one thing to note however, is that &lt;em&gt;Anything returned by an async function will be wrapped in a promise&lt;/em&gt;. So if we wanted to log the result of the last function we would have to do the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="c1"&gt;//call .then() on the promise&lt;/span&gt;
&lt;span class="nf"&gt;addAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
  &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// OR use another async function&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printSum&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;addAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printSum&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;An that's it for the async series. Async functions really makes things easier to work with async calls but just remember they return promises. I hope this series helped you get to grips with async code in JavaScipt. As always &lt;a href="https://replit.com/@Snickdx/async-3#index.js" rel="noopener noreferrer"&gt;here&lt;/a&gt; is a REPL to try out the examples yourself.&lt;/p&gt;

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