<?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: Muhammad Arshad</title>
    <description>The latest articles on DEV Community by Muhammad Arshad (@marshad).</description>
    <link>https://dev.to/marshad</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%2F775655%2F30bf6542-02ed-44e3-bebe-256b5426797b.jpeg</url>
      <title>DEV Community: Muhammad Arshad</title>
      <link>https://dev.to/marshad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marshad"/>
    <language>en</language>
    <item>
      <title>Python in the Browser</title>
      <dc:creator>Muhammad Arshad</dc:creator>
      <pubDate>Fri, 06 May 2022 14:37:55 +0000</pubDate>
      <link>https://dev.to/marshad/python-in-the-browser-4njk</link>
      <guid>https://dev.to/marshad/python-in-the-browser-4njk</guid>
      <description>&lt;p&gt;All you need to know about PyScript by Anaconda&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cZrA7sT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/742/1%2AFUNvzxCilab_HdK3IaQcoA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cZrA7sT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/742/1%2AFUNvzxCilab_HdK3IaQcoA.gif" alt="" width="742" height="484"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="http://pyscript.net/"&gt;http://pyscript.net/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anaconda engineer &lt;strong&gt;Fabio Pliger&lt;/strong&gt; and author of pyscript project, unveil the project that enables python programmers to write python scripts that can run in browser.&lt;/p&gt;

&lt;p&gt;He says in his latest blog;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the main reasons I joined Anaconda seven and a half years ago was the company’s commitment to the data science and Python communities by creating tools that enable people to do more with less.&lt;/p&gt;

&lt;p&gt;Today I'm happy to announce a new project that we’ve been working on here at Anaconda and we hope will take another serious step towards making&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  TL;DR
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;PyScript&lt;/strong&gt; is a framework based on &lt;strong&gt;pyodide&lt;/strong&gt; project that is Port of CPython to Web Assembly (WASM)/&lt;a href="https://emscripten.org/"&gt;Emscripten&lt;/a&gt;.Which is enables users to build rich Python applications in the browser by combining Python and standard HTML.&lt;br&gt;&lt;br&gt;
PyScript aims to provide users with a first-class programming language that is more expressive, has consistent styling rules, and is easier to learn.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;What is Pyodide?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Pyodide&lt;/strong&gt; allows you to install and run Python packages in your browser using micropip.On PyPi, any pure Python package with a wheel is supported.&lt;br&gt;&lt;br&gt;
Many C-extension packages have also been ported for use with Pyodide.&lt;br&gt;&lt;br&gt;
Many general-purpose Python packages, such as regex, PyYAML, and lxml, are included, as are scientific Python packages such as NumPy, pandas, SciPy, Matplotlib, and scikit-learn.&lt;/p&gt;
&lt;h4&gt;
  
  
  Core Components
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K-5iIBtk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/700/0%2AT58MBM3k1MZfXps-" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K-5iIBtk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/700/0%2AT58MBM3k1MZfXps-" alt="" width="700" height="245"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://www.anaconda.com/blog/pyscript-python-in-the-browser"&gt;https://www.anaconda.com/blog/pyscript-python-in-the-browser&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python in the browser:&lt;/strong&gt; Enable drop-in content, external file hosting (made possible by the &lt;a href="https://pyodide.org/"&gt;Pyodide&lt;/a&gt; project, thank you!), and application hosting &lt;em&gt;without&lt;/em&gt; the reliance on server-side configuration&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python ecosystem:&lt;/strong&gt; Run many popular packages of Python and the scientific stack (such as numpy, pandas, scikit-learn, and more). Any pure Python package with a wheel available on PyPi is supported.If your package is unavailable you need to open PR to Pyodide project&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python with JavaScript:&lt;/strong&gt; Bi-directional communication between Python and Javascript objects and namespaces&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment management:&lt;/strong&gt; Allow users to define what packages and files to include for the page code to run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;py-env&amp;gt;                              
- './static/wheels/travertino-0.1.3-py3-none-any.whl' - './static/wheels/toga_core-0.3.0.dev33-py3-none-any.whl' - './static/wheels/toga_web-0.3.0.dev33-py3-none-any.whl' - './static/wheels/freedom-0.0.1-py3-none-any.whl' &amp;lt;/py-env&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Visual application development:&lt;/strong&gt; Use readily available curated UI components, such as buttons, containers, text boxes, and more&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible framework:&lt;/strong&gt; A flexible framework that can be leveraged to create and share new pluggable and extensible components directly in Python&lt;/p&gt;

