<?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: Andrei Xavier de Oliveira Calazans</title>
    <description>The latest articles on DEV Community by Andrei Xavier de Oliveira Calazans (@andreicalazans).</description>
    <link>https://dev.to/andreicalazans</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%2F138052%2Fb1735f25-a63a-463b-9636-df1f528b9061.jpeg</url>
      <title>DEV Community: Andrei Xavier de Oliveira Calazans</title>
      <link>https://dev.to/andreicalazans</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreicalazans"/>
    <language>en</language>
    <item>
      <title>Fixing a PhaseScriptExecution Failure on React Native</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Tue, 29 Aug 2023 15:47:48 +0000</pubDate>
      <link>https://dev.to/andreicalazans/fixing-a-phasescriptexecution-failure-on-react-native-2c44</link>
      <guid>https://dev.to/andreicalazans/fixing-a-phasescriptexecution-failure-on-react-native-2c44</guid>
      <description>&lt;p&gt;When contributing to &lt;a href="https://github.com/react-native-share/react-native-share" rel="noopener noreferrer"&gt;react-native-share&lt;/a&gt; library I ran into an issue while building for iOS via Xcode. &lt;/p&gt;

&lt;p&gt;Their example app lacked a build setting that caused the PhaseScriptExecution step to fail. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;When building from Xcode I got this issue:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Command PhaseScriptExecution failed with a nonzero exit code&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Expanding the error you see a ton of logs:&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%2F7wp4j7n5p6up0cn6mpal.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%2F7wp4j7n5p6up0cn6mpal.png" alt="PhaseScriptExecution error logs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the bottom you see that it failed to find the &lt;code&gt;root/index.js&lt;/code&gt; file of the project.&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%2Fy12cqlt872ffvptbo76g.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%2Fy12cqlt872ffvptbo76g.png" alt="PhaseScriptExecution error logs where build actually failed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While their &lt;code&gt;start:ios&lt;/code&gt; NPM script call does set the entry path &lt;a href="https://github.com/react-native-share/react-native-share/blob/2bd15b71affcdba6b6aa977350982988de83d841/package.json#L81" rel="noopener noreferrer"&gt;here&lt;/a&gt; that won't get picked up by Xcode.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;Luckily for us that script phase is a build step within Xcode which we can change. &lt;/p&gt;

&lt;p&gt;In the Example app's build phases, we can change &lt;code&gt;Bundle React Native code and images&lt;/code&gt;'s shellscript that executes &lt;code&gt;react-native-xcode.sh&lt;/code&gt; and add the &lt;code&gt;ENTRY_FILE&lt;/code&gt; environment variable pointing to the right path.&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%2F50l9i0xgbkb8z81s4k6k.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%2F50l9i0xgbkb8z81s4k6k.png" alt="Screenshot of where the build phases is located in Xcode"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>xcode</category>
      <category>ios</category>
    </item>
    <item>
      <title>Do one thing at a time - prefering composition over branching logic</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Fri, 03 Jun 2022 12:56:21 +0000</pubDate>
      <link>https://dev.to/andreicalazans/do-one-thing-at-a-time-prefering-composition-over-branching-logic-18d4</link>
      <guid>https://dev.to/andreicalazans/do-one-thing-at-a-time-prefering-composition-over-branching-logic-18d4</guid>
      <description>&lt;p&gt;A simple yet powerful yea - do one thing at a time. Over time you will notice we apply that idea to many patterns in coding.&lt;/p&gt;

&lt;p&gt;Pattern to use: prefer extracting and composing differences over using boolean flags:&lt;/p&gt;

&lt;p&gt;Simple example is a setter function that uses a different key based on a boolean:&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="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isLoggedIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...ignore&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;storeKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isLoggedIn&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;logged_in_key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;logged_out_key&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="nx"&gt;setStoreData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;storeKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&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;It's best instead to extract storeKey as an argument&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="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;storeKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...ignore&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;setStoreData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;storeKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&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;While the above example is simple in projects we see many make this mistake. &lt;/p&gt;

&lt;p&gt;Classes are typically catch-all places of branching logic. &lt;/p&gt;

&lt;p&gt;Tip: everytime you see a branching logic question yourself if it won't benefit from composition. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;ps: This is a post zero of a series on writing better code, follow me for more&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What are some **experienced** pros or cons of a database you worked with?</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Fri, 26 Feb 2021 13:16:35 +0000</pubDate>
      <link>https://dev.to/andreicalazans/what-are-some-experienced-pros-or-cons-of-a-database-you-worked-with-1ip3</link>
      <guid>https://dev.to/andreicalazans/what-are-some-experienced-pros-or-cons-of-a-database-you-worked-with-1ip3</guid>
      <description>&lt;p&gt;I'm trying to compile a list of experienced pros and cons on different databases like: MySQL, MongoDB, DynamoDB, MariaDB, PostgreSQL, etc.,. Any database.&lt;/p&gt;