&lt;h4&gt;
  
  
  PyScript’s goals:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Offer a clean and simple API&lt;/li&gt;
&lt;li&gt;Support standard HTML&lt;/li&gt;
&lt;li&gt;Extend HTML to read custom components that are opinionated and reliable&lt;/li&gt;
&lt;li&gt;Provide a pluggable and extensible components system&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Try pyscript
&lt;/h4&gt;

&lt;p&gt;To try PyScript, import the appropriate pyscript files to your html page with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /&amp;gt;
&amp;lt;script defer src="https://pyscript.net/alpha/pyscript.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At that point, you can then use PyScript components in your html page. PyScript currently implements the following elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;: that can be used to define python code that is executable within the web page. The element itself is not rendered to the page and only used to add logic&lt;/li&gt;
&lt;li&gt;: creates a REPL component that is rendered to the page as a code editor and allows users to write code that can be executed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development setup
&lt;/h3&gt;

&lt;p&gt;PyScript does not require any development environment other than a web browser. We recommend using &lt;a href="https://www.google.com/chrome/"&gt;Chrome&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you’re using &lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt;, the &lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer"&gt;Live Server extension&lt;/a&gt; can be used to reload the page as you edit the HTML file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create your first PyScript
&lt;/h3&gt;

&lt;p&gt;Here’s an example of PyScript saying “Hello, world!”&lt;/p&gt;

&lt;p&gt;Using your preferred editor, create a new file called hello.html in the same directory as your PyScript, JavaScript, and CSS files, and open it in your web browser.&lt;br&gt;&lt;br&gt;
In most cases, you can open an HTML file by double-clicking it in your file explorer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /&amp;gt;
    &amp;lt;script defer src="https://pyscript.net/alpha/pyscript.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt; 
    &amp;lt;py-script&amp;gt; print('Hello, World!') &amp;lt;/py-script&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The use of the  tag in the HTML body is notable. This is where your Python code will be written. We’ll go over each of PyScript’s eight tags in the sections below.&lt;/p&gt;

&lt;h4&gt;
  
  
  First Hand experience
&lt;/h4&gt;

&lt;p&gt;I tried few examples after cloning the repo and discovered that they have a slow load time, which isn’t the fault of this framework because it affects all WASM projects.&lt;/p&gt;

&lt;p&gt;I think it best suited for game development in web browser or data visualization/dashboards projects.&lt;/p&gt;

&lt;p&gt;PyScript is just getting started, and their goal for it is far bigger than what they’ve displayed right now. While it is still unstable and limited, it does work!&lt;/p&gt;




</description>
      <category>python</category>
      <category>pyscript</category>
      <category>webassembly</category>
    </item>
    <item>
      <title>Node.JS 18 Released</title>
      <dc:creator>Muhammad Arshad</dc:creator>
      <pubDate>Thu, 21 Apr 2022 18:51:54 +0000</pubDate>
      <link>https://dev.to/bitlogix/nodejs-18-released-3je9</link>
      <guid>https://dev.to/bitlogix/nodejs-18-released-3je9</guid>
      <description>&lt;p&gt;All you need to know about Nodejs 18&lt;/p&gt;

&lt;h3&gt;
  
  
  A Quick Intro
&lt;/h3&gt;

&lt;p&gt;Node.js is a cross-platform, open-source back-end JavaScript runtime environment that uses the V8 engine to execute JavaScript code outside of a web browser.The basic idea behind Node.js is to employ non-blocking, event-driven I/O to keep data-intensive real-time applications that run across dispersed devices light and efficient.&lt;/p&gt;

&lt;h3&gt;
  
  
  Node.js v18?
&lt;/h3&gt;

&lt;p&gt;It’s that time of year again, when Node.js 18.0 is released by the Node.js community. The most wonderful news is that in October 2022, this version will be elevated to long-term support (LTS). The codename for the release will be ‘Hydrogen’ once it is promoted to long-term support. Support for Node.js 18 will last until April 2025. Before that, we need the rest of the ecosystem to test it out and provide feedback to the community. This will allow us to address any issues ahead of time and ensure that the release, ecosystem, and customers are all ready when it is released.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deprecation and Removals
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**_“(SEMVER-MAJOR)_**  **_fs_** _: runtime deprecate string coercion in fs.write, fs.writeFileSync (Livia Medeiros) #42607_

**_(SEMVER-MAJOR)_**  **_dns_** _: remove dns.lookup and dnsPromises.lookup options type coercion (Antoine du Hamel) #41431_

**_(SEMVER-MAJOR)_**  **_process_** _: runtime deprecate multipleResolves (Benjamin Gruenbaum) #41896_

**_(SEMVER-MAJOR)_**  **_stream_** _: remove thenable support (Robert Nagy) #40773_

**_(SEMVER-MAJOR)_**  **_tls_** _: move tls.parseCertString to end-of-life (Tobias Nießen) #41479_ “ __Node Document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Okay Now let’s see What’s New?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Experimental Fetch:
&lt;/h3&gt;

&lt;p&gt;The most exciting news is that version 18 will finally provide native fetch functionality in Node.js. For the longest time, Node did not contain support for fetch, which is a highly standard API on the web for conducting HTTP requests or any other type of network request, and Node did not support it by default. If you wanted to make an HTTP request, you had to either use third-party tools or write the request from scratch. The implementation comes from &lt;a href="https://undici.nodejs.org/#/"&gt;undici&lt;/a&gt; and is inspired by &lt;a href="https://github.com/node-fetch/node-fetch"&gt;node-fetch&lt;/a&gt; which was originally based upon &lt;a href="https://github.com/Ethan-Arrowood/undici-fetch"&gt;undici-fetch&lt;/a&gt;. The implementation strives to be as close to spec-compliant as possible, but some aspects would require a browser environment and are thus omitted.&lt;/p&gt;

&lt;p&gt;The API will remain experimental until further test coverage is introduced and the contributors have verified that the API implements as much of the requirements as is practicable.&lt;/p&gt;

&lt;p&gt;Because JavaScript is utilised in so many areas, this is actually wonderful news for the entire ecosystem.It’s utilised on the web, in Node.js, and in Cloudflare workers, for example.&lt;br&gt;&lt;br&gt;
 Cloudflare workers are currently shipping with their own proprietary implementation fetch. You’ll ought to install some few packages until you can use Node.There is a version for the web, so there is a lot of inconsistency along the route. Node is now providing formal support for this. That is, any environment that runs JavaScript on servers is almost certainly running Node. If it isn’t running Deno, it will support fetch by default, and because this is the team, the real team, doing it.&lt;/p&gt;

&lt;p&gt;This tweet by Matteo Collina indicates that in Node.js version 18, which is the next version of Node and even numbers are LTS versions as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RtnC4qRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/289/1%2ArvSWbMTF4ugPJpQuGjgWBw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RtnC4qRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/289/1%2ArvSWbMTF4ugPJpQuGjgWBw.png" alt="" width="289" height="163"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tweet on Node.js V18&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pZTNmdhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/736/1%2AuOpV5yx08_jbtwJaIL2-hA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pZTNmdhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/736/1%2AuOpV5yx08_jbtwJaIL2-hA.png" alt="" width="736" height="262"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;fetch API&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Undici Library in Node.js:
&lt;/h4&gt;

&lt;p&gt;If we look at this issue closely, we can see that Node utilised or primarily ported a library called Undici. What exactly is this library? It’s officially produced by the Node team, however it’s really an HTTP 1.1 full-fledged client written entirely in Node JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UNQqPtgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/371/1%2ALwxrOAd4dk8mdLqfdxOc_g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UNQqPtgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/371/1%2ALwxrOAd4dk8mdLqfdxOc_g.png" alt="" width="371" height="173"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Experimental test runner:
&lt;/h4&gt;

&lt;p&gt;The node:test module facilitates the creation of JavaScript tests that report results in TAP format. To access it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import test from ‘node:test’;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This module is only available under the node: scheme. __Node Document&lt;/p&gt;

&lt;p&gt;Node.js 18 features a test runner that is still in development.It is not meant to replace full-featured alternatives such as &lt;a href="https://jestjs.io/"&gt;Jest&lt;/a&gt; or &lt;a href="https://mochajs.org/"&gt;Mocha&lt;/a&gt;, but it does provide a quick and straightforward way to execute a test suite without any additional dependencies.&lt;/p&gt;

&lt;p&gt;It provides &lt;a href="https://testanything.org/"&gt;TAP&lt;/a&gt; output, which is extensively used, and makes the output easier to consume.&lt;/p&gt;

&lt;p&gt;More information may be found in the community blog post and the Node.js &lt;a href="https://testanything.org/"&gt;API docs&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1MYEEL3Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/744/1%2A1QWIJHwx0sgltGixqZQoMg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1MYEEL3Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/744/1%2A1QWIJHwx0sgltGixqZQoMg.png" alt="testing framework" width="744" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://nodejs.org/en/blog/announcements/v18-release-announce/"&gt;community blog post&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Note: The test runner module is only available using the node: prefix. The node: prefix denotes the loading of a core module. Omitting the prefix and importing 'test' would attempt to load a userland module. __Node Documents&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform support:
&lt;/h3&gt;