&lt;p&gt;What is a pro or con of a database you worked with that you can remember? I'm looking for real experiences, thanks = ).&lt;/p&gt;

&lt;p&gt;I’d love feedback&lt;br&gt;
&lt;a href="https://twitter.com/Andrei_Calazans/status/1365288230069878784"&gt;https://twitter.com/Andrei_Calazans/status/1365288230069878784&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Explicit Versus Implicit - The Cost Of Implicitness in Programming Comprehension</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Mon, 08 Feb 2021 11:58:20 +0000</pubDate>
      <link>https://dev.to/andreicalazans/explicit-versus-implicit-the-cost-of-implicitness-in-programming-comprehension-2kll</link>
      <guid>https://dev.to/andreicalazans/explicit-versus-implicit-the-cost-of-implicitness-in-programming-comprehension-2kll</guid>
      <description>&lt;p&gt;For better developer experience always prefer an explicit pattern.&lt;/p&gt;

&lt;p&gt;There is an overhead with understanding implicit code. It implies that you know a contextual knowledge not written in front of you. &lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript Throwable Functions
&lt;/h2&gt;

&lt;p&gt;In JavaScript, we have no way of signaling if a given function will throw or not. This is the implicitness of calling a function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// will it throw? Idk&lt;/span&gt;
&lt;span class="nx"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An alternative to make the error handling of a throwable function explicit is to request the user to pass an error callback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SomeFunction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;:&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;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onSuccess&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another alternative is to always return, and in this case you can return the result of a error value. See Maybe wrappers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;SomeFunction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Maybe&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  React's useEffect
&lt;/h2&gt;

&lt;p&gt;React's &lt;code&gt;useEffect&lt;/code&gt; is an example of the drawback to implicitness. Regardless to how powerful it is, it is hard to initially understand what it does by just looking at the code. On the contrary the class component lifecycles were very explicit to what it did: &lt;code&gt;componentDidMount&lt;/code&gt; for example. &lt;/p&gt;

&lt;h2&gt;
  
  
  Node JS Express' Error Middleware
&lt;/h2&gt;

&lt;p&gt;The Node JS Express library allows you to handle errors by passing a callback to the &lt;code&gt;app.use&lt;/code&gt; that has four arguments: &lt;code&gt;err, req, res, and next&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;While this function signature might seem obvious with a statically typed language if the type carries the name of its purpose, with plain JavaScript this is an implicit assumption that someone won't understand by just looking at it.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Express error handling&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Define error-handling middleware functions in the same way as other middleware functions, except error-handling functions have four arguments instead of three: (err, req, res, next).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;expressjs.com, &lt;a href="https://expressjs.com/en/guide/error-handling.html"&gt;https://expressjs.com/en/guide/error-handling.html&lt;/a&gt;, (Accessed Saturday, February 6, 2021)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anonymous inlined functions are examples that carry implicitness overhead. The previous example of Express's error handling function signature becomes even harder to understand when you see the &lt;code&gt;app.use(...)&lt;/code&gt; with an inlined callback. It is not clear at all what the callback is doing without reading the function block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Gotta read function block.&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&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;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="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Explicit understanding.&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handleErrorMiddleware&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Further On Anonymous Functions
&lt;/h2&gt;

&lt;p&gt;The same occurs in other examples. In my experience, JavaScript's Array.reduce is a common example of the implicitness overhead. If it takes a properly named function as a callback it becomes easier to grasp, else it requires more reading. &lt;/p&gt;

&lt;h2&gt;
  
  
  58% Is Spent On Comprehension
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://blog.feenk.com/developers-spend-most-of-their-time-figuri-7aj1ocjhe765vvlln8qqbuhto/"&gt;this article&lt;/a&gt; we spend most of our time in a codebase trying to understand it. If you agree that explicit code is easier to understand than it should influence how we write code. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This paper is quite interesting in that it describes in great details how the figures are obtained. And it says that Comprehension took on average ~58%&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;cite&gt;blog.feenk.com, &lt;a href="https://blog.feenk.com/developers-spend-most-of-their-time-figuri-7aj1ocjhe765vvlln8qqbuhto/"&gt;https://blog.feenk.com/developers-spend-most-of-their-time-figuri-7aj1ocjhe765vvlln8qqbuhto/&lt;/a&gt;, (Accessed Monday, February 1, 2021)&lt;/cite&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Plus
&lt;/h2&gt;

&lt;p&gt;Please do not confuse explicit versus implicit with declarative versus imperative. &lt;/p&gt;

&lt;p&gt;Following a good naming convention and not writing implicit code will take you a long way to having an easier to comprehend codebase. See &lt;a href="https://github.com/kettanaito/naming-cheatsheet"&gt;https://github.com/kettanaito/naming-cheatsheet&lt;/a&gt; for naming convetion recommendations. &lt;/p&gt;