&lt;p&gt;As with other major releases, this one upgrades the minimum supported levels for systems and tooling needed to create Node.js. Node.js includes pre-built binaries for a variety of platforms. The minimum toolchains for each major release are evaluated and raised if needed.&lt;/p&gt;

&lt;p&gt;· Red Hat Enterprise Linux (RHEL) 8 now builds prebuilt binaries for Linux which are compatible with Linux distributions based on glibc 2.28 or later, such as Debian 10, RHEL 8, and Ubuntu 20.04.&lt;/p&gt;

&lt;p&gt;· MacOS 10.15 or later is now required for prebuilt binaries.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For AIX the minimum supported architecture has been raised from Power 7 to Power 8.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Due to issues with creating the V8 dependencies in Node.js, prebuilt binaries for 32-bit Windows will not be accessible at first. With a future V8 upgrade, we hope to restore 32-bit Windows binaries for Node.js 18.&lt;/p&gt;

&lt;h4&gt;
  
  
  According to Node.js &lt;a href="https://github.com/nodejs/node/blob/v18.x/BUILDING.md#supported-platforms"&gt;BUILDING.md&lt;/a&gt; file
&lt;/h4&gt;

&lt;p&gt;Supported platforms is current as of the branch/release to which it belongs&lt;/p&gt;

&lt;h3&gt;
  
  
  Input
&lt;/h3&gt;

&lt;p&gt;Node.js relies on V8 and libuv. We adopt a subset of their supported platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy
&lt;/h3&gt;

&lt;p&gt;There are three support tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1&lt;/strong&gt; : These platforms represent the majority of Node.js users. The Node.js Build Working Group maintains infrastructure for full test coverage. Test failures on tier 1 platforms will block releases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2&lt;/strong&gt; : These platforms represent smaller segments of the Node.js user base. The Node.js Build Working Group maintains infrastructure for full test coverage. Test failures on tier 2 platforms will block releases. Infrastructure issues may delay the release of binaries for these platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experimental&lt;/strong&gt; : May not compile or test suite may not pass. The core team does not create releases for these platforms. Test failures on experimental platforms do not block releases. Contributions to improve support for these platforms are welcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  V8 version 10.1
&lt;/h3&gt;

&lt;p&gt;The V8 engine has been updated to version 10.1 as part of Chromium 101. The following new features are added in Node.js 17.9.0 over the previous version:&lt;/p&gt;

&lt;h3&gt;
  
  
  findLast() &amp;amp; findLastIndex():
&lt;/h3&gt;

&lt;p&gt;With the findLast() and findLastIndex() methods, This use case is easily and ergonomically solved.They perform identically to their find() and findIndex() equivalents, with the exception that they begin their search at the end of the Array or TypedArray.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Twf2E7i4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/742/1%2ANzjGhytOGwEAYCMw3vBakA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Twf2E7i4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/742/1%2ANzjGhytOGwEAYCMw3vBakA.png" alt="" width="742" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improvements to the &lt;a href="https://v8.dev/blog/v8-release-99#intl.locale-extensions"&gt;Intl.Locale API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://v8.dev/blog/v8-release-99#intl-enumeration"&gt;Intl.supportedValuesOf function&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improved performance of &lt;a href="https://bugs.chromium.org/p/v8/issues/detail?id=9888"&gt;class fields&lt;/a&gt; and &lt;a href="https://bugs.chromium.org/p/v8/issues/detail?id=10793"&gt;private class methods&lt;/a&gt; (the initialization of them is now as fast as ordinary property stores).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A big thank you
&lt;/h3&gt;

&lt;p&gt;The Node.js releaser team, which created and supervised the Node.js 18 release, would like to thank everyone who contributes to Node.js releases.The Node.js project has a vast cast of contributors working on it, and each release is the culmination of their efforts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping up
&lt;/h3&gt;

&lt;p&gt;All of the new features and updates are detailed in this &lt;a href="https://nodejs.org/en/blog/announcements/v18-release-announce/"&gt;community post here&lt;/a&gt;.Check out the project &lt;a href="https://nodejs.org/en/"&gt;website&lt;/a&gt; to learn more about the Node.js community and how you can help.&lt;/p&gt;




</description>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>What`s new in React v18</title>
      <dc:creator>Muhammad Arshad</dc:creator>
      <pubDate>Thu, 07 Apr 2022 17:39:26 +0000</pubDate>
      <link>https://dev.to/bitlogix/whats-new-in-react-v18-27c8</link>
      <guid>https://dev.to/bitlogix/whats-new-in-react-v18-27c8</guid>
      <description>&lt;p&gt;All you have to know about React18&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AvYMJJwE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/392/1%2A4cbNCCbjAEa3L0SNERpSyA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AvYMJJwE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/392/1%2A4cbNCCbjAEa3L0SNERpSyA.png" alt="" width="392" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  An Introduction to React
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Do you work as a web developer?&lt;br&gt;&lt;br&gt;
If you answered yes, you should be aware that React.js is an open-source JavaScript library for creating user interfaces for single-page applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  REACT V18.0
&lt;/h4&gt;

&lt;p&gt;React v18.0 is a crucial new version of React released on March 8, 2022. It has numerous galvanic features and updates for the React.js development community. The great news is that it doesn’t break your existing code. So, what you learned still applies as well. You still write code the same way as before.&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s New?
&lt;/h4&gt;

&lt;p&gt;React 18 new features and refinements are possible thanks to the latest opt-in “concurrent rendering” mechanism in React 18 that enables React to create multiple versions of the UI at the same time. Though this change is mostly behind the scenes, it will unlock new possibilities to improve the app performance. — React document&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g1NvYBIZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/486/1%2Ajvd3dozUqyTlSIWcxz0-dA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g1NvYBIZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/486/1%2Ajvd3dozUqyTlSIWcxz0-dA.png" alt="" width="486" height="99"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Screenshot from React 18 Keynote slides.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, let’s talk about React 18 latest features and updates.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Concurrency&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;The most crucial addition in React 18 is concurrency. I think this is basically true for developers, though the story may be a bit more complicated for library maintainers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Concurrency is not a feature, per se. It’s a new behind-the-scenes mechanism that enables React to prepare multiple versions of your UI at the same time. You can think of concurrency as an implementation detail — it’s valuable because of the features that it unlocks. — React document&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  In other words:
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;“&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;The latest concept &amp;amp; set of features (plus APIs) that support with state update categorization urgent state updates can be categorized over minor urgent, long taking obstructing updates&lt;/em&gt; &lt;strong&gt;&lt;em&gt;”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Concurrency is all about processing various simultaneous state updates.&lt;/p&gt;

&lt;p&gt;React uses a heuristic to decide how “urgent” an update is, and lets you adjust it with a few lines of code so that you can achieve the desired user experience for every interaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  New APIs
&lt;/h3&gt;

&lt;p&gt;Now, you can enumerate react about state update that has lesser priority by using one of the new APIs introduced with React 18.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--toDNjCL5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/608/1%2APeQXCsbwa95LwHir1ZGpiQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--toDNjCL5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/608/1%2APeQXCsbwa95LwHir1ZGpiQ.png" alt="" width="608" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  useTransition() &amp;amp; StartTransition() Hook
&lt;/h4&gt;

&lt;p&gt;By default, all updates in React are considered urgent. That could create a complication when prompt updates are slowed down by dense updates.&lt;/p&gt;

&lt;p&gt;However, starting React 18 and the new concurrency features, you can spot some updates as disreputable and non-urgent — so-called transitions. That’s basically useful with dense UI updates, like filtering bragging lists.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wbtw44xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/606/1%2ATzKI4ZxjpuOqmP5qmxHfhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wbtw44xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/606/1%2ATzKI4ZxjpuOqmP5qmxHfhw.png" alt="" width="606" height="84"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Wrap a state update with &lt;strong&gt;startTransition()&lt;/strong&gt; to let React know that is possibly managed with lower priority.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AYKgj2U7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/501/1%2AlCQnb9L1PsxX74WdGYf5xQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AYKgj2U7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/501/1%2AlCQnb9L1PsxX74WdGYf5xQ.png" alt="" width="501" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  State Update Batching
&lt;/h4&gt;

&lt;p&gt;Batching is when React groups multiple state updates into a single re-render for better performance. Without automatic batching, we only batched updates inside React event handlers. Updates inside of promises, &lt;strong&gt;&lt;em&gt;setTimeout&lt;/em&gt;&lt;/strong&gt; , native event handlers, or any other event were not batched in React by default. With automatic batching, these updates will be batched automatically.&lt;/p&gt;

&lt;h4&gt;
  
  
  Suspense in Data Frameworks
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Suspense is not a data fetching library. It’s a mechanism for data fetching libraries to communicate to React that the data a component is reading is not ready yet. React can then wait for it to be ready and update the UI. — React document&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  What is Suspense?
&lt;/h4&gt;

&lt;p&gt;It is a lower-level engine API that can be used to pause a component’s accomplishment. How is that done? In a nutshell, it all boils down to a component throwing a Promise that is deflected by the engine. It will defer the execution of that component’s tree until the Promise is resolved or rejected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--icUH7DFE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/454/1%2AcAK4WgFiAxKPZ793dOrEUA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--icUH7DFE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/454/1%2AcAK4WgFiAxKPZ793dOrEUA.png" alt="" width="454" height="216"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Suspense component&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lazy loading exclusively means that you implement code splitting to only load code for an irrefutable component when needed. It can help with performance since less code has to be downloaded initially. This is often used in combination with routing. For example, you already used a suspend component to show a fallback component, for example, a loading spinner until the code for the lazily loaded component was downloaded. However, before React 18, you couldn’t use the suspense component if you also used server-side rendering. Now, of course, many apps might not use that, but if you did use it, you would not be able to use the suspense component because it would cause an error. But React 18 enables Suspense for SSR. In addition, Suspense will also be usable for general data fetching (not just code splitting) in the future.&lt;/p&gt;

&lt;h4&gt;
  
  
  New Client and Server Rendering APIs
&lt;/h4&gt;

&lt;p&gt;In the latest release of React 18, They redesign APIs and expose them for rendering on the client and server. These changes allow users to continue using the old APIs in React 17 mode while they upgrade to the new APIs in React 18.&lt;/p&gt;

&lt;h4&gt;
  
  
  React DOM Client
&lt;/h4&gt;

&lt;p&gt;As they said latest APIs are now exported from react-dom/client:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;createRoot&lt;/em&gt;&lt;/strong&gt; is a New method to create a root to render or unmount. And used instead of &lt;strong&gt;&lt;em&gt;ReactDOM.render&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;hydrateRoot&lt;/strong&gt; is a new method as well to hydrate a server-rendered application. Which is used instead of ReactDOM.hydrate in conjunction with the new React DOM Server APIs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: New features in React 18 don’t work without it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;createRoot and hydrateRoot both accept a new option called &lt;strong&gt;onRecoverableError&lt;/strong&gt; in case you want to be notified when React recovers from errors during rendering or hydration for logging. By default, React will use reportError, or console.error in the older browsers.&lt;/p&gt;

&lt;p&gt;React DOM Server&lt;/p&gt;

&lt;p&gt;These APIs are now exported from react-dom/server as well as react-dom/client and have full support for streaming Suspense on the server:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;renderToPipeableStream&lt;/strong&gt; is used for streaming in Node environments.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;renderToReadableStream&lt;/strong&gt; is used for modern edge runtime environments, such as Deno and Cloudflare workers.&lt;br&gt;&lt;br&gt;
According to ReactDocs.&lt;br&gt;&lt;br&gt;
The existing &lt;strong&gt;renderToString&lt;/strong&gt; method keeps working but is discouraged.&lt;/p&gt;

&lt;h4&gt;
  
  
  How to Update?
&lt;/h4&gt;

&lt;p&gt;Updating React 18 indeed is a piece of cake. Or you can say Updating is dreadfully easy and requires almost no work. You don’t need to re-learn React and don’t need to change your entire codebase. Installation instructions are the same.&lt;br&gt;&lt;br&gt;
All you have to do is to run:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To install the latest version of React:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T6c0XYiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/510/1%2AufIRSk5d9jOcYjS2b6XC_g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T6c0XYiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/510/1%2AufIRSk5d9jOcYjS2b6XC_g.png" alt="" width="510" height="209"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Install/Upgrade using NPM&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xfWtmi0a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/491/1%2AHSa9zD5ud0jNl_04buVi8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xfWtmi0a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/491/1%2AHSa9zD5ud0jNl_04buVi8w.png" alt="" width="491" height="170"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Install/Upgrade using YARN&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;After running that there’s one single change you have to make to your code base is that to take benefits of new features which unlocked and added by React 18 you have to go to your root entry file. Typically, index.js.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In index.js file replace the import of React DOM from React DOM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sG7IEjfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/624/1%2AuSzSV3UpLs3cbE5yh6XvSQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sG7IEjfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/624/1%2AuSzSV3UpLs3cbE5yh6XvSQ.png" alt="" width="624" height="288"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;index.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s all no other change is required. As I said before what you learned still applies as well you still write code the same way as you are before.&lt;/p&gt;




</description>
      <category>bitlogix</category>
      <category>reactjstutorials</category>
      <category>react18</category>
      <category>react</category>
    </item>
    <item>
      <title>Is Xamarin really dead?</title>
      <dc:creator>Muhammad Arshad</dc:creator>
      <pubDate>Mon, 27 Dec 2021 06:43:12 +0000</pubDate>
      <link>https://dev.to/bitlogix/is-xamarin-really-dead-57e2</link>
      <guid>https://dev.to/bitlogix/is-xamarin-really-dead-57e2</guid>
      <description>&lt;h4&gt;
  
  
  MAUI — Multi-Platform App UI rise from ashes of Xamarin
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KDxw7RJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AsEtBoxlzJqLCzfat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KDxw7RJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AsEtBoxlzJqLCzfat" alt="" width="880" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(source &lt;a href="https://www.facebook.com/ProjectPhoenixRisingAgain/"&gt;ProjectPhoenixRisingAgain&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;We must remember the year 2011, the year when Xamarin was firstly introduced to the market. Since then, it has improved a lot. There were many enhancements within the way to its current position. It has helped many companies and developers to create awesome cross-platform applications. But it’s a time to say goodbye to Xamarin and say hello to .NET MAUI.&lt;/p&gt;

&lt;p&gt;Let’s give a quick look at Xamarin’s past, present, and future&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Microsoft acquired Xamarin in 2016.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoftannounced a new face of cross-platform app development known as .NET MAUI.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What is .NET MAUI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.NET MAUI (Multi-platform App UI) is a cross-platform framework to develop native mobile and desktop apps using C# and XAML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of .NET MAUI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1-&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Project Structure:&lt;/em&gt;&lt;/strong&gt; It is based on a single project structure, Instead of Xamarin.Forms that contain separate projects for each targeted platform, .NET MUAI project will only contain a single project that will run on all supported platforms.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2-&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Design Patterns:&lt;/em&gt;&lt;/strong&gt; There are other benefits of .NET MAUI as it supports multiple design patterns to develop apps. It will support MVVM, MVU, and Blazor development patterns.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3-&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Performance:&lt;/em&gt;&lt;/strong&gt; A lot of people complain about Xamarin.Forms performance and app startup time, which is going to be addressed in .NET MAUI. It will replace custom renderers with handlers that are designed to be more performant and extensible. MAUI will also continue to benefit from performance improvements made in the dot net platform.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4-&lt;/em&gt; &lt;strong&gt;&lt;em&gt;MAUI Blazor:&lt;/em&gt;&lt;/strong&gt; Apps written in MAUI blazor can run on desktop, which means web developers can take benefits from UI written in Html/CSS and can also access device capabilities if they are targeting native applications. All the apps written in MAUI blazor can run on Android, iOS, and macOS as well.&lt;/p&gt;

&lt;p&gt;These are some of the benefits you can get by developing apps through .NET MAUI. Still, we are getting preview versions of .NET MAUI so we can expect a lot of things to come within the way to get a stable update of MAUI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future for Xamarin.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Xamarin will completely be replaced by .NET MAUI. and Microsoft will not support Xamarin after some time because it will be fully incorporated in the .NET ecosystem. MAUI promises to deliver better features than Xamarin so, we should embrace it as a more experienced player in cross-platform development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Besides all the benefits of .NET MAUI, here comes the migration process. As Microsoft shifted towards .NET MAUI then the previous Xamarin projects also need a sift. There are some guidelines given by Microsoft to shift existing Xamarin projects to MAUI. But we should not worry about migration until the stable version of MAUI lands in the market.&lt;/p&gt;

&lt;p&gt;You can also see migration steps from &lt;a href="https://docs.microsoft.com/en-us/dotnet/maui/get-started/migrate"&gt;this&lt;/a&gt; documentation given by Microsoft.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YbcRAp9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/56/0%2APWH1dnLuZV3Nwb_E.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YbcRAp9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/56/0%2APWH1dnLuZV3Nwb_E.jpeg" alt="" width="56" height="56"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Author&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://medium.com/@umair.hassan03/is-xamarin-really-dead-c6cd79ca4ecf"&gt;&lt;em&gt;https://medium.com&lt;/em&gt;&lt;/a&gt; &lt;em&gt;on December 27, 2021.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>xamarin</category>
      <category>maui</category>
      <category>net6</category>
      <category>mobileappdevelopment</category>
    </item>
    <item>
      <title>Hot-swapping the Web API for mobile application</title>
      <dc:creator>Muhammad Arshad</dc:creator>
      <pubDate>Tue, 21 Dec 2021 08:28:48 +0000</pubDate>
      <link>https://dev.to/bitlogix/hot-swapping-the-web-api-for-mobile-application-3ch8</link>
      <guid>https://dev.to/bitlogix/hot-swapping-the-web-api-for-mobile-application-3ch8</guid>
      <description>&lt;h4&gt;
  
  
  Reverse Proxy ( API Gateway ) to manage Web API versioning.
&lt;/h4&gt;

&lt;p&gt;Hot swapping term drive from hardware component replacement or addition without rebooting the system. When we talk hot-swapping in the Web API context, we can interpret it as no downtime when releasing new features or promoting from beta to public release.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why is a mobile application is the most suitable candidate?
&lt;/h4&gt;

&lt;p&gt;Mobile Apps are an ideal candidate for hot-swapping web API.&lt;/p&gt;

&lt;p&gt;Imagine you have a mobile app with live traffic, and you have a new feature release that needs to make generally available for public testing ( beta ). It will break the current app because API changed or has breaking changes.&lt;/p&gt;

&lt;p&gt;This creates a deadlock situation, so we need to release a new API version that will break the current app or if we go with releasing the mobile app that will not work with the old web API.&lt;/p&gt;

&lt;p&gt;We have a few possible solutions and work around here to resolve this issue.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add new fields if possible to handle current and upcoming requirements.&lt;/li&gt;
&lt;li&gt;Change URL routing like add v1, v2, v3 or add version in HTTP headers so new mobile app can consume new API on another URL prefixed route.&lt;/li&gt;
&lt;li&gt;Add central API in front that will route API on demand by mobile app.&lt;/li&gt;
&lt;li&gt;Add reverse-proxy ( API Gateway more princely here )&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s validate all four options and select an optimal solution to this problem.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add new fields if possible to handle current and upcoming requirements.&lt;/strong&gt;
Adding custom fields to prevent breaking changes might be possible in some cases. The solution is to introduce a new field to fulfill the latest requirements. But unfortunately, that does not solve your problem every time but more of this will add an extra burden on API to handle multiple fields that will result in the app no more remaining maintainable, scalable, and sustainable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API versioning by URL or Headers&lt;/strong&gt;
Another approach is to add API versioning so whenever a new app is released it will increment the API version as well and point the app to use the latest version, the previous version of the app will still work with the previous version. This option is widely adapted by mobile application developers/&lt;em&gt;companies&lt;/em&gt;&lt;strong&gt;&lt;em&gt;.&lt;br&gt;
Problem solved?&lt;/em&gt;&lt;/strong&gt; Yes, it is solved when you do not promote apps directly from beta to publicly available and change URL when public releasing this means you have to go through again with testing on Apple &amp;amp; Android Stores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Central API&lt;/strong&gt;
This approach is used when the app adds another Web API to load configuration, users base, and client base implementations by another Web API. Central API is responsible to establish initial communication between the app and the Web API server and performing central operations like authenticating users and loading configurations then it will tell the mobile app which endpoint they need to use for reset of the functionality. This approach is widely used for mobile applications that have multiple clients or multi-tenant nature. &lt;strong&gt;&lt;em&gt;This will introduce a single point of failure for every tenant or client when the central API goes down.&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse-proxy or API Gateway&lt;/strong&gt;
Add a reverse proxy that will site in front of Web API. That will provide extra perks like load-balancing, protection from attackers (WAF), caching, SSL, and gateway to manage requests.
Reverse-proxy retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the reverse proxy server it.
&lt;strong&gt;&lt;em&gt;This approach makes Web API enabled for hot-swapping.&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4jmlzQDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/661/1%2AtUnYNIDh4F8toQ3rpwU2bw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4jmlzQDa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/661/1%2AtUnYNIDh4F8toQ3rpwU2bw.jpeg" alt="" width="661" height="452"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Reverse Proxy Setup&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Tada&lt;/em&gt;!🎉We have winner here.
&lt;/h4&gt;

&lt;p&gt;[Next Post] I will share story in upcoming week on how we can implement solution based on reverse-proxy to enable hot swapping web API and manage multiple versions.&lt;/p&gt;

&lt;p&gt;Stay tune! follow our publication for more interesting stories.&lt;/p&gt;




</description>
      <category>apiversioning</category>
      <category>restfulapi</category>
      <category>reverseproxy</category>
      <category>mobileapplicationdev</category>
    </item>
  </channel>
</rss>