&lt;p&gt;Despite the above highlighting how well named functions can help make a codebase more explict, using a purely functional programming library on your codebase to help can also add a lot of overhead to the codebase comprehension all because of the same reasons - implied knowledge. &lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Can we implement a Monorepo structure without Yarn Workspaces or Lerna?</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Wed, 05 Feb 2020 19:56:17 +0000</pubDate>
      <link>https://dev.to/andreicalazans/can-we-implement-a-monorepo-structure-without-yarn-workspaces-or-lerna-50cm</link>
      <guid>https://dev.to/andreicalazans/can-we-implement-a-monorepo-structure-without-yarn-workspaces-or-lerna-50cm</guid>
      <description>&lt;p&gt;In order to simplify dependency management, code reuse, and collaboration across teams, many projects have sought out to use the Monorepo structure.&lt;/p&gt;

&lt;p&gt;To implement this structure most projects decide either on &lt;code&gt;Yarn Workspaces&lt;/code&gt; or &lt;code&gt;Lerna&lt;/code&gt; to accomplish this feat. The difference between the two can be simplified to the fact &lt;code&gt;Lerna&lt;/code&gt; can do everything &lt;code&gt;Yarn Workspaces&lt;/code&gt; can including use it as a base, and &lt;a href="https://doppelmutzi.github.io/monorepo-lerna-yarn-workspaces/"&gt;provide sophisticated publishing and version management features to even publish projects independently from each other&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Yarn Workspaces&lt;/code&gt; has proven to be quite burdensome to maintain when working with React Native due to React Native's assumptions. Overall, as your codebase progress and new updates occur, you might need to update and fix the Monorepo structure. To avoid having this kind of issue, and to also enjoy similar benefits. You could instead structure your Monorepo without &lt;code&gt;Workspaces&lt;/code&gt;.&lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  How could we structure a Monorepo without &lt;code&gt;Yarn Workspaces&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;Under the same repository, you could have multiple independent projects linked by installing it via a relative path. Each project or module will have its own &lt;code&gt;package.json&lt;/code&gt; file which you can create with &lt;code&gt;yarn init&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- apps
   - app_one
   - app_two
- shared
   - module_one
   - module_two
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;app_one&lt;/code&gt; and &lt;code&gt;app_two&lt;/code&gt; can consume the shared module by installing it as follow:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add file:../../shared/module_one&lt;/code&gt;&lt;br&gt;
 &lt;br&gt;
This will add the following to your package.json &lt;/p&gt;

&lt;p&gt;&lt;code&gt;"module_one": "file:../../shared/module_one",&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note, To avoid reinstalling the same dependencies make sure to declare modules as &lt;code&gt;peerDependencies&lt;/code&gt; inside your shared modules if you also use them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This approach has the benefit of being compatible with NPM as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible Problems
&lt;/h2&gt;

&lt;p&gt;If your shared modules have external dependencies and for some reason, you install them by running yarn inside &lt;code&gt;shared/*&lt;/code&gt;, you have to always remember to remove the &lt;code&gt;node_modules&lt;/code&gt; folder before running your app, else you will have name collisions.&lt;/p&gt;

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

&lt;p&gt;There is a price to be paid by abstractions. This does not mean abstractions are negative, it only means we should look for simplicity to achieve our goals, else we will die maintaining. I hope this post displayed a simple and less abstracted way to handle &lt;code&gt;Monorepo&lt;/code&gt; structures. &lt;/p&gt;

</description>
      <category>monorepo</category>
      <category>lerna</category>
      <category>workspaces</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>How to interop between Objective-C and C++?</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Wed, 22 Jan 2020 21:09:46 +0000</pubDate>
      <link>https://dev.to/andreicalazans/how-to-interop-between-objective-c-and-c-5dgp</link>
      <guid>https://dev.to/andreicalazans/how-to-interop-between-objective-c-and-c-5dgp</guid>
      <description>&lt;p&gt;In the world of cross-platform, it is common for the need to create bridges of communication between different languages. While working with React Native and iOS, I stumbled on a need to interop with a C++ class. This post covers how you can communicate between Objective-C and C++ code.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using Objective-C++
&lt;/h1&gt;

&lt;p&gt;You can transform your Objective-C file (.m) to Objective-C++ (.mm). This by default enables you to call any C++ code in your Objective-C++ file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;MyObjective_c_file.mm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include "SomePrivateCppClass.h"

@implementation MyObjective_c_file
- (instancetype) init
{
  // Add your logic here
  SomePrivateCppClass::someMethod();
}

@end

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



&lt;p&gt;&lt;em&gt;Note - Sometimes you can have issues with this approach especially when your C++ interface is importing code that causes an issue for the Objective-C compiler. To overcome this you can do the next step&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Interopping with a C interface to call an Objective-C function from C++
&lt;/h1&gt;

&lt;p&gt;When file separation is required due to external dependencies. You can interop by using a C interface.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;C.interface.h&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void callFromCpp(const char *dataPayload);

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



&lt;p&gt;&lt;code&gt;MyObjective_c_file.mm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
@implementation MyObjective_c_file
...
 - (void)myMethod: (NSString *) dataPayload {

  // Your logic here
}

@end


void callFromCpp(const char *dataPayload) {
     NSString *convertedString = [[NSString alloc] initWithCString: dataPayload encoding:NSUTF8StringEncoding];

     MyObjective_c_file myInstance = [[MyObjective_c_file alloc] init];
    [MyObjective_c_file myMethod: convertedString];
}

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



&lt;p&gt;&lt;code&gt;YourCppClass.cpp&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YourCppClass::WhatEverMethod() {
  callFromCpp(stringData.c_str());
}

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



&lt;h1&gt;
  
  
  Passing pointers with a C interface to call a C++ method.
&lt;/h1&gt;

&lt;p&gt;When using a C interface, you can also pass a pointer of your C++ class in order to call it from your Objective-C++ code (This is ideal when you can't include your C++ file due to dependencies).&lt;/p&gt;

&lt;p&gt;In this case, you will instantiate your Objective-C class by calling a C function from your C++ method, then pass a pointer of your C++ class to your Objective-C interface for it to consume it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;C.interface.h&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void initFromCpp(long castBridgePointer);

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



&lt;p&gt;&lt;code&gt;MyObjective_c_file.mm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include "YourCppClass.h"

@implementation MyObjective_c_file
static YourCppClass *pointerToBridge;
...
- (void)storeCastBridgePointer: (long) ptr {
    pointerToBridge = (YourCppClass *) ptr;
}

@end

void initFromCpp(long castBridgePointer)
{
     MyObjective_c_file myInstance = [[MyObjective_c_file alloc] init];
    [myInstance storeCastBridgePointer: castBridgePointer];
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;YourCppClass.cpp&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YourCppClass::YourCppClass() {
  // whatever logic...

  initFromCpp((long) this);
}

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



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

&lt;p&gt;Interop between C++ and Objective-C is not too complicated. The purpose of this post is to bring both solutions, the plain Objective-C approach and C interface approach, into a single post where anyone can reference in the future&lt;/p&gt;

</description>
      <category>objectivec</category>
      <category>c</category>
      <category>ios</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>Bridging the emotional barrier of a code rewrite.</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Fri, 23 Aug 2019 19:47:58 +0000</pubDate>
      <link>https://dev.to/andreicalazans/bridging-the-emotional-barrier-of-a-code-rewrite-bad</link>
      <guid>https://dev.to/andreicalazans/bridging-the-emotional-barrier-of-a-code-rewrite-bad</guid>
      <description>&lt;p&gt;As a developer, we are like artists, we take pride in the code we write. Have you ever spent a significant number of hours, working on a feature, taking careful steps to test it and validate its functionality? If yes, then someone might have also told you to change it, if not completely at least partially. Well, I have been in that situation. Despite a few years of experience, the stress and emotional barrier generated by this change is always enormous.&lt;/p&gt;

&lt;p&gt;How to deal with this? It is unquestionable how hard it is to deal with this emotion, the feeling of being disappointed, unmotivated, discordant. We can not deny the fact that we are emotional beings easily tampered with. The first step is to admit your emotions. Think about them, try to identify why you are feeling in such a way. The second step is to vent it out, try to put your feelings in words, tell the story of how you arrived at that feeling. It is often common while venting, for the person to realize what is behind his/her emotional state because he/she is hearing him- herself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Someone
&lt;/h2&gt;

&lt;p&gt;Finding the ideal someone to talk to can be hard. It’s a good idea to have a friend, who you can be open about anything, who is not biased or intoxicated by the same feelings as you. You might want to avoid your coworkers for that reason since they share the same context, they might feel the same pain. It won’t help if the person you are venting to is motivating your negative feelings.&lt;/p&gt;

&lt;p&gt;Do not ignore your feelings. When a feeling was triggered by an underlying trauma, which we often have no clue about. It will easily go away after venting. When we try to evaluate something rationally and it does not make any sense our brain discards it. However, do not ignore this, if this feeling keeps coming back on similar triggers you should seek for help with professional therapists.&lt;/p&gt;

&lt;p&gt;Self-awareness is a great tool to deal with our emotions. Love yourself, take care of yourself. Thank you for reading this, I wrote this article after facing an emotional issue triggered by a code rewrite. It shocked me how intense I felt. After dealing with my emotional state rationally. I tried to think of all of the things which caused me to feel the way I felt. I found out a few interesting things about myself in this process which I believe made me grow emotionally. Hopefully, this text will inspire you to be aware of your emotions and take care of yourself.&lt;/p&gt;

&lt;p&gt;&lt;q&gt;Saying no is hard because we are a species that (sadly) treats agreement as affection and denial as rejection. When people disagree with us or turn us down, we routinely (and typically incorrectly) interpret it as evidence of enmity.&lt;/q&gt;&lt;br&gt;
&lt;a href="https://hbr.org/2019/08/how-to-say-no-at-work-without-making-enemies"&gt;https://hbr.org/2019/08/how-to-say-no-at-work-without-making-enemies&lt;/a&gt;&lt;/p&gt;

</description>
      <category>life</category>
      <category>sofwaredevelopment</category>
      <category>emotions</category>
    </item>
    <item>
      <title>Choosing between React Native and Flutter</title>
      <dc:creator>Andrei Xavier de Oliveira Calazans</dc:creator>
      <pubDate>Mon, 05 Aug 2019 23:13:41 +0000</pubDate>
      <link>https://dev.to/andreicalazans/choosing-between-react-native-and-flutter-36pp</link>
      <guid>https://dev.to/andreicalazans/choosing-between-react-native-and-flutter-36pp</guid>
      <description>&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcg8t4orp07x37epr5nl2.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcg8t4orp07x37epr5nl2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cross post from &lt;a href="https://andrei-calazans.com/posts/2019-07-30/choose-between-flutter-react-native/" rel="noopener noreferrer"&gt;my own blog post&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rise of Flutter brought doubt to the decisions for a new mobile project. This doubt did not exist back in 2016/17 when someone needed a cross-platform mobile solution. Back in 2016/17, there were fewer options¹, it was obvious that if you wanted a cross-platform solution with JavaScript you would choose React Native since it outperformed its competition.&lt;/p&gt;

&lt;p&gt;We are no longer questioning the viability of cross-platform, we are now deciding which solution is best. React Native and Flutter are great options to choose from despite other possible solutions e.g. Xamarin and others.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;What should one know before deciding which is the best option for their project's requirement?&lt;/b&gt;&lt;/p&gt;

&lt;h2&gt;Architecture&lt;/h2&gt;

&lt;p&gt;The first thing one must know is the core differences between React Native and Flutter. React Native, for each platform, renders native widgets, its JSX Components translates to native counterparts. This differs from previous attempts of using JavaScript to write mobile apps because despite using JavaScript to declare UI elements, under the hood React Native is rendering Platform Native UI Widgets.&lt;/p&gt;

&lt;p&gt;Flutter in the other hand does not render native widgets. It relies on a rendering engine to paint 2D UI elements. Flutter's engine, &lt;a href="https://en.wikipedia.org/wiki/C%2B%2B" rel="noopener noreferrer"&gt;written primarily in C++&lt;/a&gt;, provides low-level &lt;a href="https://en.wikipedia.org/wiki/Rendering_(computer_graphics)" rel="noopener noreferrer"&gt;rendering&lt;/a&gt; support using &lt;a href="https://en.wikipedia.org/wiki/Skia_Graphics_Engine" rel="noopener noreferrer"&gt;Google's Skia graphics library&lt;/a&gt;². This architecture decision provides Flutter with low-level control of rendering, enabling it thus for possible performance improvements.&lt;/p&gt;

&lt;p&gt;Most UI elements will not display much difference when rendered by a rendering engine or the platform's widgets. The difference is often noticed on elements that interact with Users. The native UI elements usually have unique behaviors on each platform. For example, screen transitions, on iOS the screens slide in, while on Android the slide feels more like a fade-in. Also Text Inputs, these have accessibilities built-in by the platform. The rendering engine has to create all the basic functionalities of the Text Input, copy and paste, the positioning of the cursor, and even displaying the text.&lt;/p&gt;

&lt;p&gt;The React Native core team has commented that it was a conscious decision to render native widgets instead of rendering UI elements themselves, according to them, it never seemed like the right approach for the following reasons; They didn't want to reimplement everything provided by the platform; The amount of work required to reimplement everything and keep up with platform updates, including support to multiple OS looks, both new and old³.&lt;/p&gt;

&lt;p&gt;While Flutter, on the other hand, it attempts to provide identical UI look and feel on all platforms, Reflectly, an App which was originally written in React Native, was rewritten in Flutter with this in mind⁴. Flutter enabled Reflectly Development team to write an App on iOS and expect the exact same look and feel on Android.&lt;/p&gt;

&lt;p&gt;It is unneglectable the effort of writing a cross-platform solution as Flutter requires more resources than React Native. Flutter is trying to match Native UI widget's behavior and although they have released a 1.0 version, this is an ongoing work⁵.&lt;/p&gt;

&lt;h2&gt;Developer Experience&lt;/h2&gt;

&lt;p&gt;When does Developer Experience decide the technology to use on a project? Hopefully, always. Good developer experience enables the Development team to write better Software. It keeps Developers happy. React Native made a big impact on mobile development by introducing hot reload and a declarative UI framework⁶. These two points increased developer productivity and overall happiness.&lt;/p&gt;

&lt;p&gt;After developing Mobile Apps for almost 3 years using React Native, using Flutter for the first time left me a great impression. It has done an amazing job at creating a great onboarding experience by providing Flutter Docter, Hot reload, and well documented Docs. It is safe to say that anyone with Mobile development experience can be productive with Flutter exceedingly fast.&lt;/p&gt;

&lt;p&gt;The React Native developer experience is an ongoing improvement process. Until last year, the attention given to the open-source community and consequently Developer Experience if compared to the efforts given today were smaller. Since the end of last year, React Native's core team has made perceptible efforts in improving how it interacts with the Open Source community. These efforts can be noted by the "What do you dislike about React Native?" versions &lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/64" rel="noopener noreferrer"&gt;1&lt;/a&gt; and &lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/134" rel="noopener noreferrer"&gt;2&lt;/a&gt;. Dan Abramov is currently in charge of revamping the hot reload module⁷ which has been subject to some bugs.&lt;/p&gt;

&lt;h2&gt;Available UI elements&lt;/h2&gt;

&lt;p&gt;Both Flutter and React Native provide all the UI elements you need, nonetheless, each has taken a different approach at this. Flutter tries to deliver first-class support to all the UI elements you might need, it has a long list of widgets⁷, its goal is essentially for you to not need any third-party integration, it encourages you to write your own Widget.&lt;/p&gt;

&lt;p&gt;React Native on the other hand, since it is an App rendering Native UI Widgets, it is striving towards a lean core⁹, where React Native will host the minimum set of modules you need, and leave any other dependencies to be managed by third-party open source. With React Native, there is no overhead on integrating native Views or Modules, just the cost of the communication through the bridge which is the reason for an architecture rewrite codenamed fabric¹⁰.&lt;/p&gt;

&lt;p&gt;React Native Lean Core strategy to some sounded like a bad idea, removing some of the UI elements from the main repo meant others outside of Facebook would have to step up to contribute. The Lean Core ended up being a positive surprise, All extracted modules have received maintainers and have been updated more than ever.&lt;/p&gt;

&lt;p&gt;It is important to note that if your App requires a native UI View integration, Flutter is responsible for all the rendering, therefore, when you need to render a Native UI View, either Android or iOS, it must embed the view in Flutter's hierarchy. For iOS the Documentation notes that this is an expensive operation¹¹ and I'll add that for Android it should not be super smooth since embedding views is not straight-forward.&lt;/p&gt;

&lt;h2&gt;Upgrading&lt;/h2&gt;

&lt;p&gt;Breaking changes are the main problem when updating. React Native's longer life has displayed multiple moments of frustration due to updates. This is not unique to React Native, it is rather a Software Development problem. Despite Flutter's shorter existence, it has already encountered moments where it needed to introduce a breaking change¹³. On a survey by Flutter's Core team, it questioned its users if breaking changes for a greater good was acceptable¹².&lt;/p&gt;

&lt;p&gt;There is evidence that both communities are doing it's best to solve the updating issues by providing clear documentation and tools to help. Flutter has provided a Github Wiki¹³ for such occasion. While React Native's Core team and community have created a tool¹⁴ and documentation to deal with this.&lt;/p&gt;

&lt;p&gt;Despite Core teams efforts, they are not exempt from the issues caused by targeted platform updates. AndroidX has been the reason for much efforts to correctly adapt to it¹⁵.&lt;/p&gt;

&lt;h2&gt;Community&lt;/h2&gt;

&lt;p&gt;For open-source projects, a healthy community can be a strong asset. Although Flutter is quite new, it has gotten a lot of traction and it is growing. Evidence of its growth can be noted in Insights from Flutter's first user survey of 2019¹². React Native's community is quite strong, driven by the whole JavaScript ecosystem. Both receive contributions from external development teams, most notably React Native has received many contributions from Companies like Microsoft, Callstack, and Expo¹⁹. Flutter has many external contributions as well, however, we are not able to clearly identify where they are coming from. In this category, Flutter and React Native have displayed confidence.&lt;/p&gt;

&lt;h2&gt;Performance&lt;/h2&gt;

&lt;p&gt;Hundreds of posts have been written about React Native versus Flutter, all of them affirm that Flutter is more performant than React Native, however, they all lack benchmarks. All these posts base themselves off the logic behind &lt;br&gt;
Flutter's architecture. In theory, Flutter is faster. The Dart code (both the SDK’s and yours) are ahead-of-time (AOT) compiled into a native, ARM and x86 libraries^20, thus, it is consumed faster by native code. React Native JavaScript thread must cross a bridge through batched async calls every 5 milliseconds. React Native, in theory, is also trying to solve the bridge issue with Fabric, which would enable JavaScript to communicate faster and synchronously through host records held in C++.&lt;/p&gt;

&lt;p&gt;If we wrote two apps, one in React Native and another in Flutter with a couple of screens you will not really notice a difference. Only one post that contained benchmarks was found on the internet¹⁶. It was a timer app, by looking at the benchmarks you can see that it displayed a very small difference between a Native Android, Flutter, and React Native. However, this post has a flaw, it did not evaluate the key points where performance really matters, which are Animation and large lists.&lt;/p&gt;

&lt;p&gt;Animation is a key point for performance. User will perceive the lag on a slow device. By default, React Native will loose in this test, it comes with an Animated API that is written and runs on the JavaScript thread. There are many posts about how the Animated API is slow¹⁷. To solve this issue you can use React Native Reanimated which solves this by running everything on the native thread¹⁸.&lt;/p&gt;

&lt;p&gt;Even with the possible improvement to animations with React Native, you can't deny the fact that Flutter is using Skia as a rendering engine. This is a very performant framework and in Flutter's release, it displayed the capability of rendering 120 FPS on an Android device.&lt;/p&gt;

&lt;p&gt;With lists, Flutter also does an amazing job by providing an out of the box API specifically for large lists. ListView.builder delivers virtualization out of the box with really high performance. On React Native, you can achieve acceptable performance with FlatList, however, it requires some tweaking as you can see on the &lt;a href="https://facebook.github.io/react-native/docs/next/optimizing-flatlist-configuration" rel="noopener noreferrer"&gt;Optimizing FlatList Configuration post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;React Native Time to interaction on Android Devices has also been subject of questioning. Nonetheless, in an effort to improve this, Facebook employed resources towards writing a JavaScript Engine to improve its performance on Android devices. &lt;a href="https://hermesengine.dev/" rel="noopener noreferrer"&gt;Hermes&lt;/a&gt; is a JavaScript Engine optimized for React Native.&lt;/p&gt;

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

&lt;p&gt;Some other points should also be taken into consideration, like the ecosystem. JavaScript is one of the most popular and used languages. On a recent project at G2i, the decision to go with React Native instead of Native development was mostly because we wanted to share all of the services and data logic already available in JavaScript. &lt;/p&gt;

&lt;p&gt;Flutter and React Native are great tools for cross-platform development. Either one will deliver a high-quality Application.&lt;/p&gt;

&lt;h2&gt;About me&lt;/h2&gt;

&lt;p&gt;Hi! I'm a Software Developer focused on JavaScript. I love talking about Software Development, you can always reach out if you would like to chat.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

&lt;h2&gt;References&lt;/h2&gt;

&lt;p&gt;[1] Most only considered React Native or PhoneGap/Cordova, which were very different from each other, Flutter despite not being a JavaScript solution but with Dart, which is very similar to JavaScript in its C like syntax, was not stable to be considered.&lt;br&gt;
[2] Wikipedia contributors. (2019, June 30). Flutter (software). In Wikipedia, The Free Encyclopedia. Retrieved 14:04, July 7, 2019, from &lt;a href="https://en.wikipedia.org/w/index.php?title=Flutter_(software)&amp;amp;oldid=904189137" rel="noopener noreferrer"&gt;https://en.wikipedia.org/w/index.php?title=Flutter_(software)&amp;amp;oldid=904189137&lt;/a&gt;&lt;br&gt;
[3] Reactiflux QA React Core Team. (2019, January 24). In reactiflux.com transcript, retrieved from &lt;a href="https://www.reactiflux.com/transcripts/react-native-team/#youitv-engine-one-currently-binds" rel="noopener noreferrer"&gt;https://www.reactiflux.com/transcripts/react-native-team/#youitv-engine-one-currently-binds&lt;/a&gt;&lt;br&gt;
[4] Reflectly App presentation. (2019, Mar 7). In Mobile World Congress 19, retrieved from &lt;a href="https://youtu.be/hdOxvNQbies?t=746" rel="noopener noreferrer"&gt;https://youtu.be/hdOxvNQbies?t=746&lt;/a&gt;&lt;br&gt;
[5] On July 7th, 2019, we can find the following issues in Flutter's repository related to UI elements behavior which would not exist if they were using Native UI Widgets: &lt;a href="https://github.com/flutter/flutter/issues/35068" rel="noopener noreferrer"&gt;https://github.com/flutter/flutter/issues/35068&lt;/a&gt;, &lt;a href="https://github.com/flutter/flutter/issues/35577" rel="noopener noreferrer"&gt;https://github.com/flutter/flutter/issues/35577&lt;/a&gt;, &lt;a href="https://github.com/flutter/flutter/issues/35694" rel="noopener noreferrer"&gt;https://github.com/flutter/flutter/issues/35694&lt;/a&gt;. There are more this is just an example.&lt;br&gt;
[6] We can see the evidence of this impact by the number of declarative mobile frameworks/toolkits which came after React Native. Flutter, SwiftUI, Jetpack Compose&lt;br&gt;
[7] Widget index &lt;a href="https://flutter.dev/docs/reference/widgets" rel="noopener noreferrer"&gt;https://flutter.dev/docs/reference/widgets&lt;/a&gt;&lt;br&gt;
[8] Ticket related to the broken hot reloading module &lt;a href="https://github.com/facebook/react-native/issues/18899" rel="noopener noreferrer"&gt;https://github.com/facebook/react-native/issues/18899&lt;/a&gt;&lt;br&gt;
[9] Ticket related to Lean Core &lt;a href="https://github.com/facebook/react-native/issues/23313" rel="noopener noreferrer"&gt;https://github.com/facebook/react-native/issues/23313&lt;/a&gt;&lt;br&gt;
[10] This is a good overview of the current bridge architecture, &lt;a href="https://hackernoon.com/understanding-react-native-bridge-concept-e9526066ddb8" rel="noopener noreferrer"&gt;https://hackernoon.com/understanding-react-native-bridge-concept-e9526066ddb8&lt;/a&gt;. Issue corresponding the Fabric architecture &lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/4" rel="noopener noreferrer"&gt;https://github.com/react-native-community/discussions-and-proposals/issues/4&lt;/a&gt;.&lt;br&gt;
[11] Embedding iOS views is an expensive operation and should be avoided when a Flutter equivalent is possible. &lt;a href="https://api.flutter.dev/flutter/widgets/UiKitView-class.html" rel="noopener noreferrer"&gt;https://api.flutter.dev/flutter/widgets/UiKitView-class.html&lt;/a&gt;&lt;br&gt;
[12] Insights from Flutter's first user survey of 2019. (2019, April 11). In Medium post, retrieved from &lt;a href="https://medium.com/flutter/insights-from-flutters-first-user-survey-of-2019-3659b02303a5" rel="noopener noreferrer"&gt;https://medium.com/flutter/insights-from-flutters-first-user-survey-of-2019-3659b02303a5&lt;/a&gt;&lt;br&gt;
[13] Flutter's Handling breaking changes Wiki &lt;a href="https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes" rel="noopener noreferrer"&gt;https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes&lt;/a&gt;&lt;br&gt;
[14] React Native's Upgreade Helper &lt;a href="https://github.com/react-native-community/upgrade-helper" rel="noopener noreferrer"&gt;https://github.com/react-native-community/upgrade-helper&lt;/a&gt;&lt;br&gt;
[15] Flutter and React Native's evidence of AndroidX support efforts. &lt;a href="https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility" rel="noopener noreferrer"&gt;https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/react-native-community/discussions-and-proposals/issues/129" rel="noopener noreferrer"&gt;https://github.com/react-native-community/discussions-and-proposals/issues/129&lt;/a&gt;&lt;br&gt;
[16] Alex Sulivan - Examining performance differences between Native, Flutter, and React Native mobile development. Thoughtbot dev site: &lt;a href="https://thoughtbot.com/blog/examining-performance-differences-between-native-flutter-and-react-native-mobile-development" rel="noopener noreferrer"&gt;https://thoughtbot.com/blog/examining-performance-differences-between-native-flutter-and-react-native-mobile-development&lt;/a&gt;&lt;br&gt;
[17] Various posts complaing of Animated performance: &lt;a href="https://www.reddit.com/r/reactnative/comments/6ex9y1/brutally_slow_animations_on_android/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/reactnative/comments/6ex9y1/brutally_slow_animations_on_android/&lt;/a&gt;, &lt;a href="https://stackoverflow.com/questions/48928229/slow-animations-in-reactnatives-android-app" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/48928229/slow-animations-in-reactnatives-android-app&lt;/a&gt;&lt;br&gt;
[18] react-native-reanimated &lt;a href="https://github.com/kmagiera/react-native-reanimated" rel="noopener noreferrer"&gt;https://github.com/kmagiera/react-native-reanimated&lt;/a&gt;&lt;br&gt;
[19] React Native Repository Pull Requests from Amazon, Callstack, and Expo&lt;br&gt;
[20] &lt;a href="https://flutter.dev/docs/resources/faq#how-does-flutter-run-my-code-on-android" rel="noopener noreferrer"&gt;https://flutter.dev/docs/resources/faq#how-does-flutter-run-my-code-on-android&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>flutter</category>
    </item>
  </channel>
</rss>
